/*! ***************************************************************************** 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"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var ts; (function (ts) { ts.versionMajorMinor = "3.0"; ts.version = ts.versionMajorMinor + ".0-dev"; })(ts || (ts = {})); (function (ts) { 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 = {})); (function (ts) { function createDictionaryObject() { var map = Object.create(null); map.__ = undefined; delete map.__; return map; } function createMap() { return new ts.MapCtr(); } ts.createMap = createMap; function createMapFromEntries(entries) { var map = createMap(); for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { var _a = entries_1[_i], key = _a[0], value = _a[1]; map.set(key, value); } return map; } ts.createMapFromEntries = createMapFromEntries; function createMapFromTemplate(template) { var map = new ts.MapCtr(); for (var key in template) { if (hasOwnProperty.call(template, key)) { map.set(key, template[key]); } } return map; } ts.createMapFromTemplate = createMapFromTemplate; ts.MapCtr = typeof Map !== "undefined" && "entries" in Map.prototype ? Map : shimMap(); function shimMap() { var MapIterator = (function () { function MapIterator(data, selector) { this.index = 0; this.data = data; this.selector = selector; this.keys = Object.keys(data); } MapIterator.prototype.next = function () { var index = this.index; if (index < this.keys.length) { this.index++; return { value: this.selector(this.data, this.keys[index]), done: false }; } return { value: undefined, done: true }; }; return MapIterator; }()); return (function () { function class_1() { this.data = createDictionaryObject(); this.size = 0; } class_1.prototype.get = function (key) { return this.data[key]; }; class_1.prototype.set = function (key, value) { if (!this.has(key)) { this.size++; } this.data[key] = value; return this; }; class_1.prototype.has = function (key) { return key in this.data; }; class_1.prototype.delete = function (key) { if (this.has(key)) { this.size--; delete this.data[key]; return true; } return false; }; class_1.prototype.clear = function () { this.data = createDictionaryObject(); this.size = 0; }; class_1.prototype.keys = function () { return new MapIterator(this.data, function (_data, key) { return key; }); }; class_1.prototype.values = function () { return new MapIterator(this.data, function (data, key) { return data[key]; }); }; class_1.prototype.entries = function () { return new MapIterator(this.data, function (data, key) { return [key, data[key]]; }); }; class_1.prototype.forEach = function (action) { for (var key in this.data) { action(this.data[key], key); } }; return class_1; }()); } function length(array) { return array ? array.length : 0; } ts.length = length; function forEach(array, callback) { if (array) { for (var i = 0; i < array.length; i++) { var result = callback(array[i], i); if (result) { return result; } } } return undefined; } ts.forEach = forEach; function firstDefined(array, callback) { if (array === undefined) { return undefined; } for (var i = 0; i < array.length; i++) { var result = callback(array[i], i); if (result !== undefined) { return result; } } return undefined; } ts.firstDefined = firstDefined; function firstDefinedIterator(iter, callback) { while (true) { var _a = iter.next(), value = _a.value, done = _a.done; if (done) { return undefined; } var result = callback(value); if (result !== undefined) { return result; } } } ts.firstDefinedIterator = firstDefinedIterator; function zipWith(arrayA, arrayB, callback) { var result = []; Debug.assertEqual(arrayA.length, arrayB.length); for (var i = 0; i < arrayA.length; i++) { result.push(callback(arrayA[i], arrayB[i], i)); } return result; } ts.zipWith = zipWith; function zipToIterator(arrayA, arrayB) { Debug.assertEqual(arrayA.length, arrayB.length); var i = 0; return { next: function () { if (i === arrayA.length) { return { value: undefined, done: true }; } i++; return { value: [arrayA[i - 1], arrayB[i - 1]], done: false }; } }; } ts.zipToIterator = zipToIterator; function zipToMap(keys, values) { Debug.assert(keys.length === values.length); var map = createMap(); for (var i = 0; i < keys.length; ++i) { map.set(keys[i], values[i]); } return map; } ts.zipToMap = zipToMap; function every(array, callback) { if (array) { for (var i = 0; i < array.length; i++) { if (!callback(array[i], i)) { return false; } } } return true; } ts.every = every; function find(array, predicate) { for (var i = 0; i < array.length; i++) { var value = array[i]; if (predicate(value, i)) { return value; } } return undefined; } ts.find = find; function findLast(array, predicate) { for (var i = array.length - 1; i >= 0; i--) { var value = array[i]; if (predicate(value, i)) { return value; } } return undefined; } ts.findLast = findLast; function findIndex(array, predicate, startIndex) { for (var i = startIndex || 0; i < array.length; i++) { if (predicate(array[i], i)) { return i; } } return -1; } ts.findIndex = findIndex; function findLastIndex(array, predicate, startIndex) { for (var i = startIndex === undefined ? array.length - 1 : startIndex; i >= 0; i--) { if (predicate(array[i], i)) { return i; } } return -1; } ts.findLastIndex = findLastIndex; function findMap(array, callback) { for (var i = 0; i < array.length; i++) { var result = callback(array[i], i); if (result) { return result; } } return Debug.fail(); } ts.findMap = findMap; function contains(array, value, equalityComparer) { if (equalityComparer === void 0) { equalityComparer = equateValues; } if (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; if (equalityComparer(v, value)) { return true; } } } return false; } ts.contains = contains; function arraysEqual(a, b, equalityComparer) { if (equalityComparer === void 0) { equalityComparer = equateValues; } return a.length === b.length && a.every(function (x, i) { return equalityComparer(x, b[i]); }); } ts.arraysEqual = arraysEqual; function indexOfAnyCharCode(text, charCodes, start) { for (var i = start || 0; i < text.length; i++) { if (contains(charCodes, text.charCodeAt(i))) { return i; } } return -1; } ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { for (var i = 0; i < array.length; i++) { var v = array[i]; if (predicate(v, i)) { count++; } } } return count; } ts.countWhere = countWhere; function filter(array, f) { if (array) { var len = array.length; var i = 0; while (i < len && f(array[i])) i++; if (i < len) { var result = array.slice(0, i); i++; while (i < len) { var item = array[i]; if (f(item)) { result.push(item); } i++; } return result; } } return array; } ts.filter = filter; function filterMutate(array, f) { var outIndex = 0; for (var i = 0; i < array.length; i++) { if (f(array[i], i, array)) { array[outIndex] = array[i]; outIndex++; } } array.length = outIndex; } ts.filterMutate = filterMutate; function clear(array) { array.length = 0; } ts.clear = clear; function map(array, f) { var result; if (array) { result = []; for (var i = 0; i < array.length; i++) { result.push(f(array[i], i)); } } return result; } ts.map = map; function mapIterator(iter, mapFn) { return { next: function () { var iterRes = iter.next(); return iterRes.done ? iterRes : { value: mapFn(iterRes.value), done: false }; } }; } ts.mapIterator = mapIterator; function sameMap(array, f) { if (array) { for (var i = 0; i < array.length; i++) { var item = array[i]; var mapped = f(item, i); if (item !== mapped) { var result = array.slice(0, i); result.push(mapped); for (i++; i < array.length; i++) { result.push(f(array[i], i)); } return result; } } } return array; } ts.sameMap = sameMap; function flatten(array) { var result; if (array) { result = []; for (var _i = 0, array_2 = array; _i < array_2.length; _i++) { var v = array_2[_i]; if (v) { if (isArray(v)) { addRange(result, v); } else { result.push(v); } } } } return result; } ts.flatten = flatten; function flatMap(array, mapfn) { var result; if (array) { result = []; for (var i = 0; i < array.length; i++) { var v = mapfn(array[i], i); if (v) { if (isArray(v)) { addRange(result, v); } else { result.push(v); } } } } return result; } ts.flatMap = flatMap; function flatMapIterator(iter, mapfn) { var first = iter.next(); if (first.done) { return ts.emptyIterator; } var currentIter = getIterator(first.value); return { next: function () { while (true) { var currentRes = currentIter.next(); if (!currentRes.done) { return currentRes; } var iterRes = iter.next(); if (iterRes.done) { return iterRes; } currentIter = getIterator(iterRes.value); } }, }; function getIterator(x) { var res = mapfn(x); return res === undefined ? ts.emptyIterator : isArray(res) ? arrayIterator(res) : res; } } ts.flatMapIterator = flatMapIterator; function sameFlatMap(array, mapfn) { var result; if (array) { for (var i = 0; i < array.length; i++) { var item = array[i]; var mapped = mapfn(item, i); if (result || item !== mapped || isArray(mapped)) { if (!result) { result = array.slice(0, i); } if (isArray(mapped)) { addRange(result, mapped); } else { result.push(mapped); } } } } return result || array; } ts.sameFlatMap = sameFlatMap; function mapAllOrFail(array, mapFn) { var result = []; for (var i = 0; i < array.length; i++) { var mapped = mapFn(array[i], i); if (mapped === undefined) { return undefined; } result.push(mapped); } return result; } ts.mapAllOrFail = mapAllOrFail; function mapDefined(array, mapFn) { var result = []; if (array) { for (var i = 0; i < array.length; i++) { var mapped = mapFn(array[i], i); if (mapped !== undefined) { result.push(mapped); } } } return result; } ts.mapDefined = mapDefined; function mapDefinedIterator(iter, mapFn) { return { next: function () { while (true) { var res = iter.next(); if (res.done) { return res; } var value = mapFn(res.value); if (value !== undefined) { return { value: value, done: false }; } } } }; } ts.mapDefinedIterator = mapDefinedIterator; ts.emptyIterator = { next: function () { return ({ value: undefined, done: true }); } }; function singleIterator(value) { var done = false; return { next: function () { var wasDone = done; done = true; return wasDone ? { value: undefined, done: true } : { value: value, done: false }; } }; } ts.singleIterator = singleIterator; function spanMap(array, keyfn, mapfn) { var result; if (array) { result = []; var len = array.length; var previousKey = void 0; var key = void 0; var start = 0; var pos = 0; while (start < len) { while (pos < len) { var value = array[pos]; key = keyfn(value, pos); if (pos === 0) { previousKey = key; } else if (key !== previousKey) { break; } pos++; } if (start < pos) { var v = mapfn(array.slice(start, pos), previousKey, start, pos); if (v) { result.push(v); } start = pos; } previousKey = key; pos++; } } return result; } ts.spanMap = spanMap; function mapEntries(map, f) { if (!map) { return undefined; } var result = createMap(); map.forEach(function (value, key) { var _a = f(key, value), newKey = _a[0], newValue = _a[1]; result.set(newKey, newValue); }); return result; } ts.mapEntries = mapEntries; function some(array, predicate) { if (array) { if (predicate) { for (var _i = 0, array_3 = array; _i < array_3.length; _i++) { var v = array_3[_i]; if (predicate(v)) { return true; } } } else { return array.length > 0; } } return false; } ts.some = some; function getRangesWhere(arr, pred, cb) { var start; for (var i = 0; i < arr.length; i++) { if (pred(arr[i])) { start = start === undefined ? i : start; } else { if (start !== undefined) { cb(start, i); start = undefined; } } } if (start !== undefined) cb(start, arr.length); } ts.getRangesWhere = getRangesWhere; function concatenate(array1, array2) { if (!some(array2)) return array1; if (!some(array1)) return array2; return array1.concat(array2); } ts.concatenate = concatenate; function deduplicateRelational(array, equalityComparer, comparer) { var indices = array.map(function (_, i) { return i; }); stableSortIndices(array, indices, comparer); var last = array[indices[0]]; var deduplicated = [indices[0]]; for (var i = 1; i < indices.length; i++) { var index = indices[i]; var item = array[index]; if (!equalityComparer(last, item)) { deduplicated.push(index); last = item; } } deduplicated.sort(); return deduplicated.map(function (i) { return array[i]; }); } function deduplicateEquality(array, equalityComparer) { var result = []; for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { var item = array_4[_i]; pushIfUnique(result, item, equalityComparer); } return result; } function deduplicate(array, equalityComparer, comparer) { return !array ? undefined : array.length === 0 ? [] : array.length === 1 ? array.slice() : comparer ? deduplicateRelational(array, equalityComparer, comparer) : deduplicateEquality(array, equalityComparer); } ts.deduplicate = deduplicate; function deduplicateSorted(array, comparer) { if (!array) return undefined; if (array.length === 0) return []; var last = array[0]; var deduplicated = [last]; for (var i = 1; i < array.length; i++) { var next = array[i]; switch (comparer(next, last)) { case true: case 0: continue; case -1: return Debug.fail("Array is unsorted."); } deduplicated.push(last = next); } return deduplicated; } function insertSorted(array, insert, compare) { if (array.length === 0) { array.push(insert); return; } var insertIndex = binarySearch(array, insert, identity, compare); if (insertIndex < 0) { array.splice(~insertIndex, 0, insert); } } ts.insertSorted = insertSorted; function sortAndDeduplicate(array, comparer, equalityComparer) { return deduplicateSorted(sort(array, comparer), equalityComparer || comparer); } ts.sortAndDeduplicate = sortAndDeduplicate; function arrayIsEqualTo(array1, array2, equalityComparer) { if (equalityComparer === void 0) { equalityComparer = equateValues; } if (!array1 || !array2) { return array1 === array2; } if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (!equalityComparer(array1[i], array2[i])) { return false; } } return true; } ts.arrayIsEqualTo = arrayIsEqualTo; function compact(array) { var result; if (array) { for (var i = 0; i < array.length; i++) { var v = array[i]; if (result || !v) { if (!result) { result = array.slice(0, i); } if (v) { result.push(v); } } } } return result || array; } ts.compact = compact; 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) { Debug.assertGreaterThanOrEqual(comparer(arrayB[offsetB], arrayB[offsetB - 1]), 0); } loopA: for (var startA = offsetA; offsetA < arrayA.length; offsetA++) { if (offsetA > startA) { Debug.assertGreaterThanOrEqual(comparer(arrayA[offsetA], arrayA[offsetA - 1]), 0); } switch (comparer(arrayB[offsetB], arrayA[offsetA])) { case -1: result.push(arrayB[offsetB]); continue loopB; case 0: continue loopB; case 1: continue loopA; } } } return result; } ts.relativeComplement = relativeComplement; function sum(array, prop) { var result = 0; for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { var v = array_5[_i]; result += v[prop]; } return result; } ts.sum = sum; function append(to, value) { if (value === undefined) return to; if (to === undefined) return [value]; to.push(value); return to; } ts.append = append; function toOffset(array, offset) { return offset < 0 ? array.length + offset : offset; } function addRange(to, from, start, end) { if (from === undefined || from.length === 0) return to; if (to === undefined) return from.slice(start, end); start = start === undefined ? 0 : toOffset(from, start); end = end === undefined ? from.length : toOffset(from, end); for (var i = start; i < end && i < from.length; i++) { if (from[i] !== undefined) { to.push(from[i]); } } return to; } ts.addRange = addRange; function pushIfUnique(array, toAdd, equalityComparer) { if (contains(array, toAdd, equalityComparer)) { return false; } else { array.push(toAdd); return true; } } ts.pushIfUnique = pushIfUnique; function appendIfUnique(array, toAdd, equalityComparer) { if (array) { pushIfUnique(array, toAdd, equalityComparer); return array; } else { return [toAdd]; } } ts.appendIfUnique = appendIfUnique; function stableSortIndices(array, indices, comparer) { indices.sort(function (x, y) { return comparer(array[x], array[y]) || compareValues(x, y); }); } function sort(array, comparer) { return array.slice().sort(comparer); } ts.sort = sort; function best(iter, isBetter) { var x = iter.next(); if (x.done) { return undefined; } var best = x.value; while (true) { var _a = iter.next(), value = _a.value, done = _a.done; if (done) { return best; } if (isBetter(value, best)) { best = value; } } } ts.best = best; function arrayIterator(array) { var i = 0; return { next: function () { if (i === array.length) { return { value: undefined, done: true }; } else { i++; return { value: array[i - 1], done: false }; } } }; } ts.arrayIterator = arrayIterator; function stableSort(array, comparer) { var indices = array.map(function (_, i) { return i; }); stableSortIndices(array, indices, comparer); return indices.map(function (i) { return array[i]; }); } ts.stableSort = stableSort; function rangeEquals(array1, array2, pos, end) { while (pos < end) { if (array1[pos] !== array2[pos]) { return false; } pos++; } return true; } ts.rangeEquals = rangeEquals; function elementAt(array, offset) { if (array) { offset = toOffset(array, offset); if (offset < array.length) { return array[offset]; } } return undefined; } ts.elementAt = elementAt; function firstOrUndefined(array) { return array.length === 0 ? undefined : array[0]; } ts.firstOrUndefined = firstOrUndefined; function first(array) { Debug.assert(array.length !== 0); return array[0]; } ts.first = first; function lastOrUndefined(array) { return array.length === 0 ? undefined : array[array.length - 1]; } ts.lastOrUndefined = lastOrUndefined; function last(array) { Debug.assert(array.length !== 0); return array[array.length - 1]; } ts.last = last; function singleOrUndefined(array) { return array && array.length === 1 ? array[0] : undefined; } ts.singleOrUndefined = singleOrUndefined; function singleOrMany(array) { return array && array.length === 1 ? array[0] : array; } ts.singleOrMany = singleOrMany; function replaceElement(array, index, value) { var result = array.slice(0); result[index] = value; return result; } ts.replaceElement = replaceElement; function binarySearch(array, value, keySelector, keyComparer, offset) { if (!array || array.length === 0) { return -1; } var low = offset || 0; var high = array.length - 1; var key = keySelector(value); while (low <= high) { var middle = low + ((high - low) >> 1); var midKey = keySelector(array[middle]); switch (keyComparer(midKey, key)) { case -1: low = middle + 1; break; case 0: return middle; case 1: high = middle - 1; break; } } return ~low; } ts.binarySearch = binarySearch; function reduceLeft(array, f, initial, start, count) { if (array && array.length > 0) { var size = array.length; if (size > 0) { var pos = start === undefined || start < 0 ? 0 : start; var end = count === undefined || pos + count > size - 1 ? size - 1 : pos + count; var result = void 0; if (arguments.length <= 2) { result = array[pos]; pos++; } else { result = initial; } while (pos <= end) { result = f(result, array[pos], pos); pos++; } return result; } } return initial; } ts.reduceLeft = reduceLeft; var hasOwnProperty = Object.prototype.hasOwnProperty; function hasProperty(map, key) { return hasOwnProperty.call(map, key); } ts.hasProperty = hasProperty; function getProperty(map, key) { return hasOwnProperty.call(map, key) ? map[key] : undefined; } ts.getProperty = getProperty; function getOwnKeys(map) { var keys = []; for (var key in map) { if (hasOwnProperty.call(map, key)) { keys.push(key); } } return keys; } ts.getOwnKeys = getOwnKeys; function getOwnValues(sparseArray) { var values = []; for (var key in sparseArray) { if (hasOwnProperty.call(sparseArray, key)) { values.push(sparseArray[key]); } } return values; } ts.getOwnValues = getOwnValues; function arrayFrom(iterator, map) { var _a; var result = []; for (var _b = iterator.next(), value = _b.value, done = _b.done; !done; _a = iterator.next(), value = _a.value, done = _a.done, _a) { result.push(map ? map(value) : value); } return result; } ts.arrayFrom = arrayFrom; function assign(t) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } for (var _a = 0, args_1 = args; _a < args_1.length; _a++) { var arg = args_1[_a]; for (var p in arg) { if (hasProperty(arg, p)) { t[p] = arg[p]; } } } return t; } ts.assign = assign; function equalOwnProperties(left, right, equalityComparer) { if (equalityComparer === void 0) { equalityComparer = equateValues; } if (left === right) return true; if (!left || !right) return false; for (var key in left) { if (hasOwnProperty.call(left, key)) { if (!hasOwnProperty.call(right, key) === undefined) return false; if (!equalityComparer(left[key], right[key])) return false; } } for (var key in right) { if (hasOwnProperty.call(right, key)) { if (!hasOwnProperty.call(left, key)) return false; } } return true; } ts.equalOwnProperties = equalOwnProperties; function arrayToMap(array, makeKey, makeValue) { if (makeValue === void 0) { makeValue = identity; } var result = createMap(); for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { var value = array_6[_i]; var key = makeKey(value); if (key !== undefined) result.set(key, makeValue(value)); } return result; } ts.arrayToMap = arrayToMap; function arrayToNumericMap(array, makeKey, makeValue) { if (makeValue === void 0) { makeValue = identity; } var result = []; for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { var value = array_7[_i]; result[makeKey(value)] = makeValue(value); } return result; } ts.arrayToNumericMap = arrayToNumericMap; function arrayToMultiMap(values, makeKey, makeValue) { if (makeValue === void 0) { makeValue = identity; } var result = createMultiMap(); for (var _i = 0, values_1 = values; _i < values_1.length; _i++) { var value = values_1[_i]; result.add(makeKey(value), makeValue(value)); } return result; } ts.arrayToMultiMap = arrayToMultiMap; function group(values, getGroupId) { return arrayFrom(arrayToMultiMap(values, getGroupId).values()); } ts.group = group; function clone(object) { var result = {}; for (var id in object) { if (hasOwnProperty.call(object, id)) { result[id] = object[id]; } } return result; } ts.clone = clone; function extend(first, second) { var result = {}; for (var id in second) { if (hasOwnProperty.call(second, id)) { result[id] = second[id]; } } for (var id in first) { if (hasOwnProperty.call(first, id)) { result[id] = first[id]; } } return result; } ts.extend = extend; function createMultiMap() { var map = createMap(); map.add = multiMapAdd; map.remove = multiMapRemove; return map; } ts.createMultiMap = createMultiMap; function multiMapAdd(key, value) { var values = this.get(key); if (values) { values.push(value); } else { this.set(key, values = [value]); } return values; } function multiMapRemove(key, value) { var values = this.get(key); if (values) { unorderedRemoveItem(values, value); if (!values.length) { this.delete(key); } } } function isArray(value) { return Array.isArray ? Array.isArray(value) : value instanceof Array; } ts.isArray = isArray; function toArray(value) { return isArray(value) ? value : [value]; } ts.toArray = toArray; function isString(text) { return typeof text === "string"; } ts.isString = isString; function tryCast(value, test) { return value !== undefined && test(value) ? value : undefined; } ts.tryCast = tryCast; function cast(value, test) { if (value !== undefined && test(value)) return value; return Debug.fail("Invalid cast. The supplied value " + value + " did not pass the test '" + Debug.getFunctionName(test) + "'."); } ts.cast = cast; function noop(_) { } ts.noop = noop; function returnFalse() { return false; } ts.returnFalse = returnFalse; function returnTrue() { return true; } ts.returnTrue = returnTrue; function identity(x) { return x; } ts.identity = identity; function toLowerCase(x) { return x.toLowerCase(); } ts.toLowerCase = toLowerCase; function notImplemented() { throw new Error("Not implemented"); } ts.notImplemented = notImplemented; function memoize(callback) { var value; return function () { if (callback) { value = callback(); callback = undefined; } return value; }; } ts.memoize = memoize; function chain(a, b, c, d, e) { if (e) { var args_2 = []; for (var i = 0; i < arguments.length; i++) { args_2[i] = arguments[i]; } return function (t) { return compose.apply(void 0, map(args_2, function (f) { return f(t); })); }; } else if (d) { return function (t) { return compose(a(t), b(t), c(t), d(t)); }; } else if (c) { return function (t) { return compose(a(t), b(t), c(t)); }; } else if (b) { return function (t) { return compose(a(t), b(t)); }; } else if (a) { return function (t) { return compose(a(t)); }; } else { return function (_) { return function (u) { return u; }; }; } } ts.chain = chain; function compose(a, b, c, d, e) { if (e) { var args_3 = []; for (var i = 0; i < arguments.length; i++) { args_3[i] = arguments[i]; } return function (t) { return reduceLeft(args_3, function (u, f) { return f(u); }, t); }; } else if (d) { return function (t) { return d(c(b(a(t)))); }; } else if (c) { return function (t) { return c(b(a(t))); }; } else if (b) { return function (t) { return b(a(t)); }; } else if (a) { return function (t) { return a(t); }; } else { return function (t) { return t; }; } } 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; Debug.isDebugging = false; function shouldAssert(level) { return Debug.currentAssertionLevel >= level; } Debug.shouldAssert = shouldAssert; function assert(expression, message, verboseDebugInfo, stackCrawlMark) { if (!expression) { if (verboseDebugInfo) { message += "\r\nVerbose Debug Information: " + (typeof verboseDebugInfo === "string" ? verboseDebugInfo : verboseDebugInfo()); } fail(message ? "False expression: " + message : "False expression.", stackCrawlMark || assert); } } Debug.assert = assert; function assertEqual(a, b, msg, msg2) { if (a !== b) { var message = msg ? msg2 ? msg + " " + msg2 : msg : ""; fail("Expected " + a + " === " + b + ". " + message); } } Debug.assertEqual = assertEqual; function assertLessThan(a, b, msg) { if (a >= b) { fail("Expected " + a + " < " + b + ". " + (msg || "")); } } Debug.assertLessThan = assertLessThan; function assertLessThanOrEqual(a, b) { if (a > b) { fail("Expected " + a + " <= " + b); } } Debug.assertLessThanOrEqual = assertLessThanOrEqual; function assertGreaterThanOrEqual(a, b) { if (a < b) { fail("Expected " + a + " >= " + b); } } Debug.assertGreaterThanOrEqual = assertGreaterThanOrEqual; function fail(message, stackCrawlMark) { debugger; var e = new Error(message ? "Debug Failure. " + message : "Debug Failure."); if (Error.captureStackTrace) { Error.captureStackTrace(e, stackCrawlMark || fail); } throw e; } Debug.fail = fail; function assertDefined(value, message) { if (value === undefined || value === null) return fail(message); return value; } Debug.assertDefined = assertDefined; function assertEachDefined(value, message) { for (var _i = 0, value_1 = value; _i < value_1.length; _i++) { var v = value_1[_i]; assertDefined(v, message); } return value; } Debug.assertEachDefined = assertEachDefined; function assertNever(member, message, stackCrawlMark) { return fail(message || "Illegal value: " + member, stackCrawlMark || assertNever); } Debug.assertNever = assertNever; function getFunctionName(func) { if (typeof func !== "function") { return ""; } else if (func.hasOwnProperty("name")) { return func.name; } else { var text = Function.prototype.toString.call(func); var match = /^function\s+([\w\$]+)\s*\(/.exec(text); return match ? match[1] : ""; } } Debug.getFunctionName = getFunctionName; })(Debug = ts.Debug || (ts.Debug = {})); function equateValues(a, b) { return a === b; } ts.equateValues = equateValues; function equateStringsCaseInsensitive(a, b) { return a === b || a !== undefined && b !== undefined && a.toUpperCase() === b.toUpperCase(); } ts.equateStringsCaseInsensitive = equateStringsCaseInsensitive; function equateStringsCaseSensitive(a, b) { return equateValues(a, b); } ts.equateStringsCaseSensitive = equateStringsCaseSensitive; function compareComparableValues(a, b) { return a === b ? 0 : a === undefined ? -1 : b === undefined ? 1 : a < b ? -1 : 1; } function compareValues(a, b) { return compareComparableValues(a, b); } ts.compareValues = compareValues; function min(a, b, compare) { return compare(a, b) === -1 ? a : b; } ts.min = min; function compareStringsCaseInsensitive(a, b) { if (a === b) return 0; if (a === undefined) return -1; if (b === undefined) return 1; a = a.toUpperCase(); b = b.toUpperCase(); return a < b ? -1 : a > b ? 1 : 0; } ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function compareStringsCaseSensitive(a, b) { return compareComparableValues(a, b); } ts.compareStringsCaseSensitive = compareStringsCaseSensitive; function getStringComparer(ignoreCase) { return ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive; } ts.getStringComparer = getStringComparer; var createUIStringComparer = (function () { var defaultComparer; var enUSComparer; var stringComparerFactory = getStringComparerFactory(); return createStringComparer; function compareWithCallback(a, b, comparer) { if (a === b) return 0; if (a === undefined) return -1; if (b === undefined) return 1; var value = comparer(a, b); return value < 0 ? -1 : value > 0 ? 1 : 0; } function createIntlCollatorStringComparer(locale) { var comparer = new Intl.Collator(locale, { usage: "sort", sensitivity: "variant" }).compare; return function (a, b) { return compareWithCallback(a, b, comparer); }; } function createLocaleCompareStringComparer(locale) { if (locale !== undefined) return createFallbackStringComparer(); return function (a, b) { return compareWithCallback(a, b, compareStrings); }; function compareStrings(a, b) { return a.localeCompare(b); } } function createFallbackStringComparer() { 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 : a > b ? 1 : 0; } } function getStringComparerFactory() { if (typeof Intl === "object" && typeof Intl.Collator === "function") { return createIntlCollatorStringComparer; } if (typeof String.prototype.localeCompare === "function" && typeof String.prototype.toLocaleUpperCase === "function" && "a".localeCompare("B") < 0) { return createLocaleCompareStringComparer; } return createFallbackStringComparer; } function createStringComparer(locale) { if (locale === undefined) { return defaultComparer || (defaultComparer = stringComparerFactory(locale)); } else if (locale === "en-US") { return enUSComparer || (enUSComparer = stringComparerFactory(locale)); } else { return stringComparerFactory(locale); } } })(); var uiComparerCaseSensitive; var uiLocale; function getUILocale() { return uiLocale; } ts.getUILocale = getUILocale; function setUILocale(value) { if (uiLocale !== value) { uiLocale = value; uiComparerCaseSensitive = undefined; } } ts.setUILocale = setUILocale; 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 : a === undefined ? -1 : b === undefined ? 1 : comparer(a[key], b[key]); } ts.compareProperties = compareProperties; function compareBooleans(a, b) { return compareValues(a ? 1 : 0, b ? 1 : 0); } ts.compareBooleans = compareBooleans; 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; var bestCandidate; var justCheckExactMatches = false; var nameLowerCase = name.toLowerCase(); for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) { var candidate = candidates_1[_i]; var candidateName = getName(candidate); if (candidateName !== undefined && Math.abs(candidateName.length - nameLowerCase.length) <= maximumLengthDifference) { var candidateNameLowerCase = candidateName.toLowerCase(); if (candidateNameLowerCase === nameLowerCase) { return candidate; } if (justCheckExactMatches) { continue; } if (candidateName.length < 3) { continue; } var distance = levenshteinWithMax(nameLowerCase, candidateNameLowerCase, bestDistance - 1); if (distance === undefined) { continue; } if (distance < 3) { justCheckExactMatches = true; bestCandidate = candidate; } else { Debug.assert(distance < bestDistance); bestDistance = distance; bestCandidate = candidate; } } } return bestCandidate; } ts.getSpellingSuggestion = getSpellingSuggestion; function levenshteinWithMax(s1, s2, max) { var previous = new Array(s2.length + 1); var current = new Array(s2.length + 1); var big = max + 1; for (var i = 0; i <= s2.length; i++) { previous[i] = i; } for (var i = 1; i <= s1.length; i++) { var c1 = s1.charCodeAt(i - 1); var minJ = i > max ? i - max : 1; var maxJ = s2.length > max + i ? max + i : s2.length; current[0] = i; var colMin = i; for (var j = 1; j < minJ; j++) { current[j] = big; } for (var j = minJ; j <= maxJ; j++) { var dist = c1 === s2.charCodeAt(j - 1) ? previous[j - 1] : Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + 2); current[j] = dist; colMin = Math.min(colMin, dist); } for (var j = maxJ + 1; j <= s2.length; j++) { current[j] = big; } if (colMin > max) { return undefined; } var temp = previous; previous = current; current = temp; } var res = previous[s2.length]; return res > max ? undefined : res; } function endsWith(str, suffix) { var expectedPos = str.length - suffix.length; return expectedPos >= 0 && str.indexOf(suffix, expectedPos) === expectedPos; } ts.endsWith = endsWith; function removeSuffix(str, suffix) { return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : str; } ts.removeSuffix = removeSuffix; function tryRemoveSuffix(str, suffix) { return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : undefined; } ts.tryRemoveSuffix = tryRemoveSuffix; function stringContains(str, substring) { return str.indexOf(substring) !== -1; } ts.stringContains = stringContains; function fileExtensionIs(path, extension) { return path.length > extension.length && endsWith(path, extension); } ts.fileExtensionIs = fileExtensionIs; function fileExtensionIsOneOf(path, extensions) { for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { var extension = extensions_1[_i]; if (fileExtensionIs(path, extension)) { return true; } } return false; } ts.fileExtensionIsOneOf = fileExtensionIsOneOf; function removeMinAndVersionNumbers(fileName) { var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/; return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, ""); } ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers; function orderedRemoveItem(array, item) { for (var i = 0; i < array.length; i++) { if (array[i] === item) { orderedRemoveItemAt(array, i); return true; } } return false; } ts.orderedRemoveItem = orderedRemoveItem; function orderedRemoveItemAt(array, index) { for (var i = index; i < array.length - 1; i++) { array[i] = array[i + 1]; } array.pop(); } ts.orderedRemoveItemAt = orderedRemoveItemAt; function unorderedRemoveItemAt(array, index) { array[index] = array[array.length - 1]; array.pop(); } ts.unorderedRemoveItemAt = unorderedRemoveItemAt; function unorderedRemoveItem(array, item) { return unorderedRemoveFirstItemWhere(array, function (element) { return element === item; }); } ts.unorderedRemoveItem = unorderedRemoveItem; function unorderedRemoveFirstItemWhere(array, predicate) { for (var i = 0; i < array.length; i++) { if (predicate(array[i])) { unorderedRemoveItemAt(array, i); return true; } } return false; } function createGetCanonicalFileName(useCaseSensitiveFileNames) { return useCaseSensitiveFileNames ? identity : toLowerCase; } ts.createGetCanonicalFileName = createGetCanonicalFileName; function patternText(_a) { var prefix = _a.prefix, suffix = _a.suffix; return prefix + "*" + suffix; } ts.patternText = patternText; function matchedText(pattern, candidate) { Debug.assert(isPatternMatch(pattern, candidate)); return candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length); } ts.matchedText = matchedText; function findBestPatternMatch(values, getPattern, candidate) { var matchedValue; var longestMatchPrefixLength = -1; for (var _i = 0, values_2 = values; _i < values_2.length; _i++) { var v = values_2[_i]; var pattern = getPattern(v); if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) { longestMatchPrefixLength = pattern.prefix.length; matchedValue = v; } } return matchedValue; } ts.findBestPatternMatch = findBestPatternMatch; function startsWith(str, prefix) { return str.lastIndexOf(prefix, 0) === 0; } ts.startsWith = startsWith; function removePrefix(str, prefix) { return startsWith(str, prefix) ? str.substr(prefix.length) : str; } ts.removePrefix = removePrefix; function tryRemovePrefix(str, prefix) { return startsWith(str, prefix) ? str.substring(prefix.length) : undefined; } ts.tryRemovePrefix = tryRemovePrefix; function isPatternMatch(_a, candidate) { var prefix = _a.prefix, suffix = _a.suffix; return candidate.length >= prefix.length + suffix.length && startsWith(candidate, prefix) && endsWith(candidate, suffix); } function and(f, g) { return function (arg) { return f(arg) && g(arg); }; } ts.and = and; function or(f, g) { return function (arg) { return f(arg) || g(arg); }; } ts.or = or; function assertTypeIsNever(_) { } ts.assertTypeIsNever = assertTypeIsNever; function singleElementArray(t) { return t === undefined ? undefined : [t]; } ts.singleElementArray = singleElementArray; function enumerateInsertsAndDeletes(newItems, oldItems, comparer, inserted, deleted, unchanged) { unchanged = unchanged || noop; var newIndex = 0; var oldIndex = 0; var newLen = newItems.length; var oldLen = oldItems.length; while (newIndex < newLen && oldIndex < oldLen) { var newItem = newItems[newIndex]; var oldItem = oldItems[oldIndex]; var compareResult = comparer(newItem, oldItem); if (compareResult === -1) { inserted(newItem); newIndex++; } else if (compareResult === 1) { deleted(oldItem); oldIndex++; } else { unchanged(oldItem, newItem); newIndex++; oldIndex++; } } while (newIndex < newLen) { inserted(newItems[newIndex++]); } while (oldIndex < oldLen) { deleted(oldItems[oldIndex++]); } } ts.enumerateInsertsAndDeletes = enumerateInsertsAndDeletes; })(ts || (ts = {})); var ts; (function (ts) { ts.timestamp = typeof performance !== "undefined" && performance.now ? function () { return performance.now(); } : Date.now ? Date.now : function () { return +(new Date()); }; })(ts || (ts = {})); (function (ts) { var performance; (function (performance) { var profilerEvent = typeof onProfilerEvent === "function" && onProfilerEvent.profiler === true ? onProfilerEvent : function () { }; var enabled = false; var profilerStart = 0; var counts; var marks; var measures; function mark(markName) { if (enabled) { marks.set(markName, ts.timestamp()); counts.set(markName, (counts.get(markName) || 0) + 1); profilerEvent(markName); } } performance.mark = mark; function measure(measureName, startMarkName, endMarkName) { if (enabled) { var end = endMarkName && marks.get(endMarkName) || ts.timestamp(); var start = startMarkName && marks.get(startMarkName) || profilerStart; measures.set(measureName, (measures.get(measureName) || 0) + (end - start)); } } performance.measure = measure; function getCount(markName) { return counts && counts.get(markName) || 0; } performance.getCount = getCount; function getDuration(measureName) { return measures && measures.get(measureName) || 0; } performance.getDuration = getDuration; function forEachMeasure(cb) { measures.forEach(function (measure, key) { cb(key, measure); }); } performance.forEachMeasure = forEachMeasure; function enable() { counts = ts.createMap(); marks = ts.createMap(); measures = ts.createMap(); enabled = true; profilerStart = ts.timestamp(); } performance.enable = enable; function disable() { enabled = false; } performance.disable = disable; })(performance = ts.performance || (ts.performance = {})); })(ts || (ts = {})); var ts; (function (ts) { 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"; SyntaxKind[SyntaxKind["ShebangTrivia"] = 6] = "ShebangTrivia"; SyntaxKind[SyntaxKind["ConflictMarkerTrivia"] = 7] = "ConflictMarkerTrivia"; 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"; SyntaxKind[SyntaxKind["TemplateHead"] = 14] = "TemplateHead"; SyntaxKind[SyntaxKind["TemplateMiddle"] = 15] = "TemplateMiddle"; SyntaxKind[SyntaxKind["TemplateTail"] = 16] = "TemplateTail"; 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"; 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"; SyntaxKind[SyntaxKind["Identifier"] = 71] = "Identifier"; 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"; 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"; 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"; SyntaxKind[SyntaxKind["QualifiedName"] = 146] = "QualifiedName"; SyntaxKind[SyntaxKind["ComputedPropertyName"] = 147] = "ComputedPropertyName"; SyntaxKind[SyntaxKind["TypeParameter"] = 148] = "TypeParameter"; SyntaxKind[SyntaxKind["Parameter"] = 149] = "Parameter"; SyntaxKind[SyntaxKind["Decorator"] = 150] = "Decorator"; 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"; 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"; SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 180] = "ObjectBindingPattern"; SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 181] = "ArrayBindingPattern"; SyntaxKind[SyntaxKind["BindingElement"] = 182] = "BindingElement"; 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"; SyntaxKind[SyntaxKind["TemplateSpan"] = 211] = "TemplateSpan"; SyntaxKind[SyntaxKind["SemicolonClassElement"] = 212] = "SemicolonClassElement"; 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"; SyntaxKind[SyntaxKind["ExternalModuleReference"] = 254] = "ExternalModuleReference"; 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"; SyntaxKind[SyntaxKind["CaseClause"] = 266] = "CaseClause"; SyntaxKind[SyntaxKind["DefaultClause"] = 267] = "DefaultClause"; SyntaxKind[SyntaxKind["HeritageClause"] = 268] = "HeritageClause"; SyntaxKind[SyntaxKind["CatchClause"] = 269] = "CatchClause"; SyntaxKind[SyntaxKind["PropertyAssignment"] = 270] = "PropertyAssignment"; SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 271] = "ShorthandPropertyAssignment"; SyntaxKind[SyntaxKind["SpreadAssignment"] = 272] = "SpreadAssignment"; SyntaxKind[SyntaxKind["EnumMember"] = 273] = "EnumMember"; SyntaxKind[SyntaxKind["SourceFile"] = 274] = "SourceFile"; SyntaxKind[SyntaxKind["Bundle"] = 275] = "Bundle"; SyntaxKind[SyntaxKind["UnparsedSource"] = 276] = "UnparsedSource"; SyntaxKind[SyntaxKind["InputFiles"] = 277] = "InputFiles"; SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 278] = "JSDocTypeExpression"; SyntaxKind[SyntaxKind["JSDocAllType"] = 279] = "JSDocAllType"; 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["JSDocThisTag"] = 295] = "JSDocThisTag"; SyntaxKind[SyntaxKind["JSDocTypeTag"] = 296] = "JSDocTypeTag"; SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 297] = "JSDocTemplateTag"; SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 298] = "JSDocTypedefTag"; SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 299] = "JSDocPropertyTag"; SyntaxKind[SyntaxKind["SyntaxList"] = 300] = "SyntaxList"; SyntaxKind[SyntaxKind["NotEmittedStatement"] = 301] = "NotEmittedStatement"; SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 302] = "PartiallyEmittedExpression"; SyntaxKind[SyntaxKind["CommaListExpression"] = 303] = "CommaListExpression"; SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 304] = "MergeDeclarationMarker"; SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 305] = "EndOfDeclarationMarker"; SyntaxKind[SyntaxKind["Count"] = 306] = "Count"; 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"] = 299] = "LastJSDocNode"; SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 289] = "FirstJSDocTagNode"; SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 299] = "LastJSDocTagNode"; SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 117] = "FirstContextualKeyword"; 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"; NodeFlags[NodeFlags["PossiblyContainsDynamicImport"] = 524288] = "PossiblyContainsDynamicImport"; NodeFlags[NodeFlags["PossiblyContainsImportMeta"] = 1048576] = "PossiblyContainsImportMeta"; NodeFlags[NodeFlags["JSDoc"] = 2097152] = "JSDoc"; NodeFlags[NodeFlags["Ambient"] = 4194304] = "Ambient"; 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"; NodeFlags[NodeFlags["ContextFlags"] = 12679168] = "ContextFlags"; NodeFlags[NodeFlags["TypeExcludesFlags"] = 20480] = "TypeExcludesFlags"; 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"; 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"; JsxFlags[JsxFlags["IntrinsicNamedElement"] = 1] = "IntrinsicNamedElement"; JsxFlags[JsxFlags["IntrinsicIndexedElement"] = 2] = "IntrinsicIndexedElement"; JsxFlags[JsxFlags["IntrinsicElement"] = 3] = "IntrinsicElement"; })(JsxFlags = ts.JsxFlags || (ts.JsxFlags = {})); var RelationComparisonResult; (function (RelationComparisonResult) { RelationComparisonResult[RelationComparisonResult["Succeeded"] = 1] = "Succeeded"; RelationComparisonResult[RelationComparisonResult["Failed"] = 2] = "Failed"; RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported"; })(RelationComparisonResult = ts.RelationComparisonResult || (ts.RelationComparisonResult = {})); var GeneratedIdentifierFlags; (function (GeneratedIdentifierFlags) { 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"; GeneratedIdentifierFlags[GeneratedIdentifierFlags["ReservedInNestedScopes"] = 8] = "ReservedInNestedScopes"; GeneratedIdentifierFlags[GeneratedIdentifierFlags["Optimistic"] = 16] = "Optimistic"; GeneratedIdentifierFlags[GeneratedIdentifierFlags["FileLevel"] = 32] = "FileLevel"; })(GeneratedIdentifierFlags = ts.GeneratedIdentifierFlags || (ts.GeneratedIdentifierFlags = {})); 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 = (function () { function OperationCanceledException() { } return OperationCanceledException; }()); ts.OperationCanceledException = OperationCanceledException; var StructureIsReused; (function (StructureIsReused) { StructureIsReused[StructureIsReused["Not"] = 0] = "Not"; StructureIsReused[StructureIsReused["SafeModules"] = 1] = "SafeModules"; StructureIsReused[StructureIsReused["Completely"] = 2] = "Completely"; })(StructureIsReused = ts.StructureIsReused || (ts.StructureIsReused = {})); var ExitStatus; (function (ExitStatus) { ExitStatus[ExitStatus["Success"] = 0] = "Success"; ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; })(ExitStatus = ts.ExitStatus || (ts.ExitStatus = {})); 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"; 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"; 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"; 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 = {})); var TypeFormatFlags; (function (TypeFormatFlags) { TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None"; TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 1] = "NoTruncation"; TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; TypeFormatFlags[TypeFormatFlags["UseStructuralFallback"] = 8] = "UseStructuralFallback"; TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; TypeFormatFlags[TypeFormatFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; 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"; TypeFormatFlags[TypeFormatFlags["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; TypeFormatFlags[TypeFormatFlags["AddUndefined"] = 131072] = "AddUndefined"; TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 262144] = "WriteArrowStyleSignature"; TypeFormatFlags[TypeFormatFlags["InArrayType"] = 524288] = "InArrayType"; TypeFormatFlags[TypeFormatFlags["InElementType"] = 2097152] = "InElementType"; TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 4194304] = "InFirstTypeArgument"; TypeFormatFlags[TypeFormatFlags["InTypeAlias"] = 8388608] = "InTypeAlias"; TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 0] = "WriteOwnNameForAnyLike"; TypeFormatFlags[TypeFormatFlags["NodeBuilderFlagsMask"] = 9469291] = "NodeBuilderFlagsMask"; })(TypeFormatFlags = ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var SymbolFormatFlags; (function (SymbolFormatFlags) { SymbolFormatFlags[SymbolFormatFlags["None"] = 0] = "None"; SymbolFormatFlags[SymbolFormatFlags["WriteTypeParametersOrArguments"] = 1] = "WriteTypeParametersOrArguments"; SymbolFormatFlags[SymbolFormatFlags["UseOnlyExternalAliasing"] = 2] = "UseOnlyExternalAliasing"; SymbolFormatFlags[SymbolFormatFlags["AllowAnyNodeKind"] = 4] = "AllowAnyNodeKind"; SymbolFormatFlags[SymbolFormatFlags["UseAliasDefinedOutsideCurrentScope"] = 8] = "UseAliasDefinedOutsideCurrentScope"; })(SymbolFormatFlags = ts.SymbolFormatFlags || (ts.SymbolFormatFlags = {})); var SymbolAccessibility; (function (SymbolAccessibility) { SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible"; SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible"; SymbolAccessibility[SymbolAccessibility["CannotBeNamed"] = 2] = "CannotBeNamed"; })(SymbolAccessibility = ts.SymbolAccessibility || (ts.SymbolAccessibility = {})); 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 = {})); var TypeReferenceSerializationKind; (function (TypeReferenceSerializationKind) { TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidNullableOrNeverType"] = 2] = "VoidNullableOrNeverType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 5] = "BooleanType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 6] = "ArrayLikeType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["Promise"] = 8] = "Promise"; TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 9] = "TypeWithCallSignature"; 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"; 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"; SymbolFlags[SymbolFlags["FunctionScopedVariableExcludes"] = 67216318] = "FunctionScopedVariableExcludes"; 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"; SymbolFlags[SymbolFlags["Classifiable"] = 2885600] = "Classifiable"; SymbolFlags[SymbolFlags["LateBindingContainer"] = 6240] = "LateBindingContainer"; })(SymbolFlags = ts.SymbolFlags || (ts.SymbolFlags = {})); var EnumKind; (function (EnumKind) { EnumKind[EnumKind["Numeric"] = 0] = "Numeric"; EnumKind[EnumKind["Literal"] = 1] = "Literal"; })(EnumKind = ts.EnumKind || (ts.EnumKind = {})); 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 = {})); 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"; TypeFlags[TypeFlags["FreshLiteral"] = 33554432] = "FreshLiteral"; TypeFlags[TypeFlags["UnionOfUnitTypes"] = 67108864] = "UnionOfUnitTypes"; TypeFlags[TypeFlags["ContainsWideningType"] = 134217728] = "ContainsWideningType"; TypeFlags[TypeFlags["ContainsObjectLiteral"] = 268435456] = "ContainsObjectLiteral"; TypeFlags[TypeFlags["ContainsAnyFunctionType"] = 536870912] = "ContainsAnyFunctionType"; TypeFlags[TypeFlags["AnyOrUnknown"] = 3] = "AnyOrUnknown"; TypeFlags[TypeFlags["Nullable"] = 24576] = "Nullable"; TypeFlags[TypeFlags["Literal"] = 448] = "Literal"; TypeFlags[TypeFlags["Unit"] = 27072] = "Unit"; TypeFlags[TypeFlags["StringOrNumberLiteral"] = 192] = "StringOrNumberLiteral"; TypeFlags[TypeFlags["StringOrNumberLiteralOrUnique"] = 2240] = "StringOrNumberLiteralOrUnique"; TypeFlags[TypeFlags["DefinitelyFalsy"] = 29120] = "DefinitelyFalsy"; TypeFlags[TypeFlags["PossiblyFalsy"] = 29148] = "PossiblyFalsy"; TypeFlags[TypeFlags["Intrinsic"] = 16839967] = "Intrinsic"; 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"; 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"; TypeFlags[TypeFlags["Narrowable"] = 33492479] = "Narrowable"; TypeFlags[TypeFlags["NotUnionOrUnit"] = 16909315] = "NotUnionOrUnit"; TypeFlags[TypeFlags["NotUnit"] = 16749629] = "NotUnit"; TypeFlags[TypeFlags["RequiresWidening"] = 402653184] = "RequiresWidening"; TypeFlags[TypeFlags["PropagatingFlags"] = 939524096] = "PropagatingFlags"; TypeFlags[TypeFlags["NonWideningType"] = 134217728] = "NonWideningType"; TypeFlags[TypeFlags["Wildcard"] = 268435456] = "Wildcard"; TypeFlags[TypeFlags["EmptyObject"] = 536870912] = "EmptyObject"; TypeFlags[TypeFlags["ConstructionFlags"] = 939524096] = "ConstructionFlags"; 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 = {})); 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 = {})); 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 = {})); var Ternary; (function (Ternary) { Ternary[Ternary["False"] = 0] = "False"; Ternary[Ternary["Maybe"] = 1] = "Maybe"; Ternary[Ternary["True"] = -1] = "True"; })(Ternary = ts.Ternary || (ts.Ternary = {})); var SpecialPropertyAssignmentKind; (function (SpecialPropertyAssignmentKind) { SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["None"] = 0] = "None"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ExportsProperty"] = 1] = "ExportsProperty"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ModuleExports"] = 2] = "ModuleExports"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["PrototypeProperty"] = 3] = "PrototypeProperty"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["ThisProperty"] = 4] = "ThisProperty"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["Property"] = 5] = "Property"; SpecialPropertyAssignmentKind[SpecialPropertyAssignmentKind["Prototype"] = 6] = "Prototype"; })(SpecialPropertyAssignmentKind = ts.SpecialPropertyAssignmentKind || (ts.SpecialPropertyAssignmentKind = {})); var DiagnosticCategory; (function (DiagnosticCategory) { DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; DiagnosticCategory[DiagnosticCategory["Suggestion"] = 2] = "Suggestion"; DiagnosticCategory[DiagnosticCategory["Message"] = 3] = "Message"; })(DiagnosticCategory = ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); function diagnosticCategoryName(d, lowerCase) { if (lowerCase === void 0) { lowerCase = true; } var name = DiagnosticCategory[d.category]; return lowerCase ? name.toLowerCase() : name; } ts.diagnosticCategoryName = diagnosticCategoryName; var ModuleResolutionKind; (function (ModuleResolutionKind) { ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic"; ModuleResolutionKind[ModuleResolutionKind["NodeJs"] = 2] = "NodeJs"; })(ModuleResolutionKind = ts.ModuleResolutionKind || (ts.ModuleResolutionKind = {})); var ModuleKind; (function (ModuleKind) { ModuleKind[ModuleKind["None"] = 0] = "None"; ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; ModuleKind[ModuleKind["UMD"] = 3] = "UMD"; ModuleKind[ModuleKind["System"] = 4] = "System"; 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"; 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 = {})); 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"; 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 = {})); var TransformFlags; (function (TransformFlags) { TransformFlags[TransformFlags["None"] = 0] = "None"; 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"; 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"; TransformFlags[TransformFlags["HasComputedFlags"] = 536870912] = "HasComputedFlags"; 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"; 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"; 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"; EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper"; EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper"; })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {})); 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"; ExternalEmitHelpers[ExternalEmitHelpers["ForOfIncludes"] = 256] = "ForOfIncludes"; ExternalEmitHelpers[ExternalEmitHelpers["ForAwaitOfIncludes"] = 16384] = "ForAwaitOfIncludes"; ExternalEmitHelpers[ExternalEmitHelpers["AsyncGeneratorIncludes"] = 6144] = "AsyncGeneratorIncludes"; ExternalEmitHelpers[ExternalEmitHelpers["AsyncDelegatorIncludes"] = 26624] = "AsyncDelegatorIncludes"; 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"; ListFormat[ListFormat["SingleLine"] = 0] = "SingleLine"; ListFormat[ListFormat["MultiLine"] = 1] = "MultiLine"; ListFormat[ListFormat["PreserveLines"] = 2] = "PreserveLines"; ListFormat[ListFormat["LinesMask"] = 3] = "LinesMask"; 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"; ListFormat[ListFormat["Indented"] = 64] = "Indented"; ListFormat[ListFormat["SpaceBetweenBraces"] = 128] = "SpaceBetweenBraces"; ListFormat[ListFormat["SpaceBetweenSiblings"] = 256] = "SpaceBetweenSiblings"; 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"; 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"; 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 = {})); var PragmaKindFlags; (function (PragmaKindFlags) { PragmaKindFlags[PragmaKindFlags["None"] = 0] = "None"; PragmaKindFlags[PragmaKindFlags["TripleSlashXML"] = 1] = "TripleSlashXML"; PragmaKindFlags[PragmaKindFlags["SingleLine"] = 2] = "SingleLine"; PragmaKindFlags[PragmaKindFlags["MultiLine"] = 4] = "MultiLine"; PragmaKindFlags[PragmaKindFlags["All"] = 7] = "All"; PragmaKindFlags[PragmaKindFlags["Default"] = 7] = "Default"; })(PragmaKindFlags = ts.PragmaKindFlags || (ts.PragmaKindFlags = {})); function _contextuallyTypePragmas(args) { return args; } ts.commentPragmas = _contextuallyTypePragmas({ "reference": { args: [ { name: "types", optional: true, captureSpan: true }, { name: "lib", optional: true, captureSpan: true }, { name: "path", optional: true, captureSpan: true }, { name: "no-default-lib", optional: true } ], kind: 1 }, "amd-dependency": { args: [{ name: "path" }, { name: "name", optional: true }], kind: 1 }, "amd-module": { args: [{ name: "name" }], kind: 1 }, "ts-check": { kind: 2 }, "ts-nocheck": { kind: 2 }, "jsx": { args: [{ name: "factory" }], kind: 4 }, }); })(ts || (ts = {})); var ts; (function (ts) { function setStackTraceLimit() { if (Error.stackTraceLimit < 100) { Error.stackTraceLimit = 100; } } ts.setStackTraceLimit = setStackTraceLimit; var FileWatcherEventKind; (function (FileWatcherEventKind) { FileWatcherEventKind[FileWatcherEventKind["Created"] = 0] = "Created"; FileWatcherEventKind[FileWatcherEventKind["Changed"] = 1] = "Changed"; FileWatcherEventKind[FileWatcherEventKind["Deleted"] = 2] = "Deleted"; })(FileWatcherEventKind = ts.FileWatcherEventKind || (ts.FileWatcherEventKind = {})); var PollingInterval; (function (PollingInterval) { PollingInterval[PollingInterval["High"] = 2000] = "High"; PollingInterval[PollingInterval["Medium"] = 500] = "Medium"; PollingInterval[PollingInterval["Low"] = 250] = "Low"; })(PollingInterval = ts.PollingInterval || (ts.PollingInterval = {})); function getPriorityValues(highPriorityValue) { var mediumPriorityValue = highPriorityValue * 2; var lowPriorityValue = mediumPriorityValue * 4; return [highPriorityValue, mediumPriorityValue, lowPriorityValue]; } function pollingInterval(watchPriority) { return pollingIntervalsForPriority[watchPriority]; } var pollingIntervalsForPriority = getPriorityValues(250); function watchFileUsingPriorityPollingInterval(host, fileName, callback, watchPriority) { return host.watchFile(fileName, callback, pollingInterval(watchPriority)); } ts.watchFileUsingPriorityPollingInterval = watchFileUsingPriorityPollingInterval; ts.missingFileModifiedTime = new Date(0); function createPollingIntervalBasedLevels(levels) { var _a; return _a = {}, _a[PollingInterval.Low] = levels.Low, _a[PollingInterval.Medium] = levels.Medium, _a[PollingInterval.High] = levels.High, _a; } var defaultChunkLevels = { Low: 32, Medium: 64, High: 256 }; var pollingChunkSize = createPollingIntervalBasedLevels(defaultChunkLevels); ts.unchangedPollThresholds = createPollingIntervalBasedLevels(defaultChunkLevels); function setCustomPollingValues(system) { if (!system.getEnvironmentVariable) { return; } var pollingIntervalChanged = setCustomLevels("TSC_WATCH_POLLINGINTERVAL", PollingInterval); pollingChunkSize = getCustomPollingBasedLevels("TSC_WATCH_POLLINGCHUNKSIZE", defaultChunkLevels) || pollingChunkSize; ts.unchangedPollThresholds = getCustomPollingBasedLevels("TSC_WATCH_UNCHANGEDPOLLTHRESHOLDS", defaultChunkLevels) || ts.unchangedPollThresholds; function getLevel(envVar, level) { return system.getEnvironmentVariable(envVar + "_" + level.toUpperCase()); } function getCustomLevels(baseVariable) { var customLevels; setCustomLevel("Low"); setCustomLevel("Medium"); setCustomLevel("High"); return customLevels; function setCustomLevel(level) { var customLevel = getLevel(baseVariable, level); if (customLevel) { (customLevels || (customLevels = {}))[level] = Number(customLevel); } } } function setCustomLevels(baseVariable, levels) { var customLevels = getCustomLevels(baseVariable); if (customLevels) { setLevel("Low"); setLevel("Medium"); setLevel("High"); return true; } return false; function setLevel(level) { levels[level] = customLevels[level] || levels[level]; } } function getCustomPollingBasedLevels(baseVariable, defaultLevels) { var customLevels = getCustomLevels(baseVariable); return (pollingIntervalChanged || customLevels) && createPollingIntervalBasedLevels(customLevels ? __assign({}, defaultLevels, customLevels) : defaultLevels); } } ts.setCustomPollingValues = setCustomPollingValues; function createDynamicPriorityPollingWatchFile(host) { var watchedFiles = []; var changedFilesInLastPoll = []; var lowPollingIntervalQueue = createPollingIntervalQueue(PollingInterval.Low); var mediumPollingIntervalQueue = createPollingIntervalQueue(PollingInterval.Medium); var highPollingIntervalQueue = createPollingIntervalQueue(PollingInterval.High); return watchFile; function watchFile(fileName, callback, defaultPollingInterval) { var file = { fileName: fileName, callback: callback, unchangedPolls: 0, mtime: getModifiedTime(fileName) }; watchedFiles.push(file); addToPollingIntervalQueue(file, defaultPollingInterval); return { close: function () { file.isClosed = true; ts.unorderedRemoveItem(watchedFiles, file); } }; } function createPollingIntervalQueue(pollingInterval) { var queue = []; queue.pollingInterval = pollingInterval; queue.pollIndex = 0; queue.pollScheduled = false; return queue; } function pollPollingIntervalQueue(queue) { queue.pollIndex = pollQueue(queue, queue.pollingInterval, queue.pollIndex, pollingChunkSize[queue.pollingInterval]); if (queue.length) { scheduleNextPoll(queue.pollingInterval); } else { ts.Debug.assert(queue.pollIndex === 0); queue.pollScheduled = false; } } function pollLowPollingIntervalQueue(queue) { pollQueue(changedFilesInLastPoll, PollingInterval.Low, 0, changedFilesInLastPoll.length); pollPollingIntervalQueue(queue); if (!queue.pollScheduled && changedFilesInLastPoll.length) { scheduleNextPoll(PollingInterval.Low); } } function pollQueue(queue, pollingInterval, pollIndex, chunkSize) { var needsVisit = queue.length; var definedValueCopyToIndex = pollIndex; for (var polled = 0; polled < chunkSize && needsVisit > 0; nextPollIndex(), needsVisit--) { var watchedFile = queue[pollIndex]; if (!watchedFile) { continue; } else if (watchedFile.isClosed) { queue[pollIndex] = undefined; continue; } polled++; var fileChanged = onWatchedFileStat(watchedFile, getModifiedTime(watchedFile.fileName)); if (watchedFile.isClosed) { queue[pollIndex] = undefined; } else if (fileChanged) { watchedFile.unchangedPolls = 0; if (queue !== changedFilesInLastPoll) { queue[pollIndex] = undefined; addChangedFileToLowPollingIntervalQueue(watchedFile); } } else if (watchedFile.unchangedPolls !== ts.unchangedPollThresholds[pollingInterval]) { watchedFile.unchangedPolls++; } else if (queue === changedFilesInLastPoll) { watchedFile.unchangedPolls = 1; queue[pollIndex] = undefined; addToPollingIntervalQueue(watchedFile, PollingInterval.Low); } else if (pollingInterval !== PollingInterval.High) { watchedFile.unchangedPolls++; queue[pollIndex] = undefined; addToPollingIntervalQueue(watchedFile, pollingInterval === PollingInterval.Low ? PollingInterval.Medium : PollingInterval.High); } if (queue[pollIndex]) { if (definedValueCopyToIndex < pollIndex) { queue[definedValueCopyToIndex] = watchedFile; queue[pollIndex] = undefined; } definedValueCopyToIndex++; } } return pollIndex; function nextPollIndex() { pollIndex++; if (pollIndex === queue.length) { if (definedValueCopyToIndex < pollIndex) { queue.length = definedValueCopyToIndex; } pollIndex = 0; definedValueCopyToIndex = 0; } } } function pollingIntervalQueue(pollingInterval) { switch (pollingInterval) { case PollingInterval.Low: return lowPollingIntervalQueue; case PollingInterval.Medium: return mediumPollingIntervalQueue; case PollingInterval.High: return highPollingIntervalQueue; } } function addToPollingIntervalQueue(file, pollingInterval) { pollingIntervalQueue(pollingInterval).push(file); scheduleNextPollIfNotAlreadyScheduled(pollingInterval); } function addChangedFileToLowPollingIntervalQueue(file) { changedFilesInLastPoll.push(file); scheduleNextPollIfNotAlreadyScheduled(PollingInterval.Low); } function scheduleNextPollIfNotAlreadyScheduled(pollingInterval) { if (!pollingIntervalQueue(pollingInterval).pollScheduled) { scheduleNextPoll(pollingInterval); } } function scheduleNextPoll(pollingInterval) { pollingIntervalQueue(pollingInterval).pollScheduled = host.setTimeout(pollingInterval === PollingInterval.Low ? pollLowPollingIntervalQueue : pollPollingIntervalQueue, pollingInterval, pollingIntervalQueue(pollingInterval)); } function getModifiedTime(fileName) { return host.getModifiedTime(fileName) || ts.missingFileModifiedTime; } } ts.createDynamicPriorityPollingWatchFile = createDynamicPriorityPollingWatchFile; function onWatchedFileStat(watchedFile, modifiedTime) { var oldTime = watchedFile.mtime.getTime(); var newTime = modifiedTime.getTime(); if (oldTime !== newTime) { watchedFile.mtime = modifiedTime; var eventKind = oldTime === 0 ? FileWatcherEventKind.Created : newTime === 0 ? FileWatcherEventKind.Deleted : FileWatcherEventKind.Changed; watchedFile.callback(watchedFile.fileName, eventKind); return true; } return false; } ts.onWatchedFileStat = onWatchedFileStat; function createRecursiveDirectoryWatcher(host) { return createDirectoryWatcher; function createDirectoryWatcher(dirName, callback) { var watcher = host.watchDirectory(dirName, function (fileName) { callback(fileName); updateChildWatches(result, callback); }); var result = { close: function () { watcher.close(); result.childWatches.forEach(ts.closeFileWatcher); result = undefined; }, dirName: dirName, childWatches: ts.emptyArray }; updateChildWatches(result, callback); return result; } function updateChildWatches(watcher, callback) { if (watcher) { watcher.childWatches = watchChildDirectories(watcher.dirName, watcher.childWatches, callback); } } 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); 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; function createAndAddChildDirectoryWatcher(childName) { var result = createDirectoryWatcher(childName, callback); addChildDirectoryWatcher(result); } function addChildDirectoryWatcher(childWatcher) { (newChildWatches || (newChildWatches = [])).push(childWatcher); } } } ts.createRecursiveDirectoryWatcher = createRecursiveDirectoryWatcher; function getNodeMajorVersion() { if (typeof process === "undefined") { return undefined; } var version = process.version; if (!version) { return undefined; } var dot = version.indexOf("."); if (dot === -1) { return undefined; } return parseInt(version.substring(1, dot)); } ts.getNodeMajorVersion = getNodeMajorVersion; ts.sys = (function () { var byteOrderMarkIndicator = "\uFEFF"; function getNodeSystem() { var _fs = require("fs"); var _path = require("path"); var _os = require("os"); var _crypto; try { _crypto = require("crypto"); } catch (_a) { _crypto = undefined; } var Buffer = require("buffer").Buffer; var nodeVersion = getNodeMajorVersion(); 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; var dynamicPollingWatchFile; var nodeSystem = { args: process.argv.slice(2), newLine: _os.EOL, useCaseSensitiveFileNames: useCaseSensitiveFileNames, write: function (s) { process.stdout.write(s); }, writeOutputIsTTY: function () { return process.stdout.isTTY; }, readFile: readFile, writeFile: writeFile, watchFile: getWatchFile(), watchDirectory: getWatchDirectory(), resolvePath: function (path) { return _path.resolve(path); }, fileExists: fileExists, directoryExists: directoryExists, createDirectory: function (directoryName) { if (!nodeSystem.directoryExists(directoryName)) { _fs.mkdirSync(directoryName); } }, getExecutingFilePath: function () { return __filename; }, getCurrentDirectory: function () { return process.cwd(); }, getDirectories: getDirectories, getEnvironmentVariable: function (name) { return process.env[name] || ""; }, readDirectory: readDirectory, getModifiedTime: getModifiedTime, setModifiedTime: setModifiedTime, deleteFile: deleteFile, createHash: _crypto ? createMD5HashUsingNativeCrypto : generateDjb2Hash, createSHA256Hash: _crypto ? createSHA256Hash : undefined, getMemoryUsage: function () { if (global.gc) { global.gc(); } return process.memoryUsage().heapUsed; }, getFileSize: function (path) { try { var stat = _fs.statSync(path); if (stat.isFile()) { return stat.size; } } catch (_a) { } return 0; }, exit: function (exitCode) { process.exit(exitCode); }, realpath: realpath, debugMode: ts.some(process.execArgv, function (arg) { return /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(arg); }), tryEnableSourceMapsForHost: function () { try { require("source-map-support").install(); } catch (_a) { } }, setTimeout: setTimeout, clearTimeout: clearTimeout, clearScreen: function () { process.stdout.write("\x1Bc"); }, setBlocking: function () { if (process.stdout && process.stdout._handle && process.stdout._handle.setBlocking) { process.stdout._handle.setBlocking(true); } }, base64decode: Buffer.from ? function (input) { return Buffer.from(input, "base64").toString("utf8"); } : function (input) { return new Buffer(input, "base64").toString("utf8"); }, base64encode: Buffer.from ? function (input) { return Buffer.from(input).toString("base64"); } : function (input) { return new Buffer(input).toString("base64"); } }; return nodeSystem; function isFileSystemCaseSensitive() { if (platform === "win32" || platform === "win64") { return false; } return !fileExists(swapCase(__filename)); } function swapCase(s) { return s.replace(/\w/g, function (ch) { var up = ch.toUpperCase(); return ch === up ? ch.toLowerCase() : up; }); } function getWatchFile() { switch (tscWatchFile) { case "PriorityPollingInterval": return fsWatchFile; case "DynamicPriorityPolling": return createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }); case "UseFsEvents": return watchFileUsingFsWatch; case "UseFsEventsWithFallbackDynamicPolling": dynamicPollingWatchFile = createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }); return createWatchFileUsingDynamicWatchFile(dynamicPollingWatchFile); case "UseFsEventsOnParentDirectory": return createNonPollingWatchFile(); } return useNonPollingWatchers ? createNonPollingWatchFile() : function (fileName, callback) { return fsWatchFile(fileName, callback); }; } function getWatchDirectory() { var fsSupportsRecursive = isNode4OrLater && (process.platform === "win32" || process.platform === "darwin"); if (fsSupportsRecursive) { return watchDirectoryUsingFsWatch; } var watchDirectory = tscWatchDirectory === "RecursiveDirectoryUsingFsWatchFile" ? createWatchDirectoryUsing(fsWatchFile) : tscWatchDirectory === "RecursiveDirectoryUsingDynamicPriorityPolling" ? createWatchDirectoryUsing(dynamicPollingWatchFile || createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout })) : watchDirectoryUsingFsWatch; var watchDirectoryRecursively = createRecursiveDirectoryWatcher({ filePathComparer: ts.getStringComparer(!useCaseSensitiveFileNames), directoryExists: directoryExists, getAccessibleSortedChildDirectories: function (path) { return getAccessibleFileSystemEntries(path).directories; }, watchDirectory: watchDirectory, realpath: realpath }); return function (directoryName, callback, recursive) { if (recursive) { return watchDirectoryRecursively(directoryName, callback); } watchDirectory(directoryName, callback); return undefined; }; } function createNonPollingWatchFile() { var fileWatcherCallbacks = ts.createMultiMap(); var dirWatchers = ts.createMap(); var toCanonicalName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); return nonPollingWatchFile; function nonPollingWatchFile(fileName, callback) { var filePath = toCanonicalName(fileName); fileWatcherCallbacks.add(filePath, callback); var dirPath = ts.getDirectoryPath(filePath) || "."; var watcher = dirWatchers.get(dirPath) || createDirectoryWatcher(ts.getDirectoryPath(fileName) || ".", dirPath); watcher.referenceCount++; return { close: function () { if (watcher.referenceCount === 1) { watcher.close(); dirWatchers.delete(dirPath); } else { watcher.referenceCount--; } fileWatcherCallbacks.remove(filePath, callback); } }; } function createDirectoryWatcher(dirName, dirPath) { var watcher = fsWatchDirectory(dirName, function (_eventName, relativeFileName) { var fileName = !ts.isString(relativeFileName) ? undefined : ts.getNormalizedAbsolutePath(relativeFileName, dirName); var callbacks = fileWatcherCallbacks.get(toCanonicalName(fileName)); if (callbacks) { for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) { var fileCallback = callbacks_1[_i]; fileCallback(fileName, FileWatcherEventKind.Changed); } } }); watcher.referenceCount = 0; dirWatchers.set(dirPath, watcher); return watcher; } } function fsWatchFile(fileName, callback, pollingInterval) { _fs.watchFile(fileName, { persistent: true, interval: pollingInterval || 250 }, fileChanged); var eventKind; return { close: function () { return _fs.unwatchFile(fileName, fileChanged); } }; function fileChanged(curr, prev) { var isPreviouslyDeleted = +prev.mtime === 0 || eventKind === FileWatcherEventKind.Deleted; if (+curr.mtime === 0) { if (isPreviouslyDeleted) { return; } eventKind = FileWatcherEventKind.Deleted; } else if (isPreviouslyDeleted) { eventKind = FileWatcherEventKind.Created; } else if (+curr.mtime === +prev.mtime) { return; } else { eventKind = FileWatcherEventKind.Changed; } callback(fileName, eventKind); } } function createFileWatcherCallback(callback) { return function (_fileName, eventKind) { return callback(eventKind === FileWatcherEventKind.Changed ? "change" : "rename", ""); }; } function createFsWatchCallbackForFileWatcherCallback(fileName, callback) { return function (eventName) { if (eventName === "rename") { callback(fileName, fileExists(fileName) ? FileWatcherEventKind.Created : FileWatcherEventKind.Deleted); } else { callback(fileName, FileWatcherEventKind.Changed); } }; } function createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback) { return function (eventName, relativeFileName) { if (eventName === "rename") { callback(!relativeFileName ? directoryName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName))); } }; } function fsWatch(fileOrDirectory, entryKind, callback, recursive, fallbackPollingWatchFile, pollingInterval) { var options; var watcher = !fileSystemEntryExists(fileOrDirectory, entryKind) ? watchMissingFileSystemEntry() : watchPresentFileSystemEntry(); return { close: function () { watcher.close(); watcher = undefined; } }; function invokeCallbackAndUpdateWatcher(createWatcher) { callback("rename", ""); if (watcher) { watcher.close(); watcher = createWatcher(); } } function watchPresentFileSystemEntry() { if (options === undefined) { if (isNode4OrLater && (process.platform === "win32" || process.platform === "darwin")) { options = { persistent: true, recursive: !!recursive }; } else { options = { persistent: true }; } } try { var presentWatcher = _fs.watch(fileOrDirectory, options, callback); presentWatcher.on("error", function () { return invokeCallbackAndUpdateWatcher(watchMissingFileSystemEntry); }); return presentWatcher; } catch (e) { return watchPresentFileSystemEntryWithFsWatchFile(); } } function watchPresentFileSystemEntryWithFsWatchFile() { return fallbackPollingWatchFile(fileOrDirectory, createFileWatcherCallback(callback), pollingInterval); } function watchMissingFileSystemEntry() { return fallbackPollingWatchFile(fileOrDirectory, function (_fileName, eventKind) { if (eventKind === FileWatcherEventKind.Created && fileSystemEntryExists(fileOrDirectory, entryKind)) { invokeCallbackAndUpdateWatcher(watchPresentFileSystemEntry); } }, pollingInterval); } } function watchFileUsingFsWatch(fileName, callback, pollingInterval) { return fsWatch(fileName, 0, createFsWatchCallbackForFileWatcherCallback(fileName, callback), false, fsWatchFile, pollingInterval); } function createWatchFileUsingDynamicWatchFile(watchFile) { return function (fileName, callback, pollingInterval) { return fsWatch(fileName, 0, createFsWatchCallbackForFileWatcherCallback(fileName, callback), false, watchFile, pollingInterval); }; } function fsWatchDirectory(directoryName, callback, recursive) { return fsWatch(directoryName, 1, callback, !!recursive, fsWatchFile); } function watchDirectoryUsingFsWatch(directoryName, callback, recursive) { return fsWatchDirectory(directoryName, createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback), recursive); } function createWatchDirectoryUsing(fsWatchFile) { return function (directoryName, callback) { return fsWatchFile(directoryName, function () { return callback(directoryName); }, PollingInterval.Medium); }; } function readFile(fileName, _encoding) { if (!fileExists(fileName)) { return undefined; } var buffer = _fs.readFileSync(fileName); var len = buffer.length; if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { len &= ~1; for (var i = 0; i < len; i += 2) { var temp = buffer[i]; buffer[i] = buffer[i + 1]; buffer[i + 1] = temp; } return buffer.toString("utf16le", 2); } if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { return buffer.toString("utf16le", 2); } if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { return buffer.toString("utf8", 3); } return buffer.toString("utf8"); } function writeFile(fileName, data, writeByteOrderMark) { if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } var fd; try { fd = _fs.openSync(fileName, "w"); _fs.writeSync(fd, data, undefined, "utf8"); } finally { if (fd !== undefined) { _fs.closeSync(fd); } } } function getAccessibleFileSystemEntries(path) { try { var entries = _fs.readdirSync(path || ".").sort(); var files = []; var directories = []; for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) { var entry = entries_2[_i]; if (entry === "." || entry === "..") { continue; } var name = ts.combinePaths(path, entry); var stat = void 0; try { stat = _fs.statSync(name); } catch (e) { continue; } if (stat.isFile()) { files.push(entry); } else if (stat.isDirectory()) { directories.push(entry); } } return { files: files, directories: directories }; } catch (e) { return ts.emptyFileSystemEntries; } } function readDirectory(path, extensions, excludes, includes, depth) { return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries); } function fileSystemEntryExists(path, entryKind) { try { var stat = _fs.statSync(path); switch (entryKind) { case 0: return stat.isFile(); case 1: return stat.isDirectory(); default: return false; } } catch (e) { return false; } } function fileExists(path) { return fileSystemEntryExists(path, 0); } function directoryExists(path) { return fileSystemEntryExists(path, 1); } function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (dir) { return fileSystemEntryExists(ts.combinePaths(path, dir), 1); }); } function realpath(path) { try { return _fs.realpathSync(path); } catch (_a) { return path; } } function getModifiedTime(path) { try { return _fs.statSync(path).mtime; } catch (e) { return undefined; } } function setModifiedTime(path, time) { try { _fs.utimesSync(path, time, time); } catch (e) { return; } } function deleteFile(path) { try { return _fs.unlinkSync(path); } catch (e) { return; } } 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); } function createMD5HashUsingNativeCrypto(data) { var hash = _crypto.createHash("md5"); hash.update(data); return hash.digest("hex"); } function createSHA256Hash(data) { var hash = _crypto.createHash("sha256"); hash.update(data); return hash.digest("hex"); } } function getChakraSystem() { var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); }); return { newLine: ChakraHost.newLine || "\r\n", args: ChakraHost.args, useCaseSensitiveFileNames: !!ChakraHost.useCaseSensitiveFileNames, write: ChakraHost.echo, readFile: function (path, _encoding) { return ChakraHost.readFile(path); }, writeFile: function (path, data, writeByteOrderMark) { if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; } ChakraHost.writeFile(path, data); }, resolvePath: ChakraHost.resolvePath, fileExists: ChakraHost.fileExists, directoryExists: ChakraHost.directoryExists, createDirectory: ChakraHost.createDirectory, getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, getEnvironmentVariable: ChakraHost.getEnvironmentVariable || (function () { return ""; }), readDirectory: function (path, extensions, excludes, includes, _depth) { var pattern = ts.getFileMatcherPatterns(path, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); }, exit: ChakraHost.quit, realpath: realpath }; } function recursiveCreateDirectory(directoryPath, sys) { var basePath = ts.getDirectoryPath(directoryPath); var shouldCreateParent = basePath !== "" && directoryPath !== basePath && !sys.directoryExists(basePath); if (shouldCreateParent) { recursiveCreateDirectory(basePath, sys); } if (shouldCreateParent || !sys.directoryExists(directoryPath)) { sys.createDirectory(directoryPath); } } var sys; if (typeof ChakraHost !== "undefined") { sys = getChakraSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { sys = getNodeSystem(); } if (sys) { var originalWriteFile_1 = sys.writeFile; sys.writeFile = function (path, data, writeBom) { var directoryPath = ts.getDirectoryPath(ts.normalizeSlashes(path)); if (directoryPath && !sys.directoryExists(directoryPath)) { recursiveCreateDirectory(directoryPath, sys); } originalWriteFile_1.call(sys, path, data, writeBom); }; } return sys; })(); if (ts.sys && ts.sys.getEnvironmentVariable) { setCustomPollingValues(ts.sys); ts.Debug.currentAssertionLevel = /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV")) ? 1 : 0; } if (ts.sys && ts.sys.debugMode) { ts.Debug.isDebugging = true; } })(ts || (ts = {})); var ts; (function (ts) { function diag(code, category, key, message, reportsUnnecessary) { return { code: code, category: category, key: key, message: message, reportsUnnecessary: reportsUnnecessary }; } 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."), _0_expected: diag(1005, ts.DiagnosticCategory.Error, "_0_expected_1005", "'{0}' expected."), A_file_cannot_have_a_reference_to_itself: diag(1006, ts.DiagnosticCategory.Error, "A_file_cannot_have_a_reference_to_itself_1006", "A file cannot have a reference to itself."), Trailing_comma_not_allowed: diag(1009, ts.DiagnosticCategory.Error, "Trailing_comma_not_allowed_1009", "Trailing comma not allowed."), Asterisk_Slash_expected: diag(1010, ts.DiagnosticCategory.Error, "Asterisk_Slash_expected_1010", "'*/' expected."), An_element_access_expression_should_take_an_argument: diag(1011, ts.DiagnosticCategory.Error, "An_element_access_expression_should_take_an_argument_1011", "An element access expression should take an argument."), Unexpected_token: diag(1012, ts.DiagnosticCategory.Error, "Unexpected_token_1012", "Unexpected token."), A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma: diag(1013, ts.DiagnosticCategory.Error, "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013", "A rest parameter or binding pattern may not have a trailing comma."), A_rest_parameter_must_be_last_in_a_parameter_list: diag(1014, ts.DiagnosticCategory.Error, "A_rest_parameter_must_be_last_in_a_parameter_list_1014", "A rest parameter must be last in a parameter list."), Parameter_cannot_have_question_mark_and_initializer: diag(1015, ts.DiagnosticCategory.Error, "Parameter_cannot_have_question_mark_and_initializer_1015", "Parameter cannot have question mark and initializer."), A_required_parameter_cannot_follow_an_optional_parameter: diag(1016, ts.DiagnosticCategory.Error, "A_required_parameter_cannot_follow_an_optional_parameter_1016", "A required parameter cannot follow an optional parameter."), An_index_signature_cannot_have_a_rest_parameter: diag(1017, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_rest_parameter_1017", "An index signature cannot have a rest parameter."), An_index_signature_parameter_cannot_have_an_accessibility_modifier: diag(1018, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018", "An index signature parameter cannot have an accessibility modifier."), An_index_signature_parameter_cannot_have_a_question_mark: diag(1019, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_a_question_mark_1019", "An index signature parameter cannot have a question mark."), An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."), An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."), An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."), An_index_signature_parameter_type_must_be_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_or_number_1023", "An index signature parameter type must be 'string' or 'number'."), readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."), Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."), _0_modifier_must_precede_1_modifier: diag(1029, ts.DiagnosticCategory.Error, "_0_modifier_must_precede_1_modifier_1029", "'{0}' modifier must precede '{1}' modifier."), _0_modifier_already_seen: diag(1030, ts.DiagnosticCategory.Error, "_0_modifier_already_seen_1030", "'{0}' modifier already seen."), _0_modifier_cannot_appear_on_a_class_element: diag(1031, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_class_element_1031", "'{0}' modifier cannot appear on a class element."), super_must_be_followed_by_an_argument_list_or_member_access: diag(1034, ts.DiagnosticCategory.Error, "super_must_be_followed_by_an_argument_list_or_member_access_1034", "'super' must be followed by an argument list or member access."), Only_ambient_modules_can_use_quoted_names: diag(1035, ts.DiagnosticCategory.Error, "Only_ambient_modules_can_use_quoted_names_1035", "Only ambient modules can use quoted names."), Statements_are_not_allowed_in_ambient_contexts: diag(1036, ts.DiagnosticCategory.Error, "Statements_are_not_allowed_in_ambient_contexts_1036", "Statements are not allowed in ambient contexts."), A_declare_modifier_cannot_be_used_in_an_already_ambient_context: diag(1038, ts.DiagnosticCategory.Error, "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038", "A 'declare' modifier cannot be used in an already ambient context."), Initializers_are_not_allowed_in_ambient_contexts: diag(1039, ts.DiagnosticCategory.Error, "Initializers_are_not_allowed_in_ambient_contexts_1039", "Initializers are not allowed in ambient contexts."), _0_modifier_cannot_be_used_in_an_ambient_context: diag(1040, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_in_an_ambient_context_1040", "'{0}' modifier cannot be used in an ambient context."), _0_modifier_cannot_be_used_with_a_class_declaration: diag(1041, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_with_a_class_declaration_1041", "'{0}' modifier cannot be used with a class declaration."), _0_modifier_cannot_be_used_here: diag(1042, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_here_1042", "'{0}' modifier cannot be used here."), _0_modifier_cannot_appear_on_a_data_property: diag(1043, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_data_property_1043", "'{0}' modifier cannot appear on a data property."), _0_modifier_cannot_appear_on_a_module_or_namespace_element: diag(1044, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044", "'{0}' modifier cannot appear on a module or namespace element."), A_0_modifier_cannot_be_used_with_an_interface_declaration: diag(1045, ts.DiagnosticCategory.Error, "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045", "A '{0}' modifier cannot be used with an interface declaration."), A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: diag(1046, ts.DiagnosticCategory.Error, "A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file_1046", "A 'declare' modifier is required for a top level declaration in a .d.ts file."), A_rest_parameter_cannot_be_optional: diag(1047, ts.DiagnosticCategory.Error, "A_rest_parameter_cannot_be_optional_1047", "A rest parameter cannot be optional."), A_rest_parameter_cannot_have_an_initializer: diag(1048, ts.DiagnosticCategory.Error, "A_rest_parameter_cannot_have_an_initializer_1048", "A rest parameter cannot have an initializer."), A_set_accessor_must_have_exactly_one_parameter: diag(1049, ts.DiagnosticCategory.Error, "A_set_accessor_must_have_exactly_one_parameter_1049", "A 'set' accessor must have exactly one parameter."), A_set_accessor_cannot_have_an_optional_parameter: diag(1051, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_an_optional_parameter_1051", "A 'set' accessor cannot have an optional parameter."), A_set_accessor_parameter_cannot_have_an_initializer: diag(1052, ts.DiagnosticCategory.Error, "A_set_accessor_parameter_cannot_have_an_initializer_1052", "A 'set' accessor parameter cannot have an initializer."), A_set_accessor_cannot_have_rest_parameter: diag(1053, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_rest_parameter_1053", "A 'set' accessor cannot have rest parameter."), A_get_accessor_cannot_have_parameters: diag(1054, ts.DiagnosticCategory.Error, "A_get_accessor_cannot_have_parameters_1054", "A 'get' accessor cannot have parameters."), Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value: diag(1055, ts.DiagnosticCategory.Error, "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055", "Type '{0}' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value."), Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: diag(1056, ts.DiagnosticCategory.Error, "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056", "Accessors are only available when targeting ECMAScript 5 and higher."), An_async_function_or_method_must_have_a_valid_awaitable_return_type: diag(1057, ts.DiagnosticCategory.Error, "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057", "An async function or method must have a valid awaitable return type."), The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1058, ts.DiagnosticCategory.Error, "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058", "The return type of an async function must either be a valid promise or must not contain a callable 'then' member."), A_promise_must_have_a_then_method: diag(1059, ts.DiagnosticCategory.Error, "A_promise_must_have_a_then_method_1059", "A promise must have a 'then' method."), The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback: diag(1060, ts.DiagnosticCategory.Error, "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060", "The first parameter of the 'then' method of a promise must be a callback."), Enum_member_must_have_initializer: diag(1061, ts.DiagnosticCategory.Error, "Enum_member_must_have_initializer_1061", "Enum member must have initializer."), Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: diag(1062, ts.DiagnosticCategory.Error, "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062", "Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method."), An_export_assignment_cannot_be_used_in_a_namespace: diag(1063, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_be_used_in_a_namespace_1063", "An export assignment cannot be used in a namespace."), The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type: diag(1064, ts.DiagnosticCategory.Error, "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1064", "The return type of an async function or method must be the global Promise type."), In_ambient_enum_declarations_member_initializer_must_be_constant_expression: diag(1066, ts.DiagnosticCategory.Error, "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066", "In ambient enum declarations member initializer must be constant expression."), Unexpected_token_A_constructor_method_accessor_or_property_was_expected: diag(1068, ts.DiagnosticCategory.Error, "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068", "Unexpected token. A constructor, method, accessor, or property was expected."), Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces: diag(1069, ts.DiagnosticCategory.Error, "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069", "Unexpected token. A type parameter name was expected without curly braces."), _0_modifier_cannot_appear_on_a_type_member: diag(1070, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_type_member_1070", "'{0}' modifier cannot appear on a type member."), _0_modifier_cannot_appear_on_an_index_signature: diag(1071, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_an_index_signature_1071", "'{0}' modifier cannot appear on an index signature."), A_0_modifier_cannot_be_used_with_an_import_declaration: diag(1079, ts.DiagnosticCategory.Error, "A_0_modifier_cannot_be_used_with_an_import_declaration_1079", "A '{0}' modifier cannot be used with an import declaration."), Invalid_reference_directive_syntax: diag(1084, ts.DiagnosticCategory.Error, "Invalid_reference_directive_syntax_1084", "Invalid 'reference' directive syntax."), Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0: diag(1085, ts.DiagnosticCategory.Error, "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085", "Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'."), An_accessor_cannot_be_declared_in_an_ambient_context: diag(1086, ts.DiagnosticCategory.Error, "An_accessor_cannot_be_declared_in_an_ambient_context_1086", "An accessor cannot be declared in an ambient context."), _0_modifier_cannot_appear_on_a_constructor_declaration: diag(1089, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_constructor_declaration_1089", "'{0}' modifier cannot appear on a constructor declaration."), _0_modifier_cannot_appear_on_a_parameter: diag(1090, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_parameter_1090", "'{0}' modifier cannot appear on a parameter."), Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: diag(1091, ts.DiagnosticCategory.Error, "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091", "Only a single variable declaration is allowed in a 'for...in' statement."), Type_parameters_cannot_appear_on_a_constructor_declaration: diag(1092, ts.DiagnosticCategory.Error, "Type_parameters_cannot_appear_on_a_constructor_declaration_1092", "Type parameters cannot appear on a constructor declaration."), Type_annotation_cannot_appear_on_a_constructor_declaration: diag(1093, ts.DiagnosticCategory.Error, "Type_annotation_cannot_appear_on_a_constructor_declaration_1093", "Type annotation cannot appear on a constructor declaration."), An_accessor_cannot_have_type_parameters: diag(1094, ts.DiagnosticCategory.Error, "An_accessor_cannot_have_type_parameters_1094", "An accessor cannot have type parameters."), A_set_accessor_cannot_have_a_return_type_annotation: diag(1095, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_a_return_type_annotation_1095", "A 'set' accessor cannot have a return type annotation."), An_index_signature_must_have_exactly_one_parameter: diag(1096, ts.DiagnosticCategory.Error, "An_index_signature_must_have_exactly_one_parameter_1096", "An index signature must have exactly one parameter."), _0_list_cannot_be_empty: diag(1097, ts.DiagnosticCategory.Error, "_0_list_cannot_be_empty_1097", "'{0}' list cannot be empty."), Type_parameter_list_cannot_be_empty: diag(1098, ts.DiagnosticCategory.Error, "Type_parameter_list_cannot_be_empty_1098", "Type parameter list cannot be empty."), Type_argument_list_cannot_be_empty: diag(1099, ts.DiagnosticCategory.Error, "Type_argument_list_cannot_be_empty_1099", "Type argument list cannot be empty."), Invalid_use_of_0_in_strict_mode: diag(1100, ts.DiagnosticCategory.Error, "Invalid_use_of_0_in_strict_mode_1100", "Invalid use of '{0}' in strict mode."), with_statements_are_not_allowed_in_strict_mode: diag(1101, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_strict_mode_1101", "'with' statements are not allowed in strict mode."), delete_cannot_be_called_on_an_identifier_in_strict_mode: diag(1102, ts.DiagnosticCategory.Error, "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102", "'delete' cannot be called on an identifier in strict mode."), A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator: diag(1103, ts.DiagnosticCategory.Error, "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103", "A 'for-await-of' statement is only allowed within an async function or async generator."), A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."), A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."), Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."), A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."), Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."), Type_expected: diag(1110, ts.DiagnosticCategory.Error, "Type_expected_1110", "Type expected."), A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: diag(1113, ts.DiagnosticCategory.Error, "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", "A 'default' clause cannot appear more than once in a 'switch' statement."), Duplicate_label_0: diag(1114, ts.DiagnosticCategory.Error, "Duplicate_label_0_1114", "Duplicate label '{0}'."), A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: diag(1115, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", "A 'continue' statement can only jump to a label of an enclosing iteration statement."), A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: diag(1116, ts.DiagnosticCategory.Error, "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116", "A 'break' statement can only jump to a label of an enclosing statement."), An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: diag(1117, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode_1117", "An object literal cannot have multiple properties with the same name in strict mode."), An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: diag(1118, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118", "An object literal cannot have multiple get/set accessors with the same name."), An_object_literal_cannot_have_property_and_accessor_with_the_same_name: diag(1119, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119", "An object literal cannot have property and accessor with the same name."), An_export_assignment_cannot_have_modifiers: diag(1120, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_have_modifiers_1120", "An export assignment cannot have modifiers."), Octal_literals_are_not_allowed_in_strict_mode: diag(1121, ts.DiagnosticCategory.Error, "Octal_literals_are_not_allowed_in_strict_mode_1121", "Octal literals are not allowed in strict mode."), A_tuple_type_element_list_cannot_be_empty: diag(1122, ts.DiagnosticCategory.Error, "A_tuple_type_element_list_cannot_be_empty_1122", "A tuple type element list cannot be empty."), Variable_declaration_list_cannot_be_empty: diag(1123, ts.DiagnosticCategory.Error, "Variable_declaration_list_cannot_be_empty_1123", "Variable declaration list cannot be empty."), Digit_expected: diag(1124, ts.DiagnosticCategory.Error, "Digit_expected_1124", "Digit expected."), Hexadecimal_digit_expected: diag(1125, ts.DiagnosticCategory.Error, "Hexadecimal_digit_expected_1125", "Hexadecimal digit expected."), Unexpected_end_of_text: diag(1126, ts.DiagnosticCategory.Error, "Unexpected_end_of_text_1126", "Unexpected end of text."), Invalid_character: diag(1127, ts.DiagnosticCategory.Error, "Invalid_character_1127", "Invalid character."), Declaration_or_statement_expected: diag(1128, ts.DiagnosticCategory.Error, "Declaration_or_statement_expected_1128", "Declaration or statement expected."), Statement_expected: diag(1129, ts.DiagnosticCategory.Error, "Statement_expected_1129", "Statement expected."), case_or_default_expected: diag(1130, ts.DiagnosticCategory.Error, "case_or_default_expected_1130", "'case' or 'default' expected."), Property_or_signature_expected: diag(1131, ts.DiagnosticCategory.Error, "Property_or_signature_expected_1131", "Property or signature expected."), Enum_member_expected: diag(1132, ts.DiagnosticCategory.Error, "Enum_member_expected_1132", "Enum member expected."), Variable_declaration_expected: diag(1134, ts.DiagnosticCategory.Error, "Variable_declaration_expected_1134", "Variable declaration expected."), Argument_expression_expected: diag(1135, ts.DiagnosticCategory.Error, "Argument_expression_expected_1135", "Argument expression expected."), Property_assignment_expected: diag(1136, ts.DiagnosticCategory.Error, "Property_assignment_expected_1136", "Property assignment expected."), Expression_or_comma_expected: diag(1137, ts.DiagnosticCategory.Error, "Expression_or_comma_expected_1137", "Expression or comma expected."), Parameter_declaration_expected: diag(1138, ts.DiagnosticCategory.Error, "Parameter_declaration_expected_1138", "Parameter declaration expected."), Type_parameter_declaration_expected: diag(1139, ts.DiagnosticCategory.Error, "Type_parameter_declaration_expected_1139", "Type parameter declaration expected."), Type_argument_expected: diag(1140, ts.DiagnosticCategory.Error, "Type_argument_expected_1140", "Type argument expected."), String_literal_expected: diag(1141, ts.DiagnosticCategory.Error, "String_literal_expected_1141", "String literal expected."), Line_break_not_permitted_here: diag(1142, ts.DiagnosticCategory.Error, "Line_break_not_permitted_here_1142", "Line break not permitted here."), or_expected: diag(1144, ts.DiagnosticCategory.Error, "or_expected_1144", "'{' or ';' expected."), Declaration_expected: diag(1146, ts.DiagnosticCategory.Error, "Declaration_expected_1146", "Declaration expected."), Import_declarations_in_a_namespace_cannot_reference_a_module: diag(1147, ts.DiagnosticCategory.Error, "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", "Import declarations in a namespace cannot reference a module."), Cannot_use_imports_exports_or_module_augmentations_when_module_is_none: diag(1148, ts.DiagnosticCategory.Error, "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148", "Cannot use imports, exports, or module augmentations when '--module' is 'none'."), File_name_0_differs_from_already_included_file_name_1_only_in_casing: diag(1149, ts.DiagnosticCategory.Error, "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", "File name '{0}' differs from already included file name '{1}' only in casing."), new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: diag(1150, ts.DiagnosticCategory.Error, "new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150", "'new T[]' cannot be used to create an array. Use 'new Array()' instead."), const_declarations_must_be_initialized: diag(1155, ts.DiagnosticCategory.Error, "const_declarations_must_be_initialized_1155", "'const' declarations must be initialized."), const_declarations_can_only_be_declared_inside_a_block: diag(1156, ts.DiagnosticCategory.Error, "const_declarations_can_only_be_declared_inside_a_block_1156", "'const' declarations can only be declared inside a block."), let_declarations_can_only_be_declared_inside_a_block: diag(1157, ts.DiagnosticCategory.Error, "let_declarations_can_only_be_declared_inside_a_block_1157", "'let' declarations can only be declared inside a block."), Unterminated_template_literal: diag(1160, ts.DiagnosticCategory.Error, "Unterminated_template_literal_1160", "Unterminated template literal."), Unterminated_regular_expression_literal: diag(1161, ts.DiagnosticCategory.Error, "Unterminated_regular_expression_literal_1161", "Unterminated regular expression literal."), An_object_member_cannot_be_declared_optional: diag(1162, ts.DiagnosticCategory.Error, "An_object_member_cannot_be_declared_optional_1162", "An object member cannot be declared optional."), A_yield_expression_is_only_allowed_in_a_generator_body: diag(1163, ts.DiagnosticCategory.Error, "A_yield_expression_is_only_allowed_in_a_generator_body_1163", "A 'yield' expression is only allowed in a generator body."), Computed_property_names_are_not_allowed_in_enums: diag(1164, ts.DiagnosticCategory.Error, "Computed_property_names_are_not_allowed_in_enums_1164", "Computed property names are not allowed in enums."), A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1165, ts.DiagnosticCategory.Error, "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165", "A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type."), A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1166, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166", "A computed property name in a class property declaration must refer to an expression whose type is a literal type or a 'unique symbol' type."), A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1168, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168", "A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type."), A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1169, ts.DiagnosticCategory.Error, "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169", "A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type."), A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1170, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170", "A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type."), A_comma_expression_is_not_allowed_in_a_computed_property_name: diag(1171, ts.DiagnosticCategory.Error, "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171", "A comma expression is not allowed in a computed property name."), extends_clause_already_seen: diag(1172, ts.DiagnosticCategory.Error, "extends_clause_already_seen_1172", "'extends' clause already seen."), extends_clause_must_precede_implements_clause: diag(1173, ts.DiagnosticCategory.Error, "extends_clause_must_precede_implements_clause_1173", "'extends' clause must precede 'implements' clause."), Classes_can_only_extend_a_single_class: diag(1174, ts.DiagnosticCategory.Error, "Classes_can_only_extend_a_single_class_1174", "Classes can only extend a single class."), implements_clause_already_seen: diag(1175, ts.DiagnosticCategory.Error, "implements_clause_already_seen_1175", "'implements' clause already seen."), Interface_declaration_cannot_have_implements_clause: diag(1176, ts.DiagnosticCategory.Error, "Interface_declaration_cannot_have_implements_clause_1176", "Interface declaration cannot have 'implements' clause."), Binary_digit_expected: diag(1177, ts.DiagnosticCategory.Error, "Binary_digit_expected_1177", "Binary digit expected."), Octal_digit_expected: diag(1178, ts.DiagnosticCategory.Error, "Octal_digit_expected_1178", "Octal digit expected."), Unexpected_token_expected: diag(1179, ts.DiagnosticCategory.Error, "Unexpected_token_expected_1179", "Unexpected token. '{' expected."), Property_destructuring_pattern_expected: diag(1180, ts.DiagnosticCategory.Error, "Property_destructuring_pattern_expected_1180", "Property destructuring pattern expected."), Array_element_destructuring_pattern_expected: diag(1181, ts.DiagnosticCategory.Error, "Array_element_destructuring_pattern_expected_1181", "Array element destructuring pattern expected."), A_destructuring_declaration_must_have_an_initializer: diag(1182, ts.DiagnosticCategory.Error, "A_destructuring_declaration_must_have_an_initializer_1182", "A destructuring declaration must have an initializer."), An_implementation_cannot_be_declared_in_ambient_contexts: diag(1183, ts.DiagnosticCategory.Error, "An_implementation_cannot_be_declared_in_ambient_contexts_1183", "An implementation cannot be declared in ambient contexts."), Modifiers_cannot_appear_here: diag(1184, ts.DiagnosticCategory.Error, "Modifiers_cannot_appear_here_1184", "Modifiers cannot appear here."), Merge_conflict_marker_encountered: diag(1185, ts.DiagnosticCategory.Error, "Merge_conflict_marker_encountered_1185", "Merge conflict marker encountered."), A_rest_element_cannot_have_an_initializer: diag(1186, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_an_initializer_1186", "A rest element cannot have an initializer."), A_parameter_property_may_not_be_declared_using_a_binding_pattern: diag(1187, ts.DiagnosticCategory.Error, "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", "A parameter property may not be declared using a binding pattern."), Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: diag(1188, ts.DiagnosticCategory.Error, "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188", "Only a single variable declaration is allowed in a 'for...of' statement."), The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: diag(1189, ts.DiagnosticCategory.Error, "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189", "The variable declaration of a 'for...in' statement cannot have an initializer."), The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: diag(1190, ts.DiagnosticCategory.Error, "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190", "The variable declaration of a 'for...of' statement cannot have an initializer."), An_import_declaration_cannot_have_modifiers: diag(1191, ts.DiagnosticCategory.Error, "An_import_declaration_cannot_have_modifiers_1191", "An import declaration cannot have modifiers."), Module_0_has_no_default_export: diag(1192, ts.DiagnosticCategory.Error, "Module_0_has_no_default_export_1192", "Module '{0}' has no default export."), An_export_declaration_cannot_have_modifiers: diag(1193, ts.DiagnosticCategory.Error, "An_export_declaration_cannot_have_modifiers_1193", "An export declaration cannot have modifiers."), Export_declarations_are_not_permitted_in_a_namespace: diag(1194, ts.DiagnosticCategory.Error, "Export_declarations_are_not_permitted_in_a_namespace_1194", "Export declarations are not permitted in a namespace."), Catch_clause_variable_cannot_have_a_type_annotation: diag(1196, ts.DiagnosticCategory.Error, "Catch_clause_variable_cannot_have_a_type_annotation_1196", "Catch clause variable cannot have a type annotation."), Catch_clause_variable_cannot_have_an_initializer: diag(1197, ts.DiagnosticCategory.Error, "Catch_clause_variable_cannot_have_an_initializer_1197", "Catch clause variable cannot have an initializer."), An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: diag(1198, ts.DiagnosticCategory.Error, "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198", "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive."), Unterminated_Unicode_escape_sequence: diag(1199, ts.DiagnosticCategory.Error, "Unterminated_Unicode_escape_sequence_1199", "Unterminated Unicode escape sequence."), Line_terminator_not_permitted_before_arrow: diag(1200, ts.DiagnosticCategory.Error, "Line_terminator_not_permitted_before_arrow_1200", "Line terminator not permitted before arrow."), 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: diag(1202, ts.DiagnosticCategory.Error, "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202", "Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead."), Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead: diag(1203, ts.DiagnosticCategory.Error, "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203", "Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead."), Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided: diag(1205, ts.DiagnosticCategory.Error, "Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided_1205", "Cannot re-export a type when the '--isolatedModules' flag is provided."), Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."), Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."), Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: diag(1208, ts.DiagnosticCategory.Error, "Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided_1208", "Cannot compile namespaces when the '--isolatedModules' flag is provided."), Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: diag(1209, ts.DiagnosticCategory.Error, "Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209", "Ambient const enums are not allowed when the '--isolatedModules' flag is provided."), Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."), A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."), Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."), Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."), Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: diag(1214, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode."), Invalid_use_of_0_Modules_are_automatically_in_strict_mode: diag(1215, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", "Invalid use of '{0}'. Modules are automatically in strict mode."), Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules: diag(1216, ts.DiagnosticCategory.Error, "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216", "Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules."), Export_assignment_is_not_supported_when_module_flag_is_system: diag(1218, ts.DiagnosticCategory.Error, "Export_assignment_is_not_supported_when_module_flag_is_system_1218", "Export assignment is not supported when '--module' flag is 'system'."), Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: diag(1219, ts.DiagnosticCategory.Error, "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219", "Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning."), Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher: diag(1220, ts.DiagnosticCategory.Error, "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220", "Generators are only available when targeting ECMAScript 2015 or higher."), Generators_are_not_allowed_in_an_ambient_context: diag(1221, ts.DiagnosticCategory.Error, "Generators_are_not_allowed_in_an_ambient_context_1221", "Generators are not allowed in an ambient context."), An_overload_signature_cannot_be_declared_as_a_generator: diag(1222, ts.DiagnosticCategory.Error, "An_overload_signature_cannot_be_declared_as_a_generator_1222", "An overload signature cannot be declared as a generator."), _0_tag_already_specified: diag(1223, ts.DiagnosticCategory.Error, "_0_tag_already_specified_1223", "'{0}' tag already specified."), Signature_0_must_be_a_type_predicate: diag(1224, ts.DiagnosticCategory.Error, "Signature_0_must_be_a_type_predicate_1224", "Signature '{0}' must be a type predicate."), Cannot_find_parameter_0: diag(1225, ts.DiagnosticCategory.Error, "Cannot_find_parameter_0_1225", "Cannot find parameter '{0}'."), Type_predicate_0_is_not_assignable_to_1: diag(1226, ts.DiagnosticCategory.Error, "Type_predicate_0_is_not_assignable_to_1_1226", "Type predicate '{0}' is not assignable to '{1}'."), Parameter_0_is_not_in_the_same_position_as_parameter_1: diag(1227, ts.DiagnosticCategory.Error, "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", "Parameter '{0}' is not in the same position as parameter '{1}'."), A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: diag(1228, ts.DiagnosticCategory.Error, "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", "A type predicate is only allowed in return type position for functions and methods."), A_type_predicate_cannot_reference_a_rest_parameter: diag(1229, ts.DiagnosticCategory.Error, "A_type_predicate_cannot_reference_a_rest_parameter_1229", "A type predicate cannot reference a rest parameter."), A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: diag(1230, ts.DiagnosticCategory.Error, "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", "A type predicate cannot reference element '{0}' in a binding pattern."), An_export_assignment_can_only_be_used_in_a_module: diag(1231, ts.DiagnosticCategory.Error, "An_export_assignment_can_only_be_used_in_a_module_1231", "An export assignment can only be used in a module."), An_import_declaration_can_only_be_used_in_a_namespace_or_module: diag(1232, ts.DiagnosticCategory.Error, "An_import_declaration_can_only_be_used_in_a_namespace_or_module_1232", "An import declaration can only be used in a namespace or module."), An_export_declaration_can_only_be_used_in_a_module: diag(1233, ts.DiagnosticCategory.Error, "An_export_declaration_can_only_be_used_in_a_module_1233", "An export declaration can only be used in a module."), An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: diag(1234, ts.DiagnosticCategory.Error, "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234", "An ambient module declaration is only allowed at the top level in a file."), A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: diag(1235, ts.DiagnosticCategory.Error, "A_namespace_declaration_is_only_allowed_in_a_namespace_or_module_1235", "A namespace declaration is only allowed in a namespace or module."), The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: diag(1236, ts.DiagnosticCategory.Error, "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236", "The return type of a property decorator function must be either 'void' or 'any'."), The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: diag(1237, ts.DiagnosticCategory.Error, "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237", "The return type of a parameter decorator function must be either 'void' or 'any'."), Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: diag(1238, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238", "Unable to resolve signature of class decorator when called as an expression."), Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: diag(1239, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239", "Unable to resolve signature of parameter decorator when called as an expression."), Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: diag(1240, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240", "Unable to resolve signature of property decorator when called as an expression."), Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: diag(1241, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241", "Unable to resolve signature of method decorator when called as an expression."), abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: diag(1242, ts.DiagnosticCategory.Error, "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242", "'abstract' modifier can only appear on a class, method, or property declaration."), _0_modifier_cannot_be_used_with_1_modifier: diag(1243, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_with_1_modifier_1243", "'{0}' modifier cannot be used with '{1}' modifier."), Abstract_methods_can_only_appear_within_an_abstract_class: diag(1244, ts.DiagnosticCategory.Error, "Abstract_methods_can_only_appear_within_an_abstract_class_1244", "Abstract methods can only appear within an abstract class."), Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: diag(1245, ts.DiagnosticCategory.Error, "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245", "Method '{0}' cannot have an implementation because it is marked abstract."), An_interface_property_cannot_have_an_initializer: diag(1246, ts.DiagnosticCategory.Error, "An_interface_property_cannot_have_an_initializer_1246", "An interface property cannot have an initializer."), A_type_literal_property_cannot_have_an_initializer: diag(1247, ts.DiagnosticCategory.Error, "A_type_literal_property_cannot_have_an_initializer_1247", "A type literal property cannot have an initializer."), A_class_member_cannot_have_the_0_keyword: diag(1248, ts.DiagnosticCategory.Error, "A_class_member_cannot_have_the_0_keyword_1248", "A class member cannot have the '{0}' keyword."), A_decorator_can_only_decorate_a_method_implementation_not_an_overload: diag(1249, ts.DiagnosticCategory.Error, "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", "A decorator can only decorate a method implementation, not an overload."), Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: diag(1250, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'."), Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: diag(1251, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode."), Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: diag(1252, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode."), _0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag: diag(1253, ts.DiagnosticCategory.Error, "_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag_1253", "'{0}' tag cannot be used independently as a top level JSDoc tag."), A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal: diag(1254, ts.DiagnosticCategory.Error, "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_1254", "A 'const' initializer in an ambient context must be a string or numeric literal."), A_definite_assignment_assertion_is_not_permitted_in_this_context: diag(1255, ts.DiagnosticCategory.Error, "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255", "A definite assignment assertion '!' is not permitted in this context."), with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."), await_expression_is_only_allowed_within_an_async_function: diag(1308, ts.DiagnosticCategory.Error, "await_expression_is_only_allowed_within_an_async_function_1308", "'await' expression is only allowed within an async function."), can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: diag(1312, ts.DiagnosticCategory.Error, "can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment_1312", "'=' can only be used in an object literal property inside a destructuring assignment."), The_body_of_an_if_statement_cannot_be_the_empty_statement: diag(1313, ts.DiagnosticCategory.Error, "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313", "The body of an 'if' statement cannot be the empty statement."), Global_module_exports_may_only_appear_in_module_files: diag(1314, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_in_module_files_1314", "Global module exports may only appear in module files."), Global_module_exports_may_only_appear_in_declaration_files: diag(1315, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_in_declaration_files_1315", "Global module exports may only appear in declaration files."), Global_module_exports_may_only_appear_at_top_level: diag(1316, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_at_top_level_1316", "Global module exports may only appear at top level."), A_parameter_property_cannot_be_declared_using_a_rest_parameter: diag(1317, ts.DiagnosticCategory.Error, "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", "A parameter property cannot be declared using a rest parameter."), An_abstract_accessor_cannot_have_an_implementation: diag(1318, ts.DiagnosticCategory.Error, "An_abstract_accessor_cannot_have_an_implementation_1318", "An abstract accessor cannot have an implementation."), A_default_export_can_only_be_used_in_an_ECMAScript_style_module: diag(1319, ts.DiagnosticCategory.Error, "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319", "A default export can only be used in an ECMAScript-style module."), Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1320, ts.DiagnosticCategory.Error, "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320", "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member."), Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, ts.DiagnosticCategory.Error, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."), Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, ts.DiagnosticCategory.Error, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."), Dynamic_import_is_only_supported_when_module_flag_is_commonjs_or_esNext: diag(1323, ts.DiagnosticCategory.Error, "Dynamic_import_is_only_supported_when_module_flag_is_commonjs_or_esNext_1323", "Dynamic import is only supported when '--module' flag is 'commonjs' or 'esNext'."), Dynamic_import_must_have_one_specifier_as_an_argument: diag(1324, ts.DiagnosticCategory.Error, "Dynamic_import_must_have_one_specifier_as_an_argument_1324", "Dynamic import must have one specifier as an argument."), Specifier_of_dynamic_import_cannot_be_spread_element: diag(1325, ts.DiagnosticCategory.Error, "Specifier_of_dynamic_import_cannot_be_spread_element_1325", "Specifier of dynamic import cannot be spread element."), Dynamic_import_cannot_have_type_arguments: diag(1326, ts.DiagnosticCategory.Error, "Dynamic_import_cannot_have_type_arguments_1326", "Dynamic import cannot have type arguments"), String_literal_with_double_quotes_expected: diag(1327, ts.DiagnosticCategory.Error, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."), Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal: diag(1328, ts.DiagnosticCategory.Error, "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328", "Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal."), _0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0: diag(1329, ts.DiagnosticCategory.Error, "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329", "'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?"), A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly: diag(1330, ts.DiagnosticCategory.Error, "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330", "A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'."), A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly: diag(1331, ts.DiagnosticCategory.Error, "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331", "A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'."), A_variable_whose_type_is_a_unique_symbol_type_must_be_const: diag(1332, ts.DiagnosticCategory.Error, "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332", "A variable whose type is a 'unique symbol' type must be 'const'."), unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."), unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."), unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."), An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."), An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."), infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."), Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."), Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_1340", "Module '{0}' does not refer to a type, but is used as a type here."), Type_arguments_cannot_be_used_here: diag(1342, ts.DiagnosticCategory.Error, "Type_arguments_cannot_be_used_here_1342", "Type arguments cannot be used here."), The_import_meta_meta_property_is_only_allowed_using_ESNext_for_the_target_and_module_compiler_options: diag(1343, ts.DiagnosticCategory.Error, "The_import_meta_meta_property_is_only_allowed_using_ESNext_for_the_target_and_module_compiler_option_1343", "The 'import.meta' meta-property is only allowed using 'ESNext' for the 'target' and 'module' compiler options."), Duplicate_identifier_0: diag(2300, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_2300", "Duplicate identifier '{0}'."), Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2301, ts.DiagnosticCategory.Error, "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."), Static_members_cannot_reference_class_type_parameters: diag(2302, ts.DiagnosticCategory.Error, "Static_members_cannot_reference_class_type_parameters_2302", "Static members cannot reference class type parameters."), Circular_definition_of_import_alias_0: diag(2303, ts.DiagnosticCategory.Error, "Circular_definition_of_import_alias_0_2303", "Circular definition of import alias '{0}'."), Cannot_find_name_0: diag(2304, ts.DiagnosticCategory.Error, "Cannot_find_name_0_2304", "Cannot find name '{0}'."), Module_0_has_no_exported_member_1: diag(2305, ts.DiagnosticCategory.Error, "Module_0_has_no_exported_member_1_2305", "Module '{0}' has no exported member '{1}'."), File_0_is_not_a_module: diag(2306, ts.DiagnosticCategory.Error, "File_0_is_not_a_module_2306", "File '{0}' is not a module."), Cannot_find_module_0: diag(2307, ts.DiagnosticCategory.Error, "Cannot_find_module_0_2307", "Cannot find module '{0}'."), Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: diag(2308, ts.DiagnosticCategory.Error, "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308", "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity."), An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: diag(2309, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309", "An export assignment cannot be used in a module with other exported elements."), Type_0_recursively_references_itself_as_a_base_type: diag(2310, ts.DiagnosticCategory.Error, "Type_0_recursively_references_itself_as_a_base_type_2310", "Type '{0}' recursively references itself as a base type."), A_class_may_only_extend_another_class: diag(2311, ts.DiagnosticCategory.Error, "A_class_may_only_extend_another_class_2311", "A class may only extend another class."), An_interface_may_only_extend_a_class_or_another_interface: diag(2312, ts.DiagnosticCategory.Error, "An_interface_may_only_extend_a_class_or_another_interface_2312", "An interface may only extend a class or another interface."), Type_parameter_0_has_a_circular_constraint: diag(2313, ts.DiagnosticCategory.Error, "Type_parameter_0_has_a_circular_constraint_2313", "Type parameter '{0}' has a circular constraint."), Generic_type_0_requires_1_type_argument_s: diag(2314, ts.DiagnosticCategory.Error, "Generic_type_0_requires_1_type_argument_s_2314", "Generic type '{0}' requires {1} type argument(s)."), Type_0_is_not_generic: diag(2315, ts.DiagnosticCategory.Error, "Type_0_is_not_generic_2315", "Type '{0}' is not generic."), Global_type_0_must_be_a_class_or_interface_type: diag(2316, ts.DiagnosticCategory.Error, "Global_type_0_must_be_a_class_or_interface_type_2316", "Global type '{0}' must be a class or interface type."), Global_type_0_must_have_1_type_parameter_s: diag(2317, ts.DiagnosticCategory.Error, "Global_type_0_must_have_1_type_parameter_s_2317", "Global type '{0}' must have {1} type parameter(s)."), Cannot_find_global_type_0: diag(2318, ts.DiagnosticCategory.Error, "Cannot_find_global_type_0_2318", "Cannot find global type '{0}'."), Named_property_0_of_types_1_and_2_are_not_identical: diag(2319, ts.DiagnosticCategory.Error, "Named_property_0_of_types_1_and_2_are_not_identical_2319", "Named property '{0}' of types '{1}' and '{2}' are not identical."), Interface_0_cannot_simultaneously_extend_types_1_and_2: diag(2320, ts.DiagnosticCategory.Error, "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320", "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'."), Excessive_stack_depth_comparing_types_0_and_1: diag(2321, ts.DiagnosticCategory.Error, "Excessive_stack_depth_comparing_types_0_and_1_2321", "Excessive stack depth comparing types '{0}' and '{1}'."), Type_0_is_not_assignable_to_type_1: diag(2322, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_2322", "Type '{0}' is not assignable to type '{1}'."), Cannot_redeclare_exported_variable_0: diag(2323, ts.DiagnosticCategory.Error, "Cannot_redeclare_exported_variable_0_2323", "Cannot redeclare exported variable '{0}'."), Property_0_is_missing_in_type_1: diag(2324, ts.DiagnosticCategory.Error, "Property_0_is_missing_in_type_1_2324", "Property '{0}' is missing in type '{1}'."), Property_0_is_private_in_type_1_but_not_in_type_2: diag(2325, ts.DiagnosticCategory.Error, "Property_0_is_private_in_type_1_but_not_in_type_2_2325", "Property '{0}' is private in type '{1}' but not in type '{2}'."), Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."), Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."), Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."), Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."), Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."), this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."), this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."), this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."), this_cannot_be_referenced_in_a_static_property_initializer: diag(2334, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_static_property_initializer_2334", "'this' cannot be referenced in a static property initializer."), super_can_only_be_referenced_in_a_derived_class: diag(2335, ts.DiagnosticCategory.Error, "super_can_only_be_referenced_in_a_derived_class_2335", "'super' can only be referenced in a derived class."), super_cannot_be_referenced_in_constructor_arguments: diag(2336, ts.DiagnosticCategory.Error, "super_cannot_be_referenced_in_constructor_arguments_2336", "'super' cannot be referenced in constructor arguments."), Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: diag(2337, ts.DiagnosticCategory.Error, "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337", "Super calls are not permitted outside constructors or in nested functions inside constructors."), super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: diag(2338, ts.DiagnosticCategory.Error, "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338", "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class."), Property_0_does_not_exist_on_type_1: diag(2339, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_2339", "Property '{0}' does not exist on type '{1}'."), Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: diag(2340, ts.DiagnosticCategory.Error, "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340", "Only public and protected methods of the base class are accessible via the 'super' keyword."), Property_0_is_private_and_only_accessible_within_class_1: diag(2341, ts.DiagnosticCategory.Error, "Property_0_is_private_and_only_accessible_within_class_1_2341", "Property '{0}' is private and only accessible within class '{1}'."), An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: diag(2342, ts.DiagnosticCategory.Error, "An_index_expression_argument_must_be_of_type_string_number_symbol_or_any_2342", "An index expression argument must be of type 'string', 'number', 'symbol', or 'any'."), This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1: diag(2343, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1_2343", "This syntax requires an imported helper named '{1}', but module '{0}' has no exported member '{1}'."), Type_0_does_not_satisfy_the_constraint_1: diag(2344, ts.DiagnosticCategory.Error, "Type_0_does_not_satisfy_the_constraint_1_2344", "Type '{0}' does not satisfy the constraint '{1}'."), Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: diag(2345, ts.DiagnosticCategory.Error, "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", "Argument of type '{0}' is not assignable to parameter of type '{1}'."), Call_target_does_not_contain_any_signatures: diag(2346, ts.DiagnosticCategory.Error, "Call_target_does_not_contain_any_signatures_2346", "Call target does not contain any signatures."), Untyped_function_calls_may_not_accept_type_arguments: diag(2347, ts.DiagnosticCategory.Error, "Untyped_function_calls_may_not_accept_type_arguments_2347", "Untyped function calls may not accept type arguments."), Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: diag(2348, ts.DiagnosticCategory.Error, "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348", "Value of type '{0}' is not callable. Did you mean to include 'new'?"), Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures: diag(2349, ts.DiagnosticCategory.Error, "Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatur_2349", "Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures."), Only_a_void_function_can_be_called_with_the_new_keyword: diag(2350, ts.DiagnosticCategory.Error, "Only_a_void_function_can_be_called_with_the_new_keyword_2350", "Only a void function can be called with the 'new' keyword."), Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: diag(2351, ts.DiagnosticCategory.Error, "Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature_2351", "Cannot use 'new' with an expression whose type lacks a call or construct signature."), Type_0_cannot_be_converted_to_type_1: diag(2352, ts.DiagnosticCategory.Error, "Type_0_cannot_be_converted_to_type_1_2352", "Type '{0}' cannot be converted to type '{1}'."), Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: diag(2353, ts.DiagnosticCategory.Error, "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353", "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'."), This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found: diag(2354, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354", "This syntax requires an imported helper but module '{0}' cannot be found."), A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value: diag(2355, ts.DiagnosticCategory.Error, "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355", "A function whose declared type is neither 'void' nor 'any' must return a value."), An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: diag(2356, ts.DiagnosticCategory.Error, "An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number' or an enum type."), The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, ts.DiagnosticCategory.Error, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."), The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: diag(2360, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol_2360", "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'."), The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2361, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361", "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter."), The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: diag(2362, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type."), The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: diag(2363, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type."), The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), Operator_0_cannot_be_applied_to_types_1_and_2: diag(2365, ts.DiagnosticCategory.Error, "Operator_0_cannot_be_applied_to_types_1_and_2_2365", "Operator '{0}' cannot be applied to types '{1}' and '{2}'."), Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: diag(2366, ts.DiagnosticCategory.Error, "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366", "Function lacks ending return statement and return type does not include 'undefined'."), Type_parameter_name_cannot_be_0: diag(2368, ts.DiagnosticCategory.Error, "Type_parameter_name_cannot_be_0_2368", "Type parameter name cannot be '{0}'."), A_parameter_property_is_only_allowed_in_a_constructor_implementation: diag(2369, ts.DiagnosticCategory.Error, "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369", "A parameter property is only allowed in a constructor implementation."), A_rest_parameter_must_be_of_an_array_type: diag(2370, ts.DiagnosticCategory.Error, "A_rest_parameter_must_be_of_an_array_type_2370", "A rest parameter must be of an array type."), A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."), Parameter_0_cannot_be_referenced_in_its_initializer: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_be_referenced_in_its_initializer_2372", "Parameter '{0}' cannot be referenced in its initializer."), Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it."), Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."), Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."), A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties."), Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."), A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."), Getter_and_setter_accessors_do_not_agree_in_visibility: diag(2379, ts.DiagnosticCategory.Error, "Getter_and_setter_accessors_do_not_agree_in_visibility_2379", "Getter and setter accessors do not agree in visibility."), get_and_set_accessor_must_have_the_same_type: diag(2380, ts.DiagnosticCategory.Error, "get_and_set_accessor_must_have_the_same_type_2380", "'get' and 'set' accessor must have the same type."), A_signature_with_an_implementation_cannot_use_a_string_literal_type: diag(2381, ts.DiagnosticCategory.Error, "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381", "A signature with an implementation cannot use a string literal type."), Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: diag(2382, ts.DiagnosticCategory.Error, "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382", "Specialized overload signature is not assignable to any non-specialized signature."), Overload_signatures_must_all_be_exported_or_non_exported: diag(2383, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_exported_or_non_exported_2383", "Overload signatures must all be exported or non-exported."), Overload_signatures_must_all_be_ambient_or_non_ambient: diag(2384, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_ambient_or_non_ambient_2384", "Overload signatures must all be ambient or non-ambient."), Overload_signatures_must_all_be_public_private_or_protected: diag(2385, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_public_private_or_protected_2385", "Overload signatures must all be public, private or protected."), Overload_signatures_must_all_be_optional_or_required: diag(2386, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_optional_or_required_2386", "Overload signatures must all be optional or required."), Function_overload_must_be_static: diag(2387, ts.DiagnosticCategory.Error, "Function_overload_must_be_static_2387", "Function overload must be static."), Function_overload_must_not_be_static: diag(2388, ts.DiagnosticCategory.Error, "Function_overload_must_not_be_static_2388", "Function overload must not be static."), Function_implementation_name_must_be_0: diag(2389, ts.DiagnosticCategory.Error, "Function_implementation_name_must_be_0_2389", "Function implementation name must be '{0}'."), Constructor_implementation_is_missing: diag(2390, ts.DiagnosticCategory.Error, "Constructor_implementation_is_missing_2390", "Constructor implementation is missing."), Function_implementation_is_missing_or_not_immediately_following_the_declaration: diag(2391, ts.DiagnosticCategory.Error, "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391", "Function implementation is missing or not immediately following the declaration."), Multiple_constructor_implementations_are_not_allowed: diag(2392, ts.DiagnosticCategory.Error, "Multiple_constructor_implementations_are_not_allowed_2392", "Multiple constructor implementations are not allowed."), Duplicate_function_implementation: diag(2393, ts.DiagnosticCategory.Error, "Duplicate_function_implementation_2393", "Duplicate function implementation."), Overload_signature_is_not_compatible_with_function_implementation: diag(2394, ts.DiagnosticCategory.Error, "Overload_signature_is_not_compatible_with_function_implementation_2394", "Overload signature is not compatible with function implementation."), Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: diag(2395, ts.DiagnosticCategory.Error, "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395", "Individual declarations in merged declaration '{0}' must be all exported or all local."), Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: diag(2396, ts.DiagnosticCategory.Error, "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396", "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters."), Declaration_name_conflicts_with_built_in_global_identifier_0: diag(2397, ts.DiagnosticCategory.Error, "Declaration_name_conflicts_with_built_in_global_identifier_0_2397", "Declaration name conflicts with built-in global identifier '{0}'."), Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: diag(2399, ts.DiagnosticCategory.Error, "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399", "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference."), Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: diag(2400, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400", "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference."), Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: diag(2401, ts.DiagnosticCategory.Error, "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401", "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference."), Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: diag(2402, ts.DiagnosticCategory.Error, "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402", "Expression resolves to '_super' that compiler uses to capture base class reference."), Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: diag(2403, ts.DiagnosticCategory.Error, "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403", "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'."), The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: diag(2404, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404", "The left-hand side of a 'for...in' statement cannot use a type annotation."), The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: diag(2405, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405", "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'."), The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access: diag(2406, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406", "The left-hand side of a 'for...in' statement must be a variable or a property access."), 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: diag(2407, ts.DiagnosticCategory.Error, "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407", "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}'."), Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."), Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."), The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."), Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."), Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."), Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."), Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."), Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."), Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."), Class_static_side_0_incorrectly_extends_base_class_static_side_1: diag(2417, ts.DiagnosticCategory.Error, "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417", "Class static side '{0}' incorrectly extends base class static side '{1}'."), Class_0_incorrectly_implements_interface_1: diag(2420, ts.DiagnosticCategory.Error, "Class_0_incorrectly_implements_interface_1_2420", "Class '{0}' incorrectly implements interface '{1}'."), A_class_may_only_implement_another_class_or_interface: diag(2422, ts.DiagnosticCategory.Error, "A_class_may_only_implement_another_class_or_interface_2422", "A class may only implement another class or interface."), Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: diag(2423, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423", "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor."), Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: diag(2424, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_proper_2424", "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property."), Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2425, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425", "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function."), Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2426, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426", "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function."), Interface_name_cannot_be_0: diag(2427, ts.DiagnosticCategory.Error, "Interface_name_cannot_be_0_2427", "Interface name cannot be '{0}'."), All_declarations_of_0_must_have_identical_type_parameters: diag(2428, ts.DiagnosticCategory.Error, "All_declarations_of_0_must_have_identical_type_parameters_2428", "All declarations of '{0}' must have identical type parameters."), Interface_0_incorrectly_extends_interface_1: diag(2430, ts.DiagnosticCategory.Error, "Interface_0_incorrectly_extends_interface_1_2430", "Interface '{0}' incorrectly extends interface '{1}'."), Enum_name_cannot_be_0: diag(2431, ts.DiagnosticCategory.Error, "Enum_name_cannot_be_0_2431", "Enum name cannot be '{0}'."), In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: diag(2432, ts.DiagnosticCategory.Error, "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432", "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element."), A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: diag(2433, ts.DiagnosticCategory.Error, "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433", "A namespace declaration cannot be in a different file from a class or function with which it is merged."), A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: diag(2434, ts.DiagnosticCategory.Error, "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434", "A namespace declaration cannot be located prior to a class or function with which it is merged."), Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: diag(2435, ts.DiagnosticCategory.Error, "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435", "Ambient modules cannot be nested in other modules or namespaces."), Ambient_module_declaration_cannot_specify_relative_module_name: diag(2436, ts.DiagnosticCategory.Error, "Ambient_module_declaration_cannot_specify_relative_module_name_2436", "Ambient module declaration cannot specify relative module name."), Module_0_is_hidden_by_a_local_declaration_with_the_same_name: diag(2437, ts.DiagnosticCategory.Error, "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437", "Module '{0}' is hidden by a local declaration with the same name."), Import_name_cannot_be_0: diag(2438, ts.DiagnosticCategory.Error, "Import_name_cannot_be_0_2438", "Import name cannot be '{0}'."), Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: diag(2439, ts.DiagnosticCategory.Error, "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439", "Import or export declaration in an ambient module declaration cannot reference module through relative module name."), Import_declaration_conflicts_with_local_declaration_of_0: diag(2440, ts.DiagnosticCategory.Error, "Import_declaration_conflicts_with_local_declaration_of_0_2440", "Import declaration conflicts with local declaration of '{0}'."), Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: diag(2441, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module."), Types_have_separate_declarations_of_a_private_property_0: diag(2442, ts.DiagnosticCategory.Error, "Types_have_separate_declarations_of_a_private_property_0_2442", "Types have separate declarations of a private property '{0}'."), Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: diag(2443, ts.DiagnosticCategory.Error, "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443", "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'."), Property_0_is_protected_in_type_1_but_public_in_type_2: diag(2444, ts.DiagnosticCategory.Error, "Property_0_is_protected_in_type_1_but_public_in_type_2_2444", "Property '{0}' is protected in type '{1}' but public in type '{2}'."), Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: diag(2445, ts.DiagnosticCategory.Error, "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", "Property '{0}' is protected and only accessible within class '{1}' and its subclasses."), Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: diag(2446, ts.DiagnosticCategory.Error, "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446", "Property '{0}' is protected and only accessible through an instance of class '{1}'."), The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: diag(2447, ts.DiagnosticCategory.Error, "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447", "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead."), Block_scoped_variable_0_used_before_its_declaration: diag(2448, ts.DiagnosticCategory.Error, "Block_scoped_variable_0_used_before_its_declaration_2448", "Block-scoped variable '{0}' used before its declaration."), Class_0_used_before_its_declaration: diag(2449, ts.DiagnosticCategory.Error, "Class_0_used_before_its_declaration_2449", "Class '{0}' used before its declaration."), Enum_0_used_before_its_declaration: diag(2450, ts.DiagnosticCategory.Error, "Enum_0_used_before_its_declaration_2450", "Enum '{0}' used before its declaration."), Cannot_redeclare_block_scoped_variable_0: diag(2451, ts.DiagnosticCategory.Error, "Cannot_redeclare_block_scoped_variable_0_2451", "Cannot redeclare block-scoped variable '{0}'."), An_enum_member_cannot_have_a_numeric_name: diag(2452, ts.DiagnosticCategory.Error, "An_enum_member_cannot_have_a_numeric_name_2452", "An enum member cannot have a numeric name."), The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: diag(2453, ts.DiagnosticCategory.Error, "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453", "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly."), Variable_0_is_used_before_being_assigned: diag(2454, ts.DiagnosticCategory.Error, "Variable_0_is_used_before_being_assigned_2454", "Variable '{0}' is used before being assigned."), Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: diag(2455, ts.DiagnosticCategory.Error, "Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0_2455", "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'."), Type_alias_0_circularly_references_itself: diag(2456, ts.DiagnosticCategory.Error, "Type_alias_0_circularly_references_itself_2456", "Type alias '{0}' circularly references itself."), Type_alias_name_cannot_be_0: diag(2457, ts.DiagnosticCategory.Error, "Type_alias_name_cannot_be_0_2457", "Type alias name cannot be '{0}'."), An_AMD_module_cannot_have_multiple_name_assignments: diag(2458, ts.DiagnosticCategory.Error, "An_AMD_module_cannot_have_multiple_name_assignments_2458", "An AMD module cannot have multiple name assignments."), Type_0_has_no_property_1_and_no_string_index_signature: diag(2459, ts.DiagnosticCategory.Error, "Type_0_has_no_property_1_and_no_string_index_signature_2459", "Type '{0}' has no property '{1}' and no string index signature."), Type_0_has_no_property_1: diag(2460, ts.DiagnosticCategory.Error, "Type_0_has_no_property_1_2460", "Type '{0}' has no property '{1}'."), Type_0_is_not_an_array_type: diag(2461, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_2461", "Type '{0}' is not an array type."), A_rest_element_must_be_last_in_a_destructuring_pattern: diag(2462, ts.DiagnosticCategory.Error, "A_rest_element_must_be_last_in_a_destructuring_pattern_2462", "A rest element must be last in a destructuring pattern."), A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: diag(2463, ts.DiagnosticCategory.Error, "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463", "A binding pattern parameter cannot be optional in an implementation signature."), A_computed_property_name_must_be_of_type_string_number_symbol_or_any: diag(2464, ts.DiagnosticCategory.Error, "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464", "A computed property name must be of type 'string', 'number', 'symbol', or 'any'."), this_cannot_be_referenced_in_a_computed_property_name: diag(2465, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_computed_property_name_2465", "'this' cannot be referenced in a computed property name."), super_cannot_be_referenced_in_a_computed_property_name: diag(2466, ts.DiagnosticCategory.Error, "super_cannot_be_referenced_in_a_computed_property_name_2466", "'super' cannot be referenced in a computed property name."), A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: diag(2467, ts.DiagnosticCategory.Error, "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467", "A computed property name cannot reference a type parameter from its containing type."), Cannot_find_global_value_0: diag(2468, ts.DiagnosticCategory.Error, "Cannot_find_global_value_0_2468", "Cannot find global value '{0}'."), The_0_operator_cannot_be_applied_to_type_symbol: diag(2469, ts.DiagnosticCategory.Error, "The_0_operator_cannot_be_applied_to_type_symbol_2469", "The '{0}' operator cannot be applied to type 'symbol'."), Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: diag(2470, ts.DiagnosticCategory.Error, "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470", "'Symbol' reference does not refer to the global Symbol constructor object."), A_computed_property_name_of_the_form_0_must_be_of_type_symbol: diag(2471, ts.DiagnosticCategory.Error, "A_computed_property_name_of_the_form_0_must_be_of_type_symbol_2471", "A computed property name of the form '{0}' must be of type 'symbol'."), Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: diag(2472, ts.DiagnosticCategory.Error, "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472", "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher."), Enum_declarations_must_all_be_const_or_non_const: diag(2473, ts.DiagnosticCategory.Error, "Enum_declarations_must_all_be_const_or_non_const_2473", "Enum declarations must all be const or non-const."), In_const_enum_declarations_member_initializer_must_be_constant_expression: diag(2474, ts.DiagnosticCategory.Error, "In_const_enum_declarations_member_initializer_must_be_constant_expression_2474", "In 'const' enum declarations member initializer must be constant expression."), 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: diag(2475, ts.DiagnosticCategory.Error, "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475", "'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."), A_const_enum_member_can_only_be_accessed_using_a_string_literal: diag(2476, ts.DiagnosticCategory.Error, "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476", "A const enum member can only be accessed using a string literal."), const_enum_member_initializer_was_evaluated_to_a_non_finite_value: diag(2477, ts.DiagnosticCategory.Error, "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477", "'const' enum member initializer was evaluated to a non-finite value."), const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: diag(2478, ts.DiagnosticCategory.Error, "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478", "'const' enum member initializer was evaluated to disallowed value 'NaN'."), Property_0_does_not_exist_on_const_enum_1: diag(2479, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_const_enum_1_2479", "Property '{0}' does not exist on 'const' enum '{1}'."), let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: diag(2480, ts.DiagnosticCategory.Error, "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480", "'let' is not allowed to be used as a name in 'let' or 'const' declarations."), Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: diag(2481, ts.DiagnosticCategory.Error, "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481", "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'."), The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: diag(2483, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483", "The left-hand side of a 'for...of' statement cannot use a type annotation."), Export_declaration_conflicts_with_exported_declaration_of_0: diag(2484, ts.DiagnosticCategory.Error, "Export_declaration_conflicts_with_exported_declaration_of_0_2484", "Export declaration conflicts with exported declaration of '{0}'."), The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access: diag(2487, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487", "The left-hand side of a 'for...of' statement must be a variable or a property access."), Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2488, ts.DiagnosticCategory.Error, "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488", "Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator."), An_iterator_must_have_a_next_method: diag(2489, ts.DiagnosticCategory.Error, "An_iterator_must_have_a_next_method_2489", "An iterator must have a 'next()' method."), The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: diag(2490, ts.DiagnosticCategory.Error, "The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property_2490", "The type returned by the 'next()' method of an iterator must have a 'value' property."), The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: diag(2491, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491", "The left-hand side of a 'for...in' statement cannot be a destructuring pattern."), Cannot_redeclare_identifier_0_in_catch_clause: diag(2492, ts.DiagnosticCategory.Error, "Cannot_redeclare_identifier_0_in_catch_clause_2492", "Cannot redeclare identifier '{0}' in catch clause."), Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: diag(2493, ts.DiagnosticCategory.Error, "Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2_2493", "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'."), Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: diag(2494, ts.DiagnosticCategory.Error, "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494", "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher."), Type_0_is_not_an_array_type_or_a_string_type: diag(2495, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_2495", "Type '{0}' is not an array type or a string type."), The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: diag(2496, ts.DiagnosticCategory.Error, "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496", "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression."), Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: diag(2497, ts.DiagnosticCategory.Error, "Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct_2497", "Module '{0}' resolves to a non-module entity and cannot be imported using this construct."), Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: diag(2498, ts.DiagnosticCategory.Error, "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498", "Module '{0}' uses 'export =' and cannot be used with 'export *'."), An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2499, ts.DiagnosticCategory.Error, "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499", "An interface can only extend an identifier/qualified-name with optional type arguments."), A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2500, ts.DiagnosticCategory.Error, "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500", "A class can only implement an identifier/qualified-name with optional type arguments."), A_rest_element_cannot_contain_a_binding_pattern: diag(2501, ts.DiagnosticCategory.Error, "A_rest_element_cannot_contain_a_binding_pattern_2501", "A rest element cannot contain a binding pattern."), _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: diag(2502, ts.DiagnosticCategory.Error, "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502", "'{0}' is referenced directly or indirectly in its own type annotation."), Cannot_find_namespace_0: diag(2503, ts.DiagnosticCategory.Error, "Cannot_find_namespace_0_2503", "Cannot find namespace '{0}'."), Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator: diag(2504, ts.DiagnosticCategory.Error, "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504", "Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator."), A_generator_cannot_have_a_void_type_annotation: diag(2505, ts.DiagnosticCategory.Error, "A_generator_cannot_have_a_void_type_annotation_2505", "A generator cannot have a 'void' type annotation."), _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: diag(2506, ts.DiagnosticCategory.Error, "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506", "'{0}' is referenced directly or indirectly in its own base expression."), Type_0_is_not_a_constructor_function_type: diag(2507, ts.DiagnosticCategory.Error, "Type_0_is_not_a_constructor_function_type_2507", "Type '{0}' is not a constructor function type."), No_base_constructor_has_the_specified_number_of_type_arguments: diag(2508, ts.DiagnosticCategory.Error, "No_base_constructor_has_the_specified_number_of_type_arguments_2508", "No base constructor has the specified number of type arguments."), Base_constructor_return_type_0_is_not_a_class_or_interface_type: diag(2509, ts.DiagnosticCategory.Error, "Base_constructor_return_type_0_is_not_a_class_or_interface_type_2509", "Base constructor return type '{0}' is not a class or interface type."), Base_constructors_must_all_have_the_same_return_type: diag(2510, ts.DiagnosticCategory.Error, "Base_constructors_must_all_have_the_same_return_type_2510", "Base constructors must all have the same return type."), Cannot_create_an_instance_of_an_abstract_class: diag(2511, ts.DiagnosticCategory.Error, "Cannot_create_an_instance_of_an_abstract_class_2511", "Cannot create an instance of an abstract class."), Overload_signatures_must_all_be_abstract_or_non_abstract: diag(2512, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_abstract_or_non_abstract_2512", "Overload signatures must all be abstract or non-abstract."), Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: diag(2513, ts.DiagnosticCategory.Error, "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513", "Abstract method '{0}' in class '{1}' cannot be accessed via super expression."), Classes_containing_abstract_methods_must_be_marked_abstract: diag(2514, ts.DiagnosticCategory.Error, "Classes_containing_abstract_methods_must_be_marked_abstract_2514", "Classes containing abstract methods must be marked abstract."), Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: diag(2515, ts.DiagnosticCategory.Error, "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515", "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'."), All_declarations_of_an_abstract_method_must_be_consecutive: diag(2516, ts.DiagnosticCategory.Error, "All_declarations_of_an_abstract_method_must_be_consecutive_2516", "All declarations of an abstract method must be consecutive."), Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: diag(2517, ts.DiagnosticCategory.Error, "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517", "Cannot assign an abstract constructor type to a non-abstract constructor type."), A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard: diag(2518, ts.DiagnosticCategory.Error, "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518", "A 'this'-based type guard is not compatible with a parameter-based type guard."), An_async_iterator_must_have_a_next_method: diag(2519, ts.DiagnosticCategory.Error, "An_async_iterator_must_have_a_next_method_2519", "An async iterator must have a 'next()' method."), Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: diag(2520, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520", "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions."), Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: diag(2521, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521", "Expression resolves to variable declaration '{0}' that compiler uses to support async functions."), The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method: diag(2522, ts.DiagnosticCategory.Error, "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522", "The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method."), yield_expressions_cannot_be_used_in_a_parameter_initializer: diag(2523, ts.DiagnosticCategory.Error, "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", "'yield' expressions cannot be used in a parameter initializer."), await_expressions_cannot_be_used_in_a_parameter_initializer: diag(2524, ts.DiagnosticCategory.Error, "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", "'await' expressions cannot be used in a parameter initializer."), Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: diag(2525, ts.DiagnosticCategory.Error, "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", "Initializer provides no value for this binding element and the binding element has no default value."), A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: diag(2526, ts.DiagnosticCategory.Error, "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", "A 'this' type is available only in a non-static member of a class or interface."), The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary: diag(2527, ts.DiagnosticCategory.Error, "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527", "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary."), A_module_cannot_have_multiple_default_exports: diag(2528, ts.DiagnosticCategory.Error, "A_module_cannot_have_multiple_default_exports_2528", "A module cannot have multiple default exports."), Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: diag(2529, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions."), Property_0_is_incompatible_with_index_signature: diag(2530, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_index_signature_2530", "Property '{0}' is incompatible with index signature."), Object_is_possibly_null: diag(2531, ts.DiagnosticCategory.Error, "Object_is_possibly_null_2531", "Object is possibly 'null'."), Object_is_possibly_undefined: diag(2532, ts.DiagnosticCategory.Error, "Object_is_possibly_undefined_2532", "Object is possibly 'undefined'."), Object_is_possibly_null_or_undefined: diag(2533, ts.DiagnosticCategory.Error, "Object_is_possibly_null_or_undefined_2533", "Object is possibly 'null' or 'undefined'."), A_function_returning_never_cannot_have_a_reachable_end_point: diag(2534, ts.DiagnosticCategory.Error, "A_function_returning_never_cannot_have_a_reachable_end_point_2534", "A function returning 'never' cannot have a reachable end point."), Enum_type_0_has_members_with_initializers_that_are_not_literals: diag(2535, ts.DiagnosticCategory.Error, "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535", "Enum type '{0}' has members with initializers that are not literals."), Type_0_cannot_be_used_to_index_type_1: diag(2536, ts.DiagnosticCategory.Error, "Type_0_cannot_be_used_to_index_type_1_2536", "Type '{0}' cannot be used to index type '{1}'."), Type_0_has_no_matching_index_signature_for_type_1: diag(2537, ts.DiagnosticCategory.Error, "Type_0_has_no_matching_index_signature_for_type_1_2537", "Type '{0}' has no matching index signature for type '{1}'."), Type_0_cannot_be_used_as_an_index_type: diag(2538, ts.DiagnosticCategory.Error, "Type_0_cannot_be_used_as_an_index_type_2538", "Type '{0}' cannot be used as an index type."), Cannot_assign_to_0_because_it_is_not_a_variable: diag(2539, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_not_a_variable_2539", "Cannot assign to '{0}' because it is not a variable."), Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property: diag(2540, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property_2540", "Cannot assign to '{0}' because it is a constant or a read-only property."), The_target_of_an_assignment_must_be_a_variable_or_a_property_access: diag(2541, ts.DiagnosticCategory.Error, "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541", "The target of an assignment must be a variable or a property access."), Index_signature_in_type_0_only_permits_reading: diag(2542, ts.DiagnosticCategory.Error, "Index_signature_in_type_0_only_permits_reading_2542", "Index signature in type '{0}' only permits reading."), Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference: diag(2543, ts.DiagnosticCategory.Error, "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543", "Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference."), Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference: diag(2544, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544", "Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference."), A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any: diag(2545, ts.DiagnosticCategory.Error, "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545", "A mixin class must have a constructor with a single rest parameter of type 'any[]'."), Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1: diag(2546, ts.DiagnosticCategory.Error, "Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1_2546", "Property '{0}' has conflicting declarations and is inaccessible in type '{1}'."), The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property: diag(2547, ts.DiagnosticCategory.Error, "The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value__2547", "The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property."), Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2548, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548", "Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator."), Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2549, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549", "Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator."), Generic_type_instantiation_is_excessively_deep_and_possibly_infinite: diag(2550, ts.DiagnosticCategory.Error, "Generic_type_instantiation_is_excessively_deep_and_possibly_infinite_2550", "Generic type instantiation is excessively deep and possibly infinite."), Property_0_does_not_exist_on_type_1_Did_you_mean_2: diag(2551, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?"), Cannot_find_name_0_Did_you_mean_1: diag(2552, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_1_2552", "Cannot find name '{0}'. Did you mean '{1}'?"), Computed_values_are_not_permitted_in_an_enum_with_string_valued_members: diag(2553, ts.DiagnosticCategory.Error, "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553", "Computed values are not permitted in an enum with string valued members."), Expected_0_arguments_but_got_1: diag(2554, ts.DiagnosticCategory.Error, "Expected_0_arguments_but_got_1_2554", "Expected {0} arguments, but got {1}."), Expected_at_least_0_arguments_but_got_1: diag(2555, ts.DiagnosticCategory.Error, "Expected_at_least_0_arguments_but_got_1_2555", "Expected at least {0} arguments, but got {1}."), Expected_0_arguments_but_got_1_or_more: diag(2556, ts.DiagnosticCategory.Error, "Expected_0_arguments_but_got_1_or_more_2556", "Expected {0} arguments, but got {1} or more."), Expected_at_least_0_arguments_but_got_1_or_more: diag(2557, ts.DiagnosticCategory.Error, "Expected_at_least_0_arguments_but_got_1_or_more_2557", "Expected at least {0} arguments, but got {1} or more."), Expected_0_type_arguments_but_got_1: diag(2558, ts.DiagnosticCategory.Error, "Expected_0_type_arguments_but_got_1_2558", "Expected {0} type arguments, but got {1}."), Type_0_has_no_properties_in_common_with_type_1: diag(2559, ts.DiagnosticCategory.Error, "Type_0_has_no_properties_in_common_with_type_1_2559", "Type '{0}' has no properties in common with type '{1}'."), Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it: diag(2560, ts.DiagnosticCategory.Error, "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560", "Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?"), Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2: diag(2561, ts.DiagnosticCategory.Error, "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561", "Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?"), Base_class_expressions_cannot_reference_class_type_parameters: diag(2562, ts.DiagnosticCategory.Error, "Base_class_expressions_cannot_reference_class_type_parameters_2562", "Base class expressions cannot reference class type parameters."), The_containing_function_or_module_body_is_too_large_for_control_flow_analysis: diag(2563, ts.DiagnosticCategory.Error, "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563", "The containing function or module body is too large for control flow analysis."), Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor: diag(2564, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564", "Property '{0}' has no initializer and is not definitely assigned in the constructor."), Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."), A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."), Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."), Type_0_is_not_an_array_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2568, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators_2568", "Type '{0}' is not an array type. Use compiler option '--downlevelIteration' to allow iterating of iterators."), Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."), Property_0_does_not_exist_on_type_1_Did_you_forget_to_use_await: diag(2570, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Did_you_forget_to_use_await_2570", "Property '{0}' does not exist on type '{1}'. Did you forget to use 'await'?"), Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."), JSX_element_attributes_type_0_may_not_be_a_union_type: diag(2600, ts.DiagnosticCategory.Error, "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", "JSX element attributes type '{0}' may not be a union type."), The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: diag(2601, ts.DiagnosticCategory.Error, "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", "The return type of a JSX element constructor must return an object type."), JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: diag(2602, ts.DiagnosticCategory.Error, "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist."), Property_0_in_type_1_is_not_assignable_to_type_2: diag(2603, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_type_2_2603", "Property '{0}' in type '{1}' is not assignable to type '{2}'."), JSX_element_type_0_does_not_have_any_construct_or_call_signatures: diag(2604, ts.DiagnosticCategory.Error, "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604", "JSX element type '{0}' does not have any construct or call signatures."), JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: diag(2605, ts.DiagnosticCategory.Error, "JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements_2605", "JSX element type '{0}' is not a constructor function for JSX elements."), Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: diag(2606, ts.DiagnosticCategory.Error, "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606", "Property '{0}' of JSX spread attribute is not assignable to target property."), JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: diag(2607, ts.DiagnosticCategory.Error, "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607", "JSX element class does not support attributes because it does not have a '{0}' property."), The_global_type_JSX_0_may_not_have_more_than_one_property: diag(2608, ts.DiagnosticCategory.Error, "The_global_type_JSX_0_may_not_have_more_than_one_property_2608", "The global type 'JSX.{0}' may not have more than one property."), JSX_spread_child_must_be_an_array_type: diag(2609, ts.DiagnosticCategory.Error, "JSX_spread_child_must_be_an_array_type_2609", "JSX spread child must be an array type."), Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."), A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."), Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."), Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: diag(2653, ts.DiagnosticCategory.Error, "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653", "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'."), Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: diag(2654, ts.DiagnosticCategory.Error, "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654", "Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition."), Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: diag(2656, ts.DiagnosticCategory.Error, "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656", "Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition."), JSX_expressions_must_have_one_parent_element: diag(2657, ts.DiagnosticCategory.Error, "JSX_expressions_must_have_one_parent_element_2657", "JSX expressions must have one parent element."), Type_0_provides_no_match_for_the_signature_1: diag(2658, ts.DiagnosticCategory.Error, "Type_0_provides_no_match_for_the_signature_1_2658", "Type '{0}' provides no match for the signature '{1}'."), super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: diag(2659, ts.DiagnosticCategory.Error, "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher."), super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: diag(2660, ts.DiagnosticCategory.Error, "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", "'super' can only be referenced in members of derived classes or object literal expressions."), Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: diag(2661, ts.DiagnosticCategory.Error, "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", "Cannot export '{0}'. Only local declarations can be exported from a module."), Cannot_find_name_0_Did_you_mean_the_static_member_1_0: diag(2662, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?"), Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: diag(2663, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?"), Invalid_module_name_in_augmentation_module_0_cannot_be_found: diag(2664, ts.DiagnosticCategory.Error, "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", "Invalid module name in augmentation, module '{0}' cannot be found."), Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented: diag(2665, ts.DiagnosticCategory.Error, "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665", "Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented."), Exports_and_export_assignments_are_not_permitted_in_module_augmentations: diag(2666, ts.DiagnosticCategory.Error, "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", "Exports and export assignments are not permitted in module augmentations."), Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: diag(2667, ts.DiagnosticCategory.Error, "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module."), export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: diag(2668, ts.DiagnosticCategory.Error, "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible."), Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: diag(2669, ts.DiagnosticCategory.Error, "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations."), Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: diag(2670, ts.DiagnosticCategory.Error, "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context."), Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: diag(2671, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", "Cannot augment module '{0}' because it resolves to a non-module entity."), Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: diag(2672, ts.DiagnosticCategory.Error, "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672", "Cannot assign a '{0}' constructor type to a '{1}' constructor type."), Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: diag(2673, ts.DiagnosticCategory.Error, "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673", "Constructor of class '{0}' is private and only accessible within the class declaration."), Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration: diag(2674, ts.DiagnosticCategory.Error, "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674", "Constructor of class '{0}' is protected and only accessible within the class declaration."), Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: diag(2675, ts.DiagnosticCategory.Error, "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675", "Cannot extend a class '{0}'. Class constructor is marked as private."), Accessors_must_both_be_abstract_or_non_abstract: diag(2676, ts.DiagnosticCategory.Error, "Accessors_must_both_be_abstract_or_non_abstract_2676", "Accessors must both be abstract or non-abstract."), A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: diag(2677, ts.DiagnosticCategory.Error, "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677", "A type predicate's type must be assignable to its parameter's type."), Type_0_is_not_comparable_to_type_1: diag(2678, ts.DiagnosticCategory.Error, "Type_0_is_not_comparable_to_type_1_2678", "Type '{0}' is not comparable to type '{1}'."), A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: diag(2679, ts.DiagnosticCategory.Error, "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'."), A_0_parameter_must_be_the_first_parameter: diag(2680, ts.DiagnosticCategory.Error, "A_0_parameter_must_be_the_first_parameter_2680", "A '{0}' parameter must be the first parameter."), A_constructor_cannot_have_a_this_parameter: diag(2681, ts.DiagnosticCategory.Error, "A_constructor_cannot_have_a_this_parameter_2681", "A constructor cannot have a 'this' parameter."), get_and_set_accessor_must_have_the_same_this_type: diag(2682, ts.DiagnosticCategory.Error, "get_and_set_accessor_must_have_the_same_this_type_2682", "'get' and 'set' accessor must have the same 'this' type."), this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: diag(2683, ts.DiagnosticCategory.Error, "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", "'this' implicitly has type 'any' because it does not have a type annotation."), The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: diag(2684, ts.DiagnosticCategory.Error, "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'."), The_this_types_of_each_signature_are_incompatible: diag(2685, ts.DiagnosticCategory.Error, "The_this_types_of_each_signature_are_incompatible_2685", "The 'this' types of each signature are incompatible."), _0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead: diag(2686, ts.DiagnosticCategory.Error, "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686", "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead."), All_declarations_of_0_must_have_identical_modifiers: diag(2687, ts.DiagnosticCategory.Error, "All_declarations_of_0_must_have_identical_modifiers_2687", "All declarations of '{0}' must have identical modifiers."), Cannot_find_type_definition_file_for_0: diag(2688, ts.DiagnosticCategory.Error, "Cannot_find_type_definition_file_for_0_2688", "Cannot find type definition file for '{0}'."), Cannot_extend_an_interface_0_Did_you_mean_implements: diag(2689, ts.DiagnosticCategory.Error, "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", "Cannot extend an interface '{0}'. Did you mean 'implements'?"), An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead: diag(2691, ts.DiagnosticCategory.Error, "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691", "An import path cannot end with a '{0}' extension. Consider importing '{1}' instead."), _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.", 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."), Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1: diag(2699, ts.DiagnosticCategory.Error, "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699", "Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'."), Rest_types_may_only_be_created_from_object_types: diag(2700, ts.DiagnosticCategory.Error, "Rest_types_may_only_be_created_from_object_types_2700", "Rest types may only be created from object types."), The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access: diag(2701, ts.DiagnosticCategory.Error, "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701", "The target of an object rest assignment must be a variable or a property access."), _0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here: diag(2702, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702", "'{0}' only refers to a type, but is being used as a namespace here."), The_operand_of_a_delete_operator_must_be_a_property_reference: diag(2703, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_must_be_a_property_reference_2703", "The operand of a delete operator must be a property reference."), The_operand_of_a_delete_operator_cannot_be_a_read_only_property: diag(2704, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704", "The operand of a delete operator cannot be a read-only property."), 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: diag(2705, ts.DiagnosticCategory.Error, "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705", "An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option."), Required_type_parameters_may_not_follow_optional_type_parameters: diag(2706, ts.DiagnosticCategory.Error, "Required_type_parameters_may_not_follow_optional_type_parameters_2706", "Required type parameters may not follow optional type parameters."), Generic_type_0_requires_between_1_and_2_type_arguments: diag(2707, ts.DiagnosticCategory.Error, "Generic_type_0_requires_between_1_and_2_type_arguments_2707", "Generic type '{0}' requires between {1} and {2} type arguments."), Cannot_use_namespace_0_as_a_value: diag(2708, ts.DiagnosticCategory.Error, "Cannot_use_namespace_0_as_a_value_2708", "Cannot use namespace '{0}' as a value."), Cannot_use_namespace_0_as_a_type: diag(2709, ts.DiagnosticCategory.Error, "Cannot_use_namespace_0_as_a_type_2709", "Cannot use namespace '{0}' as a type."), _0_are_specified_twice_The_attribute_named_0_will_be_overwritten: diag(2710, ts.DiagnosticCategory.Error, "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710", "'{0}' are specified twice. The attribute named '{0}' will be overwritten."), A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2711, ts.DiagnosticCategory.Error, "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711", "A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option."), 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: diag(2712, ts.DiagnosticCategory.Error, "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712", "A dynamic import call in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option."), Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1: diag(2713, ts.DiagnosticCategory.Error, "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713", "Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?"), The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context: diag(2714, ts.DiagnosticCategory.Error, "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714", "The expression of an export assignment must be an identifier or qualified name in an ambient context."), Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor: diag(2715, ts.DiagnosticCategory.Error, "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715", "Abstract property '{0}' in class '{1}' cannot be accessed in the constructor."), Type_parameter_0_has_a_circular_default: diag(2716, ts.DiagnosticCategory.Error, "Type_parameter_0_has_a_circular_default_2716", "Type parameter '{0}' has a circular default."), Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2: diag(2717, ts.DiagnosticCategory.Error, "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717", "Subsequent property declarations must have the same type. Property '{0}' must be of type '{1}', but here has type '{2}'."), Duplicate_declaration_0: diag(2718, ts.DiagnosticCategory.Error, "Duplicate_declaration_0_2718", "Duplicate declaration '{0}'."), Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated: diag(2719, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719", "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated."), Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass: diag(2720, ts.DiagnosticCategory.Error, "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720", "Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?"), Cannot_invoke_an_object_which_is_possibly_null: diag(2721, ts.DiagnosticCategory.Error, "Cannot_invoke_an_object_which_is_possibly_null_2721", "Cannot invoke an object which is possibly 'null'."), Cannot_invoke_an_object_which_is_possibly_undefined: diag(2722, ts.DiagnosticCategory.Error, "Cannot_invoke_an_object_which_is_possibly_undefined_2722", "Cannot invoke an object which is possibly 'undefined'."), Cannot_invoke_an_object_which_is_possibly_null_or_undefined: diag(2723, ts.DiagnosticCategory.Error, "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723", "Cannot invoke an object which is possibly 'null' or 'undefined'."), Module_0_has_no_exported_member_1_Did_you_mean_2: diag(2724, ts.DiagnosticCategory.Error, "Module_0_has_no_exported_member_1_Did_you_mean_2_2724", "Module '{0}' has no exported member '{1}'. Did you mean '{2}'?"), Class_name_cannot_be_Object_when_targeting_ES5_with_module_0: diag(2725, ts.DiagnosticCategory.Error, "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725", "Class name cannot be 'Object' when targeting ES5 with module {0}."), Cannot_find_lib_definition_for_0: diag(2726, ts.DiagnosticCategory.Error, "Cannot_find_lib_definition_for_0_2726", "Cannot find lib definition for '{0}'."), Cannot_find_lib_definition_for_0_Did_you_mean_1: diag(2727, ts.DiagnosticCategory.Error, "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727", "Cannot find lib definition for '{0}'. Did you mean '{1}'?"), Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4006, ts.DiagnosticCategory.Error, "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006", "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."), Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4008, ts.DiagnosticCategory.Error, "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008", "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'."), Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4010, ts.DiagnosticCategory.Error, "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010", "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'."), Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4012, ts.DiagnosticCategory.Error, "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012", "Type parameter '{0}' of public method from exported class has or is using private name '{1}'."), Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4014, ts.DiagnosticCategory.Error, "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014", "Type parameter '{0}' of method from exported interface has or is using private name '{1}'."), Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4016, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016", "Type parameter '{0}' of exported function has or is using private name '{1}'."), Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4019, ts.DiagnosticCategory.Error, "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019", "Implements clause of exported class '{0}' has or is using private name '{1}'."), extends_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4020, ts.DiagnosticCategory.Error, "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020", "'extends' clause of exported class '{0}' has or is using private name '{1}'."), extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: diag(4022, ts.DiagnosticCategory.Error, "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022", "'extends' clause of exported interface '{0}' has or is using private name '{1}'."), Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4023, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named."), Exported_variable_0_has_or_is_using_name_1_from_private_module_2: diag(4024, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024", "Exported variable '{0}' has or is using name '{1}' from private module '{2}'."), Exported_variable_0_has_or_is_using_private_name_1: diag(4025, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_private_name_1_4025", "Exported variable '{0}' has or is using private name '{1}'."), Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4026, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026", "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4027, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027", "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4028, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028", "Public static property '{0}' of exported class has or is using private name '{1}'."), Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4029, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029", "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4030, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030", "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4031, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031", "Public property '{0}' of exported class has or is using private name '{1}'."), Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4032, ts.DiagnosticCategory.Error, "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032", "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'."), Property_0_of_exported_interface_has_or_is_using_private_name_1: diag(4033, ts.DiagnosticCategory.Error, "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033", "Property '{0}' of exported interface has or is using private name '{1}'."), Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4034, ts.DiagnosticCategory.Error, "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034", "Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1: diag(4035, ts.DiagnosticCategory.Error, "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035", "Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'."), Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4036, ts.DiagnosticCategory.Error, "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036", "Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1: diag(4037, ts.DiagnosticCategory.Error, "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037", "Parameter type of public setter '{0}' from exported class has or is using private name '{1}'."), Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4038, ts.DiagnosticCategory.Error, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038", "Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."), Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4039, ts.DiagnosticCategory.Error, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039", "Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1: diag(4040, ts.DiagnosticCategory.Error, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040", "Return type of public static getter '{0}' from exported class has or is using private name '{1}'."), Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4041, ts.DiagnosticCategory.Error, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041", "Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."), Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4042, ts.DiagnosticCategory.Error, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042", "Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1: diag(4043, ts.DiagnosticCategory.Error, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043", "Return type of public getter '{0}' from exported class has or is using private name '{1}'."), Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4044, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044", "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'."), Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4045, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045", "Return type of constructor signature from exported interface has or is using private name '{0}'."), Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4046, ts.DiagnosticCategory.Error, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046", "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'."), Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4047, ts.DiagnosticCategory.Error, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047", "Return type of call signature from exported interface has or is using private name '{0}'."), Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4048, ts.DiagnosticCategory.Error, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048", "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'."), Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4049, ts.DiagnosticCategory.Error, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049", "Return type of index signature from exported interface has or is using private name '{0}'."), Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4050, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050", "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named."), Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4051, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051", "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'."), Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: diag(4052, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052", "Return type of public static method from exported class has or is using private name '{0}'."), Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4053, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053", "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named."), Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4054, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054", "Return type of public method from exported class has or is using name '{0}' from private module '{1}'."), Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: diag(4055, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055", "Return type of public method from exported class has or is using private name '{0}'."), Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4056, ts.DiagnosticCategory.Error, "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056", "Return type of method from exported interface has or is using name '{0}' from private module '{1}'."), Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: diag(4057, ts.DiagnosticCategory.Error, "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057", "Return type of method from exported interface has or is using private name '{0}'."), Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4058, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058", "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named."), Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: diag(4059, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059", "Return type of exported function has or is using name '{0}' from private module '{1}'."), Return_type_of_exported_function_has_or_is_using_private_name_0: diag(4060, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_private_name_0_4060", "Return type of exported function has or is using private name '{0}'."), Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4061, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named."), Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4062, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'."), Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: diag(4063, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063", "Parameter '{0}' of constructor from exported class has or is using private name '{1}'."), Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4064, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064", "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4065, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065", "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."), Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4066, ts.DiagnosticCategory.Error, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066", "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4067, ts.DiagnosticCategory.Error, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067", "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'."), Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4068, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named."), Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4069, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'."), Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4070, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070", "Parameter '{0}' of public static method from exported class has or is using private name '{1}'."), Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4071, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071", "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named."), Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4072, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072", "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'."), Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4073, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073", "Parameter '{0}' of public method from exported class has or is using private name '{1}'."), Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4074, ts.DiagnosticCategory.Error, "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074", "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4075, ts.DiagnosticCategory.Error, "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075", "Parameter '{0}' of method from exported interface has or is using private name '{1}'."), Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4076, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076", "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named."), Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: diag(4077, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077", "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'."), Parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4078, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", "Parameter '{0}' of exported function has or is using private name '{1}'."), Exported_type_alias_0_has_or_is_using_private_name_1: diag(4081, ts.DiagnosticCategory.Error, "Exported_type_alias_0_has_or_is_using_private_name_1_4081", "Exported type alias '{0}' has or is using private name '{1}'."), Default_export_of_the_module_has_or_is_using_private_name_0: diag(4082, ts.DiagnosticCategory.Error, "Default_export_of_the_module_has_or_is_using_private_name_0_4082", "Default export of the module has or is using private name '{0}'."), Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1: diag(4083, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083", "Type parameter '{0}' of exported type alias has or is using private name '{1}'."), Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict: diag(4090, ts.DiagnosticCategory.Error, "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090", "Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4091, ts.DiagnosticCategory.Error, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091", "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."), Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4092, ts.DiagnosticCategory.Error, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092", "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."), Property_0_of_exported_class_expression_may_not_be_private_or_protected: diag(4094, ts.DiagnosticCategory.Error, "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094", "Property '{0}' of exported class expression may not be private or protected."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4095, ts.DiagnosticCategory.Error, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095", "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4096, ts.DiagnosticCategory.Error, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096", "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_static_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4097, ts.DiagnosticCategory.Error, "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097", "Public static method '{0}' of exported class has or is using private name '{1}'."), Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4098, ts.DiagnosticCategory.Error, "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098", "Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4099, ts.DiagnosticCategory.Error, "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099", "Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), Public_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4100, ts.DiagnosticCategory.Error, "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100", "Public method '{0}' of exported class has or is using private name '{1}'."), Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4101, ts.DiagnosticCategory.Error, "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101", "Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'."), Method_0_of_exported_interface_has_or_is_using_private_name_1: diag(4102, ts.DiagnosticCategory.Error, "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102", "Method '{0}' of exported interface has or is using private name '{1}'."), The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."), Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), Cannot_read_file_0_Colon_1: diag(5012, ts.DiagnosticCategory.Error, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."), Failed_to_parse_file_0_Colon_1: diag(5014, ts.DiagnosticCategory.Error, "Failed_to_parse_file_0_Colon_1_5014", "Failed to parse file '{0}': {1}."), Unknown_compiler_option_0: diag(5023, ts.DiagnosticCategory.Error, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."), Compiler_option_0_requires_a_value_of_type_1: diag(5024, ts.DiagnosticCategory.Error, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."), Could_not_write_file_0_Colon_1: diag(5033, ts.DiagnosticCategory.Error, "Could_not_write_file_0_Colon_1_5033", "Could not write file '{0}': {1}."), Option_project_cannot_be_mixed_with_source_files_on_a_command_line: diag(5042, ts.DiagnosticCategory.Error, "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042", "Option 'project' cannot be mixed with source files on a command line."), Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher: diag(5047, ts.DiagnosticCategory.Error, "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047", "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher."), Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: diag(5051, ts.DiagnosticCategory.Error, "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051", "Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided."), Option_0_cannot_be_specified_without_specifying_option_1: diag(5052, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_without_specifying_option_1_5052", "Option '{0}' cannot be specified without specifying option '{1}'."), Option_0_cannot_be_specified_with_option_1: diag(5053, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_with_option_1_5053", "Option '{0}' cannot be specified with option '{1}'."), A_tsconfig_json_file_is_already_defined_at_Colon_0: diag(5054, ts.DiagnosticCategory.Error, "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054", "A 'tsconfig.json' file is already defined at: '{0}'."), Cannot_write_file_0_because_it_would_overwrite_input_file: diag(5055, ts.DiagnosticCategory.Error, "Cannot_write_file_0_because_it_would_overwrite_input_file_5055", "Cannot write file '{0}' because it would overwrite input file."), Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: diag(5056, ts.DiagnosticCategory.Error, "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056", "Cannot write file '{0}' because it would be overwritten by multiple input files."), Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0: diag(5057, ts.DiagnosticCategory.Error, "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057", "Cannot find a tsconfig.json file at the specified directory: '{0}'."), The_specified_path_does_not_exist_Colon_0: diag(5058, ts.DiagnosticCategory.Error, "The_specified_path_does_not_exist_Colon_0_5058", "The specified path does not exist: '{0}'."), Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: diag(5059, ts.DiagnosticCategory.Error, "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059", "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier."), Option_paths_cannot_be_used_without_specifying_baseUrl_option: diag(5060, ts.DiagnosticCategory.Error, "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", "Option 'paths' cannot be used without specifying '--baseUrl' option."), Pattern_0_can_have_at_most_one_Asterisk_character: diag(5061, ts.DiagnosticCategory.Error, "Pattern_0_can_have_at_most_one_Asterisk_character_5061", "Pattern '{0}' can have at most one '*' character."), Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: diag(5062, ts.DiagnosticCategory.Error, "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", "Substitution '{0}' in pattern '{1}' in can have at most one '*' character."), Substitutions_for_pattern_0_should_be_an_array: diag(5063, ts.DiagnosticCategory.Error, "Substitutions_for_pattern_0_should_be_an_array_5063", "Substitutions for pattern '{0}' should be an array."), Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: diag(5064, ts.DiagnosticCategory.Error, "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'."), File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5065, ts.DiagnosticCategory.Error, "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'."), Substitutions_for_pattern_0_shouldn_t_be_an_empty_array: diag(5066, ts.DiagnosticCategory.Error, "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066", "Substitutions for pattern '{0}' shouldn't be an empty array."), Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(5067, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067", "Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name."), 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: diag(5068, ts.DiagnosticCategory.Error, "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068", "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig."), Option_0_cannot_be_specified_without_specifying_option_1_or_option_2: diag(5069, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069", "Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'."), Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy: diag(5070, ts.DiagnosticCategory.Error, "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070", "Option '--resolveJsonModule' cannot be specified without 'node' module resolution strategy."), Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."), Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."), Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."), Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."), Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."), Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."), Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."), Do_not_erase_const_enum_declarations_in_generated_code: diag(6007, ts.DiagnosticCategory.Message, "Do_not_erase_const_enum_declarations_in_generated_code_6007", "Do not erase const enum declarations in generated code."), Do_not_emit_outputs_if_any_errors_were_reported: diag(6008, ts.DiagnosticCategory.Message, "Do_not_emit_outputs_if_any_errors_were_reported_6008", "Do not emit outputs if any errors were reported."), Do_not_emit_comments_to_output: diag(6009, ts.DiagnosticCategory.Message, "Do_not_emit_comments_to_output_6009", "Do not emit comments to output."), Do_not_emit_outputs: diag(6010, ts.DiagnosticCategory.Message, "Do_not_emit_outputs_6010", "Do not emit outputs."), Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: diag(6011, ts.DiagnosticCategory.Message, "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011", "Allow default imports from modules with no default export. This does not affect code emit, just typechecking."), Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."), Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."), Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."), Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_or_ESNEXT_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'."), Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'."), Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."), Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."), Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."), Syntax_Colon_0: diag(6023, ts.DiagnosticCategory.Message, "Syntax_Colon_0_6023", "Syntax: {0}"), options: diag(6024, ts.DiagnosticCategory.Message, "options_6024", "options"), file: diag(6025, ts.DiagnosticCategory.Message, "file_6025", "file"), Examples_Colon_0: diag(6026, ts.DiagnosticCategory.Message, "Examples_Colon_0_6026", "Examples: {0}"), Options_Colon: diag(6027, ts.DiagnosticCategory.Message, "Options_Colon_6027", "Options:"), Version_0: diag(6029, ts.DiagnosticCategory.Message, "Version_0_6029", "Version {0}"), Insert_command_line_options_and_files_from_a_file: diag(6030, ts.DiagnosticCategory.Message, "Insert_command_line_options_and_files_from_a_file_6030", "Insert command line options and files from a file."), Starting_compilation_in_watch_mode: diag(6031, ts.DiagnosticCategory.Message, "Starting_compilation_in_watch_mode_6031", "Starting compilation in watch mode..."), File_change_detected_Starting_incremental_compilation: diag(6032, ts.DiagnosticCategory.Message, "File_change_detected_Starting_incremental_compilation_6032", "File change detected. Starting incremental compilation..."), KIND: diag(6034, ts.DiagnosticCategory.Message, "KIND_6034", "KIND"), FILE: diag(6035, ts.DiagnosticCategory.Message, "FILE_6035", "FILE"), VERSION: diag(6036, ts.DiagnosticCategory.Message, "VERSION_6036", "VERSION"), LOCATION: diag(6037, ts.DiagnosticCategory.Message, "LOCATION_6037", "LOCATION"), DIRECTORY: diag(6038, ts.DiagnosticCategory.Message, "DIRECTORY_6038", "DIRECTORY"), STRATEGY: diag(6039, ts.DiagnosticCategory.Message, "STRATEGY_6039", "STRATEGY"), FILE_OR_DIRECTORY: diag(6040, ts.DiagnosticCategory.Message, "FILE_OR_DIRECTORY_6040", "FILE OR DIRECTORY"), Generates_corresponding_map_file: diag(6043, ts.DiagnosticCategory.Message, "Generates_corresponding_map_file_6043", "Generates corresponding '.map' file."), Compiler_option_0_expects_an_argument: diag(6044, ts.DiagnosticCategory.Error, "Compiler_option_0_expects_an_argument_6044", "Compiler option '{0}' expects an argument."), Unterminated_quoted_string_in_response_file_0: diag(6045, ts.DiagnosticCategory.Error, "Unterminated_quoted_string_in_response_file_0_6045", "Unterminated quoted string in response file '{0}'."), Argument_for_0_option_must_be_Colon_1: diag(6046, ts.DiagnosticCategory.Error, "Argument_for_0_option_must_be_Colon_1_6046", "Argument for '{0}' option must be: {1}."), Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: diag(6048, ts.DiagnosticCategory.Error, "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", "Locale must be of the form or -. For example '{0}' or '{1}'."), Unsupported_locale_0: diag(6049, ts.DiagnosticCategory.Error, "Unsupported_locale_0_6049", "Unsupported locale '{0}'."), Unable_to_open_file_0: diag(6050, ts.DiagnosticCategory.Error, "Unable_to_open_file_0_6050", "Unable to open file '{0}'."), Corrupted_locale_file_0: diag(6051, ts.DiagnosticCategory.Error, "Corrupted_locale_file_0_6051", "Corrupted locale file {0}."), Raise_error_on_expressions_and_declarations_with_an_implied_any_type: diag(6052, ts.DiagnosticCategory.Message, "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052", "Raise error on expressions and declarations with an implied 'any' type."), File_0_not_found: diag(6053, ts.DiagnosticCategory.Error, "File_0_not_found_6053", "File '{0}' not found."), File_0_has_unsupported_extension_The_only_supported_extensions_are_1: diag(6054, ts.DiagnosticCategory.Error, "File_0_has_unsupported_extension_The_only_supported_extensions_are_1_6054", "File '{0}' has unsupported extension. The only supported extensions are {1}."), Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: diag(6055, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055", "Suppress noImplicitAny errors for indexing objects lacking index signatures."), Do_not_emit_declarations_for_code_that_has_an_internal_annotation: diag(6056, ts.DiagnosticCategory.Message, "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056", "Do not emit declarations for code that has an '@internal' annotation."), Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: diag(6058, ts.DiagnosticCategory.Message, "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058", "Specify the root directory of input files. Use to control the output directory structure with --outDir."), File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: diag(6059, ts.DiagnosticCategory.Error, "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059", "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files."), Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: diag(6060, ts.DiagnosticCategory.Message, "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060", "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)."), NEWLINE: diag(6061, ts.DiagnosticCategory.Message, "NEWLINE_6061", "NEWLINE"), Option_0_can_only_be_specified_in_tsconfig_json_file: diag(6064, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_6064", "Option '{0}' can only be specified in 'tsconfig.json' file."), Enables_experimental_support_for_ES7_decorators: diag(6065, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_ES7_decorators_6065", "Enables experimental support for ES7 decorators."), Enables_experimental_support_for_emitting_type_metadata_for_decorators: diag(6066, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066", "Enables experimental support for emitting type metadata for decorators."), Enables_experimental_support_for_ES7_async_functions: diag(6068, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_ES7_async_functions_6068", "Enables experimental support for ES7 async functions."), Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: diag(6069, ts.DiagnosticCategory.Message, "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069", "Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)."), Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: diag(6070, ts.DiagnosticCategory.Message, "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070", "Initializes a TypeScript project and creates a tsconfig.json file."), Successfully_created_a_tsconfig_json_file: diag(6071, ts.DiagnosticCategory.Message, "Successfully_created_a_tsconfig_json_file_6071", "Successfully created a tsconfig.json file."), Suppress_excess_property_checks_for_object_literals: diag(6072, ts.DiagnosticCategory.Message, "Suppress_excess_property_checks_for_object_literals_6072", "Suppress excess property checks for object literals."), Stylize_errors_and_messages_using_color_and_context_experimental: diag(6073, ts.DiagnosticCategory.Message, "Stylize_errors_and_messages_using_color_and_context_experimental_6073", "Stylize errors and messages using color and context (experimental)."), Do_not_report_errors_on_unused_labels: diag(6074, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unused_labels_6074", "Do not report errors on unused labels."), Report_error_when_not_all_code_paths_in_function_return_a_value: diag(6075, ts.DiagnosticCategory.Message, "Report_error_when_not_all_code_paths_in_function_return_a_value_6075", "Report error when not all code paths in function return a value."), Report_errors_for_fallthrough_cases_in_switch_statement: diag(6076, ts.DiagnosticCategory.Message, "Report_errors_for_fallthrough_cases_in_switch_statement_6076", "Report errors for fallthrough cases in switch statement."), Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."), Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."), Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."), Specify_JSX_code_generation_Colon_preserve_react_native_or_react: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080", "Specify JSX code generation: 'preserve', 'react-native', or 'react'."), File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."), Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."), Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."), Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit: diag(6084, ts.DiagnosticCategory.Message, "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084", "[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit"), Enable_tracing_of_the_name_resolution_process: diag(6085, ts.DiagnosticCategory.Message, "Enable_tracing_of_the_name_resolution_process_6085", "Enable tracing of the name resolution process."), Resolving_module_0_from_1: diag(6086, ts.DiagnosticCategory.Message, "Resolving_module_0_from_1_6086", "======== Resolving module '{0}' from '{1}'. ========"), Explicitly_specified_module_resolution_kind_Colon_0: diag(6087, ts.DiagnosticCategory.Message, "Explicitly_specified_module_resolution_kind_Colon_0_6087", "Explicitly specified module resolution kind: '{0}'."), Module_resolution_kind_is_not_specified_using_0: diag(6088, ts.DiagnosticCategory.Message, "Module_resolution_kind_is_not_specified_using_0_6088", "Module resolution kind is not specified, using '{0}'."), Module_name_0_was_successfully_resolved_to_1: diag(6089, ts.DiagnosticCategory.Message, "Module_name_0_was_successfully_resolved_to_1_6089", "======== Module name '{0}' was successfully resolved to '{1}'. ========"), Module_name_0_was_not_resolved: diag(6090, ts.DiagnosticCategory.Message, "Module_name_0_was_not_resolved_6090", "======== Module name '{0}' was not resolved. ========"), paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: diag(6091, ts.DiagnosticCategory.Message, "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091", "'paths' option is specified, looking for a pattern to match module name '{0}'."), Module_name_0_matched_pattern_1: diag(6092, ts.DiagnosticCategory.Message, "Module_name_0_matched_pattern_1_6092", "Module name '{0}', matched pattern '{1}'."), Trying_substitution_0_candidate_module_location_Colon_1: diag(6093, ts.DiagnosticCategory.Message, "Trying_substitution_0_candidate_module_location_Colon_1_6093", "Trying substitution '{0}', candidate module location: '{1}'."), Resolving_module_name_0_relative_to_base_url_1_2: diag(6094, ts.DiagnosticCategory.Message, "Resolving_module_name_0_relative_to_base_url_1_2_6094", "Resolving module name '{0}' relative to base url '{1}' - '{2}'."), Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1: diag(6095, ts.DiagnosticCategory.Message, "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095", "Loading module as file / folder, candidate module location '{0}', target file type '{1}'."), File_0_does_not_exist: diag(6096, ts.DiagnosticCategory.Message, "File_0_does_not_exist_6096", "File '{0}' does not exist."), File_0_exist_use_it_as_a_name_resolution_result: diag(6097, ts.DiagnosticCategory.Message, "File_0_exist_use_it_as_a_name_resolution_result_6097", "File '{0}' exist - use it as a name resolution result."), Loading_module_0_from_node_modules_folder_target_file_type_1: diag(6098, ts.DiagnosticCategory.Message, "Loading_module_0_from_node_modules_folder_target_file_type_1_6098", "Loading module '{0}' from 'node_modules' folder, target file type '{1}'."), Found_package_json_at_0: diag(6099, ts.DiagnosticCategory.Message, "Found_package_json_at_0_6099", "Found 'package.json' at '{0}'."), package_json_does_not_have_a_0_field: diag(6100, ts.DiagnosticCategory.Message, "package_json_does_not_have_a_0_field_6100", "'package.json' does not have a '{0}' field."), package_json_has_0_field_1_that_references_2: diag(6101, ts.DiagnosticCategory.Message, "package_json_has_0_field_1_that_references_2_6101", "'package.json' has '{0}' field '{1}' that references '{2}'."), Allow_javascript_files_to_be_compiled: diag(6102, ts.DiagnosticCategory.Message, "Allow_javascript_files_to_be_compiled_6102", "Allow javascript files to be compiled."), Option_0_should_have_array_of_strings_as_a_value: diag(6103, ts.DiagnosticCategory.Error, "Option_0_should_have_array_of_strings_as_a_value_6103", "Option '{0}' should have array of strings as a value."), Checking_if_0_is_the_longest_matching_prefix_for_1_2: diag(6104, ts.DiagnosticCategory.Message, "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104", "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'."), Expected_type_of_0_field_in_package_json_to_be_string_got_1: diag(6105, ts.DiagnosticCategory.Message, "Expected_type_of_0_field_in_package_json_to_be_string_got_1_6105", "Expected type of '{0}' field in 'package.json' to be 'string', got '{1}'."), baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: diag(6106, ts.DiagnosticCategory.Message, "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106", "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'."), rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0: diag(6107, ts.DiagnosticCategory.Message, "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107", "'rootDirs' option is set, using it to resolve relative module name '{0}'."), Longest_matching_prefix_for_0_is_1: diag(6108, ts.DiagnosticCategory.Message, "Longest_matching_prefix_for_0_is_1_6108", "Longest matching prefix for '{0}' is '{1}'."), Loading_0_from_the_root_dir_1_candidate_location_2: diag(6109, ts.DiagnosticCategory.Message, "Loading_0_from_the_root_dir_1_candidate_location_2_6109", "Loading '{0}' from the root dir '{1}', candidate location '{2}'."), Trying_other_entries_in_rootDirs: diag(6110, ts.DiagnosticCategory.Message, "Trying_other_entries_in_rootDirs_6110", "Trying other entries in 'rootDirs'."), Module_resolution_using_rootDirs_has_failed: diag(6111, ts.DiagnosticCategory.Message, "Module_resolution_using_rootDirs_has_failed_6111", "Module resolution using 'rootDirs' has failed."), Do_not_emit_use_strict_directives_in_module_output: diag(6112, ts.DiagnosticCategory.Message, "Do_not_emit_use_strict_directives_in_module_output_6112", "Do not emit 'use strict' directives in module output."), Enable_strict_null_checks: diag(6113, ts.DiagnosticCategory.Message, "Enable_strict_null_checks_6113", "Enable strict null checks."), Unknown_option_excludes_Did_you_mean_exclude: diag(6114, ts.DiagnosticCategory.Error, "Unknown_option_excludes_Did_you_mean_exclude_6114", "Unknown option 'excludes'. Did you mean 'exclude'?"), Raise_error_on_this_expressions_with_an_implied_any_type: diag(6115, ts.DiagnosticCategory.Message, "Raise_error_on_this_expressions_with_an_implied_any_type_6115", "Raise error on 'this' expressions with an implied 'any' type."), Resolving_type_reference_directive_0_containing_file_1_root_directory_2: diag(6116, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116", "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========"), Resolving_using_primary_search_paths: diag(6117, ts.DiagnosticCategory.Message, "Resolving_using_primary_search_paths_6117", "Resolving using primary search paths..."), Resolving_from_node_modules_folder: diag(6118, ts.DiagnosticCategory.Message, "Resolving_from_node_modules_folder_6118", "Resolving from node_modules folder..."), Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: diag(6119, ts.DiagnosticCategory.Message, "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119", "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========"), Type_reference_directive_0_was_not_resolved: diag(6120, ts.DiagnosticCategory.Message, "Type_reference_directive_0_was_not_resolved_6120", "======== Type reference directive '{0}' was not resolved. ========"), Resolving_with_primary_search_path_0: diag(6121, ts.DiagnosticCategory.Message, "Resolving_with_primary_search_path_0_6121", "Resolving with primary search path '{0}'."), Root_directory_cannot_be_determined_skipping_primary_search_paths: diag(6122, ts.DiagnosticCategory.Message, "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122", "Root directory cannot be determined, skipping primary search paths."), Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: diag(6123, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123", "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========"), Type_declaration_files_to_be_included_in_compilation: diag(6124, ts.DiagnosticCategory.Message, "Type_declaration_files_to_be_included_in_compilation_6124", "Type declaration files to be included in compilation."), Looking_up_in_node_modules_folder_initial_location_0: diag(6125, ts.DiagnosticCategory.Message, "Looking_up_in_node_modules_folder_initial_location_0_6125", "Looking up in 'node_modules' folder, initial location '{0}'."), Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: diag(6126, ts.DiagnosticCategory.Message, "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder."), Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: diag(6127, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========"), Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: diag(6128, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========"), 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.", 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.", 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."), Module_0_was_resolved_to_1_but_jsx_is_not_set: diag(6142, ts.DiagnosticCategory.Error, "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142", "Module '{0}' was resolved to '{1}', but '--jsx' is not set."), Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1: diag(6144, ts.DiagnosticCategory.Message, "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144", "Module '{0}' was resolved as locally declared ambient module in file '{1}'."), Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified: diag(6145, ts.DiagnosticCategory.Message, "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145", "Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified."), Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h: diag(6146, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146", "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."), Resolution_for_module_0_was_found_in_cache_from_location_1: diag(6147, ts.DiagnosticCategory.Message, "Resolution_for_module_0_was_found_in_cache_from_location_1_6147", "Resolution for module '{0}' was found in cache from location '{1}'."), Directory_0_does_not_exist_skipping_all_lookups_in_it: diag(6148, ts.DiagnosticCategory.Message, "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148", "Directory '{0}' does not exist, skipping all lookups in it."), Show_diagnostic_information: diag(6149, ts.DiagnosticCategory.Message, "Show_diagnostic_information_6149", "Show diagnostic information."), Show_verbose_diagnostic_information: diag(6150, ts.DiagnosticCategory.Message, "Show_verbose_diagnostic_information_6150", "Show verbose diagnostic information."), Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file: diag(6151, ts.DiagnosticCategory.Message, "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151", "Emit a single file with source maps instead of having a separate file."), Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set: diag(6152, ts.DiagnosticCategory.Message, "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152", "Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set."), Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule: diag(6153, ts.DiagnosticCategory.Message, "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153", "Transpile each file as a separate module (similar to 'ts.transpileModule')."), Print_names_of_generated_files_part_of_the_compilation: diag(6154, ts.DiagnosticCategory.Message, "Print_names_of_generated_files_part_of_the_compilation_6154", "Print names of generated files part of the compilation."), Print_names_of_files_part_of_the_compilation: diag(6155, ts.DiagnosticCategory.Message, "Print_names_of_files_part_of_the_compilation_6155", "Print names of files part of the compilation."), The_locale_used_when_displaying_messages_to_the_user_e_g_en_us: diag(6156, ts.DiagnosticCategory.Message, "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156", "The locale used when displaying messages to the user (e.g. 'en-us')"), Do_not_generate_custom_helper_functions_like_extends_in_compiled_output: diag(6157, ts.DiagnosticCategory.Message, "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157", "Do not generate custom helper functions like '__extends' in compiled output."), Do_not_include_the_default_library_file_lib_d_ts: diag(6158, ts.DiagnosticCategory.Message, "Do_not_include_the_default_library_file_lib_d_ts_6158", "Do not include the default library file (lib.d.ts)."), Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files: diag(6159, ts.DiagnosticCategory.Message, "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159", "Do not add triple-slash references or imported modules to the list of compiled files."), Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files: diag(6160, ts.DiagnosticCategory.Message, "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160", "[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files."), List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."), Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."), The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."), Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."), Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."), Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."), A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."), List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime: diag(6168, ts.DiagnosticCategory.Message, "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168", "List of root folders whose combined content represents the structure of the project at runtime."), Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."), Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"), Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"), Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"), Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"), Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"), Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"), Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"), Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"), Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"), Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."), Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."), List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."), Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"), Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."), Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."), Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."), Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."), Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."), Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."), 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.", 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.", 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.", 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}"), Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."), Output_file_0_has_not_been_built_from_source_file_1: diag(6305, ts.DiagnosticCategory.Error, "Output_file_0_has_not_been_built_from_source_file_1_6305", "Output file '{0}' has not been built from source file '{1}'."), Referenced_project_0_must_have_setting_composite_Colon_true: diag(6306, ts.DiagnosticCategory.Error, "Referenced_project_0_must_have_setting_composite_Colon_true_6306", "Referenced project '{0}' must have setting \"composite\": true."), File_0_is_not_in_project_file_list_Projects_must_list_all_files_or_use_an_include_pattern: diag(6307, ts.DiagnosticCategory.Error, "File_0_is_not_in_project_file_list_Projects_must_list_all_files_or_use_an_include_pattern_6307", "File '{0}' is not in project file list. Projects must list all files or use an 'include' pattern."), Cannot_prepend_project_0_because_it_does_not_have_outFile_set: diag(6308, ts.DiagnosticCategory.Error, "Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308", "Cannot prepend project '{0}' because it does not have 'outFile' set"), Output_file_0_from_project_1_does_not_exist: diag(6309, ts.DiagnosticCategory.Error, "Output_file_0_from_project_1_does_not_exist_6309", "Output file '{0}' from project '{1}' does not exist"), Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2: diag(6350, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350", "Project '{0}' is out of date because oldest output '{1}' is older than newest input '{2}'"), Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2: diag(6351, ts.DiagnosticCategory.Message, "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351", "Project '{0}' is up to date because newest input '{1}' is older than oldest output '{2}'"), Project_0_is_out_of_date_because_output_file_1_does_not_exist: diag(6352, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352", "Project '{0}' is out of date because output file '{1}' does not exist"), Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date: diag(6353, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353", "Project '{0}' is out of date because its dependency '{1}' is out of date"), Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies: diag(6354, ts.DiagnosticCategory.Message, "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354", "Project '{0}' is up to date with .d.ts files from its dependencies"), Projects_in_this_build_Colon_0: diag(6355, ts.DiagnosticCategory.Message, "Projects_in_this_build_Colon_0_6355", "Projects in this build: {0}"), A_non_dry_build_would_delete_the_following_files_Colon_0: diag(6356, ts.DiagnosticCategory.Message, "A_non_dry_build_would_delete_the_following_files_Colon_0_6356", "A non-dry build would delete the following files: {0}"), A_non_dry_build_would_build_project_0: diag(6357, ts.DiagnosticCategory.Message, "A_non_dry_build_would_build_project_0_6357", "A non-dry build would build project '{0}'"), Building_project_0: diag(6358, ts.DiagnosticCategory.Message, "Building_project_0_6358", "Building project '{0}'..."), Updating_output_timestamps_of_project_0: diag(6359, ts.DiagnosticCategory.Message, "Updating_output_timestamps_of_project_0_6359", "Updating output timestamps of project '{0}'..."), delete_this_Project_0_is_up_to_date_because_it_was_previously_built: diag(6360, ts.DiagnosticCategory.Message, "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360", "delete this - Project '{0}' is up to date because it was previously built"), Project_0_is_up_to_date: diag(6361, ts.DiagnosticCategory.Message, "Project_0_is_up_to_date_6361", "Project '{0}' is up to date"), Skipping_build_of_project_0_because_its_dependency_1_has_errors: diag(6362, ts.DiagnosticCategory.Message, "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362", "Skipping build of project '{0}' because its dependency '{1}' has errors"), Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"), Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"), Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"), Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"), Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"), Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"), Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."), Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."), Skipping_clean_because_not_all_projects_could_be_located: diag(6371, ts.DiagnosticCategory.Error, "Skipping_clean_because_not_all_projects_could_be_located_6371", "Skipping clean because not all projects could be located"), Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."), Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."), Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."), new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: diag(7009, ts.DiagnosticCategory.Error, "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009", "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."), _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: diag(7010, ts.DiagnosticCategory.Error, "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010", "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type."), Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: diag(7011, ts.DiagnosticCategory.Error, "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011", "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type."), Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7013, ts.DiagnosticCategory.Error, "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013", "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type."), Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: diag(7015, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015", "Element implicitly has an 'any' type because index expression is not of type 'number'."), Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type: diag(7016, ts.DiagnosticCategory.Error, "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", "Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type."), Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature: diag(7017, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017", "Element implicitly has an 'any' type because type '{0}' has no index signature."), Object_literal_s_property_0_implicitly_has_an_1_type: diag(7018, ts.DiagnosticCategory.Error, "Object_literal_s_property_0_implicitly_has_an_1_type_7018", "Object literal's property '{0}' implicitly has an '{1}' type."), Rest_parameter_0_implicitly_has_an_any_type: diag(7019, ts.DiagnosticCategory.Error, "Rest_parameter_0_implicitly_has_an_any_type_7019", "Rest parameter '{0}' implicitly has an 'any[]' type."), Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7020, ts.DiagnosticCategory.Error, "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020", "Call signature, which lacks return-type annotation, implicitly has an 'any' return type."), _0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: diag(7022, ts.DiagnosticCategory.Error, "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022", "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer."), _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: diag(7023, ts.DiagnosticCategory.Error, "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023", "'{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."), 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.", 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."), Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation: diag(7032, ts.DiagnosticCategory.Error, "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032", "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation."), Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation: diag(7033, ts.DiagnosticCategory.Error, "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033", "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation."), Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined: diag(7034, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034", "Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined."), Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0: diag(7035, ts.DiagnosticCategory.Error, "Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_mod_7035", "Try `npm install @types/{0}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`"), Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0: diag(7036, ts.DiagnosticCategory.Error, "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036", "Dynamic import's specifier must be of type 'string', but here has type '{0}'."), Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports: diag(7037, ts.DiagnosticCategory.Message, "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037", "Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'."), Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead: diag(7038, ts.DiagnosticCategory.Error, "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038", "Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead."), Mapped_object_type_implicitly_has_an_any_template_type: diag(7039, ts.DiagnosticCategory.Error, "Mapped_object_type_implicitly_has_an_any_template_type_7039", "Mapped object type implicitly has an 'any' template type."), You_cannot_rename_this_element: diag(8000, ts.DiagnosticCategory.Error, "You_cannot_rename_this_element_8000", "You cannot rename this element."), You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: diag(8001, ts.DiagnosticCategory.Error, "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", "You cannot rename elements that are defined in the standard TypeScript library."), import_can_only_be_used_in_a_ts_file: diag(8002, ts.DiagnosticCategory.Error, "import_can_only_be_used_in_a_ts_file_8002", "'import ... =' can only be used in a .ts file."), export_can_only_be_used_in_a_ts_file: diag(8003, ts.DiagnosticCategory.Error, "export_can_only_be_used_in_a_ts_file_8003", "'export=' can only be used in a .ts file."), type_parameter_declarations_can_only_be_used_in_a_ts_file: diag(8004, ts.DiagnosticCategory.Error, "type_parameter_declarations_can_only_be_used_in_a_ts_file_8004", "'type parameter declarations' can only be used in a .ts file."), implements_clauses_can_only_be_used_in_a_ts_file: diag(8005, ts.DiagnosticCategory.Error, "implements_clauses_can_only_be_used_in_a_ts_file_8005", "'implements clauses' can only be used in a .ts file."), interface_declarations_can_only_be_used_in_a_ts_file: diag(8006, ts.DiagnosticCategory.Error, "interface_declarations_can_only_be_used_in_a_ts_file_8006", "'interface declarations' can only be used in a .ts file."), module_declarations_can_only_be_used_in_a_ts_file: diag(8007, ts.DiagnosticCategory.Error, "module_declarations_can_only_be_used_in_a_ts_file_8007", "'module declarations' can only be used in a .ts file."), type_aliases_can_only_be_used_in_a_ts_file: diag(8008, ts.DiagnosticCategory.Error, "type_aliases_can_only_be_used_in_a_ts_file_8008", "'type aliases' can only be used in a .ts file."), _0_can_only_be_used_in_a_ts_file: diag(8009, ts.DiagnosticCategory.Error, "_0_can_only_be_used_in_a_ts_file_8009", "'{0}' can only be used in a .ts file."), types_can_only_be_used_in_a_ts_file: diag(8010, ts.DiagnosticCategory.Error, "types_can_only_be_used_in_a_ts_file_8010", "'types' can only be used in a .ts file."), type_arguments_can_only_be_used_in_a_ts_file: diag(8011, ts.DiagnosticCategory.Error, "type_arguments_can_only_be_used_in_a_ts_file_8011", "'type arguments' can only be used in a .ts file."), parameter_modifiers_can_only_be_used_in_a_ts_file: diag(8012, ts.DiagnosticCategory.Error, "parameter_modifiers_can_only_be_used_in_a_ts_file_8012", "'parameter modifiers' can only be used in a .ts file."), non_null_assertions_can_only_be_used_in_a_ts_file: diag(8013, ts.DiagnosticCategory.Error, "non_null_assertions_can_only_be_used_in_a_ts_file_8013", "'non-null assertions' can only be used in a .ts file."), enum_declarations_can_only_be_used_in_a_ts_file: diag(8015, ts.DiagnosticCategory.Error, "enum_declarations_can_only_be_used_in_a_ts_file_8015", "'enum declarations' can only be used in a .ts file."), type_assertion_expressions_can_only_be_used_in_a_ts_file: diag(8016, ts.DiagnosticCategory.Error, "type_assertion_expressions_can_only_be_used_in_a_ts_file_8016", "'type assertion expressions' can only be used in a .ts file."), Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0: diag(8017, ts.DiagnosticCategory.Error, "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017", "Octal literal types must use ES2015 syntax. Use the syntax '{0}'."), Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0: diag(8018, ts.DiagnosticCategory.Error, "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018", "Octal literals are not allowed in enums members initializer. Use the syntax '{0}'."), Report_errors_in_js_files: diag(8019, ts.DiagnosticCategory.Message, "Report_errors_in_js_files_8019", "Report errors in .js files."), JSDoc_types_can_only_be_used_inside_documentation_comments: diag(8020, ts.DiagnosticCategory.Error, "JSDoc_types_can_only_be_used_inside_documentation_comments_8020", "JSDoc types can only be used inside documentation comments."), JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags: diag(8021, ts.DiagnosticCategory.Error, "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021", "JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags."), JSDoc_0_is_not_attached_to_a_class: diag(8022, ts.DiagnosticCategory.Error, "JSDoc_0_is_not_attached_to_a_class_8022", "JSDoc '@{0}' is not attached to a class."), JSDoc_0_1_does_not_match_the_extends_2_clause: diag(8023, ts.DiagnosticCategory.Error, "JSDoc_0_1_does_not_match_the_extends_2_clause_8023", "JSDoc '@{0} {1}' does not match the 'extends {2}' clause."), JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name: diag(8024, ts.DiagnosticCategory.Error, "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024", "JSDoc '@param' tag has name '{0}', but there is no parameter with that name."), Class_declarations_cannot_have_more_than_one_augments_or_extends_tag: diag(8025, ts.DiagnosticCategory.Error, "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025", "Class declarations cannot have more than one `@augments` or `@extends` tag."), Expected_0_type_arguments_provide_these_with_an_extends_tag: diag(8026, ts.DiagnosticCategory.Error, "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026", "Expected {0} type arguments; provide these with an '@extends' tag."), Expected_0_1_type_arguments_provide_these_with_an_extends_tag: diag(8027, ts.DiagnosticCategory.Error, "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027", "Expected {0}-{1} type arguments; provide these with an '@extends' tag."), JSDoc_may_only_appear_in_the_last_parameter_of_a_signature: diag(8028, ts.DiagnosticCategory.Error, "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028", "JSDoc '...' may only appear in the last parameter of a signature."), JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type: diag(8029, ts.DiagnosticCategory.Error, "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029", "JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type."), Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clause: diag(9002, ts.DiagnosticCategory.Error, "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002", "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clause."), class_expressions_are_not_currently_supported: diag(9003, ts.DiagnosticCategory.Error, "class_expressions_are_not_currently_supported_9003", "'class' expressions are not currently supported."), Language_service_is_disabled: diag(9004, ts.DiagnosticCategory.Error, "Language_service_is_disabled_9004", "Language service is disabled."), JSX_attributes_must_only_be_assigned_a_non_empty_expression: diag(17000, ts.DiagnosticCategory.Error, "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", "JSX attributes must only be assigned a non-empty 'expression'."), JSX_elements_cannot_have_multiple_attributes_with_the_same_name: diag(17001, ts.DiagnosticCategory.Error, "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001", "JSX elements cannot have multiple attributes with the same name."), Expected_corresponding_JSX_closing_tag_for_0: diag(17002, ts.DiagnosticCategory.Error, "Expected_corresponding_JSX_closing_tag_for_0_17002", "Expected corresponding JSX closing tag for '{0}'."), JSX_attribute_expected: diag(17003, ts.DiagnosticCategory.Error, "JSX_attribute_expected_17003", "JSX attribute expected."), Cannot_use_JSX_unless_the_jsx_flag_is_provided: diag(17004, ts.DiagnosticCategory.Error, "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004", "Cannot use JSX unless the '--jsx' flag is provided."), A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: diag(17005, ts.DiagnosticCategory.Error, "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", "A constructor cannot contain a 'super' call when its class extends 'null'."), An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17006, ts.DiagnosticCategory.Error, "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."), A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17007, ts.DiagnosticCategory.Error, "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."), JSX_element_0_has_no_corresponding_closing_tag: diag(17008, ts.DiagnosticCategory.Error, "JSX_element_0_has_no_corresponding_closing_tag_17008", "JSX element '{0}' has no corresponding closing tag."), super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: diag(17009, ts.DiagnosticCategory.Error, "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", "'super' must be called before accessing 'this' in the constructor of a derived class."), Unknown_type_acquisition_option_0: diag(17010, ts.DiagnosticCategory.Error, "Unknown_type_acquisition_option_0_17010", "Unknown type acquisition option '{0}'."), super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class: diag(17011, ts.DiagnosticCategory.Error, "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011", "'super' must be called before accessing a property of 'super' in the constructor of a derived class."), _0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2: diag(17012, ts.DiagnosticCategory.Error, "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012", "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?"), Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor: diag(17013, ts.DiagnosticCategory.Error, "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013", "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor."), JSX_fragment_has_no_corresponding_closing_tag: diag(17014, ts.DiagnosticCategory.Error, "JSX_fragment_has_no_corresponding_closing_tag_17014", "JSX fragment has no corresponding closing tag."), Expected_corresponding_closing_tag_for_JSX_fragment: diag(17015, ts.DiagnosticCategory.Error, "Expected_corresponding_closing_tag_for_JSX_fragment_17015", "Expected corresponding closing tag for JSX fragment."), JSX_fragment_is_not_supported_when_using_jsxFactory: diag(17016, ts.DiagnosticCategory.Error, "JSX_fragment_is_not_supported_when_using_jsxFactory_17016", "JSX fragment is not supported when using --jsxFactory"), JSX_fragment_is_not_supported_when_using_an_inline_JSX_factory_pragma: diag(17017, ts.DiagnosticCategory.Error, "JSX_fragment_is_not_supported_when_using_an_inline_JSX_factory_pragma_17017", "JSX fragment is not supported when using an inline JSX factory pragma"), Circularity_detected_while_resolving_configuration_Colon_0: diag(18000, ts.DiagnosticCategory.Error, "Circularity_detected_while_resolving_configuration_Colon_0_18000", "Circularity detected while resolving configuration: {0}"), A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not: diag(18001, ts.DiagnosticCategory.Error, "A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not_18001", "A path in an 'extends' option must be relative or rooted, but '{0}' is not."), The_files_list_in_config_file_0_is_empty: diag(18002, ts.DiagnosticCategory.Error, "The_files_list_in_config_file_0_is_empty_18002", "The 'files' list in config file '{0}' is empty."), No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2: diag(18003, ts.DiagnosticCategory.Error, "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003", "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'."), File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module: diag(80001, ts.DiagnosticCategory.Suggestion, "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001", "File is a CommonJS module; it may be converted to an ES6 module."), This_constructor_function_may_be_converted_to_a_class_declaration: diag(80002, ts.DiagnosticCategory.Suggestion, "This_constructor_function_may_be_converted_to_a_class_declaration_80002", "This constructor function may be converted to a class declaration."), Import_may_be_converted_to_a_default_import: diag(80003, ts.DiagnosticCategory.Suggestion, "Import_may_be_converted_to_a_default_import_80003", "Import may be converted to a default import."), JSDoc_types_may_be_moved_to_TypeScript_types: diag(80004, ts.DiagnosticCategory.Suggestion, "JSDoc_types_may_be_moved_to_TypeScript_types_80004", "JSDoc types may be moved to TypeScript types."), require_call_may_be_converted_to_an_import: diag(80005, ts.DiagnosticCategory.Suggestion, "require_call_may_be_converted_to_an_import_80005", "'require' call may be converted to an import."), Add_missing_super_call: diag(90001, ts.DiagnosticCategory.Message, "Add_missing_super_call_90001", "Add missing 'super()' call"), Make_super_call_the_first_statement_in_the_constructor: diag(90002, ts.DiagnosticCategory.Message, "Make_super_call_the_first_statement_in_the_constructor_90002", "Make 'super()' call the first statement in the constructor"), Change_extends_to_implements: diag(90003, ts.DiagnosticCategory.Message, "Change_extends_to_implements_90003", "Change 'extends' to 'implements'"), Remove_declaration_for_Colon_0: diag(90004, ts.DiagnosticCategory.Message, "Remove_declaration_for_Colon_0_90004", "Remove declaration for: '{0}'"), Remove_import_from_0: diag(90005, ts.DiagnosticCategory.Message, "Remove_import_from_0_90005", "Remove import from '{0}'"), Implement_interface_0: diag(90006, ts.DiagnosticCategory.Message, "Implement_interface_0_90006", "Implement interface '{0}'"), Implement_inherited_abstract_class: diag(90007, ts.DiagnosticCategory.Message, "Implement_inherited_abstract_class_90007", "Implement inherited abstract class"), Add_0_to_unresolved_variable: diag(90008, ts.DiagnosticCategory.Message, "Add_0_to_unresolved_variable_90008", "Add '{0}.' to unresolved variable"), Remove_destructuring: diag(90009, ts.DiagnosticCategory.Message, "Remove_destructuring_90009", "Remove destructuring"), Remove_variable_statement: diag(90010, ts.DiagnosticCategory.Message, "Remove_variable_statement_90010", "Remove variable statement"), Import_0_from_module_1: diag(90013, ts.DiagnosticCategory.Message, "Import_0_from_module_1_90013", "Import '{0}' from module \"{1}\""), Change_0_to_1: diag(90014, ts.DiagnosticCategory.Message, "Change_0_to_1_90014", "Change '{0}' to '{1}'"), Add_0_to_existing_import_declaration_from_1: diag(90015, ts.DiagnosticCategory.Message, "Add_0_to_existing_import_declaration_from_1_90015", "Add '{0}' to existing import declaration from \"{1}\""), Declare_property_0: diag(90016, ts.DiagnosticCategory.Message, "Declare_property_0_90016", "Declare property '{0}'"), Add_index_signature_for_property_0: diag(90017, ts.DiagnosticCategory.Message, "Add_index_signature_for_property_0_90017", "Add index signature for property '{0}'"), Disable_checking_for_this_file: diag(90018, ts.DiagnosticCategory.Message, "Disable_checking_for_this_file_90018", "Disable checking for this file"), Ignore_this_error_message: diag(90019, ts.DiagnosticCategory.Message, "Ignore_this_error_message_90019", "Ignore this error message"), Initialize_property_0_in_the_constructor: diag(90020, ts.DiagnosticCategory.Message, "Initialize_property_0_in_the_constructor_90020", "Initialize property '{0}' in the constructor"), Initialize_static_property_0: diag(90021, ts.DiagnosticCategory.Message, "Initialize_static_property_0_90021", "Initialize static property '{0}'"), Change_spelling_to_0: diag(90022, ts.DiagnosticCategory.Message, "Change_spelling_to_0_90022", "Change spelling to '{0}'"), Declare_method_0: diag(90023, ts.DiagnosticCategory.Message, "Declare_method_0_90023", "Declare method '{0}'"), Declare_static_method_0: diag(90024, ts.DiagnosticCategory.Message, "Declare_static_method_0_90024", "Declare static method '{0}'"), Prefix_0_with_an_underscore: diag(90025, ts.DiagnosticCategory.Message, "Prefix_0_with_an_underscore_90025", "Prefix '{0}' with an underscore"), Rewrite_as_the_indexed_access_type_0: diag(90026, ts.DiagnosticCategory.Message, "Rewrite_as_the_indexed_access_type_0_90026", "Rewrite as the indexed access type '{0}'"), Declare_static_property_0: diag(90027, ts.DiagnosticCategory.Message, "Declare_static_property_0_90027", "Declare static property '{0}'"), Call_decorator_expression: diag(90028, ts.DiagnosticCategory.Message, "Call_decorator_expression_90028", "Call decorator expression"), Add_async_modifier_to_containing_function: diag(90029, ts.DiagnosticCategory.Message, "Add_async_modifier_to_containing_function_90029", "Add async modifier to containing function"), Convert_function_to_an_ES2015_class: diag(95001, ts.DiagnosticCategory.Message, "Convert_function_to_an_ES2015_class_95001", "Convert function to an ES2015 class"), Convert_function_0_to_class: diag(95002, ts.DiagnosticCategory.Message, "Convert_function_0_to_class_95002", "Convert function '{0}' to class"), Extract_to_0_in_1: diag(95004, ts.DiagnosticCategory.Message, "Extract_to_0_in_1_95004", "Extract to {0} in {1}"), Extract_function: diag(95005, ts.DiagnosticCategory.Message, "Extract_function_95005", "Extract function"), Extract_constant: diag(95006, ts.DiagnosticCategory.Message, "Extract_constant_95006", "Extract constant"), Extract_to_0_in_enclosing_scope: diag(95007, ts.DiagnosticCategory.Message, "Extract_to_0_in_enclosing_scope_95007", "Extract to {0} in enclosing scope"), Extract_to_0_in_1_scope: diag(95008, ts.DiagnosticCategory.Message, "Extract_to_0_in_1_scope_95008", "Extract to {0} in {1} scope"), Annotate_with_type_from_JSDoc: diag(95009, ts.DiagnosticCategory.Message, "Annotate_with_type_from_JSDoc_95009", "Annotate with type from JSDoc"), Annotate_with_types_from_JSDoc: diag(95010, ts.DiagnosticCategory.Message, "Annotate_with_types_from_JSDoc_95010", "Annotate with types from JSDoc"), Infer_type_of_0_from_usage: diag(95011, ts.DiagnosticCategory.Message, "Infer_type_of_0_from_usage_95011", "Infer type of '{0}' from usage"), Infer_parameter_types_from_usage: diag(95012, ts.DiagnosticCategory.Message, "Infer_parameter_types_from_usage_95012", "Infer parameter types from usage"), Convert_to_default_import: diag(95013, ts.DiagnosticCategory.Message, "Convert_to_default_import_95013", "Convert to default import"), Install_0: diag(95014, ts.DiagnosticCategory.Message, "Install_0_95014", "Install '{0}'"), Replace_import_with_0: diag(95015, ts.DiagnosticCategory.Message, "Replace_import_with_0_95015", "Replace import with '{0}'."), Use_synthetic_default_member: diag(95016, ts.DiagnosticCategory.Message, "Use_synthetic_default_member_95016", "Use synthetic 'default' member."), Convert_to_ES6_module: diag(95017, ts.DiagnosticCategory.Message, "Convert_to_ES6_module_95017", "Convert to ES6 module"), Add_undefined_type_to_property_0: diag(95018, ts.DiagnosticCategory.Message, "Add_undefined_type_to_property_0_95018", "Add 'undefined' type to property '{0}'"), Add_initializer_to_property_0: diag(95019, ts.DiagnosticCategory.Message, "Add_initializer_to_property_0_95019", "Add initializer to property '{0}'"), Add_definite_assignment_assertion_to_property_0: diag(95020, ts.DiagnosticCategory.Message, "Add_definite_assignment_assertion_to_property_0_95020", "Add definite assignment assertion to property '{0}'"), Add_all_missing_members: diag(95022, ts.DiagnosticCategory.Message, "Add_all_missing_members_95022", "Add all missing members"), Infer_all_types_from_usage: diag(95023, ts.DiagnosticCategory.Message, "Infer_all_types_from_usage_95023", "Infer all types from usage"), Delete_all_unused_declarations: diag(95024, ts.DiagnosticCategory.Message, "Delete_all_unused_declarations_95024", "Delete all unused declarations"), Prefix_all_unused_declarations_with_where_possible: diag(95025, ts.DiagnosticCategory.Message, "Prefix_all_unused_declarations_with_where_possible_95025", "Prefix all unused declarations with '_' where possible"), Fix_all_detected_spelling_errors: diag(95026, ts.DiagnosticCategory.Message, "Fix_all_detected_spelling_errors_95026", "Fix all detected spelling errors"), Add_initializers_to_all_uninitialized_properties: diag(95027, ts.DiagnosticCategory.Message, "Add_initializers_to_all_uninitialized_properties_95027", "Add initializers to all uninitialized properties"), Add_definite_assignment_assertions_to_all_uninitialized_properties: diag(95028, ts.DiagnosticCategory.Message, "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028", "Add definite assignment assertions to all uninitialized properties"), Add_undefined_type_to_all_uninitialized_properties: diag(95029, ts.DiagnosticCategory.Message, "Add_undefined_type_to_all_uninitialized_properties_95029", "Add undefined type to all uninitialized properties"), Change_all_jsdoc_style_types_to_TypeScript: diag(95030, ts.DiagnosticCategory.Message, "Change_all_jsdoc_style_types_to_TypeScript_95030", "Change all jsdoc-style types to TypeScript"), Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types: diag(95031, ts.DiagnosticCategory.Message, "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031", "Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)"), Implement_all_unimplemented_interfaces: diag(95032, ts.DiagnosticCategory.Message, "Implement_all_unimplemented_interfaces_95032", "Implement all unimplemented interfaces"), Install_all_missing_types_packages: diag(95033, ts.DiagnosticCategory.Message, "Install_all_missing_types_packages_95033", "Install all missing types packages"), Rewrite_all_as_indexed_access_types: diag(95034, ts.DiagnosticCategory.Message, "Rewrite_all_as_indexed_access_types_95034", "Rewrite all as indexed access types"), Convert_all_to_default_imports: diag(95035, ts.DiagnosticCategory.Message, "Convert_all_to_default_imports_95035", "Convert all to default imports"), Make_all_super_calls_the_first_statement_in_their_constructor: diag(95036, ts.DiagnosticCategory.Message, "Make_all_super_calls_the_first_statement_in_their_constructor_95036", "Make all 'super()' calls the first statement in their constructor"), Add_qualifier_to_all_unresolved_variables_matching_a_member_name: diag(95037, ts.DiagnosticCategory.Message, "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037", "Add qualifier to all unresolved variables matching a member name"), Change_all_extended_interfaces_to_implements: diag(95038, ts.DiagnosticCategory.Message, "Change_all_extended_interfaces_to_implements_95038", "Change all extended interfaces to 'implements'"), Add_all_missing_super_calls: diag(95039, ts.DiagnosticCategory.Message, "Add_all_missing_super_calls_95039", "Add all missing super calls"), Implement_all_inherited_abstract_classes: diag(95040, ts.DiagnosticCategory.Message, "Implement_all_inherited_abstract_classes_95040", "Implement all inherited abstract classes"), Add_all_missing_async_modifiers: diag(95041, ts.DiagnosticCategory.Message, "Add_all_missing_async_modifiers_95041", "Add all missing 'async' modifiers"), Add_ts_ignore_to_all_error_messages: diag(95042, ts.DiagnosticCategory.Message, "Add_ts_ignore_to_all_error_messages_95042", "Add '@ts-ignore' to all error messages"), Annotate_everything_with_types_from_JSDoc: diag(95043, ts.DiagnosticCategory.Message, "Annotate_everything_with_types_from_JSDoc_95043", "Annotate everything with types from JSDoc"), Add_to_all_uncalled_decorators: diag(95044, ts.DiagnosticCategory.Message, "Add_to_all_uncalled_decorators_95044", "Add '()' to all uncalled decorators"), Convert_all_constructor_functions_to_classes: diag(95045, ts.DiagnosticCategory.Message, "Convert_all_constructor_functions_to_classes_95045", "Convert all constructor functions to classes"), Generate_get_and_set_accessors: diag(95046, ts.DiagnosticCategory.Message, "Generate_get_and_set_accessors_95046", "Generate 'get' and 'set' accessors"), Convert_require_to_import: diag(95047, ts.DiagnosticCategory.Message, "Convert_require_to_import_95047", "Convert 'require' to 'import'"), Convert_all_require_to_import: diag(95048, ts.DiagnosticCategory.Message, "Convert_all_require_to_import_95048", "Convert all 'require' to 'import'"), Move_to_a_new_file: diag(95049, ts.DiagnosticCategory.Message, "Move_to_a_new_file_95049", "Move to a new file"), Remove_unreachable_code: diag(95050, ts.DiagnosticCategory.Message, "Remove_unreachable_code_95050", "Remove unreachable code"), Remove_all_unreachable_code: diag(95051, ts.DiagnosticCategory.Message, "Remove_all_unreachable_code_95051", "Remove all unreachable code"), Add_missing_typeof: diag(95052, ts.DiagnosticCategory.Message, "Add_missing_typeof_95052", "Add missing 'typeof'"), Remove_unused_label: diag(95053, ts.DiagnosticCategory.Message, "Remove_unused_label_95053", "Remove unused label"), Remove_all_unused_labels: diag(95054, ts.DiagnosticCategory.Message, "Remove_all_unused_labels_95054", "Remove all unused labels"), Convert_0_to_mapped_object_type: diag(95055, ts.DiagnosticCategory.Message, "Convert_0_to_mapped_object_type_95055", "Convert '{0}' to mapped object type"), Convert_namespace_import_to_named_imports: diag(95056, ts.DiagnosticCategory.Message, "Convert_namespace_import_to_named_imports_95056", "Convert namespace import to named imports"), Convert_named_imports_to_namespace_import: diag(95057, ts.DiagnosticCategory.Message, "Convert_named_imports_to_namespace_import_95057", "Convert named imports to namespace import"), Add_or_remove_braces_in_an_arrow_function: diag(95058, ts.DiagnosticCategory.Message, "Add_or_remove_braces_in_an_arrow_function_95058", "Add or remove braces in an arrow function"), Add_braces_to_arrow_function: diag(95059, ts.DiagnosticCategory.Message, "Add_braces_to_arrow_function_95059", "Add braces to arrow function"), Remove_braces_from_arrow_function: diag(95060, ts.DiagnosticCategory.Message, "Remove_braces_from_arrow_function_95060", "Remove braces from arrow function"), }; })(ts || (ts = {})); var ts; (function (ts) { function tokenIsIdentifierOrKeyword(token) { return token >= 71; } ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword; function tokenIsIdentifierOrKeywordOrGreaterThan(token) { return token === 29 || tokenIsIdentifierOrKeyword(token); } ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan; var textToToken = ts.createMapFromTemplate({ "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, }); 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,]; 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) { if (code < map[0]) { return false; } var lo = 0; var hi = map.length; var mid; while (lo + 1 < hi) { mid = lo + (hi - lo) / 2; mid -= mid % 2; if (map[mid] <= code && code <= map[mid + 1]) { return true; } if (code < map[mid]) { hi = mid; } else { lo = mid + 2; } } return false; } function isUnicodeIdentifierStart(code, languageVersion) { return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) : lookupInUnicodeMap(code, unicodeES3IdentifierStart); } ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart; function isUnicodeIdentifierPart(code, languageVersion) { return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierPart) : lookupInUnicodeMap(code, unicodeES3IdentifierPart); } function makeReverseMap(source) { var result = []; source.forEach(function (value, name) { result[value] = name; }); return result; } var tokenStrings = makeReverseMap(textToToken); function tokenToString(t) { return tokenStrings[t]; } ts.tokenToString = tokenToString; function stringToToken(s) { return textToToken.get(s); } ts.stringToToken = stringToToken; function computeLineStarts(text) { var result = new Array(); var pos = 0; var lineStart = 0; while (pos < text.length) { var ch = text.charCodeAt(pos); pos++; switch (ch) { case 13: if (text.charCodeAt(pos) === 10) { pos++; } case 10: result.push(lineStart); lineStart = pos; break; default: if (ch > 127 && isLineBreak(ch)) { result.push(lineStart); lineStart = pos; } break; } } result.push(lineStart); return result; } ts.computeLineStarts = computeLineStarts; function getPositionOfLineAndCharacter(sourceFile, line, character) { return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text); } ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter; 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")); } var res = lineStarts[line] + character; if (line < lineStarts.length - 1) { ts.Debug.assert(res < lineStarts[line + 1]); } else if (debugText !== undefined) { ts.Debug.assert(res <= debugText.length); } return res; } ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter; function getLineStarts(sourceFile) { return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); } ts.getLineStarts = getLineStarts; function computeLineAndCharacterOfPosition(lineStarts, position) { var lineNumber = ts.binarySearch(lineStarts, position, ts.identity, ts.compareValues); if (lineNumber < 0) { lineNumber = ~lineNumber - 1; ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file"); } return { line: lineNumber, character: position - lineStarts[lineNumber] }; } ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition; function getLineAndCharacterOfPosition(sourceFile, position) { return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); } ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; function isWhiteSpaceLike(ch) { return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); } ts.isWhiteSpaceLike = isWhiteSpaceLike; function isWhiteSpaceSingleLine(ch) { 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) { return ch === 10 || ch === 13 || ch === 8232 || ch === 8233; } ts.isLineBreak = isLineBreak; function isDigit(ch) { return ch >= 48 && ch <= 57; } function isOctalDigit(ch) { return ch >= 48 && ch <= 55; } ts.isOctalDigit = isOctalDigit; function couldStartTrivia(text, pos) { var ch = text.charCodeAt(pos); switch (ch) { 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: return pos === 0; default: return ch > 127; } } ts.couldStartTrivia = couldStartTrivia; function skipTrivia(text, pos, stopAfterLineBreak, stopAtComments) { if (stopAtComments === void 0) { stopAtComments = false; } if (ts.positionIsSynthesized(pos)) { return pos; } while (true) { var ch = text.charCodeAt(pos); switch (ch) { case 13: if (text.charCodeAt(pos + 1) === 10) { pos++; } case 10: pos++; if (stopAfterLineBreak) { return pos; } continue; case 9: case 11: case 12: case 32: pos++; continue; case 47: if (stopAtComments) { break; } if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { break; } pos++; } continue; } if (text.charCodeAt(pos + 1) === 42) { pos += 2; while (pos < text.length) { if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } pos++; } continue; } break; case 60: case 124: case 61: case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos); continue; } break; case 35: if (pos === 0 && isShebangTrivia(text, pos)) { pos = scanShebangTrivia(text, pos); continue; } break; default: if (ch > 127 && (isWhiteSpaceLike(ch))) { pos++; continue; } break; } return pos; } } ts.skipTrivia = skipTrivia; var mergeConflictMarkerLength = "<<<<<<<".length; function isConflictMarkerTrivia(text, pos) { ts.Debug.assert(pos >= 0); if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { var ch = text.charCodeAt(pos); if ((pos + mergeConflictMarkerLength) < text.length) { for (var i = 0; i < mergeConflictMarkerLength; i++) { if (text.charCodeAt(pos + i) !== ch) { return false; } } return ch === 61 || text.charCodeAt(pos + mergeConflictMarkerLength) === 32; } } return false; } function scanConflictMarkerTrivia(text, pos, error) { if (error) { error(ts.Diagnostics.Merge_conflict_marker_encountered, pos, mergeConflictMarkerLength); } var ch = text.charCodeAt(pos); var len = text.length; if (ch === 60 || ch === 62) { while (pos < len && !isLineBreak(text.charCodeAt(pos))) { pos++; } } else { ts.Debug.assert(ch === 124 || ch === 61); while (pos < len) { var currentChar = text.charCodeAt(pos); if ((currentChar === 61 || currentChar === 62) && currentChar !== ch && isConflictMarkerTrivia(text, pos)) { break; } pos++; } } return pos; } var shebangTriviaRegex = /^#!.*/; function isShebangTrivia(text, pos) { ts.Debug.assert(pos === 0); return shebangTriviaRegex.test(text); } function scanShebangTrivia(text, pos) { var shebang = shebangTriviaRegex.exec(text)[0]; pos = pos + shebang.length; return pos; } function iterateCommentRanges(reduce, text, pos, trailing, cb, state, initial) { var pendingPos; var pendingEnd; var pendingKind; var pendingHasTrailingNewLine; var hasPendingCommentRange = false; var collecting = trailing || pos === 0; var accumulator = initial; scan: while (pos >= 0 && pos < text.length) { var ch = text.charCodeAt(pos); switch (ch) { case 13: if (text.charCodeAt(pos + 1) === 10) { pos++; } case 10: pos++; if (trailing) { break scan; } collecting = true; if (hasPendingCommentRange) { pendingHasTrailingNewLine = true; } continue; case 9: case 11: case 12: case 32: pos++; continue; case 47: var nextChar = text.charCodeAt(pos + 1); var hasTrailingNewLine = false; if (nextChar === 47 || nextChar === 42) { var kind = nextChar === 47 ? 2 : 3; var startPos = pos; pos += 2; if (nextChar === 47) { while (pos < text.length) { if (isLineBreak(text.charCodeAt(pos))) { hasTrailingNewLine = true; break; } pos++; } } else { while (pos < text.length) { if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { pos += 2; break; } pos++; } } if (collecting) { if (hasPendingCommentRange) { accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); if (!reduce && accumulator) { return accumulator; } } pendingPos = startPos; pendingEnd = pos; pendingKind = kind; pendingHasTrailingNewLine = hasTrailingNewLine; hasPendingCommentRange = true; } continue; } break scan; default: if (ch > 127 && (isWhiteSpaceLike(ch))) { if (hasPendingCommentRange && isLineBreak(ch)) { pendingHasTrailingNewLine = true; } pos++; continue; } break scan; } } if (hasPendingCommentRange) { accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); } return accumulator; } function forEachLeadingCommentRange(text, pos, cb, state) { return iterateCommentRanges(false, text, pos, false, cb, state); } ts.forEachLeadingCommentRange = forEachLeadingCommentRange; function forEachTrailingCommentRange(text, pos, cb, state) { return iterateCommentRanges(false, text, pos, true, cb, state); } ts.forEachTrailingCommentRange = forEachTrailingCommentRange; function reduceEachLeadingCommentRange(text, pos, cb, state, initial) { return iterateCommentRanges(true, text, pos, false, cb, state, initial); } ts.reduceEachLeadingCommentRange = reduceEachLeadingCommentRange; function reduceEachTrailingCommentRange(text, pos, cb, state, initial) { return iterateCommentRanges(true, text, pos, true, cb, state, initial); } ts.reduceEachTrailingCommentRange = reduceEachTrailingCommentRange; function appendCommentRange(pos, end, kind, hasTrailingNewLine, _state, comments) { if (!comments) { comments = []; } comments.push({ kind: kind, pos: pos, end: end, hasTrailingNewLine: hasTrailingNewLine }); return comments; } function getLeadingCommentRanges(text, pos) { return reduceEachLeadingCommentRange(text, pos, appendCommentRange, undefined, undefined); } ts.getLeadingCommentRanges = getLeadingCommentRanges; function getTrailingCommentRanges(text, pos) { return reduceEachTrailingCommentRange(text, pos, appendCommentRange, undefined, undefined); } ts.getTrailingCommentRanges = getTrailingCommentRanges; function getShebang(text) { var match = shebangTriviaRegex.exec(text); if (match) { return match[0]; } } ts.getShebang = getShebang; function isIdentifierStart(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 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); } ts.isIdentifierPart = isIdentifierPart; function isIdentifierText(name, languageVersion) { if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) { return false; } for (var i = 1; i < name.length; i++) { if (!isIdentifierPart(name.charCodeAt(i), languageVersion)) { return false; } } return true; } ts.isIdentifierText = isIdentifierText; function createScanner(languageVersion, skipTrivia, languageVariant, textInitial, onError, start, length) { if (languageVariant === void 0) { languageVariant = 0; } var text = textInitial; var pos; var end; var startPos; var tokenPos; var token; var tokenValue; var tokenFlags; setText(text, start, length); return { getStartPos: function () { return startPos; }, getTextPos: function () { return pos; }, getToken: function () { return token; }, getTokenPos: function () { return tokenPos; }, getTokenText: function () { return text.substring(tokenPos, pos); }, getTokenValue: function () { return tokenValue; }, 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, reScanTemplateToken: reScanTemplateToken, scanJsxIdentifier: scanJsxIdentifier, scanJsxAttributeValue: scanJsxAttributeValue, reScanJsxToken: reScanJsxToken, scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, setOnError: setOnError, setTextPos: setTextPos, tryScan: tryScan, lookAhead: lookAhead, scanRange: scanRange, }; function error(message, errPos, length) { if (errPos === void 0) { errPos = pos; } if (onError) { var oldPos = pos; pos = errPos; onError(message, length || 0); pos = oldPos; } } function scanNumberFragment() { var start = pos; var allowSeparator = false; var isPreviousTokenSeparator = false; var result = ""; while (true) { var ch = text.charCodeAt(pos); if (ch === 95) { tokenFlags |= 512; if (allowSeparator) { allowSeparator = false; isPreviousTokenSeparator = true; result += text.substring(start, pos); } else if (isPreviousTokenSeparator) { error(ts.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); } else { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); } pos++; start = pos; continue; } if (isDigit(ch)) { allowSeparator = true; isPreviousTokenSeparator = false; pos++; continue; } break; } if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); } return result + text.substring(start, pos); } function scanNumber() { var start = pos; var mainFragment = scanNumberFragment(); var decimalFragment; var scientificFragment; if (text.charCodeAt(pos) === 46) { pos++; decimalFragment = scanNumberFragment(); } var end = pos; if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) { pos++; tokenFlags |= 16; if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) pos++; var preNumericPart = pos; var finalFragment = scanNumberFragment(); if (!finalFragment) { error(ts.Diagnostics.Digit_expected); } else { scientificFragment = text.substring(end, preNumericPart) + finalFragment; end = pos; } } if (tokenFlags & 512) { var result = mainFragment; if (decimalFragment) { result += "." + decimalFragment; } if (scientificFragment) { result += scientificFragment; } return "" + +result; } else { return "" + +(text.substring(start, end)); } } function scanOctalDigits() { var start = pos; while (isOctalDigit(text.charCodeAt(pos))) { pos++; } return +(text.substring(start, pos)); } function scanExactNumberOfHexDigits(count, canHaveSeparators) { return scanHexDigits(count, false, canHaveSeparators); } function scanMinimumNumberOfHexDigits(count, canHaveSeparators) { return scanHexDigits(count, true, canHaveSeparators); } function scanHexDigits(minCount, scanAsManyAsPossible, canHaveSeparators) { var digits = 0; var value = 0; var allowSeparator = false; var isPreviousTokenSeparator = false; while (digits < minCount || scanAsManyAsPossible) { var ch = text.charCodeAt(pos); if (canHaveSeparators && ch === 95) { tokenFlags |= 512; if (allowSeparator) { allowSeparator = false; isPreviousTokenSeparator = true; } else if (isPreviousTokenSeparator) { error(ts.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); } else { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); } pos++; continue; } allowSeparator = canHaveSeparators; if (ch >= 48 && ch <= 57) { value = value * 16 + ch - 48; } else if (ch >= 65 && ch <= 70) { value = value * 16 + ch - 65 + 10; } else if (ch >= 97 && ch <= 102) { value = value * 16 + ch - 97 + 10; } else { break; } pos++; digits++; isPreviousTokenSeparator = false; } if (digits < minCount) { value = -1; } if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); } return value; } function scanString(jsxAttributeString) { if (jsxAttributeString === void 0) { jsxAttributeString = false; } var quote = text.charCodeAt(pos); pos++; var result = ""; var start = pos; while (true) { if (pos >= end) { result += text.substring(start, pos); tokenFlags |= 4; error(ts.Diagnostics.Unterminated_string_literal); break; } var ch = text.charCodeAt(pos); if (ch === quote) { result += text.substring(start, pos); pos++; break; } if (ch === 92 && !jsxAttributeString) { result += text.substring(start, pos); result += scanEscapeSequence(); start = pos; continue; } if (isLineBreak(ch) && !jsxAttributeString) { result += text.substring(start, pos); tokenFlags |= 4; error(ts.Diagnostics.Unterminated_string_literal); break; } pos++; } return result; } function scanTemplateAndSetTokenValue() { var startedWithBacktick = text.charCodeAt(pos) === 96; pos++; var start = pos; var contents = ""; var resultingToken; while (true) { if (pos >= end) { contents += text.substring(start, pos); tokenFlags |= 4; error(ts.Diagnostics.Unterminated_template_literal); resultingToken = startedWithBacktick ? 13 : 16; break; } var currChar = text.charCodeAt(pos); if (currChar === 96) { contents += text.substring(start, pos); pos++; resultingToken = startedWithBacktick ? 13 : 16; break; } if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) { contents += text.substring(start, pos); pos += 2; resultingToken = startedWithBacktick ? 14 : 15; break; } if (currChar === 92) { contents += text.substring(start, pos); contents += scanEscapeSequence(); start = pos; continue; } if (currChar === 13) { contents += text.substring(start, pos); pos++; if (pos < end && text.charCodeAt(pos) === 10) { pos++; } contents += "\n"; start = pos; continue; } pos++; } ts.Debug.assert(resultingToken !== undefined); tokenValue = contents; return resultingToken; } function scanEscapeSequence() { pos++; if (pos >= end) { error(ts.Diagnostics.Unexpected_end_of_text); return ""; } var ch = text.charCodeAt(pos); pos++; switch (ch) { case 48: return "\0"; case 98: return "\b"; case 116: return "\t"; case 110: return "\n"; case 118: return "\v"; case 102: return "\f"; case 114: return "\r"; case 39: return "\'"; case 34: return "\""; case 117: if (pos < end && text.charCodeAt(pos) === 123) { tokenFlags |= 8; pos++; return scanExtendedUnicodeEscape(); } return scanHexadecimalEscape(4); case 120: return scanHexadecimalEscape(2); case 13: if (pos < end && text.charCodeAt(pos) === 10) { pos++; } case 10: case 8232: case 8233: return ""; default: return String.fromCharCode(ch); } } function scanHexadecimalEscape(numDigits) { var escapedValue = scanExactNumberOfHexDigits(numDigits, false); if (escapedValue >= 0) { return String.fromCharCode(escapedValue); } else { error(ts.Diagnostics.Hexadecimal_digit_expected); return ""; } } function scanExtendedUnicodeEscape() { var escapedValue = scanMinimumNumberOfHexDigits(1, false); var isInvalidExtendedEscape = false; if (escapedValue < 0) { error(ts.Diagnostics.Hexadecimal_digit_expected); isInvalidExtendedEscape = true; } else if (escapedValue > 0x10FFFF) { error(ts.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive); isInvalidExtendedEscape = true; } if (pos >= end) { error(ts.Diagnostics.Unexpected_end_of_text); isInvalidExtendedEscape = true; } else if (text.charCodeAt(pos) === 125) { pos++; } else { error(ts.Diagnostics.Unterminated_Unicode_escape_sequence); isInvalidExtendedEscape = true; } if (isInvalidExtendedEscape) { return ""; } return utf16EncodeAsString(escapedValue); } function utf16EncodeAsString(codePoint) { ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF); if (codePoint <= 65535) { return String.fromCharCode(codePoint); } var codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800; var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00; return String.fromCharCode(codeUnit1, codeUnit2); } function peekUnicodeEscape() { if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) { var start_1 = pos; pos += 2; var value = scanExactNumberOfHexDigits(4, false); pos = start_1; return value; } return -1; } function scanIdentifierParts() { var result = ""; var start = pos; while (pos < end) { var ch = text.charCodeAt(pos); if (isIdentifierPart(ch, languageVersion)) { pos++; } else if (ch === 92) { ch = peekUnicodeEscape(); if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { break; } result += text.substring(start, pos); result += String.fromCharCode(ch); pos += 6; start = pos; } else { break; } } result += text.substring(start, pos); return result; } function getIdentifierToken() { var len = tokenValue.length; if (len >= 2 && len <= 11) { var ch = tokenValue.charCodeAt(0); if (ch >= 97 && ch <= 122) { token = textToToken.get(tokenValue); if (token !== undefined) { return token; } } } return token = 71; } function scanBinaryOrOctalDigits(base) { ts.Debug.assert(base === 2 || base === 8, "Expected either base 2 or base 8"); var value = 0; var numberOfDigits = 0; var separatorAllowed = false; var isPreviousTokenSeparator = false; while (true) { var ch = text.charCodeAt(pos); if (ch === 95) { tokenFlags |= 512; if (separatorAllowed) { separatorAllowed = false; isPreviousTokenSeparator = true; } else if (isPreviousTokenSeparator) { error(ts.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); } else { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); } pos++; continue; } separatorAllowed = true; var valueOfCh = ch - 48; if (!isDigit(ch) || valueOfCh >= base) { break; } value = value * base + valueOfCh; pos++; numberOfDigits++; isPreviousTokenSeparator = false; } if (numberOfDigits === 0) { return -1; } if (text.charCodeAt(pos - 1) === 95) { error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); return value; } return value; } function scan() { startPos = pos; tokenFlags = 0; while (true) { tokenPos = pos; if (pos >= end) { return token = 1; } var ch = text.charCodeAt(pos); if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) { pos = scanShebangTrivia(text, pos); if (skipTrivia) { continue; } else { return token = 6; } } switch (ch) { case 10: case 13: tokenFlags |= 1; if (skipTrivia) { pos++; continue; } else { if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) { pos += 2; } else { pos++; } return token = 4; } case 9: case 11: case 12: case 32: if (skipTrivia) { pos++; continue; } else { while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5; } case 33: if (text.charCodeAt(pos + 1) === 61) { if (text.charCodeAt(pos + 2) === 61) { return pos += 3, token = 35; } return pos += 2, token = 33; } pos++; return token = 51; case 34: case 39: tokenValue = scanString(); return token = 9; case 96: return token = scanTemplateAndSetTokenValue(); case 37: if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 64; } pos++; return token = 42; case 38: if (text.charCodeAt(pos + 1) === 38) { return pos += 2, token = 53; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 68; } pos++; return token = 48; case 40: pos++; return token = 19; case 41: pos++; return token = 20; case 42: if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 61; } if (text.charCodeAt(pos + 1) === 42) { if (text.charCodeAt(pos + 2) === 61) { return pos += 3, token = 62; } return pos += 2, token = 40; } pos++; return token = 39; case 43: if (text.charCodeAt(pos + 1) === 43) { return pos += 2, token = 43; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 59; } pos++; return token = 37; case 44: pos++; return token = 26; case 45: if (text.charCodeAt(pos + 1) === 45) { return pos += 2, token = 44; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 60; } pos++; return token = 38; case 46: if (isDigit(text.charCodeAt(pos + 1))) { tokenValue = scanNumber(); return token = 8; } if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) { return pos += 3, token = 24; } pos++; return token = 23; case 47: if (text.charCodeAt(pos + 1) === 47) { pos += 2; while (pos < end) { if (isLineBreak(text.charCodeAt(pos))) { break; } pos++; } if (skipTrivia) { continue; } else { return token = 2; } } if (text.charCodeAt(pos + 1) === 42) { pos += 2; 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 && text.charCodeAt(pos + 1) === 47) { pos += 2; commentClosed = true; break; } if (isLineBreak(ch_1)) { tokenFlags |= 1; } pos++; } if (!commentClosed) { error(ts.Diagnostics.Asterisk_Slash_expected); } if (skipTrivia) { continue; } else { if (!commentClosed) { tokenFlags |= 4; } return token = 3; } } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 63; } pos++; 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, true); if (value < 0) { error(ts.Diagnostics.Hexadecimal_digit_expected); value = 0; } tokenValue = "" + value; tokenFlags |= 64; return token = 8; } else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) { pos += 2; var value = scanBinaryOrOctalDigits(2); if (value < 0) { error(ts.Diagnostics.Binary_digit_expected); value = 0; } tokenValue = "" + value; tokenFlags |= 128; return token = 8; } else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) { pos += 2; var value = scanBinaryOrOctalDigits(8); if (value < 0) { error(ts.Diagnostics.Octal_digit_expected); value = 0; } tokenValue = "" + value; tokenFlags |= 256; return token = 8; } if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) { tokenValue = "" + scanOctalDigits(); tokenFlags |= 32; return token = 8; } case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: tokenValue = scanNumber(); return token = 8; case 58: pos++; return token = 56; case 59: pos++; return token = 25; case 60: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { return token = 7; } } if (text.charCodeAt(pos + 1) === 60) { if (text.charCodeAt(pos + 2) === 61) { return pos += 3, token = 65; } return pos += 2, token = 45; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 30; } if (languageVariant === 1 && text.charCodeAt(pos + 1) === 47 && text.charCodeAt(pos + 2) !== 42) { return pos += 2, token = 28; } pos++; return token = 27; case 61: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { return token = 7; } } if (text.charCodeAt(pos + 1) === 61) { if (text.charCodeAt(pos + 2) === 61) { return pos += 3, token = 34; } return pos += 2, token = 32; } if (text.charCodeAt(pos + 1) === 62) { return pos += 2, token = 36; } pos++; return token = 58; case 62: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { return token = 7; } } pos++; return token = 29; case 63: pos++; return token = 55; case 91: pos++; return token = 21; case 93: pos++; return token = 22; case 94: if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 70; } pos++; return token = 50; case 123: pos++; return token = 17; case 124: if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); if (skipTrivia) { continue; } else { return token = 7; } } if (text.charCodeAt(pos + 1) === 124) { return pos += 2, token = 54; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 69; } pos++; return token = 49; case 125: pos++; return token = 18; case 126: pos++; return token = 52; case 64: pos++; return token = 57; case 92: var cookedChar = peekUnicodeEscape(); if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { pos += 6; tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); return token = getIdentifierToken(); } error(ts.Diagnostics.Invalid_character); pos++; 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) { tokenValue += scanIdentifierParts(); } return token = getIdentifierToken(); } else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } else if (isLineBreak(ch)) { tokenFlags |= 1; pos++; continue; } error(ts.Diagnostics.Invalid_character); pos++; return token = 0; } } } function reScanGreaterToken() { 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; } if (text.charCodeAt(pos + 1) === 61) { return pos += 2, token = 66; } pos++; return token = 46; } if (text.charCodeAt(pos) === 61) { pos++; return token = 31; } } return token; } function reScanSlashToken() { if (token === 41 || token === 63) { var p = tokenPos + 1; var inEscape = false; var inCharacterClass = false; while (true) { if (p >= end) { tokenFlags |= 4; error(ts.Diagnostics.Unterminated_regular_expression_literal); break; } var ch = text.charCodeAt(p); if (isLineBreak(ch)) { tokenFlags |= 4; error(ts.Diagnostics.Unterminated_regular_expression_literal); break; } if (inEscape) { inEscape = false; } else if (ch === 47 && !inCharacterClass) { p++; break; } else if (ch === 91) { inCharacterClass = true; } else if (ch === 92) { inEscape = true; } else if (ch === 93) { inCharacterClass = false; } p++; } while (p < end && isIdentifierPart(text.charCodeAt(p), languageVersion)) { p++; } pos = p; tokenValue = text.substring(tokenPos, pos); token = 12; } return token; } function reScanTemplateToken() { ts.Debug.assert(token === 18, "'reScanTemplateToken' should only be called on a '}'"); pos = tokenPos; return token = scanTemplateAndSetTokenValue(); } function reScanJsxToken() { pos = tokenPos = startPos; return token = scanJsxToken(); } function scanJsxToken() { startPos = tokenPos = pos; if (pos >= end) { return token = 1; } var char = text.charCodeAt(pos); if (char === 60) { if (text.charCodeAt(pos + 1) === 47) { pos += 2; return token = 28; } pos++; return token = 27; } if (char === 123) { pos++; return token = 17; } var firstNonWhitespace = 0; while (pos < end) { char = text.charCodeAt(pos); if (char === 123) { break; } if (char === 60) { if (isConflictMarkerTrivia(text, pos)) { pos = scanConflictMarkerTrivia(text, pos, error); return token = 7; } break; } if (isLineBreak(char) && firstNonWhitespace === 0) { firstNonWhitespace = -1; } else if (!isWhiteSpaceLike(char)) { firstNonWhitespace = pos; } pos++; } return firstNonWhitespace === -1 ? 11 : 10; } function scanJsxIdentifier() { if (tokenIsIdentifierOrKeyword(token)) { var firstCharPosition = pos; while (pos < end) { var ch = text.charCodeAt(pos); if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { pos++; } else { break; } } tokenValue += text.substring(firstCharPosition, pos); } return token; } function scanJsxAttributeValue() { startPos = pos; switch (text.charCodeAt(pos)) { case 34: case 39: tokenValue = scanString(true); return token = 9; default: return scan(); } } function scanJSDocToken() { startPos = tokenPos = pos; if (pos >= end) { return token = 1; } var ch = text.charCodeAt(pos); pos++; switch (ch) { case 9: case 11: case 12: case 32: while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } 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; } if (isIdentifierStart(ch, 6)) { while (isIdentifierPart(text.charCodeAt(pos), 6) && pos < end) { pos++; } tokenValue = text.substring(tokenPos, pos); return token = 71; } else { return token = 0; } } function speculationHelper(callback, isLookahead) { var savePos = pos; var saveStartPos = startPos; var saveTokenPos = tokenPos; var saveToken = token; var saveTokenValue = tokenValue; var saveTokenFlags = tokenFlags; var result = callback(); if (!result || isLookahead) { pos = savePos; startPos = saveStartPos; tokenPos = saveTokenPos; token = saveToken; tokenValue = saveTokenValue; tokenFlags = saveTokenFlags; } return result; } function scanRange(start, length, callback) { var saveEnd = end; var savePos = pos; var saveStartPos = startPos; var saveTokenPos = tokenPos; var saveToken = token; var saveTokenValue = tokenValue; var saveTokenFlags = tokenFlags; setText(text, start, length); var result = callback(); end = saveEnd; pos = savePos; startPos = saveStartPos; tokenPos = saveTokenPos; token = saveToken; tokenValue = saveTokenValue; tokenFlags = saveTokenFlags; return result; } function lookAhead(callback) { return speculationHelper(callback, true); } function tryScan(callback) { return speculationHelper(callback, false); } function getText() { return text; } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; setTextPos(start || 0); } function setOnError(errorCallback) { onError = errorCallback; } function setScriptTarget(scriptTarget) { languageVersion = scriptTarget; } function setLanguageVariant(variant) { languageVariant = variant; } function setTextPos(textPos) { ts.Debug.assert(textPos >= 0); pos = textPos; startPos = textPos; tokenPos = textPos; token = 0; tokenValue = undefined; tokenFlags = 0; } } ts.createScanner = createScanner; })(ts || (ts = {})); var ts; (function (ts) { function isExternalModuleNameRelative(moduleName) { return ts.pathIsRelative(moduleName) || ts.isRootedDiskPath(moduleName); } ts.isExternalModuleNameRelative = isExternalModuleNameRelative; function sortAndDeduplicateDiagnostics(diagnostics) { return ts.sortAndDeduplicate(diagnostics, ts.compareDiagnostics); } ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; })(ts || (ts = {})); (function (ts) { ts.emptyArray = []; ts.resolvingEmptyArray = []; ts.emptyMap = ts.createMap(); ts.emptyUnderscoreEscapedMap = ts.emptyMap; ts.externalHelpersModuleNameText = "tslib"; function getDeclarationOfKind(symbol, kind) { var declarations = symbol.declarations; if (declarations) { for (var _i = 0, declarations_1 = declarations; _i < declarations_1.length; _i++) { var declaration = declarations_1[_i]; if (declaration.kind === kind) { return declaration; } } } return undefined; } ts.getDeclarationOfKind = getDeclarationOfKind; function createUnderscoreEscapedMap() { return new ts.MapCtr(); } ts.createUnderscoreEscapedMap = createUnderscoreEscapedMap; function hasEntries(map) { return !!map && !!map.size; } ts.hasEntries = hasEntries; function createSymbolTable(symbols) { var result = ts.createMap(); if (symbols) { for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) { var symbol = symbols_1[_i]; result.set(symbol.escapedName, symbol); } } return result; } ts.createSymbolTable = createSymbolTable; var stringWriter = createSingleLineStringWriter(); function createSingleLineStringWriter() { var str = ""; var writeText = function (text) { return str += text; }; return { getText: function () { return str; }, write: writeText, rawWrite: writeText, writeTextOfNode: writeText, writeKeyword: writeText, writeOperator: writeText, writePunctuation: writeText, writeSpace: writeText, writeStringLiteral: writeText, writeLiteral: writeText, writeParameter: writeText, writeProperty: writeText, writeSymbol: writeText, getTextPos: function () { return str.length; }, getLine: function () { return 0; }, getColumn: function () { return 0; }, getIndent: function () { return 0; }, isAtStartOfLine: function () { return false; }, writeLine: function () { return str += " "; }, increaseIndent: ts.noop, decreaseIndent: ts.noop, clear: function () { return str = ""; }, trackSymbol: ts.noop, reportInaccessibleThisError: ts.noop, reportInaccessibleUniqueSymbolError: ts.noop, reportPrivateInBaseOfClassExpression: ts.noop, }; } function toPath(fileName, basePath, getCanonicalFileName) { var nonCanonicalizedPath = ts.isRootedDiskPath(fileName) ? ts.normalizePath(fileName) : ts.getNormalizedAbsolutePath(fileName, basePath); return getCanonicalFileName(nonCanonicalizedPath); } ts.toPath = toPath; function changesAffectModuleResolution(oldOptions, newOptions) { return !oldOptions || (oldOptions.module !== newOptions.module) || (oldOptions.moduleResolution !== newOptions.moduleResolution) || (oldOptions.noResolve !== newOptions.noResolve) || (oldOptions.target !== newOptions.target) || (oldOptions.noLib !== newOptions.noLib) || (oldOptions.jsx !== newOptions.jsx) || (oldOptions.allowJs !== newOptions.allowJs) || (oldOptions.rootDir !== newOptions.rootDir) || (oldOptions.configFilePath !== newOptions.configFilePath) || (oldOptions.baseUrl !== newOptions.baseUrl) || (oldOptions.maxNodeModuleJsDepth !== newOptions.maxNodeModuleJsDepth) || !ts.arrayIsEqualTo(oldOptions.lib, newOptions.lib) || !ts.arrayIsEqualTo(oldOptions.typeRoots, newOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, newOptions.rootDirs) || !ts.equalOwnProperties(oldOptions.paths, newOptions.paths); } ts.changesAffectModuleResolution = changesAffectModuleResolution; function findAncestor(node, callback) { while (node) { var result = callback(node); if (result === "quit") { return undefined; } else if (result) { return node; } node = node.parent; } return undefined; } ts.findAncestor = findAncestor; function forEachEntry(map, callback) { var _a; var iterator = map.entries(); for (var _b = iterator.next(), pair = _b.value, done = _b.done; !done; _a = iterator.next(), pair = _a.value, done = _a.done, _a) { var key = pair[0], value = pair[1]; var result = callback(value, key); if (result) { return result; } } return undefined; } ts.forEachEntry = forEachEntry; function forEachKey(map, callback) { var _a; var iterator = map.keys(); for (var _b = iterator.next(), key = _b.value, done = _b.done; !done; _a = iterator.next(), key = _a.value, done = _a.done, _a) { var result = callback(key); if (result) { return result; } } return undefined; } ts.forEachKey = forEachKey; function copyEntries(source, target) { source.forEach(function (value, key) { target.set(key, value); }); } ts.copyEntries = copyEntries; function arrayToSet(array, makeKey) { return ts.arrayToMap(array, makeKey || (function (s) { return s; }), function () { return true; }); } ts.arrayToSet = arrayToSet; function cloneMap(map) { var clone = ts.createMap(); copyEntries(map, clone); return clone; } ts.cloneMap = cloneMap; function usingSingleLineStringWriter(action) { var oldString = stringWriter.getText(); try { action(stringWriter); return stringWriter.getText(); } finally { stringWriter.clear(); stringWriter.writeKeyword(oldString); } } ts.usingSingleLineStringWriter = usingSingleLineStringWriter; function getFullWidth(node) { return node.end - node.pos; } ts.getFullWidth = getFullWidth; function getResolvedModule(sourceFile, moduleNameText) { return sourceFile && sourceFile.resolvedModules && sourceFile.resolvedModules.get(moduleNameText); } ts.getResolvedModule = getResolvedModule; function setResolvedModule(sourceFile, moduleNameText, resolvedModule) { if (!sourceFile.resolvedModules) { sourceFile.resolvedModules = ts.createMap(); } sourceFile.resolvedModules.set(moduleNameText, resolvedModule); } ts.setResolvedModule = setResolvedModule; function setResolvedTypeReferenceDirective(sourceFile, typeReferenceDirectiveName, resolvedTypeReferenceDirective) { if (!sourceFile.resolvedTypeReferenceDirectiveNames) { sourceFile.resolvedTypeReferenceDirectiveNames = ts.createMap(); } sourceFile.resolvedTypeReferenceDirectiveNames.set(typeReferenceDirectiveName, resolvedTypeReferenceDirective); } ts.setResolvedTypeReferenceDirective = setResolvedTypeReferenceDirective; function moduleResolutionIsEqualTo(oldResolution, newResolution) { return oldResolution.isExternalLibraryImport === newResolution.isExternalLibraryImport && oldResolution.extension === newResolution.extension && oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.originalPath === newResolution.originalPath && packageIdIsEqual(oldResolution.packageId, newResolution.packageId); } ts.moduleResolutionIsEqualTo = moduleResolutionIsEqualTo; function packageIdIsEqual(a, b) { return a === b || !!a && !!b && a.name === b.name && a.subModuleName === b.subModuleName && a.version === b.version; } function packageIdToString(_a) { var name = _a.name, subModuleName = _a.subModuleName, version = _a.version; var fullName = subModuleName ? name + "/" + subModuleName : name; return fullName + "@" + version; } ts.packageIdToString = packageIdToString; function typeDirectiveIsEqualTo(oldResolution, newResolution) { return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.primary === newResolution.primary; } ts.typeDirectiveIsEqualTo = typeDirectiveIsEqualTo; function hasChangesInResolutions(names, newResolutions, oldResolutions, comparer) { ts.Debug.assert(names.length === newResolutions.length); for (var i = 0; i < names.length; i++) { var newResolution = newResolutions[i]; var oldResolution = oldResolutions && oldResolutions.get(names[i]); var changed = oldResolution ? !newResolution || !comparer(oldResolution, newResolution) : newResolution; if (changed) { return true; } } return false; } ts.hasChangesInResolutions = hasChangesInResolutions; function containsParseError(node) { aggregateChildData(node); return (node.flags & 131072) !== 0; } ts.containsParseError = containsParseError; function aggregateChildData(node) { if (!(node.flags & 262144)) { var thisNodeOrAnySubNodesHasError = ((node.flags & 32768) !== 0) || ts.forEachChild(node, containsParseError); if (thisNodeOrAnySubNodesHasError) { node.flags |= 131072; } node.flags |= 262144; } } function getSourceFileOfNode(node) { while (node && node.kind !== 274) { node = node.parent; } return node; } ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { case 213: case 241: case 220: case 221: case 222: return true; } return false; } ts.isStatementWithLocals = isStatementWithLocals; function getStartPositionOfLine(line, sourceFile) { ts.Debug.assert(line >= 0); return ts.getLineStarts(sourceFile)[line]; } ts.getStartPositionOfLine = getStartPositionOfLine; function nodePosToString(node) { var file = getSourceFileOfNode(node); var loc = ts.getLineAndCharacterOfPosition(file, node.pos); return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")"; } ts.nodePosToString = nodePosToString; function getEndLinePosition(line, sourceFile) { ts.Debug.assert(line >= 0); var lineStarts = ts.getLineStarts(sourceFile); var lineIndex = line; var sourceText = sourceFile.text; if (lineIndex + 1 === lineStarts.length) { return sourceText.length - 1; } else { var start = lineStarts[lineIndex]; var pos = lineStarts[lineIndex + 1] - 1; ts.Debug.assert(ts.isLineBreak(sourceText.charCodeAt(pos))); while (start <= pos && ts.isLineBreak(sourceText.charCodeAt(pos))) { pos--; } return pos; } } ts.getEndLinePosition = getEndLinePosition; function isFileLevelUniqueName(sourceFile, name, hasGlobalName) { return !(hasGlobalName && hasGlobalName(name)) && !sourceFile.identifiers.has(name); } ts.isFileLevelUniqueName = isFileLevelUniqueName; function nodeIsMissing(node) { if (node === undefined) { return true; } return node.pos === node.end && node.pos >= 0 && node.kind !== 1; } ts.nodeIsMissing = nodeIsMissing; function nodeIsPresent(node) { return !nodeIsMissing(node); } ts.nodeIsPresent = nodeIsPresent; function prependStatements(to, from) { if (from === undefined || from.length === 0) return to; if (to === undefined) return from.slice(); var prologue = to.length && isPrologueDirective(to[0]) && to.shift(); to.unshift.apply(to, from); if (prologue) { to.unshift(prologue); } return to; } ts.prependStatements = prependStatements; function isRecognizedTripleSlashComment(text, commentPos, commentEnd) { if (text.charCodeAt(commentPos + 1) === 47 && commentPos + 2 < commentEnd && text.charCodeAt(commentPos + 2) === 47) { var textSubStr = text.substring(commentPos, commentEnd); return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) || textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) || textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) || textSubStr.match(defaultLibReferenceRegEx) ? true : false; } return false; } ts.isRecognizedTripleSlashComment = isRecognizedTripleSlashComment; function isPinnedComment(text, start) { return text.charCodeAt(start + 1) === 42 && text.charCodeAt(start + 2) === 33; } ts.isPinnedComment = isPinnedComment; function getTokenPosOfNode(node, sourceFile, includeJsDoc) { if (nodeIsMissing(node)) { return node.pos; } if (ts.isJSDocNode(node)) { return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, true); } if (includeJsDoc && ts.hasJSDocNodes(node)) { return getTokenPosOfNode(node.jsDoc[0]); } if (node.kind === 300 && node._children.length > 0) { return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc); } return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); } ts.getTokenPosOfNode = getTokenPosOfNode; function getNonDecoratorTokenPosOfNode(node, sourceFile) { if (nodeIsMissing(node) || !node.decorators) { return getTokenPosOfNode(node, sourceFile); } return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end); } ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode; function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia) { if (includeTrivia === void 0) { includeTrivia = false; } return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia); } ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile; function getTextOfNodeFromSourceText(sourceText, node, includeTrivia) { if (includeTrivia === void 0) { includeTrivia = false; } if (nodeIsMissing(node)) { return ""; } return sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end); } ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText; function getTextOfNode(node, includeTrivia) { if (includeTrivia === void 0) { includeTrivia = false; } return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia); } ts.getTextOfNode = getTextOfNode; function getPos(range) { return range.pos; } function indexOfNode(nodeArray, node) { return ts.binarySearch(nodeArray, node, getPos, ts.compareValues); } ts.indexOfNode = indexOfNode; function getEmitFlags(node) { var emitNode = node.emitNode; return emitNode && emitNode.flags || 0; } ts.getEmitFlags = getEmitFlags; function getLiteralText(node, sourceFile) { if (!nodeIsSynthesized(node) && node.parent && !(ts.isNumericLiteral(node) && node.numericLiteralFlags & 512)) { return getSourceTextOfNodeFromSourceFile(sourceFile, node); } var escapeText = getEmitFlags(node) & 16777216 ? escapeString : escapeNonAsciiString; switch (node.kind) { case 9: if (node.singleQuote) { return "'" + escapeText(node.text, 39) + "'"; } else { return '"' + escapeText(node.text, 34) + '"'; } 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."); } ts.getLiteralText = getLiteralText; function getTextOfConstantValue(value) { return ts.isString(value) ? '"' + escapeNonAsciiString(value) + '"' : "" + value; } ts.getTextOfConstantValue = getTextOfConstantValue; function escapeLeadingUnderscores(identifier) { return (identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier); } ts.escapeLeadingUnderscores = escapeLeadingUnderscores; function escapeIdentifier(identifier) { return identifier; } ts.escapeIdentifier = escapeIdentifier; function makeIdentifierFromModuleName(moduleName) { return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_"); } ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName; function isBlockOrCatchScoped(declaration) { return (ts.getCombinedNodeFlags(declaration) & 3) !== 0 || isCatchClauseVariableDeclarationOrBindingElement(declaration); } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isCatchClauseVariableDeclarationOrBindingElement(declaration) { var node = getRootDeclaration(declaration); return node.kind === 232 && node.parent.kind === 269; } ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement; function isAmbientModule(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; } ts.isModuleWithStringLiteralName = isModuleWithStringLiteralName; function isNonGlobalAmbientModule(node) { return ts.isModuleDeclaration(node) && ts.isStringLiteral(node.name); } ts.isNonGlobalAmbientModule = isNonGlobalAmbientModule; function isEffectiveModuleDeclaration(node) { return ts.isModuleDeclaration(node) || ts.isIdentifier(node); } ts.isEffectiveModuleDeclaration = isEffectiveModuleDeclaration; function isShorthandAmbientModuleSymbol(moduleSymbol) { return isShorthandAmbientModule(moduleSymbol.valueDeclaration); } ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol; function isShorthandAmbientModule(node) { return node && node.kind === 239 && (!node.body); } function isBlockScopedContainerTopLevel(node) { return node.kind === 274 || node.kind === 239 || ts.isFunctionLike(node); } ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel; function isGlobalScopeAugmentation(module) { return !!(module.flags & 512); } ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation; function isExternalModuleAugmentation(node) { return isAmbientModule(node) && isModuleAugmentationExternal(node); } ts.isExternalModuleAugmentation = isExternalModuleAugmentation; function isModuleAugmentationExternal(node) { switch (node.parent.kind) { case 274: return ts.isExternalModule(node.parent); case 240: return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; } ts.isModuleAugmentationExternal = isModuleAugmentationExternal; function isEffectiveExternalModule(node, compilerOptions) { return ts.isExternalModule(node) || compilerOptions.isolatedModules || ((ts.getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS) && !!node.commonJsModuleIndicator); } ts.isEffectiveExternalModule = isEffectiveExternalModule; function isBlockScope(node, parentNode) { switch (node.kind) { 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: return !ts.isFunctionLike(parentNode); } return false; } ts.isBlockScope = isBlockScope; function isDeclarationWithTypeParameters(node) { switch (node.kind) { case 158: case 159: case 153: case 160: case 163: case 164: case 284: case 235: case 205: case 236: case 237: case 297: case 234: case 154: case 155: case 156: case 157: case 192: case 193: case 292: case 298: case 288: return true; default: ts.assertTypeIsNever(node); return false; } } ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters; function isAnyImportSyntax(node) { switch (node.kind) { case 244: case 243: return true; default: return false; } } ts.isAnyImportSyntax = isAnyImportSyntax; function isLateVisibilityPaintedStatement(node) { switch (node.kind) { case 244: case 243: case 214: case 235: case 234: case 239: case 237: case 236: case 238: return true; default: return false; } } ts.isLateVisibilityPaintedStatement = isLateVisibilityPaintedStatement; function isAnyImportOrReExport(node) { return isAnyImportSyntax(node) || ts.isExportDeclaration(node); } ts.isAnyImportOrReExport = isAnyImportOrReExport; function getEnclosingBlockScopeContainer(node) { return findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); }); } ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; function declarationNameToString(name) { return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name); } ts.declarationNameToString = declarationNameToString; function getNameFromIndexInfo(info) { return info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : undefined; } ts.getNameFromIndexInfo = getNameFromIndexInfo; function getTextOfPropertyName(name) { switch (name.kind) { case 71: return name.escapedText; case 9: case 8: return escapeLeadingUnderscores(name.text); case 147: return isStringOrNumericLiteral(name.expression) ? escapeLeadingUnderscores(name.expression.text) : undefined; default: ts.Debug.assertNever(name); } } ts.getTextOfPropertyName = getTextOfPropertyName; function entityNameToString(name) { switch (name.kind) { case 71: return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name); case 146: return entityNameToString(name.left) + "." + entityNameToString(name.right); case 185: return entityNameToString(name.expression) + "." + entityNameToString(name.name); default: throw ts.Debug.assertNever(name); } } ts.entityNameToString = entityNameToString; function createDiagnosticForNode(node, message, arg0, arg1, arg2, arg3) { var sourceFile = getSourceFileOfNode(node); return createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2, arg3); } ts.createDiagnosticForNode = createDiagnosticForNode; function createDiagnosticForNodeArray(sourceFile, nodes, message, arg0, arg1, arg2, arg3) { var start = ts.skipTrivia(sourceFile.text, nodes.pos); return ts.createFileDiagnostic(sourceFile, start, nodes.end - start, message, arg0, arg1, arg2, arg3); } ts.createDiagnosticForNodeArray = createDiagnosticForNodeArray; function createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2, arg3) { var span = getErrorSpanForNode(sourceFile, node); return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2, arg3); } ts.createDiagnosticForNodeInSourceFile = createDiagnosticForNodeInSourceFile; function createDiagnosticForNodeFromMessageChain(node, messageChain, relatedInformation) { var sourceFile = getSourceFileOfNode(node); var span = getErrorSpanForNode(sourceFile, node); return { file: sourceFile, start: span.start, length: span.length, code: messageChain.code, category: messageChain.category, messageText: messageChain.next ? messageChain : messageChain.messageText, relatedInformation: relatedInformation }; } ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; function getSpanOfTokenAtPosition(sourceFile, 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()); } ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); 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) { return ts.createTextSpan(pos, getEndLinePosition(startLine, sourceFile) - pos + 1); } } return ts.createTextSpanFromBounds(pos, node.end); } function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { case 274: var pos_1 = ts.skipTrivia(sourceFile.text, 0, false); if (pos_1 === sourceFile.text.length) { return ts.createTextSpan(0, 0); } return getSpanOfTokenAtPosition(sourceFile, pos_1); 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: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { return getSpanOfTokenAtPosition(sourceFile, node.pos); } var isMissing = nodeIsMissing(errorNode); var pos = isMissing ? errorNode.pos : ts.skipTrivia(sourceFile.text, errorNode.pos); 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"); } else { 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"); } return ts.createTextSpanFromBounds(pos, errorNode.end); } ts.getErrorSpanForNode = getErrorSpanForNode; function isExternalOrCommonJsModule(file) { return (file.externalModuleIndicator || file.commonJsModuleIndicator) !== undefined; } ts.isExternalOrCommonJsModule = isExternalOrCommonJsModule; function isJsonSourceFile(file) { return file.scriptKind === 6; } ts.isJsonSourceFile = isJsonSourceFile; function isConstEnumDeclaration(node) { return node.kind === 238 && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function isConst(node) { return !!(ts.getCombinedNodeFlags(node) & 2) || !!(ts.getCombinedModifierFlags(node) & 2048); } ts.isConst = isConst; function isLet(node) { return !!(ts.getCombinedNodeFlags(node) & 1); } ts.isLet = isLet; function isSuperCall(n) { return n.kind === 187 && n.expression.kind === 97; } ts.isSuperCall = isSuperCall; function isImportCall(n) { return n.kind === 187 && n.expression.kind === 91; } ts.isImportCall = isImportCall; function isLiteralImportTypeNode(n) { return n.kind === 179 && n.argument.kind === 178 && ts.isStringLiteral(n.argument.literal); } ts.isLiteralImportTypeNode = isLiteralImportTypeNode; function isPrologueDirective(node) { return node.kind === 216 && node.expression.kind === 9; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { return node.kind !== 10 ? ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : undefined; } ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; function getJSDocCommentRanges(node, text) { 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); return ts.filter(commentRanges, function (comment) { return text.charCodeAt(comment.pos + 1) === 42 && text.charCodeAt(comment.pos + 2) === 42 && text.charCodeAt(comment.pos + 3) !== 47; }); } ts.getJSDocCommentRanges = getJSDocCommentRanges; ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; var defaultLibReferenceRegEx = /^(\/\/\/\s*/; function isPartOfTypeNode(node) { if (161 <= node.kind && node.kind <= 179) { return true; } switch (node.kind) { case 119: case 142: case 134: case 137: case 122: case 138: case 140: case 131: return true; case 105: return node.parent.kind !== 196; case 207: return !isExpressionWithTypeArgumentsInClassExtendsClause(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 && node.parent.name === node) { node = node.parent; } 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) { return false; } if (parent.kind === 179) { return !parent.isTypeOf; } if (161 <= parent.kind && parent.kind <= 179) { return true; } switch (parent.kind) { case 207: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent); case 148: return node === parent.constraint; case 152: case 151: case 149: case 232: return node === parent.type; case 234: case 192: case 193: case 155: case 154: case 153: case 156: case 157: return node === parent.type; case 158: case 159: case 160: return node === parent.type; case 190: return node === parent.type; case 187: case 188: return ts.contains(parent.typeArguments, node); case 189: return false; } } } return false; } ts.isPartOfTypeNode = isPartOfTypeNode; function isChildOfNodeWithKind(node, kind) { while (node) { if (node.kind === kind) { return true; } node = node.parent; } return false; } ts.isChildOfNodeWithKind = isChildOfNodeWithKind; function forEachReturnStatement(body, visitor) { return traverse(body); function traverse(node) { switch (node.kind) { case 225: return visitor(node); 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); } } } ts.forEachReturnStatement = forEachReturnStatement; function forEachYieldExpression(body, visitor) { return traverse(body); function traverse(node) { switch (node.kind) { case 203: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } return; 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) { traverse(node.name.expression); return; } } else if (!isPartOfTypeNode(node)) { ts.forEachChild(node, traverse); } } } } ts.forEachYieldExpression = forEachYieldExpression; function getRestParameterElementType(node) { if (node && node.kind === 167) { return node.elementType; } else if (node && node.kind === 162) { return ts.singleOrUndefined(node.typeArguments); } else { return undefined; } } ts.getRestParameterElementType = getRestParameterElementType; function getMembersOfDeclaration(node) { switch (node.kind) { case 236: case 235: case 205: case 166: return node.members; case 184: return node.properties; } } ts.getMembersOfDeclaration = getMembersOfDeclaration; function isVariableLike(node) { if (node) { switch (node.kind) { case 182: case 273: case 149: case 270: case 152: case 151: case 271: case 232: return true; } } return false; } ts.isVariableLike = isVariableLike; function isVariableLikeOrAccessor(node) { return isVariableLike(node) || ts.isAccessor(node); } ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor; function isVariableDeclarationInVariableStatement(node) { return node.parent.kind === 233 && node.parent.parent.kind === 214; } ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement; function isValidESSymbolDeclaration(node) { return ts.isVariableDeclaration(node) ? isConst(node) && ts.isIdentifier(node.name) && isVariableDeclarationInVariableStatement(node) : ts.isPropertyDeclaration(node) ? hasReadonlyModifier(node) && hasStaticModifier(node) : ts.isPropertySignature(node) && hasReadonlyModifier(node); } ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration; function introducesArgumentsExoticObject(node) { switch (node.kind) { case 154: case 153: case 155: case 156: case 157: case 234: case 192: return true; } return false; } ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; function unwrapInnermostStatementOfLabel(node, beforeUnwrapLabelCallback) { while (true) { if (beforeUnwrapLabelCallback) { beforeUnwrapLabelCallback(node); } if (node.statement.kind !== 228) { return node.statement; } node = node.statement; } } ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel; function isFunctionBlock(node) { return node && node.kind === 213 && ts.isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { return node && node.kind === 154 && node.parent.kind === 184; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isObjectLiteralOrClassExpressionMethod(node) { return node.kind === 154 && (node.parent.kind === 184 || node.parent.kind === 205); } ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod; function isIdentifierTypePredicate(predicate) { return predicate && predicate.kind === 1; } ts.isIdentifierTypePredicate = isIdentifierTypePredicate; function isThisTypePredicate(predicate) { return predicate && predicate.kind === 0; } ts.isThisTypePredicate = isThisTypePredicate; function getPropertyAssignment(objectLiteral, key, key2) { return objectLiteral.properties.filter(function (property) { if (property.kind === 270) { var propName = getTextOfPropertyName(property.name); return key === propName || (!!key2 && key2 === propName); } return false; }); } ts.getPropertyAssignment = getPropertyAssignment; function getTsConfigObjectLiteralExpression(tsConfigSourceFile) { if (tsConfigSourceFile && tsConfigSourceFile.statements.length) { var expression = tsConfigSourceFile.statements[0].expression; return ts.tryCast(expression, ts.isObjectLiteralExpression); } } ts.getTsConfigObjectLiteralExpression = getTsConfigObjectLiteralExpression; function getTsConfigPropArrayElementValue(tsConfigSourceFile, propKey, elementValue) { return ts.firstDefined(getTsConfigPropArray(tsConfigSourceFile, propKey), function (property) { return ts.isArrayLiteralExpression(property.initializer) ? ts.find(property.initializer.elements, function (element) { return ts.isStringLiteral(element) && element.text === elementValue; }) : undefined; }); } ts.getTsConfigPropArrayElementValue = getTsConfigPropArrayElementValue; function getTsConfigPropArray(tsConfigSourceFile, propKey) { var jsonObjectLiteral = getTsConfigObjectLiteralExpression(tsConfigSourceFile); return jsonObjectLiteral ? getPropertyAssignment(jsonObjectLiteral, propKey) : ts.emptyArray; } ts.getTsConfigPropArray = getTsConfigPropArray; function getContainingFunction(node) { return findAncestor(node.parent, ts.isFunctionLike); } ts.getContainingFunction = getContainingFunction; function getContainingClass(node) { return findAncestor(node.parent, ts.isClassLike); } ts.getContainingClass = getContainingClass; function getThisContainer(node, includeArrowFunctions) { ts.Debug.assert(node.kind !== 274); while (true) { node = node.parent; if (!node) { return ts.Debug.fail(); } switch (node.kind) { case 147: if (ts.isClassLike(node.parent.parent)) { return node; } node = node.parent; break; case 150: if (node.parent.kind === 149 && ts.isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (ts.isClassElement(node.parent)) { node = node.parent; } break; case 193: if (!includeArrowFunctions) { continue; } 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, false); if (container) { switch (container.kind) { case 155: case 234: case 192: return container; } } return undefined; } ts.getNewTargetContainer = getNewTargetContainer; function getSuperContainer(node, stopOnFunctions) { while (true) { node = node.parent; if (!node) { return node; } switch (node.kind) { case 147: node = node.parent; break; case 234: case 192: case 193: if (!stopOnFunctions) { continue; } case 152: case 151: case 154: case 153: case 155: case 156: case 157: return node; case 150: if (node.parent.kind === 149 && ts.isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (ts.isClassElement(node.parent)) { node = node.parent; } break; } } } ts.getSuperContainer = getSuperContainer; function getImmediatelyInvokedFunctionExpression(func) { if (func.kind === 192 || func.kind === 193) { var prev = func; var parent = func.parent; while (parent.kind === 191) { prev = parent; parent = parent.parent; } if (parent.kind === 187 && parent.expression === prev) { return parent; } } } ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression; function isSuperProperty(node) { var kind = node.kind; return (kind === 185 || kind === 186) && node.expression.kind === 97; } ts.isSuperProperty = isSuperProperty; function isThisProperty(node) { var kind = node.kind; return (kind === 185 || kind === 186) && node.expression.kind === 99; } ts.isThisProperty = isThisProperty; function getEntityNameFromTypeNode(node) { switch (node.kind) { case 162: return node.typeName; case 207: return isEntityNameExpression(node.expression) ? node.expression : undefined; case 71: case 146: return node; } return undefined; } ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { switch (node.kind) { case 189: return node.tag; case 257: case 256: return node.tagName; default: return node.expression; } } ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node, parent, grandparent) { switch (node.kind) { case 235: return true; case 152: return parent.kind === 235; case 156: case 157: case 154: return node.body !== undefined && parent.kind === 235; case 149: return parent.body !== undefined && (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); } ts.nodeIsDecorated = nodeIsDecorated; function nodeOrChildIsDecorated(node, parent, grandparent) { return nodeIsDecorated(node, parent, grandparent) || childIsDecorated(node, parent); } ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated; function childIsDecorated(node, parent) { switch (node.kind) { 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; } } ts.childIsDecorated = childIsDecorated; function isJSXTagName(node) { var parent = node.parent; if (parent.kind === 257 || parent.kind === 256 || parent.kind === 258) { return parent.tagName === node; } return false; } ts.isJSXTagName = isJSXTagName; function isExpressionNode(node) { switch (node.kind) { 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: while (node.parent.kind === 146) { node = node.parent; } return node.parent.kind === 165 || isJSXTagName(node); case 71: if (node.parent.kind === 165 || isJSXTagName(node)) { return true; } case 8: case 9: case 99: return isInExpressionContext(node); default: return false; } } ts.isExpressionNode = isExpressionNode; function isInExpressionContext(node) { var parent = node.parent; switch (parent.kind) { case 232: case 149: case 152: case 151: case 273: case 270: case 182: return parent.initializer === node; case 216: case 217: case 218: case 219: case 225: case 226: case 227: case 266: case 229: return parent.expression === node; case 220: var forStatement = parent; return (forStatement.initializer === node && forStatement.initializer.kind !== 233) || forStatement.condition === node || forStatement.incrementor === node; case 221: case 222: var forInStatement = parent; return (forInStatement.initializer === node && forInStatement.initializer.kind !== 233) || forInStatement.expression === node; case 190: case 208: return node === parent.expression; case 211: return node === parent.expression; case 147: return node === parent.expression; case 150: case 265: case 264: case 272: return true; case 207: return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent); default: return isExpressionNode(parent); } } ts.isInExpressionContext = isInExpressionContext; function isExternalModuleImportEqualsDeclaration(node) { return node.kind === 243 && node.moduleReference.kind === 254; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node)); return node.moduleReference.expression; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { return node.kind === 243 && node.moduleReference.kind !== 254; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { return isInJavaScriptFile(file); } ts.isSourceFileJavaScript = isSourceFileJavaScript; function isSourceFileNotJavaScript(file) { return !isInJavaScriptFile(file); } ts.isSourceFileNotJavaScript = isSourceFileNotJavaScript; function isInJavaScriptFile(node) { return !!node && !!(node.flags & 65536); } ts.isInJavaScriptFile = isInJavaScriptFile; function isInJsonFile(node) { return !!node && !!(node.flags & 16777216); } ts.isInJsonFile = isInJsonFile; function isInJSDoc(node) { return !!node && !!(node.flags & 2097152); } ts.isInJSDoc = isInJSDoc; function isJSDocIndexSignature(node) { return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && node.typeArguments && node.typeArguments.length === 2 && (node.typeArguments[0].kind === 137 || node.typeArguments[0].kind === 134); } ts.isJSDocIndexSignature = isJSDocIndexSignature; function isRequireCall(callExpression, checkArgumentIsStringLiteralLike) { if (callExpression.kind !== 187) { return false; } var _a = callExpression, expression = _a.expression, args = _a.arguments; if (expression.kind !== 71 || expression.escapedText !== "require") { return false; } if (args.length !== 1) { return false; } var arg = args[0]; return !checkArgumentIsStringLiteralLike || ts.isStringLiteralLike(arg); } ts.isRequireCall = isRequireCall; function isSingleOrDoubleQuote(charCode) { return charCode === 39 || charCode === 34; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; function isStringDoubleQuoted(str, sourceFile) { return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34; } ts.isStringDoubleQuoted = isStringDoubleQuoted; function getDeclarationOfJSInitializer(node) { if (!isInJavaScriptFile(node) || !node.parent) { return undefined; } var name; var decl; if (ts.isVariableDeclaration(node.parent) && node.parent.initializer === node) { name = node.parent.name; decl = node.parent; } 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) { 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 && node.parent.parent.right === node.parent) { name = node.parent.parent.left; decl = name; } if (!name || !isEntityNameExpression(name) || !isSameEntityName(name, node.parent.left)) { return undefined; } } if (!name || !getJavascriptInitializer(node, isPrototypeAccess(name))) { return undefined; } return decl; } ts.getDeclarationOfJSInitializer = getDeclarationOfJSInitializer; function getEffectiveInitializer(node) { if (isInJavaScriptFile(node) && node.initializer && 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; function getDeclaredJavascriptInitializer(node) { var init = getEffectiveInitializer(node); return init && getJavascriptInitializer(init, isPrototypeAccess(node.name)); } ts.getDeclaredJavascriptInitializer = getDeclaredJavascriptInitializer; function getAssignedJavascriptInitializer(node) { 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; function getJavascriptInitializer(initializer, isPrototypeAssignment) { if (ts.isCallExpression(initializer)) { var e = skipParentheses(initializer.expression); return e.kind === 192 || e.kind === 193 ? initializer : undefined; } if (initializer.kind === 192 || initializer.kind === 205 || initializer.kind === 193) { return initializer; } if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) { return initializer; } } ts.getJavascriptInitializer = getJavascriptInitializer; function getDefaultedJavascriptInitializer(name, initializer, 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 ? node.parent.left : undefined; return name && getJavascriptInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left); } ts.isDefaultedJavascriptInitializer = isDefaultedJavascriptInitializer; function getOuterNameOfJsInitializer(node) { if (ts.isBinaryExpression(node.parent)) { 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; } } else if (ts.isVariableDeclaration(node.parent)) { return node.parent.name; } } ts.getOuterNameOfJsInitializer = getOuterNameOfJsInitializer; 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 || ts.isIdentifier(initializer.expression) && (initializer.expression.escapedText === "window" || initializer.expression.escapedText === "self" || initializer.expression.escapedText === "global")) && isSameEntityName(name, initializer.name); } if (ts.isPropertyAccessExpression(name) && ts.isPropertyAccessExpression(initializer)) { return name.name.escapedText === initializer.name.escapedText && isSameEntityName(name.expression, initializer.expression); } return false; } function getRightMostAssignedExpression(node) { while (isAssignmentExpression(node, true)) { node = node.right; } return node; } ts.getRightMostAssignedExpression = getRightMostAssignedExpression; function isExportsIdentifier(node) { return ts.isIdentifier(node) && node.escapedText === "exports"; } ts.isExportsIdentifier = isExportsIdentifier; function isModuleExportsPropertyAccessExpression(node) { return ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.escapedText === "module" && node.name.escapedText === "exports"; } ts.isModuleExportsPropertyAccessExpression = isModuleExportsPropertyAccessExpression; function getSpecialPropertyAssignmentKind(expr) { if (!isInJavaScriptFile(expr) || expr.operatorToken.kind !== 58 || !ts.isPropertyAccessExpression(expr.left)) { return 0; } var lhs = expr.left; if (lhs.expression.kind === 99) { return 4; } else if (ts.isIdentifier(lhs.expression) && lhs.expression.escapedText === "module" && lhs.name.escapedText === "exports") { return 2; } else if (isEntityNameExpression(lhs.expression)) { if (lhs.name.escapedText === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) { return 6; } else if (isPrototypeAccess(lhs.expression)) { return 3; } var nextToLast = lhs; while (ts.isPropertyAccessExpression(nextToLast.expression)) { nextToLast = nextToLast.expression; } ts.Debug.assert(ts.isIdentifier(nextToLast.expression)); var id = nextToLast.expression; if (id.escapedText === "exports" || id.escapedText === "module" && nextToLast.name.escapedText === "exports") { return 1; } return 5; } return 0; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getInitializerOfBinaryExpression(expr) { while (ts.isBinaryExpression(expr.right)) { expr = expr.right; } return expr.right; } ts.getInitializerOfBinaryExpression = getInitializerOfBinaryExpression; function isPrototypePropertyAssignment(node) { return ts.isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) === 3; } ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment; function isSpecialPropertyDeclaration(expr) { return isInJavaScriptFile(expr) && expr.parent && expr.parent.kind === 216 && !!ts.getJSDocTypeTag(expr.parent); } ts.isSpecialPropertyDeclaration = isSpecialPropertyDeclaration; function importFromModuleSpecifier(node) { return tryGetImportFromModuleSpecifier(node) || ts.Debug.fail(ts.Debug.showSyntaxKind(node.parent)); } ts.importFromModuleSpecifier = importFromModuleSpecifier; function tryGetImportFromModuleSpecifier(node) { switch (node.parent.kind) { case 244: case 250: return node.parent; case 254: return node.parent.parent; case 187: return node.parent; case 178: ts.Debug.assert(ts.isStringLiteral(node)); return ts.tryCast(node.parent.parent, ts.isImportTypeNode); default: return undefined; } } ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier; function getExternalModuleName(node) { switch (node.kind) { case 244: case 250: return node.moduleSpecifier; 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); } } ts.getExternalModuleName = getExternalModuleName; function getNamespaceDeclarationNode(node) { switch (node.kind) { case 244: return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport); case 243: return node; case 250: return undefined; default: return ts.Debug.assertNever(node); } } ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode; function isDefaultImport(node) { return node.kind === 244 && !!node.importClause && !!node.importClause.name; } ts.isDefaultImport = isDefaultImport; function hasQuestionToken(node) { if (node) { switch (node.kind) { case 149: case 154: case 153: case 271: case 270: case 152: case 151: return node.questionToken !== undefined; } } return false; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { 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 === 298 || node.kind === 292; } ts.isJSDocTypeAlias = isJSDocTypeAlias; function isTypeAlias(node) { return isJSDocTypeAlias(node) || ts.isTypeAliasDeclaration(node); } ts.isTypeAlias = isTypeAlias; function getSourceOfAssignment(node) { return ts.isExpressionStatement(node) && node.expression && ts.isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 58 ? node.expression.right : undefined; } function getSourceOfDefaultedAssignment(node) { return ts.isExpressionStatement(node) && ts.isBinaryExpression(node.expression) && getSpecialPropertyAssignmentKind(node.expression) !== 0 && ts.isBinaryExpression(node.expression.right) && node.expression.right.operatorToken.kind === 54 ? node.expression.right.right : undefined; } function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) { switch (node.kind) { case 214: var v = getSingleVariableOfVariableStatement(node); return v && v.initializer; case 152: return node.initializer; case 270: return node.initializer; } } function getSingleVariableOfVariableStatement(node) { return ts.isVariableStatement(node) ? ts.firstOrUndefined(node.declarationList.declarations) : undefined; } function getNestedModuleDeclaration(node) { return ts.isModuleDeclaration(node) && node.body && node.body.kind === 239 ? node.body : undefined; } function getJSDocCommentsAndTags(hostNode) { var result; getJSDocCommentsAndTagsWorker(hostNode); return result || ts.emptyArray; function getJSDocCommentsAndTagsWorker(node) { var parent = node.parent; if (!parent) return; if (parent.kind === 270 || parent.kind === 152 || getNestedModuleDeclaration(parent)) { getJSDocCommentsAndTagsWorker(parent); } if (parent.parent && (getSingleVariableOfVariableStatement(parent.parent) === node)) { getJSDocCommentsAndTagsWorker(parent.parent); } if (parent.parent && parent.parent.parent && (getSingleVariableOfVariableStatement(parent.parent.parent) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(parent.parent.parent) === node || getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } if (ts.isBinaryExpression(node) && node.operatorToken.kind === 58 || ts.isBinaryExpression(parent) && parent.operatorToken.kind === 58 || node.kind === 185 && node.parent && node.parent.kind === 216) { if (ts.isBinaryExpression(parent)) { getJSDocCommentsAndTagsWorker(parent.parent); } else { getJSDocCommentsAndTagsWorker(parent); } } if (node.kind === 149) { result = ts.addRange(result, ts.getJSDocParameterTags(node)); } if (isVariableLike(node) && ts.hasInitializer(node) && node.initializer !== hostNode && ts.hasJSDocNodes(node.initializer)) { result = ts.addRange(result, node.initializer.jsDoc); } if (ts.hasJSDocNodes(node)) { result = ts.addRange(result, node.jsDoc); } } } ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags; function getParameterSymbolFromJSDoc(node) { if (node.symbol) { return node.symbol; } if (!ts.isIdentifier(node.name)) { return undefined; } var name = node.name.escapedText; var decl = getHostSignatureFromJSDoc(node); if (!decl) { return undefined; } var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 71 && p.name.escapedText === name; }); return parameter && parameter.symbol; } ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc; function getHostSignatureFromJSDoc(node) { return getHostSignatureFromJSDocHost(getJSDocHost(node)); } ts.getHostSignatureFromJSDoc = getHostSignatureFromJSDoc; function getHostSignatureFromJSDocHost(host) { var decl = getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(host) || getSingleVariableOfVariableStatement(host) || getNestedModuleDeclaration(host) || host; return decl && ts.isFunctionLike(decl) ? decl : undefined; } ts.getHostSignatureFromJSDocHost = getHostSignatureFromJSDocHost; function getJSDocHost(node) { return ts.Debug.assertDefined(findAncestor(node.parent, ts.isJSDoc)).parent; } ts.getJSDocHost = getJSDocHost; function getTypeParameterFromJsDoc(node) { var name = node.name.escapedText; var typeParameters = node.parent.parent.parent.typeParameters; return ts.find(typeParameters, function (p) { return p.name.escapedText === name; }); } ts.getTypeParameterFromJsDoc = getTypeParameterFromJsDoc; function hasRestParameter(s) { var last = ts.lastOrUndefined(s.parameters); return !!last && isRestParameter(last); } 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; } 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: var binaryOperator = parent.operatorToken.kind; return isAssignmentOperator(binaryOperator) && parent.left === node ? binaryOperator === 58 ? 1 : 2 : 0; case 198: case 199: var unaryOperator = parent.operator; 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: if (parent.name !== node) { return 0; } node = parent.parent; break; case 270: if (parent.name === node) { return 0; } node = parent.parent; break; default: return 0; } parent = node.parent; } } ts.getAssignmentTargetKind = getAssignmentTargetKind; function isAssignmentTarget(node) { return getAssignmentTargetKind(node) !== 0; } ts.isAssignmentTarget = isAssignmentTarget; function isNodeWithPossibleHoistedDeclaration(node) { switch (node.kind) { 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; } ts.isNodeWithPossibleHoistedDeclaration = isNodeWithPossibleHoistedDeclaration; function isValueSignatureDeclaration(node) { return ts.isFunctionExpression(node) || ts.isArrowFunction(node) || ts.isMethodOrAccessor(node) || ts.isFunctionDeclaration(node) || ts.isConstructorDeclaration(node); } ts.isValueSignatureDeclaration = isValueSignatureDeclaration; function walkUp(node, kind) { while (node && node.kind === kind) { node = node.parent; } return node; } function walkUpParenthesizedTypes(node) { return walkUp(node, 173); } ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes; function walkUpParenthesizedExpressions(node) { return walkUp(node, 191); } ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions; function skipParentheses(node) { while (node.kind === 191) { node = node.expression; } return node; } ts.skipParentheses = skipParentheses; function isDeleteTarget(node) { if (node.kind !== 185 && node.kind !== 186) { return false; } node = walkUpParenthesizedExpressions(node.parent); return node && node.kind === 194; } ts.isDeleteTarget = isDeleteTarget; function isNodeDescendantOf(node, ancestor) { while (node) { if (node === ancestor) return true; node = node.parent; } return false; } ts.isNodeDescendantOf = isNodeDescendantOf; function isDeclarationName(name) { return !ts.isSourceFile(name) && !ts.isBindingPattern(name) && ts.isDeclaration(name.parent) && name.parent.name === name; } ts.isDeclarationName = isDeclarationName; function isAnyDeclarationName(name) { switch (name.kind) { case 71: case 9: case 8: { var parent = name.parent; if (ts.isDeclaration(parent)) { return parent.name === name; } else if (ts.isQualifiedName(name.parent)) { var tag = name.parent.parent; return ts.isJSDocParameterTag(tag) && tag.name === name.parent; } else { var binExp = name.parent.parent; return ts.isBinaryExpression(binExp) && getSpecialPropertyAssignmentKind(binExp) !== 0 && ts.getNameOfDeclaration(binExp) === name; } } default: return false; } } ts.isAnyDeclarationName = isAnyDeclarationName; function isLiteralComputedPropertyDeclarationName(node) { return (node.kind === 9 || node.kind === 8) && node.parent.kind === 147 && ts.isDeclaration(node.parent.parent); } ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { case 152: case 151: case 154: case 153: case 156: case 157: case 273: case 270: case 185: return parent.name === node; case 146: if (parent.right === node) { while (parent.kind === 146) { parent = parent.parent; } return parent.kind === 165 || parent.kind === 162; } return false; case 182: case 248: return parent.propertyName === node; case 252: case 262: return true; } return false; } ts.isIdentifierName = isIdentifierName; function isAliasSymbolDeclaration(node) { 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) { var e = ts.isExportAssignment(node) ? node.expression : node.right; return isEntityNameExpression(e) || ts.isClassExpression(e); } ts.exportAssignmentIsAlias = exportAssignmentIsAlias; function getClassExtendsHeritageClauseElement(node) { 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); return heritageClause ? heritageClause.types : undefined; } ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements; function getAllSuperTypeNodes(node) { return ts.isInterfaceDeclaration(node) ? getInterfaceBaseTypeNodes(node) || ts.emptyArray : ts.isClassLike(node) ? ts.concatenate(ts.singleElementArray(getClassExtendsHeritageClauseElement(node)), getClassImplementsHeritageClauseElements(node)) || ts.emptyArray : ts.emptyArray; } ts.getAllSuperTypeNodes = getAllSuperTypeNodes; function getInterfaceBaseTypeNodes(node) { var heritageClause = getHeritageClause(node.heritageClauses, 85); return heritageClause ? heritageClause.types : undefined; } ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes; function getHeritageClause(clauses, kind) { if (clauses) { for (var _i = 0, clauses_1 = clauses; _i < clauses_1.length; _i++) { var clause = clauses_1[_i]; if (clause.token === kind) { return clause; } } } return undefined; } ts.getHeritageClause = getHeritageClause; function tryResolveScriptReference(host, sourceFile, reference) { if (!host.getCompilerOptions().noResolve) { var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName); return host.getSourceFile(referenceFileName); } } ts.tryResolveScriptReference = tryResolveScriptReference; function getAncestor(node, kind) { while (node) { if (node.kind === kind) { return node; } node = node.parent; } return undefined; } ts.getAncestor = getAncestor; function isKeyword(token) { return 72 <= token && token <= 145; } ts.isKeyword = isKeyword; function isContextualKeyword(token) { return 117 <= token && token <= 145; } ts.isContextualKeyword = isContextualKeyword; function isNonContextualKeyword(token) { return isKeyword(token) && !isContextualKeyword(token); } ts.isNonContextualKeyword = isNonContextualKeyword; function isStringANonContextualKeyword(name) { var token = ts.stringToToken(name); return token !== undefined && isNonContextualKeyword(token); } ts.isStringANonContextualKeyword = isStringANonContextualKeyword; function isTrivia(token) { 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; } var flags = 0; switch (node.kind) { case 234: case 192: case 154: if (node.asteriskToken) { flags |= 1; } case 193: if (hasModifier(node, 256)) { flags |= 2; } break; } if (!node.body) { flags |= 4; } return flags; } ts.getFunctionFlags = getFunctionFlags; function isAsyncFunction(node) { switch (node.kind) { case 234: case 192: case 193: case 154: return node.body !== undefined && node.asteriskToken === undefined && hasModifier(node, 256); } return false; } ts.isAsyncFunction = isAsyncFunction; function isStringOrNumericLiteral(node) { var kind = node.kind; return kind === 9 || kind === 8; } ts.isStringOrNumericLiteral = isStringOrNumericLiteral; function hasDynamicName(declaration) { var name = ts.getNameOfDeclaration(declaration); return !!name && isDynamicName(name); } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { return name.kind === 147 && !isStringOrNumericLiteral(name.expression) && !isWellKnownSymbolSyntactically(name.expression); } ts.isDynamicName = isDynamicName; function isWellKnownSymbolSyntactically(node) { return ts.isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression); } ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically; function getPropertyNameForPropertyNameNode(name) { if (name.kind === 71) { return name.escapedText; } if (name.kind === 9 || name.kind === 8) { return escapeLeadingUnderscores(name.text); } if (name.kind === 147) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { return getPropertyNameForKnownSymbolName(ts.idText(nameExpression.name)); } else if (nameExpression.kind === 9 || nameExpression.kind === 8) { return escapeLeadingUnderscores(nameExpression.text); } } return undefined; } ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode; function isPropertyNameLiteral(node) { switch (node.kind) { case 71: case 9: case 13: case 8: return true; default: return false; } } ts.isPropertyNameLiteral = isPropertyNameLiteral; function getTextOfIdentifierOrLiteral(node) { return node.kind === 71 ? ts.idText(node) : node.text; } ts.getTextOfIdentifierOrLiteral = getTextOfIdentifierOrLiteral; function getEscapedTextOfIdentifierOrLiteral(node) { return node.kind === 71 ? node.escapedText : escapeLeadingUnderscores(node.text); } ts.getEscapedTextOfIdentifierOrLiteral = getEscapedTextOfIdentifierOrLiteral; function getPropertyNameForKnownSymbolName(symbolName) { return "__@" + symbolName; } ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName; function isKnownSymbol(symbol) { return ts.startsWith(symbol.escapedName, "__@"); } ts.isKnownSymbol = isKnownSymbol; function isESSymbolIdentifier(node) { return node.kind === 71 && node.escapedText === "Symbol"; } ts.isESSymbolIdentifier = isESSymbolIdentifier; function isPushOrUnshiftIdentifier(node) { return node.escapedText === "push" || node.escapedText === "unshift"; } ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier; function isParameterDeclaration(node) { var root = getRootDeclaration(node); return root.kind === 149; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { while (node.kind === 182) { node = node.parent.parent; } return node; } ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(node) { var kind = node.kind; 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) { return ts.positionIsSynthesized(range.pos) || ts.positionIsSynthesized(range.end); } ts.nodeIsSynthesized = nodeIsSynthesized; function getOriginalSourceFile(sourceFile) { 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 && expression.arguments !== undefined; return getOperatorAssociativity(expression.kind, operator, hasArguments); } ts.getExpressionAssociativity = getExpressionAssociativity; function getOperatorAssociativity(kind, operator, hasArguments) { switch (kind) { 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: 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; } ts.getOperatorAssociativity = getOperatorAssociativity; function getExpressionPrecedence(expression) { var operator = getOperator(expression); var hasArguments = expression.kind === 188 && expression.arguments !== undefined; return getOperatorPrecedence(expression.kind, operator, hasArguments); } ts.getExpressionPrecedence = getExpressionPrecedence; function getOperator(expression) { if (expression.kind === 200) { return expression.operatorToken.kind; } else if (expression.kind === 198 || expression.kind === 199) { return expression.operator; } else { return expression.kind; } } ts.getOperator = getOperator; function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) { switch (nodeKind) { case 303: return 0; case 204: return 1; case 203: return 2; case 201: return 4; case 200: switch (operatorKind) { case 26: return 0; 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: case 195: case 196: case 194: case 197: return 16; case 199: return 17; case 187: return 18; case 188: return hasArguments ? 19 : 18; case 189: case 185: case 186: return 19; 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; function getBinaryOperatorPrecedence(kind) { switch (kind) { case 54: return 5; case 53: return 6; case 49: return 7; case 50: return 8; case 48: return 9; case 32: case 33: case 34: case 35: return 10; case 27: case 29: case 30: case 31: case 93: case 92: case 118: return 11; case 45: case 46: case 47: return 12; case 37: case 38: return 13; case 39: case 41: case 42: return 14; case 40: return 15; } return -1; } ts.getBinaryOperatorPrecedence = getBinaryOperatorPrecedence; function createDiagnosticCollection() { var nonFileDiagnostics = []; var filesWithDiagnostics = []; var fileDiagnostics = ts.createMap(); var hasReadNonFileDiagnostics = false; return { add: add, getGlobalDiagnostics: getGlobalDiagnostics, getDiagnostics: getDiagnostics, reattachFileDiagnostics: reattachFileDiagnostics }; function reattachFileDiagnostics(newFile) { ts.forEach(fileDiagnostics.get(newFile.fileName), function (diagnostic) { return diagnostic.file = newFile; }); } function add(diagnostic) { var diagnostics; if (diagnostic.file) { diagnostics = fileDiagnostics.get(diagnostic.file.fileName); if (!diagnostics) { diagnostics = []; fileDiagnostics.set(diagnostic.file.fileName, diagnostics); ts.insertSorted(filesWithDiagnostics, diagnostic.file.fileName, ts.compareStringsCaseSensitive); } } else { if (hasReadNonFileDiagnostics) { hasReadNonFileDiagnostics = false; nonFileDiagnostics = nonFileDiagnostics.slice(); } diagnostics = nonFileDiagnostics; } ts.insertSorted(diagnostics, diagnostic, ts.compareDiagnostics); } function getGlobalDiagnostics() { hasReadNonFileDiagnostics = true; return nonFileDiagnostics; } function getDiagnostics(fileName) { if (fileName) { return fileDiagnostics.get(fileName) || []; } var fileDiags = ts.flatMap(filesWithDiagnostics, function (f) { return fileDiagnostics.get(f); }); if (!nonFileDiagnostics.length) { return fileDiags; } fileDiags.unshift.apply(fileDiags, nonFileDiagnostics); return fileDiags; } } ts.createDiagnosticCollection = createDiagnosticCollection; 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; var escapedCharsMap = ts.createMapFromTemplate({ "\t": "\\t", "\v": "\\v", "\f": "\\f", "\b": "\\b", "\r": "\\r", "\n": "\\n", "\\": "\\\\", "\"": "\\\"", "\'": "\\\'", "\`": "\\\`", "\u2028": "\\u2028", "\u2029": "\\u2029", "\u0085": "\\u0085" }); function escapeString(s, quoteChar) { 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) { var lookAhead = input.charCodeAt(offset + c.length); if (lookAhead >= 48 && lookAhead <= 57) { return "\\x00"; } return "\\0"; } return escapedCharsMap.get(c) || get16BitUnicodeEscapeSequence(c.charCodeAt(0)); } function isIntrinsicJsxName(name) { var ch = name.charCodeAt(0); return (ch >= 97 && ch <= 122) || name.indexOf("-") > -1; } ts.isIntrinsicJsxName = isIntrinsicJsxName; function get16BitUnicodeEscapeSequence(charCode) { var hexCharCode = charCode.toString(16).toUpperCase(); var paddedHexCode = ("0000" + hexCharCode).slice(-4); return "\\u" + paddedHexCode; } var nonAsciiCharacters = /[^\u0000-\u007F]/g; function escapeNonAsciiString(s, quoteChar) { s = escapeString(s, quoteChar); return nonAsciiCharacters.test(s) ? s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) : s; } ts.escapeNonAsciiString = escapeNonAsciiString; var indentStrings = ["", " "]; function getIndentString(level) { if (indentStrings[level] === undefined) { indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; } return indentStrings[level]; } ts.getIndentString = getIndentString; function getIndentSize() { return indentStrings[1].length; } ts.getIndentSize = getIndentSize; function createTextWriter(newLine) { var output; var indent; var lineStart; var lineCount; var linePos; function updateLineCountAndPosFor(s) { var lineStartsOfS = ts.computeLineStarts(s); if (lineStartsOfS.length > 1) { lineCount = lineCount + lineStartsOfS.length - 1; linePos = output.length - s.length + ts.last(lineStartsOfS); lineStart = (linePos - output.length) === 0; } else { lineStart = false; } } function write(s) { if (s && s.length) { if (lineStart) { s = getIndentString(indent) + s; lineStart = false; } output += s; updateLineCountAndPosFor(s); } } function reset() { output = ""; indent = 0; lineStart = true; lineCount = 0; linePos = 0; } function rawWrite(s) { if (s !== undefined) { output += s; updateLineCountAndPosFor(s); } } function writeLiteral(s) { if (s && s.length) { write(s); } } function writeLine() { if (!lineStart) { output += newLine; lineCount++; linePos = output.length; lineStart = true; } } function writeTextOfNode(text, node) { var s = getTextOfNodeFromSourceText(text, node); write(s); updateLineCountAndPosFor(s); } reset(); return { write: write, rawWrite: rawWrite, writeTextOfNode: writeTextOfNode, writeLiteral: writeLiteral, writeLine: writeLine, increaseIndent: function () { indent++; }, decreaseIndent: function () { indent--; }, getIndent: function () { return indent; }, getTextPos: function () { return output.length; }, getLine: function () { return lineCount; }, getColumn: function () { return lineStart ? indent * getIndentSize() : output.length - linePos; }, getText: function () { return output; }, isAtStartOfLine: function () { return lineStart; }, clear: reset, reportInaccessibleThisError: ts.noop, reportPrivateInBaseOfClassExpression: ts.noop, reportInaccessibleUniqueSymbolError: ts.noop, trackSymbol: ts.noop, writeKeyword: write, writeOperator: write, writeParameter: write, writeProperty: write, writePunctuation: write, writeSpace: write, writeStringLiteral: write, writeSymbol: write }; } ts.createTextWriter = createTextWriter; function getResolvedExternalModuleName(host, file, referenceFile) { return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName); } ts.getResolvedExternalModuleName = getResolvedExternalModuleName; function getExternalModuleNameFromDeclaration(host, resolver, declaration) { var file = resolver.getExternalModuleFileFromDeclaration(declaration); if (!file || file.isDeclarationFile) { return undefined; } return getResolvedExternalModuleName(host, file); } ts.getExternalModuleNameFromDeclaration = getExternalModuleNameFromDeclaration; 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, false); var extensionless = ts.removeFileExtension(relativePath); return referencePath ? ts.ensurePathIsNonModuleName(extensionless) : extensionless; } ts.getExternalModuleNameFromPath = getExternalModuleNameFromPath; function getOwnEmitOutputFilePath(sourceFile, host, extension) { var compilerOptions = host.getCompilerOptions(); var emitOutputFilePathWithoutExtension; if (compilerOptions.outDir) { emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir)); } else { emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName); } return emitOutputFilePathWithoutExtension + extension; } ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath; function getDeclarationEmitOutputFilePath(sourceFile, host) { var options = host.getCompilerOptions(); var outputDir = options.declarationDir || options.outDir; var path = outputDir ? getSourceFilePathInNewDir(sourceFile, host, outputDir) : sourceFile.fileName; return ts.removeFileExtension(path) + ".d.ts"; } ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath; 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; return ts.filter(host.getSourceFiles(), function (sourceFile) { return (moduleEmitEnabled_1 || !ts.isExternalModule(sourceFile)) && sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary); }); } else { var sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile]; return ts.filter(sourceFiles, function (sourceFile) { return sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary); }); } } ts.getSourceFilesToEmit = getSourceFilesToEmit; function sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary) { return !(options.noEmitForJsFiles && isSourceFileJavaScript(sourceFile)) && !sourceFile.isDeclarationFile && !isSourceFileFromExternalLibrary(sourceFile); } ts.sourceFileMayBeEmitted = sourceFileMayBeEmitted; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); var commonSourceDirectory = host.getCommonSourceDirectory(); var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) { host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) { diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); }, sourceFiles); } ts.writeFile = writeFile; function getLineOfLocalPosition(currentSourceFile, pos) { return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line; } ts.getLineOfLocalPosition = getLineOfLocalPosition; function getLineOfLocalPositionFromLineMap(lineMap, pos) { return ts.computeLineAndCharacterOfPosition(lineMap, pos).line; } ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; function getFirstConstructorWithBody(node) { return ts.find(node.members, function (member) { return ts.isConstructorDeclaration(member) && nodeIsPresent(member.body); }); } ts.getFirstConstructorWithBody = getFirstConstructorWithBody; function getSetAccessorValueParameter(accessor) { if (accessor && accessor.parameters.length > 0) { var hasThis = accessor.parameters.length === 2 && parameterIsThisKeyword(accessor.parameters[0]); return accessor.parameters[hasThis ? 1 : 0]; } } function getSetAccessorTypeAnnotationNode(accessor) { var parameter = getSetAccessorValueParameter(accessor); return parameter && parameter.type; } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getThisParameter(signature) { if (signature.parameters.length && !ts.isJSDocSignature(signature)) { var thisParameter = signature.parameters[0]; if (parameterIsThisKeyword(thisParameter)) { return thisParameter; } } } ts.getThisParameter = getThisParameter; function parameterIsThisKeyword(parameter) { return isThisIdentifier(parameter.name); } ts.parameterIsThisKeyword = parameterIsThisKeyword; function isThisIdentifier(node) { return !!node && node.kind === 71 && identifierIsThisKeyword(node); } ts.isThisIdentifier = isThisIdentifier; function identifierIsThisKeyword(id) { return id.originalKeywordKind === 99; } ts.identifierIsThisKeyword = identifierIsThisKeyword; function getAllAccessorDeclarations(declarations, accessor) { var firstAccessor; var secondAccessor; var getAccessor; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; if (accessor.kind === 156) { getAccessor = accessor; } else if (accessor.kind === 157) { setAccessor = accessor; } else { ts.Debug.fail("Accessor has wrong kind"); } } else { ts.forEach(declarations, function (member) { 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) { if (!firstAccessor) { firstAccessor = member; } else if (!secondAccessor) { secondAccessor = member; } if (member.kind === 156 && !getAccessor) { getAccessor = member; } if (member.kind === 157 && !setAccessor) { setAccessor = member; } } } }); } return { firstAccessor: firstAccessor, secondAccessor: secondAccessor, getAccessor: getAccessor, setAccessor: setAccessor }; } ts.getAllAccessorDeclarations = getAllAccessorDeclarations; function getEffectiveTypeAnnotationNode(node) { return node.type || (isInJavaScriptFile(node) ? ts.getJSDocType(node) : undefined); } ts.getEffectiveTypeAnnotationNode = getEffectiveTypeAnnotationNode; function getTypeAnnotationNode(node) { return node.type; } ts.getTypeAnnotationNode = getTypeAnnotationNode; function getEffectiveReturnTypeNode(node) { if (ts.isJSDocSignature(node)) { return node.type && node.type.typeExpression && node.type.typeExpression.type; } return node.type || (isInJavaScriptFile(node) ? ts.getJSDocReturnType(node) : undefined); } ts.getEffectiveReturnTypeNode = getEffectiveReturnTypeNode; function getEffectiveTypeParameterDeclarations(node) { if (ts.isJSDocSignature(node)) { return ts.emptyArray; } if (isJSDocTypeAlias(node)) { 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); } ts.getEffectiveTypeParameterDeclarations = getEffectiveTypeParameterDeclarations; function getJSDocTypeParameterDeclarations(node) { return ts.flatMap(ts.getJSDocTags(node), function (tag) { return isNonTypeAliasTemplate(tag) ? tag.typeParameters : undefined; }); } ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations; function isNonTypeAliasTemplate(tag) { return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 286 && tag.parent.tags.some(isJSDocTypeAlias)); } function getEffectiveSetAccessorTypeAnnotationNode(node) { var parameter = getSetAccessorValueParameter(node); return parameter && getEffectiveTypeAnnotationNode(parameter); } ts.getEffectiveSetAccessorTypeAnnotationNode = getEffectiveSetAccessorTypeAnnotationNode; function emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments) { emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, node.pos, leadingComments); } ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments; function emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, pos, leadingComments) { if (leadingComments && leadingComments.length && pos !== leadingComments[0].pos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) { writer.writeLine(); } } ts.emitNewLineBeforeLeadingCommentsOfPosition = emitNewLineBeforeLeadingCommentsOfPosition; function emitNewLineBeforeLeadingCommentOfPosition(lineMap, writer, pos, commentPos) { if (pos !== commentPos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, commentPos)) { writer.writeLine(); } } ts.emitNewLineBeforeLeadingCommentOfPosition = emitNewLineBeforeLeadingCommentOfPosition; function emitComments(text, lineMap, writer, comments, leadingSeparator, trailingSeparator, newLine, writeComment) { if (comments && comments.length > 0) { if (leadingSeparator) { writer.write(" "); } var emitInterveningSeparator = false; for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) { var comment = comments_1[_i]; if (emitInterveningSeparator) { writer.write(" "); emitInterveningSeparator = false; } writeComment(text, lineMap, writer, comment.pos, comment.end, newLine); if (comment.hasTrailingNewLine) { writer.writeLine(); } else { emitInterveningSeparator = true; } } if (emitInterveningSeparator && trailingSeparator) { writer.write(" "); } } } ts.emitComments = emitComments; function emitDetachedComments(text, lineMap, writer, writeComment, node, newLine, removeComments) { var leadingComments; var currentDetachedCommentInfo; if (removeComments) { if (node.pos === 0) { leadingComments = ts.filter(ts.getLeadingCommentRanges(text, node.pos), isPinnedCommentLocal); } } else { leadingComments = ts.getLeadingCommentRanges(text, node.pos); } if (leadingComments) { var detachedComments = []; var lastComment = void 0; for (var _i = 0, leadingComments_1 = leadingComments; _i < leadingComments_1.length; _i++) { var comment = leadingComments_1[_i]; if (lastComment) { var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, lastComment.end); var commentLine = getLineOfLocalPositionFromLineMap(lineMap, comment.pos); if (commentLine >= lastCommentLine + 2) { break; } } detachedComments.push(comment); lastComment = comment; } if (detachedComments.length) { var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, ts.last(detachedComments).end); var nodeLine = getLineOfLocalPositionFromLineMap(lineMap, ts.skipTrivia(text, node.pos)); if (nodeLine >= lastCommentLine + 2) { emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments); emitComments(text, lineMap, writer, detachedComments, false, true, newLine, writeComment); currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.last(detachedComments).end }; } } } return currentDetachedCommentInfo; function isPinnedCommentLocal(comment) { return isPinnedComment(text, comment.pos); } } ts.emitDetachedComments = emitDetachedComments; function writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine) { if (text.charCodeAt(commentPos + 1) === 42) { var firstCommentLineAndCharacter = ts.computeLineAndCharacterOfPosition(lineMap, commentPos); var lineCount = lineMap.length; var firstCommentLineIndent = void 0; for (var pos = commentPos, currentLine = firstCommentLineAndCharacter.line; pos < commentEnd; currentLine++) { var nextLineStart = (currentLine + 1) === lineCount ? text.length + 1 : lineMap[currentLine + 1]; if (pos !== commentPos) { if (firstCommentLineIndent === undefined) { firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], commentPos); } var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(text, pos, nextLineStart); if (spacesToEmit > 0) { var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); writer.rawWrite(indentSizeSpaceString); while (numberOfSingleSpacesToEmit) { writer.rawWrite(" "); numberOfSingleSpacesToEmit--; } } else { writer.rawWrite(""); } } writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart); pos = nextLineStart; } } else { writer.write(text.substring(commentPos, commentEnd)); } } ts.writeCommentRange = writeCommentRange; function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) { var end = Math.min(commentEnd, nextLineStart - 1); var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, ""); if (currentLineText) { writer.write(currentLineText); if (end !== commentEnd) { writer.writeLine(); } } else { 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) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } else { currentLineIndent++; } } return currentLineIndent; } function hasModifiers(node) { return getModifierFlags(node) !== 0; } ts.hasModifiers = hasModifiers; function hasModifier(node, flags) { return !!getSelectedModifierFlags(node, flags); } ts.hasModifier = hasModifier; function hasStaticModifier(node) { return hasModifier(node, 32); } ts.hasStaticModifier = hasStaticModifier; function hasReadonlyModifier(node) { return hasModifier(node, 64); } ts.hasReadonlyModifier = hasReadonlyModifier; function getSelectedModifierFlags(node, flags) { return getModifierFlags(node) & flags; } ts.getSelectedModifierFlags = getSelectedModifierFlags; function getModifierFlags(node) { if (node.modifierFlagsCache & 536870912) { return node.modifierFlagsCache & ~536870912; } var flags = getModifierFlagsNoCache(node); node.modifierFlagsCache = flags | 536870912; return flags; } ts.getModifierFlags = getModifierFlags; function getModifierFlagsNoCache(node) { 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 || (node.kind === 71 && node.isInJSDocNamespace)) { flags |= 1; } return flags; } ts.getModifierFlagsNoCache = getModifierFlagsNoCache; function modifierToFlag(token) { switch (token) { 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; } ts.modifierToFlag = modifierToFlag; function isLogicalOperator(token) { return token === 54 || token === 53 || token === 51; } ts.isLogicalOperator = isLogicalOperator; function isAssignmentOperator(token) { return token >= 58 && token <= 70; } ts.isAssignmentOperator = isAssignmentOperator; function tryGetClassExtendingExpressionWithTypeArguments(node) { if (ts.isExpressionWithTypeArguments(node) && node.parent.token === 85 && ts.isClassLike(node.parent.parent)) { return node.parent.parent; } } ts.tryGetClassExtendingExpressionWithTypeArguments = tryGetClassExtendingExpressionWithTypeArguments; function isAssignmentExpression(node, excludeCompoundAssignment) { return ts.isBinaryExpression(node) && (excludeCompoundAssignment ? node.operatorToken.kind === 58 : isAssignmentOperator(node.operatorToken.kind)) && ts.isLeftHandSideExpression(node.left); } ts.isAssignmentExpression = isAssignmentExpression; function isDestructuringAssignment(node) { if (isAssignmentExpression(node, true)) { var kind = node.left.kind; return kind === 184 || kind === 183; } return false; } ts.isDestructuringAssignment = isDestructuringAssignment; function isExpressionWithTypeArgumentsInClassExtendsClause(node) { return tryGetClassExtendingExpressionWithTypeArguments(node) !== undefined; } ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause; function isExpressionWithTypeArgumentsInClassImplementsClause(node) { return node.kind === 207 && isEntityNameExpression(node.expression) && node.parent && node.parent.token === 108 && node.parent.parent && ts.isClassLike(node.parent.parent); } ts.isExpressionWithTypeArgumentsInClassImplementsClause = isExpressionWithTypeArgumentsInClassImplementsClause; function isEntityNameExpression(node) { return node.kind === 71 || isPropertyAccessEntityNameExpression(node); } ts.isEntityNameExpression = isEntityNameExpression; function isPropertyAccessEntityNameExpression(node) { return ts.isPropertyAccessExpression(node) && isEntityNameExpression(node.expression); } ts.isPropertyAccessEntityNameExpression = isPropertyAccessEntityNameExpression; function isPrototypeAccess(node) { return ts.isPropertyAccessExpression(node) && node.name.escapedText === "prototype"; } ts.isPrototypeAccess = isPrototypeAccess; function isRightSideOfQualifiedNameOrPropertyAccess(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 && expression.properties.length === 0; } ts.isEmptyObjectLiteral = isEmptyObjectLiteral; function isEmptyArrayLiteral(expression) { return expression.kind === 183 && expression.elements.length === 0; } ts.isEmptyArrayLiteral = isEmptyArrayLiteral; function getLocalSymbolForExportDefault(symbol) { return isExportDefaultSymbol(symbol) ? symbol.declarations[0].localSymbol : undefined; } ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault; function isExportDefaultSymbol(symbol) { return symbol && ts.length(symbol.declarations) > 0 && hasModifier(symbol.declarations[0], 512); } function tryExtractTypeScriptExtension(fileName) { return ts.find(ts.supportedTypescriptExtensionsForExtractExtension, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.tryExtractTypeScriptExtension = tryExtractTypeScriptExtension; function getExpandedCharCodes(input) { var output = []; var length = input.length; for (var i = 0; i < length; i++) { var charCode = input.charCodeAt(i); if (charCode < 0x80) { output.push(charCode); } else if (charCode < 0x800) { output.push((charCode >> 6) | 192); output.push((charCode & 63) | 128); } else if (charCode < 0x10000) { output.push((charCode >> 12) | 224); output.push(((charCode >> 6) & 63) | 128); output.push((charCode & 63) | 128); } else if (charCode < 0x20000) { output.push((charCode >> 18) | 240); output.push(((charCode >> 12) & 63) | 128); output.push(((charCode >> 6) & 63) | 128); output.push((charCode & 63) | 128); } else { ts.Debug.assert(false, "Unexpected code point"); } } return output; } var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; function convertToBase64(input) { var result = ""; var charCodes = getExpandedCharCodes(input); var i = 0; var length = charCodes.length; var byte1, byte2, byte3, byte4; while (i < length) { 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; if (i + 1 >= length) { byte3 = byte4 = 64; } else if (i + 2 >= length) { byte4 = 64; } result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4); i += 3; } return result; } ts.convertToBase64 = convertToBase64; function getStringFromExpandedCharCodes(codes) { var output = ""; var i = 0; var length = codes.length; while (i < length) { var charCode = codes[i]; if (charCode < 0x80) { output += String.fromCharCode(charCode); i++; } else if ((charCode & 192) === 192) { var value = charCode & 63; i++; var nextCode = codes[i]; while ((nextCode & 192) === 128) { value = (value << 6) | (nextCode & 63); i++; nextCode = codes[i]; } output += String.fromCharCode(value); } else { output += String.fromCharCode(charCode); i++; } } return output; } function base64encode(host, input) { if (host && host.base64encode) { return host.base64encode(input); } return convertToBase64(input); } ts.base64encode = base64encode; function base64decode(host, input) { if (host && host.base64decode) { return host.base64decode(input); } var length = input.length; var expandedCharCodes = []; var i = 0; while (i < length) { if (input.charCodeAt(i) === base64Digits.charCodeAt(64)) { break; } var ch1 = base64Digits.indexOf(input[i]); var ch2 = base64Digits.indexOf(input[i + 1]); var ch3 = base64Digits.indexOf(input[i + 2]); var ch4 = base64Digits.indexOf(input[i + 3]); 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) { expandedCharCodes.push(code1); } else if (code3 === 0 && ch4 !== 0) { expandedCharCodes.push(code1, code2); } else { expandedCharCodes.push(code1, code2, code3); } i += 4; } return getStringFromExpandedCharCodes(expandedCharCodes); } ts.base64decode = base64decode; var carriageReturnLineFeed = "\r\n"; var lineFeed = "\n"; function getNewLineCharacter(options, getNewLine) { switch (options.newLine) { case 0: return carriageReturnLineFeed; case 1: return lineFeed; } return getNewLine ? getNewLine() : ts.sys ? ts.sys.newLine : carriageReturnLineFeed; } ts.getNewLineCharacter = getNewLineCharacter; function formatEnum(value, enumObject, isFlags) { if (value === void 0) { value = 0; } var members = getEnumMembers(enumObject); if (value === 0) { return members.length > 0 && members[0][0] === 0 ? members[0][1] : "0"; } if (isFlags) { var result = ""; var remainingFlags = value; for (var i = members.length - 1; i >= 0 && remainingFlags !== 0; i--) { var _a = members[i], enumValue = _a[0], enumName = _a[1]; if (enumValue !== 0 && (remainingFlags & enumValue) === enumValue) { remainingFlags &= ~enumValue; result = "" + enumName + (result ? ", " : "") + result; } } if (remainingFlags === 0) { return result; } } else { for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { var _b = members_1[_i], enumValue = _b[0], enumName = _b[1]; if (enumValue === value) { return enumName; } } } return value.toString(); } function getEnumMembers(enumObject) { var result = []; for (var name in enumObject) { var value = enumObject[name]; if (typeof value === "number") { result.push([value, name]); } } return ts.stableSort(result, function (x, y) { return ts.compareValues(x[0], y[0]); }); } function formatSyntaxKind(kind) { return formatEnum(kind, ts.SyntaxKind, false); } ts.formatSyntaxKind = formatSyntaxKind; function formatModifierFlags(flags) { return formatEnum(flags, ts.ModifierFlags, true); } ts.formatModifierFlags = formatModifierFlags; function formatTransformFlags(flags) { return formatEnum(flags, ts.TransformFlags, true); } ts.formatTransformFlags = formatTransformFlags; function formatEmitFlags(flags) { return formatEnum(flags, ts.EmitFlags, true); } ts.formatEmitFlags = formatEmitFlags; function formatSymbolFlags(flags) { return formatEnum(flags, ts.SymbolFlags, true); } ts.formatSymbolFlags = formatSymbolFlags; function formatTypeFlags(flags) { return formatEnum(flags, ts.TypeFlags, true); } ts.formatTypeFlags = formatTypeFlags; function formatObjectFlags(flags) { return formatEnum(flags, ts.ObjectFlags, true); } ts.formatObjectFlags = formatObjectFlags; function createRange(pos, end) { return { pos: pos, end: end }; } ts.createRange = createRange; function moveRangeEnd(range, end) { return createRange(range.pos, end); } ts.moveRangeEnd = moveRangeEnd; function moveRangePos(range, pos) { return createRange(pos, range.end); } ts.moveRangePos = moveRangePos; function moveRangePastDecorators(node) { return node.decorators && node.decorators.length > 0 ? moveRangePos(node, node.decorators.end) : node; } ts.moveRangePastDecorators = moveRangePastDecorators; function moveRangePastModifiers(node) { return node.modifiers && node.modifiers.length > 0 ? moveRangePos(node, node.modifiers.end) : moveRangePastDecorators(node); } ts.moveRangePastModifiers = moveRangePastModifiers; function isCollapsedRange(range) { return range.pos === range.end; } ts.isCollapsedRange = isCollapsedRange; function createTokenRange(pos, token) { return createRange(pos, pos + ts.tokenToString(token).length); } ts.createTokenRange = createTokenRange; function rangeIsOnSingleLine(range, sourceFile) { return rangeStartIsOnSameLineAsRangeEnd(range, range, sourceFile); } ts.rangeIsOnSingleLine = rangeIsOnSingleLine; function rangeStartPositionsAreOnSameLine(range1, range2, sourceFile) { return positionsAreOnSameLine(getStartPositionOfRange(range1, sourceFile), getStartPositionOfRange(range2, sourceFile), sourceFile); } ts.rangeStartPositionsAreOnSameLine = rangeStartPositionsAreOnSameLine; function rangeEndPositionsAreOnSameLine(range1, range2, sourceFile) { return positionsAreOnSameLine(range1.end, range2.end, sourceFile); } ts.rangeEndPositionsAreOnSameLine = rangeEndPositionsAreOnSameLine; function rangeStartIsOnSameLineAsRangeEnd(range1, range2, sourceFile) { return positionsAreOnSameLine(getStartPositionOfRange(range1, sourceFile), range2.end, sourceFile); } ts.rangeStartIsOnSameLineAsRangeEnd = rangeStartIsOnSameLineAsRangeEnd; function rangeEndIsOnSameLineAsRangeStart(range1, range2, sourceFile) { return positionsAreOnSameLine(range1.end, getStartPositionOfRange(range2, sourceFile), sourceFile); } ts.rangeEndIsOnSameLineAsRangeStart = rangeEndIsOnSameLineAsRangeStart; function positionsAreOnSameLine(pos1, pos2, sourceFile) { return pos1 === pos2 || getLineOfLocalPosition(sourceFile, pos1) === getLineOfLocalPosition(sourceFile, pos2); } ts.positionsAreOnSameLine = positionsAreOnSameLine; function getStartPositionOfRange(range, sourceFile) { return ts.positionIsSynthesized(range.pos) ? -1 : ts.skipTrivia(sourceFile.text, range.pos); } ts.getStartPositionOfRange = getStartPositionOfRange; function isDeclarationNameOfEnumOrNamespace(node) { var parseNode = ts.getParseTreeNode(node); if (parseNode) { switch (parseNode.parent.kind) { case 238: case 239: return parseNode === parseNode.parent.name; } } return false; } ts.isDeclarationNameOfEnumOrNamespace = isDeclarationNameOfEnumOrNamespace; function getInitializedVariables(node) { return ts.filter(node.declarations, isInitializedVariable); } ts.getInitializedVariables = getInitializedVariables; function isInitializedVariable(node) { return node.initializer !== undefined; } function isWatchSet(options) { return options.watch && options.hasOwnProperty("watch"); } ts.isWatchSet = isWatchSet; function closeFileWatcher(watcher) { watcher.close(); } ts.closeFileWatcher = closeFileWatcher; function getCheckFlags(symbol) { 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 ? flags : flags & ~28; } if (getCheckFlags(s) & 6) { var checkFlags = s.checkFlags; var accessModifier = checkFlags & 256 ? 8 : checkFlags & 64 ? 4 : 16; var staticModifier = checkFlags & 512 ? 32 : 0; return accessModifier | staticModifier; } if (s.flags & 4194304) { return 4 | 32; } return 0; } ts.getDeclarationModifierFlagsFromSymbol = getDeclarationModifierFlagsFromSymbol; function skipAlias(symbol, checker) { return symbol.flags & 2097152 ? checker.getAliasedSymbol(symbol) : symbol; } ts.skipAlias = skipAlias; function getCombinedLocalAndExportSymbolFlags(symbol) { return symbol.exportSymbol ? symbol.exportSymbol.flags | symbol.flags : symbol.flags; } ts.getCombinedLocalAndExportSymbolFlags = getCombinedLocalAndExportSymbolFlags; function isWriteOnlyAccess(node) { return accessKind(node) === 1; } ts.isWriteOnlyAccess = isWriteOnlyAccess; function isWriteAccess(node) { return accessKind(node) !== 0; } ts.isWriteAccess = isWriteAccess; var AccessKind; (function (AccessKind) { AccessKind[AccessKind["Read"] = 0] = "Read"; AccessKind[AccessKind["Write"] = 1] = "Write"; AccessKind[AccessKind["ReadWrite"] = 2] = "ReadWrite"; })(AccessKind || (AccessKind = {})); function accessKind(node) { var parent = node.parent; if (!parent) return 0; switch (parent.kind) { case 199: case 198: var operator = parent.operator; 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; case 185: return parent.name !== node ? 0 : accessKind(parent); default: return 0; } function writeOrReadWrite() { return parent.parent && parent.parent.kind === 216 ? 1 : 2; } } function compareDataObjects(dst, src) { if (!dst || !src || Object.keys(dst).length !== Object.keys(src).length) { return false; } for (var e in dst) { if (typeof dst[e] === "object") { if (!compareDataObjects(dst[e], src[e])) { return false; } } else if (typeof dst[e] !== "function") { if (dst[e] !== src[e]) { return false; } } } return true; } ts.compareDataObjects = compareDataObjects; function clearMap(map, onDeleteValue) { map.forEach(onDeleteValue); map.clear(); } ts.clearMap = clearMap; function mutateMap(map, newMap, options) { var createNewValue = options.createNewValue, onDeleteValue = options.onDeleteValue, onExistingValue = options.onExistingValue; map.forEach(function (existingValue, key) { var valueInNewMap = newMap.get(key); if (valueInNewMap === undefined) { map.delete(key); onDeleteValue(existingValue, key); } else if (onExistingValue) { onExistingValue(existingValue, valueInNewMap, key); } }); newMap.forEach(function (valueInNewMap, key) { if (!map.has(key)) { map.set(key, createNewValue(key, valueInNewMap)); } }); } ts.mutateMap = mutateMap; function forEachAncestorDirectory(directory, callback) { while (true) { var result = callback(directory); if (result !== undefined) { return result; } var parentPath = ts.getDirectoryPath(directory); if (parentPath === directory) { return undefined; } directory = parentPath; } } ts.forEachAncestorDirectory = forEachAncestorDirectory; function isAbstractConstructorType(type) { return !!(getObjectFlags(type) & 16) && !!type.symbol && isAbstractConstructorSymbol(type.symbol); } ts.isAbstractConstructorType = isAbstractConstructorType; function isAbstractConstructorSymbol(symbol) { if (symbol.flags & 32) { var declaration = getClassLikeDeclarationOfSymbol(symbol); return !!declaration && hasModifier(declaration, 128); } return false; } ts.isAbstractConstructorSymbol = isAbstractConstructorSymbol; function getClassLikeDeclarationOfSymbol(symbol) { return ts.find(symbol.declarations, ts.isClassLike); } ts.getClassLikeDeclarationOfSymbol = getClassLikeDeclarationOfSymbol; function getObjectFlags(type) { return type.flags & 131072 ? type.objectFlags : 0; } ts.getObjectFlags = getObjectFlags; function typeHasCallOrConstructSignatures(type, checker) { return checker.getSignaturesOfType(type, 0).length !== 0 || checker.getSignaturesOfType(type, 1).length !== 0; } ts.typeHasCallOrConstructSignatures = typeHasCallOrConstructSignatures; function forSomeAncestorDirectory(directory, callback) { return !!forEachAncestorDirectory(directory, function (d) { return callback(d) ? true : undefined; }); } ts.forSomeAncestorDirectory = forSomeAncestorDirectory; function isUMDExportSymbol(symbol) { return symbol && symbol.declarations && symbol.declarations[0] && ts.isNamespaceExportDeclaration(symbol.declarations[0]); } ts.isUMDExportSymbol = isUMDExportSymbol; function showModuleSpecifier(_a) { var moduleSpecifier = _a.moduleSpecifier; return ts.isStringLiteral(moduleSpecifier) ? moduleSpecifier.text : getTextOfNode(moduleSpecifier); } ts.showModuleSpecifier = showModuleSpecifier; function getLastChild(node) { var lastChild; ts.forEachChild(node, function (child) { if (nodeIsPresent(child)) lastChild = child; }, function (children) { for (var i = children.length - 1; i >= 0; i--) { if (nodeIsPresent(children[i])) { lastChild = children[i]; break; } } }); return lastChild; } ts.getLastChild = getLastChild; function addToSeen(seen, key, value) { if (value === void 0) { value = true; } key = String(key); if (seen.has(key)) { return false; } seen.set(key, value); return true; } ts.addToSeen = addToSeen; function isObjectTypeDeclaration(node) { return ts.isClassLike(node) || ts.isInterfaceDeclaration(node) || ts.isTypeLiteralNode(node); } ts.isObjectTypeDeclaration = isObjectTypeDeclaration; })(ts || (ts = {})); (function (ts) { function getDefaultLibFileName(options) { switch (options.target) { case 6: return "lib.esnext.full.d.ts"; case 5: return "lib.es2018.full.d.ts"; case 4: return "lib.es2017.full.d.ts"; case 3: return "lib.es2016.full.d.ts"; case 2: return "lib.es6.d.ts"; default: return "lib.d.ts"; } } ts.getDefaultLibFileName = getDefaultLibFileName; function textSpanEnd(span) { return span.start + span.length; } ts.textSpanEnd = textSpanEnd; function textSpanIsEmpty(span) { return span.length === 0; } ts.textSpanIsEmpty = textSpanIsEmpty; function textSpanContainsPosition(span, position) { return position >= span.start && position < textSpanEnd(span); } ts.textSpanContainsPosition = textSpanContainsPosition; function textSpanContainsTextSpan(span, other) { return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); } ts.textSpanContainsTextSpan = textSpanContainsTextSpan; function textSpanOverlapsWith(span, other) { return textSpanOverlap(span, other) !== undefined; } ts.textSpanOverlapsWith = textSpanOverlapsWith; function textSpanOverlap(span1, span2) { var overlap = textSpanIntersection(span1, span2); return overlap && overlap.length === 0 ? undefined : overlap; } ts.textSpanOverlap = textSpanOverlap; function textSpanIntersectsWithTextSpan(span, other) { return decodedTextSpanIntersectsWith(span.start, span.length, other.start, other.length); } ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan; function textSpanIntersectsWith(span, start, length) { return decodedTextSpanIntersectsWith(span.start, span.length, start, length); } ts.textSpanIntersectsWith = textSpanIntersectsWith; function decodedTextSpanIntersectsWith(start1, length1, start2, length2) { var end1 = start1 + length1; var end2 = start2 + length2; return start2 <= end1 && end2 >= start1; } ts.decodedTextSpanIntersectsWith = decodedTextSpanIntersectsWith; function textSpanIntersectsWithPosition(span, position) { return position <= textSpanEnd(span) && position >= span.start; } ts.textSpanIntersectsWithPosition = textSpanIntersectsWithPosition; function textSpanIntersection(span1, span2) { var start = Math.max(span1.start, span2.start); var end = Math.min(textSpanEnd(span1), textSpanEnd(span2)); return start <= end ? createTextSpanFromBounds(start, end) : undefined; } ts.textSpanIntersection = textSpanIntersection; function createTextSpan(start, length) { if (start < 0) { throw new Error("start < 0"); } if (length < 0) { throw new Error("length < 0"); } return { start: start, length: length }; } ts.createTextSpan = createTextSpan; function createTextRange(pos, end) { if (end === void 0) { end = pos; } ts.Debug.assert(end >= pos); return { pos: pos, end: end }; } ts.createTextRange = createTextRange; function createTextSpanFromBounds(start, end) { return createTextSpan(start, end - start); } ts.createTextSpanFromBounds = createTextSpanFromBounds; function textChangeRangeNewSpan(range) { return createTextSpan(range.span.start, range.newLength); } ts.textChangeRangeNewSpan = textChangeRangeNewSpan; function textChangeRangeIsUnchanged(range) { return textSpanIsEmpty(range.span) && range.newLength === 0; } ts.textChangeRangeIsUnchanged = textChangeRangeIsUnchanged; function createTextChangeRange(span, newLength) { if (newLength < 0) { throw new Error("newLength < 0"); } return { span: span, newLength: newLength }; } ts.createTextChangeRange = createTextChangeRange; ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0); function collapseTextChangeRangesAcrossMultipleVersions(changes) { if (changes.length === 0) { return ts.unchangedTextChangeRange; } if (changes.length === 1) { return changes[0]; } 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]; var oldStart1 = oldStartN; var oldEnd1 = oldEndN; var newEnd1 = newEndN; var oldStart2 = nextChange.span.start; var oldEnd2 = textSpanEnd(nextChange.span); var newEnd2 = oldStart2 + nextChange.newLength; oldStartN = Math.min(oldStart1, oldStart2); oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); } return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN); } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { if (d && d.kind === 148) { for (var current = d; current; current = current.parent) { if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 236) { return current; } } } } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { return ts.hasModifier(node, 92) && node.parent.kind === 155; } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function isEmptyBindingPattern(node) { if (ts.isBindingPattern(node)) { return ts.every(node.elements, isEmptyBindingElement); } return false; } ts.isEmptyBindingPattern = isEmptyBindingPattern; function isEmptyBindingElement(node) { if (ts.isOmittedExpression(node)) { return true; } return isEmptyBindingPattern(node.name); } ts.isEmptyBindingElement = isEmptyBindingElement; function walkUpBindingElementsAndPatterns(node) { while (node && (node.kind === 182 || ts.isBindingPattern(node))) { node = node.parent; } return node; } function getCombinedModifierFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = ts.getModifierFlags(node); if (node.kind === 232) { node = node.parent; } if (node && node.kind === 233) { flags |= ts.getModifierFlags(node); node = node.parent; } if (node && node.kind === 214) { flags |= ts.getModifierFlags(node); } return flags; } ts.getCombinedModifierFlags = getCombinedModifierFlags; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; if (node.kind === 232) { node = node.parent; } if (node && node.kind === 233) { flags |= node.flags; node = node.parent; } if (node && node.kind === 214) { flags |= node.flags; } return flags; } ts.getCombinedNodeFlags = getCombinedNodeFlags; function validateLocaleAndSetLanguage(locale, sys, errors) { var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase()); if (!matchResult) { if (errors) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp")); } return; } var language = matchResult[1]; var territory = matchResult[3]; if (!trySetLanguageAndTerritory(language, territory, errors)) { trySetLanguageAndTerritory(language, undefined, errors); } ts.setUILocale(locale); function trySetLanguageAndTerritory(language, territory, errors) { var compilerFilePath = ts.normalizePath(sys.getExecutingFilePath()); var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath); var filePath = ts.combinePaths(containingDirectoryPath, language); if (territory) { filePath = filePath + "-" + territory; } filePath = sys.resolvePath(ts.combinePaths(filePath, "diagnosticMessages.generated.json")); if (!sys.fileExists(filePath)) { return false; } var fileContents = ""; try { fileContents = sys.readFile(filePath); } catch (e) { if (errors) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, filePath)); } return false; } try { ts.localizedDiagnosticMessages = JSON.parse(fileContents); } catch (_a) { if (errors) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Corrupted_locale_file_0, filePath)); } return false; } return true; } } ts.validateLocaleAndSetLanguage = validateLocaleAndSetLanguage; function getOriginalNode(node, nodeTest) { if (node) { while (node.original !== undefined) { node = node.original; } } return !nodeTest || nodeTest(node) ? node : undefined; } ts.getOriginalNode = getOriginalNode; function isParseTreeNode(node) { return (node.flags & 8) === 0; } ts.isParseTreeNode = isParseTreeNode; function getParseTreeNode(node, nodeTest) { if (node === undefined || isParseTreeNode(node)) { return node; } node = getOriginalNode(node); if (isParseTreeNode(node) && (!nodeTest || nodeTest(node))) { return node; } return undefined; } ts.getParseTreeNode = getParseTreeNode; 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; } ts.unescapeLeadingUnderscores = unescapeLeadingUnderscores; function idText(identifier) { return unescapeLeadingUnderscores(identifier.escapedText); } ts.idText = idText; function symbolName(symbol) { return unescapeLeadingUnderscores(symbol.escapedName); } ts.symbolName = symbolName; function unescapeIdentifier(id) { return id; } ts.unescapeIdentifier = unescapeIdentifier; function nameForNamelessJSDocTypedef(declaration) { var hostNode = declaration.parent.parent; if (!hostNode) { return undefined; } if (ts.isDeclaration(hostNode)) { return getDeclarationIdentifier(hostNode); } switch (hostNode.kind) { case 214: if (hostNode.declarationList && hostNode.declarationList.declarations[0]) { return getDeclarationIdentifier(hostNode.declarationList.declarations[0]); } return undefined; case 216: var expr = hostNode.expression; switch (expr.kind) { case 185: return expr.name; case 186: var arg = expr.argumentExpression; if (ts.isIdentifier(arg)) { return arg; } } return undefined; case 1: return undefined; case 191: { return getDeclarationIdentifier(hostNode.expression); } case 228: { if (ts.isDeclaration(hostNode.statement) || ts.isExpression(hostNode.statement)) { return getDeclarationIdentifier(hostNode.statement); } return undefined; } default: ts.Debug.assertNever(hostNode, "Found typedef tag attached to node which it should not be!"); } } function getDeclarationIdentifier(node) { var name = getNameOfDeclaration(node); return ts.isIdentifier(name) ? name : undefined; } function getNameOfJSDocTypedef(declaration) { return declaration.name || nameForNamelessJSDocTypedef(declaration); } ts.getNameOfJSDocTypedef = getNameOfJSDocTypedef; function isNamedDeclaration(node) { return !!node.name; } ts.isNamedDeclaration = isNamedDeclaration; function getNameOfDeclaration(declaration) { if (!declaration) { return undefined; } switch (declaration.kind) { case 205: case 192: if (!declaration.name) { return getAssignedName(declaration); } break; case 71: return declaration; case 299: case 293: { var name = declaration.name; if (name.kind === 146) { return name.right; } break; } case 200: { var expr = declaration; switch (ts.getSpecialPropertyAssignmentKind(expr)) { case 1: case 4: case 5: case 3: return expr.left.name; default: return undefined; } } case 292: return declaration.name; case 298: return getNameOfJSDocTypedef(declaration); case 249: { var expression = declaration.expression; return ts.isIdentifier(expression) ? expression : undefined; } } return declaration.name; } ts.getNameOfDeclaration = getNameOfDeclaration; function getAssignedName(node) { if (!node.parent) { return undefined; } else if (ts.isPropertyAssignment(node.parent) || ts.isBindingElement(node.parent)) { return node.parent.name; } else if (ts.isBinaryExpression(node.parent) && node === node.parent.right) { if (ts.isIdentifier(node.parent.left)) { return node.parent.left; } else if (ts.isPropertyAccessExpression(node.parent.left)) { return node.parent.left.name; } } } function getJSDocParameterTags(param) { if (param.name) { if (ts.isIdentifier(param.name)) { var name_1 = param.name.escapedText; return getJSDocTags(param.parent).filter(function (tag) { return ts.isJSDocParameterTag(tag) && ts.isIdentifier(tag.name) && tag.name.escapedText === name_1; }); } else { var i = param.parent.parameters.indexOf(param); ts.Debug.assert(i > -1, "Parameters should always be in their parents' parameter list"); var paramTags = getJSDocTags(param.parent).filter(ts.isJSDocParameterTag); if (i < paramTags.length) { return [paramTags[i]]; } } } return ts.emptyArray; } ts.getJSDocParameterTags = getJSDocParameterTags; function hasJSDocParameterTags(node) { return !!getFirstJSDocTag(node, ts.isJSDocParameterTag); } ts.hasJSDocParameterTags = hasJSDocParameterTags; function getJSDocAugmentsTag(node) { return getFirstJSDocTag(node, ts.isJSDocAugmentsTag); } ts.getJSDocAugmentsTag = getJSDocAugmentsTag; function getJSDocClassTag(node) { return getFirstJSDocTag(node, ts.isJSDocClassTag); } ts.getJSDocClassTag = getJSDocClassTag; function getJSDocThisTag(node) { return getFirstJSDocTag(node, ts.isJSDocThisTag); } ts.getJSDocThisTag = getJSDocThisTag; function getJSDocReturnTag(node) { return getFirstJSDocTag(node, ts.isJSDocReturnTag); } ts.getJSDocReturnTag = getJSDocReturnTag; function getJSDocTemplateTag(node) { return getFirstJSDocTag(node, ts.isJSDocTemplateTag); } ts.getJSDocTemplateTag = getJSDocTemplateTag; function getJSDocTypeTag(node) { var tag = getFirstJSDocTag(node, ts.isJSDocTypeTag); if (tag && tag.typeExpression && tag.typeExpression.type) { return tag; } return undefined; } ts.getJSDocTypeTag = getJSDocTypeTag; function getJSDocType(node) { var tag = getFirstJSDocTag(node, ts.isJSDocTypeTag); if (!tag && ts.isParameter(node)) { tag = ts.find(getJSDocParameterTags(node), function (tag) { return !!tag.typeExpression; }); } return tag && tag.typeExpression && tag.typeExpression.type; } ts.getJSDocType = getJSDocType; function getJSDocReturnType(node) { var returnTag = getJSDocReturnTag(node); return returnTag && returnTag.typeExpression && returnTag.typeExpression.type; } ts.getJSDocReturnType = getJSDocReturnType; function getJSDocTags(node) { var tags = node.jsDocCache; if (tags === undefined) { var comments = ts.getJSDocCommentsAndTags(node); ts.Debug.assert(comments.length < 2 || comments[0] !== comments[1]); node.jsDocCache = tags = ts.flatMap(comments, function (j) { return ts.isJSDoc(j) ? j.tags : j; }); } return tags; } ts.getJSDocTags = getJSDocTags; function getFirstJSDocTag(node, predicate) { return ts.find(getJSDocTags(node), predicate); } function getAllJSDocTagsOfKind(node, kind) { return getJSDocTags(node).filter(function (doc) { return doc.kind === kind; }); } ts.getAllJSDocTagsOfKind = getAllJSDocTagsOfKind; })(ts || (ts = {})); (function (ts) { function isNumericLiteral(node) { return node.kind === 8; } ts.isNumericLiteral = isNumericLiteral; function isStringLiteral(node) { return node.kind === 9; } ts.isStringLiteral = isStringLiteral; function isJsxText(node) { return node.kind === 10; } ts.isJsxText = isJsxText; function isRegularExpressionLiteral(node) { return node.kind === 12; } ts.isRegularExpressionLiteral = isRegularExpressionLiteral; function isNoSubstitutionTemplateLiteral(node) { return node.kind === 13; } ts.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral; function isTemplateHead(node) { return node.kind === 14; } ts.isTemplateHead = isTemplateHead; function isTemplateMiddle(node) { return node.kind === 15; } ts.isTemplateMiddle = isTemplateMiddle; function isTemplateTail(node) { return node.kind === 16; } ts.isTemplateTail = isTemplateTail; function isIdentifier(node) { return node.kind === 71; } ts.isIdentifier = isIdentifier; function isQualifiedName(node) { return node.kind === 146; } ts.isQualifiedName = isQualifiedName; function isComputedPropertyName(node) { return node.kind === 147; } ts.isComputedPropertyName = isComputedPropertyName; function isTypeParameterDeclaration(node) { return node.kind === 148; } ts.isTypeParameterDeclaration = isTypeParameterDeclaration; function isParameter(node) { return node.kind === 149; } ts.isParameter = isParameter; function isDecorator(node) { return node.kind === 150; } ts.isDecorator = isDecorator; function isPropertySignature(node) { return node.kind === 151; } ts.isPropertySignature = isPropertySignature; function isPropertyDeclaration(node) { return node.kind === 152; } ts.isPropertyDeclaration = isPropertyDeclaration; function isMethodSignature(node) { return node.kind === 153; } ts.isMethodSignature = isMethodSignature; function isMethodDeclaration(node) { return node.kind === 154; } ts.isMethodDeclaration = isMethodDeclaration; function isConstructorDeclaration(node) { return node.kind === 155; } ts.isConstructorDeclaration = isConstructorDeclaration; function isGetAccessorDeclaration(node) { return node.kind === 156; } ts.isGetAccessorDeclaration = isGetAccessorDeclaration; function isSetAccessorDeclaration(node) { return node.kind === 157; } ts.isSetAccessorDeclaration = isSetAccessorDeclaration; function isCallSignatureDeclaration(node) { return node.kind === 158; } ts.isCallSignatureDeclaration = isCallSignatureDeclaration; function isConstructSignatureDeclaration(node) { return node.kind === 159; } ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration; function isIndexSignatureDeclaration(node) { return node.kind === 160; } ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration; function isGetOrSetAccessorDeclaration(node) { return node.kind === 157 || node.kind === 156; } ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration; function isTypePredicateNode(node) { return node.kind === 161; } ts.isTypePredicateNode = isTypePredicateNode; function isTypeReferenceNode(node) { return node.kind === 162; } ts.isTypeReferenceNode = isTypeReferenceNode; function isFunctionTypeNode(node) { return node.kind === 163; } ts.isFunctionTypeNode = isFunctionTypeNode; function isConstructorTypeNode(node) { return node.kind === 164; } ts.isConstructorTypeNode = isConstructorTypeNode; function isTypeQueryNode(node) { return node.kind === 165; } ts.isTypeQueryNode = isTypeQueryNode; function isTypeLiteralNode(node) { return node.kind === 166; } ts.isTypeLiteralNode = isTypeLiteralNode; function isArrayTypeNode(node) { return node.kind === 167; } ts.isArrayTypeNode = isArrayTypeNode; function isTupleTypeNode(node) { return node.kind === 168; } ts.isTupleTypeNode = isTupleTypeNode; function isUnionTypeNode(node) { return node.kind === 169; } ts.isUnionTypeNode = isUnionTypeNode; function isIntersectionTypeNode(node) { return node.kind === 170; } ts.isIntersectionTypeNode = isIntersectionTypeNode; function isConditionalTypeNode(node) { return node.kind === 171; } ts.isConditionalTypeNode = isConditionalTypeNode; function isInferTypeNode(node) { return node.kind === 172; } ts.isInferTypeNode = isInferTypeNode; function isParenthesizedTypeNode(node) { return node.kind === 173; } ts.isParenthesizedTypeNode = isParenthesizedTypeNode; function isThisTypeNode(node) { return node.kind === 174; } ts.isThisTypeNode = isThisTypeNode; function isTypeOperatorNode(node) { return node.kind === 175; } ts.isTypeOperatorNode = isTypeOperatorNode; function isIndexedAccessTypeNode(node) { return node.kind === 176; } ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode; function isMappedTypeNode(node) { return node.kind === 177; } ts.isMappedTypeNode = isMappedTypeNode; function isLiteralTypeNode(node) { return node.kind === 178; } ts.isLiteralTypeNode = isLiteralTypeNode; function isImportTypeNode(node) { return node.kind === 179; } ts.isImportTypeNode = isImportTypeNode; function isObjectBindingPattern(node) { return node.kind === 180; } ts.isObjectBindingPattern = isObjectBindingPattern; function isArrayBindingPattern(node) { return node.kind === 181; } ts.isArrayBindingPattern = isArrayBindingPattern; function isBindingElement(node) { return node.kind === 182; } ts.isBindingElement = isBindingElement; function isArrayLiteralExpression(node) { return node.kind === 183; } ts.isArrayLiteralExpression = isArrayLiteralExpression; function isObjectLiteralExpression(node) { return node.kind === 184; } ts.isObjectLiteralExpression = isObjectLiteralExpression; function isPropertyAccessExpression(node) { return node.kind === 185; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { return node.kind === 186; } ts.isElementAccessExpression = isElementAccessExpression; function isCallExpression(node) { return node.kind === 187; } ts.isCallExpression = isCallExpression; function isNewExpression(node) { return node.kind === 188; } ts.isNewExpression = isNewExpression; function isTaggedTemplateExpression(node) { return node.kind === 189; } ts.isTaggedTemplateExpression = isTaggedTemplateExpression; function isTypeAssertion(node) { return node.kind === 190; } ts.isTypeAssertion = isTypeAssertion; function isParenthesizedExpression(node) { return node.kind === 191; } ts.isParenthesizedExpression = isParenthesizedExpression; function skipPartiallyEmittedExpressions(node) { while (node.kind === 302) { node = node.expression; } return node; } ts.skipPartiallyEmittedExpressions = skipPartiallyEmittedExpressions; function isFunctionExpression(node) { return node.kind === 192; } ts.isFunctionExpression = isFunctionExpression; function isArrowFunction(node) { return node.kind === 193; } ts.isArrowFunction = isArrowFunction; function isDeleteExpression(node) { return node.kind === 194; } ts.isDeleteExpression = isDeleteExpression; function isTypeOfExpression(node) { return node.kind === 195; } ts.isTypeOfExpression = isTypeOfExpression; function isVoidExpression(node) { return node.kind === 196; } ts.isVoidExpression = isVoidExpression; function isAwaitExpression(node) { return node.kind === 197; } ts.isAwaitExpression = isAwaitExpression; function isPrefixUnaryExpression(node) { return node.kind === 198; } ts.isPrefixUnaryExpression = isPrefixUnaryExpression; function isPostfixUnaryExpression(node) { return node.kind === 199; } ts.isPostfixUnaryExpression = isPostfixUnaryExpression; function isBinaryExpression(node) { return node.kind === 200; } ts.isBinaryExpression = isBinaryExpression; function isConditionalExpression(node) { return node.kind === 201; } ts.isConditionalExpression = isConditionalExpression; function isTemplateExpression(node) { return node.kind === 202; } ts.isTemplateExpression = isTemplateExpression; function isYieldExpression(node) { return node.kind === 203; } ts.isYieldExpression = isYieldExpression; function isSpreadElement(node) { return node.kind === 204; } ts.isSpreadElement = isSpreadElement; function isClassExpression(node) { return node.kind === 205; } ts.isClassExpression = isClassExpression; function isOmittedExpression(node) { return node.kind === 206; } ts.isOmittedExpression = isOmittedExpression; function isExpressionWithTypeArguments(node) { return node.kind === 207; } ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments; function isAsExpression(node) { return node.kind === 208; } ts.isAsExpression = isAsExpression; function isNonNullExpression(node) { return node.kind === 209; } ts.isNonNullExpression = isNonNullExpression; function isMetaProperty(node) { return node.kind === 210; } ts.isMetaProperty = isMetaProperty; function isTemplateSpan(node) { return node.kind === 211; } ts.isTemplateSpan = isTemplateSpan; function isSemicolonClassElement(node) { return node.kind === 212; } ts.isSemicolonClassElement = isSemicolonClassElement; function isBlock(node) { return node.kind === 213; } ts.isBlock = isBlock; function isVariableStatement(node) { return node.kind === 214; } ts.isVariableStatement = isVariableStatement; function isEmptyStatement(node) { return node.kind === 215; } ts.isEmptyStatement = isEmptyStatement; function isExpressionStatement(node) { return node.kind === 216; } ts.isExpressionStatement = isExpressionStatement; function isIfStatement(node) { return node.kind === 217; } ts.isIfStatement = isIfStatement; function isDoStatement(node) { return node.kind === 218; } ts.isDoStatement = isDoStatement; function isWhileStatement(node) { return node.kind === 219; } ts.isWhileStatement = isWhileStatement; function isForStatement(node) { return node.kind === 220; } ts.isForStatement = isForStatement; function isForInStatement(node) { return node.kind === 221; } ts.isForInStatement = isForInStatement; function isForOfStatement(node) { return node.kind === 222; } ts.isForOfStatement = isForOfStatement; function isContinueStatement(node) { return node.kind === 223; } ts.isContinueStatement = isContinueStatement; function isBreakStatement(node) { return node.kind === 224; } ts.isBreakStatement = isBreakStatement; function isBreakOrContinueStatement(node) { return node.kind === 224 || node.kind === 223; } ts.isBreakOrContinueStatement = isBreakOrContinueStatement; function isReturnStatement(node) { return node.kind === 225; } ts.isReturnStatement = isReturnStatement; function isWithStatement(node) { return node.kind === 226; } ts.isWithStatement = isWithStatement; function isSwitchStatement(node) { return node.kind === 227; } ts.isSwitchStatement = isSwitchStatement; function isLabeledStatement(node) { return node.kind === 228; } ts.isLabeledStatement = isLabeledStatement; function isThrowStatement(node) { return node.kind === 229; } ts.isThrowStatement = isThrowStatement; function isTryStatement(node) { return node.kind === 230; } ts.isTryStatement = isTryStatement; function isDebuggerStatement(node) { return node.kind === 231; } ts.isDebuggerStatement = isDebuggerStatement; function isVariableDeclaration(node) { return node.kind === 232; } ts.isVariableDeclaration = isVariableDeclaration; function isVariableDeclarationList(node) { return node.kind === 233; } ts.isVariableDeclarationList = isVariableDeclarationList; function isFunctionDeclaration(node) { return node.kind === 234; } ts.isFunctionDeclaration = isFunctionDeclaration; function isClassDeclaration(node) { return node.kind === 235; } ts.isClassDeclaration = isClassDeclaration; function isInterfaceDeclaration(node) { return node.kind === 236; } ts.isInterfaceDeclaration = isInterfaceDeclaration; function isTypeAliasDeclaration(node) { return node.kind === 237; } ts.isTypeAliasDeclaration = isTypeAliasDeclaration; function isEnumDeclaration(node) { return node.kind === 238; } ts.isEnumDeclaration = isEnumDeclaration; function isModuleDeclaration(node) { return node.kind === 239; } ts.isModuleDeclaration = isModuleDeclaration; function isModuleBlock(node) { return node.kind === 240; } ts.isModuleBlock = isModuleBlock; function isCaseBlock(node) { return node.kind === 241; } ts.isCaseBlock = isCaseBlock; function isNamespaceExportDeclaration(node) { return node.kind === 242; } ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration; function isImportEqualsDeclaration(node) { return node.kind === 243; } ts.isImportEqualsDeclaration = isImportEqualsDeclaration; function isImportDeclaration(node) { return node.kind === 244; } ts.isImportDeclaration = isImportDeclaration; function isImportClause(node) { return node.kind === 245; } ts.isImportClause = isImportClause; function isNamespaceImport(node) { return node.kind === 246; } ts.isNamespaceImport = isNamespaceImport; function isNamedImports(node) { return node.kind === 247; } ts.isNamedImports = isNamedImports; function isImportSpecifier(node) { return node.kind === 248; } ts.isImportSpecifier = isImportSpecifier; function isExportAssignment(node) { return node.kind === 249; } ts.isExportAssignment = isExportAssignment; function isExportDeclaration(node) { return node.kind === 250; } ts.isExportDeclaration = isExportDeclaration; function isNamedExports(node) { return node.kind === 251; } ts.isNamedExports = isNamedExports; function isExportSpecifier(node) { return node.kind === 252; } ts.isExportSpecifier = isExportSpecifier; function isMissingDeclaration(node) { return node.kind === 253; } ts.isMissingDeclaration = isMissingDeclaration; function isExternalModuleReference(node) { return node.kind === 254; } ts.isExternalModuleReference = isExternalModuleReference; function isJsxElement(node) { return node.kind === 255; } ts.isJsxElement = isJsxElement; function isJsxSelfClosingElement(node) { return node.kind === 256; } ts.isJsxSelfClosingElement = isJsxSelfClosingElement; function isJsxOpeningElement(node) { return node.kind === 257; } ts.isJsxOpeningElement = isJsxOpeningElement; function isJsxClosingElement(node) { return node.kind === 258; } ts.isJsxClosingElement = isJsxClosingElement; function isJsxFragment(node) { return node.kind === 259; } ts.isJsxFragment = isJsxFragment; function isJsxOpeningFragment(node) { return node.kind === 260; } ts.isJsxOpeningFragment = isJsxOpeningFragment; function isJsxClosingFragment(node) { return node.kind === 261; } ts.isJsxClosingFragment = isJsxClosingFragment; function isJsxAttribute(node) { return node.kind === 262; } ts.isJsxAttribute = isJsxAttribute; function isJsxAttributes(node) { return node.kind === 263; } ts.isJsxAttributes = isJsxAttributes; function isJsxSpreadAttribute(node) { return node.kind === 264; } ts.isJsxSpreadAttribute = isJsxSpreadAttribute; function isJsxExpression(node) { return node.kind === 265; } ts.isJsxExpression = isJsxExpression; function isCaseClause(node) { return node.kind === 266; } ts.isCaseClause = isCaseClause; function isDefaultClause(node) { return node.kind === 267; } ts.isDefaultClause = isDefaultClause; function isHeritageClause(node) { return node.kind === 268; } ts.isHeritageClause = isHeritageClause; function isCatchClause(node) { return node.kind === 269; } ts.isCatchClause = isCatchClause; function isPropertyAssignment(node) { return node.kind === 270; } ts.isPropertyAssignment = isPropertyAssignment; function isShorthandPropertyAssignment(node) { return node.kind === 271; } ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment; function isSpreadAssignment(node) { return node.kind === 272; } ts.isSpreadAssignment = isSpreadAssignment; function isEnumMember(node) { return node.kind === 273; } ts.isEnumMember = isEnumMember; function isSourceFile(node) { return node.kind === 274; } ts.isSourceFile = isSourceFile; function isBundle(node) { return node.kind === 275; } ts.isBundle = isBundle; function isUnparsedSource(node) { return node.kind === 276; } ts.isUnparsedSource = isUnparsedSource; function isJSDocTypeExpression(node) { return node.kind === 278; } ts.isJSDocTypeExpression = isJSDocTypeExpression; function isJSDocAllType(node) { return node.kind === 279; } ts.isJSDocAllType = isJSDocAllType; function isJSDocUnknownType(node) { return node.kind === 280; } ts.isJSDocUnknownType = isJSDocUnknownType; function isJSDocNullableType(node) { return node.kind === 281; } ts.isJSDocNullableType = isJSDocNullableType; function isJSDocNonNullableType(node) { return node.kind === 282; } ts.isJSDocNonNullableType = isJSDocNonNullableType; function isJSDocOptionalType(node) { return node.kind === 283; } ts.isJSDocOptionalType = isJSDocOptionalType; function isJSDocFunctionType(node) { return node.kind === 284; } ts.isJSDocFunctionType = isJSDocFunctionType; function isJSDocVariadicType(node) { return node.kind === 285; } ts.isJSDocVariadicType = isJSDocVariadicType; function isJSDoc(node) { return node.kind === 286; } ts.isJSDoc = isJSDoc; function isJSDocAugmentsTag(node) { return node.kind === 290; } ts.isJSDocAugmentsTag = isJSDocAugmentsTag; function isJSDocClassTag(node) { return node.kind === 291; } ts.isJSDocClassTag = isJSDocClassTag; function isJSDocThisTag(node) { return node.kind === 295; } ts.isJSDocThisTag = isJSDocThisTag; function isJSDocParameterTag(node) { return node.kind === 293; } ts.isJSDocParameterTag = isJSDocParameterTag; function isJSDocReturnTag(node) { return node.kind === 294; } ts.isJSDocReturnTag = isJSDocReturnTag; function isJSDocTypeTag(node) { return node.kind === 296; } ts.isJSDocTypeTag = isJSDocTypeTag; function isJSDocTemplateTag(node) { return node.kind === 297; } ts.isJSDocTemplateTag = isJSDocTemplateTag; function isJSDocTypedefTag(node) { return node.kind === 298; } ts.isJSDocTypedefTag = isJSDocTypedefTag; function isJSDocPropertyTag(node) { return node.kind === 299; } ts.isJSDocPropertyTag = isJSDocPropertyTag; function isJSDocPropertyLikeTag(node) { return node.kind === 299 || node.kind === 293; } ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag; function isJSDocTypeLiteral(node) { return node.kind === 287; } ts.isJSDocTypeLiteral = isJSDocTypeLiteral; function isJSDocCallbackTag(node) { return node.kind === 292; } ts.isJSDocCallbackTag = isJSDocCallbackTag; function isJSDocSignature(node) { return node.kind === 288; } ts.isJSDocSignature = isJSDocSignature; })(ts || (ts = {})); (function (ts) { function isSyntaxList(n) { return n.kind === 300; } ts.isSyntaxList = isSyntaxList; function isNode(node) { return isNodeKind(node.kind); } ts.isNode = isNode; function isNodeKind(kind) { return kind >= 146; } ts.isNodeKind = isNodeKind; function isToken(n) { return n.kind >= 0 && n.kind <= 145; } ts.isToken = isToken; function isNodeArray(array) { return array.hasOwnProperty("pos") && array.hasOwnProperty("end"); } ts.isNodeArray = isNodeArray; function isLiteralKind(kind) { return 8 <= kind && kind <= 13; } ts.isLiteralKind = isLiteralKind; function isLiteralExpression(node) { return isLiteralKind(node.kind); } ts.isLiteralExpression = isLiteralExpression; function isTemplateLiteralKind(kind) { return 13 <= kind && kind <= 16; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isTemplateLiteralToken(node) { return isTemplateLiteralKind(node.kind); } ts.isTemplateLiteralToken = isTemplateLiteralToken; function isTemplateMiddleOrTemplateTail(node) { var kind = node.kind; return kind === 15 || kind === 16; } ts.isTemplateMiddleOrTemplateTail = isTemplateMiddleOrTemplateTail; function isStringTextContainingNode(node) { return node.kind === 9 || isTemplateLiteralKind(node.kind); } ts.isStringTextContainingNode = isStringTextContainingNode; function isGeneratedIdentifier(node) { return ts.isIdentifier(node) && (node.autoGenerateFlags & 7) > 0; } ts.isGeneratedIdentifier = isGeneratedIdentifier; function isModifierKind(token) { switch (token) { 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; function isParameterPropertyModifier(kind) { return !!(ts.modifierToFlag(kind) & 92); } ts.isParameterPropertyModifier = isParameterPropertyModifier; function isClassMemberModifier(idToken) { return isParameterPropertyModifier(idToken) || idToken === 115; } ts.isClassMemberModifier = isClassMemberModifier; function isModifier(node) { return isModifierKind(node.kind); } ts.isModifier = isModifier; function isEntityName(node) { var kind = node.kind; return kind === 146 || kind === 71; } ts.isEntityName = isEntityName; function isPropertyName(node) { var kind = node.kind; return kind === 71 || kind === 9 || kind === 8 || kind === 147; } ts.isPropertyName = isPropertyName; function isBindingName(node) { var kind = node.kind; return kind === 71 || kind === 180 || kind === 181; } ts.isBindingName = isBindingName; function isFunctionLike(node) { return node && isFunctionLikeKind(node.kind); } ts.isFunctionLike = isFunctionLike; function isFunctionLikeDeclaration(node) { return node && isFunctionLikeDeclarationKind(node.kind); } ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration; function isFunctionLikeDeclarationKind(kind) { switch (kind) { case 234: case 154: case 155: case 156: case 157: case 192: case 193: return true; default: return false; } } function isFunctionLikeKind(kind) { switch (kind) { 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; function isFunctionOrModuleBlock(node) { return ts.isSourceFile(node) || ts.isModuleBlock(node) || ts.isBlock(node) && isFunctionLike(node.parent); } ts.isFunctionOrModuleBlock = isFunctionOrModuleBlock; function isClassElement(node) { var kind = node.kind; 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 || node.kind === 205); } ts.isClassLike = isClassLike; function isAccessor(node) { return node && (node.kind === 156 || node.kind === 157); } ts.isAccessor = isAccessor; function isMethodOrAccessor(node) { switch (node.kind) { case 154: case 156: case 157: return true; default: return false; } } ts.isMethodOrAccessor = isMethodOrAccessor; function isTypeElement(node) { var kind = node.kind; return kind === 159 || kind === 158 || kind === 151 || kind === 153 || kind === 160; } ts.isTypeElement = isTypeElement; function isClassOrTypeElement(node) { return isTypeElement(node) || isClassElement(node); } ts.isClassOrTypeElement = isClassOrTypeElement; function isObjectLiteralElementLike(node) { var kind = node.kind; return kind === 270 || kind === 271 || kind === 272 || kind === 154 || kind === 156 || kind === 157; } ts.isObjectLiteralElementLike = isObjectLiteralElementLike; function isTypeNodeKind(kind) { 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; } function isTypeNode(node) { return isTypeNodeKind(node.kind); } ts.isTypeNode = isTypeNode; function isFunctionOrConstructorTypeNode(node) { switch (node.kind) { case 163: case 164: return true; } return false; } ts.isFunctionOrConstructorTypeNode = isFunctionOrConstructorTypeNode; function isBindingPattern(node) { if (node) { var kind = node.kind; return kind === 181 || kind === 180; } return false; } ts.isBindingPattern = isBindingPattern; function isAssignmentPattern(node) { var kind = node.kind; return kind === 183 || kind === 184; } ts.isAssignmentPattern = isAssignmentPattern; function isArrayBindingElement(node) { var kind = node.kind; return kind === 182 || kind === 206; } ts.isArrayBindingElement = isArrayBindingElement; function isDeclarationBindingElement(bindingElement) { switch (bindingElement.kind) { case 232: case 149: case 182: return true; } return false; } ts.isDeclarationBindingElement = isDeclarationBindingElement; function isBindingOrAssignmentPattern(node) { return isObjectBindingOrAssignmentPattern(node) || isArrayBindingOrAssignmentPattern(node); } ts.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern; function isObjectBindingOrAssignmentPattern(node) { switch (node.kind) { case 180: case 184: return true; } return false; } ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern; function isArrayBindingOrAssignmentPattern(node) { switch (node.kind) { case 181: case 183: return true; } return false; } ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern; function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) { var kind = node.kind; return kind === 185 || kind === 146 || kind === 179; } ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode; function isPropertyAccessOrQualifiedName(node) { var kind = node.kind; return kind === 185 || kind === 146; } ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName; function isCallLikeExpression(node) { switch (node.kind) { case 257: case 256: case 187: case 188: case 189: case 150: return true; default: return false; } } ts.isCallLikeExpression = isCallLikeExpression; function isCallOrNewExpression(node) { return node.kind === 187 || node.kind === 188; } ts.isCallOrNewExpression = isCallOrNewExpression; function isTemplateLiteral(node) { var kind = node.kind; return kind === 202 || kind === 13; } ts.isTemplateLiteral = isTemplateLiteral; function isLeftHandSideExpression(node) { return isLeftHandSideExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isLeftHandSideExpression = isLeftHandSideExpression; function isLeftHandSideExpressionKind(kind) { switch (kind) { 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; } } function isUnaryExpression(node) { return isUnaryExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isUnaryExpression = isUnaryExpression; function isUnaryExpressionKind(kind) { switch (kind) { case 198: case 199: case 194: case 195: case 196: case 197: case 190: return true; default: return isLeftHandSideExpressionKind(kind); } } function isUnaryExpressionWithWrite(expr) { switch (expr.kind) { case 199: return true; case 198: return expr.operator === 43 || expr.operator === 44; default: return false; } } ts.isUnaryExpressionWithWrite = isUnaryExpressionWithWrite; function isExpression(node) { return isExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind); } ts.isExpression = isExpression; function isExpressionKind(kind) { switch (kind) { case 201: case 203: case 193: case 200: case 204: case 208: case 206: case 303: case 302: return true; default: return isUnaryExpressionKind(kind); } } function isAssertionExpression(node) { var kind = node.kind; return kind === 190 || kind === 208; } ts.isAssertionExpression = isAssertionExpression; function isPartiallyEmittedExpression(node) { return node.kind === 302; } ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression; function isNotEmittedStatement(node) { return node.kind === 301; } ts.isNotEmittedStatement = isNotEmittedStatement; function isNotEmittedOrPartiallyEmittedNode(node) { return isNotEmittedStatement(node) || isPartiallyEmittedExpression(node); } ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { case 220: case 221: case 222: case 218: case 219: return true; case 228: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; function isForInOrOfStatement(node) { return node.kind === 221 || node.kind === 222; } ts.isForInOrOfStatement = isForInOrOfStatement; function isConciseBody(node) { return ts.isBlock(node) || isExpression(node); } ts.isConciseBody = isConciseBody; function isFunctionBody(node) { return ts.isBlock(node); } ts.isFunctionBody = isFunctionBody; function isForInitializer(node) { return ts.isVariableDeclarationList(node) || isExpression(node); } ts.isForInitializer = isForInitializer; function isModuleBody(node) { var kind = node.kind; return kind === 240 || kind === 239 || kind === 71; } ts.isModuleBody = isModuleBody; function isNamespaceBody(node) { var kind = node.kind; return kind === 240 || kind === 239; } ts.isNamespaceBody = isNamespaceBody; function isJSDocNamespaceBody(node) { var kind = node.kind; return kind === 71 || kind === 239; } ts.isJSDocNamespaceBody = isJSDocNamespaceBody; function isNamedImportBindings(node) { var kind = node.kind; return kind === 247 || kind === 246; } ts.isNamedImportBindings = isNamedImportBindings; function isModuleOrEnumDeclaration(node) { return node.kind === 239 || node.kind === 238; } ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration; function isDeclarationKind(kind) { 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 === 298 || kind === 292 || kind === 299; } function isDeclarationStatementKind(kind) { 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 || 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 === 301 || kind === 305 || kind === 304; } function isDeclaration(node) { if (node.kind === 148) { return node.parent.kind !== 297 || ts.isInJavaScriptFile(node); } return isDeclarationKind(node.kind); } ts.isDeclaration = isDeclaration; function isDeclarationStatement(node) { return isDeclarationStatementKind(node.kind); } ts.isDeclarationStatement = isDeclarationStatement; function isStatementButNotDeclaration(node) { return isStatementKindButNotDeclarationKind(node.kind); } ts.isStatementButNotDeclaration = isStatementButNotDeclaration; function isStatement(node) { var kind = node.kind; return isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind) || isBlockStatement(node); } ts.isStatement = isStatement; function isBlockStatement(node) { if (node.kind !== 213) return false; if (node.parent !== undefined) { if (node.parent.kind === 230 || node.parent.kind === 269) { return false; } } return !ts.isFunctionBlock(node); } function isModuleReference(node) { var kind = node.kind; return kind === 254 || kind === 146 || kind === 71; } ts.isModuleReference = isModuleReference; function isJsxTagNameExpression(node) { var kind = node.kind; return kind === 99 || kind === 71 || kind === 185; } ts.isJsxTagNameExpression = isJsxTagNameExpression; function isJsxChild(node) { var kind = node.kind; return kind === 255 || kind === 265 || kind === 256 || kind === 10 || kind === 259; } ts.isJsxChild = isJsxChild; function isJsxAttributeLike(node) { var kind = node.kind; return kind === 262 || kind === 264; } ts.isJsxAttributeLike = isJsxAttributeLike; function isStringLiteralOrJsxExpression(node) { var kind = node.kind; return kind === 9 || kind === 265; } ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression; function isJsxOpeningLikeElement(node) { var kind = node.kind; return kind === 257 || kind === 256; } ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement; function isCaseOrDefaultClause(node) { var kind = node.kind; return kind === 266 || kind === 267; } ts.isCaseOrDefaultClause = isCaseOrDefaultClause; function isJSDocNode(node) { return node.kind >= 278 && node.kind <= 299; } ts.isJSDocNode = isJSDocNode; function isJSDocCommentContainingNode(node) { return node.kind === 286 || isJSDocTag(node) || ts.isJSDocTypeLiteral(node) || ts.isJSDocSignature(node); } ts.isJSDocCommentContainingNode = isJSDocCommentContainingNode; function isJSDocTag(node) { return node.kind >= 289 && node.kind <= 299; } ts.isJSDocTag = isJSDocTag; function isSetAccessor(node) { return node.kind === 157; } ts.isSetAccessor = isSetAccessor; function isGetAccessor(node) { return node.kind === 156; } ts.isGetAccessor = isGetAccessor; function hasJSDocNodes(node) { var jsDoc = node.jsDoc; return !!jsDoc && jsDoc.length > 0; } ts.hasJSDocNodes = hasJSDocNodes; function hasType(node) { return !!node.type; } ts.hasType = hasType; function couldHaveType(node) { switch (node.kind) { 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; function hasInitializer(node) { return !!node.initializer; } ts.hasInitializer = hasInitializer; 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: case 264: case 270: case 271: case 154: case 156: case 157: return true; default: return false; } } ts.isObjectLiteralElement = isObjectLiteralElement; function isTypeReferenceType(node) { return node.kind === 162 || node.kind === 207; } ts.isTypeReferenceType = isTypeReferenceType; var MAX_SMI_X86 = 1073741823; function guessIndentation(lines) { var indentation = MAX_SMI_X86; for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) { var line = lines_1[_i]; if (!line.length) { continue; } var i = 0; for (; i < line.length && i < indentation; i++) { if (!ts.isWhiteSpaceLike(line.charCodeAt(i))) { break; } } if (i < indentation) { indentation = i; } if (indentation === 0) { return 0; } } return indentation === MAX_SMI_X86 ? undefined : indentation; } ts.guessIndentation = guessIndentation; function isStringLiteralLike(node) { return node.kind === 9 || node.kind === 13; } ts.isStringLiteralLike = isStringLiteralLike; })(ts || (ts = {})); (function (ts) { function isNamedImportsOrExports(node) { return node.kind === 247 || node.kind === 251; } ts.isNamedImportsOrExports = isNamedImportsOrExports; function Symbol(flags, name) { this.flags = flags; this.escapedName = name; this.declarations = undefined; this.valueDeclaration = undefined; this.id = undefined; this.mergeId = undefined; this.parent = undefined; } function Type(checker, flags) { this.flags = flags; if (ts.Debug.isDebugging) { this.checker = checker; } } function Signature() { } function Node(kind, pos, end) { this.pos = pos; this.end = end; this.kind = kind; this.id = 0; this.flags = 0; this.modifierFlagsCache = 0; this.transformFlags = 0; this.parent = undefined; this.original = undefined; } function SourceMapSource(fileName, text, skipTrivia) { this.fileName = fileName; this.text = text; this.skipTrivia = skipTrivia || (function (pos) { return pos; }); } ts.objectAllocator = { getNodeConstructor: function () { return Node; }, getTokenConstructor: function () { return Node; }, getIdentifierConstructor: function () { return Node; }, getSourceFileConstructor: function () { return Node; }, getSymbolConstructor: function () { return Symbol; }, getTypeConstructor: function () { return Type; }, getSignatureConstructor: function () { return Signature; }, getSourceMapSourceConstructor: function () { return SourceMapSource; }, }; 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]); }); } ts.formatStringFromArgs = formatStringFromArgs; function getLocaleSpecificMessage(message) { return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message.key] || message.message; } ts.getLocaleSpecificMessage = getLocaleSpecificMessage; function createFileDiagnostic(file, start, length, message) { ts.Debug.assertGreaterThanOrEqual(start, 0); ts.Debug.assertGreaterThanOrEqual(length, 0); if (file) { ts.Debug.assertLessThanOrEqual(start, file.text.length); ts.Debug.assertLessThanOrEqual(start + length, file.text.length); } var text = getLocaleSpecificMessage(message); if (arguments.length > 4) { text = formatStringFromArgs(text, arguments, 4); } return { file: file, start: start, length: length, messageText: text, category: message.category, code: message.code, reportsUnnecessary: message.reportsUnnecessary, }; } ts.createFileDiagnostic = createFileDiagnostic; function formatMessage(_dummy, message) { var text = getLocaleSpecificMessage(message); if (arguments.length > 2) { text = formatStringFromArgs(text, arguments, 2); } return text; } ts.formatMessage = formatMessage; function createCompilerDiagnostic(message) { var text = getLocaleSpecificMessage(message); if (arguments.length > 1) { text = formatStringFromArgs(text, arguments, 1); } return { file: undefined, start: undefined, length: undefined, messageText: text, category: message.category, code: message.code, reportsUnnecessary: message.reportsUnnecessary, }; } ts.createCompilerDiagnostic = createCompilerDiagnostic; function createCompilerDiagnosticFromMessageChain(chain) { return { file: undefined, start: undefined, length: undefined, code: chain.code, category: chain.category, messageText: chain.next ? chain : chain.messageText, }; } ts.createCompilerDiagnosticFromMessageChain = createCompilerDiagnosticFromMessageChain; function chainDiagnosticMessages(details, message) { var text = getLocaleSpecificMessage(message); if (arguments.length > 2) { text = formatStringFromArgs(text, arguments, 2); } return { messageText: text, category: message.category, code: message.code, next: details }; } ts.chainDiagnosticMessages = chainDiagnosticMessages; function concatenateDiagnosticMessageChains(headChain, tailChain) { var lastChain = headChain; while (lastChain.next) { lastChain = lastChain.next; } lastChain.next = tailChain; return headChain; } ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains; function getDiagnosticFilePath(diagnostic) { return diagnostic.file ? diagnostic.file.path : undefined; } 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; } ts.compareDiagnostics = compareDiagnostics; function compareMessageText(t1, t2) { var text1 = t1; var text2 = t2; while (text1 && text2) { var string1 = ts.isString(text1) ? text1 : text1.messageText; var string2 = ts.isString(text2) ? text2 : text2.messageText; var res = ts.compareStringsCaseSensitive(string1, string2); if (res) { return res; } text1 = ts.isString(text1) ? undefined : text1.next; text2 = ts.isString(text2) ? undefined : text2.next; } if (!text1 && !text2) { return 0; } return text1 ? 1 : -1; } function getEmitScriptTarget(compilerOptions) { return compilerOptions.target || 0; } ts.getEmitScriptTarget = getEmitScriptTarget; function getEmitModuleKind(compilerOptions) { return typeof compilerOptions.module === "number" ? compilerOptions.module : getEmitScriptTarget(compilerOptions) >= 2 ? ts.ModuleKind.ES2015 : ts.ModuleKind.CommonJS; } ts.getEmitModuleKind = getEmitModuleKind; function getEmitModuleResolutionKind(compilerOptions) { var moduleResolution = compilerOptions.moduleResolution; if (moduleResolution === undefined) { moduleResolution = getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS ? ts.ModuleResolutionKind.NodeJs : ts.ModuleResolutionKind.Classic; } return moduleResolution; } ts.getEmitModuleResolutionKind = getEmitModuleResolutionKind; function unreachableCodeIsError(options) { return options.allowUnreachableCode === false; } ts.unreachableCodeIsError = unreachableCodeIsError; function unusedLabelIsError(options) { return options.allowUnusedLabels === false; } ts.unusedLabelIsError = unusedLabelIsError; function getAreDeclarationMapsEnabled(options) { return !!(options.declaration && options.declarationMap); } ts.getAreDeclarationMapsEnabled = getAreDeclarationMapsEnabled; function getAllowSyntheticDefaultImports(compilerOptions) { var moduleKind = getEmitModuleKind(compilerOptions); return compilerOptions.allowSyntheticDefaultImports !== undefined ? compilerOptions.allowSyntheticDefaultImports : compilerOptions.esModuleInterop ? moduleKind !== ts.ModuleKind.None && moduleKind < ts.ModuleKind.ES2015 : moduleKind === ts.ModuleKind.System; } ts.getAllowSyntheticDefaultImports = getAllowSyntheticDefaultImports; function getEmitDeclarations(compilerOptions) { return !!(compilerOptions.declaration || compilerOptions.composite); } ts.getEmitDeclarations = getEmitDeclarations; function getStrictOptionValue(compilerOptions, flag) { return compilerOptions[flag] === undefined ? !!compilerOptions.strict : !!compilerOptions[flag]; } ts.getStrictOptionValue = getStrictOptionValue; function hasZeroOrOneAsteriskCharacter(str) { var seenAsterisk = false; for (var i = 0; i < str.length; i++) { if (str.charCodeAt(i) === 42) { if (!seenAsterisk) { seenAsterisk = true; } else { return false; } } } return true; } ts.hasZeroOrOneAsteriskCharacter = hasZeroOrOneAsteriskCharacter; ts.directorySeparator = "/"; var altDirectorySeparator = "\\"; var urlSchemeSeparator = "://"; var backslashRegExp = /\\/g; function normalizeSlashes(path) { return path.replace(backslashRegExp, ts.directorySeparator); } ts.normalizeSlashes = normalizeSlashes; function isVolumeCharacter(charCode) { return (charCode >= 97 && charCode <= 122) || (charCode >= 65 && charCode <= 90); } function getFileUrlVolumeSeparatorEnd(url, start) { var ch0 = url.charCodeAt(start); if (ch0 === 58) return start + 1; if (ch0 === 37 && url.charCodeAt(start + 1) === 51) { var ch2 = url.charCodeAt(start + 2); if (ch2 === 97 || ch2 === 65) return start + 3; } return -1; } function getEncodedRootLength(path) { if (!path) return 0; var ch0 = path.charCodeAt(0); if (ch0 === 47 || ch0 === 92) { if (path.charCodeAt(1) !== ch0) return 1; var p1 = path.indexOf(ch0 === 47 ? ts.directorySeparator : altDirectorySeparator, 2); if (p1 < 0) return path.length; return p1 + 1; } if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58) { var ch2 = path.charCodeAt(2); if (ch2 === 47 || ch2 === 92) return 3; if (path.length === 2) return 2; } var schemeEnd = path.indexOf(urlSchemeSeparator); if (schemeEnd !== -1) { var authorityStart = schemeEnd + urlSchemeSeparator.length; var authorityEnd = path.indexOf(ts.directorySeparator, authorityStart); 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) { return ~(volumeSeparatorEnd + 1); } if (volumeSeparatorEnd === path.length) { return ~volumeSeparatorEnd; } } } return ~(authorityEnd + 1); } return ~path.length; } return 0; } function getRootLength(path) { var rootLength = getEncodedRootLength(path); return rootLength < 0 ? ~rootLength : rootLength; } ts.getRootLength = getRootLength; function normalizePath(path) { return ts.resolvePath(path); } ts.normalizePath = normalizePath; function normalizePathAndParts(path) { path = normalizeSlashes(path); var _a = reducePathComponents(getPathComponents(path)), root = _a[0], parts = _a.slice(1); if (parts.length) { var joinedParts = root + parts.join(ts.directorySeparator); return { path: ts.hasTrailingDirectorySeparator(path) ? ts.ensureTrailingDirectorySeparator(joinedParts) : joinedParts, parts: parts }; } else { return { path: root, parts: parts }; } } ts.normalizePathAndParts = normalizePathAndParts; function getDirectoryPath(path) { path = normalizeSlashes(path); var rootLength = getRootLength(path); if (rootLength === path.length) return path; path = ts.removeTrailingDirectorySeparator(path); return path.slice(0, Math.max(rootLength, path.lastIndexOf(ts.directorySeparator))); } ts.getDirectoryPath = getDirectoryPath; function isUrl(path) { return getEncodedRootLength(path) < 0; } ts.isUrl = isUrl; function pathIsRelative(path) { return /^\.\.?($|[\\/])/.test(path); } ts.pathIsRelative = pathIsRelative; function isRootedDiskPath(path) { return getEncodedRootLength(path) > 0; } ts.isRootedDiskPath = isRootedDiskPath; function isDiskPathRoot(path) { var rootLength = getEncodedRootLength(path); return rootLength > 0 && rootLength === path.length; } ts.isDiskPathRoot = isDiskPathRoot; function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) { return !isRootedDiskPath(absoluteOrRelativePath) ? absoluteOrRelativePath : ts.getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false); } ts.convertToRelativePath = convertToRelativePath; function pathComponents(path, rootLength) { var root = path.substring(0, rootLength); var rest = path.substring(rootLength).split(ts.directorySeparator); if (rest.length && !ts.lastOrUndefined(rest)) rest.pop(); return [root].concat(rest); } function getPathComponents(path, currentDirectory) { if (currentDirectory === void 0) { currentDirectory = ""; } path = ts.combinePaths(currentDirectory, path); var rootLength = getRootLength(path); return pathComponents(path, rootLength); } ts.getPathComponents = getPathComponents; function reducePathComponents(components) { if (!ts.some(components)) return []; var reduced = [components[0]]; for (var i = 1; i < components.length; i++) { var component = components[i]; if (!component) continue; if (component === ".") continue; if (component === "..") { if (reduced.length > 1) { if (reduced[reduced.length - 1] !== "..") { reduced.pop(); continue; } } else if (reduced[0]) continue; } reduced.push(component); } return reduced; } ts.reducePathComponents = reducePathComponents; function getNormalizedPathComponents(path, currentDirectory) { return reducePathComponents(getPathComponents(path, currentDirectory)); } ts.getNormalizedPathComponents = getNormalizedPathComponents; function getNormalizedAbsolutePath(fileName, currentDirectory) { return getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); } ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; function getPathFromPathComponents(pathComponents) { if (pathComponents.length === 0) return ""; var root = pathComponents[0] && ts.ensureTrailingDirectorySeparator(pathComponents[0]); if (pathComponents.length === 1) return root; return root + pathComponents.slice(1).join(ts.directorySeparator); } ts.getPathFromPathComponents = getPathFromPathComponents; })(ts || (ts = {})); (function (ts) { function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) { var fromComponents = ts.reducePathComponents(ts.getPathComponents(from)); var toComponents = ts.reducePathComponents(ts.getPathComponents(to)); var start; for (start = 0; start < fromComponents.length && start < toComponents.length; start++) { var fromComponent = getCanonicalFileName(fromComponents[start]); var toComponent = getCanonicalFileName(toComponents[start]); var comparer = start === 0 ? ts.equateStringsCaseInsensitive : stringEqualityComparer; if (!comparer(fromComponent, toComponent)) break; } if (start === 0) { return toComponents; } var components = toComponents.slice(start); var relative = []; for (; start < fromComponents.length; start++) { relative.push(".."); } return [""].concat(relative, components); } ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo; function getRelativePathFromFile(from, to, getCanonicalFileName) { return ensurePathIsNonModuleName(getRelativePathFromDirectory(ts.getDirectoryPath(from), to, getCanonicalFileName)); } ts.getRelativePathFromFile = getRelativePathFromFile; function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) { Debug.assert((ts.getRootLength(fromDirectory) > 0) === (ts.getRootLength(to) > 0), "Paths must either both be absolute or both be relative"); var getCanonicalFileName = typeof getCanonicalFileNameOrIgnoreCase === "function" ? getCanonicalFileNameOrIgnoreCase : ts.identity; var ignoreCase = typeof getCanonicalFileNameOrIgnoreCase === "boolean" ? getCanonicalFileNameOrIgnoreCase : false; var pathComponents = getPathComponentsRelativeTo(fromDirectory, to, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive, getCanonicalFileName); return ts.getPathFromPathComponents(pathComponents); } ts.getRelativePathFromDirectory = getRelativePathFromDirectory; function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { var pathComponents = getPathComponentsRelativeTo(resolvePath(currentDirectory, directoryPathOrUrl), resolvePath(currentDirectory, relativeOrAbsolutePath), ts.equateStringsCaseSensitive, getCanonicalFileName); var firstComponent = pathComponents[0]; if (isAbsolutePathAnUrl && ts.isRootedDiskPath(firstComponent)) { var prefix = firstComponent.charAt(0) === ts.directorySeparator ? "file://" : "file:///"; pathComponents[0] = prefix + firstComponent; } return ts.getPathFromPathComponents(pathComponents); } ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; 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); var rootLength = ts.getRootLength(path); if (rootLength === path.length) return ""; 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; function combinePaths(path) { var paths = []; for (var _i = 1; _i < arguments.length; _i++) { paths[_i - 1] = arguments[_i]; } if (path) path = ts.normalizeSlashes(path); for (var _a = 0, paths_1 = paths; _a < paths_1.length; _a++) { var relativePath = paths_1[_a]; if (!relativePath) continue; relativePath = ts.normalizeSlashes(relativePath); if (!path || ts.getRootLength(relativePath) !== 0) { path = relativePath; } else { path = ensureTrailingDirectorySeparator(path) + relativePath; } } return path; } ts.combinePaths = combinePaths; function resolvePath(path) { var paths = []; for (var _i = 1; _i < arguments.length; _i++) { paths[_i - 1] = arguments[_i]; } var combined = ts.some(paths) ? combinePaths.apply(void 0, [path].concat(paths)) : ts.normalizeSlashes(path); var normalized = ts.getPathFromPathComponents(ts.reducePathComponents(ts.getPathComponents(combined))); return normalized && hasTrailingDirectorySeparator(combined) ? ensureTrailingDirectorySeparator(normalized) : normalized; } ts.resolvePath = resolvePath; function hasTrailingDirectorySeparator(path) { if (path.length === 0) return false; var ch = path.charCodeAt(path.length - 1); return ch === 47 || ch === 92; } ts.hasTrailingDirectorySeparator = hasTrailingDirectorySeparator; function removeTrailingDirectorySeparator(path) { if (hasTrailingDirectorySeparator(path)) { return path.substr(0, path.length - 1); } return path; } ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; function ensureTrailingDirectorySeparator(path) { if (!hasTrailingDirectorySeparator(path)) { return path + ts.directorySeparator; } return path; } ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; function comparePathsWorker(a, b, componentComparer) { if (a === b) return 0; if (a === undefined) return -1; if (b === undefined) 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) { return result; } } return ts.compareValues(aComponents.length, bComponents.length); } function comparePathsCaseSensitive(a, b) { return comparePathsWorker(a, b, ts.compareStringsCaseSensitive); } ts.comparePathsCaseSensitive = comparePathsCaseSensitive; function comparePathsCaseInsensitive(a, b) { return comparePathsWorker(a, b, ts.compareStringsCaseInsensitive); } ts.comparePathsCaseInsensitive = comparePathsCaseInsensitive; function comparePaths(a, b, currentDirectory, ignoreCase) { if (typeof currentDirectory === "string") { a = combinePaths(currentDirectory, a); b = combinePaths(currentDirectory, b); } else if (typeof currentDirectory === "boolean") { ignoreCase = currentDirectory; } return comparePathsWorker(a, b, ts.getStringComparer(ignoreCase)); } ts.comparePaths = comparePaths; function containsPath(parent, child, currentDirectory, ignoreCase) { if (typeof currentDirectory === "string") { parent = combinePaths(currentDirectory, parent); child = combinePaths(currentDirectory, child); } else if (typeof currentDirectory === "boolean") { ignoreCase = currentDirectory; } if (parent === undefined || child === undefined) return false; if (parent === child) return true; var parentComponents = ts.reducePathComponents(ts.getPathComponents(parent)); var childComponents = ts.reducePathComponents(ts.getPathComponents(child)); if (childComponents.length < parentComponents.length) { return false; } var componentEqualityComparer = ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive; for (var i = 0; i < parentComponents.length; i++) { var equalityComparer = i === 0 ? ts.equateStringsCaseInsensitive : componentEqualityComparer; if (!equalityComparer(parentComponents[i], childComponents[i])) { return false; } } return true; } ts.containsPath = containsPath; function tryRemoveDirectoryPrefix(path, dirPath) { var a = ts.tryRemovePrefix(path, dirPath); if (a === undefined) return undefined; switch (a.charCodeAt(0)) { case 47: case 92: return a.slice(1); default: return undefined; } } ts.tryRemoveDirectoryPrefix = tryRemoveDirectoryPrefix; var reservedCharacterPattern = /[^\w\s\/]/g; var wildcardCharCodes = [42, 63]; function hasExtension(fileName) { return ts.stringContains(getBaseFileName(fileName), "."); } ts.hasExtension = hasExtension; ts.commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"]; var implicitExcludePathRegexPattern = "(?!(" + ts.commonPackageFolders.join("|") + ")(/|$))"; var filesMatcher = { singleAsteriskRegexFragment: "([^./]|(\\.(?!min\\.js$))?)*", doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?", replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, filesMatcher.singleAsteriskRegexFragment); } }; var directoriesMatcher = { singleAsteriskRegexFragment: "[^/]*", doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?", replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, directoriesMatcher.singleAsteriskRegexFragment); } }; var excludeMatcher = { singleAsteriskRegexFragment: "[^/]*", doubleAsteriskRegexFragment: "(/.+?)?", replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, excludeMatcher.singleAsteriskRegexFragment); } }; var wildcardMatchers = { files: filesMatcher, directories: directoriesMatcher, exclude: excludeMatcher }; function getRegularExpressionForWildcard(specs, basePath, usage) { var patterns = getRegularExpressionsForWildcards(specs, basePath, usage); if (!patterns || !patterns.length) { return undefined; } var pattern = patterns.map(function (pattern) { return "(" + pattern + ")"; }).join("|"); var terminator = usage === "exclude" ? "($|/)" : "$"; return "^(" + pattern + ")" + terminator; } ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; function getRegularExpressionsForWildcards(specs, basePath, usage) { if (specs === undefined || specs.length === 0) { return undefined; } return ts.flatMap(specs, function (spec) { return spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage]); }); } function isImplicitGlob(lastPathComponent) { return !/[.*?]/.test(lastPathComponent); } ts.isImplicitGlob = isImplicitGlob; function getSubPatternFromSpec(spec, basePath, usage, _a) { var singleAsteriskRegexFragment = _a.singleAsteriskRegexFragment, doubleAsteriskRegexFragment = _a.doubleAsteriskRegexFragment, replaceWildcardCharacter = _a.replaceWildcardCharacter; var subpattern = ""; var hasWrittenComponent = false; var components = ts.getNormalizedPathComponents(spec, basePath); var lastComponent = ts.last(components); if (usage !== "exclude" && lastComponent === "**") { return undefined; } components[0] = removeTrailingDirectorySeparator(components[0]); if (isImplicitGlob(lastComponent)) { components.push("**", "*"); } var optionalCount = 0; for (var _i = 0, components_1 = components; _i < components_1.length; _i++) { var component = components_1[_i]; if (component === "**") { subpattern += doubleAsteriskRegexFragment; } else { if (usage === "directories") { subpattern += "("; optionalCount++; } if (hasWrittenComponent) { subpattern += ts.directorySeparator; } if (usage !== "exclude") { var componentPattern = ""; if (component.charCodeAt(0) === 42) { componentPattern += "([^./]" + singleAsteriskRegexFragment + ")?"; component = component.substr(1); } else if (component.charCodeAt(0) === 63) { componentPattern += "[^./]"; component = component.substr(1); } componentPattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); if (componentPattern !== component) { subpattern += implicitExcludePathRegexPattern; } subpattern += componentPattern; } else { subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); } } hasWrittenComponent = true; } while (optionalCount > 0) { subpattern += ")?"; optionalCount--; } return subpattern; } function replaceWildcardCharacter(match, singleAsteriskRegexFragment) { return match === "*" ? singleAsteriskRegexFragment : match === "?" ? "[^/]" : "\\" + match; } function getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { path = ts.normalizePath(path); currentDirectory = ts.normalizePath(currentDirectory); var absolutePath = combinePaths(currentDirectory, path); return { includeFilePatterns: ts.map(getRegularExpressionsForWildcards(includes, absolutePath, "files"), function (pattern) { return "^" + pattern + "$"; }), includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) }; } ts.getFileMatcherPatterns = getFileMatcherPatterns; function getRegexFromPattern(pattern, useCaseSensitiveFileNames) { return new RegExp(pattern, useCaseSensitiveFileNames ? "" : "i"); } ts.getRegexFromPattern = getRegexFromPattern; function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries) { path = ts.normalizePath(path); currentDirectory = ts.normalizePath(currentDirectory); var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory); 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); var results = includeFileRegexes ? includeFileRegexes.map(function () { return []; }) : [[]]; for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { var basePath = _a[_i]; visitDirectory(basePath, combinePaths(currentDirectory, basePath), depth); } return ts.flatten(results); function visitDirectory(path, absolutePath, depth) { var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; var _loop_1 = function (current) { var name = combinePaths(path, current); var absoluteName = combinePaths(absolutePath, current); if (extensions && !ts.fileExtensionIsOneOf(name, extensions)) return "continue"; if (excludeRegex && excludeRegex.test(absoluteName)) return "continue"; if (!includeFileRegexes) { results[0].push(name); } else { var includeIndex = ts.findIndex(includeFileRegexes, function (re) { return re.test(absoluteName); }); if (includeIndex !== -1) { results[includeIndex].push(name); } } }; for (var _i = 0, _b = ts.sort(files, ts.compareStringsCaseSensitive); _i < _b.length; _i++) { var current = _b[_i]; _loop_1(current); } if (depth !== undefined) { depth--; if (depth === 0) { return; } } for (var _c = 0, _d = ts.sort(directories, ts.compareStringsCaseSensitive); _c < _d.length; _c++) { var current = _d[_c]; var name = combinePaths(path, current); var absoluteName = combinePaths(absolutePath, current); if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && (!excludeRegex || !excludeRegex.test(absoluteName))) { visitDirectory(name, absoluteName, depth); } } } } ts.matchFiles = matchFiles; function getBasePaths(path, includes, useCaseSensitiveFileNames) { var basePaths = [path]; if (includes) { var includeBasePaths = []; for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { var include = includes_1[_i]; var absolute = ts.isRootedDiskPath(include) ? include : ts.normalizePath(combinePaths(path, include)); includeBasePaths.push(getIncludeBasePath(absolute)); } 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); } }; for (var _a = 0, includeBasePaths_1 = includeBasePaths; _a < includeBasePaths_1.length; _a++) { var includeBasePath = includeBasePaths_1[_a]; _loop_2(includeBasePath); } } return basePaths; } function getIncludeBasePath(absolute) { var wildcardOffset = ts.indexOfAnyCharCode(absolute, wildcardCharCodes); if (wildcardOffset < 0) { return !hasExtension(absolute) ? absolute : removeTrailingDirectorySeparator(ts.getDirectoryPath(absolute)); } return absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); } function ensureScriptKind(fileName, scriptKind) { return scriptKind || getScriptKindFromFileName(fileName) || 3; } ts.ensureScriptKind = ensureScriptKind; function getScriptKindFromFileName(fileName) { var ext = fileName.substr(fileName.lastIndexOf(".")); switch (ext.toLowerCase()) { case ".js": return 1; case ".jsx": return 2; case ".ts": return 3; case ".tsx": return 4; case ".json": return 6; default: return 0; } } ts.getScriptKindFromFileName = getScriptKindFromFileName; 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 || needJsExtensions && isJavaScriptLike(x.scriptKind) ? x.extension : undefined; })); return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive); } ts.getSupportedExtensions = getSupportedExtensions; function isJavaScriptLike(scriptKind) { return scriptKind === 1 || scriptKind === 2; } function hasJavaScriptFileExtension(fileName) { return ts.some(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; function hasTypeScriptFileExtension(fileName) { return ts.some(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; function isSupportedSourceFileName(fileName, compilerOptions, extraFileExtensions) { if (!fileName) { return false; } for (var _i = 0, _a = getSupportedExtensions(compilerOptions, extraFileExtensions); _i < _a.length; _i++) { var extension = _a[_i]; if (ts.fileExtensionIs(fileName, extension)) { return true; } } return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; 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); } } return 0; } ts.getExtensionPriority = getExtensionPriority; function adjustExtensionPriority(extensionPriority, supportedExtensions) { if (extensionPriority < 2) { return 0; } else if (extensionPriority < supportedExtensions.length) { return 2; } else { return supportedExtensions.length; } } ts.adjustExtensionPriority = adjustExtensionPriority; function getNextLowestExtensionPriority(extensionPriority, supportedExtensions) { if (extensionPriority < 2) { return 2; } else { return supportedExtensions.length; } } ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; 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]; var extensionless = tryRemoveExtension(path, ext); if (extensionless !== undefined) { return extensionless; } } return path; } ts.removeFileExtension = removeFileExtension; function tryRemoveExtension(path, extension) { return ts.fileExtensionIs(path, extension) ? removeExtension(path, extension) : undefined; } ts.tryRemoveExtension = tryRemoveExtension; function removeExtension(path, extension) { return path.substring(0, path.length - extension.length); } ts.removeExtension = removeExtension; function changeExtension(path, newExtension) { return changeAnyExtension(path, newExtension, extensionsToRemove, false); } ts.changeExtension = changeExtension; function changeAnyExtension(path, ext, extensions, ignoreCase) { var pathext = extensions !== undefined && ignoreCase !== undefined ? getAnyExtensionFromPath(path, extensions, ignoreCase) : getAnyExtensionFromPath(path); return pathext ? path.slice(0, path.length - pathext.length) + (ts.startsWith(ext, ".") ? ext : "." + ext) : path; } ts.changeAnyExtension = changeAnyExtension; var Debug; (function (Debug) { function showSymbol(symbol) { var symbolFlags = ts.SymbolFlags; return "{ flags: " + (symbolFlags ? showFlags(symbol.flags, symbolFlags) : symbol.flags) + "; declarations: " + ts.map(symbol.declarations, showSyntaxKind) + " }"; } Debug.showSymbol = showSymbol; function showFlags(flags, flagsEnum) { var out = []; for (var pow = 0; pow <= 30; pow++) { var n = 1 << pow; if (flags & n) { out.push(flagsEnum[n]); } } return out.join("|"); } function showSyntaxKind(node) { var syntaxKind = ts.SyntaxKind; return syntaxKind ? syntaxKind[node.kind] : node.kind.toString(); } Debug.showSyntaxKind = showSyntaxKind; })(Debug = ts.Debug || (ts.Debug = {})); function tryParsePattern(pattern) { Debug.assert(ts.hasZeroOrOneAsteriskCharacter(pattern)); var indexOfStar = pattern.indexOf("*"); return indexOfStar === -1 ? undefined : { prefix: pattern.substr(0, indexOfStar), suffix: pattern.substr(indexOfStar + 1) }; } ts.tryParsePattern = tryParsePattern; function positionIsSynthesized(pos) { return !(pos >= 0); } ts.positionIsSynthesized = positionIsSynthesized; function extensionIsTypeScript(ext) { return ext === ".ts" || ext === ".tsx" || ext === ".d.ts"; } ts.extensionIsTypeScript = extensionIsTypeScript; function resolutionExtensionIsTypeScriptOrJson(ext) { return extensionIsTypeScript(ext) || ext === ".json"; } ts.resolutionExtensionIsTypeScriptOrJson = resolutionExtensionIsTypeScriptOrJson; function extensionFromPath(path) { var ext = tryGetExtensionFromPath(path); return ext !== undefined ? ext : Debug.fail("File " + path + " has unknown extension."); } ts.extensionFromPath = extensionFromPath; function isAnySupportedFileExtension(path) { return tryGetExtensionFromPath(path) !== undefined; } ts.isAnySupportedFileExtension = isAnySupportedFileExtension; function tryGetExtensionFromPath(path) { return ts.find(extensionsToRemove, function (e) { return ts.fileExtensionIs(path, e); }); } ts.tryGetExtensionFromPath = tryGetExtensionFromPath; function getAnyExtensionFromPathWorker(path, extensions, stringEqualityComparer) { if (typeof extensions === "string") extensions = [extensions]; for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) { var extension = extensions_2[_i]; if (!ts.startsWith(extension, ".")) extension = "." + extension; if (path.length >= extension.length && path.charAt(path.length - extension.length) === ".") { var pathExtension = path.slice(path.length - extension.length); if (stringEqualityComparer(pathExtension, extension)) { return pathExtension; } } } return ""; } function getAnyExtensionFromPath(path, extensions, ignoreCase) { if (extensions) { return getAnyExtensionFromPathWorker(path, extensions, ignoreCase ? ts.equateStringsCaseInsensitive : ts.equateStringsCaseSensitive); } var baseFileName = getBaseFileName(path); var extensionIndex = baseFileName.lastIndexOf("."); if (extensionIndex >= 0) { return baseFileName.substring(extensionIndex); } return ""; } ts.getAnyExtensionFromPath = getAnyExtensionFromPath; function isCheckJsEnabledForFile(sourceFile, compilerOptions) { return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs; } ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile; ts.emptyFileSystemEntries = { files: ts.emptyArray, directories: ts.emptyArray }; function matchPatternOrExact(patternStrings, candidate) { var patterns = []; for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) { var patternString = patternStrings_1[_i]; var pattern = tryParsePattern(patternString); if (pattern) { patterns.push(pattern); } else if (patternString === candidate) { return patternString; } } return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate); } ts.matchPatternOrExact = matchPatternOrExact; })(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 = {})); var NodeConstructor; var TokenConstructor; var IdentifierConstructor; var SourceFileConstructor; function createNode(kind, pos, end) { if (kind === 274) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } else if (kind === 71) { return new (IdentifierConstructor || (IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor()))(kind, pos, end); } else if (!ts.isNodeKind(kind)) { return new (TokenConstructor || (TokenConstructor = ts.objectAllocator.getTokenConstructor()))(kind, pos, end); } else { return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, pos, end); } } ts.createNode = createNode; function visitNode(cbNode, node) { return node && cbNode(node); } function visitNodes(cbNode, cbNodes, nodes) { if (nodes) { if (cbNodes) { return cbNodes(nodes); } for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { var node = nodes_1[_i]; var result = cbNode(node); if (result) { return result; } } } } function isJSDocLikeText(text, start) { return text.charCodeAt(start + 1) === 42 && text.charCodeAt(start + 2) === 42 && text.charCodeAt(start + 3) !== 47; } ts.isJSDocLikeText = isJSDocLikeText; function forEachChild(node, cbNode, cbNodes) { if (!node || node.kind <= 145) { return; } switch (node.kind) { case 146: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); case 148: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.default) || visitNode(cbNode, node.expression); 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: return visitNode(cbNode, node.expression); case 149: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.dotDotDotToken) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); case 152: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.exclamationToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); 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: 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: 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: 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: 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: 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) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); case 162: return visitNode(cbNode, node.typeName) || visitNodes(cbNode, cbNodes, node.typeArguments); case 161: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); case 165: return visitNode(cbNode, node.exprName); case 166: return visitNodes(cbNode, cbNodes, node.members); case 167: return visitNode(cbNode, node.elementType); case 168: return visitNodes(cbNode, cbNodes, node.elementTypes); case 169: case 170: return visitNodes(cbNode, cbNodes, node.types); case 171: return visitNode(cbNode, node.checkType) || visitNode(cbNode, node.extendsType) || visitNode(cbNode, node.trueType) || visitNode(cbNode, node.falseType); case 172: return visitNode(cbNode, node.typeParameter); case 179: return visitNode(cbNode, node.argument) || visitNode(cbNode, node.qualifier) || visitNodes(cbNode, cbNodes, node.typeArguments); case 173: case 175: return visitNode(cbNode, node.type); case 176: return visitNode(cbNode, node.objectType) || visitNode(cbNode, node.indexType); case 177: return visitNode(cbNode, node.readonlyToken) || visitNode(cbNode, node.typeParameter) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type); case 178: return visitNode(cbNode, node.literal); case 180: case 181: return visitNodes(cbNode, cbNodes, node.elements); case 183: return visitNodes(cbNode, cbNodes, node.elements); case 184: return visitNodes(cbNode, cbNodes, node.properties); case 185: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.name); case 186: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); case 187: case 188: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNodes(cbNode, cbNodes, node.arguments); case 189: return visitNode(cbNode, node.tag) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode(cbNode, node.template); case 190: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); case 191: return visitNode(cbNode, node.expression); case 194: return visitNode(cbNode, node.expression); case 195: return visitNode(cbNode, node.expression); case 196: return visitNode(cbNode, node.expression); case 198: return visitNode(cbNode, node.operand); case 203: return visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.expression); case 197: return visitNode(cbNode, node.expression); case 199: return visitNode(cbNode, node.operand); case 200: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); case 208: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); case 209: return visitNode(cbNode, node.expression); case 210: return visitNode(cbNode, node.name); 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: return visitNode(cbNode, node.expression); case 213: case 240: return visitNodes(cbNode, cbNodes, node.statements); case 274: return visitNodes(cbNode, cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); case 214: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); case 233: return visitNodes(cbNode, cbNodes, node.declarations); case 216: return visitNode(cbNode, node.expression); case 217: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); case 218: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); case 219: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 220: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.condition) || visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); case 221: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 222: return visitNode(cbNode, node.awaitModifier) || visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 223: case 224: return visitNode(cbNode, node.label); case 225: return visitNode(cbNode, node.expression); case 226: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 227: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); case 241: return visitNodes(cbNode, cbNodes, node.clauses); case 266: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.statements); case 267: return visitNodes(cbNode, cbNodes, node.statements); case 228: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); case 229: return visitNode(cbNode, node.expression); case 230: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); case 269: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); case 150: return visitNode(cbNode, node.expression); 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: 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: 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: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.members); case 273: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); case 239: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); case 243: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); case 244: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); case 245: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); case 242: return visitNode(cbNode, node.name); case 246: return visitNode(cbNode, node.name); case 247: case 251: return visitNodes(cbNode, cbNodes, node.elements); case 250: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); case 248: case 252: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); case 249: return visitNodes(cbNode, cbNodes, node.decorators) || visitNodes(cbNode, cbNodes, node.modifiers) || visitNode(cbNode, node.expression); case 202: return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans); case 211: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); case 147: return visitNode(cbNode, node.expression); case 268: return visitNodes(cbNode, cbNodes, node.types); case 207: return visitNode(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.typeArguments); case 254: return visitNode(cbNode, node.expression); case 253: return visitNodes(cbNode, cbNodes, node.decorators); case 303: return visitNodes(cbNode, cbNodes, node.elements); case 255: return visitNode(cbNode, node.openingElement) || visitNodes(cbNode, cbNodes, node.children) || visitNode(cbNode, node.closingElement); case 259: return visitNode(cbNode, node.openingFragment) || visitNodes(cbNode, cbNodes, node.children) || visitNode(cbNode, node.closingFragment); case 256: case 257: return visitNode(cbNode, node.tagName) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode(cbNode, node.attributes); case 263: return visitNodes(cbNode, cbNodes, node.properties); case 262: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); case 264: return visitNode(cbNode, node.expression); case 265: return visitNode(cbNode, node.dotDotDotToken) || visitNode(cbNode, node.expression); case 258: return visitNode(cbNode, node.tagName); case 278: return visitNode(cbNode, node.type); case 282: return visitNode(cbNode, node.type); case 281: return visitNode(cbNode, node.type); case 283: return visitNode(cbNode, node.type); case 284: return visitNodes(cbNode, cbNodes, node.parameters) || visitNode(cbNode, node.type); case 285: return visitNode(cbNode, node.type); case 286: return visitNodes(cbNode, cbNodes, node.tags); case 293: case 299: if (node.isNameFirst) { return visitNode(cbNode, node.name) || visitNode(cbNode, node.typeExpression); } else { return visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.name); } case 294: return visitNode(cbNode, node.typeExpression); case 296: return visitNode(cbNode, node.typeExpression); case 290: return visitNode(cbNode, node.class); case 297: return visitNodes(cbNode, cbNodes, node.typeParameters); case 298: if (node.typeExpression && node.typeExpression.kind === 278) { return visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.fullName); } else { return visitNode(cbNode, node.fullName) || visitNode(cbNode, node.typeExpression); } case 292: return visitNode(cbNode, node.fullName) || visitNode(cbNode, node.typeExpression); case 295: return visitNode(cbNode, node.typeExpression); 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: if (node.jsDocPropertyTags) { for (var _i = 0, _a = node.jsDocPropertyTags; _i < _a.length; _i++) { var tag = _a[_i]; visitNode(cbNode, tag); } } return; case 302: return visitNode(cbNode, node.expression); } } ts.forEachChild = forEachChild; function createSourceFile(fileName, sourceText, languageVersion, setParentNodes, scriptKind) { if (setParentNodes === void 0) { setParentNodes = false; } ts.performance.mark("beforeParse"); var result; if (languageVersion === 100) { result = Parser.parseJsonText(fileName, sourceText, languageVersion, undefined, setParentNodes); } else { result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind); } ts.performance.mark("afterParse"); ts.performance.measure("Parse", "beforeParse", "afterParse"); return result; } ts.createSourceFile = createSourceFile; function parseIsolatedEntityName(text, languageVersion) { return Parser.parseIsolatedEntityName(text, languageVersion); } ts.parseIsolatedEntityName = parseIsolatedEntityName; function parseJsonText(fileName, sourceText) { return Parser.parseJsonText(fileName, sourceText); } ts.parseJsonText = parseJsonText; function isExternalModule(file) { return file.externalModuleIndicator !== undefined; } ts.isExternalModule = isExternalModule; function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { if (aggressiveChecks === void 0) { aggressiveChecks = false; } var newSourceFile = IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); newSourceFile.flags |= (sourceFile.flags & 1572864); return newSourceFile; } ts.updateSourceFile = updateSourceFile; function parseIsolatedJSDocComment(content, start, length) { var result = Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length); if (result && result.jsDoc) { Parser.fixupParentReferences(result.jsDoc); } return result; } ts.parseIsolatedJSDocComment = parseIsolatedJSDocComment; function parseJSDocTypeExpressionForTests(content, start, length) { return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length); } ts.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; var Parser; (function (Parser) { var scanner = ts.createScanner(6, true); var disallowInAndDecoratorContext = 2048 | 8192; var NodeConstructor; var TokenConstructor; var IdentifierConstructor; var SourceFileConstructor; var sourceFile; var parseDiagnostics; var syntaxCursor; var currentToken; var sourceText; var nodeCount; var identifiers; var identifierCount; var parsingContext; var contextFlags; 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) { var result_1 = parseJsonText(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes); ts.convertToObjectWorker(result_1, result_1.parseDiagnostics, false, undefined, undefined); result_1.typeReferenceDirectives = ts.emptyArray; result_1.amdDependencies = ts.emptyArray; return result_1; } initializeState(sourceText, languageVersion, syntaxCursor, scriptKind); var result = parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind); clearState(); return result; } Parser.parseSourceFile = parseSourceFile; function parseIsolatedEntityName(content, languageVersion) { initializeState(content, languageVersion, undefined, 1); nextToken(); 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; } initializeState(sourceText, languageVersion, syntaxCursor, 6); sourceFile = createSourceFile(fileName, 2, 6, false); sourceFile.flags = contextFlags; nextToken(); var pos = getNodePos(); if (token() === 1) { sourceFile.statements = createNodeArray([], pos, pos); sourceFile.endOfFileToken = parseTokenNode(); } else { var statement = createNode(216); switch (token()) { case 21: statement.expression = parseArrayLiteralExpression(); break; case 101: case 86: case 95: statement.expression = parseTokenNode(); break; case 38: if (lookAhead(function () { return nextToken() === 8 && nextToken() !== 56; })) { statement.expression = parsePrefixUnaryExpression(); } else { statement.expression = parseObjectLiteralExpression(); } break; case 8: case 9: if (lookAhead(function () { return nextToken() !== 56; })) { statement.expression = parseLiteralNode(); break; } default: statement.expression = parseObjectLiteralExpression(); break; } finishNode(statement); sourceFile.statements = createNodeArray([statement], pos); sourceFile.endOfFileToken = parseExpectedToken(1, ts.Diagnostics.Unexpected_token); } if (setParentNodes) { fixupParentReferences(sourceFile); } sourceFile.parseDiagnostics = parseDiagnostics; var result = sourceFile; clearState(); return result; } Parser.parseJsonText = parseJsonText; function getLanguageVariant(scriptKind) { return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 || scriptKind === 6 ? 1 : 0; } function initializeState(_sourceText, languageVersion, _syntaxCursor, scriptKind) { NodeConstructor = ts.objectAllocator.getNodeConstructor(); TokenConstructor = ts.objectAllocator.getTokenConstructor(); IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor(); SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor(); sourceText = _sourceText; syntaxCursor = _syntaxCursor; parseDiagnostics = []; parsingContext = 0; identifiers = ts.createMap(); identifierCount = 0; nodeCount = 0; switch (scriptKind) { case 1: case 2: contextFlags = 65536; break; case 6: contextFlags = 65536 | 16777216; break; default: contextFlags = 0; break; } parseErrorBeforeNextFinishedNode = false; scanner.setText(sourceText); scanner.setOnError(scanError); scanner.setScriptTarget(languageVersion); scanner.setLanguageVariant(getLanguageVariant(scriptKind)); } function clearState() { scanner.setText(""); scanner.setOnError(undefined); parseDiagnostics = undefined; sourceFile = undefined; identifiers = undefined; syntaxCursor = undefined; sourceText = undefined; } function parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind) { var isDeclarationFile = isDeclarationFileName(fileName); if (isDeclarationFile) { contextFlags |= 4194304; } sourceFile = createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile); sourceFile.flags = contextFlags; nextToken(); processCommentPragmas(sourceFile, sourceText); processPragmasIntoFields(sourceFile, reportPragmaDiagnostic); sourceFile.statements = parseList(0, parseStatement); ts.Debug.assert(token() === 1); sourceFile.endOfFileToken = addJSDocComment(parseTokenNode()); setExternalModuleIndicator(sourceFile); sourceFile.nodeCount = nodeCount; sourceFile.identifierCount = identifierCount; sourceFile.identifiers = identifiers; sourceFile.parseDiagnostics = parseDiagnostics; if (setParentNodes) { fixupParentReferences(sourceFile); } return sourceFile; function reportPragmaDiagnostic(pos, end, diagnostic) { parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, pos, end, diagnostic)); } } function addJSDocComment(node) { var comments = ts.getJSDocCommentRanges(node, sourceFile.text); if (comments) { for (var _i = 0, comments_2 = comments; _i < comments_2.length; _i++) { var comment = comments_2[_i]; node.jsDoc = ts.append(node.jsDoc, JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos)); } } return node; } function fixupParentReferences(rootNode) { var parent = rootNode; forEachChild(rootNode, visitNode); return; function visitNode(n) { if (n.parent !== parent) { n.parent = parent; var saveParent = parent; parent = n; forEachChild(n, visitNode); if (ts.hasJSDocNodes(n)) { for (var _i = 0, _a = n.jsDoc; _i < _a.length; _i++) { var jsDoc = _a[_i]; jsDoc.parent = n; parent = jsDoc; forEachChild(jsDoc, visitNode); } } parent = saveParent; } } } Parser.fixupParentReferences = fixupParentReferences; function createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile) { var sourceFile = new SourceFileConstructor(274, 0, sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; sourceFile.bindSuggestionDiagnostics = undefined; sourceFile.languageVersion = languageVersion; sourceFile.fileName = ts.normalizePath(fileName); sourceFile.languageVariant = getLanguageVariant(scriptKind); sourceFile.isDeclarationFile = isDeclarationFile; sourceFile.scriptKind = scriptKind; return sourceFile; } function setContextFlag(val, flag) { if (val) { contextFlags |= flag; } else { contextFlags &= ~flag; } } function setDisallowInContext(val) { setContextFlag(val, 2048); } function setYieldContext(val) { setContextFlag(val, 4096); } function setDecoratorContext(val) { setContextFlag(val, 8192); } function setAwaitContext(val) { setContextFlag(val, 16384); } function doOutsideOfContext(context, func) { var contextFlagsToClear = context & contextFlags; if (contextFlagsToClear) { setContextFlag(false, contextFlagsToClear); var result = func(); setContextFlag(true, contextFlagsToClear); return result; } return func(); } function doInsideOfContext(context, func) { var contextFlagsToSet = context & ~contextFlags; if (contextFlagsToSet) { setContextFlag(true, contextFlagsToSet); var result = func(); setContextFlag(false, contextFlagsToSet); return result; } return func(); } function allowInAnd(func) { return doOutsideOfContext(2048, func); } function disallowInAnd(func) { return doInsideOfContext(2048, func); } function doInYieldContext(func) { return doInsideOfContext(4096, func); } function doInDecoratorContext(func) { return doInsideOfContext(8192, func); } function doInAwaitContext(func) { return doInsideOfContext(16384, func); } function doOutsideOfAwaitContext(func) { return doOutsideOfContext(16384, func); } function doInYieldAndAwaitContext(func) { return doInsideOfContext(4096 | 16384, func); } function inContext(flags) { return (contextFlags & flags) !== 0; } function inYieldContext() { return inContext(4096); } function inDisallowInContext() { return inContext(2048); } function inDecoratorContext() { return inContext(8192); } function inAwaitContext() { return inContext(16384); } function parseErrorAtCurrentToken(message, arg0) { parseErrorAt(scanner.getTokenPos(), scanner.getTextPos(), message, arg0); } function parseErrorAtPosition(start, length, message, arg0) { var lastError = ts.lastOrUndefined(parseDiagnostics); if (!lastError || start !== lastError.start) { parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0)); } parseErrorBeforeNextFinishedNode = true; } function parseErrorAt(start, end, message, arg0) { parseErrorAtPosition(start, end - start, message, arg0); } function parseErrorAtRange(range, message, arg0) { parseErrorAt(range.pos, range.end, message, arg0); } function scanError(message, length) { parseErrorAtPosition(scanner.getTextPos(), length, message); } function getNodePos() { return scanner.getStartPos(); } function token() { return currentToken; } function nextToken() { return currentToken = scanner.scan(); } function reScanGreaterToken() { return currentToken = scanner.reScanGreaterToken(); } function reScanSlashToken() { return currentToken = scanner.reScanSlashToken(); } function reScanTemplateToken() { return currentToken = scanner.reScanTemplateToken(); } function scanJsxIdentifier() { return currentToken = scanner.scanJsxIdentifier(); } function scanJsxText() { return currentToken = scanner.scanJsxToken(); } function scanJsxAttributeValue() { return currentToken = scanner.scanJsxAttributeValue(); } function speculationHelper(callback, isLookAhead) { var saveToken = currentToken; var saveParseDiagnosticsLength = parseDiagnostics.length; var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; var saveContextFlags = contextFlags; var result = isLookAhead ? scanner.lookAhead(callback) : scanner.tryScan(callback); ts.Debug.assert(saveContextFlags === contextFlags); if (!result || isLookAhead) { currentToken = saveToken; parseDiagnostics.length = saveParseDiagnosticsLength; parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; } return result; } function lookAhead(callback) { return speculationHelper(callback, true); } function tryParse(callback) { return speculationHelper(callback, false); } function isIdentifier() { if (token() === 71) { return true; } if (token() === 116 && inYieldContext()) { return false; } if (token() === 121 && inAwaitContext()) { return false; } return token() > 107; } function parseExpected(kind, diagnosticMessage, shouldAdvance) { if (shouldAdvance === void 0) { shouldAdvance = true; } if (token() === kind) { if (shouldAdvance) { nextToken(); } return true; } if (diagnosticMessage) { parseErrorAtCurrentToken(diagnosticMessage); } else { parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind)); } return false; } function parseOptional(t) { if (token() === t) { nextToken(); return true; } return false; } function parseOptionalToken(t) { if (token() === t) { return parseTokenNode(); } return undefined; } function parseExpectedToken(t, diagnosticMessage, arg0) { return parseOptionalToken(t) || createMissingNode(t, false, diagnosticMessage || ts.Diagnostics._0_expected, arg0 || ts.tokenToString(t)); } function parseTokenNode() { var node = createNode(token()); nextToken(); return finishNode(node); } function canParseSemicolon() { if (token() === 25) { return true; } return token() === 18 || token() === 1 || scanner.hasPrecedingLineBreak(); } function parseSemicolon() { if (canParseSemicolon()) { if (token() === 25) { nextToken(); } return true; } else { return parseExpected(25); } } function createNode(kind, pos) { nodeCount++; var p = pos >= 0 ? pos : scanner.getStartPos(); 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) { addJSDocComment(node); } return node; } function createNodeArray(elements, pos, end) { var length = elements.length; var array = (length >= 1 && length <= 4 ? elements.slice() : elements); array.pos = pos; array.end = end === undefined ? scanner.getStartPos() : end; return array; } function finishNode(node, end) { node.end = end === undefined ? scanner.getStartPos() : end; if (contextFlags) { node.flags |= contextFlags; } if (parseErrorBeforeNextFinishedNode) { parseErrorBeforeNextFinishedNode = false; node.flags |= 32768; } return node; } function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) { if (reportAtCurrentPosition) { parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0); } else if (diagnosticMessage) { parseErrorAtCurrentToken(diagnosticMessage, arg0); } var result = createNode(kind); if (kind === 71) { result.escapedText = ""; } else if (ts.isLiteralKind(kind) || ts.isTemplateLiteralKind(kind)) { result.text = ""; } return finishNode(result); } function internIdentifier(text) { var identifier = identifiers.get(text); if (identifier === undefined) { identifiers.set(text, identifier = text); } return identifier; } function createIdentifier(isIdentifier, diagnosticMessage) { identifierCount++; if (isIdentifier) { var node = createNode(71); if (token() !== 71) { node.originalKeywordKind = token(); } node.escapedText = ts.escapeLeadingUnderscores(internIdentifier(scanner.getTokenValue())); nextToken(); return finishNode(node); } var reportAtCurrentPosition = token() === 1; return createMissingNode(71, reportAtCurrentPosition, diagnosticMessage || ts.Diagnostics.Identifier_expected); } function parseIdentifier(diagnosticMessage) { return createIdentifier(isIdentifier(), diagnosticMessage); } function parseIdentifierName(diagnosticMessage) { return createIdentifier(ts.tokenIsIdentifierOrKeyword(token()), diagnosticMessage); } function isLiteralPropertyName() { return ts.tokenIsIdentifierOrKeyword(token()) || token() === 9 || token() === 8; } function parsePropertyNameWorker(allowComputedPropertyNames) { if (token() === 9 || token() === 8) { var node = parseLiteralNode(); node.text = internIdentifier(node.text); return node; } if (allowComputedPropertyNames && token() === 21) { return parseComputedPropertyName(); } return parseIdentifierName(); } function parsePropertyName() { return parsePropertyNameWorker(true); } function parseComputedPropertyName() { var node = createNode(147); parseExpected(21); node.expression = allowInAnd(parseExpression); parseExpected(22); return finishNode(node); } function parseContextualModifier(t) { return token() === t && tryParse(nextTokenCanFollowModifier); } function nextTokenIsOnSameLineAndCanFollowModifier() { nextToken(); if (scanner.hasPrecedingLineBreak()) { return false; } return canFollowModifier(); } function nextTokenCanFollowModifier() { switch (token()) { case 76: return nextToken() === 83; case 84: nextToken(); if (token() === 79) { return lookAhead(nextTokenCanFollowDefaultKeyword); } return token() !== 39 && token() !== 118 && token() !== 17 && canFollowModifier(); case 79: return nextTokenCanFollowDefaultKeyword(); case 115: case 125: case 136: nextToken(); return canFollowModifier(); default: return nextTokenIsOnSameLineAndCanFollowModifier(); } } function parseAnyContextualModifier() { return ts.isModifierKind(token()) && tryParse(nextTokenCanFollowModifier); } function canFollowModifier() { return token() === 21 || token() === 17 || token() === 39 || token() === 24 || isLiteralPropertyName(); } function nextTokenCanFollowDefaultKeyword() { nextToken(); return token() === 75 || token() === 89 || token() === 109 || (token() === 117 && lookAhead(nextTokenIsClassKeywordOnSameLine)) || (token() === 120 && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); if (node) { return true; } switch (parsingContext) { 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: 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: return token() === 21 || token() === 24 || isLiteralPropertyName(); case 7: if (token() === 17) { return lookAhead(isValidHeritageClauseObjectLiteral); } if (!inErrorRecovery) { return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword(); } else { return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword(); } case 8: return isIdentifierOrPattern(); case 10: return token() === 26 || token() === 24 || isIdentifierOrPattern(); case 18: return isIdentifier(); case 15: if (token() === 26) { return true; } case 11: return token() === 24 || isStartOfExpression(); case 16: return isStartOfParameter(); case 19: case 20: return token() === 26 || isStartOfType(); case 21: return isHeritageClause(); case 22: return ts.tokenIsIdentifierOrKeyword(token()); 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); if (nextToken() === 18) { var next = nextToken(); return next === 26 || next === 17 || next === 85 || next === 108; } return true; } function nextTokenIsIdentifier() { nextToken(); return isIdentifier(); } function nextTokenIsIdentifierOrKeyword() { nextToken(); return ts.tokenIsIdentifierOrKeyword(token()); } function nextTokenIsIdentifierOrKeywordOrGreaterThan() { nextToken(); return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token()); } function isHeritageClauseExtendsOrImplementsKeyword() { if (token() === 108 || token() === 85) { return lookAhead(nextTokenIsStartOfExpression); } return false; } function nextTokenIsStartOfExpression() { nextToken(); return isStartOfExpression(); } function nextTokenIsStartOfType() { nextToken(); return isStartOfType(); } function isListTerminator(kind) { if (token() === 1) { return true; } switch (kind) { 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: 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 (canParseSemicolon()) { return true; } if (isInOrOfKeyword(token())) { return true; } if (token() === 36) { return true; } return false; } function isInSomeParsingContext() { for (var kind = 0; kind < 23; kind++) { if (parsingContext & (1 << kind)) { if (isListElement(kind, true) || isListTerminator(kind)) { return true; } } } return false; } function parseList(kind, parseElement) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var list = []; var listPos = getNodePos(); while (!isListTerminator(kind)) { if (isListElement(kind, false)) { var element = parseListElement(kind, parseElement); list.push(element); continue; } if (abortParsingListOrMoveToNextToken(kind)) { break; } } parsingContext = saveParsingContext; return createNodeArray(list, listPos); } function parseListElement(parsingContext, parseElement) { var node = currentNode(parsingContext); if (node) { return consumeNode(node); } return parseElement(); } function currentNode(parsingContext) { if (parseErrorBeforeNextFinishedNode) { return undefined; } if (!syntaxCursor) { return undefined; } var node = syntaxCursor.currentNode(scanner.getStartPos()); if (ts.nodeIsMissing(node)) { return undefined; } if (node.intersectsChange) { return undefined; } if (ts.containsParseError(node)) { return undefined; } var nodeContextFlags = node.flags & 12679168; if (nodeContextFlags !== contextFlags) { return undefined; } if (!canReuseNode(node, parsingContext)) { return undefined; } if (node.jsDocCache) { node.jsDocCache = undefined; } return node; } function consumeNode(node) { scanner.setTextPos(node.end); nextToken(); return node; } function canReuseNode(node, parsingContext) { switch (parsingContext) { case 5: return isReusableClassMember(node); case 2: return isReusableSwitchClause(node); case 0: case 1: case 3: return isReusableStatement(node); case 6: return isReusableEnumMember(node); case 4: return isReusableTypeMember(node); case 8: return isReusableVariableDeclaration(node); case 16: return isReusableParameter(node); case 17: return false; 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: case 160: case 156: case 157: case 152: case 212: return true; case 154: var methodDeclaration = node; var nameIsConstructor = methodDeclaration.name.kind === 71 && methodDeclaration.name.originalKeywordKind === 123; return !nameIsConstructor; } } return false; } function isReusableSwitchClause(node) { if (node) { switch (node.kind) { case 266: case 267: return true; } } return false; } function isReusableStatement(node) { if (node) { switch (node.kind) { 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; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { case 159: case 153: case 160: case 151: case 158: return true; } } return false; } function isReusableVariableDeclaration(node) { if (node.kind !== 232) { return false; } var variableDeclarator = node; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { if (node.kind !== 149) { return false; } var parameter = node; return parameter.initializer === undefined; } function abortParsingListOrMoveToNextToken(kind) { parseErrorAtCurrentToken(parsingContextErrors(kind)); if (isInSomeParsingContext()) { return true; } nextToken(); return false; } function parsingContextErrors(context) { switch (context) { case 0: return ts.Diagnostics.Declaration_or_statement_expected; case 1: return ts.Diagnostics.Declaration_or_statement_expected; case 2: return ts.Diagnostics.case_or_default_expected; case 3: return ts.Diagnostics.Statement_expected; case 17: case 4: return ts.Diagnostics.Property_or_signature_expected; case 5: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; case 6: return ts.Diagnostics.Enum_member_expected; case 7: return ts.Diagnostics.Expression_expected; case 8: return ts.Diagnostics.Variable_declaration_expected; case 9: return ts.Diagnostics.Property_destructuring_pattern_expected; case 10: return ts.Diagnostics.Array_element_destructuring_pattern_expected; case 11: return ts.Diagnostics.Argument_expression_expected; case 12: return ts.Diagnostics.Property_assignment_expected; case 15: return ts.Diagnostics.Expression_or_comma_expected; case 16: return ts.Diagnostics.Parameter_declaration_expected; case 18: return ts.Diagnostics.Type_parameter_declaration_expected; case 19: return ts.Diagnostics.Type_argument_expected; case 20: return ts.Diagnostics.Type_expected; case 21: return ts.Diagnostics.Unexpected_token_expected; case 22: return ts.Diagnostics.Identifier_expected; case 13: return ts.Diagnostics.Identifier_expected; case 14: return ts.Diagnostics.Identifier_expected; default: return undefined; } } function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimiter) { var saveParsingContext = parsingContext; parsingContext |= 1 << kind; var list = []; var listPos = getNodePos(); var commaStart = -1; while (true) { if (isListElement(kind, false)) { var startPos = scanner.getStartPos(); list.push(parseListElement(kind, parseElement)); commaStart = scanner.getTokenPos(); if (parseOptional(26)) { continue; } commaStart = -1; if (isListTerminator(kind)) { break; } parseExpected(26); if (considerSemicolonAsDelimiter && token() === 25 && !scanner.hasPrecedingLineBreak()) { nextToken(); } if (startPos === scanner.getStartPos()) { nextToken(); } continue; } if (isListTerminator(kind)) { break; } if (abortParsingListOrMoveToNextToken(kind)) { break; } } parsingContext = saveParsingContext; var result = createNodeArray(list, listPos); if (commaStart >= 0) { result.hasTrailingComma = true; } return result; } function createMissingList() { return createNodeArray([], getNodePos()); } function parseBracketedList(kind, parseElement, open, close) { if (parseExpected(open)) { var result = parseDelimitedList(kind, parseElement); parseExpected(close); return result; } return createMissingList(); } function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage); var dotPos = scanner.getStartPos(); while (parseOptional(23)) { if (token() === 27) { entity.jsdocDotPos = dotPos; break; } dotPos = scanner.getStartPos(); entity = createQualifiedName(entity, parseRightSideOfDot(allowReservedWords)); } return entity; } function createQualifiedName(entity, name) { var node = createNode(146, entity.pos); node.left = entity; node.right = name; return finishNode(node); } function parseRightSideOfDot(allowIdentifierNames) { if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token())) { var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); if (matchesPattern) { return createMissingNode(71, true, ts.Diagnostics.Identifier_expected); } } return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { var template = createNode(202); template.head = parseTemplateHead(); 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); template.templateSpans = createNodeArray(list, listPos); return finishNode(template); } function parseTemplateSpan() { var span = createNode(211); span.expression = allowInAnd(parseExpression); var literal; if (token() === 18) { reScanTemplateToken(); literal = parseTemplateMiddleOrTemplateTail(); } else { literal = parseExpectedToken(16, ts.Diagnostics._0_expected, ts.tokenToString(18)); } span.literal = literal; return finishNode(span); } function parseLiteralNode() { return parseLiteralLikeNode(token()); } function parseTemplateHead() { var fragment = parseLiteralLikeNode(token()); 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 || fragment.kind === 16, "Template fragment has wrong token kind"); return fragment; } function parseLiteralLikeNode(kind) { var node = createNode(kind); var text = scanner.getTokenValue(); node.text = text; if (scanner.hasExtendedUnicodeEscape()) { node.hasExtendedUnicodeEscape = true; } if (scanner.isUnterminated()) { node.isUnterminated = true; } if (node.kind === 8) { node.numericLiteralFlags = scanner.getTokenFlags() & 1008; } nextToken(); finishNode(node); return node; } function parseTypeReference() { 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); } function typeHasArrowFunctionBlockingParseError(node) { switch (node.kind) { case 162: return ts.nodeIsMissing(node.typeName); case 163: case 164: { var _a = node, parameters = _a.parameters, type = _a.type; return parameters.pos === parameters.end || typeHasArrowFunctionBlockingParseError(type); } case 173: return typeHasArrowFunctionBlockingParseError(node.type); default: return false; } } function parseThisTypePredicate(lhs) { nextToken(); var node = createNode(161, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { var node = createNode(174); nextToken(); return finishNode(node); } function parseJSDocAllType(postFixEquals) { var result = createNode(279); if (postFixEquals) { return createJSDocPostfixType(283, result); } else { nextToken(); } return finishNode(result); } function parseJSDocNonNullableType() { var result = createNode(282); nextToken(); result.type = parseNonArrayType(); return finishNode(result); } function parseJSDocUnknownOrNullableType() { var pos = scanner.getStartPos(); nextToken(); 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, pos); result.type = parseType(); return finishNode(result); } } function parseJSDocFunctionType() { if (lookAhead(nextTokenIsOpenParen)) { var result = createNodeWithJSDoc(284); nextToken(); fillSignature(56, 4 | 32, result); return finishNode(result); } var node = createNode(162); node.typeName = parseIdentifierName(); return finishNode(node); } function parseJSDocParameter() { var parameter = createNode(149); if (token() === 99 || token() === 94) { parameter.name = parseIdentifierName(); parseExpected(56); } parameter.type = parseJSDocType(); return finishNode(parameter); } function parseJSDocType() { var dotdotdot = parseOptionalToken(24); var type = parseType(); if (dotdotdot) { var variadic = createNode(285, dotdotdot.pos); variadic.type = type; type = finishNode(variadic); } if (token() === 58) { return createJSDocPostfixType(283, type); } return type; } function parseTypeQuery() { var node = createNode(165); parseExpected(103); node.exprName = parseEntityName(true); return finishNode(node); } function parseTypeParameter() { var node = createNode(148); node.name = parseIdentifier(); if (parseOptional(85)) { if (isStartOfType() || !isStartOfExpression()) { node.constraint = parseType(); } else { node.expression = parseUnaryExpressionOrHigher(); } } if (parseOptional(58)) { node.default = parseType(); } return finishNode(node); } function parseTypeParameters() { if (token() === 27) { return parseBracketedList(18, parseTypeParameter, 27, 29); } } function parseParameterType() { if (parseOptional(56)) { return parseType(); } return undefined; } function isStartOfParameter() { return token() === 24 || isIdentifierOrPattern() || ts.isModifierKind(token()) || token() === 57 || isStartOfType(true); } function parseParameter() { 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); node.name = parseIdentifierOrPattern(); if (ts.getFullWidth(node.name) === 0 && !ts.hasModifiers(node) && ts.isModifierKind(token())) { nextToken(); } node.questionToken = parseOptionalToken(55); node.type = parseParameterType(); node.initializer = parseInitializer(); return finishNode(node); } function fillSignature(returnToken, flags, signature) { if (!(flags & 32)) { signature.typeParameters = parseTypeParameters(); } var parametersParsedSuccessfully = parseParameterList(signature, flags); if (shouldParseReturnType(returnToken, !!(flags & 4))) { signature.type = parseTypeOrTypePredicate(); if (typeHasArrowFunctionBlockingParseError(signature.type)) return false; } return parametersParsedSuccessfully; } function shouldParseReturnType(returnToken, isType) { if (returnToken === 36) { parseExpected(returnToken); return true; } else if (parseOptional(56)) { return true; } else if (isType && token() === 36) { parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(56)); nextToken(); return true; } return false; } function parseParameterList(signature, flags) { if (!parseExpected(19)) { signature.parameters = createMissingList(); return false; } var savedYieldContext = inYieldContext(); var savedAwaitContext = inAwaitContext(); setYieldContext(!!(flags & 1)); setAwaitContext(!!(flags & 2)); signature.parameters = parseDelimitedList(16, flags & 32 ? parseJSDocParameter : parseParameter); setYieldContext(savedYieldContext); setAwaitContext(savedAwaitContext); return parseExpected(20); } function parseTypeMemberSemicolon() { if (parseOptional(26)) { return; } parseSemicolon(); } function parseSignatureMember(kind) { var node = createNodeWithJSDoc(kind); if (kind === 159) { parseExpected(94); } fillSignature(56, 4, node); parseTypeMemberSemicolon(); return finishNode(node); } function isIndexSignature() { return token() === 21 && lookAhead(isUnambiguouslyIndexSignature); } function isUnambiguouslyIndexSignature() { nextToken(); if (token() === 24 || token() === 22) { return true; } if (ts.isModifierKind(token())) { nextToken(); if (isIdentifier()) { return true; } } else if (!isIdentifier()) { return false; } else { nextToken(); } if (token() === 56 || token() === 26) { return true; } if (token() !== 55) { return false; } nextToken(); return token() === 56 || token() === 26 || token() === 22; } function parseIndexSignatureDeclaration(node) { 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); if (token() === 19 || token() === 27) { node.kind = 153; fillSignature(56, 4, node); } else { node.kind = 151; node.type = parseTypeAnnotation(); if (token() === 58) { node.initializer = parseInitializer(); } } parseTypeMemberSemicolon(); return finishNode(node); } function isTypeMemberStart() { if (token() === 19 || token() === 27) { return true; } var idToken = false; while (ts.isModifierKind(token())) { idToken = true; nextToken(); } if (token() === 21) { return true; } if (isLiteralPropertyName()) { idToken = true; nextToken(); } if (idToken) { return token() === 19 || token() === 27 || token() === 55 || token() === 56 || token() === 26 || canParseSemicolon(); } return false; } function parseTypeMember() { if (token() === 19 || token() === 27) { return parseSignatureMember(158); } if (token() === 94 && lookAhead(nextTokenIsOpenParenOrLessThan)) { return parseSignatureMember(159); } var node = createNodeWithJSDoc(0); node.modifiers = parseModifiers(); if (isIndexSignature()) { return parseIndexSignatureDeclaration(node); } return parsePropertyOrMethodSignature(node); } function nextTokenIsOpenParenOrLessThan() { nextToken(); return token() === 19 || token() === 27; } function nextTokenIsDot() { return nextToken() === 23; } function nextTokenIsOpenParenOrLessThanOrDot() { switch (nextToken()) { case 19: case 27: case 23: return true; } return false; } function parseTypeLiteral() { var node = createNode(166); node.members = parseObjectTypeMembers(); return finishNode(node); } function parseObjectTypeMembers() { var members; if (parseExpected(17)) { members = parseList(4, parseTypeMember); parseExpected(18); } else { members = createMissingList(); } return members; } function isStartOfMappedType() { nextToken(); if (token() === 37 || token() === 38) { return nextToken() === 132; } if (token() === 132) { nextToken(); } return token() === 21 && nextTokenIsIdentifier() && nextToken() === 92; } function parseMappedTypeParameter() { var node = createNode(148); node.name = parseIdentifier(); parseExpected(92); node.constraint = parseType(); return finishNode(node); } function parseMappedType() { var node = createNode(177); parseExpected(17); if (token() === 132 || token() === 37 || token() === 38) { node.readonlyToken = parseTokenNode(); if (node.readonlyToken.kind !== 132) { parseExpectedToken(132); } } parseExpected(21); node.typeParameter = parseMappedTypeParameter(); parseExpected(22); if (token() === 55 || token() === 37 || token() === 38) { node.questionToken = parseTokenNode(); if (node.questionToken.kind !== 55) { parseExpectedToken(55); } } node.type = parseTypeAnnotation(); parseSemicolon(); parseExpected(18); return finishNode(node); } function parseTupleType() { var node = createNode(168); node.elementTypes = parseBracketedList(20, parseType, 21, 22); return finishNode(node); } function parseParenthesizedType() { var node = createNode(173); parseExpected(19); node.type = parseType(); parseExpected(20); return finishNode(node); } function parseFunctionOrConstructorType() { var pos = getNodePos(); var kind = parseOptional(94) ? 164 : 163; var node = createNodeWithJSDoc(kind, pos); fillSignature(36, 4, node); return finishNode(node); } function parseKeywordAndNoDot() { var node = parseTokenNode(); return token() === 23 ? undefined : node; } function parseLiteralTypeNode(negative) { var node = createNode(178); var unaryMinusExpression; if (negative) { unaryMinusExpression = createNode(198); unaryMinusExpression.operator = 38; nextToken(); } var expression = token() === 101 || token() === 86 ? parseTokenNode() : parseLiteralLikeNode(token()); if (negative) { unaryMinusExpression.operand = expression; finishNode(unaryMinusExpression); expression = unaryMinusExpression; } node.literal = expression; return finishNode(node); } function isStartOfTypeOfImportType() { nextToken(); return token() === 91; } function parseImportType() { sourceFile.flags |= 524288; var node = createNode(179); if (parseOptional(103)) { node.isTypeOf = true; } parseExpected(91); parseExpected(19); node.argument = parseType(); parseExpected(20); if (parseOptional(23)) { node.qualifier = parseEntityName(true, ts.Diagnostics.Type_expected); } node.typeArguments = tryParseTypeArguments(); return finishNode(node); } function nextTokenIsNumericLiteral() { return nextToken() === 8; } function parseNonArrayType() { switch (token()) { case 119: case 142: case 137: case 134: case 138: case 122: case 140: case 131: case 135: return tryParse(parseKeywordAndNoDot) || parseTypeReference(); case 39: return parseJSDocAllType(false); case 61: return parseJSDocAllType(true); case 55: return parseJSDocUnknownOrNullableType(); case 89: return parseJSDocFunctionType(); case 51: return parseJSDocNonNullableType(); case 13: case 9: case 8: case 101: case 86: return parseLiteralTypeNode(); case 38: return lookAhead(nextTokenIsNumericLiteral) ? parseLiteralTypeNode(true) : parseTypeReference(); case 105: case 95: return parseTokenNode(); case 99: { var thisKeyword = parseThisTypeNode(); if (token() === 127 && !scanner.hasPrecedingLineBreak()) { return parseThisTypePredicate(thisKeyword); } else { return thisKeyword; } } case 103: return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery(); case 17: return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral(); case 21: return parseTupleType(); case 19: return parseParenthesizedType(); case 91: return parseImportType(); default: return parseTypeReference(); } } function isStartOfType(inStartOfParameter) { switch (token()) { 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: return !inStartOfParameter && lookAhead(nextTokenIsNumericLiteral); case 19: return !inStartOfParameter && lookAhead(isStartOfParenthesizedOrFunctionType); default: return isIdentifier(); } } function isStartOfParenthesizedOrFunctionType() { nextToken(); return token() === 20 || isStartOfParameter() || isStartOfType(); } function parsePostfixTypeOrHigher() { var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak()) { switch (token()) { case 51: type = createJSDocPostfixType(282, type); break; case 55: if (!(contextFlags & 2097152) && lookAhead(nextTokenIsStartOfType)) { return type; } type = createJSDocPostfixType(281, type); break; case 21: parseExpected(21); if (isStartOfType()) { var node = createNode(176, type.pos); node.objectType = type; node.indexType = parseType(); parseExpected(22); type = finishNode(node); } else { var node = createNode(167, type.pos); node.elementType = type; parseExpected(22); type = finishNode(node); } break; default: return type; } } return type; } function createJSDocPostfixType(kind, type) { nextToken(); var postfix = createNode(kind, type.pos); postfix.type = type; return finishNode(postfix); } function parseTypeOperator(operator) { var node = createNode(175); parseExpected(operator); node.operator = operator; node.type = parseTypeOperatorOrHigher(); return finishNode(node); } function parseInferType() { var node = createNode(172); parseExpected(126); var typeParameter = createNode(148); typeParameter.name = parseIdentifier(); node.typeParameter = finishNode(typeParameter); return finishNode(node); } function parseTypeOperatorOrHigher() { var operator = token(); switch (operator) { case 128: case 141: return parseTypeOperator(operator); case 126: return parseInferType(); } return parsePostfixTypeOrHigher(); } function parseUnionOrIntersectionType(kind, parseConstituentType, operator) { parseOptional(operator); var type = parseConstituentType(); if (token() === operator) { var types = [type]; while (parseOptional(operator)) { types.push(parseConstituentType()); } var node = createNode(kind, type.pos); node.types = createNodeArray(types, type.pos); type = finishNode(node); } return type; } function parseIntersectionTypeOrHigher() { return parseUnionOrIntersectionType(170, parseTypeOperatorOrHigher, 48); } function parseUnionTypeOrHigher() { return parseUnionOrIntersectionType(169, parseIntersectionTypeOrHigher, 49); } function isStartOfFunctionType() { if (token() === 27) { return true; } return token() === 19 && lookAhead(isUnambiguouslyStartOfFunctionType); } function skipParameterStart() { if (ts.isModifierKind(token())) { parseModifiers(); } if (isIdentifier() || token() === 99) { nextToken(); return true; } if (token() === 21 || token() === 17) { var previousErrorCount = parseDiagnostics.length; parseIdentifierOrPattern(); return previousErrorCount === parseDiagnostics.length; } return false; } function isUnambiguouslyStartOfFunctionType() { nextToken(); if (token() === 20 || token() === 24) { return true; } if (skipParameterStart()) { if (token() === 56 || token() === 26 || token() === 55 || token() === 58) { return true; } if (token() === 20) { nextToken(); if (token() === 36) { return true; } } } return false; } function parseTypeOrTypePredicate() { var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { var node = createNode(161, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); } else { return type; } } function parseTypePredicatePrefix() { var id = parseIdentifier(); if (token() === 127 && !scanner.hasPrecedingLineBreak()) { nextToken(); return id; } } function parseType() { return doOutsideOfContext(20480, parseTypeWorker); } function parseTypeWorker(noConditionalTypes) { if (isStartOfFunctionType() || token() === 94) { return parseFunctionOrConstructorType(); } var type = parseUnionTypeOrHigher(); if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(85)) { var node = createNode(171, type.pos); node.checkType = type; node.extendsType = parseTypeWorker(true); parseExpected(55); node.trueType = parseTypeWorker(); parseExpected(56); node.falseType = parseTypeWorker(); return finishNode(node); } return type; } function parseTypeAnnotation() { return parseOptional(56) ? parseType() : undefined; } function isStartOfLeftHandSideExpression() { switch (token()) { 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: return lookAhead(nextTokenIsOpenParenOrLessThanOrDot); default: return isIdentifier(); } } function isStartOfExpression() { if (isStartOfLeftHandSideExpression()) { return true; } switch (token()) { 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: if (isBinaryOperator()) { return true; } return isIdentifier(); } } function isStartOfExpressionStatement() { return token() !== 17 && token() !== 89 && token() !== 75 && token() !== 57 && isStartOfExpression(); } function parseExpression() { var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { setDecoratorContext(false); } var expr = parseAssignmentExpressionOrHigher(); var operatorToken; while ((operatorToken = parseOptionalToken(26))) { expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher()); } if (saveDecoratorContext) { setDecoratorContext(true); } return expr; } function parseInitializer() { return parseOptional(58) ? parseAssignmentExpressionOrHigher() : undefined; } function parseAssignmentExpressionOrHigher() { if (isYieldExpression()) { return parseYieldExpression(); } var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } var expr = parseBinaryExpressionOrHigher(0); if (expr.kind === 71 && token() === 36) { return parseSimpleArrowFunctionExpression(expr); } if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) { return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher()); } return parseConditionalExpressionRest(expr); } function isYieldExpression() { if (token() === 116) { if (inYieldContext()) { return true; } return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); } return false; } function nextTokenIsIdentifierOnSameLine() { nextToken(); return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { var node = createNode(203); nextToken(); if (!scanner.hasPrecedingLineBreak() && (token() === 39 || isStartOfExpression())) { node.asteriskToken = parseOptionalToken(39); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } else { return finishNode(node); } } function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { ts.Debug.assert(token() === 36, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); var node; if (asyncModifier) { node = createNode(193, asyncModifier.pos); node.modifiers = asyncModifier; } else { node = createNode(193, 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); node.body = parseArrowFunctionExpressionBody(!!asyncModifier); return addJSDocComment(finishNode(node)); } function tryParseParenthesizedArrowFunctionExpression() { var triState = isParenthesizedArrowFunctionExpression(); if (triState === 0) { return undefined; } var arrowFunction = triState === 1 ? parseParenthesizedArrowFunctionExpressionHead(true) : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); if (!arrowFunction) { return undefined; } var isAsync = ts.hasModifier(arrowFunction, 256); var lastToken = token(); arrowFunction.equalsGreaterThanToken = parseExpectedToken(36); arrowFunction.body = (lastToken === 36 || lastToken === 17) ? parseArrowFunctionExpressionBody(isAsync) : parseIdentifier(); return finishNode(arrowFunction); } function isParenthesizedArrowFunctionExpression() { if (token() === 19 || token() === 27 || token() === 120) { return lookAhead(isParenthesizedArrowFunctionExpressionWorker); } if (token() === 36) { return 1; } return 0; } function isParenthesizedArrowFunctionExpressionWorker() { if (token() === 120) { nextToken(); if (scanner.hasPrecedingLineBreak()) { return 0; } if (token() !== 19 && token() !== 27) { return 0; } } var first = token(); var second = nextToken(); if (first === 19) { if (second === 20) { var third = nextToken(); switch (third) { case 36: case 56: case 17: return 1; default: return 0; } } if (second === 21 || second === 17) { return 2; } if (second === 24) { return 1; } if (ts.isModifierKind(second) && second !== 120 && lookAhead(nextTokenIsIdentifier)) { return 1; } if (!isIdentifier()) { return 0; } switch (nextToken()) { case 56: return 1; case 55: nextToken(); if (token() === 56 || token() === 26 || token() === 58 || token() === 20) { return 1; } return 0; case 26: case 58: case 20: return 2; } return 0; } else { ts.Debug.assert(first === 27); if (!isIdentifier()) { return 0; } if (sourceFile.languageVariant === 1) { var isArrowFunctionInJsx = lookAhead(function () { var third = nextToken(); if (third === 85) { var fourth = nextToken(); switch (fourth) { case 58: case 29: return false; default: return true; } } else if (third === 26) { return true; } return false; }); if (isArrowFunctionInJsx) { return 1; } return 0; } return 2; } } function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(false); } function tryParseAsyncSimpleArrowFunctionExpression() { if (token() === 120) { if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1) { var asyncModifier = parseModifiersForArrowFunction(); var expr = parseBinaryExpressionOrHigher(0); return parseSimpleArrowFunctionExpression(expr, asyncModifier); } } return undefined; } function isUnParenthesizedAsyncArrowFunctionWorker() { if (token() === 120) { nextToken(); if (scanner.hasPrecedingLineBreak() || token() === 36) { return 0; } var expr = parseBinaryExpressionOrHigher(0); if (!scanner.hasPrecedingLineBreak() && expr.kind === 71 && token() === 36) { return 1; } } return 0; } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { var node = createNodeWithJSDoc(193); node.modifiers = parseModifiersForArrowFunction(); var isAsync = ts.hasModifier(node, 256) ? 2 : 0; if (!fillSignature(56, isAsync, node) && !allowAmbiguity) { return undefined; } if (!allowAmbiguity && token() !== 36 && token() !== 17) { return undefined; } return node; } function parseArrowFunctionExpressionBody(isAsync) { if (token() === 17) { return parseFunctionBlock(isAsync ? 2 : 0); } if (token() !== 25 && token() !== 89 && token() !== 75 && isStartOfStatement() && !isStartOfExpressionStatement()) { return parseFunctionBlock(16 | (isAsync ? 2 : 0)); } return isAsync ? doInAwaitContext(parseAssignmentExpressionOrHigher) : doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher); } function parseConditionalExpressionRest(leftOperand) { var questionToken = parseOptionalToken(55); if (!questionToken) { return leftOperand; } var node = createNode(201, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); node.colonToken = parseExpectedToken(56); node.whenFalse = ts.nodeIsPresent(node.colonToken) ? parseAssignmentExpressionOrHigher() : createMissingNode(71, false, ts.Diagnostics._0_expected, ts.tokenToString(56)); return finishNode(node); } function parseBinaryExpressionOrHigher(precedence) { var leftOperand = parseUnaryExpressionOrHigher(); return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { return t === 92 || t === 145; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { reScanGreaterToken(); var newPrecedence = ts.getBinaryOperatorPrecedence(token()); var consumeCurrentOperator = token() === 40 ? newPrecedence >= precedence : newPrecedence > precedence; if (!consumeCurrentOperator) { break; } if (token() === 92 && inDisallowInContext()) { break; } if (token() === 118) { if (scanner.hasPrecedingLineBreak()) { break; } else { nextToken(); leftOperand = makeAsExpression(leftOperand, parseType()); } } else { leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence)); } } return leftOperand; } function isBinaryOperator() { if (inDisallowInContext() && token() === 92) { return false; } return ts.getBinaryOperatorPrecedence(token()) > 0; } function makeBinaryExpression(left, operatorToken, right) { 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, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { var node = createNode(198); node.operator = token(); nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { var node = createNode(194); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseTypeOfExpression() { var node = createNode(195); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseVoidExpression() { var node = createNode(196); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function isAwaitExpression() { if (token() === 121) { if (inAwaitContext()) { return true; } return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); } return false; } function parseAwaitExpression() { var node = createNode(197); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseUnaryExpressionOrHigher() { if (isUpdateExpression()) { var updateExpression = parseUpdateExpression(); return token() === 40 ? parseBinaryExpressionRest(ts.getBinaryOperatorPrecedence(token()), updateExpression) : updateExpression; } var unaryOperator = token(); var simpleUnaryExpression = parseSimpleUnaryExpression(); if (token() === 40) { var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); var end = simpleUnaryExpression.end; 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 { parseErrorAt(pos, end, ts.Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, ts.tokenToString(unaryOperator)); } } return simpleUnaryExpression; } function parseSimpleUnaryExpression() { switch (token()) { case 37: case 38: case 52: case 51: return parsePrefixUnaryExpression(); case 80: return parseDeleteExpression(); case 103: return parseTypeOfExpression(); case 105: return parseVoidExpression(); case 27: return parseTypeAssertion(); case 121: if (isAwaitExpression()) { return parseAwaitExpression(); } default: return parseUpdateExpression(); } } function isUpdateExpression() { switch (token()) { case 37: case 38: case 52: case 51: case 80: case 103: case 105: case 121: return false; case 27: if (sourceFile.languageVariant !== 1) { return false; } default: return true; } } function parseUpdateExpression() { if (token() === 43 || token() === 44) { var node = createNode(198); node.operator = token(); nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); return finishNode(node); } else if (sourceFile.languageVariant === 1 && token() === 27 && lookAhead(nextTokenIsIdentifierOrKeywordOrGreaterThan)) { return parseJsxElementOrSelfClosingElementOrFragment(true); } var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); if ((token() === 43 || token() === 44) && !scanner.hasPrecedingLineBreak()) { var node = createNode(199, expression.pos); node.operand = expression; node.operator = token(); nextToken(); return finishNode(node); } return expression; } function parseLeftHandSideExpressionOrHigher() { var expression; if (token() === 91) { if (lookAhead(nextTokenIsOpenParenOrLessThan)) { sourceFile.flags |= 524288; expression = parseTokenNode(); } else if (lookAhead(nextTokenIsDot)) { var fullStart = scanner.getStartPos(); nextToken(); nextToken(); var node = createNode(210, fullStart); node.keywordToken = 91; node.name = parseIdentifierName(); expression = finishNode(node); sourceFile.flags |= 1048576; } else { expression = parseMemberExpressionOrHigher(); } } else { expression = token() === 97 ? parseSuperExpression() : parseMemberExpressionOrHigher(); } return parseCallExpressionRest(expression); } function parseMemberExpressionOrHigher() { var expression = parsePrimaryExpression(); return parseMemberExpressionRest(expression); } function parseSuperExpression() { var expression = parseTokenNode(); if (token() === 19 || token() === 23 || token() === 21) { return expression; } var node = createNode(185, expression.pos); node.expression = expression; 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) { var node = createNode(255, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement); node.closingElement = parseJsxClosingElement(inExpressionContext); if (!tagNamesAreEquivalent(node.openingElement.tagName, node.closingElement.tagName)) { parseErrorAtRange(node.closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, node.openingElement.tagName)); } result = finishNode(node); } 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); result = opening; } 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, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; badNode.operatorToken = createMissingNode(26, false, undefined); badNode.operatorToken.pos = badNode.operatorToken.end = badNode.right.pos; return badNode; } } return result; } function parseJsxText() { var node = createNode(10); node.containsOnlyWhiteSpaces = currentToken === 11; currentToken = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild(openingTag, token) { switch (token) { case 1: if (ts.isJsxOpeningFragment(openingTag)) { parseErrorAtRange(openingTag, ts.Diagnostics.JSX_fragment_has_no_corresponding_closing_tag); } else { parseErrorAtRange(openingTag.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, openingTag.tagName)); } return undefined; case 28: case 7: return undefined; case 10: case 11: return parseJsxText(); case 17: return parseJsxExpression(false); case 27: return parseJsxElementOrSelfClosingElementOrFragment(false); default: return ts.Debug.assertNever(token); } } function parseJsxChildren(openingTag) { var list = []; var listPos = getNodePos(); var saveParsingContext = parsingContext; parsingContext |= 1 << 14; while (true) { var child = parseJsxChild(openingTag, currentToken = scanner.reScanJsxToken()); if (!child) break; list.push(child); } parsingContext = saveParsingContext; return createNodeArray(list, listPos); } function parseJsxAttributes() { var jsxAttributes = createNode(263); jsxAttributes.properties = parseList(13, parseJsxAttribute); return finishNode(jsxAttributes); } function parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext) { var fullStart = scanner.getStartPos(); parseExpected(27); if (token() === 29) { var node_1 = createNode(260, fullStart); scanJsxText(); return finishNode(node_1); } var tagName = parseJsxElementName(); var typeArguments = tryParseTypeArguments(); var attributes = parseJsxAttributes(); var node; if (token() === 29) { node = createNode(257, fullStart); scanJsxText(); } else { parseExpected(41); if (inExpressionContext) { parseExpected(29); } else { parseExpected(29, undefined, false); scanJsxText(); } node = createNode(256, fullStart); } node.tagName = tagName; node.typeArguments = typeArguments; node.attributes = attributes; return finishNode(node); } function parseJsxElementName() { scanJsxIdentifier(); var expression = token() === 99 ? parseTokenNode() : parseIdentifierName(); while (parseOptional(23)) { var propertyAccess = createNode(185, expression.pos); propertyAccess.expression = expression; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); } return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(265); if (!parseExpected(17)) { return undefined; } if (token() !== 18) { node.dotDotDotToken = parseOptionalToken(24); node.expression = parseAssignmentExpressionOrHigher(); } if (inExpressionContext) { parseExpected(18); } else { parseExpected(18, undefined, false); scanJsxText(); } return finishNode(node); } function parseJsxAttribute() { if (token() === 17) { return parseJsxSpreadAttribute(); } scanJsxIdentifier(); var node = createNode(262); node.name = parseIdentifierName(); if (token() === 58) { switch (scanJsxAttributeValue()) { case 9: node.initializer = parseLiteralNode(); break; default: node.initializer = parseJsxExpression(true); break; } } return finishNode(node); } function parseJsxSpreadAttribute() { var node = createNode(264); parseExpected(17); parseExpected(24); node.expression = parseExpression(); parseExpected(18); return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { var node = createNode(258); parseExpected(28); node.tagName = parseJsxElementName(); if (inExpressionContext) { parseExpected(29); } else { parseExpected(29, undefined, false); scanJsxText(); } return finishNode(node); } function parseJsxClosingFragment(inExpressionContext) { 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); } else { parseExpected(29, undefined, false); scanJsxText(); } return finishNode(node); } function parseTypeAssertion() { var node = createNode(190); parseExpected(27); node.type = parseType(); parseExpected(29); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseMemberExpressionRest(expression) { while (true) { var dotToken = parseOptionalToken(23); if (dotToken) { var propertyAccess = createNode(185, expression.pos); propertyAccess.expression = expression; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; } if (token() === 51 && !scanner.hasPrecedingLineBreak()) { nextToken(); var nonNullExpression = createNode(209, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } if (!inDecoratorContext() && parseOptional(21)) { var indexedAccess = createNode(186, expression.pos); indexedAccess.expression = expression; if (token() === 22) { indexedAccess.argumentExpression = createMissingNode(71, true, ts.Diagnostics.An_element_access_expression_should_take_an_argument); } else { var argument = allowInAnd(parseExpression); if (ts.isStringOrNumericLiteral(argument)) { argument.text = internIdentifier(argument.text); } indexedAccess.argumentExpression = argument; } parseExpected(22); expression = finishNode(indexedAccess); continue; } if (isTemplateStartOfTaggedTemplate()) { expression = parseTaggedTemplateRest(expression, undefined); continue; } return expression; } } function isTemplateStartOfTaggedTemplate() { return token() === 13 || token() === 14; } function parseTaggedTemplateRest(tag, typeArguments) { var tagExpression = createNode(189, tag.pos); tagExpression.tag = tag; tagExpression.typeArguments = typeArguments; tagExpression.template = token() === 13 ? parseLiteralNode() : parseTemplateExpression(); return finishNode(tagExpression); } function parseCallExpressionRest(expression) { while (true) { expression = parseMemberExpressionRest(expression); if (token() === 27) { var typeArguments = tryParse(parseTypeArgumentsInExpression); if (!typeArguments) { return expression; } if (isTemplateStartOfTaggedTemplate()) { expression = parseTaggedTemplateRest(expression, typeArguments); continue; } var callExpr = createNode(187, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } else if (token() === 19) { var callExpr = createNode(187, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } return expression; } } function parseArgumentList() { parseExpected(19); var result = parseDelimitedList(11, parseArgumentExpression); parseExpected(20); return result; } function parseTypeArgumentsInExpression() { if (!parseOptional(27)) { return undefined; } var typeArguments = parseDelimitedList(19, parseType); if (!parseExpected(29)) { return undefined; } return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : undefined; } function canFollowTypeArgumentsInExpression() { switch (token()) { 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: case 17: default: return false; } } function parsePrimaryExpression() { switch (token()) { case 8: case 9: case 13: return parseLiteralNode(); case 99: case 97: case 95: case 101: case 86: return parseTokenNode(); case 19: return parseParenthesizedExpression(); case 21: return parseArrayLiteralExpression(); case 17: return parseObjectLiteralExpression(); case 120: if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) { break; } return parseFunctionExpression(); case 75: return parseClassExpression(); case 89: return parseFunctionExpression(); case 94: return parseNewExpressionOrNewDotTarget(); case 41: case 63: if (reScanSlashToken() === 12) { return parseLiteralNode(); } break; case 14: return parseTemplateExpression(); } return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { var node = createNodeWithJSDoc(191); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); return finishNode(node); } function parseSpreadElement() { var node = createNode(204); parseExpected(24); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { return token() === 24 ? parseSpreadElement() : token() === 26 ? createNode(206) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { var node = createNode(183); parseExpected(21); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement); parseExpected(22); return finishNode(node); } function parseObjectLiteralElement() { 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)) { return parseAccessorDeclaration(node, 156); } if (parseContextualModifier(136)) { return parseAccessorDeclaration(node, 157); } var asteriskToken = parseOptionalToken(39); var tokenIsIdentifier = isIdentifier(); node.name = parsePropertyName(); node.questionToken = parseOptionalToken(55); if (asteriskToken || token() === 19 || token() === 27) { return parseMethodDeclaration(node, asteriskToken); } var isShorthandPropertyAssignment = tokenIsIdentifier && (token() === 26 || token() === 18 || token() === 58); if (isShorthandPropertyAssignment) { node.kind = 271; var equalsToken = parseOptionalToken(58); if (equalsToken) { node.equalsToken = equalsToken; node.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher); } } else { node.kind = 270; parseExpected(56); node.initializer = allowInAnd(parseAssignmentExpressionOrHigher); } return finishNode(node); } function parseObjectLiteralExpression() { var node = createNode(184); parseExpected(17); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } node.properties = parseDelimitedList(12, parseObjectLiteralElement, true); parseExpected(18); return finishNode(node); } function parseFunctionExpression() { var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { setDecoratorContext(false); } var node = createNodeWithJSDoc(192); node.modifiers = parseModifiers(); 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, isGenerator | isAsync, node); node.body = parseFunctionBlock(isGenerator | isAsync); if (saveDecoratorContext) { setDecoratorContext(true); } return finishNode(node); } function parseOptionalIdentifier() { return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpressionOrNewDotTarget() { var fullStart = scanner.getStartPos(); parseExpected(94); if (parseOptional(23)) { var node_2 = createNode(210, fullStart); node_2.keywordToken = 94; node_2.name = parseIdentifierName(); return finishNode(node_2); } var expression = parsePrimaryExpression(); var typeArguments; while (true) { expression = parseMemberExpressionRest(expression); typeArguments = tryParse(parseTypeArgumentsInExpression); if (isTemplateStartOfTaggedTemplate()) { ts.Debug.assert(!!typeArguments, "Expected a type argument list; all plain tagged template starts should be consumed in 'parseMemberExpressionRest'"); expression = parseTaggedTemplateRest(expression, typeArguments); typeArguments = undefined; } break; } var node = createNode(188, fullStart); node.expression = expression; node.typeArguments = typeArguments; if (node.typeArguments || token() === 19) { node.arguments = parseArgumentList(); } return finishNode(node); } function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { var node = createNode(213); if (parseExpected(17, diagnosticMessage) || ignoreMissingOpenBrace) { if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; } node.statements = parseList(1, parseStatement); parseExpected(18); } else { node.statements = createMissingList(); } return finishNode(node); } function parseFunctionBlock(flags, diagnosticMessage) { var savedYieldContext = inYieldContext(); setYieldContext(!!(flags & 1)); var savedAwaitContext = inAwaitContext(); setAwaitContext(!!(flags & 2)); var saveDecoratorContext = inDecoratorContext(); if (saveDecoratorContext) { setDecoratorContext(false); } var block = parseBlock(!!(flags & 16), diagnosticMessage); if (saveDecoratorContext) { setDecoratorContext(true); } setYieldContext(savedYieldContext); setAwaitContext(savedAwaitContext); return block; } function parseEmptyStatement() { var node = createNode(215); parseExpected(25); return finishNode(node); } function parseIfStatement() { var node = createNode(217); parseExpected(90); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); node.thenStatement = parseStatement(); node.elseStatement = parseOptional(82) ? parseStatement() : undefined; return finishNode(node); } function parseDoStatement() { var node = createNode(218); parseExpected(81); node.statement = parseStatement(); parseExpected(106); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); parseOptional(25); return finishNode(node); } function parseWhileStatement() { var node = createNode(219); parseExpected(106); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); node.statement = parseStatement(); return finishNode(node); } function parseForOrForInOrForOfStatement() { var pos = getNodePos(); parseExpected(88); var awaitToken = parseOptionalToken(121); parseExpected(19); var initializer; if (token() !== 25) { if (token() === 104 || token() === 110 || token() === 76) { initializer = parseVariableDeclarationList(true); } else { initializer = disallowInAnd(parseExpression); } } var forOrForInOrForOfStatement; if (awaitToken ? parseExpected(145) : parseOptional(145)) { var forOfStatement = createNode(222, pos); forOfStatement.awaitModifier = awaitToken; forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); parseExpected(20); forOrForInOrForOfStatement = forOfStatement; } else if (parseOptional(92)) { var forInStatement = createNode(221, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); parseExpected(20); forOrForInOrForOfStatement = forInStatement; } else { var forStatement = createNode(220, pos); forStatement.initializer = initializer; parseExpected(25); if (token() !== 25 && token() !== 20) { forStatement.condition = allowInAnd(parseExpression); } parseExpected(25); if (token() !== 20) { forStatement.incrementor = allowInAnd(parseExpression); } parseExpected(20); forOrForInOrForOfStatement = forStatement; } forOrForInOrForOfStatement.statement = parseStatement(); return finishNode(forOrForInOrForOfStatement); } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); parseExpected(kind === 224 ? 72 : 77); if (!canParseSemicolon()) { node.label = parseIdentifier(); } parseSemicolon(); return finishNode(node); } function parseReturnStatement() { var node = createNode(225); parseExpected(96); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); } parseSemicolon(); return finishNode(node); } function parseWithStatement() { var node = createNode(226); parseExpected(107); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); node.statement = doInsideOfContext(8388608, parseStatement); return finishNode(node); } function parseCaseClause() { var node = createNode(266); parseExpected(73); node.expression = allowInAnd(parseExpression); parseExpected(56); node.statements = parseList(3, parseStatement); return finishNode(node); } function parseDefaultClause() { var node = createNode(267); parseExpected(79); parseExpected(56); node.statements = parseList(3, parseStatement); return finishNode(node); } function parseCaseOrDefaultClause() { return token() === 73 ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { var node = createNode(227); parseExpected(98); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); var caseBlock = createNode(241); parseExpected(17); caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); parseExpected(18); node.caseBlock = finishNode(caseBlock); return finishNode(node); } function parseThrowStatement() { var node = createNode(229); parseExpected(100); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } function parseTryStatement() { 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); parseExpected(74); if (parseOptional(19)) { result.variableDeclaration = parseVariableDeclaration(); parseExpected(20); } else { result.variableDeclaration = undefined; } result.block = parseBlock(false); return finishNode(result); } function parseDebuggerStatement() { var node = createNode(231); parseExpected(78); parseSemicolon(); return finishNode(node); } function parseExpressionOrLabeledStatement() { var node = createNodeWithJSDoc(0); var expression = allowInAnd(parseExpression); if (expression.kind === 71 && parseOptional(56)) { node.kind = 228; node.label = expression; node.statement = parseStatement(); } else { node.kind = 216; node.expression = expression; parseSemicolon(); } return finishNode(node); } function nextTokenIsIdentifierOrKeywordOnSameLine() { nextToken(); return ts.tokenIsIdentifierOrKeyword(token()) && !scanner.hasPrecedingLineBreak(); } function nextTokenIsClassKeywordOnSameLine() { nextToken(); return token() === 75 && !scanner.hasPrecedingLineBreak(); } function nextTokenIsFunctionKeywordOnSameLine() { nextToken(); return token() === 89 && !scanner.hasPrecedingLineBreak(); } function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() { nextToken(); return (ts.tokenIsIdentifierOrKeyword(token()) || token() === 8 || token() === 9) && !scanner.hasPrecedingLineBreak(); } function isDeclaration() { while (true) { switch (token()) { case 104: case 110: case 76: case 89: case 75: case 83: return true; case 109: case 139: return nextTokenIsIdentifierOnSameLine(); case 129: case 130: return nextTokenIsIdentifierOrStringLiteralOnSameLine(); case 117: case 120: case 124: case 112: case 113: case 114: case 132: nextToken(); if (scanner.hasPrecedingLineBreak()) { return false; } continue; case 144: nextToken(); return token() === 17 || token() === 71 || token() === 84; case 91: nextToken(); return token() === 9 || token() === 39 || token() === 17 || ts.tokenIsIdentifierOrKeyword(token()); case 84: nextToken(); if (token() === 58 || token() === 39 || token() === 17 || token() === 79 || token() === 118) { return true; } continue; case 115: nextToken(); continue; default: return false; } } } function isStartOfDeclaration() { return lookAhead(isDeclaration); } function isStartOfStatement() { switch (token()) { 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: return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot); case 76: case 84: return isStartOfDeclaration(); case 120: case 124: case 109: case 129: case 130: case 139: case 144: return true; case 114: case 112: case 113: case 115: case 132: return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); default: return isStartOfExpression(); } } function nextTokenIsIdentifierOrStartOfDestructuring() { nextToken(); return isIdentifier() || token() === 17 || token() === 21; } function isLetDeclaration() { return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring); } function parseStatement() { switch (token()) { case 25: return parseEmptyStatement(); case 17: return parseBlock(false); case 104: return parseVariableStatement(createNodeWithJSDoc(232)); case 110: if (isLetDeclaration()) { return parseVariableStatement(createNodeWithJSDoc(232)); } break; case 89: return parseFunctionDeclaration(createNodeWithJSDoc(234)); case 75: return parseClassDeclaration(createNodeWithJSDoc(235)); case 90: return parseIfStatement(); case 81: return parseDoStatement(); case 106: return parseWhileStatement(); case 88: return parseForOrForInOrForOfStatement(); case 77: return parseBreakOrContinueStatement(223); case 72: return parseBreakOrContinueStatement(224); case 96: return parseReturnStatement(); case 107: return parseWithStatement(); case 98: return parseSwitchStatement(); case 100: return parseThrowStatement(); case 102: case 74: case 87: return parseTryStatement(); case 78: return parseDebuggerStatement(); case 57: return parseDeclaration(); 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(); } break; } return parseExpressionOrLabeledStatement(); } function isDeclareModifier(modifier) { return modifier.kind === 124; } function parseDeclaration() { 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; } return doInsideOfContext(4194304, function () { return parseDeclarationWorker(node); }); } else { return parseDeclarationWorker(node); } } function parseDeclarationWorker(node) { switch (token()) { case 104: case 110: case 76: return parseVariableStatement(node); case 89: return parseFunctionDeclaration(node); case 75: return parseClassDeclaration(node); case 109: return parseInterfaceDeclaration(node); case 139: return parseTypeAliasDeclaration(node); case 83: return parseEnumDeclaration(node); case 144: case 129: case 130: return parseModuleDeclaration(node); case 91: return parseImportDeclarationOrImportEqualsDeclaration(node); case 84: nextToken(); switch (token()) { case 79: case 58: return parseExportAssignment(node); case 118: return parseNamespaceExportDeclaration(node); default: return parseExportDeclaration(node); } default: if (node.decorators || node.modifiers) { 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; } } function nextTokenIsIdentifierOrStringLiteralOnSameLine() { nextToken(); return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token() === 9); } function parseFunctionBlockOrSemicolon(flags, diagnosticMessage) { if (token() !== 17 && canParseSemicolon()) { parseSemicolon(); return; } return parseFunctionBlock(flags, diagnosticMessage); } function parseArrayBindingElement() { if (token() === 26) { return createNode(206); } var node = createNode(182); node.dotDotDotToken = parseOptionalToken(24); node.name = parseIdentifierOrPattern(); node.initializer = parseInitializer(); return finishNode(node); } function parseObjectBindingElement() { var node = createNode(182); node.dotDotDotToken = parseOptionalToken(24); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); if (tokenIsIdentifier && token() !== 56) { node.name = propertyName; } else { parseExpected(56); node.propertyName = propertyName; node.name = parseIdentifierOrPattern(); } node.initializer = parseInitializer(); return finishNode(node); } function parseObjectBindingPattern() { var node = createNode(180); parseExpected(17); node.elements = parseDelimitedList(9, parseObjectBindingElement); parseExpected(18); return finishNode(node); } function parseArrayBindingPattern() { var node = createNode(181); parseExpected(21); node.elements = parseDelimitedList(10, parseArrayBindingElement); parseExpected(22); return finishNode(node); } function isIdentifierOrPattern() { return token() === 17 || token() === 21 || isIdentifier(); } function parseIdentifierOrPattern() { if (token() === 21) { return parseArrayBindingPattern(); } if (token() === 17) { return parseObjectBindingPattern(); } return parseIdentifier(); } function parseVariableDeclarationAllowExclamation() { return parseVariableDeclaration(true); } function parseVariableDeclaration(allowExclamation) { var node = createNode(232); node.name = parseIdentifierOrPattern(); if (allowExclamation && node.name.kind === 71 && token() === 51 && !scanner.hasPrecedingLineBreak()) { node.exclamationToken = parseTokenNode(); } node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token())) { node.initializer = parseInitializer(); } return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { var node = createNode(233); switch (token()) { case 104: break; case 110: node.flags |= 1; break; case 76: node.flags |= 2; break; default: ts.Debug.fail(); } nextToken(); if (token() === 145 && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { var savedDisallowIn = inDisallowInContext(); setDisallowInContext(inForStatementInitializer); node.declarations = parseDelimitedList(8, inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation); setDisallowInContext(savedDisallowIn); } return finishNode(node); } function canFollowContextualOfKeyword() { return nextTokenIsIdentifier() && nextToken() === 20; } function parseVariableStatement(node) { node.kind = 214; node.declarationList = parseVariableDeclarationList(false); parseSemicolon(); return finishNode(node); } function parseFunctionDeclaration(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; 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; node.asteriskToken = asteriskToken; 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; if (!node.questionToken && token() === 51 && !scanner.hasPrecedingLineBreak()) { node.exclamationToken = parseTokenNode(); } node.type = parseTypeAnnotation(); node.initializer = ts.hasModifier(node, 32) ? allowInAnd(parseInitializer) : doOutsideOfContext(4096 | 2048, parseInitializer); parseSemicolon(); return finishNode(node); } function parsePropertyOrMethodDeclaration(node) { var asteriskToken = parseOptionalToken(39); node.name = parsePropertyName(); node.questionToken = parseOptionalToken(55); if (asteriskToken || token() === 19 || token() === 27) { return parseMethodDeclaration(node, asteriskToken, ts.Diagnostics.or_expected); } return parsePropertyDeclaration(node); } function parseAccessorDeclaration(node, kind) { node.kind = kind; node.name = parsePropertyName(); fillSignature(56, 0, node); node.body = parseFunctionBlockOrSemicolon(0); return finishNode(node); } function isClassMemberStart() { var idToken; if (token() === 57) { return true; } while (ts.isModifierKind(token())) { idToken = token(); if (ts.isClassMemberModifier(idToken)) { return true; } nextToken(); } if (token() === 39) { return true; } if (isLiteralPropertyName()) { idToken = token(); nextToken(); } if (token() === 21) { return true; } if (idToken !== undefined) { if (!ts.isKeyword(idToken) || idToken === 136 || idToken === 125) { return true; } switch (token()) { case 19: case 27: case 51: case 56: case 58: case 55: return true; default: return canParseSemicolon(); } } return false; } function parseDecorators() { var list; var listPos = getNodePos(); while (true) { var decoratorStart = getNodePos(); if (!parseOptional(57)) { break; } var decorator = createNode(150, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); finishNode(decorator); (list || (list = [])).push(decorator); } return list && createNodeArray(list, listPos); } function parseModifiers(permitInvalidConstAsModifier) { var list; var listPos = getNodePos(); while (true) { var modifierStart = scanner.getStartPos(); var modifierKind = token(); if (token() === 76 && permitInvalidConstAsModifier) { if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { break; } } else { if (!parseAnyContextualModifier()) { break; } } var modifier = finishNode(createNode(modifierKind, modifierStart)); (list || (list = [])).push(modifier); } return list && createNodeArray(list, listPos); } function parseModifiersForArrowFunction() { var modifiers; if (token() === 120) { var modifierStart = scanner.getStartPos(); var modifierKind = token(); nextToken(); var modifier = finishNode(createNode(modifierKind, modifierStart)); modifiers = createNodeArray([modifier], modifierStart); } return modifiers; } function parseClassElement() { if (token() === 25) { var result = createNode(212); nextToken(); return finishNode(result); } var node = createNodeWithJSDoc(0); node.decorators = parseDecorators(); node.modifiers = parseModifiers(true); if (parseContextualModifier(125)) { return parseAccessorDeclaration(node, 156); } if (parseContextualModifier(136)) { return parseAccessorDeclaration(node, 157); } if (token() === 123) { return parseConstructorDeclaration(node); } if (isIndexSignature()) { return parseIndexSignatureDeclaration(node); } if (ts.tokenIsIdentifierOrKeyword(token()) || token() === 9 || token() === 8 || token() === 39 || token() === 21) { return parsePropertyOrMethodDeclaration(node); } if (node.decorators || node.modifiers) { node.name = createMissingNode(71, true, ts.Diagnostics.Declaration_expected); return parsePropertyDeclaration(node); } return ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassExpression() { return parseClassDeclarationOrExpression(createNodeWithJSDoc(0), 205); } function parseClassDeclaration(node) { return parseClassDeclarationOrExpression(node, 235); } function parseClassDeclarationOrExpression(node, kind) { node.kind = kind; parseExpected(75); node.name = parseNameOfClassDeclarationOrExpression(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(); if (parseExpected(17)) { node.members = parseClassMembers(); parseExpected(18); } else { node.members = createMissingList(); } return finishNode(node); } function parseNameOfClassDeclarationOrExpression() { return isIdentifier() && !isImplementsClause() ? parseIdentifier() : undefined; } function isImplementsClause() { return token() === 108 && lookAhead(nextTokenIsIdentifierOrKeyword); } function parseHeritageClauses() { if (isHeritageClause()) { return parseList(21, parseHeritageClause); } return undefined; } function parseHeritageClause() { var tok = token(); ts.Debug.assert(tok === 85 || tok === 108); var node = createNode(268); node.token = tok; nextToken(); node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); return finishNode(node); } function parseExpressionWithTypeArguments() { var node = createNode(207); node.expression = parseLeftHandSideExpressionOrHigher(); node.typeArguments = tryParseTypeArguments(); return finishNode(node); } function tryParseTypeArguments() { return token() === 27 ? parseBracketedList(19, parseType, 27, 29) : undefined; } function isHeritageClause() { return token() === 85 || token() === 108; } function parseClassMembers() { return parseList(5, parseClassElement); } function parseInterfaceDeclaration(node) { node.kind = 236; parseExpected(109); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(); node.members = parseObjectTypeMembers(); return finishNode(node); } function parseTypeAliasDeclaration(node) { node.kind = 237; parseExpected(139); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); parseExpected(58); node.type = parseType(); parseSemicolon(); return finishNode(node); } function parseEnumMember() { var node = createNodeWithJSDoc(273); node.name = parsePropertyName(); node.initializer = allowInAnd(parseInitializer); return finishNode(node); } function parseEnumDeclaration(node) { node.kind = 238; parseExpected(83); node.name = parseIdentifier(); if (parseExpected(17)) { node.members = parseDelimitedList(6, parseEnumMember); parseExpected(18); } else { node.members = createMissingList(); } return finishNode(node); } function parseModuleBlock() { var node = createNode(240); if (parseExpected(17)) { node.statements = parseList(1, parseStatement); parseExpected(18); } else { node.statements = createMissingList(); } return finishNode(node); } function parseModuleOrNamespaceDeclaration(node, flags) { node.kind = 239; var namespaceFlag = flags & 16; node.flags |= flags; node.name = parseIdentifier(); node.body = parseOptional(23) ? parseModuleOrNamespaceDeclaration(createNode(0), 4 | namespaceFlag) : parseModuleBlock(); return finishNode(node); } function parseAmbientExternalModuleDeclaration(node) { node.kind = 239; if (token() === 144) { node.name = parseIdentifier(); node.flags |= 512; } else { node.name = parseLiteralNode(); node.name.text = internIdentifier(node.name.text); } if (token() === 17) { node.body = parseModuleBlock(); } else { parseSemicolon(); } return finishNode(node); } function parseModuleDeclaration(node) { var flags = 0; if (token() === 144) { return parseAmbientExternalModuleDeclaration(node); } else if (parseOptional(130)) { flags |= 16; } else { parseExpected(129); if (token() === 9) { return parseAmbientExternalModuleDeclaration(node); } } return parseModuleOrNamespaceDeclaration(node, flags); } function isExternalModuleReference() { return token() === 133 && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { return nextToken() === 19; } function nextTokenIsSlash() { return nextToken() === 41; } function parseNamespaceExportDeclaration(node) { node.kind = 242; parseExpected(118); parseExpected(130); node.name = parseIdentifier(); parseSemicolon(); return finishNode(node); } function parseImportDeclarationOrImportEqualsDeclaration(node) { parseExpected(91); var afterImportPos = scanner.getStartPos(); var identifier; if (isIdentifier()) { identifier = parseIdentifier(); if (token() !== 26 && token() !== 143) { return parseImportEqualsDeclaration(node, identifier); } } node.kind = 244; if (identifier || token() === 39 || token() === 17) { node.importClause = parseImportClause(identifier, afterImportPos); parseExpected(143); } node.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); return finishNode(node); } function parseImportEqualsDeclaration(node, identifier) { node.kind = 243; node.name = identifier; parseExpected(58); node.moduleReference = parseModuleReference(); parseSemicolon(); return finishNode(node); } function parseImportClause(identifier, fullStart) { var importClause = createNode(245, fullStart); if (identifier) { importClause.name = identifier; } if (!importClause.name || parseOptional(26)) { importClause.namedBindings = token() === 39 ? parseNamespaceImport() : parseNamedImportsOrExports(247); } return finishNode(importClause); } function parseModuleReference() { return isExternalModuleReference() ? parseExternalModuleReference() : parseEntityName(false); } function parseExternalModuleReference() { var node = createNode(254); parseExpected(133); parseExpected(19); node.expression = parseModuleSpecifier(); parseExpected(20); return finishNode(node); } function parseModuleSpecifier() { if (token() === 9) { var result = parseLiteralNode(); result.text = internIdentifier(result.text); return result; } else { return parseExpression(); } } function parseNamespaceImport() { var namespaceImport = createNode(246); parseExpected(39); parseExpected(118); namespaceImport.name = parseIdentifier(); return finishNode(namespaceImport); } function parseNamedImportsOrExports(kind) { var node = createNode(kind); node.elements = parseBracketedList(22, kind === 247 ? parseImportSpecifier : parseExportSpecifier, 17, 18); return finishNode(node); } function parseExportSpecifier() { return parseImportOrExportSpecifier(252); } function parseImportSpecifier() { return parseImportOrExportSpecifier(248); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); var checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier(); var checkIdentifierStart = scanner.getTokenPos(); var checkIdentifierEnd = scanner.getTextPos(); var identifierName = parseIdentifierName(); if (token() === 118) { node.propertyName = identifierName; parseExpected(118); checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier(); checkIdentifierStart = scanner.getTokenPos(); checkIdentifierEnd = scanner.getTextPos(); node.name = parseIdentifierName(); } else { node.name = identifierName; } if (kind === 248 && checkIdentifierIsKeyword) { parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(node) { node.kind = 250; if (parseOptional(39)) { parseExpected(143); node.moduleSpecifier = parseModuleSpecifier(); } else { node.exportClause = parseNamedImportsOrExports(251); if (token() === 143 || (token() === 9 && !scanner.hasPrecedingLineBreak())) { parseExpected(143); node.moduleSpecifier = parseModuleSpecifier(); } } parseSemicolon(); return finishNode(node); } function parseExportAssignment(node) { node.kind = 249; if (parseOptional(58)) { node.isExportEquals = true; } else { parseExpected(79); } node.expression = parseAssignmentExpressionOrHigher(); parseSemicolon(); return finishNode(node); } function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, isAnExternalModuleIndicatorNode) || getImportMetaIfNecessary(sourceFile); } function isAnExternalModuleIndicatorNode(node) { 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 ? walkTreeForExternalModuleIndicators(sourceFile) : undefined; } function walkTreeForExternalModuleIndicators(node) { return isImportMeta(node) ? node : forEachChild(node, walkTreeForExternalModuleIndicators); } function isImportMeta(node) { 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"; })(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, undefined, 1); sourceFile = createSourceFile("file.js", 6, 1, false); scanner.setText(content, start, length); currentToken = scanner.scan(); var jsDocTypeExpression = parseJSDocTypeExpression(); var diagnostics = parseDiagnostics; clearState(); return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined; } JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; function parseJSDocTypeExpression(mayOmitBraces) { var result = createNode(278, scanner.getTokenPos()); var hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(17); result.type = doInsideOfContext(2097152, parseJSDocType); if (!mayOmitBraces || hasBrace) { parseExpected(18); } fixupParentReferences(result); return finishNode(result); } JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression; function parseIsolatedJSDocComment(content, start, length) { initializeState(content, 6, undefined, 1); sourceFile = { languageVariant: 0, text: content }; var jsDoc = parseJSDocCommentWorker(start, length); var diagnostics = parseDiagnostics; clearState(); return jsDoc ? { jsDoc: jsDoc, diagnostics: diagnostics } : undefined; } JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment; function parseJSDocComment(parent, start, length) { var _a; var saveToken = currentToken; var saveParseDiagnosticsLength = parseDiagnostics.length; var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; var comment = parseJSDocCommentWorker(start, length); if (comment) { comment.parent = parent; } if (contextFlags & 65536) { if (!sourceFile.jsDocDiagnostics) { sourceFile.jsDocDiagnostics = []; } (_a = sourceFile.jsDocDiagnostics).push.apply(_a, parseDiagnostics); } currentToken = saveToken; parseDiagnostics.length = saveParseDiagnosticsLength; parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; 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; var end = length === undefined ? content.length : start + length; length = end - start; ts.Debug.assert(start >= 0); ts.Debug.assert(start <= end); ts.Debug.assert(end <= content.length); var tags; var tagsPos; var tagsEnd; var comments = []; var result; if (!isJSDocLikeText(content, start)) { return result; } scanner.scanRange(start + 3, length - 5, function () { var state = 1; var margin; var indent = start - Math.max(content.lastIndexOf("\n", start), 0) + 4; function pushComment(text) { if (!margin) { margin = indent; } comments.push(text); indent += text.length; } nextJSDocToken(); while (parseOptionalJsdoc(5)) ; if (parseOptionalJsdoc(4)) { state = 0; indent = 0; } loop: while (true) { switch (token()) { case 57: if (state === 0 || state === 1) { removeTrailingNewlines(comments); addTag(parseTag(indent)); state = 0; margin = undefined; indent++; } else { pushComment(scanner.getTokenText()); } break; case 4: comments.push(scanner.getTokenText()); state = 0; indent = 0; break; case 39: var asterisk = scanner.getTokenText(); if (state === 1 || state === 2) { state = 2; pushComment(asterisk); } else { state = 1; indent += asterisk.length; } break; case 71: pushComment(scanner.getTokenText()); state = 2; break; case 5: var whitespace = scanner.getTokenText(); if (state === 2) { comments.push(whitespace); } else if (margin !== undefined && indent + whitespace.length > margin) { comments.push(whitespace.slice(margin - indent - 1)); } indent += whitespace.length; break; case 1: break loop; default: state = 2; pushComment(scanner.getTokenText()); break; } nextJSDocToken(); } removeLeadingNewlines(comments); removeTrailingNewlines(comments); result = createJSDocComment(); }); return result; function removeLeadingNewlines(comments) { while (comments.length && (comments[0] === "\n" || comments[0] === "\r")) { comments.shift(); } } function removeTrailingNewlines(comments) { while (comments.length && (comments[comments.length - 1] === "\n" || comments[comments.length - 1] === "\r")) { comments.pop(); } } function createJSDocComment() { 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() { while (true) { nextJSDocToken(); if (token() === 1) { return true; } if (!(token() === 5 || token() === 4)) { return false; } } } function skipWhitespace() { if (token() === 5 || token() === 4) { if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) { return; } } while (token() === 5 || token() === 4) { nextJSDocToken(); } } function parseTag(indent) { ts.Debug.assert(token() === 57); var atToken = createNode(57, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); var tagName = parseJSDocIdentifierName(); skipWhitespace(); var tag; switch (tagName.escapedText) { case "augments": case "extends": tag = parseAugmentsTag(atToken, tagName); break; case "class": case "constructor": tag = parseClassTag(atToken, tagName); break; case "this": tag = parseThisTag(atToken, tagName); break; case "arg": case "argument": case "param": return parseParameterOrPropertyTag(atToken, tagName, 2, indent); case "return": case "returns": tag = parseReturnTag(atToken, tagName); break; case "template": tag = parseTemplateTag(atToken, tagName); break; case "type": tag = parseTypeTag(atToken, tagName); break; case "typedef": tag = parseTypedefTag(atToken, tagName, indent); break; case "callback": tag = parseCallbackTag(atToken, tagName, indent); break; default: tag = parseUnknownTag(atToken, tagName); break; } if (!tag.comment) { tag.comment = parseTagComments(indent + tag.end - tag.pos); } return tag; } function parseTagComments(indent) { var comments = []; var state = 0; var margin; function pushComment(text) { if (!margin) { margin = indent; } comments.push(text); indent += text.length; } var tok = token(); loop: while (true) { switch (tok) { case 4: if (state >= 1) { state = 0; comments.push(scanner.getTokenText()); } indent = 0; break; case 57: scanner.setTextPos(scanner.getTextPos() - 1); case 1: break loop; case 5: if (state === 2) { pushComment(scanner.getTokenText()); } else { var whitespace = scanner.getTokenText(); if (margin !== undefined && indent + whitespace.length > margin) { comments.push(whitespace.slice(margin - indent - 1)); } indent += whitespace.length; } break; case 39: if (state === 0) { state = 1; indent += 1; break; } default: state = 2; pushComment(scanner.getTokenText()); break; } tok = nextJSDocToken(); } removeLeadingNewlines(comments); removeTrailingNewlines(comments); return comments.length === 0 ? undefined : comments.join(""); } function parseUnknownTag(atToken, tagName) { var result = createNode(289, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); } function addTag(tag) { if (!tag) { return; } if (!tags) { tags = [tag]; tagsPos = tag.pos; } else { tags.push(tag); } tagsEnd = tag.end; } function tryParseTypeExpression() { skipWhitespace(); return token() === 17 ? parseJSDocTypeExpression() : undefined; } function parseBracketNameInPropertyAndParamTag() { if (token() === 13) { return { name: createIdentifier(true), isBracketed: false }; } var isBracketed = parseOptional(21); var name = parseJSDocEntityName(); if (isBracketed) { skipWhitespace(); if (parseOptionalToken(58)) { parseExpression(); } parseExpected(22); } return { name: name, isBracketed: isBracketed }; } function isObjectOrObjectArrayTypeReference(node) { switch (node.kind) { case 135: return true; case 167: return isObjectOrObjectArrayTypeReference(node.elementType); default: return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object"; } } function parseParameterOrPropertyTag(atToken, tagName, target, indent) { var typeExpression = tryParseTypeExpression(); var isNameFirst = !typeExpression; skipWhitespace(); var _a = parseBracketNameInPropertyAndParamTag(), name = _a.name, isBracketed = _a.isBracketed; skipWhitespace(); if (isNameFirst) { typeExpression = tryParseTypeExpression(); } var result = target === 1 ? createNode(299, atToken.pos) : createNode(293, atToken.pos); var comment; if (indent !== undefined) comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos); var nestedTypeLiteral = target !== 4 && parseNestedTypeLiteral(typeExpression, name, target); if (nestedTypeLiteral) { typeExpression = nestedTypeLiteral; isNameFirst = true; } result.atToken = atToken; result.tagName = tagName; result.typeExpression = typeExpression; result.name = name; result.isNameFirst = isNameFirst; result.isBracketed = isBracketed; result.comment = comment; return finishNode(result); } function parseNestedTypeLiteral(typeExpression, name, target) { if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) { 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 || child.kind === 299) { children = ts.append(children, child); } } if (children) { jsdocTypeLiteral = createNode(287, start_2); jsdocTypeLiteral.jsDocPropertyTags = children; if (typeExpression.type.kind === 167) { jsdocTypeLiteral.isArrayType = true; } typeLiteralExpression.type = finishNode(jsdocTypeLiteral); return finishNode(typeLiteralExpression); } } } function parseReturnTag(atToken, tagName) { 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, 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 === 296; })) { parseErrorAt(tagName.pos, scanner.getTokenPos(), ts.Diagnostics._0_tag_already_specified, tagName.escapedText); } var result = createNode(296, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeExpression = parseJSDocTypeExpression(true); return finishNode(result); } function parseAugmentsTag(atToken, tagName) { var result = createNode(290, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.class = parseExpressionWithTypeArgumentsForAugments(); return finishNode(result); } function parseExpressionWithTypeArgumentsForAugments() { var usedBrace = parseOptional(17); var node = createNode(207); node.expression = parsePropertyAccessEntityNameExpression(); node.typeArguments = tryParseTypeArguments(); var res = finishNode(node); if (usedBrace) { parseExpected(18); } return res; } function parsePropertyAccessEntityNameExpression() { var node = parseJSDocIdentifierName(); while (parseOptional(23)) { var prop = createNode(185, node.pos); prop.expression = node; prop.name = parseJSDocIdentifierName(); node = finishNode(prop); } return node; } function parseClassTag(atToken, tagName) { var tag = createNode(291, atToken.pos); tag.atToken = atToken; tag.tagName = tagName; return finishNode(tag); } function parseThisTag(atToken, tagName) { var tag = createNode(295, atToken.pos); tag.atToken = atToken; tag.tagName = tagName; tag.typeExpression = parseJSDocTypeExpression(true); skipWhitespace(); return finishNode(tag); } function parseTypedefTag(atToken, tagName, indent) { var typeExpression = tryParseTypeExpression(); skipWhitespace(); var typedefTag = createNode(298, atToken.pos); typedefTag.atToken = atToken; typedefTag.tagName = tagName; typedefTag.fullName = parseJSDocTypeNameWithNamespace(); typedefTag.name = getJSDocTypeAliasName(typedefTag.fullName); skipWhitespace(); typedefTag.comment = parseTagComments(indent); typedefTag.typeExpression = typeExpression; var end; if (!typeExpression || isObjectOrObjectArrayTypeReference(typeExpression.type)) { var child = void 0; var jsdocTypeLiteral = void 0; var childTypeTag = void 0; var start_3 = scanner.getStartPos(); while (child = tryParse(function () { return parseChildPropertyTag(); })) { if (!jsdocTypeLiteral) { jsdocTypeLiteral = createNode(287, start_3); } if (child.kind === 296) { if (childTypeTag) { break; } else { childTypeTag = child; } } else { jsdocTypeLiteral.jsDocPropertyTags = ts.append(jsdocTypeLiteral.jsDocPropertyTags, child); } } if (jsdocTypeLiteral) { if (typeExpression && typeExpression.type.kind === 167) { jsdocTypeLiteral.isArrayType = true; } typedefTag.typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ? childTypeTag.typeExpression : finishNode(jsdocTypeLiteral); end = typedefTag.typeExpression.end; } } return finishNode(typedefTag, end || typedefTag.comment !== undefined ? scanner.getStartPos() : (typedefTag.fullName || typedefTag.typeExpression || typedefTag.tagName).end); } function parseJSDocTypeNameWithNamespace(nested) { var pos = scanner.getTokenPos(); if (!ts.tokenIsIdentifierOrKeyword(token())) { return undefined; } var typeNameOrNamespaceName = parseJSDocIdentifierName(); if (parseOptional(23)) { var jsDocNamespaceNode = createNode(239, pos); if (nested) { jsDocNamespaceNode.flags |= 4; } jsDocNamespaceNode.name = typeNameOrNamespaceName; jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(true); return finishNode(jsDocNamespaceNode); } if (nested) { typeNameOrNamespaceName.isInJSDocNamespace = true; } return typeNameOrNamespaceName; } function parseCallbackTag(atToken, tagName, indent) { var callbackTag = createNode(292, atToken.pos); callbackTag.atToken = atToken; callbackTag.tagName = tagName; callbackTag.fullName = parseJSDocTypeNameWithNamespace(); callbackTag.name = getJSDocTypeAliasName(callbackTag.fullName); skipWhitespace(); callbackTag.comment = parseTagComments(indent); var child; var start = scanner.getStartPos(); var jsdocSignature = createNode(288, start); jsdocSignature.parameters = []; while (child = tryParse(function () { return parseChildParameterOrPropertyTag(4); })) { jsdocSignature.parameters = ts.append(jsdocSignature.parameters, child); } var returnTag = tryParse(function () { if (parseOptionalJsdoc(57)) { var tag = parseTag(indent); if (tag && tag.kind === 294) { return tag; } } }); if (returnTag) { jsdocSignature.type = returnTag; } callbackTag.typeExpression = finishNode(jsdocSignature); return finishNode(callbackTag); } function getJSDocTypeAliasName(fullName) { if (fullName) { var rightNode = fullName; while (true) { if (ts.isIdentifier(rightNode) || !rightNode.body) { return ts.isIdentifier(rightNode) ? rightNode : rightNode.name; } rightNode = rightNode.body; } } } function escapedTextsEqual(a, b) { while (!ts.isIdentifier(a) || !ts.isIdentifier(b)) { if (!ts.isIdentifier(a) && !ts.isIdentifier(b) && a.right.escapedText === b.right.escapedText) { a = a.left; b = b.left; } else { return false; } } return a.escapedText === b.escapedText; } function parseChildPropertyTag() { return parseChildParameterOrPropertyTag(1); } function parseChildParameterOrPropertyTag(target, name) { var canParseTag = true; var seenAsterisk = false; while (true) { switch (nextJSDocToken()) { case 57: if (canParseTag) { var child = tryParseChildTag(target); 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: canParseTag = true; seenAsterisk = false; break; case 39: if (seenAsterisk) { canParseTag = false; } seenAsterisk = true; break; case 71: canParseTag = false; break; case 1: return false; } } } function tryParseChildTag(target) { ts.Debug.assert(token() === 57); var atToken = createNode(57); atToken.end = scanner.getTextPos(); nextJSDocToken(); var tagName = parseJSDocIdentifierName(); skipWhitespace(); var t; switch (tagName.escapedText) { case "type": return target === 1 && parseTypeTag(atToken, tagName); case "prop": case "property": t = 1; break; case "arg": case "argument": case "param": t = 2 | 4; break; default: return false; } if (!(target & t)) { return false; } var tag = parseParameterOrPropertyTag(atToken, tagName, target, undefined); tag.comment = parseTagComments(tag.end - tag.pos); return tag; } function parseTemplateTag(atToken, tagName) { var constraint; if (token() === 17) { constraint = parseJSDocTypeExpression(); } var typeParameters = []; var typeParametersPos = getNodePos(); do { skipWhitespace(); 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)); if (constraint) { ts.first(typeParameters).constraint = constraint.type; } var result = createNode(297, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = createNodeArray(typeParameters, typeParametersPos); finishNode(result); return result; } function nextJSDocToken() { return currentToken = scanner.scanJSDocToken(); } function parseOptionalJsdoc(t) { if (token() === t) { nextJSDocToken(); return true; } return false; } function parseJSDocEntityName() { var entity = parseJSDocIdentifierName(); if (parseOptional(21)) { parseExpected(22); } while (parseOptional(23)) { var name = parseJSDocIdentifierName(); if (parseOptional(21)) { parseExpected(22); } entity = createQualifiedName(entity, name); } return entity; } function parseJSDocIdentifierName(message) { if (!ts.tokenIsIdentifierOrKeyword(token())) { return createMissingNode(71, !message, message || ts.Diagnostics.Identifier_expected); } var pos = scanner.getTokenPos(); var end = scanner.getTextPos(); var result = createNode(71, pos); result.escapedText = ts.escapeLeadingUnderscores(scanner.getTokenText()); finishNode(result, end); nextJSDocToken(); return result; } } JSDocParser.parseJSDocCommentWorker = parseJSDocCommentWorker; })(JSDocParser = Parser.JSDocParser || (Parser.JSDocParser = {})); })(Parser || (Parser = {})); var IncrementalParser; (function (IncrementalParser) { function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2); checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks); if (ts.textChangeRangeIsUnchanged(textChangeRange)) { return sourceFile; } if (sourceFile.statements.length === 0) { return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true, sourceFile.scriptKind); } var incrementalSourceFile = sourceFile; ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed); incrementalSourceFile.hasBeenIncrementallyParsed = true; var oldText = sourceFile.text; var syntaxCursor = createSyntaxCursor(sourceFile); var changeRange = extendToAffectedRange(sourceFile, textChangeRange); checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks); 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))); var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks); var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true, sourceFile.scriptKind); return result; } IncrementalParser.updateSourceFile = updateSourceFile; function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) { if (isArray) { visitArray(element); } else { visitNode(element); } return; function visitNode(node) { var text = ""; if (aggressiveChecks && shouldCheckNode(node)) { text = oldText.substring(node.pos, node.end); } if (node._children) { node._children = undefined; } node.pos += delta; node.end += delta; if (aggressiveChecks && shouldCheckNode(node)) { ts.Debug.assert(text === newText.substring(node.pos, node.end)); } forEachChild(node, visitNode, visitArray); if (ts.hasJSDocNodes(node)) { for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) { var jsDocComment = _a[_i]; visitNode(jsDocComment); } } checkNodePositions(node, aggressiveChecks); } function visitArray(array) { array._children = undefined; array.pos += delta; array.end += delta; for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { var node = array_8[_i]; visitNode(node); } } } function shouldCheckNode(node) { switch (node.kind) { case 9: case 8: case 71: return true; } return false; } function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { 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); element.pos = Math.min(element.pos, changeRangeNewEnd); if (element.end >= changeRangeOldEnd) { element.end += delta; } else { element.end = Math.min(element.end, changeRangeNewEnd); } ts.Debug.assert(element.pos <= element.end); if (element.parent) { ts.Debug.assert(element.pos >= element.parent.pos); ts.Debug.assert(element.end <= element.parent.end); } } function checkNodePositions(node, aggressiveChecks) { if (aggressiveChecks) { var pos_2 = node.pos; var visitNode_1 = function (child) { ts.Debug.assert(child.pos >= pos_2); pos_2 = child.end; }; if (ts.hasJSDocNodes(node)) { for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) { var jsDocComment = _a[_i]; visitNode_1(jsDocComment); } } forEachChild(node, visitNode_1); ts.Debug.assert(pos_2 <= node.end); } } function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) { visitNode(sourceFile); return; function visitNode(child) { ts.Debug.assert(child.pos <= child.end); if (child.pos > changeRangeOldEnd) { moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks); return; } var fullEnd = child.end; if (fullEnd >= changeStart) { child.intersectsChange = true; child._children = undefined; adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); forEachChild(child, visitNode, visitArray); if (ts.hasJSDocNodes(child)) { for (var _i = 0, _a = child.jsDoc; _i < _a.length; _i++) { var jsDocComment = _a[_i]; visitNode(jsDocComment); } } checkNodePositions(child, aggressiveChecks); return; } ts.Debug.assert(fullEnd < changeStart); } function visitArray(array) { ts.Debug.assert(array.pos <= array.end); if (array.pos > changeRangeOldEnd) { moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks); return; } var fullEnd = array.end; if (fullEnd >= changeStart) { array.intersectsChange = true; array._children = undefined; adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { var node = array_9[_i]; visitNode(node); } return; } ts.Debug.assert(fullEnd < changeStart); } } function extendToAffectedRange(sourceFile, changeRange) { var maxLookahead = 1; var start = changeRange.span.start; for (var i = 0; start > 0 && i <= maxLookahead; i++) { var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); ts.Debug.assert(nearestNode.pos <= start); var position = nearestNode.pos; start = Math.max(0, position - 1); } var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); var finalLength = changeRange.newLength + (changeRange.span.start - start); return ts.createTextChangeRange(finalSpan, finalLength); } function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) { var bestResult = sourceFile; var lastNodeEntirelyBeforePosition; forEachChild(sourceFile, visit); if (lastNodeEntirelyBeforePosition) { var lastChildOfLastEntireNodeBeforePosition = getLastDescendant(lastNodeEntirelyBeforePosition); if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { bestResult = lastChildOfLastEntireNodeBeforePosition; } } return bestResult; function getLastDescendant(node) { while (true) { var lastChild = ts.getLastChild(node); if (lastChild) { node = lastChild; } else { return node; } } } function visit(child) { if (ts.nodeIsMissing(child)) { return; } if (child.pos <= position) { if (child.pos >= bestResult.pos) { bestResult = child; } if (position < child.end) { forEachChild(child, visit); return true; } else { ts.Debug.assert(child.end <= position); lastNodeEntirelyBeforePosition = child; } } else { ts.Debug.assert(child.pos > position); return true; } } } function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) { var oldText = sourceFile.text; if (textChangeRange) { ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length); 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); var oldTextSuffix = oldText.substring(ts.textSpanEnd(textChangeRange.span), oldText.length); var newTextSuffix = newText.substring(ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)), newText.length); ts.Debug.assert(oldTextSuffix === newTextSuffix); } } } function createSyntaxCursor(sourceFile) { var currentArray = sourceFile.statements; var currentArrayIndex = 0; ts.Debug.assert(currentArrayIndex < currentArray.length); var current = currentArray[currentArrayIndex]; var lastQueriedPosition = -1; return { currentNode: function (position) { if (position !== lastQueriedPosition) { if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) { currentArrayIndex++; current = currentArray[currentArrayIndex]; } if (!current || current.pos !== position) { findHighestListElementThatStartsAtPosition(position); } } lastQueriedPosition = position; ts.Debug.assert(!current || current.pos === position); return current; } }; function findHighestListElementThatStartsAtPosition(position) { currentArray = undefined; currentArrayIndex = -1; current = undefined; forEachChild(sourceFile, visitNode, visitArray); return; function visitNode(node) { if (position >= node.pos && position < node.end) { forEachChild(node, visitNode, visitArray); return true; } return false; } function visitArray(array) { if (position >= array.pos && position < array.end) { for (var i = 0; i < array.length; i++) { var child = array[i]; if (child) { if (child.pos === position) { currentArray = array; currentArrayIndex = i; current = child; return true; } else { if (child.pos < position && position < child.end) { forEachChild(child, visitNode, visitArray); return true; } } } } } return false; } } } var InvalidPosition; (function (InvalidPosition) { InvalidPosition[InvalidPosition["Value"] = -1] = "Value"; })(InvalidPosition || (InvalidPosition = {})); })(IncrementalParser || (IncrementalParser = {})); function isDeclarationFileName(fileName) { return ts.fileExtensionIs(fileName, ".d.ts"); } function processCommentPragmas(context, sourceText) { var triviaScanner = ts.createScanner(context.languageVersion, false, 0, sourceText); var pragmas = []; while (true) { var kind = triviaScanner.scan(); if (!ts.isTrivia(kind)) { break; } var range = { kind: triviaScanner.getToken(), pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos(), }; var comment = sourceText.substring(range.pos, range.end); extractPragmas(pragmas, range, comment); } 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)) { var currentValue = context.pragmas.get(pragma.name); if (currentValue instanceof Array) { currentValue.push(pragma.args); } else { context.pragmas.set(pragma.name, [currentValue, pragma.args]); } continue; } context.pragmas.set(pragma.name, pragma.args); } } ts.processCommentPragmas = processCommentPragmas; function processPragmasIntoFields(context, reportDiagnostic) { context.checkJsDirective = undefined; context.referencedFiles = []; context.typeReferenceDirectives = []; context.libReferenceDirectives = []; context.amdDependencies = []; context.hasNoDefaultLib = false; context.pragmas.forEach(function (entryOrList, key) { 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) { if (arg.arguments["no-default-lib"]) { context.hasNoDefaultLib = true; } else if (arg.arguments.types) { typeReferenceDirectives_1.push({ pos: arg.arguments.types.pos, end: arg.arguments.types.end, fileName: arg.arguments.types.value }); } else if (arg.arguments.lib) { libReferenceDirectives_1.push({ pos: arg.arguments.lib.pos, end: arg.arguments.lib.end, fileName: arg.arguments.lib.value }); } else if (arg.arguments.path) { referencedFiles_1.push({ pos: arg.arguments.path.pos, end: arg.arguments.path.end, fileName: arg.arguments.path.value }); } else { reportDiagnostic(arg.range.pos, arg.range.end - arg.range.pos, ts.Diagnostics.Invalid_reference_directive_syntax); } }); break; } case "amd-dependency": { context.amdDependencies = ts.map(ts.toArray(entryOrList), function (x) { return ({ name: x.arguments.name, path: x.arguments.path }); }); break; } case "amd-module": { if (entryOrList instanceof Array) { for (var _i = 0, entryOrList_1 = entryOrList; _i < entryOrList_1.length; _i++) { var entry = entryOrList_1[_i]; if (context.moduleName) { 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; } } else { context.moduleName = entryOrList.arguments.name; } break; } case "ts-nocheck": case "ts-check": { ts.forEach(ts.toArray(entryOrList), function (entry) { if (!context.checkJsDirective || entry.range.pos > context.checkJsDirective.pos) { context.checkJsDirective = { enabled: key === "ts-check", end: entry.range.end, pos: entry.range.pos }; } }); break; } case "jsx": return; default: ts.Debug.fail("Unhandled pragma kind"); } }); } ts.processPragmasIntoFields = processPragmasIntoFields; var namedArgRegExCache = ts.createMap(); function getNamedArgRegEx(name) { if (namedArgRegExCache.has(name)) { return namedArgRegExCache.get(name); } var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im"); namedArgRegExCache.set(name, result); return result; } var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im; var singleLinePragmaRegEx = /^\/\/\/?\s*@(\S+)\s*(.*)\s*$/im; function extractPragmas(pragmas, range, text) { var tripleSlash = range.kind === 2 && tripleSlashXMLCommentStartRegEx.exec(text); if (tripleSlash) { var name = tripleSlash[1].toLowerCase(); var pragma = ts.commentPragmas[name]; if (!pragma || !(pragma.kind & 1)) { return; } if (pragma.args) { var argument = {}; for (var _i = 0, _a = pragma.args; _i < _a.length; _i++) { var arg = _a[_i]; var matcher = getNamedArgRegEx(arg.name); var matchResult = matcher.exec(text); if (!matchResult && !arg.optional) { return; } else if (matchResult) { if (arg.captureSpan) { var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length; argument[arg.name] = { value: matchResult[3], pos: startPos, end: startPos + matchResult[3].length }; } else { argument[arg.name] = matchResult[3]; } } } pragmas.push({ name: name, args: { arguments: argument, range: range } }); } else { pragmas.push({ name: name, args: { arguments: {}, range: range } }); } return; } var singleLine = range.kind === 2 && singleLinePragmaRegEx.exec(text); if (singleLine) { return addPragmaForMatch(pragmas, range, 2, singleLine); } if (range.kind === 3) { var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; var multiLineMatch = void 0; while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { addPragmaForMatch(pragmas, range, 4, multiLineMatch); } } } function addPragmaForMatch(pragmas, range, kind, match) { if (!match) return; var name = match[1].toLowerCase(); var pragma = ts.commentPragmas[name]; if (!pragma || !(pragma.kind & kind)) { return; } var args = match[2]; var argument = getNamedPragmaArguments(pragma, args); if (argument === "fail") return; pragmas.push({ name: name, args: { arguments: argument, range: range } }); return; } function getNamedPragmaArguments(pragma, text) { if (!text) return {}; if (!pragma.args) return {}; var args = text.split(/\s+/); var argMap = {}; for (var i = 0; i < pragma.args.length; i++) { var argument = pragma.args[i]; if (!args[i] && !argument.optional) { return "fail"; } if (argument.captureSpan) { return ts.Debug.fail("Capture spans not yet implemented for non-xml pragmas"); } argMap[argument.name] = args[i]; } return argMap; } function tagNamesAreEquivalent(lhs, rhs) { if (lhs.kind !== rhs.kind) { return false; } if (lhs.kind === 71) { return lhs.escapedText === rhs.escapedText; } if (lhs.kind === 99) { return true; } return lhs.name.escapedText === rhs.name.escapedText && tagNamesAreEquivalent(lhs.expression, rhs.expression); } ts.tagNamesAreEquivalent = tagNamesAreEquivalent; })(ts || (ts = {})); var ts; (function (ts) { ts.compileOnSaveCommandLineOption = { name: "compileOnSave", type: "boolean" }; var libEntries = [ ["es5", "lib.es5.d.ts"], ["es6", "lib.es2015.d.ts"], ["es2015", "lib.es2015.d.ts"], ["es7", "lib.es2016.d.ts"], ["es2016", "lib.es2016.d.ts"], ["es2017", "lib.es2017.d.ts"], ["es2018", "lib.es2018.d.ts"], ["esnext", "lib.esnext.d.ts"], ["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.core", "lib.es2015.core.d.ts"], ["es2015.collection", "lib.es2015.collection.d.ts"], ["es2015.generator", "lib.es2015.generator.d.ts"], ["es2015.iterable", "lib.es2015.iterable.d.ts"], ["es2015.promise", "lib.es2015.promise.d.ts"], ["es2015.proxy", "lib.es2015.proxy.d.ts"], ["es2015.reflect", "lib.es2015.reflect.d.ts"], ["es2015.symbol", "lib.es2015.symbol.d.ts"], ["es2015.symbol.wellknown", "lib.es2015.symbol.wellknown.d.ts"], ["es2016.array.include", "lib.es2016.array.include.d.ts"], ["es2017.object", "lib.es2017.object.d.ts"], ["es2017.sharedmemory", "lib.es2017.sharedmemory.d.ts"], ["es2017.string", "lib.es2017.string.d.ts"], ["es2017.intl", "lib.es2017.intl.d.ts"], ["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"], ["es2018.intl", "lib.es2018.intl.d.ts"], ["es2018.promise", "lib.es2018.promise.d.ts"], ["es2018.regexp", "lib.es2018.regexp.d.ts"], ["esnext.array", "lib.esnext.array.d.ts"], ["esnext.symbol", "lib.esnext.symbol.d.ts"], ["esnext.asynciterable", "lib.esnext.asynciterable.d.ts"], ]; ts.libs = libEntries.map(function (entry) { return entry[0]; }); ts.libMap = ts.createMapFromEntries(libEntries); ts.optionDeclarations = [ { name: "help", shortName: "h", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Print_this_message, }, { name: "help", shortName: "?", type: "boolean" }, { name: "all", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Show_all_compiler_options, }, { name: "version", shortName: "v", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Print_the_compiler_s_version, }, { name: "init", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file, }, { name: "project", shortName: "p", type: "string", isFilePath: true, showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, paramType: ts.Diagnostics.FILE_OR_DIRECTORY, description: ts.Diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json, }, { name: "build", type: "boolean", shortName: "b", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Build_one_or_more_projects_and_their_dependencies_if_out_of_date }, { name: "pretty", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental }, { name: "preserveWatchOutput", type: "boolean", showInSimplifiedHelpView: false, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen, }, { name: "watch", shortName: "w", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Watch_input_files, }, { name: "target", shortName: "t", type: ts.createMapFromTemplate({ es3: 0, es5: 1, es6: 2, es2015: 2, es2016: 3, es2017: 4, es2018: 5, esnext: 6, }), paramType: ts.Diagnostics.VERSION, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_or_ESNEXT, }, { name: "module", shortName: "m", type: ts.createMapFromTemplate({ none: ts.ModuleKind.None, commonjs: ts.ModuleKind.CommonJS, amd: ts.ModuleKind.AMD, system: ts.ModuleKind.System, umd: ts.ModuleKind.UMD, es6: ts.ModuleKind.ES2015, es2015: ts.ModuleKind.ES2015, esnext: ts.ModuleKind.ESNext }), paramType: ts.Diagnostics.KIND, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext, }, { name: "lib", type: "list", element: { name: "lib", type: ts.libMap }, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation }, { name: "allowJs", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Allow_javascript_files_to_be_compiled }, { name: "checkJs", type: "boolean", category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Report_errors_in_js_files }, { name: "jsx", type: ts.createMapFromTemplate({ "preserve": 1, "react-native": 3, "react": 2 }), paramType: ts.Diagnostics.KIND, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_or_react, }, { name: "declaration", shortName: "d", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Generates_corresponding_d_ts_file, }, { name: "declarationMap", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file, }, { name: "emitDeclarationOnly", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Only_emit_d_ts_declaration_files, }, { name: "sourceMap", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Generates_corresponding_map_file, }, { name: "outFile", type: "string", isFilePath: true, paramType: ts.Diagnostics.FILE, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file, }, { name: "outDir", type: "string", isFilePath: true, paramType: ts.Diagnostics.DIRECTORY, showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Redirect_output_structure_to_the_directory, }, { name: "rootDir", type: "string", isFilePath: true, paramType: ts.Diagnostics.LOCATION, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir, }, { name: "composite", type: "boolean", isTSConfigOnly: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Enable_project_compilation, }, { name: "removeComments", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Do_not_emit_comments_to_output, }, { name: "noEmit", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Do_not_emit_outputs, }, { name: "importHelpers", type: "boolean", category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Import_emit_helpers_from_tslib }, { name: "downlevelIteration", type: "boolean", category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3 }, { name: "isolatedModules", type: "boolean", category: ts.Diagnostics.Basic_Options, description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule }, { name: "strict", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Enable_all_strict_type_checking_options }, { name: "noImplicitAny", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type, }, { name: "strictNullChecks", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Enable_strict_null_checks }, { name: "strictFunctionTypes", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Enable_strict_checking_of_function_types }, { name: "strictPropertyInitialization", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes }, { name: "noImplicitThis", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type, }, { name: "alwaysStrict", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Strict_Type_Checking_Options, description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file }, { name: "noUnusedLocals", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Additional_Checks, description: ts.Diagnostics.Report_errors_on_unused_locals, }, { name: "noUnusedParameters", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Additional_Checks, description: ts.Diagnostics.Report_errors_on_unused_parameters, }, { name: "noImplicitReturns", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Additional_Checks, description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value }, { name: "noFallthroughCasesInSwitch", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Additional_Checks, description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement }, { name: "moduleResolution", type: ts.createMapFromTemplate({ node: ts.ModuleResolutionKind.NodeJs, classic: ts.ModuleResolutionKind.Classic, }), paramType: ts.Diagnostics.STRATEGY, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6, }, { name: "baseUrl", type: "string", isFilePath: true, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names }, { name: "paths", type: "object", isTSConfigOnly: true, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl }, { name: "rootDirs", type: "list", isTSConfigOnly: true, element: { name: "rootDirs", type: "string", isFilePath: true }, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime }, { name: "typeRoots", type: "list", element: { name: "typeRoots", type: "string", isFilePath: true }, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from }, { name: "types", type: "list", element: { name: "types", type: "string" }, showInSimplifiedHelpView: true, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation }, { name: "allowSyntheticDefaultImports", type: "boolean", category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking }, { name: "esModuleInterop", type: "boolean", showInSimplifiedHelpView: true, category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports }, { name: "preserveSymlinks", type: "boolean", category: ts.Diagnostics.Module_Resolution_Options, description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks, }, { name: "sourceRoot", type: "string", paramType: ts.Diagnostics.LOCATION, category: ts.Diagnostics.Source_Map_Options, description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations, }, { name: "mapRoot", type: "string", paramType: ts.Diagnostics.LOCATION, category: ts.Diagnostics.Source_Map_Options, description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations, }, { name: "inlineSourceMap", type: "boolean", category: ts.Diagnostics.Source_Map_Options, description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file }, { name: "inlineSources", type: "boolean", 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 }, { name: "experimentalDecorators", type: "boolean", category: ts.Diagnostics.Experimental_Options, description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators }, { name: "emitDecoratorMetadata", type: "boolean", category: ts.Diagnostics.Experimental_Options, description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators }, { name: "jsxFactory", type: "string", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h }, { name: "diagnostics", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Show_diagnostic_information }, { name: "extendedDiagnostics", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Show_verbose_diagnostic_information }, { name: "traceResolution", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process }, { name: "resolveJsonModule", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Include_modules_imported_with_json_extension }, { name: "listFiles", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation }, { name: "listEmittedFiles", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation }, { name: "out", type: "string", isFilePath: false, category: ts.Diagnostics.Advanced_Options, paramType: ts.Diagnostics.FILE, description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file, }, { name: "reactNamespace", type: "string", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit }, { name: "skipDefaultLibCheck", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files }, { name: "charset", type: "string", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.The_character_set_of_the_input_files }, { name: "emitBOM", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files }, { name: "locale", type: "string", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us }, { name: "newLine", type: ts.createMapFromTemplate({ crlf: 0, lf: 1 }), paramType: ts.Diagnostics.NEWLINE, category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix, }, { name: "noErrorTruncation", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_truncate_error_messages }, { name: "noLib", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts }, { name: "noResolve", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files }, { name: "stripInternal", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation, }, { name: "disableSizeLimit", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects }, { name: "noImplicitUseStrict", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, { name: "noEmitHelpers", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output }, { name: "noEmitOnError", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported, }, { name: "preserveConstEnums", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code }, { name: "declarationDir", type: "string", isFilePath: true, paramType: ts.Diagnostics.DIRECTORY, category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Output_directory_for_generated_declaration_files }, { name: "skipLibCheck", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Skip_type_checking_of_declaration_files, }, { name: "allowUnusedLabels", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_report_errors_on_unused_labels }, { name: "allowUnreachableCode", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code }, { name: "suppressExcessPropertyErrors", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals, }, { name: "suppressImplicitAnyIndexErrors", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures, }, { name: "forceConsistentCasingInFileNames", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file }, { name: "maxNodeModuleJsDepth", type: "number", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files }, { name: "noStrictGenericChecks", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types, }, { name: "keyofStringsOnly", type: "boolean", category: ts.Diagnostics.Advanced_Options, description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols, }, { name: "plugins", type: "list", isTSConfigOnly: true, element: { name: "plugin", type: "object" }, description: ts.Diagnostics.List_of_language_service_plugins } ]; ts.typeAcquisitionDeclarations = [ { name: "enableAutoDiscovery", type: "boolean", }, { name: "enable", type: "boolean", }, { name: "include", type: "list", element: { name: "include", type: "string" } }, { name: "exclude", type: "list", element: { name: "exclude", type: "string" } } ]; ts.defaultInitCompilerOptions = { module: ts.ModuleKind.CommonJS, target: 1, strict: true, esModuleInterop: true }; var optionNameMapCache; function convertEnableAutoDiscoveryToEnable(typeAcquisition) { if (typeAcquisition && typeAcquisition.enableAutoDiscovery !== undefined && typeAcquisition.enable === undefined) { return { enable: typeAcquisition.enableAutoDiscovery, include: typeAcquisition.include || [], exclude: typeAcquisition.exclude || [] }; } return typeAcquisition; } ts.convertEnableAutoDiscoveryToEnable = convertEnableAutoDiscoveryToEnable; function getOptionNameMap() { if (optionNameMapCache) { return optionNameMapCache; } var optionNameMap = ts.createMap(); var shortOptionNames = ts.createMap(); ts.forEach(ts.optionDeclarations, function (option) { optionNameMap.set(option.name.toLowerCase(), option); if (option.shortName) { shortOptionNames.set(option.shortName, option.name); } }); optionNameMapCache = { optionNameMap: optionNameMap, shortOptionNames: shortOptionNames }; return optionNameMapCache; } function createCompilerDiagnosticForInvalidCustomType(opt) { return createDiagnosticForInvalidCustomType(opt, ts.createCompilerDiagnostic); } ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; function createDiagnosticForInvalidCustomType(opt, createDiagnostic) { 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); } function parseCustomTypeOption(opt, value, errors) { return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors); } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { if (value === void 0) { value = ""; } value = trimString(value); if (ts.startsWith(value, "-")) { return undefined; } if (value === "") { return []; } var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); case "string": return ts.map(values, function (v) { return v || ""; }); default: return ts.mapDefined(values, function (v) { return parseCustomTypeOption(opt.element, v, errors); }); } } ts.parseListTypeOption = parseListTypeOption; function parseCommandLine(commandLine, readFile) { var options = {}; var fileNames = []; var projectReferences = undefined; var errors = []; parseStrings(commandLine); return { options: options, fileNames: fileNames, projectReferences: projectReferences, errors: errors }; function parseStrings(args) { var i = 0; while (i < args.length) { var s = args[i]; i++; if (s.charCodeAt(0) === 64) { parseResponseFile(s.slice(1)); } 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 { if (!args[i] && opt.type !== "boolean") { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name)); } switch (opt.type) { case "number": options[opt.name] = parseInt(args[i]); i++; break; case "boolean": var optValue = args[i]; options[opt.name] = optValue !== "false"; if (optValue === "false" || optValue === "true") { i++; } break; case "string": options[opt.name] = args[i] || ""; i++; break; case "list": var result = parseListTypeOption(opt, args[i], errors); options[opt.name] = result || []; if (result) { i++; } break; default: options[opt.name] = parseCustomTypeOption(opt, args[i], errors); i++; break; } } } else { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, s)); } } else { fileNames.push(s); } } } function parseResponseFile(fileName) { var text = readFile ? readFile(fileName) : ts.sys.readFile(fileName); if (!text) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName)); return; } var args = []; var pos = 0; while (true) { while (pos < text.length && text.charCodeAt(pos) <= 32) pos++; if (pos >= text.length) break; var start = pos; if (text.charCodeAt(start) === 34) { pos++; while (pos < text.length && text.charCodeAt(pos) !== 34) pos++; if (pos < text.length) { args.push(text.substring(start + 1, pos)); pos++; } else { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName)); } } else { while (text.charCodeAt(pos) > 32) pos++; args.push(text.substring(start, pos)); } } parseStrings(args); } } ts.parseCommandLine = parseCommandLine; function getOptionFromName(optionName, allowShort) { if (allowShort === void 0) { allowShort = false; } optionName = optionName.toLowerCase(); var _a = getOptionNameMap(), optionNameMap = _a.optionNameMap, shortOptionNames = _a.shortOptionNames; if (allowShort) { var short = shortOptionNames.get(optionName); if (short !== undefined) { optionName = short; } } return optionNameMap.get(optionName); } ts.getOptionFromName = getOptionFromName; function getDiagnosticText(_message) { var _args = []; for (var _i = 1; _i < arguments.length; _i++) { _args[_i - 1] = arguments[_i]; } var diagnostic = ts.createCompilerDiagnostic.apply(undefined, arguments); return diagnostic.messageText; } function printVersion() { ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + ts.sys.newLine); } ts.printVersion = printVersion; function printHelp(optionsList, syntaxPrefix) { if (syntaxPrefix === void 0) { syntaxPrefix = ""; } var output = []; var syntaxLength = getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length; var examplesLength = getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length; var marginLength = Math.max(syntaxLength, examplesLength); 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); 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); output.push(padding + "tsc @args.txt" + ts.sys.newLine); 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); marginLength = 0; var usageColumn = []; var descriptionColumn = []; var optionsDescriptionMap = ts.createMap(); for (var _i = 0, optionsList_1 = optionsList; _i < optionsList_1.length; _i++) { var option = optionsList_1[_i]; if (!option.description) { continue; } var usageText_1 = " "; if (option.shortName) { usageText_1 += "-" + option.shortName; usageText_1 += getParamType(option); usageText_1 += ", "; } usageText_1 += "--" + option.name; usageText_1 += getParamType(option); usageColumn.push(usageText_1); var description = void 0; if (option.name === "lib") { description = getDiagnosticText(option.description); var element = option.element; var typeMap = element.type; optionsDescriptionMap.set(description, ts.arrayFrom(typeMap.keys()).map(function (key) { return "'" + key + "'"; })); } else { description = getDiagnosticText(option.description); } descriptionColumn.push(description); marginLength = Math.max(usageText_1.length, marginLength); } 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); for (var i = 0; i < usageColumn.length; i++) { var usage = usageColumn[i]; var description = descriptionColumn[i]; var kindsList = optionsDescriptionMap.get(description); output.push(usage + makePadding(marginLength - usage.length + 2) + description + ts.sys.newLine); if (kindsList) { output.push(makePadding(marginLength + 4)); for (var _a = 0, kindsList_1 = kindsList; _a < kindsList_1.length; _a++) { var kind = kindsList_1[_a]; output.push(kind + " "); } output.push(ts.sys.newLine); } } for (var _b = 0, output_1 = output; _b < output_1.length; _b++) { var line = output_1[_b]; ts.sys.write(line); } return; function getParamType(option) { if (option.paramType !== undefined) { return " " + getDiagnosticText(option.paramType); } return ""; } function makePadding(paddingLength) { return Array(paddingLength + 1).join(" "); } } ts.printHelp = printHelp; function getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host) { var configFileText; try { configFileText = host.readFile(configFileName); } catch (e) { var error = ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, configFileName, e.message); host.onUnRecoverableConfigFileDiagnostic(error); return undefined; } if (!configFileText) { var error = ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, configFileName); host.onUnRecoverableConfigFileDiagnostic(error); return undefined; } var result = ts.parseJsonText(configFileName, configFileText); var cwd = host.getCurrentDirectory(); return parseJsonSourceFileConfigFileContent(result, host, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), cwd), optionsToExtend, ts.getNormalizedAbsolutePath(configFileName, cwd)); } ts.getParsedCommandLineOfConfigFile = getParsedCommandLineOfConfigFile; function readConfigFile(fileName, readFile) { var textOrDiagnostic = tryReadFile(fileName, readFile); return ts.isString(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic }; } ts.readConfigFile = readConfigFile; function parseConfigFileTextToJson(fileName, jsonText) { var jsonSourceFile = ts.parseJsonText(fileName, jsonText); return { config: convertToObject(jsonSourceFile, jsonSourceFile.parseDiagnostics), error: jsonSourceFile.parseDiagnostics.length ? jsonSourceFile.parseDiagnostics[0] : undefined }; } ts.parseConfigFileTextToJson = parseConfigFileTextToJson; function readJsonConfigFile(fileName, readFile) { var textOrDiagnostic = tryReadFile(fileName, readFile); return ts.isString(textOrDiagnostic) ? ts.parseJsonText(fileName, textOrDiagnostic) : { parseDiagnostics: [textOrDiagnostic] }; } ts.readJsonConfigFile = readJsonConfigFile; function tryReadFile(fileName, readFile) { var text; try { text = readFile(fileName); } catch (e) { return ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message); } return text === undefined ? ts.createCompilerDiagnostic(ts.Diagnostics.The_specified_path_does_not_exist_Colon_0, fileName) : text; } function commandLineOptionsToMap(options) { return ts.arrayToMap(options, function (option) { return option.name; }); } var _tsconfigRootOptions; function getTsconfigRootOptionsMap() { if (_tsconfigRootOptions === undefined) { _tsconfigRootOptions = { name: undefined, type: "object", elementOptions: commandLineOptionsToMap([ { name: "compilerOptions", type: "object", elementOptions: commandLineOptionsToMap(ts.optionDeclarations), extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_compiler_option_0 }, { name: "typingOptions", type: "object", elementOptions: commandLineOptionsToMap(ts.typeAcquisitionDeclarations), extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_type_acquisition_option_0 }, { name: "typeAcquisition", type: "object", elementOptions: commandLineOptionsToMap(ts.typeAcquisitionDeclarations), extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_type_acquisition_option_0 }, { name: "extends", type: "string" }, { name: "references", type: "list", element: { name: "references", type: "object" } }, { name: "files", type: "list", element: { name: "files", type: "string" } }, { name: "include", type: "list", element: { name: "include", type: "string" } }, { name: "exclude", type: "list", element: { name: "exclude", type: "string" } }, ts.compileOnSaveCommandLineOption ]) }; } return _tsconfigRootOptions; } function convertToObject(sourceFile, errors) { return convertToObjectWorker(sourceFile, errors, true, undefined, undefined); } ts.convertToObject = convertToObject; function convertToObjectWorker(sourceFile, errors, returnValue, knownRootOptions, jsonConversionNotifier) { if (!sourceFile.statements.length) { return returnValue ? {} : undefined; } return convertPropertyValueToJson(sourceFile.statements[0].expression, knownRootOptions); function isRootOptionMap(knownOptions) { return knownRootOptions && knownRootOptions.elementOptions === knownOptions; } function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnosticMessage, parentOption) { var result = returnValue ? {} : undefined; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var element = _a[_i]; if (element.kind !== 270) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected)); continue; } if (element.questionToken) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.questionToken, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?")); } if (!isDoubleQuotedString(element.name)) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, ts.Diagnostics.String_literal_with_double_quotes_expected)); } var keyText = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(element.name)); var option = knownOptions ? knownOptions.get(keyText) : undefined; if (extraKeyDiagnosticMessage && !option) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, extraKeyDiagnosticMessage, keyText)); } var value = convertPropertyValueToJson(element.initializer, option); if (typeof keyText !== "undefined") { if (returnValue) { result[keyText] = value; } if (jsonConversionNotifier && (parentOption || isRootOptionMap(knownOptions))) { var isValidOptionValue = isCompilerOptionsValue(option, value); if (parentOption) { if (isValidOptionValue) { jsonConversionNotifier.onSetValidOptionKeyValueInParent(parentOption, option, value); } } else if (isRootOptionMap(knownOptions)) { if (isValidOptionValue) { jsonConversionNotifier.onSetValidOptionKeyValueInRoot(keyText, element.name, value, element.initializer); } else if (!option) { jsonConversionNotifier.onSetUnknownOptionKeyValueInRoot(keyText, element.name, value, element.initializer); } } } } } return result; } function convertArrayLiteralExpressionToJson(elements, elementOption) { return (returnValue ? elements.map : elements.forEach).call(elements, function (element) { return convertPropertyValueToJson(element, elementOption); }); } function convertPropertyValueToJson(valueExpression, option) { switch (valueExpression.kind) { case 101: reportInvalidOptionValue(option && option.type !== "boolean"); return true; case 86: reportInvalidOptionValue(option && option.type !== "boolean"); return false; 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)); } reportInvalidOptionValue(option && (ts.isString(option.type) && option.type !== "string")); var text = valueExpression.text; if (option && !ts.isString(option.type)) { var customOption = option; 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: reportInvalidOptionValue(option && option.type !== "number"); return Number(valueExpression.text); case 198: if (valueExpression.operator !== 38 || valueExpression.operand.kind !== 8) { break; } reportInvalidOptionValue(option && option.type !== "number"); return -Number(valueExpression.operand.text); case 184: reportInvalidOptionValue(option && option.type !== "object"); var objectLiteralExpression = valueExpression; if (option) { var _a = option, elementOptions = _a.elementOptions, extraKeyDiagnosticMessage = _a.extraKeyDiagnosticMessage, optionName = _a.name; return convertObjectLiteralExpressionToJson(objectLiteralExpression, elementOptions, extraKeyDiagnosticMessage, optionName); } else { return convertObjectLiteralExpressionToJson(objectLiteralExpression, undefined, undefined, undefined); } case 183: reportInvalidOptionValue(option && option.type !== "list"); return convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element); } if (option) { 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)); } return undefined; function reportInvalidOptionValue(isError) { if (isError) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, option.name, getCompilerOptionValueTypeString(option))); } } } function isDoubleQuotedString(node) { return ts.isStringLiteral(node) && ts.isStringDoubleQuoted(node, sourceFile); } } ts.convertToObjectWorker = convertToObjectWorker; function getCompilerOptionValueTypeString(option) { return option.type === "list" ? "Array" : ts.isString(option.type) ? option.type : "string"; } function isCompilerOptionsValue(option, value) { if (option) { if (isNullOrUndefined(value)) return true; if (option.type === "list") { return ts.isArray(value); } var expectedType = ts.isString(option.type) ? option.type : "string"; return typeof value === expectedType; } return false; } 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") { return undefined; } else if (optionDefinition.type === "list") { return getCustomTypeMapOfCommandLineOption(optionDefinition.element); } else { return optionDefinition.type; } } function getNameOfCompilerOptionValue(value, customTypeMap) { return ts.forEachEntry(customTypeMap, function (mapValue, key) { if (mapValue === value) { return key; } }); } function serializeCompilerOptions(options) { var result = ts.createMap(); var optionsNameMap = getOptionNameMap().optionNameMap; var _loop_3 = function (name) { if (ts.hasProperty(options, name)) { if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) { return "continue"; } var value = options[name]; var optionDefinition = optionsNameMap.get(name.toLowerCase()); if (optionDefinition) { var customTypeMap_1 = getCustomTypeMapOfCommandLineOption(optionDefinition); if (!customTypeMap_1) { result.set(name, value); } else { if (optionDefinition.type === "list") { result.set(name, value.map(function (element) { return getNameOfCompilerOptionValue(element, customTypeMap_1); })); } else { result.set(name, getNameOfCompilerOptionValue(value, customTypeMap_1)); } } } } }; for (var name in options) { _loop_3(name); } return result; } function getDefaultValueForOption(option) { switch (option.type) { case "number": return 1; case "boolean": return true; case "string": return option.isFilePath ? "./" : ""; case "list": return []; case "object": return {}; default: return option.type.keys().next().value; } } function makePadding(paddingLength) { return Array(paddingLength + 1).join(" "); } function isAllowedOption(_a) { var category = _a.category, name = _a.name; return category !== undefined && category !== ts.Diagnostics.Command_line_Options && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name)); } function writeConfigurations() { var categorizedOptions = ts.createMultiMap(); for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) { var option = optionDeclarations_1[_i]; var category = option.category; if (isAllowedOption(option)) { categorizedOptions.add(ts.getLocaleSpecificMessage(category), option); } } var marginLength = 0; var seenKnownKeys = 0; var nameColumn = []; var descriptionColumn = []; categorizedOptions.forEach(function (options, category) { if (nameColumn.length !== 0) { nameColumn.push(""); descriptionColumn.push(""); } nameColumn.push("/* " + category + " */"); descriptionColumn.push(""); for (var _i = 0, options_1 = options; _i < options_1.length; _i++) { var option = options_1[_i]; var optionName = void 0; if (compilerOptionsMap.has(option.name)) { optionName = "\"" + option.name + "\": " + JSON.stringify(compilerOptionsMap.get(option.name)) + ((seenKnownKeys += 1) === compilerOptionsMap.size ? "" : ","); } else { optionName = "// \"" + option.name + "\": " + JSON.stringify(getDefaultValueForOption(option)) + ","; } nameColumn.push(optionName); descriptionColumn.push("/* " + (option.description && ts.getLocaleSpecificMessage(option.description) || option.name) + " */"); marginLength = Math.max(optionName.length, marginLength); } }); var tab = makePadding(2); var result = []; result.push("{"); result.push(tab + "\"compilerOptions\": {"); for (var i = 0; i < nameColumn.length; i++) { var optionName = nameColumn[i]; var description = descriptionColumn[i]; result.push(optionName && "" + tab + tab + optionName + (description && (makePadding(marginLength - optionName.length + 2) + description))); } if (fileNames.length) { result.push(tab + "},"); result.push(tab + "\"files\": ["); for (var i = 0; i < fileNames.length; i++) { result.push("" + tab + tab + JSON.stringify(fileNames[i]) + (i === fileNames.length - 1 ? "" : ",")); } result.push(tab + "]"); } else { result.push(tab + "}"); } result.push("}"); return result.join(newLine); } } ts.generateTSConfig = generateTSConfig; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { return parseJsonConfigFileContentWorker(json, undefined, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; function parseJsonSourceFileConfigFileContent(sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { return parseJsonConfigFileContentWorker(undefined, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions); } ts.parseJsonSourceFileConfigFileContent = parseJsonSourceFileConfigFileContent; function setConfigFileInOptions(options, configFile) { if (configFile) { Object.defineProperty(options, "configFile", { enumerable: false, writable: false, value: configFile }); } } ts.setConfigFileInOptions = setConfigFileInOptions; function isNullOrUndefined(x) { return x === undefined || x === null; } function directoryOfCombinedPath(fileName, basePath) { return ts.getDirectoryPath(ts.getNormalizedAbsolutePath(fileName, basePath)); } function parseJsonConfigFileContentWorker(json, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) { if (existingOptions === void 0) { existingOptions = {}; } if (resolutionStack === void 0) { resolutionStack = []; } if (extraFileExtensions === void 0) { extraFileExtensions = []; } ts.Debug.assert((json === undefined && sourceFile !== undefined) || (json !== undefined && sourceFile === undefined)); var errors = []; var parsedConfig = parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors); var raw = parsedConfig.raw; var options = ts.extend(existingOptions, parsedConfig.options || {}); options.configFilePath = configFileName && ts.normalizeSlashes(configFileName); setConfigFileInOptions(options, sourceFile); var _a = getFileNames(), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories, spec = _a.spec, projectReferences = _a.projectReferences; return { options: options, fileNames: fileNames, projectReferences: projectReferences, typeAcquisition: parsedConfig.typeAcquisition || getDefaultTypeAcquisition(), raw: raw, errors: errors, wildcardDirectories: wildcardDirectories, compileOnSave: !!raw.compileOnSave, configFileSpecs: spec }; function getFileNames() { var filesSpecs; if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) { if (ts.isArray(raw.files)) { filesSpecs = raw.files; if (filesSpecs.length === 0) { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); } } else { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array"); } } var includeSpecs; if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) { if (ts.isArray(raw.include)) { includeSpecs = raw.include; } else { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array"); } } var excludeSpecs; if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) { if (ts.isArray(raw.exclude)) { excludeSpecs = raw.exclude; } else { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array"); } } else if (raw.compilerOptions) { var outDir = raw.compilerOptions.outDir; var declarationDir = raw.compilerOptions.declarationDir; if (outDir || declarationDir) { excludeSpecs = [outDir, declarationDir].filter(function (d) { return !!d; }); } } if (filesSpecs === undefined && includeSpecs === undefined) { includeSpecs = ["**/*"]; } var result = matchFileNames(filesSpecs, includeSpecs, excludeSpecs, configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath, options, host, errors, extraFileExtensions, sourceFile); if (result.fileNames.length === 0 && !ts.hasProperty(raw, "files") && resolutionStack.length === 0 && !ts.hasProperty(raw, "references")) { errors.push(getErrorForNoInputFiles(result.spec, configFileName)); } if (ts.hasProperty(raw, "references") && !isNullOrUndefined(raw.references)) { if (ts.isArray(raw.references)) { var references = []; for (var _i = 0, _a = raw.references; _i < _a.length; _i++) { var ref = _a[_i]; if (typeof ref.path !== "string") { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); } else { references.push({ path: ts.getNormalizedAbsolutePath(ref.path, basePath), originalPath: ref.path, prepend: ref.prepend, circular: ref.circular }); } } result.projectReferences = references; } else { createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "references", "Array"); } } return result; } function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) { if (!sourceFile) { errors.push(ts.createCompilerDiagnostic(message, arg0, arg1)); } } } 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; 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 || [])); } ts.getErrorForNoInputFiles = getErrorForNoInputFiles; function isSuccessfulParsedTsconfig(value) { return !!value.options; } function parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors) { basePath = ts.normalizeSlashes(basePath); var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath); if (resolutionStack.indexOf(resolvedPath) >= 0) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, resolutionStack.concat([resolvedPath]).join(" -> "))); return { raw: json || convertToObject(sourceFile, errors) }; } var ownConfig = json ? parseOwnConfigOfJson(json, host, basePath, configFileName, errors) : parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors); if (ownConfig.extendedConfigPath) { resolutionStack = resolutionStack.concat([resolvedPath]); var extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, basePath, resolutionStack, errors); if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) { var baseRaw_1 = extendedConfig.raw; var raw_1 = ownConfig.raw; var setPropertyInRawIfNotUndefined = function (propertyName) { var value = raw_1[propertyName] || baseRaw_1[propertyName]; if (value) { raw_1[propertyName] = value; } }; setPropertyInRawIfNotUndefined("include"); setPropertyInRawIfNotUndefined("exclude"); setPropertyInRawIfNotUndefined("files"); if (raw_1.compileOnSave === undefined) { raw_1.compileOnSave = baseRaw_1.compileOnSave; } ownConfig.options = ts.assign({}, extendedConfig.options, ownConfig.options); } } return ownConfig; } function parseOwnConfigOfJson(json, host, basePath, configFileName, errors) { if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } var options = convertCompilerOptionsFromJsonWorker(json.compilerOptions, basePath, errors, configFileName); var typeAcquisition = convertTypeAcquisitionFromJsonWorker(json.typeAcquisition || json.typingOptions, basePath, errors, configFileName); json.compileOnSave = convertCompileOnSaveOptionFromJson(json, basePath, errors); var extendedConfigPath; if (json.extends) { if (!ts.isString(json.extends)) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "extends", "string")); } else { var newBase = configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath; extendedConfigPath = getExtendsConfigPath(json.extends, host, newBase, errors, ts.createCompilerDiagnostic); } } return { raw: json, options: options, typeAcquisition: typeAcquisition, extendedConfigPath: extendedConfigPath }; } function parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors) { var options = getDefaultCompilerOptions(configFileName); var typeAcquisition, typingOptionstypeAcquisition; var extendedConfigPath; var optionsIterator = { onSetValidOptionKeyValueInParent: function (parentOption, option, value) { ts.Debug.assert(parentOption === "compilerOptions" || parentOption === "typeAcquisition" || parentOption === "typingOptions"); var currentOption = parentOption === "compilerOptions" ? options : parentOption === "typeAcquisition" ? (typeAcquisition || (typeAcquisition = getDefaultTypeAcquisition(configFileName))) : (typingOptionstypeAcquisition || (typingOptionstypeAcquisition = getDefaultTypeAcquisition(configFileName))); currentOption[option.name] = normalizeOptionValue(option, basePath, value); }, onSetValidOptionKeyValueInRoot: function (key, _keyNode, value, valueNode) { switch (key) { case "extends": var newBase = configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath; extendedConfigPath = getExtendsConfigPath(value, host, newBase, errors, function (message, arg0) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, valueNode, message, arg0); }); return; case "files": if (value.length === 0) { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueNode, ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json")); } return; } }, onSetUnknownOptionKeyValueInRoot: function (key, keyNode, _value, _valueNode) { if (key === "excludes") { errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, keyNode, ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } } }; var json = convertToObjectWorker(sourceFile, errors, true, getTsconfigRootOptionsMap(), optionsIterator); if (!typeAcquisition) { if (typingOptionstypeAcquisition) { typeAcquisition = (typingOptionstypeAcquisition.enableAutoDiscovery !== undefined) ? { enable: typingOptionstypeAcquisition.enableAutoDiscovery, include: typingOptionstypeAcquisition.include, exclude: typingOptionstypeAcquisition.exclude } : typingOptionstypeAcquisition; } else { typeAcquisition = getDefaultTypeAcquisition(configFileName); } } return { raw: json, options: options, typeAcquisition: typeAcquisition, extendedConfigPath: extendedConfigPath }; } function getExtendsConfigPath(extendedConfig, host, basePath, errors, createDiagnostic) { extendedConfig = ts.normalizeSlashes(extendedConfig); 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")) { extendedConfigPath = extendedConfigPath + ".json"; if (!host.fileExists(extendedConfigPath)) { errors.push(createDiagnostic(ts.Diagnostics.File_0_does_not_exist, extendedConfig)); return undefined; } } return extendedConfigPath; } function getExtendedConfig(sourceFile, extendedConfigPath, host, basePath, resolutionStack, errors) { var _a; var extendedResult = readJsonConfigFile(extendedConfigPath, function (path) { return host.readFile(path); }); if (sourceFile) { (sourceFile.extendedSourceFiles || (sourceFile.extendedSourceFiles = [])).push(extendedResult.fileName); } if (extendedResult.parseDiagnostics.length) { errors.push.apply(errors, extendedResult.parseDiagnostics); return undefined; } var extendedDirname = ts.getDirectoryPath(extendedConfigPath); 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)) { 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) { if (raw_2[propertyName]) { raw_2[propertyName] = ts.map(raw_2[propertyName], updatePath_1); } }; var raw_2 = extendedConfig.raw; mapPropertiesInRawIfNotUndefined("include"); mapPropertiesInRawIfNotUndefined("exclude"); mapPropertiesInRawIfNotUndefined("files"); } return extendedConfig; } function convertCompileOnSaveOptionFromJson(jsonOption, basePath, errors) { if (!ts.hasProperty(jsonOption, ts.compileOnSaveCommandLineOption.name)) { return false; } var result = convertJsonOption(ts.compileOnSaveCommandLineOption, jsonOption.compileOnSave, basePath, errors); return typeof result === "boolean" && result; } function convertCompilerOptionsFromJson(jsonOptions, basePath, configFileName) { var errors = []; var options = convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName); return { options: options, errors: errors }; } ts.convertCompilerOptionsFromJson = convertCompilerOptionsFromJson; function convertTypeAcquisitionFromJson(jsonOptions, basePath, configFileName) { var errors = []; var options = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName); return { options: options, errors: errors }; } ts.convertTypeAcquisitionFromJson = convertTypeAcquisitionFromJson; function getDefaultCompilerOptions(configFileName) { var options = configFileName && ts.getBaseFileName(configFileName) === "jsconfig.json" ? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true, noEmit: true } : {}; return options; } function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) { var options = getDefaultCompilerOptions(configFileName); convertOptionsFromJson(ts.optionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_compiler_option_0, errors); if (configFileName) { options.configFilePath = ts.normalizeSlashes(configFileName); } return options; } function getDefaultTypeAcquisition(configFileName) { return { enable: !!configFileName && ts.getBaseFileName(configFileName) === "jsconfig.json", include: [], exclude: [] }; } function convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName) { var options = getDefaultTypeAcquisition(configFileName); var typeAcquisition = convertEnableAutoDiscoveryToEnable(jsonOptions); convertOptionsFromJson(ts.typeAcquisitionDeclarations, typeAcquisition, basePath, options, ts.Diagnostics.Unknown_type_acquisition_option_0, errors); return options; } function convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, defaultOptions, diagnosticMessage, errors) { if (!jsonOptions) { return; } var optionNameMap = commandLineOptionsToMap(optionDeclarations); for (var id in jsonOptions) { var opt = optionNameMap.get(id); if (opt) { defaultOptions[opt.name] = convertJsonOption(opt, jsonOptions[id], basePath, errors); } else { errors.push(ts.createCompilerDiagnostic(diagnosticMessage, id)); } } } function convertJsonOption(opt, value, basePath, errors) { if (isCompilerOptionsValue(opt, value)) { var optType = opt.type; if (optType === "list" && ts.isArray(value)) { return convertJsonOptionOfListType(opt, value, basePath, errors); } else if (!ts.isString(optType)) { return convertJsonOptionOfCustomType(opt, value, errors); } return normalizeNonListOptionValue(opt, basePath, value); } else { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, opt.name, getCompilerOptionValueTypeString(opt))); } } function normalizeOptionValue(option, basePath, value) { if (isNullOrUndefined(value)) return undefined; if (option.type === "list") { var listOption_1 = option; if (listOption_1.element.isFilePath || !ts.isString(listOption_1.element.type)) { return ts.filter(ts.map(value, function (v) { return normalizeOptionValue(listOption_1.element, basePath, v); }), function (v) { return !!v; }); } return value; } else if (!ts.isString(option.type)) { return option.type.get(ts.isString(value) ? value.toLowerCase() : value); } return normalizeNonListOptionValue(option, basePath, value); } function normalizeNonListOptionValue(option, basePath, value) { if (option.isFilePath) { value = ts.normalizePath(ts.combinePaths(basePath, value)); if (value === "") { value = "."; } } return value; } function convertJsonOptionOfCustomType(opt, value, errors) { if (isNullOrUndefined(value)) return undefined; var key = value.toLowerCase(); var val = opt.type.get(key); if (val !== undefined) { return val; } else { errors.push(createCompilerDiagnosticForInvalidCustomType(opt)); } } function convertJsonOptionOfListType(option, values, basePath, errors) { return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; }); } function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; function matchFileNames(filesSpecs, includeSpecs, excludeSpecs, basePath, options, host, errors, extraFileExtensions, jsonSourceFile) { basePath = ts.normalizePath(basePath); var validatedIncludeSpecs, validatedExcludeSpecs; if (includeSpecs) { validatedIncludeSpecs = validateSpecs(includeSpecs, errors, false, jsonSourceFile, "include"); } if (excludeSpecs) { validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, true, jsonSourceFile, "exclude"); } 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); } function getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions) { if (extraFileExtensions === void 0) { extraFileExtensions = []; } basePath = ts.normalizePath(basePath); var keyMapper = host.useCaseSensitiveFileNames ? ts.identity : ts.toLowerCase; var literalFileMap = ts.createMap(); var wildcardFileMap = ts.createMap(); var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories; var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions); if (filesSpecs) { for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) { var fileName = filesSpecs_1[_i]; var file = ts.getNormalizedAbsolutePath(fileName, basePath); literalFileMap.set(keyMapper(file), file); } } if (validatedIncludeSpecs && validatedIncludeSpecs.length > 0) { for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, validatedExcludeSpecs, validatedIncludeSpecs, undefined); _a < _b.length; _a++) { var file = _b[_a]; if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { continue; } removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); var key = keyMapper(file); if (!literalFileMap.has(key) && !wildcardFileMap.has(key)) { wildcardFileMap.set(key, file); } } } var literalFiles = ts.arrayFrom(literalFileMap.values()); var wildcardFiles = ts.arrayFrom(wildcardFileMap.values()); var projectReferences = spec.referencesSpecs && spec.referencesSpecs.map(function (r) { return __assign({}, r, { path: ts.getNormalizedAbsolutePath(r.path, basePath) }); }); return { fileNames: literalFiles.concat(wildcardFiles), projectReferences: projectReferences, wildcardDirectories: wildcardDirectories, spec: spec }; } ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs; function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) { return specs.filter(function (spec) { var diag = specToDiagnostic(spec, allowTrailingRecursion); if (diag !== undefined) { errors.push(createDiagnostic(diag, spec)); } return diag === undefined; }); function createDiagnostic(message, spec) { var element = ts.getTsConfigPropArrayElementValue(jsonSourceFile, specKey, spec); return element ? ts.createDiagnosticForNodeInSourceFile(jsonSourceFile, element, message, spec) : ts.createCompilerDiagnostic(message, spec); } } function specToDiagnostic(spec, allowTrailingRecursion) { if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { return ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0; } else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { return ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0; } } function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); var wildcardDirectories = {}; if (include !== undefined) { var recursiveKeys = []; for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { var file = include_1[_i]; var spec = ts.normalizePath(ts.combinePaths(path, file)); if (excludeRegex && excludeRegex.test(spec)) { continue; } var match = getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames); if (match) { var key = match.key, flags = match.flags; var existingFlags = wildcardDirectories[key]; if (existingFlags === undefined || existingFlags < flags) { wildcardDirectories[key] = flags; if (flags === 1) { recursiveKeys.push(key); } } } } for (var key in wildcardDirectories) { if (ts.hasProperty(wildcardDirectories, key)) { for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { var recursiveKey = recursiveKeys_1[_a]; if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { delete wildcardDirectories[key]; } } } } } return wildcardDirectories; } function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) { var match = wildcardDirectoryPattern.exec(spec); if (match) { return { key: useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(), flags: watchRecursivePattern.test(spec) ? 1 : 0 }; } if (ts.isImplicitGlob(spec)) { return { key: spec, flags: 1 }; } return undefined; } function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { var extensionPriority = ts.getExtensionPriority(file, extensions); var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority, extensions); 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)) { return true; } } return false; } function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { var extensionPriority = ts.getExtensionPriority(file, extensions); var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority, extensions); for (var i = nextExtensionPriority; i < extensions.length; i++) { var lowerPriorityExtension = extensions[i]; var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); wildcardFiles.delete(lowerPriorityPath); } } function convertCompilerOptionsForTelemetry(opts) { var out = {}; for (var key in opts) { if (opts.hasOwnProperty(key)) { var type = getOptionFromName(key); if (type !== undefined) { out[key] = getOptionValueWithEmptyStrings(opts[key], type); } } } return out; } ts.convertCompilerOptionsForTelemetry = convertCompilerOptionsForTelemetry; function getOptionValueWithEmptyStrings(value, option) { switch (option.type) { case "object": return ""; case "string": return ""; case "number": return typeof value === "number" ? value : ""; case "boolean": return typeof value === "boolean" ? value : ""; case "list": var elementType_1 = option.element; return ts.isArray(value) ? value.map(function (v) { return getOptionValueWithEmptyStrings(v, elementType_1); }) : ""; default: return ts.forEachEntry(option.type, function (optionEnumValue, optionStringValue) { if (optionEnumValue === value) { return optionStringValue; } }); } } })(ts || (ts = {})); var ts; (function (ts) { function trace(host) { host.trace(ts.formatMessage.apply(undefined, arguments)); } ts.trace = trace; function isTraceEnabled(compilerOptions, host) { return !!compilerOptions.traceResolution && host.trace !== undefined; } ts.isTraceEnabled = isTraceEnabled; function withPackageId(packageId, r) { return r && { path: r.path, extension: r.ext, packageId: packageId }; } function noPackageId(r) { return withPackageId(undefined, r); } var Extensions; (function (Extensions) { Extensions[Extensions["TypeScript"] = 0] = "TypeScript"; Extensions[Extensions["JavaScript"] = 1] = "JavaScript"; Extensions[Extensions["Json"] = 2] = "Json"; Extensions[Extensions["DtsOnly"] = 3] = "DtsOnly"; })(Extensions || (Extensions = {})); function resolvedTypeScriptOnly(resolved) { if (!resolved) { return undefined; } ts.Debug.assert(ts.extensionIsTypeScript(resolved.extension)); return { fileName: resolved.path, packageId: resolved.packageId }; } function createResolvedModuleWithFailedLookupLocations(resolved, originalPath, isExternalLibraryImport, failedLookupLocations) { return { resolvedModule: resolved && { resolvedFileName: resolved.path, originalPath: originalPath, extension: resolved.extension, isExternalLibraryImport: isExternalLibraryImport, packageId: resolved.packageId }, failedLookupLocations: failedLookupLocations }; } function tryReadPackageJsonFields(readTypes, jsonContent, baseDirectory, state) { return readTypes ? tryReadFromField("typings") || tryReadFromField("types") : tryReadFromField("main"); function tryReadFromField(fieldName) { if (!ts.hasProperty(jsonContent, fieldName)) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.package_json_does_not_have_a_0_field, fieldName); } return; } var fileName = jsonContent[fieldName]; if (!ts.isString(fileName)) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_string_got_1, fieldName, typeof fileName); } return; } var path = ts.normalizePath(ts.combinePaths(baseDirectory, fileName)); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.package_json_has_0_field_1_that_references_2, fieldName, fileName, path); } return path; } } function readJson(path, host) { try { var jsonText = host.readFile(path); if (!jsonText) return {}; var result = ts.parseConfigFileTextToJson(path, jsonText); if (result.error) { return {}; } return result.config; } catch (e) { return {}; } } ts.readJson = readJson; function getEffectiveTypeRoots(options, host) { if (options.typeRoots) { return options.typeRoots; } var currentDirectory; if (options.configFilePath) { currentDirectory = ts.getDirectoryPath(options.configFilePath); } else if (host.getCurrentDirectory) { currentDirectory = host.getCurrentDirectory(); } if (currentDirectory !== undefined) { return getDefaultTypeRoots(currentDirectory, host); } } ts.getEffectiveTypeRoots = getEffectiveTypeRoots; function getDefaultTypeRoots(currentDirectory, host) { if (!host.directoryExists) { return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)]; } var typeRoots; ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) { var atTypes = ts.combinePaths(directory, nodeModulesAtTypes); if (host.directoryExists(atTypes)) { (typeRoots || (typeRoots = [])).push(atTypes); } return undefined; }); return typeRoots; } var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types"); function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { var traceEnabled = isTraceEnabled(options, host); var moduleResolutionState = { compilerOptions: options, host: host, traceEnabled: traceEnabled }; var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } var failedLookupLocations = []; var resolved = primaryLookup(); var primary = true; if (!resolved) { resolved = secondaryLookup(); primary = false; } var resolvedTypeReferenceDirective; if (resolved) { if (!options.preserveSymlinks) { resolved = __assign({}, resolved, { fileName: realPath(resolved.fileName, host, traceEnabled) }); } if (traceEnabled) { trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, resolved.fileName, primary); } resolvedTypeReferenceDirective = { primary: primary, resolvedFileName: resolved.fileName, packageId: resolved.packageId }; } return { resolvedTypeReferenceDirective: resolvedTypeReferenceDirective, failedLookupLocations: failedLookupLocations }; function primaryLookup() { if (typeRoots && typeRoots.length) { if (traceEnabled) { trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); } return ts.forEach(typeRoots, function (typeRoot) { var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var directoryExists = directoryProbablyExists(candidateDirectory, host); if (!directoryExists && traceEnabled) { trace(host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidateDirectory); } return resolvedTypeScriptOnly(loadNodeModuleFromDirectory(Extensions.DtsOnly, candidate, failedLookupLocations, !directoryExists, moduleResolutionState)); }); } else { if (traceEnabled) { trace(host, ts.Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths); } } } function secondaryLookup() { var initialLocationForSecondaryLookup = containingFile && ts.getDirectoryPath(containingFile); if (initialLocationForSecondaryLookup !== undefined) { 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, undefined); var resolvedFile = resolvedTypeScriptOnly(result && result.value); if (!resolvedFile && traceEnabled) { trace(host, ts.Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName); } return resolvedFile; } else { if (traceEnabled) { trace(host, ts.Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder); } } } } ts.resolveTypeReferenceDirective = resolveTypeReferenceDirective; function getAutomaticTypeDirectiveNames(options, host) { if (options.types) { return options.types; } var result = []; if (host.directoryExists && host.getDirectories) { var typeRoots = getEffectiveTypeRoots(options, host); if (typeRoots) { for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { var root = typeRoots_1[_i]; if (host.directoryExists(root)) { for (var _a = 0, _b = host.getDirectories(root); _a < _b.length; _a++) { var typeDirectivePath = _b[_a]; var normalized = ts.normalizePath(typeDirectivePath); var packageJsonPath = pathToPackageJson(ts.combinePaths(root, normalized)); var isNotNeededPackage = host.fileExists(packageJsonPath) && readJson(packageJsonPath, host).typings === null; if (!isNotNeededPackage) { result.push(ts.getBaseFileName(normalized)); } } } } } } return result; } ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createModuleResolutionCache(currentDirectory, getCanonicalFileName) { return createModuleResolutionCacheWithMaps(ts.createMap(), ts.createMap(), currentDirectory, getCanonicalFileName); } ts.createModuleResolutionCache = createModuleResolutionCache; function createModuleResolutionCacheWithMaps(directoryToModuleNameMap, moduleNameToDirectoryMap, currentDirectory, getCanonicalFileName) { return { getOrCreateCacheForDirectory: getOrCreateCacheForDirectory, getOrCreateCacheForModuleName: getOrCreateCacheForModuleName }; function getOrCreateCacheForDirectory(directoryName) { var path = ts.toPath(directoryName, currentDirectory, getCanonicalFileName); var perFolderCache = directoryToModuleNameMap.get(path); if (!perFolderCache) { perFolderCache = ts.createMap(); directoryToModuleNameMap.set(path, perFolderCache); } return perFolderCache; } function getOrCreateCacheForModuleName(nonRelativeModuleName) { if (ts.isExternalModuleNameRelative(nonRelativeModuleName)) { return undefined; } var perModuleNameCache = moduleNameToDirectoryMap.get(nonRelativeModuleName); if (!perModuleNameCache) { perModuleNameCache = createPerModuleNameCache(); moduleNameToDirectoryMap.set(nonRelativeModuleName, perModuleNameCache); } return perModuleNameCache; } function createPerModuleNameCache() { var directoryPathMap = ts.createMap(); return { get: get, set: set }; function get(directory) { return directoryPathMap.get(ts.toPath(directory, currentDirectory, getCanonicalFileName)); } function set(directory, result) { var path = ts.toPath(directory, currentDirectory, getCanonicalFileName); if (directoryPathMap.has(path)) { return; } directoryPathMap.set(path, result); var resolvedFileName = result.resolvedModule && result.resolvedModule.resolvedFileName; var commonPrefix = getCommonPrefix(path, resolvedFileName); var current = path; while (true) { var parent = ts.getDirectoryPath(current); if (parent === current || directoryPathMap.has(parent)) { break; } directoryPathMap.set(parent, result); current = parent; if (current === commonPrefix) { break; } } } function getCommonPrefix(directory, resolution) { if (resolution === undefined) { return undefined; } var resolutionDirectory = ts.toPath(ts.getDirectoryPath(resolution), currentDirectory, getCanonicalFileName); var i = 0; while (i < Math.min(directory.length, resolutionDirectory.length) && directory.charCodeAt(i) === resolutionDirectory.charCodeAt(i)) { i++; } var sep = directory.lastIndexOf(ts.directorySeparator, i); if (sep < 0) { return undefined; } return directory.substr(0, sep); } } } ts.createModuleResolutionCacheWithMaps = createModuleResolutionCacheWithMaps; function resolveModuleNameFromCache(moduleName, containingFile, cache) { var containingDirectory = ts.getDirectoryPath(containingFile); var perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory); return perFolderCache && perFolderCache.get(moduleName); } ts.resolveModuleNameFromCache = resolveModuleNameFromCache; function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache) { var traceEnabled = isTraceEnabled(compilerOptions, host); if (traceEnabled) { trace(host, ts.Diagnostics.Resolving_module_0_from_1, moduleName, containingFile); } var containingDirectory = ts.getDirectoryPath(containingFile); var perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory); var result = perFolderCache && perFolderCache.get(moduleName); if (result) { if (traceEnabled) { trace(host, ts.Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1, moduleName, containingDirectory); } } else { var moduleResolution = compilerOptions.moduleResolution; if (moduleResolution === undefined) { moduleResolution = ts.getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS ? ts.ModuleResolutionKind.NodeJs : ts.ModuleResolutionKind.Classic; if (traceEnabled) { trace(host, ts.Diagnostics.Module_resolution_kind_is_not_specified_using_0, ts.ModuleResolutionKind[moduleResolution]); } } else { if (traceEnabled) { trace(host, ts.Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, ts.ModuleResolutionKind[moduleResolution]); } } switch (moduleResolution) { case ts.ModuleResolutionKind.NodeJs: result = nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache); break; case ts.ModuleResolutionKind.Classic: result = classicNameResolver(moduleName, containingFile, compilerOptions, host, cache); break; default: return ts.Debug.fail("Unexpected moduleResolution: " + moduleResolution); } if (perFolderCache) { perFolderCache.set(moduleName, result); var perModuleNameCache = cache.getOrCreateCacheForModuleName(moduleName); if (perModuleNameCache) { perModuleNameCache.set(containingDirectory, result); } } } if (traceEnabled) { if (result.resolvedModule) { trace(host, ts.Diagnostics.Module_name_0_was_successfully_resolved_to_1, moduleName, result.resolvedModule.resolvedFileName); } else { trace(host, ts.Diagnostics.Module_name_0_was_not_resolved, moduleName); } } return result; } ts.resolveModuleName = resolveModuleName; function tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state) { if (!ts.isExternalModuleNameRelative(moduleName)) { return tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, failedLookupLocations, state); } else { return tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state); } } function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state) { if (!state.compilerOptions.rootDirs) { return undefined; } if (state.traceEnabled) { trace(state.host, ts.Diagnostics.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0, moduleName); } var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); var matchedRootDir; var matchedNormalizedPrefix; for (var _i = 0, _a = state.compilerOptions.rootDirs; _i < _a.length; _i++) { var rootDir = _a[_i]; var normalizedRoot = ts.normalizePath(rootDir); if (!ts.endsWith(normalizedRoot, ts.directorySeparator)) { normalizedRoot += ts.directorySeparator; } var isLongestMatchingPrefix = ts.startsWith(candidate, normalizedRoot) && (matchedNormalizedPrefix === undefined || matchedNormalizedPrefix.length < normalizedRoot.length); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2, normalizedRoot, candidate, isLongestMatchingPrefix); } if (isLongestMatchingPrefix) { matchedNormalizedPrefix = normalizedRoot; matchedRootDir = rootDir; } } if (matchedNormalizedPrefix) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Longest_matching_prefix_for_0_is_1, candidate, matchedNormalizedPrefix); } var suffix = candidate.substr(matchedNormalizedPrefix.length); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, matchedNormalizedPrefix, candidate); } var resolvedFileName = loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(containingDirectory, state.host), state); if (resolvedFileName) { return resolvedFileName; } if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Trying_other_entries_in_rootDirs); } for (var _b = 0, _c = state.compilerOptions.rootDirs; _b < _c.length; _b++) { var rootDir = _c[_b]; if (rootDir === matchedRootDir) { continue; } var candidate_1 = ts.combinePaths(ts.normalizePath(rootDir), suffix); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, rootDir, candidate_1); } var baseDirectory = ts.getDirectoryPath(candidate_1); var resolvedFileName_1 = loader(extensions, candidate_1, failedLookupLocations, !directoryProbablyExists(baseDirectory, state.host), state); if (resolvedFileName_1) { return resolvedFileName_1; } } if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Module_resolution_using_rootDirs_has_failed); } } return undefined; } function tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, failedLookupLocations, state) { if (!state.compilerOptions.baseUrl) { return undefined; } 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); } var matchedPattern; if (state.compilerOptions.paths) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName); } matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(state.compilerOptions.paths), moduleName); } if (matchedPattern) { var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName); var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPatternText); } return ts.forEach(state.compilerOptions.paths[matchedPatternText], function (subst) { var path = matchedStar_1 ? subst.replace("*", matchedStar_1) : subst; var candidate = ts.normalizePath(ts.combinePaths(state.compilerOptions.baseUrl, path)); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path); } var extension = ts.tryGetExtensionFromPath(candidate); if (extension !== undefined) { var path_1 = tryFile(candidate, failedLookupLocations, false, state); if (path_1 !== undefined) { return noPackageId({ path: path_1, ext: extension }); } } return loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state); }); } else { var candidate = ts.normalizePath(ts.combinePaths(state.compilerOptions.baseUrl, moduleName)); if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2, moduleName, state.compilerOptions.baseUrl, candidate); } return loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state); } } function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache) { return nodeModuleNameResolverWorker(moduleName, ts.getDirectoryPath(containingFile), compilerOptions, host, cache, false); } ts.nodeModuleNameResolver = nodeModuleNameResolver; function resolveJavaScriptModule(moduleName, initialDir, host) { 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(", ")); } return resolvedModule.resolvedFileName; } ts.resolveJavaScriptModule = resolveJavaScriptModule; function nodeModuleNameResolverWorker(moduleName, containingDirectory, compilerOptions, host, cache, jsOnly) { var traceEnabled = isTraceEnabled(compilerOptions, host); var failedLookupLocations = []; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled }; var result = jsOnly ? tryResolve(Extensions.JavaScript) : (tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript) || (compilerOptions.resolveJsonModule ? tryResolve(Extensions.Json) : undefined)); if (result && result.value) { var _a = result.value, resolved = _a.resolved, originalPath = _a.originalPath, isExternalLibraryImport = _a.isExternalLibraryImport; return createResolvedModuleWithFailedLookupLocations(resolved, originalPath, isExternalLibraryImport, failedLookupLocations); } return { resolvedModule: undefined, failedLookupLocations: failedLookupLocations }; function tryResolve(extensions) { 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 }); } if (!ts.isExternalModuleNameRelative(moduleName)) { if (traceEnabled) { trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]); } var resolved_1 = loadModuleFromNodeModules(extensions, moduleName, containingDirectory, failedLookupLocations, state, cache); if (!resolved_1) return undefined; var resolvedValue = resolved_1.value; var originalPath = void 0; if (!compilerOptions.preserveSymlinks && resolvedValue) { originalPath = resolvedValue.path; var path = realPath(resolvedValue.path, host, traceEnabled); if (path === originalPath) { originalPath = undefined; } resolvedValue = __assign({}, resolvedValue, { path: path }); } 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, false, state, true); return resolved_2 && toSearchResult({ resolved: resolved_2, isExternalLibraryImport: ts.contains(parts, "node_modules") }); } } } function realPath(path, host, traceEnabled) { if (!host.realpath) { return path; } var real = ts.normalizePath(host.realpath(path)); 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); return real; } function nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1, candidate, Extensions[extensions]); } if (!ts.hasTrailingDirectorySeparator(candidate)) { if (!onlyRecordFailures) { var parentOfCandidate = ts.getDirectoryPath(candidate); if (!directoryProbablyExists(parentOfCandidate, state.host)) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, parentOfCandidate); } onlyRecordFailures = true; } } 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, false, state).packageId; return withPackageId(packageId, resolvedFromFile); } } if (!onlyRecordFailures) { var candidateExists = directoryProbablyExists(candidate, state.host); if (!candidateExists) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidate); } onlyRecordFailures = true; } } return loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson); } var nodeModulesPathPart = "/node_modules/"; function parseNodeModuleFromPath(resolved) { var path = ts.normalizePath(resolved.path); var idx = path.lastIndexOf(nodeModulesPathPart); if (idx === -1) { return undefined; } var indexAfterNodeModules = idx + nodeModulesPathPart.length; var indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterNodeModules); 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"; return { packageDirectory: packageDirectory, subModuleName: subModuleName }; } function moveToNextDirectorySeparatorIfAvailable(path, prevSeparatorIndex) { var nextSeparatorIndex = path.indexOf(ts.directorySeparator, prevSeparatorIndex + 1); return nextSeparatorIndex === -1 ? prevSeparatorIndex : nextSeparatorIndex; } function addExtensionAndIndex(path) { if (path === "") { return "index.d.ts"; } if (ts.endsWith(path, ".d.ts")) { return path; } if (ts.endsWith(path, "/index")) { return path + ".d.ts"; } return path + "/index.d.ts"; } function directoryProbablyExists(directoryName, host) { return !host.directoryExists || host.directoryExists(directoryName); } ts.directoryProbablyExists = directoryProbablyExists; function loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { return noPackageId(loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state)); } function loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { if (extensions === Extensions.Json) { var extensionLess = ts.tryRemoveExtension(candidate, ".json"); return extensionLess === undefined ? undefined : tryAddingExtensions(extensionLess, extensions, failedLookupLocations, onlyRecordFailures, state); } var resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state); if (resolvedByAddingExtension) { return resolvedByAddingExtension; } if (ts.hasJavaScriptFileExtension(candidate)) { var extensionless = ts.removeFileExtension(candidate); if (state.traceEnabled) { var extension = candidate.substring(extensionless.length); trace(state.host, ts.Diagnostics.File_name_0_has_a_1_extension_stripping_it, candidate, extension); } return tryAddingExtensions(extensionless, extensions, failedLookupLocations, onlyRecordFailures, state); } } function tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state) { if (!onlyRecordFailures) { var directory = ts.getDirectoryPath(candidate); if (directory) { onlyRecordFailures = !directoryProbablyExists(directory, state.host); } } switch (extensions) { case Extensions.DtsOnly: return tryExtension(".d.ts"); case Extensions.TypeScript: return tryExtension(".ts") || tryExtension(".tsx") || tryExtension(".d.ts"); case Extensions.JavaScript: return tryExtension(".js") || tryExtension(".jsx"); case Extensions.Json: return tryExtension(".json"); } function tryExtension(ext) { var path = tryFile(candidate + ext, failedLookupLocations, onlyRecordFailures, state); return path === undefined ? undefined : { path: path, ext: ext }; } } function tryFile(fileName, failedLookupLocations, onlyRecordFailures, state) { if (!onlyRecordFailures) { if (state.host.fileExists(fileName)) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.File_0_exist_use_it_as_a_name_resolution_result, fileName); } return fileName; } else { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.File_0_does_not_exist, fileName); } } } failedLookupLocations.push(fileName); return undefined; } function loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson) { if (considerPackageJson === void 0) { considerPackageJson = true; } var _a = considerPackageJson ? getPackageJsonInfo(candidate, "", failedLookupLocations, onlyRecordFailures, state) : { packageJsonContent: undefined, packageId: undefined }, packageJsonContent = _a.packageJsonContent, packageId = _a.packageId; return withPackageId(packageId, loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, packageJsonContent)); } function loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, packageJsonContent) { var fromPackageJson = packageJsonContent && loadModuleFromPackageJson(packageJsonContent, extensions, candidate, failedLookupLocations, state); if (fromPackageJson) { return fromPackageJson; } var directoryExists = !onlyRecordFailures && directoryProbablyExists(candidate, state.host); return loadModuleFromFile(extensions, ts.combinePaths(candidate, "index"), failedLookupLocations, !directoryExists, state); } function getPackageJsonInfo(nodeModuleDirectory, subModuleName, failedLookupLocations, onlyRecordFailures, state) { var host = state.host, traceEnabled = state.traceEnabled; var directoryExists = !onlyRecordFailures && directoryProbablyExists(nodeModuleDirectory, host); var packageJsonPath = pathToPackageJson(nodeModuleDirectory); if (directoryExists && host.fileExists(packageJsonPath)) { var packageJsonContent = readJson(packageJsonPath, host); if (subModuleName === "") { var path = tryReadPackageJsonFields(true, packageJsonContent, nodeModuleDirectory, state); if (typeof path === "string") { subModuleName = addExtensionAndIndex(path.substring(nodeModuleDirectory.length + 1)); } else { 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"; } else { subModuleName = "index.d.ts"; } } } if (!ts.endsWith(subModuleName, ".d.ts")) { subModuleName = addExtensionAndIndex(subModuleName); } var packageId = typeof packageJsonContent.name === "string" && typeof packageJsonContent.version === "string" ? { name: packageJsonContent.name, subModuleName: subModuleName, version: packageJsonContent.version } : undefined; if (traceEnabled) { if (packageId) { trace(host, ts.Diagnostics.Found_package_json_at_0_Package_ID_is_1, packageJsonPath, ts.packageIdToString(packageId)); } else { trace(host, ts.Diagnostics.Found_package_json_at_0, packageJsonPath); } } return { found: true, packageJsonContent: packageJsonContent, packageId: packageId }; } else { if (directoryExists && traceEnabled) { trace(host, ts.Diagnostics.File_0_does_not_exist, packageJsonPath); } failedLookupLocations.push(packageJsonPath); return { found: false, packageJsonContent: undefined, packageId: undefined }; } } function loadModuleFromPackageJson(jsonContent, extensions, candidate, failedLookupLocations, state) { var file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript && extensions !== Extensions.Json, jsonContent, candidate, state); if (!file) { if (extensions === Extensions.TypeScript) { file = tryReadPackageJsonFields(false, jsonContent, candidate, state); if (!file) { return undefined; } } else { return undefined; } } var onlyRecordFailures = !directoryProbablyExists(ts.getDirectoryPath(file), state.host); var fromFile = tryFile(file, failedLookupLocations, onlyRecordFailures, state); if (fromFile) { var resolved = resolvedIfExtensionMatches(extensions, fromFile); if (resolved) { return resolved; } if (state.traceEnabled) { trace(state.host, ts.Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it, fromFile); } } var nextExtensions = extensions === Extensions.DtsOnly ? Extensions.TypeScript : extensions; var result = nodeLoadModuleByRelativeName(nextExtensions, file, failedLookupLocations, onlyRecordFailures, state, false); if (result) { ts.Debug.assert(result.packageId === undefined); return { path: result.path, ext: result.extension }; } } function resolvedIfExtensionMatches(extensions, path) { var ext = ts.tryGetExtensionFromPath(path); return ext !== undefined && extensionIsOk(extensions, ext) ? { path: path, ext: ext } : undefined; } function extensionIsOk(extensions, extension) { switch (extensions) { case Extensions.JavaScript: return extension === ".js" || extension === ".jsx"; case Extensions.Json: return extension === ".json"; case Extensions.TypeScript: return extension === ".ts" || extension === ".tsx" || extension === ".d.ts"; case Extensions.DtsOnly: return extension === ".d.ts"; } } function pathToPackageJson(directory) { return ts.combinePaths(directory, "package.json"); } function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) { var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName)); var packageJsonContent; var packageId; 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 !== "") { var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName); packageId = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state).packageId; } } var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) || loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent); return withPackageId(packageId, pathAndExtension); } function getPackageName(moduleName) { var idx = moduleName.indexOf(ts.directorySeparator); if (moduleName[0] === "@") { idx = moduleName.indexOf(ts.directorySeparator, idx + 1); } return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) }; } ts.getPackageName = getPackageName; function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) { return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache); } function loadModuleFromNodeModulesAtTypes(moduleName, directory, failedLookupLocations, state) { 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); return ts.forEachAncestorDirectory(ts.normalizeSlashes(directory), function (ancestorDirectory) { if (ts.getBaseFileName(ancestorDirectory) !== "node_modules") { var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache, moduleName, ancestorDirectory, state.traceEnabled, state.host, failedLookupLocations); if (resolutionFromCache) { return resolutionFromCache; } return toSearchResult(loadModuleFromNodeModulesOneLevel(extensions, moduleName, ancestorDirectory, failedLookupLocations, state, typesOnly)); } }); } function loadModuleFromNodeModulesOneLevel(extensions, moduleName, directory, failedLookupLocations, state, typesOnly) { if (typesOnly === void 0) { typesOnly = false; } var nodeModulesFolder = ts.combinePaths(directory, "node_modules"); var nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); if (!nodeModulesFolderExists && state.traceEnabled) { trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesFolder); } var packageResult = typesOnly ? undefined : loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state); if (packageResult) { return packageResult; } if (extensions !== Extensions.JavaScript && extensions !== Extensions.Json) { var nodeModulesAtTypes_1 = ts.combinePaths(nodeModulesFolder, "@types"); var nodeModulesAtTypesExists = nodeModulesFolderExists; if (nodeModulesFolderExists && !directoryProbablyExists(nodeModulesAtTypes_1, state.host)) { if (state.traceEnabled) { trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesAtTypes_1); } nodeModulesAtTypesExists = false; } return loadModuleFromNodeModulesFolder(Extensions.DtsOnly, mangleScopedPackage(moduleName, state), nodeModulesAtTypes_1, nodeModulesAtTypesExists, failedLookupLocations, state); } } var mangledScopedPackageSeparator = "__"; function mangleScopedPackage(packageName, state) { var mangled = getMangledNameForScopedPackage(packageName); if (state.traceEnabled && mangled !== packageName) { trace(state.host, ts.Diagnostics.Scoped_package_detected_looking_in_0, mangled); } return mangled; } function getTypesPackageName(packageName) { return "@types/" + getMangledNameForScopedPackage(packageName); } ts.getTypesPackageName = getTypesPackageName; function getMangledNameForScopedPackage(packageName) { if (ts.startsWith(packageName, "@")) { var replaceSlash = packageName.replace(ts.directorySeparator, mangledScopedPackageSeparator); if (replaceSlash !== packageName) { return replaceSlash.slice(1); } } return packageName; } ts.getMangledNameForScopedPackage = getMangledNameForScopedPackage; function getPackageNameFromAtTypesDirectory(mangledName) { var withoutAtTypePrefix = ts.removePrefix(mangledName, "@types/"); if (withoutAtTypePrefix !== mangledName) { return getUnmangledNameForScopedPackage(withoutAtTypePrefix); } return mangledName; } ts.getPackageNameFromAtTypesDirectory = getPackageNameFromAtTypesDirectory; function getUnmangledNameForScopedPackage(typesPackageName) { return ts.stringContains(typesPackageName, mangledScopedPackageSeparator) ? "@" + typesPackageName.replace(mangledScopedPackageSeparator, ts.directorySeparator) : typesPackageName; } ts.getUnmangledNameForScopedPackage = getUnmangledNameForScopedPackage; function tryFindNonRelativeModuleNameInCache(cache, moduleName, containingDirectory, traceEnabled, host, failedLookupLocations) { var result = cache && cache.get(containingDirectory); if (result) { if (traceEnabled) { trace(host, ts.Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1, moduleName, containingDirectory); } failedLookupLocations.push.apply(failedLookupLocations, result.failedLookupLocations); return { value: result.resolvedModule && { path: result.resolvedModule.resolvedFileName, extension: result.resolvedModule.extension, packageId: result.resolvedModule.packageId } }; } } function classicNameResolver(moduleName, containingFile, compilerOptions, host, cache) { var traceEnabled = isTraceEnabled(compilerOptions, host); var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled }; var failedLookupLocations = []; var containingDirectory = ts.getDirectoryPath(containingFile); var resolved = tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript); return createResolvedModuleWithFailedLookupLocations(resolved && resolved.value, undefined, false, failedLookupLocations); function tryResolve(extensions) { var resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loadModuleFromFileNoPackageId, failedLookupLocations, state); if (resolvedUsingSettings) { return { value: resolvedUsingSettings }; } var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName); if (!ts.isExternalModuleNameRelative(moduleName)) { 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, false, state)); }); if (resolved_3) { return resolved_3; } if (extensions === Extensions.TypeScript) { return loadModuleFromNodeModulesAtTypes(moduleName, containingDirectory, failedLookupLocations, state); } } else { var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); return toSearchResult(loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, false, state)); } } } ts.classicNameResolver = classicNameResolver; function loadModuleFromGlobalCache(moduleName, projectName, compilerOptions, host, globalCache) { var traceEnabled = isTraceEnabled(compilerOptions, host); if (traceEnabled) { trace(host, ts.Diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2, projectName, moduleName, globalCache); } var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled }; var failedLookupLocations = []; var resolved = loadModuleFromNodeModulesOneLevel(Extensions.DtsOnly, moduleName, globalCache, failedLookupLocations, state); return createResolvedModuleWithFailedLookupLocations(resolved, undefined, true, failedLookupLocations); } ts.loadModuleFromGlobalCache = loadModuleFromGlobalCache; function toSearchResult(value) { return value !== undefined ? { value: value } : undefined; } })(ts || (ts = {})); 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; } ts.getModuleInstanceState = getModuleInstanceState; function getModuleInstanceStateWorker(node) { switch (node.kind) { case 236: case 237: return 0; case 238: if (ts.isConst(node)) { return 2; } break; case 244: case 243: if (!(ts.hasModifier(node, 1))) { return 0; } break; case 240: { var state_1 = 0; ts.forEachChild(node, function (n) { var childState = getModuleInstanceStateWorker(n); switch (childState) { case 0: return; case 2: state_1 = 2; return; case 1: state_1 = 1; return true; default: ts.Debug.assertNever(childState); } }); return state_1; } case 239: return getModuleInstanceState(node); case 71: if (node.isInJSDocNamespace) { return 0; } } return 1; } var ContainerFlags; (function (ContainerFlags) { ContainerFlags[ContainerFlags["None"] = 0] = "None"; ContainerFlags[ContainerFlags["IsContainer"] = 1] = "IsContainer"; ContainerFlags[ContainerFlags["IsBlockScopedContainer"] = 2] = "IsBlockScopedContainer"; 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"); binder(file, options); ts.performance.mark("afterBind"); ts.performance.measure("Bind", "beforeBind", "afterBind"); } ts.bindSourceFile = bindSourceFile; function createBinder() { var file; var options; var languageVersion; var parent; var container; var thisParentContainer; var blockScopeContainer; var lastContainer; var delayedTypeAliases; var seenThisKeyword; var currentFlow; var currentBreakTarget; var currentContinueTarget; var currentReturnTarget; var currentTrueTarget; var currentFalseTarget; var preSwitchCaseFlow; var activeLabels; var hasExplicitReturn; var emitFlags; var inStrictMode; var symbolCount = 0; var Symbol; var classifiableNames; var unreachableFlow = { flags: 1 }; var reportedUnreachableFlow = { flags: 1 }; var subtreeTransformFlags = 0; var skipTransformFlagAggregation; function createDiagnosticForNode(node, message, arg0, arg1, arg2) { return ts.createDiagnosticForNodeInSourceFile(ts.getSourceFileOfNode(node) || file, node, message, arg0, arg1, arg2); } function bindSourceFile(f, opts) { file = f; options = opts; languageVersion = ts.getEmitScriptTarget(options); inStrictMode = bindInStrictMode(file, opts); classifiableNames = ts.createUnderscoreEscapedMap(); symbolCount = 0; skipTransformFlagAggregation = file.isDeclarationFile; Symbol = ts.objectAllocator.getSymbolConstructor(); if (!file.locals) { bind(file); file.symbolCount = symbolCount; file.classifiableNames = classifiableNames; delayedBindJSDocTypedefTag(); } file = undefined; options = undefined; languageVersion = undefined; parent = undefined; container = undefined; thisParentContainer = undefined; blockScopeContainer = undefined; lastContainer = undefined; delayedTypeAliases = undefined; seenThisKeyword = false; currentFlow = undefined; currentBreakTarget = undefined; currentContinueTarget = undefined; currentReturnTarget = undefined; currentTrueTarget = undefined; currentFalseTarget = undefined; activeLabels = undefined; hasExplicitReturn = false; emitFlags = 0; subtreeTransformFlags = 0; } return bindSourceFile; function bindInStrictMode(file, opts) { if (ts.getStrictOptionValue(opts, "alwaysStrict") && !file.isDeclarationFile) { return true; } else { return !!file.externalModuleIndicator; } } function createSymbol(flags, name) { symbolCount++; return new Symbol(flags, name); } function addDeclarationToSymbol(symbol, node, symbolFlags) { symbol.flags |= symbolFlags; node.symbol = symbol; symbol.declarations = ts.append(symbol.declarations, node); if (symbolFlags & 1955 && !symbol.exports) { symbol.exports = ts.createSymbolTable(); } if (symbolFlags & 6240 && !symbol.members) { symbol.members = ts.createSymbolTable(); } if (symbolFlags & 67216319) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || (valueDeclaration.kind !== node.kind && ts.isEffectiveModuleDeclaration(valueDeclaration))) { symbol.valueDeclaration = node; } } } function getDeclarationName(node) { if (node.kind === 249) { return node.isExportEquals ? "export=" : "default"; } var name = ts.getNameOfDeclaration(node); if (name) { if (ts.isAmbientModule(node)) { var moduleName = ts.getTextOfIdentifierOrLiteral(name); return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\""); } if (name.kind === 147) { var nameExpression = name.expression; if (ts.isStringOrNumericLiteral(nameExpression)) { return ts.escapeLeadingUnderscores(nameExpression.text); } ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression)); return ts.getPropertyNameForKnownSymbolName(ts.idText(nameExpression.name)); } return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined; } switch (node.kind) { 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: 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)); } function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) { ts.Debug.assert(!ts.hasDynamicName(node)); var isDefaultExport = ts.hasModifier(node, 512); var name = isDefaultExport && parent ? "default" : getDeclarationName(node); var symbol; if (name === undefined) { symbol = createSymbol(0, "__missing"); } else { symbol = symbolTable.get(name); if (includes & 2885600) { classifiableNames.set(name, true); } if (!symbol) { symbolTable.set(name, symbol = createSymbol(0, name)); if (isReplaceableByMethod) symbol.isReplaceableByMethod = true; } else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) { return symbol; } else if (symbol.flags & excludes) { if (symbol.isReplaceableByMethod) { symbolTable.set(name, symbol = createSymbol(0, name)); } else { if (ts.isNamedDeclaration(node)) { node.name.parent = node; } var message_1 = symbol.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; 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 (isDefaultExport) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; } else { if (symbol.declarations && symbol.declarations.length && (node.kind === 249 && !node.isExportEquals)) { message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; } } } ts.forEach(symbol.declarations, function (declaration) { 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, name); } } } addDeclarationToSymbol(symbol, node, includes); if (symbol.parent) { ts.Debug.assert(symbol.parent === parent, "Existing symbol parent should match new one"); } else { symbol.parent = parent; } return symbol; } function declareModuleMember(node, symbolFlags, symbolExcludes) { 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, undefined, node, symbolFlags, symbolExcludes); } } else { if (ts.isJSDocTypeAlias(node)) 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 ? 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, undefined, node, symbolFlags, symbolExcludes); } } } function bindContainer(node, containerFlags) { var saveContainer = container; var saveThisParentContainer = thisParentContainer; var savedBlockScopeContainer = blockScopeContainer; if (containerFlags & 1) { if (node.kind !== 193) { thisParentContainer = container; } container = blockScopeContainer = node; if (containerFlags & 32) { container.locals = ts.createSymbolTable(); } addToContainerChain(container); } else if (containerFlags & 2) { blockScopeContainer = node; blockScopeContainer.locals = undefined; } 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 && !ts.hasModifier(node, 256) && !node.asteriskToken && !!ts.getImmediatelyInvokedFunctionExpression(node); if (!isIIFE) { currentFlow = { flags: 2 }; if (containerFlags & (16 | 128)) { currentFlow.container = node; } } currentReturnTarget = isIIFE || node.kind === 155 ? createBranchLabel() : undefined; currentBreakTarget = undefined; currentContinueTarget = undefined; activeLabels = undefined; hasExplicitReturn = false; bindChildren(node); node.flags &= ~1408; if (!(currentFlow.flags & 1) && containerFlags & 8 && ts.nodeIsPresent(node.body)) { node.flags |= 128; if (hasExplicitReturn) node.flags |= 256; } if (node.kind === 274) { node.flags |= emitFlags; } if (currentReturnTarget) { addAntecedent(currentReturnTarget, currentFlow); currentFlow = finishFlowLabel(currentReturnTarget); if (node.kind === 155) { node.returnFlowNode = currentFlow; } } if (!isIIFE) { currentFlow = saveCurrentFlow; } currentBreakTarget = saveBreakTarget; currentContinueTarget = saveContinueTarget; currentReturnTarget = saveReturnTarget; activeLabels = saveActiveLabels; hasExplicitReturn = saveHasExplicitReturn; } else if (containerFlags & 64) { seenThisKeyword = false; bindChildren(node); node.flags = seenThisKeyword ? node.flags | 64 : node.flags & ~64; } else { bindChildren(node); } container = saveContainer; thisParentContainer = saveThisParentContainer; blockScopeContainer = savedBlockScopeContainer; } function bindChildren(node) { if (skipTransformFlagAggregation) { bindChildrenWorker(node); } else if (node.transformFlags & 536870912) { skipTransformFlagAggregation = true; bindChildrenWorker(node); skipTransformFlagAggregation = false; subtreeTransformFlags |= node.transformFlags & ~getTransformFlagsSubtreeExclusions(node.kind); } else { var savedSubtreeTransformFlags = subtreeTransformFlags; subtreeTransformFlags = 0; bindChildrenWorker(node); subtreeTransformFlags = savedSubtreeTransformFlags | computeTransformFlagsForNode(node, subtreeTransformFlags); } } function bindEachFunctionsFirst(nodes) { 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; } if (nodes === undefined) { return; } if (skipTransformFlagAggregation) { ts.forEach(nodes, bindFunction); } else { var savedSubtreeTransformFlags = subtreeTransformFlags; 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; } nodes.transformFlags = nodeArrayFlags | 536870912; subtreeTransformFlags |= savedSubtreeTransformFlags; } } function bindEachChild(node) { ts.forEachChild(node, bind, bindEach); } function bindChildrenWorker(node) { if (checkUnreachable(node)) { bindEachChild(node); return; } switch (node.kind) { case 219: bindWhileStatement(node); break; case 218: bindDoStatement(node); break; case 220: bindForStatement(node); break; case 221: case 222: bindForInOrForOfStatement(node); break; case 217: bindIfStatement(node); break; case 225: case 229: bindReturnOrThrow(node); break; case 224: case 223: bindBreakOrContinueStatement(node); break; case 230: bindTryStatement(node); break; case 227: bindSwitchStatement(node); break; case 241: bindCaseBlock(node); break; case 266: bindCaseClause(node); break; case 228: bindLabeledStatement(node); break; case 198: bindPrefixUnaryExpressionFlow(node); break; case 199: bindPostfixUnaryExpressionFlow(node); break; case 200: bindBinaryExpressionFlow(node); break; case 194: bindDeleteExpressionFlow(node); break; case 201: bindConditionalExpressionFlow(node); break; case 232: bindVariableDeclarationFlow(node); break; case 187: bindCallExpressionFlow(node); break; case 298: case 292: bindJSDocTypeAlias(node); break; case 274: bindEachFunctionsFirst(node.statements); bind(node.endOfFileToken); break; case 213: case 240: bindEachFunctionsFirst(node.statements); break; default: bindEachChild(node); break; } bindJSDoc(node); } function isNarrowingExpression(expr) { switch (expr.kind) { case 71: case 99: case 185: return isNarrowableReference(expr); case 187: return hasNarrowableArgument(expr); case 191: return isNarrowingExpression(expr.expression); case 200: return isNarrowingBinaryExpression(expr); case 198: return expr.operator === 51 && isNarrowingExpression(expr.operand); } return false; } function isNarrowableReference(expr) { return expr.kind === 71 || expr.kind === 99 || expr.kind === 97 || expr.kind === 185 && isNarrowableReference(expr.expression); } function hasNarrowableArgument(expr) { if (expr.arguments) { for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { var argument = _a[_i]; if (isNarrowableReference(argument)) { return true; } } } if (expr.expression.kind === 185 && isNarrowableReference(expr.expression.expression)) { return true; } return false; } function isNarrowingTypeofOperands(expr1, expr2) { return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2); } function isNarrowableInOperands(left, right) { return ts.isStringLiteralLike(left) && isNarrowingExpression(right); } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 58: return isNarrowableReference(expr.left); 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: return isNarrowableOperand(expr.left); case 92: return isNarrowableInOperands(expr.left, expr.right); case 26: return isNarrowingExpression(expr.right); } return false; } function isNarrowableOperand(expr) { switch (expr.kind) { case 191: return isNarrowableOperand(expr.expression); case 200: switch (expr.operatorToken.kind) { case 58: return isNarrowableOperand(expr.left); case 26: return isNarrowableOperand(expr.right); } } return isNarrowableReference(expr); } function createBranchLabel() { return { flags: 4, antecedents: undefined }; } function createLoopLabel() { return { flags: 8, antecedents: undefined }; } function setFlowNodeReferenced(flow) { flow.flags |= flow.flags & 512 ? 1024 : 512; } function addAntecedent(label, 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) { return antecedent; } if (!expression) { return flags & 32 ? antecedent : unreachableFlow; } if (expression.kind === 101 && flags & 64 || expression.kind === 86 && flags & 32) { return unreachableFlow; } if (!isNarrowingExpression(expression)) { return antecedent; } setFlowNodeReferenced(antecedent); return { flags: flags, expression: expression, antecedent: antecedent }; } function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { if (!isNarrowingExpression(switchStatement.expression)) { return antecedent; } setFlowNodeReferenced(antecedent); return { flags: 128, switchStatement: switchStatement, clauseStart: clauseStart, clauseEnd: clauseEnd, antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { setFlowNodeReferenced(antecedent); return { flags: 16, antecedent: antecedent, node: node }; } function createFlowArrayMutation(antecedent, node) { setFlowNodeReferenced(antecedent); var res = { flags: 256, antecedent: antecedent, node: node }; return res; } function finishFlowLabel(flow) { var antecedents = flow.antecedents; if (!antecedents) { return unreachableFlow; } if (antecedents.length === 1) { return antecedents[0]; } return flow; } function isStatementCondition(node) { var parent = node.parent; switch (parent.kind) { case 217: case 219: case 218: return parent.expression === node; case 220: case 201: return parent.condition === node; } return false; } function isLogicalExpression(node) { while (true) { if (node.kind === 191) { node = node.expression; } else if (node.kind === 198 && node.operator === 51) { node = node.operand; } else { return node.kind === 200 && (node.operatorToken.kind === 53 || node.operatorToken.kind === 54); } } } function isTopLevelLogicalExpression(node) { while (node.parent.kind === 191 || node.parent.kind === 198 && node.parent.operator === 51) { node = node.parent; } return !isStatementCondition(node) && !isLogicalExpression(node.parent); } function bindCondition(node, trueTarget, falseTarget) { var saveTrueTarget = currentTrueTarget; var saveFalseTarget = currentFalseTarget; currentTrueTarget = trueTarget; currentFalseTarget = falseTarget; bind(node); currentTrueTarget = saveTrueTarget; currentFalseTarget = saveFalseTarget; if (!node || !isLogicalExpression(node)) { addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node)); addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node)); } } function bindIterativeStatement(node, breakTarget, continueTarget) { var saveBreakTarget = currentBreakTarget; var saveContinueTarget = currentContinueTarget; currentBreakTarget = breakTarget; currentContinueTarget = continueTarget; bind(node); currentBreakTarget = saveBreakTarget; currentContinueTarget = saveContinueTarget; } function bindWhileStatement(node) { var preWhileLabel = createLoopLabel(); var preBodyLabel = createBranchLabel(); var postWhileLabel = createBranchLabel(); addAntecedent(preWhileLabel, currentFlow); currentFlow = preWhileLabel; bindCondition(node.expression, preBodyLabel, postWhileLabel); currentFlow = finishFlowLabel(preBodyLabel); bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel); addAntecedent(preWhileLabel, currentFlow); currentFlow = finishFlowLabel(postWhileLabel); } function bindDoStatement(node) { var preDoLabel = createLoopLabel(); var enclosingLabeledStatement = node.parent.kind === 228 ? ts.lastOrUndefined(activeLabels) : undefined; var preConditionLabel = enclosingLabeledStatement ? enclosingLabeledStatement.continueTarget : createBranchLabel(); var postDoLabel = enclosingLabeledStatement ? enclosingLabeledStatement.breakTarget : createBranchLabel(); addAntecedent(preDoLabel, currentFlow); currentFlow = preDoLabel; bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); addAntecedent(preConditionLabel, currentFlow); currentFlow = finishFlowLabel(preConditionLabel); bindCondition(node.expression, preDoLabel, postDoLabel); currentFlow = finishFlowLabel(postDoLabel); } function bindForStatement(node) { var preLoopLabel = createLoopLabel(); var preBodyLabel = createBranchLabel(); var postLoopLabel = createBranchLabel(); bind(node.initializer); addAntecedent(preLoopLabel, currentFlow); currentFlow = preLoopLabel; bindCondition(node.condition, preBodyLabel, postLoopLabel); currentFlow = finishFlowLabel(preBodyLabel); bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); bind(node.incrementor); addAntecedent(preLoopLabel, currentFlow); currentFlow = finishFlowLabel(postLoopLabel); } function bindForInOrForOfStatement(node) { var preLoopLabel = createLoopLabel(); var postLoopLabel = createBranchLabel(); addAntecedent(preLoopLabel, currentFlow); currentFlow = preLoopLabel; if (node.kind === 222) { bind(node.awaitModifier); } bind(node.expression); addAntecedent(postLoopLabel, currentFlow); bind(node.initializer); if (node.initializer.kind !== 233) { bindAssignmentTargetFlow(node.initializer); } bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); addAntecedent(preLoopLabel, currentFlow); currentFlow = finishFlowLabel(postLoopLabel); } function bindIfStatement(node) { var thenLabel = createBranchLabel(); var elseLabel = createBranchLabel(); var postIfLabel = createBranchLabel(); bindCondition(node.expression, thenLabel, elseLabel); currentFlow = finishFlowLabel(thenLabel); bind(node.thenStatement); addAntecedent(postIfLabel, currentFlow); currentFlow = finishFlowLabel(elseLabel); bind(node.elseStatement); addAntecedent(postIfLabel, currentFlow); currentFlow = finishFlowLabel(postIfLabel); } function bindReturnOrThrow(node) { bind(node.expression); if (node.kind === 225) { hasExplicitReturn = true; if (currentReturnTarget) { addAntecedent(currentReturnTarget, currentFlow); } } currentFlow = unreachableFlow; } function findActiveLabel(name) { if (activeLabels) { for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { var label = activeLabels_1[_i]; if (label.name === name) { return label; } } } return undefined; } function bindBreakOrContinueFlow(node, breakTarget, continueTarget) { var flowLabel = node.kind === 224 ? breakTarget : continueTarget; if (flowLabel) { addAntecedent(flowLabel, currentFlow); currentFlow = unreachableFlow; } } function bindBreakOrContinueStatement(node) { bind(node.label); if (node.label) { var activeLabel = findActiveLabel(node.label.escapedText); if (activeLabel) { activeLabel.referenced = true; bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); } } else { bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); } } function bindTryStatement(node) { var preFinallyLabel = createBranchLabel(); var preTryFlow = currentFlow; bind(node.tryBlock); addAntecedent(preFinallyLabel, currentFlow); var flowAfterTry = currentFlow; var flowAfterCatch = unreachableFlow; if (node.catchClause) { currentFlow = preTryFlow; bind(node.catchClause); addAntecedent(preFinallyLabel, currentFlow); flowAfterCatch = currentFlow; } if (node.finallyBlock) { var preFinallyFlow = { flags: 2048, antecedent: preTryFlow, lock: {} }; addAntecedent(preFinallyLabel, preFinallyFlow); currentFlow = finishFlowLabel(preFinallyLabel); bind(node.finallyBlock); if (!(currentFlow.flags & 1)) { if ((flowAfterTry.flags & 1) && (flowAfterCatch.flags & 1)) { currentFlow = flowAfterTry === reportedUnreachableFlow || flowAfterCatch === reportedUnreachableFlow ? reportedUnreachableFlow : unreachableFlow; } } if (!(currentFlow.flags & 1)) { var afterFinallyFlow = { flags: 4096, antecedent: currentFlow }; preFinallyFlow.lock = afterFinallyFlow; currentFlow = afterFinallyFlow; } } else { currentFlow = finishFlowLabel(preFinallyLabel); } } function bindSwitchStatement(node) { var postSwitchLabel = createBranchLabel(); bind(node.expression); var saveBreakTarget = currentBreakTarget; var savePreSwitchCaseFlow = preSwitchCaseFlow; currentBreakTarget = postSwitchLabel; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); 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)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; currentFlow = finishFlowLabel(postSwitchLabel); } function bindCaseBlock(node) { var savedSubtreeTransformFlags = subtreeTransformFlags; subtreeTransformFlags = 0; var clauses = node.clauses; var fallthroughFlow = unreachableFlow; for (var i = 0; i < clauses.length; i++) { var clauseStart = i; while (!clauses[i].statements.length && i + 1 < clauses.length) { bind(clauses[i]); i++; } var preCaseLabel = createBranchLabel(); addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); addAntecedent(preCaseLabel, fallthroughFlow); currentFlow = finishFlowLabel(preCaseLabel); var clause = clauses[i]; bind(clause); fallthroughFlow = currentFlow; if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } clauses.transformFlags = subtreeTransformFlags | 536870912; subtreeTransformFlags |= savedSubtreeTransformFlags; } function bindCaseClause(node) { var saveCurrentFlow = currentFlow; currentFlow = preSwitchCaseFlow; bind(node.expression); currentFlow = saveCurrentFlow; bindEach(node.statements); } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, breakTarget: breakTarget, continueTarget: continueTarget, referenced: false }; (activeLabels || (activeLabels = [])).push(activeLabel); return activeLabel; } function popActiveLabel() { activeLabels.pop(); } function bindLabeledStatement(node) { var preStatementLabel = createLoopLabel(); var postStatementLabel = createBranchLabel(); bind(node.label); addAntecedent(preStatementLabel, currentFlow); var activeLabel = pushActiveLabel(node.label.escapedText, postStatementLabel, preStatementLabel); bind(node.statement); popActiveLabel(); if (!activeLabel.referenced && !options.allowUnusedLabels) { errorOrSuggestionOnFirstToken(ts.unusedLabelIsError(options), node, ts.Diagnostics.Unused_label); } if (!node.statement || node.statement.kind !== 218) { addAntecedent(postStatementLabel, currentFlow); currentFlow = finishFlowLabel(postStatementLabel); } } function bindDestructuringTargetFlow(node) { if (node.kind === 200 && node.operatorToken.kind === 58) { bindAssignmentTargetFlow(node.left); } else { bindAssignmentTargetFlow(node); } } function bindAssignmentTargetFlow(node) { if (isNarrowableReference(node)) { currentFlow = createFlowAssignment(currentFlow, node); } else if (node.kind === 183) { for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { var e = _a[_i]; if (e.kind === 204) { bindAssignmentTargetFlow(e.expression); } else { bindDestructuringTargetFlow(e); } } } else if (node.kind === 184) { for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { var p = _c[_b]; if (p.kind === 270) { bindDestructuringTargetFlow(p.initializer); } else if (p.kind === 271) { bindAssignmentTargetFlow(p.name); } else if (p.kind === 272) { bindAssignmentTargetFlow(p.expression); } } } } function bindLogicalExpression(node, trueTarget, falseTarget) { var preRightLabel = createBranchLabel(); if (node.operatorToken.kind === 53) { bindCondition(node.left, preRightLabel, falseTarget); } else { bindCondition(node.left, trueTarget, preRightLabel); } currentFlow = finishFlowLabel(preRightLabel); bind(node.operatorToken); bindCondition(node.right, trueTarget, falseTarget); } function bindPrefixUnaryExpressionFlow(node) { if (node.operator === 51) { var saveTrueTarget = currentTrueTarget; currentTrueTarget = currentFalseTarget; currentFalseTarget = saveTrueTarget; bindEachChild(node); currentFalseTarget = currentTrueTarget; currentTrueTarget = saveTrueTarget; } else { bindEachChild(node); if (node.operator === 43 || node.operator === 44) { bindAssignmentTargetFlow(node.operand); } } } function bindPostfixUnaryExpressionFlow(node) { bindEachChild(node); if (node.operator === 43 || node.operator === 44) { bindAssignmentTargetFlow(node.operand); } } function bindBinaryExpressionFlow(node) { var operator = node.operatorToken.kind; if (operator === 53 || operator === 54) { if (isTopLevelLogicalExpression(node)) { var postExpressionLabel = createBranchLabel(); bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); currentFlow = finishFlowLabel(postExpressionLabel); } else { bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); } } else { bindEachChild(node); if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) { bindAssignmentTargetFlow(node.left); if (operator === 58 && node.left.kind === 186) { var elementAccess = node.left; if (isNarrowableOperand(elementAccess.expression)) { currentFlow = createFlowArrayMutation(currentFlow, node); } } } } } function bindDeleteExpressionFlow(node) { bindEachChild(node); if (node.expression.kind === 185) { bindAssignmentTargetFlow(node.expression); } } function bindConditionalExpressionFlow(node) { var trueLabel = createBranchLabel(); var falseLabel = createBranchLabel(); var postExpressionLabel = createBranchLabel(); bindCondition(node.condition, trueLabel, falseLabel); currentFlow = finishFlowLabel(trueLabel); bind(node.questionToken); bind(node.whenTrue); addAntecedent(postExpressionLabel, currentFlow); currentFlow = finishFlowLabel(falseLabel); bind(node.colonToken); bind(node.whenFalse); addAntecedent(postExpressionLabel, currentFlow); currentFlow = finishFlowLabel(postExpressionLabel); } function bindInitializedVariableFlow(node) { var name = !ts.isOmittedExpression(node) ? node.name : undefined; if (ts.isBindingPattern(name)) { for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { var child = _a[_i]; bindInitializedVariableFlow(child); } } else { currentFlow = createFlowAssignment(currentFlow, node); } } function bindVariableDeclarationFlow(node) { bindEachChild(node); if (node.initializer || ts.isForInOrOfStatement(node.parent.parent)) { bindInitializedVariableFlow(node); } } function bindJSDocTypeAlias(node) { if (node.fullName) { setParentPointers(node, node.fullName); } } function bindCallExpressionFlow(node) { var expr = node.expression; while (expr.kind === 191) { expr = expr.expression; } if (expr.kind === 192 || expr.kind === 193) { bindEach(node.typeArguments); bindEach(node.arguments); bind(node.expression); } else { bindEachChild(node); } if (node.expression.kind === 185) { var propertyAccess = node.expression; if (isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) { currentFlow = createFlowArrayMutation(currentFlow, node); } } } function getContainerFlags(node) { switch (node.kind) { 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 | 4 | 32 | 8 | 128; } 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; } function addToContainerChain(next) { if (lastContainer) { lastContainer.nextContainer = next; } lastContainer = next; } function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) { switch (container.kind) { case 239: return declareModuleMember(node, symbolFlags, symbolExcludes); case 274: return declareSourceFileMember(node, symbolFlags, symbolExcludes); case 205: case 235: return declareClassMember(node, symbolFlags, symbolExcludes); case 238: return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); case 166: case 287: case 184: case 236: case 263: return declareSymbol(container.symbol.members, container.symbol, 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 298: case 292: case 237: case 177: return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } function declareClassMember(node, symbolFlags, symbolExcludes) { 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, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { 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 || stat.kind === 249) { return true; } } } return false; } function setExportContextFlag(node) { if (node.flags & 4194304 && !hasExportDeclarations(node)) { node.flags |= 32; } else { node.flags &= ~32; } } function bindModuleDeclaration(node) { setExportContextFlag(node); if (ts.isAmbientModule(node)) { 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)) { declareModuleSymbol(node); } else { var pattern = void 0; if (node.name.kind === 9) { var text = node.name.text; if (ts.hasZeroOrOneAsteriskCharacter(text)) { pattern = ts.tryParsePattern(text); } else { errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text); } } 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) { var symbol = node.symbol; symbol.constEnumOnlyModule = (!(symbol.flags & (16 | 32 | 256))) && state === 2 && symbol.constEnumOnlyModule !== false; } } } function declareModuleSymbol(node) { var state = getModuleInstanceState(node); var instantiated = state !== 0; declareSymbolAndAddToSymbolTable(node, instantiated ? 512 : 1024, instantiated ? 67215503 : 0); return state; } function bindFunctionOrConstructorType(node) { 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 || prop.name.kind !== 71) { continue; } var identifier = prop.name; 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 && 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, "__object"); } function bindJsxAttributes(node) { 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 | 106500)) { symbol.parent = container.symbol; } addDeclarationToSymbol(symbol, node, symbolFlags); return symbol; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { case 239: declareModuleMember(node, symbolFlags, symbolExcludes); break; case 274: if (ts.isExternalOrCommonJsModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; } default: if (!blockScopeContainer.locals) { blockScopeContainer.locals = ts.createSymbolTable(); addToContainerChain(blockScopeContainer); } declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes); } } function bindBlockScopedVariableDeclaration(node) { bindBlockScopedDeclaration(node, 2, 67216319); } function delayedBindJSDocTypedefTag() { if (!delayedTypeAliases) { return; } var saveContainer = container; var saveLastContainer = lastContainer; var saveBlockScopeContainer = blockScopeContainer; var saveParent = parent; var saveCurrentFlow = currentFlow; 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); }) || file; blockScopeContainer = ts.getEnclosingBlockScopeContainer(host) || file; currentFlow = { flags: 2 }; parent = typeAlias; bind(typeAlias.typeExpression); if (!typeAlias.fullName || typeAlias.fullName.kind === 71) { parent = typeAlias.parent; bindBlockScopedDeclaration(typeAlias, 524288, 67901928); } else { bind(typeAlias.fullName); } } container = saveContainer; lastContainer = saveLastContainer; blockScopeContainer = saveBlockScopeContainer; parent = saveParent; currentFlow = saveCurrentFlow; } function checkStrictModeIdentifier(node) { if (inStrictMode && node.originalKeywordKind >= 108 && node.originalKeywordKind <= 116 && !ts.isIdentifierName(node) && !(node.flags & 4194304)) { if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); } } } function getStrictModeIdentifierMessage(node) { if (ts.getContainingClass(node)) { return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; } if (file.externalModuleIndicator) { return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode; } return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; } function checkStrictModeBinaryExpression(node) { if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) { checkStrictModeEvalOrArguments(node, node.left); } } function checkStrictModeCatchClause(node) { if (inStrictMode && node.variableDeclaration) { checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); } } function checkStrictModeDeleteExpression(node) { 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)); } } function isEvalOrArgumentsIdentifier(node) { return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments"); } function checkStrictModeEvalOrArguments(contextNode, name) { if (name && name.kind === 71) { var identifier = name; if (isEvalOrArgumentsIdentifier(identifier)) { var span = ts.getErrorSpanForNode(file, name); file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), ts.idText(identifier))); } } } function getStrictModeEvalOrArgumentsMessage(node) { if (ts.getContainingClass(node)) { return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode; } if (file.externalModuleIndicator) { return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode; } return ts.Diagnostics.Invalid_use_of_0_in_strict_mode; } function checkStrictModeFunctionName(node) { if (inStrictMode) { checkStrictModeEvalOrArguments(node, node.name); } } function getStrictModeBlockScopeFunctionDeclarationMessage(node) { 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; } if (file.externalModuleIndicator) { return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode; } return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5; } function checkStrictModeFunctionDeclaration(node) { if (languageVersion < 2) { if (blockScopeContainer.kind !== 274 && blockScopeContainer.kind !== 239 && !ts.isFunctionLike(blockScopeContainer)) { 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) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); } } function checkStrictModePostfixUnaryExpression(node) { if (inStrictMode) { checkStrictModeEvalOrArguments(node, node.operand); } } function checkStrictModePrefixUnaryExpression(node) { if (inStrictMode) { if (node.operator === 43 || node.operator === 44) { checkStrictModeEvalOrArguments(node, node.operand); } } } function checkStrictModeWithStatement(node) { if (inStrictMode) { errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); } } function errorOnFirstToken(node, message, arg0, arg1, arg2) { var span = ts.getSpanOfTokenAtPosition(file, node.pos); file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2)); } function errorOrSuggestionOnFirstToken(isError, node, message, arg0, arg1, arg2) { var span = ts.getSpanOfTokenAtPosition(file, node.pos); var diag = ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2); if (isError) { file.bindDiagnostics.push(diag); } else { file.bindSuggestionDiagnostics = ts.append(file.bindSuggestionDiagnostics, __assign({}, diag, { category: ts.DiagnosticCategory.Suggestion })); } } function bind(node) { if (!node) { return; } node.parent = parent; var saveInStrictMode = inStrictMode; bindWorker(node); if (node.kind > 145) { var saveParent = parent; parent = node; var containerFlags = getContainerFlags(node); if (containerFlags === 0) { bindChildren(node); } else { bindContainer(node, containerFlags); } parent = saveParent; } else if (!skipTransformFlagAggregation && (node.transformFlags & 536870912) === 0) { subtreeTransformFlags |= computeTransformFlagsForNode(node, 0); bindJSDoc(node); } inStrictMode = saveInStrictMode; } function bindJSDoc(node) { if (ts.hasJSDocNodes(node)) { if (ts.isInJavaScriptFile(node)) { for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) { var j = _a[_i]; bind(j); } } else { for (var _b = 0, _c = node.jsDoc; _b < _c.length; _b++) { var j = _c[_b]; setParentPointers(node, j); } } } } function updateStrictModeStatementList(statements) { if (!inStrictMode) { for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) { var statement = statements_1[_i]; if (!ts.isPrologueDirective(statement)) { return; } if (isUseStrictPrologueDirective(statement)) { inStrictMode = true; return; } } } } function isUseStrictPrologueDirective(node) { var nodeText = ts.getSourceTextOfNodeFromSourceFile(file, node.expression); return nodeText === '"use strict"' || nodeText === "'use strict'"; } function bindWorker(node) { switch (node.kind) { case 71: if (node.isInJSDocNamespace) { var parentNode = node.parent; while (parentNode && !ts.isJSDocTypeAlias(parentNode)) { parentNode = parentNode.parent; } bindBlockScopedDeclaration(parentNode, 524288, 67901928); break; } case 99: if (currentFlow && (ts.isExpression(node) || parent.kind === 271)) { node.flowNode = currentFlow; } return checkStrictModeIdentifier(node); case 185: if (currentFlow && isNarrowableReference(node)) { node.flowNode = currentFlow; } if (ts.isSpecialPropertyDeclaration(node)) { bindSpecialPropertyDeclaration(node); } break; case 200: var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { case 1: bindExportsPropertyAssignment(node); break; case 2: bindModuleExportsAssignment(node); break; case 3: bindPrototypePropertyAssignment(node.left, node); break; case 6: bindPrototypeAssignment(node); break; case 4: bindThisPropertyAssignment(node); break; case 5: bindSpecialPropertyAssignment(node); break; case 0: break; default: ts.Debug.fail("Unknown special property assignment kind"); } return checkStrictModeBinaryExpression(node); case 269: return checkStrictModeCatchClause(node); case 194: return checkStrictModeDeleteExpression(node); case 8: return checkStrictModeNumericLiteral(node); case 199: return checkStrictModePostfixUnaryExpression(node); case 198: return checkStrictModePrefixUnaryExpression(node); case 226: return checkStrictModeWithStatement(node); case 174: seenThisKeyword = true; return; case 161: break; case 148: return bindTypeParameter(node); case 149: return bindParameter(node); case 232: return bindVariableDeclarationOrBindingElement(node); case 182: node.flowNode = currentFlow; return bindVariableDeclarationOrBindingElement(node); case 152: case 151: return bindPropertyWorker(node); 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: 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: case 287: case 177: return bindAnonymousTypeWorker(node); case 184: return bindObjectLiteralExpression(node); case 192: case 193: return bindFunctionExpression(node); case 187: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; case 205: case 235: inStrictMode = true; return bindClassLikeDeclaration(node); case 236: return bindBlockScopedDeclaration(node, 64, 67901832); case 237: return bindBlockScopedDeclaration(node, 524288, 67901928); case 238: return bindEnumDeclaration(node); case 239: return bindModuleDeclaration(node); case 263: return bindJsxAttributes(node); 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: return bindImportClause(node); case 250: return bindExportDeclaration(node); case 249: return bindExportAssignment(node); case 274: updateStrictModeStatementList(node.statements); return bindSourceFileIfExternalModule(); case 213: if (!ts.isFunctionLike(node.parent)) { return; } case 240: return updateStrictModeStatementList(node.statements); case 293: if (node.parent.kind === 288) { return bindParameter(node); } if (node.parent.kind !== 287) { break; } case 299: var propTag = node; var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 283 ? 4 | 16777216 : 4; return declareSymbolAndAddToSymbolTable(propTag, flags, 0); case 298: case 292: return (delayedTypeAliases || (delayedTypeAliases = [])).push(node); } } function bindPropertyWorker(node) { return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 16777216 : 0), 0); } function bindAnonymousTypeWorker(node) { return bindAnonymousDeclaration(node, 2048, "__type"); } function bindSourceFileIfExternalModule() { setExportContextFlag(file); if (ts.isExternalModule(file)) { bindSourceFileAsExternalModule(); } else if (ts.isJsonSourceFile(file)) { bindSourceFileAsExternalModule(); var originalSymbol = file.symbol; declareSymbol(file.symbol.exports, file.symbol, file, 4, 67108863); file.symbol = originalSymbol; } } function bindSourceFileAsExternalModule() { bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { if (!container.symbol || !container.symbol.exports) { bindAnonymousDeclaration(node, 2097152, getDeclarationName(node)); } else { 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) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } else { var parent_1 = node.parent; if (!ts.isExternalModule(parent_1)) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); return; } if (!parent_1.isDeclarationFile) { file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); return; } } file.symbol.globalExports = file.symbol.globalExports || ts.createSymbolTable(); declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152, 2097152); } function bindExportDeclaration(node) { if (!container.symbol || !container.symbol.exports) { bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); } else if (!node.exportClause) { declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 0); } } function bindImportClause(node) { if (node.name) { declareSymbolAndAddToSymbolTable(node, 2097152, 2097152); } } function setCommonJsModuleIndicator(node) { if (file.externalModuleIndicator) { return false; } if (!file.commonJsModuleIndicator) { file.commonJsModuleIndicator = node; bindSourceFileAsExternalModule(); } return true; } function bindExportsPropertyAssignment(node) { if (!setCommonJsModuleIndicator(node)) { return; } var lhs = node.left; var symbol = forEachIdentifierInEntityName(lhs.expression, undefined, function (id, symbol) { if (symbol) { addDeclarationToSymbol(symbol, id, 1536 | 67108864); } return symbol; }); if (symbol) { var flags = ts.isClassExpression(node.right) ? 4 | 1048576 | 32 : 4 | 1048576; declareSymbol(symbol.exports, symbol, lhs, flags, 0); } } function bindModuleExportsAssignment(node) { if (!setCommonJsModuleIndicator(node)) { return; } var assignedExpression = ts.getRightMostAssignedExpression(node.right); if (ts.isEmptyObjectLiteral(assignedExpression) || container === file && isExportsOrModuleExportsOrAlias(file, assignedExpression)) { return; } var flags = ts.exportAssignmentIsAlias(node) ? 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, false); switch (thisContainer.kind) { case 234: case 192: var constructorSymbol = thisContainer.symbol; 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) { constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable(); declareSymbol(constructorSymbol.members, constructorSymbol, node, 4, 0 & ~4); } break; case 155: case 152: case 154: case 156: case 157: var containingClass = thisContainer.parent; var symbolTable = ts.hasModifier(thisContainer, 32) ? containingClass.symbol.exports : containingClass.symbol.members; declareSymbol(symbolTable, containingClass.symbol, node, 4, 0, true); break; case 274: break; default: ts.Debug.fail(ts.Debug.showSyntaxKind(thisContainer)); } } function bindSpecialPropertyDeclaration(node) { if (node.expression.kind === 99) { bindThisPropertyAssignment(node); } else if (ts.isPropertyAccessEntityNameExpression(node) && node.parent.parent.kind === 274) { if (ts.isPrototypeAccess(node.expression)) { bindPrototypePropertyAssignment(node, node.parent); } else { bindStaticPropertyAssignment(node); } } } function bindPrototypeAssignment(node) { node.left.parent = node; node.right.parent = node; var lhs = node.left; bindPropertyAssignment(lhs, lhs, false); } function bindPrototypePropertyAssignment(lhs, parent) { var classPrototype = lhs.expression; var constructorFunction = classPrototype.expression; lhs.parent = parent; constructorFunction.parent = classPrototype; classPrototype.parent = lhs; bindPropertyAssignment(constructorFunction, lhs, true); } function bindSpecialPropertyAssignment(node) { var lhs = node.left; node.left.parent = node; node.right.parent = node; if (ts.isIdentifier(lhs.expression) && container === file && isNameOfExportsOrModuleExportsAliasDeclaration(file, lhs.expression)) { bindExportsPropertyAssignment(node); } else { bindStaticPropertyAssignment(lhs); } } function bindStaticPropertyAssignment(node) { node.expression.parent = node; 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 && !!ts.getJavascriptInitializer(ts.getInitializerOfBinaryExpression(propertyAccess.parent), ts.isPrototypeAccess(propertyAccess.parent.left)) : 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); return symbol; } else { return declareSymbol(parent ? parent.exports : container.locals, parent, id, flags_1, excludeFlags_1); } }); } if (!namespaceSymbol || !isJavascriptContainer(namespaceSymbol)) { return; } var symbolTable = isPrototypeProperty ? (namespaceSymbol.members || (namespaceSymbol.members = ts.createSymbolTable())) : (namespaceSymbol.exports || (namespaceSymbol.exports = ts.createSymbolTable())); var jsContainerFlag = isToplevelNamespaceableInitializer ? 67108864 : 0; var isMethod = ts.isFunctionLikeDeclaration(ts.getAssignedJavascriptInitializer(propertyAccess)); var symbolFlags = (isMethod ? 8192 : 4) | jsContainerFlag; var symbolExcludes = (isMethod ? 67208127 : 0) & ~jsContainerFlag; declareSymbol(symbolTable, namespaceSymbol, propertyAccess, symbolFlags, symbolExcludes); } function isJavascriptContainer(symbol) { if (symbol.flags & (16 | 32 | 1024)) { return true; } var node = symbol.valueDeclaration; var init = !node ? undefined : ts.isVariableDeclaration(node) ? node.initializer : ts.isBinaryExpression(node) ? node.right : ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) ? node.parent.right : undefined; init = init && ts.getRightMostAssignedExpression(init); 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 ? init.right : init, isPrototypeAssignment); } return false; } function getParentOfBinaryExpression(expr) { while (ts.isBinaryExpression(expr.parent)) { expr = expr.parent; } return expr.parent; } function lookupSymbolForPropertyAccess(node, lookupContainer) { if (lookupContainer === void 0) { lookupContainer = container; } if (ts.isIdentifier(node)) { return lookupSymbolForNameWorker(lookupContainer, node.escapedText); } else { var symbol = lookupSymbolForPropertyAccess(node.expression); return symbol && symbol.exports && symbol.exports.get(node.name.escapedText); } } function forEachIdentifierInEntityName(e, parent, action) { if (isExportsOrModuleExportsOrAlias(file, e)) { return file.symbol; } else if (ts.isIdentifier(e)) { return action(e, lookupSymbolForPropertyAccess(e), parent); } else { var s = forEachIdentifierInEntityName(e.expression, parent, action); if (!s || !s.exports) return ts.Debug.fail(); return action(e.name, s.exports.get(e.name.escapedText), s); } } function bindCallExpression(node) { if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) { setCommonJsModuleIndicator(node); } } function bindClassLikeDeclaration(node) { if (node.kind === 235) { bindBlockScopedDeclaration(node, 32, 68008383); } else { 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; var prototypeSymbol = createSymbol(4 | 4194304, "prototype"); var symbolExport = symbol.exports.get(prototypeSymbol.escapedName); if (symbolExport) { if (node.name) { node.name.parent = node; } file.bindDiagnostics.push(createDiagnosticForNode(symbolExport.declarations[0], ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(prototypeSymbol))); } symbol.exports.set(prototypeSymbol.escapedName, prototypeSymbol); prototypeSymbol.parent = symbol; } function bindEnumDeclaration(node) { return ts.isConst(node) ? bindBlockScopedDeclaration(node, 128, 68008831) : bindBlockScopedDeclaration(node, 256, 68008191); } function bindVariableDeclarationOrBindingElement(node) { if (inStrictMode) { checkStrictModeEvalOrArguments(node, node.name); } if (!ts.isBindingPattern(node.name)) { if (ts.isBlockOrCatchScoped(node)) { bindBlockScopedVariableDeclaration(node); } else if (ts.isParameterDeclaration(node)) { declareSymbolAndAddToSymbolTable(node, 1, 67216319); } else { declareSymbolAndAddToSymbolTable(node, 1, 67216318); } } } function bindParameter(node) { if (node.kind === 293 && container.kind !== 288) { return; } if (inStrictMode && !(node.flags & 4194304)) { checkStrictModeEvalOrArguments(node, node.name); } if (ts.isBindingPattern(node.name)) { bindAnonymousDeclaration(node, 1, "__" + node.parent.parameters.indexOf(node)); } else { declareSymbolAndAddToSymbolTable(node, 1, 67216319); } if (ts.isParameterPropertyDeclaration(node)) { var classDeclaration = node.parent.parent; declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 | (node.questionToken ? 16777216 : 0), 0); } } function bindFunctionDeclaration(node) { if (!file.isDeclarationFile && !(node.flags & 4194304)) { if (ts.isAsyncFunction(node)) { emitFlags |= 1024; } } checkStrictModeFunctionName(node); if (inStrictMode) { checkStrictModeFunctionDeclaration(node); bindBlockScopedDeclaration(node, 16, 67215791); } else { declareSymbolAndAddToSymbolTable(node, 16, 67215791); } } function bindFunctionExpression(node) { if (!file.isDeclarationFile && !(node.flags & 4194304)) { if (ts.isAsyncFunction(node)) { emitFlags |= 1024; } } if (currentFlow) { node.flowNode = currentFlow; } checkStrictModeFunctionName(node); var bindingName = node.name ? node.name.escapedText : "__function"; return bindAnonymousDeclaration(node, 16, bindingName); } function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) { 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") : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } function getInferTypeContainer(node) { var extendsType = ts.findAncestor(node, function (n) { return n.parent && ts.isConditionalTypeNode(n.parent) && n.parent.extendsType === n; }); return extendsType && extendsType.parent; } function bindTypeParameter(node) { if (ts.isJSDocTemplateTag(node.parent)) { 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, undefined, node, 262144, 67639784); } else { declareSymbolAndAddToSymbolTable(node, 262144, 67639784); } } 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, undefined, node, 262144, 67639784); } else { bindAnonymousDeclaration(node, 262144, getDeclarationName(node)); } } else { declareSymbolAndAddToSymbolTable(node, 262144, 67639784); } } function shouldReportErrorOnModuleDeclaration(node) { var instanceState = getModuleInstanceState(node); return instanceState === 1 || (instanceState === 2 && !!options.preserveConstEnums); } function checkUnreachable(node) { if (!(currentFlow.flags & 1)) { return false; } if (currentFlow === unreachableFlow) { 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) { var isError = ts.unreachableCodeIsError(options) && !(node.flags & 4194304) && (!ts.isVariableStatement(node) || !!(ts.getCombinedNodeFlags(node.declarationList) & 3) || node.declarationList.declarations.some(function (d) { return !!d.initializer; })); errorOrSuggestionOnFirstToken(isError, node, ts.Diagnostics.Unreachable_code_detected); } } } return true; } } function isExportsOrModuleExportsOrAlias(sourceFile, node) { return ts.isExportsIdentifier(node) || ts.isModuleExportsPropertyAccessExpression(node) || ts.isIdentifier(node) && isNameOfExportsOrModuleExportsAliasDeclaration(sourceFile, node); } ts.isExportsOrModuleExportsOrAlias = isExportsOrModuleExportsOrAlias; function isNameOfExportsOrModuleExportsAliasDeclaration(sourceFile, node) { var symbol = lookupSymbolForNameWorker(sourceFile, node.escapedText); return !!symbol && !!symbol.valueDeclaration && ts.isVariableDeclaration(symbol.valueDeclaration) && !!symbol.valueDeclaration.initializer && isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, symbol.valueDeclaration.initializer); } function isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node) { return isExportsOrModuleExportsOrAlias(sourceFile, node) || (ts.isAssignmentExpression(node, true) && (isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.left) || isExportsOrModuleExportsOrAliasOrAssignment(sourceFile, node.right))); } function lookupSymbolForNameWorker(container, name) { var local = container.locals && container.locals.get(name); if (local) { return local.exportSymbol || local; } return container.symbol && container.symbol.exports && container.symbol.exports.get(name); } function computeTransformFlagsForNode(node, subtreeFlags) { var kind = node.kind; switch (kind) { case 187: return computeCallExpression(node, subtreeFlags); case 188: return computeNewExpression(node, subtreeFlags); case 239: return computeModuleDeclaration(node, subtreeFlags); case 191: return computeParenthesizedExpression(node, subtreeFlags); case 200: return computeBinaryExpression(node, subtreeFlags); case 216: return computeExpressionStatement(node, subtreeFlags); case 149: return computeParameter(node, subtreeFlags); case 193: return computeArrowFunction(node, subtreeFlags); case 192: return computeFunctionExpression(node, subtreeFlags); case 234: return computeFunctionDeclaration(node, subtreeFlags); case 232: return computeVariableDeclaration(node, subtreeFlags); case 233: return computeVariableDeclarationList(node, subtreeFlags); case 214: return computeVariableStatement(node, subtreeFlags); case 228: return computeLabeledStatement(node, subtreeFlags); case 235: return computeClassDeclaration(node, subtreeFlags); case 205: return computeClassExpression(node, subtreeFlags); case 268: return computeHeritageClause(node, subtreeFlags); case 269: return computeCatchClause(node, subtreeFlags); case 207: return computeExpressionWithTypeArguments(node, subtreeFlags); case 155: return computeConstructor(node, subtreeFlags); case 152: return computePropertyDeclaration(node, subtreeFlags); case 154: return computeMethod(node, subtreeFlags); case 156: case 157: return computeAccessor(node, subtreeFlags); case 243: return computeImportEquals(node, subtreeFlags); case 185: return computePropertyAccess(node, subtreeFlags); case 186: return computeElementAccess(node, subtreeFlags); default: return computeOther(node, kind, subtreeFlags); } } ts.computeTransformFlagsForNode = computeTransformFlagsForNode; function computeCallExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; var expression = node.expression; if (node.typeArguments) { transformFlags |= 3; } if (subtreeFlags & 524288 || (expression.transformFlags & (134217728 | 268435456))) { transformFlags |= 192; if (expression.transformFlags & 268435456) { transformFlags |= 16384; } } if (expression.kind === 91) { transformFlags |= 67108864; if (subtreeFlags & 16384) { transformFlags |= 32768; } } node.transformFlags = transformFlags | 536870912; return transformFlags & ~940049729; } function computeNewExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; if (node.typeArguments) { transformFlags |= 3; } if (subtreeFlags & 524288) { transformFlags |= 192; } 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 && leftKind === 184) { transformFlags |= 8 | 192 | 3072; } else if (operatorTokenKind === 58 && leftKind === 183) { transformFlags |= 192 | 3072; } else if (operatorTokenKind === 40 || operatorTokenKind === 62) { transformFlags |= 32; } 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; if (node.questionToken || node.type || subtreeFlags & 4096 || ts.isThisIdentifier(name)) { transformFlags |= 3; } if (ts.hasModifier(node, 92)) { transformFlags |= 3 | 262144; } if (subtreeFlags & 1048576) { transformFlags |= 8; } if (subtreeFlags & 8388608 || initializer || dotDotDotToken) { transformFlags |= 192 | 131072; } 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 (expressionKind === 208 || expressionKind === 190) { transformFlags |= 3; } if (expressionTransformFlags & 1024) { transformFlags |= 1024; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~536872257; } function computeClassDeclaration(node, subtreeFlags) { var transformFlags; if (ts.hasModifier(node, 2)) { transformFlags = 3; } else { transformFlags = subtreeFlags | 192; if ((subtreeFlags & 274432) || node.typeParameters) { transformFlags |= 3; } if (subtreeFlags & 65536) { transformFlags |= 16384; } } node.transformFlags = transformFlags | 536870912; return transformFlags & ~942011713; } function computeClassExpression(node, subtreeFlags) { var transformFlags = subtreeFlags | 192; if (subtreeFlags & 274432 || node.typeParameters) { transformFlags |= 3; } if (subtreeFlags & 65536) { transformFlags |= 16384; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~942011713; } function computeHeritageClause(node, subtreeFlags) { var transformFlags = subtreeFlags; switch (node.token) { case 85: transformFlags |= 192; break; case 108: transformFlags |= 3; break; default: ts.Debug.fail("Unexpected token for heritage clause"); break; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeCatchClause(node, subtreeFlags) { var transformFlags = subtreeFlags; if (!node.variableDeclaration) { transformFlags |= 8; } else if (ts.isBindingPattern(node.variableDeclaration.name)) { transformFlags |= 192; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~940574017; } function computeExpressionWithTypeArguments(node, subtreeFlags) { var transformFlags = subtreeFlags | 192; if (node.typeArguments) { transformFlags |= 3; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeConstructor(node, subtreeFlags) { var transformFlags = subtreeFlags; if (ts.hasModifier(node, 2270) || !node.body) { transformFlags |= 3; } if (subtreeFlags & 1048576) { transformFlags |= 8; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003668801; } function computeMethod(node, subtreeFlags) { var transformFlags = subtreeFlags | 192; if (node.decorators || ts.hasModifier(node, 2270) || node.typeParameters || node.type || (node.name && ts.isComputedPropertyName(node.name)) || !node.body) { transformFlags |= 3; } if (subtreeFlags & 1048576) { transformFlags |= 8; } if (ts.hasModifier(node, 256)) { transformFlags |= node.asteriskToken ? 8 : 16; } if (node.asteriskToken) { transformFlags |= 768; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003668801; } function computeAccessor(node, subtreeFlags) { var transformFlags = subtreeFlags; if (node.decorators || ts.hasModifier(node, 2270) || node.type || (node.name && ts.isComputedPropertyName(node.name)) || !node.body) { transformFlags |= 3; } if (subtreeFlags & 1048576) { transformFlags |= 8; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003668801; } function computePropertyDeclaration(node, subtreeFlags) { var transformFlags = subtreeFlags | 3; if (node.initializer || ts.isComputedPropertyName(node.name)) { transformFlags |= 8192; } 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)) { transformFlags = 3; } else { transformFlags = subtreeFlags | 33554432; if (modifierFlags & 2270 || node.typeParameters || node.type) { transformFlags |= 3; } if (modifierFlags & 256) { transformFlags |= node.asteriskToken ? 8 : 16; } if (subtreeFlags & 1048576) { transformFlags |= 8; } if (subtreeFlags & 163840) { transformFlags |= 192; } if (node.asteriskToken) { transformFlags |= 768; } } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003935041; } function computeFunctionExpression(node, subtreeFlags) { var transformFlags = subtreeFlags; if (ts.hasModifier(node, 2270) || node.typeParameters || node.type) { transformFlags |= 3; } if (ts.hasModifier(node, 256)) { transformFlags |= node.asteriskToken ? 8 : 16; } if (subtreeFlags & 1048576) { transformFlags |= 8; } if (subtreeFlags & 163840) { transformFlags |= 192; } if (node.asteriskToken) { transformFlags |= 768; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003935041; } function computeArrowFunction(node, subtreeFlags) { var transformFlags = subtreeFlags | 192; if (ts.hasModifier(node, 2270) || node.typeParameters || node.type) { transformFlags |= 3; } if (ts.hasModifier(node, 256)) { transformFlags |= 16; } if (subtreeFlags & 1048576) { transformFlags |= 8; } if (subtreeFlags & 16384) { transformFlags |= 32768; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~1003902273; } function computePropertyAccess(node, subtreeFlags) { var transformFlags = subtreeFlags; if (transformFlags & 134217728) { transformFlags ^= 134217728; transformFlags |= 268435456; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~671089985; } function computeElementAccess(node, subtreeFlags) { var transformFlags = subtreeFlags; var expression = node.expression; var expressionFlags = expression.transformFlags; if (expressionFlags & 134217728) { transformFlags &= ~134217728; transformFlags |= 268435456; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~671089985; } function computeVariableDeclaration(node, subtreeFlags) { var transformFlags = subtreeFlags; transformFlags |= 192 | 8388608; if (subtreeFlags & 1048576) { transformFlags |= 8; } if (node.type) { transformFlags |= 3; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeVariableStatement(node, subtreeFlags) { var transformFlags; var declarationListTransformFlags = node.declarationList.transformFlags; if (ts.hasModifier(node, 2)) { transformFlags = 3; } else { transformFlags = subtreeFlags; if (declarationListTransformFlags & 8388608) { transformFlags |= 192; } } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeLabeledStatement(node, subtreeFlags) { var transformFlags = subtreeFlags; if (subtreeFlags & 4194304 && ts.isIterationStatement(node, true)) { transformFlags |= 192; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeImportEquals(node, subtreeFlags) { var transformFlags = subtreeFlags; if (!ts.isExternalModuleImportEqualsDeclaration(node)) { transformFlags |= 3; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeExpressionStatement(node, subtreeFlags) { var transformFlags = subtreeFlags; if (node.expression.transformFlags & 1024) { transformFlags |= 192; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~939525441; } function computeModuleDeclaration(node, subtreeFlags) { var transformFlags = 3; var modifierFlags = ts.getModifierFlags(node); if ((modifierFlags & 2) === 0) { transformFlags |= subtreeFlags; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~977327425; } function computeVariableDeclarationList(node, subtreeFlags) { var transformFlags = subtreeFlags | 33554432; if (subtreeFlags & 8388608) { transformFlags |= 192; } if (node.flags & 3) { transformFlags |= 192 | 4194304; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~948962625; } function computeOther(node, kind, subtreeFlags) { var transformFlags = subtreeFlags; var excludeFlags = 939525441; switch (kind) { case 120: case 197: transformFlags |= 8 | 16; break; case 190: case 208: case 302: transformFlags |= 3; excludeFlags = 536872257; break; 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: 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: case 14: case 15: case 16: case 202: case 189: case 271: case 115: case 210: transformFlags |= 192; break; case 9: if (node.hasExtendedUnicodeEscape) { transformFlags |= 192; } break; case 8: if (node.numericLiteralFlags & 384) { transformFlags |= 192; } break; case 222: if (node.awaitModifier) { transformFlags |= 8; } transformFlags |= 192; break; case 203: transformFlags |= 8 | 192 | 16777216; break; 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: transformFlags |= 2097152; if (subtreeFlags & 16384) { transformFlags |= 65536; } break; case 204: transformFlags |= 192 | 524288; break; case 272: transformFlags |= 8 | 1048576; break; case 97: transformFlags |= 192 | 134217728; excludeFlags = 536872257; break; case 99: transformFlags |= 16384; break; case 180: transformFlags |= 192 | 8388608; if (subtreeFlags & 524288) { transformFlags |= 8 | 1048576; } excludeFlags = 940049729; break; case 181: transformFlags |= 192 | 8388608; excludeFlags = 940049729; break; case 182: transformFlags |= 192; if (node.dotDotDotToken) { transformFlags |= 524288; } break; case 150: transformFlags |= 3 | 4096; break; case 184: excludeFlags = 942740801; if (subtreeFlags & 2097152) { transformFlags |= 192; } if (subtreeFlags & 65536) { transformFlags |= 16384; } if (subtreeFlags & 1048576) { transformFlags |= 8; } break; case 183: case 188: excludeFlags = 940049729; if (subtreeFlags & 524288) { transformFlags |= 192; } break; case 218: case 219: case 220: case 221: if (subtreeFlags & 4194304) { transformFlags |= 192; } break; case 274: if (subtreeFlags & 32768) { transformFlags |= 192; } break; case 225: transformFlags |= 33554432 | 8; break; case 223: case 224: transformFlags |= 33554432; break; } node.transformFlags = transformFlags | 536870912; return transformFlags & ~excludeFlags; } function getTransformFlagsSubtreeExclusions(kind) { if (kind >= 161 && kind <= 179) { return -3; } switch (kind) { 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 302: case 191: case 97: return 536872257; case 185: case 186: return 671089985; default: return 939525441; } } ts.getTransformFlagsSubtreeExclusions = getTransformFlagsSubtreeExclusions; function setParentPointers(parent, child) { child.parent = parent; ts.forEachChild(child, function (grandchild) { return setParentPointers(child, grandchild); }); } })(ts || (ts = {})); 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 = []; var visitedSymbols = []; return { walkType: function (type) { try { visitType(type); return { visitedTypes: ts.getOwnValues(visitedTypes), visitedSymbols: ts.getOwnValues(visitedSymbols) }; } finally { ts.clear(visitedTypes); ts.clear(visitedSymbols); } }, walkSymbol: function (symbol) { try { visitSymbol(symbol); return { visitedTypes: ts.getOwnValues(visitedTypes), visitedSymbols: ts.getOwnValues(visitedSymbols) }; } finally { ts.clear(visitedTypes); ts.clear(visitedSymbols); } }, }; function visitType(type) { if (!type) { return; } if (visitedTypes[type.id]) { return; } visitedTypes[type.id] = type; var shouldBail = visitSymbol(type.symbol); if (shouldBail) return; if (type.flags & 131072) { var objectType = type; var objectFlags = objectType.objectFlags; if (objectFlags & 4) { visitTypeReference(type); } if (objectFlags & 32) { visitMappedType(type); } if (objectFlags & (1 | 2)) { visitInterfaceType(type); } if (objectFlags & (8 | 16)) { visitObjectType(objectType); } } if (type.flags & 65536) { visitTypeParameter(type); } if (type.flags & 786432) { visitUnionOrIntersectionType(type); } if (type.flags & 1048576) { visitIndexType(type); } if (type.flags & 2097152) { visitIndexedAccessType(type); } } function visitTypeReference(type) { visitType(type.target); ts.forEach(type.typeArguments, visitType); } function visitTypeParameter(type) { visitType(getConstraintFromTypeParameter(type)); } function visitUnionOrIntersectionType(type) { ts.forEach(type.types, visitType); } function visitIndexType(type) { visitType(type.type); } function visitIndexedAccessType(type) { visitType(type.objectType); visitType(type.indexType); visitType(type.constraint); } function visitMappedType(type) { visitType(type.typeParameter); visitType(type.constraintType); visitType(type.templateType); visitType(type.modifiersType); } function visitSignature(signature) { var typePredicate = getTypePredicateOfSignature(signature); if (typePredicate) { visitType(typePredicate.type); } ts.forEach(signature.typeParameters, visitType); for (var _i = 0, _a = signature.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; visitSymbol(parameter); } visitType(getRestTypeOfSignature(signature)); visitType(getReturnTypeOfSignature(signature)); } function visitInterfaceType(interfaceT) { visitObjectType(interfaceT); ts.forEach(interfaceT.typeParameters, visitType); ts.forEach(getBaseTypes(interfaceT), visitType); visitType(interfaceT.thisType); } function visitObjectType(type) { var stringIndexType = getIndexTypeOfStructuredType(type, 0); visitType(stringIndexType); var numberIndexType = getIndexTypeOfStructuredType(type, 1); visitType(numberIndexType); var resolved = resolveStructuredTypeMembers(type); for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) { var signature = _a[_i]; visitSignature(signature); } for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) { var signature = _c[_b]; visitSignature(signature); } for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { var p = _e[_d]; visitSymbol(p); } } function visitSymbol(symbol) { if (!symbol) { return false; } var symbolId = ts.getSymbolId(symbol); if (visitedSymbols[symbolId]) { return false; } visitedSymbols[symbolId] = symbol; if (!accept(symbol)) { return true; } var t = getTypeOfSymbol(symbol); visitType(t); if (symbol.flags & 1955) { symbol.exports.forEach(visitSymbol); } ts.forEach(symbol.declarations, function (d) { if (d.type && d.type.kind === 165) { var query = d.type; var entity = getResolvedSymbol(getFirstIdentifier(query.exprName)); visitSymbol(entity); } }); return false; } } } ts.createGetSymbolWalker = createGetSymbolWalker; })(ts || (ts = {})); var ts; (function (ts) { var ambientModuleSymbolRegex = /^".+"$/; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; var nextFlowId = 1; function getNodeId(node) { if (!node.id) { node.id = nextNodeId; nextNodeId++; } return node.id; } ts.getNodeId = getNodeId; function getSymbolId(symbol) { if (!symbol.id) { symbol.id = nextSymbolId; nextSymbolId++; } return symbol.id; } ts.getSymbolId = getSymbolId; function isInstantiatedModule(node, preserveConstEnums) { var moduleState = ts.getModuleInstanceState(node); return moduleState === 1 || (preserveConstEnums && moduleState === 2); } ts.isInstantiatedModule = isInstantiatedModule; function createTypeChecker(host, produceDiagnostics) { var cancellationToken; var requestedExternalEmitHelpers; var externalHelpersModule; var Symbol = ts.objectAllocator.getSymbolConstructor(); var Type = ts.objectAllocator.getTypeConstructor(); var Signature = ts.objectAllocator.getSignatureConstructor(); var typeCount = 0; var symbolCount = 0; var enumCount = 0; var symbolInstantiationDepth = 0; var emptySymbols = ts.createSymbolTable(); var identityMapper = ts.identity; var compilerOptions = host.getCompilerOptions(); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var moduleKind = ts.getEmitModuleKind(compilerOptions); var allowSyntheticDefaultImports = ts.getAllowSyntheticDefaultImports(compilerOptions); var strictNullChecks = ts.getStrictOptionValue(compilerOptions, "strictNullChecks"); var strictFunctionTypes = ts.getStrictOptionValue(compilerOptions, "strictFunctionTypes"); var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny"); var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis"); var keyofStringsOnly = !!compilerOptions.keyofStringsOnly; var emitResolver = createResolver(); var nodeBuilder = createNodeBuilder(); var undefinedSymbol = createSymbol(4, "undefined"); undefinedSymbol.declarations = []; var argumentsSymbol = createSymbol(4, "arguments"); var requireSymbol = createSymbol(4, "require"); var moduleSymbol = createSymbol(4, "module"); var apparentArgumentCount; var checker = { getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); }, getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); }, getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount") + symbolCount; }, getTypeCount: function () { return typeCount; }, isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; }, isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; }, isUnknownSymbol: function (symbol) { return symbol === unknownSymbol; }, getMergedSymbol: getMergedSymbol, getDiagnostics: getDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getTypeOfSymbolAtLocation: function (symbol, location) { location = ts.getParseTreeNode(location); return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType; }, getSymbolsOfParameterPropertyDeclaration: function (parameterIn, parameterName) { var parameter = ts.getParseTreeNode(parameterIn, ts.isParameter); if (parameter === undefined) return ts.Debug.fail("Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node."); return getSymbolsOfParameterPropertyDeclaration(parameter, ts.escapeLeadingUnderscores(parameterName)); }, getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, getPropertiesOfType: getPropertiesOfType, getPropertyOfType: function (type, name) { return getPropertyOfType(type, ts.escapeLeadingUnderscores(name)); }, getIndexInfoOfType: getIndexInfoOfType, getSignaturesOfType: getSignaturesOfType, getIndexTypeOfType: getIndexTypeOfType, getBaseTypes: getBaseTypes, getBaseTypeOfLiteralType: getBaseTypeOfLiteralType, getWidenedType: getWidenedType, getTypeFromTypeNode: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isTypeNode); return node ? getTypeFromTypeNode(node) : errorType; }, getParameterType: getTypeAtPosition, getReturnTypeOfSignature: getReturnTypeOfSignature, getNullableType: getNullableType, getNonNullableType: getNonNullableType, typeToTypeNode: nodeBuilder.typeToTypeNode, indexInfoToIndexSignatureDeclaration: nodeBuilder.indexInfoToIndexSignatureDeclaration, signatureToSignatureDeclaration: nodeBuilder.signatureToSignatureDeclaration, symbolToEntityName: nodeBuilder.symbolToEntityName, symbolToExpression: nodeBuilder.symbolToExpression, symbolToTypeParameterDeclarations: nodeBuilder.symbolToTypeParameterDeclarations, symbolToParameterDeclaration: nodeBuilder.symbolToParameterDeclaration, typeParameterToDeclaration: nodeBuilder.typeParameterToDeclaration, getSymbolsInScope: function (location, meaning) { location = ts.getParseTreeNode(location); return location ? getSymbolsInScope(location, meaning) : []; }, getSymbolAtLocation: function (node) { node = ts.getParseTreeNode(node); return node ? getSymbolAtLocation(node) : undefined; }, getShorthandAssignmentValueSymbol: function (node) { node = ts.getParseTreeNode(node); return node ? getShorthandAssignmentValueSymbol(node) : undefined; }, getExportSpecifierLocalTargetSymbol: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isExportSpecifier); return node ? getExportSpecifierLocalTargetSymbol(node) : undefined; }, getExportSymbolOfSymbol: function (symbol) { return getMergedSymbol(symbol.exportSymbol || symbol); }, getTypeAtLocation: function (node) { node = ts.getParseTreeNode(node); return node ? getTypeOfNode(node) : errorType; }, getPropertySymbolOfDestructuringAssignment: function (locationIn) { var location = ts.getParseTreeNode(locationIn, ts.isIdentifier); return location ? getPropertySymbolOfDestructuringAssignment(location) : undefined; }, signatureToString: function (signature, enclosingDeclaration, flags, kind) { return signatureToString(signature, ts.getParseTreeNode(enclosingDeclaration), flags, kind); }, typeToString: function (type, enclosingDeclaration, flags) { return typeToString(type, ts.getParseTreeNode(enclosingDeclaration), flags); }, symbolToString: function (symbol, enclosingDeclaration, meaning, flags) { return symbolToString(symbol, ts.getParseTreeNode(enclosingDeclaration), meaning, flags); }, typePredicateToString: function (predicate, enclosingDeclaration, flags) { return typePredicateToString(predicate, ts.getParseTreeNode(enclosingDeclaration), flags); }, writeSignature: function (signature, enclosingDeclaration, flags, kind, writer) { return signatureToString(signature, ts.getParseTreeNode(enclosingDeclaration), flags, kind, writer); }, writeType: function (type, enclosingDeclaration, flags, writer) { return typeToString(type, ts.getParseTreeNode(enclosingDeclaration), flags, writer); }, writeSymbol: function (symbol, enclosingDeclaration, meaning, flags, writer) { return symbolToString(symbol, ts.getParseTreeNode(enclosingDeclaration), meaning, flags, writer); }, writeTypePredicate: function (predicate, enclosingDeclaration, flags, writer) { return typePredicateToString(predicate, ts.getParseTreeNode(enclosingDeclaration), flags, writer); }, getSymbolDisplayBuilder: getSymbolDisplayBuilder, getAugmentedPropertiesOfType: getAugmentedPropertiesOfType, getRootSymbols: getRootSymbols, getContextualType: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isExpression); return node ? getContextualType(node) : undefined; }, getContextualTypeForArgumentAtIndex: function (nodeIn, argIndex) { var node = ts.getParseTreeNode(nodeIn, ts.isCallLikeExpression); return node && getContextualTypeForArgumentAtIndex(node, argIndex); }, getContextualTypeForJsxAttribute: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isJsxAttributeLike); return node && getContextualTypeForJsxAttribute(node); }, isContextSensitive: isContextSensitive, getFullyQualifiedName: getFullyQualifiedName, getResolvedSignature: function (nodeIn, candidatesOutArray, theArgumentCount) { var node = ts.getParseTreeNode(nodeIn, ts.isCallLikeExpression); apparentArgumentCount = theArgumentCount; var res = node ? getResolvedSignature(node, candidatesOutArray) : undefined; apparentArgumentCount = undefined; return res; }, getConstantValue: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue); return node ? getConstantValue(node) : undefined; }, isValidPropertyAccess: function (nodeIn, propertyName) { var node = ts.getParseTreeNode(nodeIn, ts.isPropertyAccessOrQualifiedNameOrImportTypeNode); return !!node && isValidPropertyAccess(node, ts.escapeLeadingUnderscores(propertyName)); }, isValidPropertyAccessForCompletions: function (nodeIn, type, property) { var node = ts.getParseTreeNode(nodeIn, ts.isPropertyAccessExpression); return !!node && isValidPropertyAccessForCompletions(node, type, property); }, getSignatureFromDeclaration: function (declarationIn) { var declaration = ts.getParseTreeNode(declarationIn, ts.isFunctionLike); return declaration ? getSignatureFromDeclaration(declaration) : undefined; }, isImplementationOfOverload: function (node) { var parsed = ts.getParseTreeNode(node, ts.isFunctionLike); return parsed ? isImplementationOfOverload(parsed) : undefined; }, getImmediateAliasedSymbol: function (symbol) { 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, true); } return links.immediateTarget; }, getAliasedSymbol: resolveAlias, getEmitResolver: getEmitResolver, getExportsOfModule: getExportsOfModuleAsArray, getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule, getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintFromTypeParameter, getFirstIdentifier), getAmbientModules: getAmbientModules, getAllAttributesTypeFromJsxOpeningLikeElement: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isJsxOpeningLikeElement); return node ? getAllAttributesTypeFromJsxOpeningLikeElement(node) : undefined; }, getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt, isOptionalParameter: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isParameter); return node ? isOptionalParameter(node) : false; }, tryGetMemberInModuleExports: function (name, symbol) { return tryGetMemberInModuleExports(ts.escapeLeadingUnderscores(name), symbol); }, tryGetMemberInModuleExportsAndProperties: function (name, symbol) { return tryGetMemberInModuleExportsAndProperties(ts.escapeLeadingUnderscores(name), symbol); }, tryFindAmbientModuleWithoutAugmentations: function (moduleName) { return tryFindAmbientModule(moduleName, false); }, getApparentType: getApparentType, getUnionType: getUnionType, createAnonymousType: createAnonymousType, createSignature: createSignature, createSymbol: createSymbol, createIndexInfo: createIndexInfo, getAnyType: function () { return anyType; }, getStringType: function () { return stringType; }, getNumberType: function () { return numberType; }, createPromiseType: createPromiseType, createArrayType: createArrayType, getBooleanType: function () { return booleanType; }, getFalseType: function () { return falseType; }, getTrueType: function () { return trueType; }, getVoidType: function () { return voidType; }, getUndefinedType: function () { return undefinedType; }, getNullType: function () { return nullType; }, getESSymbolType: function () { return esSymbolType; }, getNeverType: function () { return neverType; }, isSymbolAccessible: isSymbolAccessible, isArrayLikeType: isArrayLikeType, getAllPossiblePropertiesOfTypes: getAllPossiblePropertiesOfTypes, getSuggestionForNonexistentProperty: function (node, type) { return getSuggestionForNonexistentProperty(node, type); }, 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 ? getDefaultFromTypeParameter(type) : undefined; }, resolveName: function (name, location, meaning, excludeGlobals) { return resolveName(location, ts.escapeLeadingUnderscores(name), meaning, undefined, undefined, false, excludeGlobals); }, getJsxNamespace: function (n) { return ts.unescapeLeadingUnderscores(getJsxNamespace(n)); }, getAccessibleSymbolChain: getAccessibleSymbolChain, getTypePredicateOfSignature: getTypePredicateOfSignature, resolveExternalModuleSymbol: resolveExternalModuleSymbol, tryGetThisTypeAt: function (node) { node = ts.getParseTreeNode(node); return node && tryGetThisTypeAt(node); }, getTypeArgumentConstraint: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isTypeNode); return node && getTypeArgumentConstraint(node); }, getSuggestionDiagnostics: function (file, ct) { var diagnostics; try { cancellationToken = ct; checkSourceFile(file); ts.Debug.assert(!!(getNodeLinks(file).flags & 1)); diagnostics = ts.addRange(diagnostics, suggestionDiagnostics.get(file.fileName)); if (!file.isDeclarationFile && (!unusedIsError(0) || !unusedIsError(1))) { addUnusedDiagnostics(); } return diagnostics || ts.emptyArray; } finally { cancellationToken = undefined; } function addUnusedDiagnostics() { checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(file), function (kind, diag) { if (!unusedIsError(kind)) { (diagnostics || (diagnostics = [])).push(__assign({}, diag, { category: ts.DiagnosticCategory.Suggestion })); } }); } }, runWithCancellationToken: function (token, callback) { try { cancellationToken = token; return callback(checker); } finally { cancellationToken = undefined; } } }; var tupleTypes = []; var unionTypes = ts.createMap(); var intersectionTypes = ts.createMap(); var literalTypes = ts.createMap(); var indexedAccessTypes = ts.createMap(); var evolvingArrayTypes = []; var undefinedProperties = ts.createMap(); 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, "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, "__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); 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); var markerSubType = createType(65536); markerSubType.constraint = markerSuperType; var markerOtherType = createType(65536); var noTypePredicate = createIdentifierTypePredicate("<>", 0, anyType); 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, true); var jsObjectLiteralIndexInfo = createIndexInfo(anyType, false); var globals = ts.createSymbolTable(); var reverseMappedCache = ts.createMap(); var ambientModulesCache; var patternAmbientModules; var globalObjectType; var globalFunctionType; var globalArrayType; var globalReadonlyArrayType; var globalStringType; var globalNumberType; var globalBooleanType; var globalRegExpType; var globalThisType; var anyArrayType; var autoArrayType; var anyReadonlyArrayType; var deferredGlobalNonNullableTypeAlias; var deferredGlobalESSymbolConstructorSymbol; var deferredGlobalESSymbolType; var deferredGlobalTypedPropertyDescriptorType; var deferredGlobalPromiseType; var deferredGlobalPromiseConstructorSymbol; var deferredGlobalPromiseConstructorLikeType; var deferredGlobalIterableType; var deferredGlobalIteratorType; var deferredGlobalIterableIteratorType; var deferredGlobalAsyncIterableType; var deferredGlobalAsyncIteratorType; var deferredGlobalAsyncIterableIteratorType; var deferredGlobalTemplateStringsArrayType; var deferredGlobalImportMetaType; var deferredGlobalExtractSymbol; var deferredNodes; var allPotentiallyUnusedIdentifiers = ts.createMap(); var flowLoopStart = 0; var flowLoopCount = 0; var sharedFlowCount = 0; var flowAnalysisDisabled = false; var emptyStringType = getLiteralType(""); var zeroType = getLiteralType(0); var resolutionTargets = []; var resolutionResults = []; var resolutionPropertyNames = []; var suggestionCount = 0; var maximumSuggestionCount = 10; var mergedSymbols = []; var symbolLinks = []; var nodeLinks = []; var flowLoopCaches = []; var flowLoopNodes = []; var flowLoopKeys = []; var flowLoopTypes = []; var sharedFlowNodes = []; var sharedFlowTypes = []; var potentialThisCollisions = []; var potentialNewTargetCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); 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"; 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, number: 2, boolean: 4, symbol: 8, undefined: 16384, object: 16, function: 32 }); var typeofNEFacts = ts.createMapFromTemplate({ string: 128, number: 256, boolean: 512, symbol: 1024, undefined: 131072, object: 2048, function: 4096 }); var typeofTypesByName = ts.createMapFromTemplate({ string: stringType, number: numberType, boolean: booleanType, symbol: esSymbolType, undefined: undefinedType }); var typeofType = createTypeofType(); var _jsxNamespace; var _jsxFactoryEntity; var subtypeRelation = ts.createMap(); var assignableRelation = ts.createMap(); var definitelyAssignableRelation = ts.createMap(); 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; 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; } 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, writer); var printer = ts.createPrinter({ removeComments: true }); 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, writer); var printer = ts.createPrinter({ removeComments: true }); 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 | 8192, writer); var printer = ts.createPrinter({ removeComments: true }); 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, writer); var printer = ts.createPrinter({ removeComments: true }); 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 | 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)); })); printer.writeList(26896, args, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); }, buildReturnTypeDisplay: function (signature, writer, enclosing, flags) { writer.writePunctuation(":"); writer.writeSpace(" "); var predicate = getTypePredicateOfSignature(signature); if (predicate) { return typePredicateToString(predicate, enclosing, flags, emitTextWriterWrapper(writer)); } var node = nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosing, toNodeBuilderFlags(flags) | 3112960, writer); var printer = ts.createPrinter({ removeComments: true }); printer.writeNode(4, node, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosing)), emitTextWriterWrapper(writer)); } }; function emitTextWriterWrapper(underlying) { return { write: ts.noop, writeTextOfNode: ts.noop, writeLine: ts.noop, increaseIndent: function () { return underlying.increaseIndent(); }, decreaseIndent: function () { return underlying.decreaseIndent(); }, getText: function () { return ""; }, rawWrite: ts.noop, writeLiteral: function (s) { return underlying.writeStringLiteral(s); }, getTextPos: function () { return 0; }, getLine: function () { return 0; }, getColumn: function () { return 0; }, getIndent: function () { return 0; }, isAtStartOfLine: function () { return false; }, clear: function () { return underlying.clear(); }, writeKeyword: function (text) { return underlying.writeKeyword(text); }, writeOperator: function (text) { return underlying.writeOperator(text); }, writePunctuation: function (text) { return underlying.writePunctuation(text); }, writeSpace: function (text) { return underlying.writeSpace(text); }, writeStringLiteral: function (text) { return underlying.writeStringLiteral(text); }, writeParameter: function (text) { return underlying.writeParameter(text); }, writeProperty: function (text) { return underlying.writeProperty(text); }, writeSymbol: function (text, symbol) { return underlying.writeSymbol(text, symbol); }, trackSymbol: function (symbol, enclosing, meaning) { return underlying.trackSymbol && underlying.trackSymbol(symbol, enclosing, meaning); }, reportInaccessibleThisError: function () { return underlying.reportInaccessibleThisError && underlying.reportInaccessibleThisError(); }, reportPrivateInBaseOfClassExpression: function (name) { return underlying.reportPrivateInBaseOfClassExpression && underlying.reportPrivateInBaseOfClassExpression(name); }, reportInaccessibleUniqueSymbolError: function () { return underlying.reportInaccessibleUniqueSymbolError && underlying.reportInaccessibleUniqueSymbolError(); } }; } } function getJsxNamespace(location) { if (location) { var file = ts.getSourceFileOfNode(location); if (file) { if (file.localJsxNamespace) { return file.localJsxNamespace; } var jsxPragma = file.pragmas.get("jsx"); if (jsxPragma) { 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; } } } } if (!_jsxNamespace) { _jsxNamespace = "React"; if (compilerOptions.jsxFactory) { _jsxFactoryEntity = ts.parseIsolatedEntityName(compilerOptions.jsxFactory, languageVersion); if (_jsxFactoryEntity) { _jsxNamespace = getFirstIdentifier(_jsxFactoryEntity).escapedText; } } else if (compilerOptions.reactNamespace) { _jsxNamespace = ts.escapeLeadingUnderscores(compilerOptions.reactNamespace); } } return _jsxNamespace; } function getEmitResolver(sourceFile, cancellationToken) { getDiagnostics(sourceFile, cancellationToken); return emitResolver; } function error(location, message, arg0, arg1, arg2, arg3) { var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3); diagnostics.add(diagnostic); return diagnostic; } function addErrorOrSuggestion(isError, diagnostic) { if (isError) { diagnostics.add(diagnostic); } else { suggestionDiagnostics.add(diagnostic.file.fileName, __assign({}, diagnostic, { category: ts.DiagnosticCategory.Suggestion })); } } function errorOrSuggestion(isError, location, message, arg0, arg1, arg2, arg3) { addErrorOrSuggestion(isError, "message" in message ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) : ts.createDiagnosticForNodeFromMessageChain(location, message)); } function createSymbol(flags, name, checkFlags) { symbolCount++; var symbol = (new Symbol(flags | 33554432, name)); symbol.checkFlags = checkFlags || 0; return symbol; } function isTransientSymbol(symbol) { return (symbol.flags & 33554432) !== 0; } function getExcludedSymbolFlags(flags) { var result = 0; 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) { if (!source.mergeId) { source.mergeId = nextMergeId; nextMergeId++; } mergedSymbols[source.mergeId] = target; } function cloneSymbol(symbol) { var result = createSymbol(symbol.flags, symbol.escapedName); result.declarations = symbol.declarations ? symbol.declarations.slice() : []; result.parent = symbol.parent; if (symbol.valueDeclaration) result.valueDeclaration = symbol.valueDeclaration; if (symbol.constEnumOnlyModule) result.constEnumOnlyModule = true; if (symbol.members) result.members = ts.cloneMap(symbol.members); if (symbol.exports) result.exports = ts.cloneMap(symbol.exports); recordMergedSymbol(result, symbol); return result; } function mergeSymbol(target, source) { if (!(target.flags & getExcludedSymbolFlags(source.flags)) || (source.flags | target.flags) & 67108864) { ts.Debug.assert(source !== target); if (!(target.flags & 33554432)) { target = cloneSymbol(target); } 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))) { target.valueDeclaration = source.valueDeclaration; } ts.addRange(target.declarations, source.declarations); if (source.members) { if (!target.members) target.members = ts.createSymbolTable(); mergeSymbolTable(target.members, source.members); } if (source.exports) { if (!target.exports) target.exports = ts.createSymbolTable(); mergeSymbolTable(target.exports, source.exports); } recordMergedSymbol(target, source); } 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 || source.flags & 384 ? ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations : 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, 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, false) ? ts.getOuterNameOfJsInitializer(node) : ts.getNameOfDeclaration(node)) || node; error(errorNode, message_2, symbolToString(source)); }); } return target; } function combineSymbolTables(first, second) { if (!ts.hasEntries(first)) return second; if (!ts.hasEntries(second)) return first; var combined = ts.createSymbolTable(); mergeSymbolTable(combined, first); mergeSymbolTable(combined, second); return combined; } function mergeSymbolTable(target, source) { source.forEach(function (sourceSymbol, id) { target.set(id, target.has(id) ? mergeSymbol(target.get(id), sourceSymbol) : sourceSymbol); }); } function mergeModuleAugmentation(moduleName) { var moduleAugmentation = moduleName.parent; if (moduleAugmentation.symbol.declarations[0] !== moduleAugmentation) { ts.Debug.assert(moduleAugmentation.symbol.declarations.length > 1); return; } if (ts.isGlobalScopeAugmentation(moduleAugmentation)) { mergeSymbolTable(globals, moduleAugmentation.symbol.exports); } else { 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, true); if (!mainModule) { return; } mainModule = resolveExternalModuleSymbol(mainModule); if (mainModule.flags & 1920) { mainModule = mergeSymbol(mainModule, moduleAugmentation.symbol); } else { error(moduleName, ts.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); } } } function addToSymbolTable(target, source, message) { source.forEach(function (sourceSymbol, id) { var targetSymbol = target.get(id); if (targetSymbol) { ts.forEach(targetSymbol.declarations, addDeclarationDiagnostic(ts.unescapeLeadingUnderscores(id), message)); } else { target.set(id, sourceSymbol); } }); function addDeclarationDiagnostic(id, message) { return function (declaration) { return diagnostics.add(ts.createDiagnosticForNode(declaration, message, id)); }; } } function getSymbolLinks(symbol) { if (symbol.flags & 33554432) return symbol; var id = getSymbolId(symbol); return symbolLinks[id] || (symbolLinks[id] = {}); } function getNodeLinks(node) { var nodeId = getNodeId(node); return nodeLinks[nodeId] || (nodeLinks[nodeId] = { flags: 0 }); } function isGlobalSourceFile(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) === 0, "Should never get an instantiated symbol here."); if (symbol.flags & meaning) { return symbol; } if (symbol.flags & 2097152) { var target = resolveAlias(symbol); if (target === unknownSymbol || target.flags & meaning) { return symbol; } } } } } function getSymbolsOfParameterPropertyDeclaration(parameter, parameterName) { var constructorDeclaration = parameter.parent; var classDeclaration = parameter.parent.parent; var parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, 67216319); var propertySymbol = getSymbol(getMembersOfSymbol(classDeclaration.symbol), parameterName, 67216319); if (parameterSymbol && propertySymbol) { return [parameterSymbol, propertySymbol]; } return ts.Debug.fail("There should exist two symbols, one as property declaration and one as parameter declaration"); } function isBlockScopedNameDeclaredBeforeUse(declaration, usage) { var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { if ((moduleKind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || (!compilerOptions.outFile && !compilerOptions.out) || isInTypeQuery(usage) || declaration.flags & 4194304) { return true; } if (isUsedInFunctionOrInstanceProperty(usage, declaration)) { return true; } var sourceFiles = host.getSourceFiles(); return sourceFiles.indexOf(declarationFile) <= sourceFiles.indexOf(useFile); } if (declaration.pos <= usage.pos) { 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; } return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 232), usage); } else if (declaration.kind === 232) { return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } else if (ts.isClassDeclaration(declaration)) { return !ts.findAncestor(usage, function (n) { return ts.isComputedPropertyName(n) && n.parent.parent === declaration; }); } return true; } if (usage.parent.kind === 252 || (usage.parent.kind === 249 && usage.parent.isExportEquals)) { return true; } if (usage.kind === 249 && usage.isExportEquals) { return true; } var container = ts.getEnclosingBlockScopeContainer(declaration); return isInTypeQuery(usage) || isUsedInFunctionOrInstanceProperty(usage, declaration, container); function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); switch (declaration.parent.parent.kind) { case 214: case 220: case 222: if (isSameScopeDescendentOf(usage, declaration, container)) { return true; } break; } var grandparent = declaration.parent.parent; return ts.isForInOrOfStatement(grandparent) && isSameScopeDescendentOf(usage, grandparent.expression, container); } function isUsedInFunctionOrInstanceProperty(usage, declaration, container) { return !!ts.findAncestor(usage, function (current) { if (current === container) { return "quit"; } if (ts.isFunctionLike(current)) { return true; } var initializerOfProperty = current.parent && current.parent.kind === 152 && current.parent.initializer === current; if (initializerOfProperty) { if (ts.hasModifier(current.parent, 32)) { if (declaration.kind === 154) { return true; } } else { var isDeclarationInstanceProperty = declaration.kind === 152 && !ts.hasModifier(declaration, 32); if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) { return true; } } } return false; }); } } 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; var result; var lastLocation; var lastSelfReferenceLocation; var propertyWithInvalidInitializer; var errorLocation = location; var grandparent; var isInExternalModule = false; loop: while (location) { if (location.locals && !isGlobalSourceFile(location)) { if (result = lookup(location.locals, name, meaning)) { var useResult = true; if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { if (meaning & result.flags & 67901928 && lastLocation.kind !== 286) { useResult = result.flags & 262144 ? lastLocation === location.type || lastLocation.kind === 149 || lastLocation.kind === 148 : false; } if (meaning & 67216319 && result.flags & 1) { useResult = lastLocation.kind === 149 || (lastLocation === location.type && !!ts.findAncestor(result.valueDeclaration, ts.isParameter)); } } else if (location.kind === 171) { useResult = lastLocation === location.trueType; } if (useResult) { break loop; } else { result = undefined; } } } switch (location.kind) { case 274: if (!ts.isExternalOrCommonJsModule(location)) break; isInExternalModule = true; case 239: var moduleExports = getSymbolOfNode(location).exports; 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; } var moduleExport = moduleExports.get(name); if (moduleExport && moduleExport.flags === 2097152 && ts.getDeclarationOfKind(moduleExport, 252)) { break; } } if (name !== "default" && (result = lookup(moduleExports, name, meaning & 2623475))) { if (ts.isSourceFile(location) && location.commonJsModuleIndicator && !result.declarations.some(ts.isJSDocTypeAlias)) { result = undefined; } else { break loop; } } break; case 238: if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8)) { break loop; } break; 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)) { propertyWithInvalidInitializer = location; } } } break; case 235: case 205: case 236: if (result = lookup(getMembersOfSymbol(getSymbolOfNode(location)), name, meaning & 67901928)) { if (!isTypeParameterSymbolDeclaredInContainer(result, location)) { result = undefined; break; } 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 && meaning & 32) { var className = location.name; if (className && name === className.escapedText) { result = location.symbol; break loop; } } break; 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))) { if (nameNotFoundMessage) { error(errorLocation, ts.Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters); } return undefined; } } break; case 147: grandparent = location.parent.parent; 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: case 153: case 155: case 156: case 157: case 234: case 193: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } break; case 192: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } if (meaning & 16) { var functionName = location.name; if (functionName && name === functionName.escapedText) { result = location.symbol; break loop; } } break; case 150: if (location.parent && location.parent.kind === 149) { location = location.parent; } if (location.parent && ts.isClassElement(location.parent)) { location = location.parent; } break; case 298: case 292: location = ts.getJSDocHost(location); break; } if (isSelfReferenceLocation(location)) { lastSelfReferenceLocation = location; } lastLocation = location; location = location.parent; } if (isUse && result && (!lastSelfReferenceLocation || result !== lastSelfReferenceLocation.symbol)) { result.isReferenced |= meaning; } if (!result) { if (lastLocation) { ts.Debug.assert(lastLocation.kind === 274); if (lastLocation.commonJsModuleIndicator && name === "exports") { return lastLocation.symbol; } } if (!excludeGlobals) { result = lookup(globals, name, meaning); } } if (!result) { if (originalLocation && ts.isInJavaScriptFile(originalLocation) && originalLocation.parent) { if (ts.isRequireCall(originalLocation.parent, false)) { return requireSymbol; } if (ts.isIdentifier(originalLocation) && ts.isPropertyAccessExpression(originalLocation.parent) && originalLocation.escapedText === "module" && originalLocation.parent.name.escapedText === "exports") { return moduleSymbol; } } } if (!result) { if (nameNotFoundMessage) { if (!errorLocation || !checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && !checkAndReportErrorForExtendingInterface(errorLocation) && !checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) && !checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) && !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning)) { var suggestion = void 0; if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) { suggestion = getSuggestionForNonexistentSymbol(originalLocation, name, meaning); if (suggestion) { error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestion); } } if (!suggestion) { error(errorLocation, nameNotFoundMessage, diagnosticName(nameArg)); } suggestionCount++; } } return undefined; } if (nameNotFoundMessage) { if (propertyWithInvalidInitializer) { 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; } if (errorLocation && (meaning & 2 || ((meaning & 32 || meaning & 384) && (meaning & 67216319) === 67216319))) { var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result); if (exportOrLocalSymbol.flags & 2 || exportOrLocalSymbol.flags & 32 || exportOrLocalSymbol.flags & 384) { checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); } } if (result && isInExternalModule && (meaning & 67216319) === 67216319 && !(originalLocation.flags & 2097152)) { var decls = result.declarations; 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)); } } } return result; } function isSelfReferenceLocation(node) { switch (node.kind) { case 234: case 235: case 236: case 238: case 237: case 239: return true; default: return false; } } function diagnosticName(nameArg) { return ts.isString(nameArg) ? ts.unescapeLeadingUnderscores(nameArg) : ts.declarationNameToString(nameArg); } function isTypeParameterSymbolDeclaredInContainer(symbol, container) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; 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)); } } } return false; } function checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) { if (!ts.isIdentifier(errorLocation) || errorLocation.escapedText !== name || isTypeReferenceIdentifier(errorLocation) || isInTypeQuery(errorLocation)) { return false; } var container = ts.getThisContainer(errorLocation, false); var location = container; while (location) { if (ts.isClassLike(location.parent)) { var classSymbol = getSymbolOfNode(location.parent); if (!classSymbol) { break; } 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; } 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; } } } location = location.parent; } return false; } function checkAndReportErrorForExtendingInterface(errorLocation) { var expression = getEntityNameForExtendingInterface(errorLocation); 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; } function getEntityNameForExtendingInterface(node) { switch (node.kind) { case 71: case 185: return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined; case 207: if (ts.isEntityNameExpression(node.expression)) { return node.expression; } default: return undefined; } } function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) { var namespaceMeaning = 1920 | (ts.isInJavaScriptFile(errorLocation) ? 67216319 : 0); if (meaning === namespaceMeaning) { var symbol = resolveSymbol(resolveName(errorLocation, name, 67901928 & ~namespaceMeaning, undefined, undefined, false)); var parent = errorLocation.parent; if (symbol) { if (ts.isQualifiedName(parent)) { ts.Debug.assert(parent.left === errorLocation, "Should only be resolving left side of qualified name as a namespace"); var propName = parent.right.escapedText; var propType = getPropertyOfType(getDeclaredTypeOfSymbol(symbol), propName); if (propType) { error(parent, ts.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1, ts.unescapeLeadingUnderscores(name), ts.unescapeLeadingUnderscores(propName)); return true; } } error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here, ts.unescapeLeadingUnderscores(name)); return true; } } return false; } function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) { 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 & ~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; } } return false; } function checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) { 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 & ~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; } } return false; } function checkResolvedBlockScopedVariable(result, errorLocation) { 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) && !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) { error(errorLocation, ts.Diagnostics.Class_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration))); } else if (result.flags & 256) { error(errorLocation, ts.Diagnostics.Enum_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration))); } } } 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: return node; case 245: return node.parent; case 246: return node.parent.parent; case 248: return node.parent.parent.parent; default: return undefined; } } function getDeclarationOfAliasSymbol(symbol) { return ts.find(symbol.declarations, ts.isAliasSymbolDeclaration); } function getTargetOfImportEqualsDeclaration(node, dontResolveAlias) { 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="); 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) || ts.isExportSpecifier(node)); } function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias) { if (!allowSyntheticDefaultImports) { return false; } if (!file || file.isDeclarationFile) { var defaultExportSymbol = resolveExportByName(moduleSymbol, "default", true); if (defaultExportSymbol && ts.some(defaultExportSymbol.declarations, isSyntacticDefault)) { return false; } if (resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), dontResolveAlias)) { return false; } return true; } if (!ts.isSourceFileJavaScript(file)) { return hasExportAssignmentSymbol(moduleSymbol); } return !file.externalModuleIndicator && !resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), dontResolveAlias); } function getTargetOfImportClause(node, dontResolveAlias) { var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier); if (moduleSymbol) { var exportDefaultSymbol = void 0; if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) { exportDefaultSymbol = moduleSymbol; } else { exportDefaultSymbol = resolveExportByName(moduleSymbol, "default", dontResolveAlias); } var file = ts.find(moduleSymbol.declarations, ts.isSourceFile); var hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias); if (!exportDefaultSymbol && !hasSyntheticDefault) { error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); } else if (hasSyntheticDefault) { return resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } return exportDefaultSymbol; } } function getTargetOfNamespaceImport(node, dontResolveAlias) { var moduleSpecifier = node.parent.parent.moduleSpecifier; return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias); } function combineValueAndTypeSymbols(valueSymbol, typeSymbol) { if (valueSymbol === unknownSymbol && typeSymbol === unknownSymbol) { return unknownSymbol; } if (valueSymbol.flags & (67901928 | 1920)) { return valueSymbol; } var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.escapedName); result.declarations = ts.deduplicate(ts.concatenate(valueSymbol.declarations, typeSymbol.declarations), ts.equateValues); result.parent = valueSymbol.parent || typeSymbol.parent; if (valueSymbol.valueDeclaration) result.valueDeclaration = valueSymbol.valueDeclaration; if (typeSymbol.members) result.members = typeSymbol.members; if (valueSymbol.exports) result.exports = valueSymbol.exports; return result; } function getExportOfModule(symbol, name, dontResolveAlias) { if (symbol.flags & 1536) { return resolveSymbol(getExportsOfSymbol(symbol).get(name), dontResolveAlias); } } function getPropertyOfVariable(symbol, name) { if (symbol.flags & 3) { var typeAnnotation = symbol.valueDeclaration.type; if (typeAnnotation) { return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name)); } } } function getExternalModuleMember(node, specifier, dontResolveAlias) { if (dontResolveAlias === void 0) { dontResolveAlias = false; } var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier, dontResolveAlias); if (targetSymbol) { var name = specifier.propertyName || specifier.name; if (name.escapedText) { if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) { return moduleSymbol; } var symbolFromVariable = void 0; if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=")) { symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name.escapedText); } else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText); } symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias); var symbolFromModule = getExportOfModule(targetSymbol, name.escapedText, dontResolveAlias); if (!symbolFromModule && allowSyntheticDefaultImports && name.escapedText === "default") { symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); } var symbol = symbolFromModule && symbolFromVariable && symbolFromModule !== symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : symbolFromModule || symbolFromVariable; if (!symbol) { var moduleName = getFullyQualifiedName(moduleSymbol); var declarationName = ts.declarationNameToString(name); var suggestion = getSuggestionForNonexistentModule(name, targetSymbol); if (suggestion !== undefined) { error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2, moduleName, declarationName, suggestion); } else { error(name, ts.Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName); } } return symbol; } } } function getTargetOfImportSpecifier(node, dontResolveAlias) { return getExternalModuleMember(node.parent.parent.parent, node, dontResolveAlias); } function getTargetOfNamespaceExportDeclaration(node, dontResolveAlias) { return resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias); } function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) { return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, 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 | 67901928 | 1920, true, dontResolveAlias); if (aliasLike) { return aliasLike; } checkExpression(expression); return getNodeLinks(expression).resolvedSymbol; } function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) { if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; } switch (node.kind) { case 243: return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve); case 245: return getTargetOfImportClause(node, dontRecursivelyResolve); case 246: return getTargetOfNamespaceImport(node, dontRecursivelyResolve); case 248: return getTargetOfImportSpecifier(node, dontRecursivelyResolve); case 252: return getTargetOfExportSpecifier(node, 67216319 | 67901928 | 1920, dontRecursivelyResolve); case 249: case 200: return getTargetOfExportAssignment(node, dontRecursivelyResolve); case 242: return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve); default: return ts.Debug.fail(); } } function isNonLocalAlias(symbol, excludes) { if (excludes === void 0) { excludes = 67216319 | 67901928 | 1920; } if (!symbol) return false; 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) !== 0, "Should only get Alias here."); var links = getSymbolLinks(symbol); if (!links.target) { links.target = resolvingSymbol; var node = getDeclarationOfAliasSymbol(symbol); if (!node) return ts.Debug.fail(); var target = getTargetOfAliasDeclaration(node); if (links.target === resolvingSymbol) { links.target = target || unknownSymbol; } else { error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); } } else if (links.target === resolvingSymbol) { links.target = unknownSymbol; } return links.target; } function markExportAsReferenced(node) { var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target) { var markAlias = target === unknownSymbol || ((target.flags & 67216319) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } } } function markAliasSymbolAsReferenced(symbol) { var links = getSymbolLinks(symbol); if (!links.referenced) { links.referenced = true; var node = getDeclarationOfAliasSymbol(symbol); if (!node) return ts.Debug.fail(); if (node.kind === 249) { checkExpressionCached(node.expression); } else if (node.kind === 252) { checkExpressionCached(node.propertyName || node.name); } else if (ts.isInternalModuleImportEqualsDeclaration(node)) { checkExpressionCached(node.moduleReference); } } } function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) { if (entityName.kind === 71 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } if (entityName.kind === 71 || entityName.parent.kind === 146) { return resolveEntityName(entityName, 1920, false, dontResolveAlias); } else { 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); } function resolveEntityName(name, meaning, ignoreErrors, dontResolveAlias, location) { if (ts.nodeIsMissing(name)) { return undefined; } var namespaceMeaning = 1920 | (ts.isInJavaScriptFile(name) ? meaning & 67216319 : 0); var symbol; 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, true); if (!symbol) { return symbolFromJSPrototype; } } 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; } else if (namespace === unknownSymbol) { return namespace; } if (ts.isInJavaScriptFile(name)) { if (namespace.valueDeclaration && ts.isVariableDeclaration(namespace.valueDeclaration) && namespace.valueDeclaration.initializer && isCommonJsRequire(namespace.valueDeclaration.initializer)) { var moduleName = namespace.valueDeclaration.initializer.arguments[0]; var moduleSym = resolveExternalModuleName(moduleName, moduleName); if (moduleSym) { var resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); if (resolvedModuleSymbol) { namespace = resolvedModuleSymbol; } } } } symbol = getSymbol(getExportsOfSymbol(namespace), right.escapedText, meaning); if (!symbol) { if (!ignoreErrors) { error(right, ts.Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right)); } return undefined; } } else { throw ts.Debug.assertNever(name, "Unknown entity name kind."); } ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here."); return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol); } function resolveEntityNameFromJSSpecialAssignment(name, meaning) { if (isJSDocTypeReference(name.parent)) { var secondaryLocation = getJSSpecialAssignmentLocation(name.parent); if (secondaryLocation) { 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) ? "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) { var symbol = getSymbolOfNode(host.expression.left); return symbol && symbol.parent.valueDeclaration; } var sig = ts.getHostSignatureFromJSDocHost(host); if (sig) { var symbol = getSymbolOfNode(sig); return symbol && symbol.valueDeclaration; } } function resolveExternalModuleName(location, moduleReferenceExpression) { return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ts.Diagnostics.Cannot_find_module_0); } function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, isForAugmentation) { if (isForAugmentation === void 0) { isForAugmentation = false; } return ts.isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, moduleReferenceExpression, isForAugmentation) : undefined; } function resolveExternalModule(location, moduleReference, moduleNotFoundError, errorNode, isForAugmentation) { if (isForAugmentation === void 0) { isForAugmentation = false; } if (moduleReference === undefined) { return; } if (ts.startsWith(moduleReference, "@types/")) { var diag = ts.Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1; var withoutAtTypePrefix = ts.removePrefix(moduleReference, "@types/"); error(errorNode, diag, withoutAtTypePrefix, moduleReference); } var ambientModule = tryFindAmbientModule(moduleReference, true); if (ambientModule) { return ambientModule; } var currentSourceFile = ts.getSourceFileOfNode(location); 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(false, errorNode, resolvedModule, moduleReference); } return getMergedSymbol(sourceFile.symbol); } if (moduleNotFoundError) { error(errorNode, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName); } return undefined; } if (patternAmbientModules) { var pattern = ts.findBestPatternMatch(patternAmbientModules, function (_) { return _.pattern; }, moduleReference); if (pattern) { return getMergedSymbol(pattern.symbol); } } 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(noImplicitAny && !!moduleNotFoundError, errorNode, resolvedModule, moduleReference); } return undefined; } if (moduleNotFoundError) { 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", ".tsx"]; _i < _a.length; _i++) { var ext = _a[_i]; var probePath = normalizedTargetPath + ext; if (redirects.indexOf(probePath) >= 0) { error(errorNode, ts.Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, moduleReference, probePath); return undefined; } } } } if (resolutionDiagnostic) { error(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName); } else { var tsExtension = ts.tryExtractTypeScriptExtension(moduleReference); if (tsExtension) { var diag = ts.Diagnostics.An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead; error(errorNode, diag, tsExtension, ts.removeExtension(moduleReference, tsExtension)); } else { error(errorNode, moduleNotFoundError, moduleReference); } } } return undefined; } function errorOnImplicitAnyModule(isError, errorNode, _a, moduleReference) { var packageId = _a.packageId, resolvedFileName = _a.resolvedFileName; 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="), dontResolveAlias), moduleSymbol)) || moduleSymbol; } function getCommonJsExportEquals(exported, moduleSymbol) { if (!exported || moduleSymbol.exports.size === 1) { return exported; } var merged = cloneSymbol(exported); if (merged.exports === undefined) { merged.flags = merged.flags | 512; merged.exports = ts.createSymbolTable(); } moduleSymbol.exports.forEach(function (s, name) { if (name === "export=") return; merged.exports.set(name, merged.exports.has(name) ? mergeSymbol(merged.exports.get(name), s) : s); }); return merged; } function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias) { var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias); if (!dontResolveAlias && symbol) { 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; } if (compilerOptions.esModuleInterop) { var referenceParent = referencingLocation.parent; if ((ts.isImportDeclaration(referenceParent) && ts.getNamespaceDeclarationNode(referenceParent)) || ts.isImportCall(referenceParent)) { var type = getTypeOfSymbol(symbol); var sigs = getSignaturesOfStructuredType(type, 0); if (!sigs || !sigs.length) { sigs = getSignaturesOfStructuredType(type, 1); } if (sigs && sigs.length) { var moduleType = getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol); var result = createSymbol(symbol.flags, symbol.escapedName); result.declarations = symbol.declarations ? symbol.declarations.slice() : []; result.parent = symbol.parent; result.target = symbol; result.originatingImport = referenceParent; if (symbol.valueDeclaration) result.valueDeclaration = symbol.valueDeclaration; if (symbol.constEnumOnlyModule) result.constEnumOnlyModule = true; if (symbol.members) result.members = ts.cloneMap(symbol.members); if (symbol.exports) result.exports = ts.cloneMap(symbol.exports); var resolvedModuleType = resolveStructuredTypeMembers(moduleType); result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo); return result; } } } } return symbol; } function hasExportAssignmentSymbol(moduleSymbol) { return moduleSymbol.exports.get("export=") !== undefined; } function getExportsOfModuleAsArray(moduleSymbol) { return symbolsToArray(getExportsOfModule(moduleSymbol)); } function getExportsAndPropertiesOfModule(moduleSymbol) { var exports = getExportsOfModuleAsArray(moduleSymbol); var exportEquals = resolveExternalModuleSymbol(moduleSymbol); if (exportEquals !== moduleSymbol) { ts.addRange(exports, getPropertiesOfType(getTypeOfSymbol(exportEquals))); } return exports; } function tryGetMemberInModuleExports(memberName, moduleSymbol) { var symbolTable = getExportsOfModule(moduleSymbol); if (symbolTable) { return symbolTable.get(memberName); } } function tryGetMemberInModuleExportsAndProperties(memberName, moduleSymbol) { var symbol = tryGetMemberInModuleExports(memberName, moduleSymbol); if (symbol) { return symbol; } var exportEquals = resolveExternalModuleSymbol(moduleSymbol); if (exportEquals === moduleSymbol) { return undefined; } var type = getTypeOfSymbol(exportEquals); return type.flags & 32764 ? undefined : getPropertyOfType(type, memberName); } function getExportsOfSymbol(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)); } function extendExportSymbols(target, source, lookupTable, exportNode) { if (!source) return; source.forEach(function (sourceSymbol, id) { if (id === "default") return; var targetSymbol = target.get(id); if (!targetSymbol) { target.set(id, sourceSymbol); if (lookupTable && exportNode) { lookupTable.set(id, { specifierText: ts.getTextOfNode(exportNode.moduleSpecifier) }); } } else if (lookupTable && exportNode && targetSymbol && resolveSymbol(targetSymbol) !== resolveSymbol(sourceSymbol)) { var collisionTracker = lookupTable.get(id); if (!collisionTracker.exportsWithDuplicate) { collisionTracker.exportsWithDuplicate = [exportNode]; } else { collisionTracker.exportsWithDuplicate.push(exportNode); } } }); } function getExportsOfModuleWorker(moduleSymbol) { var visitedSymbols = []; moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); return visit(moduleSymbol) || emptySymbols; function visit(symbol) { if (!(symbol && symbol.flags & 1955 && ts.pushIfUnique(visitedSymbols, symbol))) { return; } var symbols = ts.cloneMap(symbol.exports); var exportStars = symbol.exports.get("__export"); if (exportStars) { var nestedSymbols = ts.createSymbolTable(); var lookupTable_1 = ts.createMap(); for (var _i = 0, _a = exportStars.declarations; _i < _a.length; _i++) { var node = _a[_i]; var resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier); var exportedSymbols = visit(resolvedModule); extendExportSymbols(nestedSymbols, exportedSymbols, lookupTable_1, node); } lookupTable_1.forEach(function (_a, id) { var exportsWithDuplicate = _a.exportsWithDuplicate; if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || symbols.has(id)) { return; } for (var _i = 0, exportsWithDuplicate_1 = exportsWithDuplicate; _i < exportsWithDuplicate_1.length; _i++) { var node = exportsWithDuplicate_1[_i]; diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity, lookupTable_1.get(id).specifierText, ts.unescapeLeadingUnderscores(id))); } }); extendExportSymbols(symbols, nestedSymbols); } return symbols; } } function getMergedSymbol(symbol) { var merged; return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; } function getSymbolOfNode(node) { return getMergedSymbol(node.symbol && getLateBoundSymbol(node.symbol)); } function getParentOfSymbol(symbol) { return getMergedSymbol(symbol.parent && getLateBoundSymbol(symbol.parent)); } function getContainerOfSymbol(symbol) { var container = getParentOfSymbol(symbol); if (container) { return container; } var candidate = ts.forEach(symbol.declarations, function (d) { return !ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent) ? getSymbolOfNode(d.parent) : undefined; }); if (!candidate) { return undefined; } var alias = getAliasForSymbolInContainer(candidate, symbol); return alias ? candidate : undefined; } function getAliasForSymbolInContainer(container, symbol) { if (container === getParentOfSymbol(symbol)) { return symbol; } var exports = getExportsOfSymbol(container); var quick = exports.get(symbol.escapedName); if (quick && symbolRefersToTarget(quick)) { return quick; } return ts.forEachEntry(exports, function (exported) { if (symbolRefersToTarget(exported)) { return exported; } }); function symbolRefersToTarget(s) { if (s === symbol || resolveSymbol(s) === symbol || resolveSymbol(s) === resolveSymbol(symbol)) { return s; } } } function getExportSymbolOfValueSymbolIfExported(symbol) { return symbol && (symbol.flags & 1048576) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; } function symbolIsValue(symbol) { 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 && ts.nodeIsPresent(member.body)) { return member; } } } function createType(flags) { var result = new Type(checker, flags); typeCount++; result.id = typeCount; return result; } function createIntrinsicType(kind, intrinsicName) { var type = createType(kind); type.intrinsicName = intrinsicName; return type; } function createBooleanType(trueFalseTypes) { var type = getUnionType(trueFalseTypes); type.flags |= 16; type.intrinsicName = "boolean"; return type; } function createObjectType(objectFlags, symbol) { var type = createType(131072); type.objectFlags = objectFlags; type.symbol = symbol; return type; } function createTypeofType() { return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType)); } function isReservedMemberName(name) { return name.charCodeAt(0) === 95 && name.charCodeAt(1) === 95 && name.charCodeAt(2) !== 95 && name.charCodeAt(2) !== 64; } function getNamedMembers(members) { var result; members.forEach(function (symbol, id) { if (!isReservedMemberName(id)) { if (!result) result = []; if (symbolIsValue(symbol)) { result.push(symbol); } } }); return result || ts.emptyArray; } function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { type.members = members; type.properties = getNamedMembers(members); type.callSignatures = callSignatures; type.constructSignatures = constructSignatures; if (stringIndexInfo) type.stringIndexInfo = stringIndexInfo; if (numberIndexInfo) type.numberIndexInfo = numberIndexInfo; return type; } function createAnonymousType(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) { if (location.locals && !isGlobalSourceFile(location)) { if (result = callback(location.locals)) { return result; } } switch (location.kind) { case 274: if (!ts.isExternalOrCommonJsModule(location)) { break; } case 239: if (result = callback(getSymbolOfNode(location).exports)) { return result; } break; } } return callback(globals); } function getQualifiedLeftMeaning(rightMeaning) { return rightMeaning === 67216319 ? 67216319 : 1920; } function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing, visitedSymbolTablesMap) { if (visitedSymbolTablesMap === void 0) { visitedSymbolTablesMap = ts.createMap(); } if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) { return undefined; } var id = "" + getSymbolId(symbol); var visitedSymbolTables = visitedSymbolTablesMap.get(id); if (!visitedSymbolTables) { visitedSymbolTablesMap.set(id, visitedSymbolTables = []); } return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); function getAccessibleSymbolChainFromSymbolTable(symbols, ignoreQualification) { if (!ts.pushIfUnique(visitedSymbolTables, symbols)) { return undefined; } var result = trySymbolTable(symbols, ignoreQualification); visitedSymbolTables.pop(); return result; } function canQualifySymbol(symbolFromSymbolTable, meaning) { return !needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning) || !!getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing, visitedSymbolTablesMap); } function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol, ignoreQualification) { return symbol === (resolvedAliasSymbol || symbolFromSymbolTable) && !ts.some(symbolFromSymbolTable.declarations, hasNonGlobalAugmentationExternalModuleSymbol) && (ignoreQualification || canQualifySymbol(symbolFromSymbolTable, meaning)); } function trySymbolTable(symbols, ignoreQualification) { if (isAccessible(symbols.get(symbol.escapedName), undefined, ignoreQualification)) { return [symbol]; } return ts.forEachEntry(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 2097152 && symbolFromSymbolTable.escapedName !== "export=" && symbolFromSymbolTable.escapedName !== "default" && !(ts.isUMDExportSymbol(symbolFromSymbolTable) && enclosingDeclaration && ts.isExternalModule(ts.getSourceFileOfNode(enclosingDeclaration))) && (!useOnlyExternalAliasing || ts.some(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration))) { var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification)) { return [symbolFromSymbolTable]; } var candidateTable = getExportsOfSymbol(resolvedImportedSymbol); 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), undefined, ignoreQualification)) { return [symbol]; } } }); } } function needsQualification(symbol, enclosingDeclaration, meaning) { var qualify = false; forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { var symbolFromSymbolTable = getMergedSymbol(symbolTable.get(symbol.escapedName)); if (!symbolFromSymbolTable) { return false; } if (symbolFromSymbolTable === symbol) { return true; } symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 252)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; } return false; }); return qualify; } function isPropertyOrMethodDeclarationSymbol(symbol) { if (symbol.declarations && symbol.declarations.length) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { case 152: case 154: case 156: case 157: continue; default: return false; } } return true; } return false; } function isTypeSymbolAccessible(typeSymbol, enclosingDeclaration) { var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67901928, false); return access.accessibility === 0; } function isValueSymbolAccessible(typeSymbol, enclosingDeclaration) { var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 67216319, false); return access.accessibility === 0; } function isSymbolAccessible(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible) { if (symbol && enclosingDeclaration) { var initialSymbol = symbol; var meaningToLook = meaning; while (symbol) { var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); if (accessibleSymbolChain) { var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible); if (!hasAccessibleDeclarations) { return { accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1920) : undefined, }; } return hasAccessibleDeclarations; } else { if (ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { return { accessibility: 0 }; } } meaningToLook = getQualifiedLeftMeaning(meaning); symbol = getContainerOfSymbol(symbol); } var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer); if (symbolExternalModule) { var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); if (symbolExternalModule !== enclosingExternalModule) { return { accessibility: 2, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), errorModuleName: symbolToString(symbolExternalModule) }; } } return { accessibility: 1, errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), }; } 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 && ts.isExternalOrCommonJsModule(declaration)); } function hasNonGlobalAugmentationExternalModuleSymbol(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, aliasesToMakeVisible: aliasesToMakeVisible }; function getIsDeclarationVisible(declaration) { if (!isDeclarationVisible(declaration)) { var anyImportSyntax = getAnyImportSyntax(declaration); if (anyImportSyntax && !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) && isDeclarationVisible(declaration.parent.parent.parent)) { return addVisibleAlias(declaration, declaration.parent.parent); } else if (ts.isLateVisibilityPaintedStatement(declaration) && !ts.hasModifier(declaration, 1) && isDeclarationVisible(declaration.parent)) { return addVisibleAlias(declaration, declaration); } return false; } return true; } function addVisibleAlias(declaration, aliasingStatement) { if (shouldComputeAliasToMakeVisible) { getNodeLinks(declaration).isVisible = true; aliasesToMakeVisible = ts.appendIfUnique(aliasesToMakeVisible, aliasingStatement); } return true; } } function isEntityNameVisible(entityName, enclosingDeclaration) { var meaning; if (entityName.parent.kind === 165 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) || entityName.parent.kind === 147) { meaning = 67216319 | 1048576; } else if (entityName.kind === 146 || entityName.kind === 185 || entityName.parent.kind === 243) { meaning = 1920; } else { meaning = 67901928; } var firstIdentifier = getFirstIdentifier(entityName); 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; } var nodeFlags = 3112960; if (flags & 2) { nodeFlags |= 128; } if (flags & 1) { nodeFlags |= 512; } if (flags & 8) { nodeFlags |= 16384; } 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); var printer = ts.createPrinter({ removeComments: true }); var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration); printer.writeNode(4, entity, sourceFile, writer); return writer; } } function signatureToString(signature, enclosingDeclaration, flags, kind, writer) { if (flags === void 0) { flags = 0; } return writer ? signatureToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(signatureToStringWorker); function signatureToStringWorker(writer) { var sigOutput; if (flags & 262144) { sigOutput = kind === 1 ? 164 : 163; } else { sigOutput = kind === 1 ? 159 : 158; } 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, sig, sourceFile, writer); return writer; } } function typeToString(type, enclosingDeclaration, flags, writer) { if (flags === void 0) { flags = 1048576 | 16384; } if (writer === void 0) { writer = ts.createTextWriter(""); } 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, typeNode, sourceFile, writer); var result = writer.getText(); 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; } return flags & 9469291; } function createNodeBuilder() { return { typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) { 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) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) { 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) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); 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) === 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) === 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) === 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) === 0); var context = createNodeBuilderContext(enclosingDeclaration, flags, tracker); var resultingNode = typeParameterToDeclaration(parameter, context); var result = context.encounteredError ? undefined : resultingNode; return result; }, }; function createNodeBuilderContext(enclosingDeclaration, flags, tracker) { return { enclosingDeclaration: enclosingDeclaration, flags: flags || 0, tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop }, encounteredError: false, visitedSymbols: undefined, inferTypeParameters: undefined }; } function typeToTypeNodeHelper(type, context) { if (cancellationToken && cancellationToken.throwIfCancellationRequested) { cancellationToken.throwIfCancellationRequested(); } var inTypeAlias = context.flags & 8388608; context.flags &= ~8388608; if (!type) { context.encounteredError = true; return undefined; } if (type.flags & 1) { return ts.createKeywordTypeNode(119); } if (type.flags & 2) { return ts.createKeywordTypeNode(142); } if (type.flags & 4) { return ts.createKeywordTypeNode(137); } if (type.flags & 8) { return ts.createKeywordTypeNode(134); } if (type.flags & 16) { return ts.createKeywordTypeNode(122); } if (type.flags & 512 && !(type.flags & 262144)) { var parentSymbol = getParentOfSymbol(type.symbol); var parentName = symbolToName(parentSymbol, context, 67901928, false); var enumLiteralName = getDeclaredTypeOfSymbol(parentSymbol) === type ? parentName : ts.createQualifiedName(parentName, ts.symbolName(type.symbol)); return ts.createTypeReferenceNode(enumLiteralName, undefined); } if (type.flags & 544) { var name = symbolToName(type.symbol, context, 67901928, false); return ts.createTypeReferenceNode(name, undefined); } if (type.flags & (64)) { return ts.createLiteralTypeNode(ts.setEmitFlags(ts.createLiteral(type.value), 16777216)); } if (type.flags & (128)) { return ts.createLiteralTypeNode((ts.createLiteral(type.value))); } if (type.flags & 256) { return type.intrinsicName === "true" ? ts.createTrue() : ts.createFalse(); } if (type.flags & 2048) { if (!(context.flags & 1048576)) { if (isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { return symbolToTypeNode(type.symbol, context, 67216319); } if (context.tracker.reportInaccessibleUniqueSymbolError) { context.tracker.reportInaccessibleUniqueSymbolError(); } } return ts.createTypeOperatorNode(141, ts.createKeywordTypeNode(138)); } if (type.flags & 4096) { return ts.createKeywordTypeNode(105); } if (type.flags & 8192) { return ts.createKeywordTypeNode(140); } if (type.flags & 16384) { return ts.createKeywordTypeNode(95); } if (type.flags & 32768) { return ts.createKeywordTypeNode(131); } if (type.flags & 1024) { return ts.createKeywordTypeNode(138); } if (type.flags & 16777216) { return ts.createKeywordTypeNode(135); } if (type.flags & 65536 && type.isThisType) { if (context.flags & 4194304) { if (!context.encounteredError && !(context.flags & 32768)) { context.encounteredError = true; } if (context.tracker.reportInaccessibleThisError) { context.tracker.reportInaccessibleThisError(); } } return ts.createThis(); } var objectFlags = ts.getObjectFlags(type); if (objectFlags & 4) { ts.Debug.assert(!!(type.flags & 131072)); return typeReferenceToTypeNode(type); } 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 && 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 | 8), undefined); } return type.symbol ? symbolToTypeNode(type.symbol, context, 67901928) : ts.createTypeReferenceNode(ts.createIdentifier("?"), undefined); } 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)) return ts.createTypeReferenceNode(ts.createIdentifier(""), typeArgumentNodes); return symbolToTypeNode(type.aliasSymbol, context, 67901928, typeArgumentNodes); } 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 ? 169 : 170, typeNodes); return unionOrIntersectionTypeNode; } else { if (!context.encounteredError && !(context.flags & 262144)) { context.encounteredError = true; } return undefined; } } if (objectFlags & (16 | 32)) { ts.Debug.assert(!!(type.flags & 131072)); return createAnonymousTypeNode(type); } if (type.flags & 1048576) { var indexedType = type.type; var indexTypeNode = typeToTypeNodeHelper(indexedType, context); return ts.createTypeOperatorNode(indexTypeNode); } 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) { var checkTypeNode = typeToTypeNodeHelper(type.checkType, context); var saveInferTypeParameters = context.inferTypeParameters; context.inferTypeParameters = type.root.inferTypeParameters; var extendsTypeNode = typeToTypeNodeHelper(type.extendsType, context); context.inferTypeParameters = saveInferTypeParameters; var trueTypeNode = typeToTypeNodeHelper(getTrueTypeFromConditionalType(type), context); var falseTypeNode = typeToTypeNodeHelper(getFalseTypeFromConditionalType(type), context); return ts.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode); } 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)); 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)) { appropriateConstraintTypeNode = ts.createTypeOperatorNode(typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context)); } else { appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context); } 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); } function createAnonymousTypeNode(type) { var symbol = type.symbol; var id; if (symbol) { var isConstructorObject = ts.getObjectFlags(type) & 16 && type.symbol && type.symbol.flags & 32; id = (isConstructorObject ? "+" : "") + getSymbolId(symbol); if (isJavaScriptConstructor(symbol.valueDeclaration)) { var isInstanceType = type === getInferredClassType(symbol) ? 67901928 : 67216319; return symbolToTypeNode(symbol, context, isInstanceType); } else if (symbol.flags & 32 && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration.kind === 205 && context.flags & 2048) || symbol.flags & (384 | 512) || shouldWriteTypeOfFunctionSymbol()) { return symbolToTypeNode(symbol, context, 67216319); } else if (context.visitedSymbols && context.visitedSymbols.has(id)) { var typeAlias = getTypeAliasForTypeLiteral(type); if (typeAlias) { return symbolToTypeNode(typeAlias, context, 67901928); } else { return ts.createKeywordTypeNode(119); } } else { if (!context.visitedSymbols) { context.visitedSymbols = ts.createMap(); } context.visitedSymbols.set(id, true); var result = createTypeNodeFromObjectType(type); context.visitedSymbols.delete(id); return result; } } else { return createTypeNodeFromObjectType(type); } function shouldWriteTypeOfFunctionSymbol() { 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 || declaration.parent.kind === 240; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { return (!!(context.flags & 4096) || (context.visitedSymbols && context.visitedSymbols.has(id))) && (!(context.flags & 8) || isValueSymbolAccessible(symbol, context.enclosingDeclaration)); } } } function createTypeNodeFromObjectType(type) { if (isGenericMappedType(type)) { return createMappedTypeNodeFromType(type); } var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { 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, context); return signatureNode; } if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { var signature = resolved.constructSignatures[0]; var signatureNode = signatureToSignatureDeclarationHelper(signature, 164, context); return signatureNode; } } var savedFlags = context.flags; context.flags |= 4194304; var members = createTypeNodesFromResolvedType(resolved); context.flags = savedFlags; var typeLiteralNode = ts.createTypeLiteralNode(members); 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) { 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) { 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)) { return ts.createTupleTypeNode([]); } context.encounteredError = true; return undefined; } else if (context.flags & 2048 && type.symbol.valueDeclaration && ts.isClassLike(type.symbol.valueDeclaration) && !isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { return createAnonymousTypeNode(type); } else { var outerTypeParameters = type.target.outerTypeParameters; var i = 0; var resultType = void 0; if (outerTypeParameters) { var length_1 = outerTypeParameters.length; while (i < length_1) { var start = i; var parent = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent); if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { var typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context); var flags_2 = context.flags; context.flags |= 16; var ref = symbolToTypeNode(parent, context, 67901928, typeArgumentSlice); context.flags = flags_2; resultType = !resultType ? ref : appendReferenceToType(resultType, ref); } } } var typeArgumentNodes = void 0; if (typeArguments.length > 0) { var typeParameterCount = (type.target.typeParameters || ts.emptyArray).length; typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); } var flags = context.flags; 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)) { var innerParams = root.typeArguments; if (root.qualifier) { (ts.isIdentifier(root.qualifier) ? root.qualifier : root.qualifier.right).typeArguments = innerParams; } root.typeArguments = ref.typeArguments; var ids = getAccessStack(ref); for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { var id = ids_1[_i]; root.qualifier = root.qualifier ? ts.createQualifiedName(root.qualifier, id) : id; } return root; } else { var innerParams = root.typeArguments; (ts.isIdentifier(root.typeName) ? root.typeName : root.typeName.right).typeArguments = innerParams; root.typeArguments = ref.typeArguments; var ids = getAccessStack(ref); for (var _a = 0, ids_2 = ids; _a < ids_2.length; _a++) { var id = ids_2[_a]; root.typeName = ts.createQualifiedName(root.typeName, id); } return root; } } function getAccessStack(ref) { var state = ref.typeName; var ids = []; while (!ts.isIdentifier(state)) { ids.unshift(state.right); state = state.left; } ids.unshift(state); return ids; } function createTypeNodesFromResolvedType(resolvedType) { var typeElements = []; for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) { var signature = _a[_i]; 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, context)); } if (resolvedType.stringIndexInfo) { var indexInfo = resolvedType.objectFlags & 2048 ? createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration) : resolvedType.stringIndexInfo; typeElements.push(indexInfoToIndexSignatureDeclarationHelper(indexInfo, 0, context)); } if (resolvedType.numberIndexInfo) { typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1, context)); } var properties = resolvedType.properties; if (!properties) { return typeElements; } for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) { var propertySymbol = properties_1[_d]; if (context.flags & 2048) { if (propertySymbol.flags & 4194304) { continue; } if (ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & (8 | 16) && context.tracker.reportPrivateInBaseOfClassExpression) { context.tracker.reportPrivateInBaseOfClassExpression(ts.unescapeLeadingUnderscores(propertySymbol.escapedName)); } } var propertyType = ts.getCheckFlags(propertySymbol) & 2048 && context.flags & 33554432 ? anyType : getTypeOfSymbol(propertySymbol); var saveEnclosingDeclaration = context.enclosingDeclaration; context.enclosingDeclaration = undefined; if (ts.getCheckFlags(propertySymbol) & 1024) { var decl = ts.first(propertySymbol.declarations); if (context.tracker.trackSymbol && hasLateBindableName(decl)) { var firstIdentifier = getFirstIdentifier(decl.name.expression); var name = resolveName(firstIdentifier, firstIdentifier.escapedText, 67216319 | 1048576, undefined, undefined, true); if (name) { context.tracker.trackSymbol(name, saveEnclosingDeclaration, 67216319); } } } var propertyName = symbolToName(propertySymbol, context, 67216319, true); context.enclosingDeclaration = saveEnclosingDeclaration; 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, context); methodDeclaration.name = propertyName; methodDeclaration.questionToken = optionalToken; if (propertySymbol.valueDeclaration) { ts.setCommentRange(methodDeclaration, propertySymbol.valueDeclaration); } typeElements.push(methodDeclaration); } } else { var savedFlags = context.flags; 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)] : undefined; var propertySignature = ts.createPropertySignature(modifiers, propertyName, optionalToken, propertyTypeNode, undefined); if (propertySymbol.valueDeclaration) { ts.setCommentRange(propertySignature, propertySymbol.valueDeclaration); } typeElements.push(propertySignature); } } return typeElements.length ? typeElements : undefined; } } function mapToTypeNodes(types, context) { if (ts.some(types)) { var result = []; for (var _i = 0, types_1 = types; _i < types_1.length; _i++) { var type = types_1[_i]; var typeNode = typeToTypeNodeHelper(type, context); if (typeNode) { result.push(typeNode); } } return result; } } function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context) { var name = ts.getNameFromIndexInfo(indexInfo) || "x"; 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)) { context.encounteredError = true; } 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 && 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); }); if (signature.thisParameter) { var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context); parameters.unshift(thisParameter); } var returnTypeNode; var typePredicate = getTypePredicateOfSignature(signature); if (typePredicate) { 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); } else { var returnType = getReturnTypeOfSignature(signature); returnTypeNode = returnType && typeToTypeNodeHelper(returnType, context); } if (context.flags & 256) { if (returnTypeNode && returnTypeNode.kind === 119) { returnTypeNode = undefined; } } else if (!returnTypeNode) { returnTypeNode = ts.createKeywordTypeNode(119); } return ts.createSignatureDeclaration(kind, typeParameters, parameters, returnTypeNode, typeArguments); } function typeParameterShadowsNameInScope(type, context) { 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; 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 | 8) : symbolToName(type.symbol, context, 67901928, true); var defaultParameter = getDefaultFromTypeParameter(type); var defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context); context.flags = savedContextFlags; return ts.createTypeParameterDeclaration(name, constraintNode, defaultParameterNode); } function typeParameterToDeclaration(type, context, constraint) { if (constraint === void 0) { constraint = getConstraintFromTypeParameter(type); } var constraintNode = constraint && typeToTypeNodeHelper(constraint, context); return typeParameterToDeclarationWithConstraint(type, context, constraintNode); } function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) { var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 149); if (!parameterDeclaration && !isTransientSymbol(parameterSymbol)) { 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) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers ? parameterDeclaration.modifiers.map(ts.getSynthesizedClone) : undefined; var isRest = parameterDeclaration ? ts.isRestParameter(parameterDeclaration) : parameterSymbol.isRestParameter; var dotDotDotToken = isRest ? ts.createToken(24) : undefined; var name = parameterDeclaration ? parameterDeclaration.name ? 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) : 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, undefined, elideInitializerAndSetEmitFlags); var clone = ts.nodeIsSynthesized(visited) ? visited : ts.getSynthesizedClone(visited); if (clone.kind === 182) { clone.initializer = undefined; } return ts.setEmitFlags(clone, 1 | 16777216); } } } function lookupSymbolChain(symbol, context, meaning, yieldModuleSymbol) { context.tracker.trackSymbol(symbol, context.enclosingDeclaration, meaning); var chain; 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; function getSymbolChain(symbol, meaning, endOfChain) { 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))) { var parent = getContainerOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol); if (parent) { var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), false); if (parentChain) { parentSymbol = parent; accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent, symbol) || symbol]); } } } if (accessibleSymbolChain) { return accessibleSymbolChain; } if (endOfChain || (yieldModuleSymbol || !(!parentSymbol && ts.forEach(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol))) && !(symbol.flags & (2048 | 4096))) { return [symbol]; } } } function typeParametersToTypeParameterDeclarations(symbol, context) { var typeParameterNodes; var targetSymbol = getTargetSymbol(symbol); if (targetSymbol.flags & (32 | 64 | 524288)) { typeParameterNodes = ts.createNodeArray(ts.map(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), function (tp) { return typeParameterToDeclaration(tp, context); })); } return typeParameterNodes; } function lookupTypeParameterNodes(chain, index, context) { ts.Debug.assert(chain && 0 <= index && index < chain.length); var symbol = chain[index]; var typeParameterNodes; if (context.flags & 512 && index < (chain.length - 1)) { var parentSymbol = symbol; var nextSymbol = chain[index + 1]; if (ts.getCheckFlags(nextSymbol) & 1) { var params = getTypeParametersOfClassOrInterface(parentSymbol.flags & 2097152 ? resolveAlias(parentSymbol) : parentSymbol); typeParameterNodes = mapToTypeNodes(ts.map(params, nextSymbol.mapper), context); } else { typeParameterNodes = typeParametersToTypeParameterDeclarations(symbol, context); } } return typeParameterNodes; } function getTopmostIndexedAccessType(top) { if (ts.isIndexedAccessTypeNode(top.objectType)) { return getTopmostIndexedAccessType(top.objectType); } return top; } function symbolToTypeNode(symbol, context, meaning, overrideTypeArguments) { var chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & 16384)); context.flags |= 16777216; var rootName = getNameOfSymbolAsWritten(chain[0], context); context.flags ^= 16777216; var isTypeOf = meaning === 67216319; if (ambientModuleSymbolRegex.test(rootName)) { 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))); if (!nonRootParts || ts.isEntityName(nonRootParts)) { if (nonRootParts) { var lastId = ts.isIdentifier(nonRootParts) ? nonRootParts : nonRootParts.right; lastId.typeArguments = undefined; } return ts.createImportTypeNode(lit, nonRootParts, typeParameterNodes, isTypeOf); } else { var splitNode = getTopmostIndexedAccessType(nonRootParts); var qualifier = splitNode.objectType.typeName; return ts.createIndexedAccessTypeNode(ts.createImportTypeNode(lit, qualifier, typeParameterNodes, isTypeOf), splitNode.indexType); } } var entityName = createAccessFromSymbolChain(chain, chain.length - 1, 0); if (ts.isIndexedAccessTypeNode(entityName)) { return entityName; } if (isTypeOf) { return ts.createTypeQueryNode(entityName); } else { var lastId = ts.isIdentifier(entityName) ? entityName : entityName.right; var lastTypeArgs = lastId.typeArguments; lastId.typeArguments = undefined; return ts.createTypeReferenceNode(entityName, lastTypeArgs); } function createAccessFromSymbolChain(chain, index, stopper) { var typeParameterNodes = index === (chain.length - 1) ? overrideTypeArguments : lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { context.flags ^= 16777216; } var parent = chain[index - 1]; 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))); } else { return ts.createIndexedAccessTypeNode(ts.createTypeReferenceNode(LHS, typeParameterNodes), ts.createLiteralTypeNode(ts.createLiteral(symbolName))); } } var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); identifier.symbol = symbol; if (index > stopper) { var LHS = createAccessFromSymbolChain(chain, index - 1, stopper); if (!ts.isEntityName(LHS)) { return ts.Debug.fail("Impossible construct - an export of an indexed access cannot be reachable"); } return ts.createQualifiedName(LHS, identifier); } return identifier; } } function symbolToName(symbol, context, meaning, expectsIdentifier) { var chain = lookupSymbolChain(symbol, context, meaning); if (expectsIdentifier && chain.length !== 1 && !context.encounteredError && !(context.flags & 65536)) { context.encounteredError = true; } return createEntityNameFromSymbolChain(chain, chain.length - 1); function createEntityNameFromSymbolChain(chain, index) { var typeParameterNodes = lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { context.flags ^= 16777216; } var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); identifier.symbol = symbol; return index > 0 ? ts.createQualifiedName(createEntityNameFromSymbolChain(chain, index - 1), identifier) : identifier; } } function symbolToExpression(symbol, context, meaning) { var chain = lookupSymbolChain(symbol, context, meaning); return createExpressionFromSymbolChain(chain, chain.length - 1); function createExpressionFromSymbolChain(chain, index) { var typeParameterNodes = lookupTypeParameterNodes(chain, index, context); var symbol = chain[index]; if (index === 0) { context.flags |= 16777216; } var symbolName = getNameOfSymbolAsWritten(symbol, context); if (index === 0) { 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); identifier.symbol = symbol; return index > 0 ? ts.createPropertyAccess(createExpressionFromSymbolChain(chain, index - 1), identifier) : identifier; } else { 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; } else if (("" + +symbolName) === symbolName) { expression = ts.createLiteral(+symbolName); } if (!expression) { expression = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216); expression.symbol = symbol; } return ts.createElementAccess(createExpressionFromSymbolChain(chain, index - 1), expression); } } } } function typePredicateToString(typePredicate, enclosingDeclaration, flags, writer) { if (flags === void 0) { flags = 16384; } return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker); function typePredicateToStringWorker(writer) { 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, predicate, sourceFile, writer); return writer; } } function formatUnionTypes(types) { var result = []; var flags = 0; for (var i = 0; i < types.length; i++) { var t = types[i]; flags |= t.flags; 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); i += count - 1; continue; } } } result.push(t); } } if (flags & 16384) result.push(nullType); if (flags & 8192) result.push(undefinedType); return result || types; } function visibilityToString(flags) { if (flags === 8) { return "private"; } if (flags === 16) { return "protected"; } return "public"; } function getTypeAliasForTypeLiteral(type) { 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); } } return undefined; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && node.parent.kind === 240 && ts.isExternalModuleAugmentation(node.parent.parent); } function isDefaultBindingContext(location) { return location.kind === 274 || ts.isAmbientModule(location); } function getNameOfSymbolAsWritten(symbol, context) { if (context && symbol.escapedName === "default" && !(context.flags & 16384) && (!(context.flags & 16777216) || !symbol.declarations || (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) { 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); } } } } else { var contextFile = ts.getSourceFileOfNode(ts.getOriginalNode(context.enclosingDeclaration)); return "\"" + (file.moduleName || ts.moduleSpecifiers.getModuleSpecifiers(symbol, compilerOptions, contextFile, context.tracker.moduleResolverHost, context.tracker.moduleResolverHost.getSourceFiles(), { importModuleSpecifierPreference: "non-relative" })[0]) + "\""; } } var declaration = symbol.declarations[0]; var name = ts.getNameOfDeclaration(declaration); if (name) { return ts.declarationNameToString(name); } if (declaration.parent && declaration.parent.kind === 232) { return ts.declarationNameToString(declaration.parent.name); } if (context && !context.encounteredError && !(context.flags & 131072)) { context.encounteredError = true; } switch (declaration.kind) { case 205: return "(Anonymous class)"; case 192: case 193: return "(Anonymous function)"; } } var nameType = symbol.nameType; if (nameType) { if (nameType.flags & 64 && !ts.isIdentifierText(nameType.value, compilerOptions.target)) { return "\"" + ts.escapeString(nameType.value, 34) + "\""; } if (nameType && nameType.flags & 2048) { return "[" + getNameOfSymbolAsWritten(nameType.symbol, context) + "]"; } } return ts.symbolName(symbol); } function isDeclarationVisible(node) { if (node) { var links = getNodeLinks(node); if (links.isVisible === undefined) { links.isVisible = !!determineIfDeclarationIsVisible(); } return links.isVisible; } return false; function determineIfDeclarationIsVisible() { switch (node.kind) { case 292: case 298: return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent)); case 182: return isDeclarationVisible(node.parent.parent); case 232: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { return false; } 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 (!(ts.getCombinedModifierFlags(node) & 1) && !(node.kind !== 243 && parent.kind !== 274 && parent.flags & 4194304)) { return isGlobalSourceFile(parent); } return isDeclarationVisible(parent); case 152: case 151: case 156: case 157: case 154: case 153: if (ts.hasModifier(node, 8 | 16)) { return false; } 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); case 245: case 246: case 248: return false; case 148: case 274: case 242: return true; case 249: return false; default: return false; } } } function collectLinkedAliases(node, setVisibility) { var exportSymbol; 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) { exportSymbol = getTargetOfExportSpecifier(node.parent, 67216319 | 67901928 | 1920 | 2097152); } var result; if (exportSymbol) { buildVisibleNodeList(exportSymbol.declarations); } return result; function buildVisibleNodeList(declarations) { ts.forEach(declarations, function (declaration) { var resultNode = getAnyImportSyntax(declaration) || declaration; if (setVisibility) { getNodeLinks(declaration).isVisible = true; } else { result = result || []; ts.pushIfUnique(result, resultNode); } if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); var importSymbol = resolveName(declaration, firstIdentifier.escapedText, 67216319 | 67901928 | 1920, undefined, undefined, false); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } } }); } } function pushTypeResolution(target, propertyName) { var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName); if (resolutionCycleStartIndex >= 0) { var length_2 = resolutionTargets.length; for (var i = resolutionCycleStartIndex; i < length_2; i++) { resolutionResults[i] = false; } return false; } resolutionTargets.push(target); resolutionResults.push(true); resolutionPropertyNames.push(propertyName); return true; } function findResolutionCycleStartIndex(target, propertyName) { for (var i = resolutionTargets.length - 1; i >= 0; i--) { if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) { return -1; } if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) { return i; } } return -1; } function hasType(target, propertyName) { if (propertyName === 0) { return !!getSymbolLinks(target).type; } if (propertyName === 2) { return !!getSymbolLinks(target).declaredType; } if (propertyName === 1) { return !!target.resolvedBaseConstructorType; } if (propertyName === 3) { return !!target.resolvedReturnType; } if (propertyName === 4) { var bc = target.resolvedBaseConstraint; return !!bc && bc !== circularConstraintType; } return ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName); } function popTypeResolution() { resolutionTargets.pop(); resolutionPropertyNames.pop(); return resolutionResults.pop(); } function getDeclarationContainer(node) { return ts.findAncestor(ts.getRootDeclaration(node), function (node) { switch (node.kind) { case 232: case 233: case 248: case 247: case 246: case 245: return false; default: return true; } }).parent; } function getTypeOfPrototypeProperty(prototype) { var classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; } function getTypeOfPropertyOfType(type, name) { var prop = getPropertyOfType(type, name); return prop ? getTypeOfSymbol(prop) : undefined; } function isTypeAny(type) { return type && (type.flags & 1) !== 0; } function getTypeForBindingElementParent(node) { var symbol = getSymbolOfNode(node); return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false); } function isComputedNonLiteralName(name) { return name.kind === 147 && !ts.isStringOrNumericLiteral(name.expression); } function getRestType(source, properties, symbol) { source = filterType(source, function (t) { return !(t.flags & 24576); }); if (source.flags & 32768) { return emptyObjectType; } if (source.flags & 262144) { return mapType(source, function (t) { return getRestType(t, properties, symbol); }); } var members = ts.createSymbolTable(); var names = ts.createUnderscoreEscapedMap(); for (var _i = 0, properties_2 = properties; _i < properties_2.length; _i++) { var name = properties_2[_i]; names.set(ts.getTextOfPropertyName(name), true); } 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 | 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); var numberIndexInfo = getIndexInfoOfType(source, 1); return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); } function getTypeForBindingElement(declaration) { var pattern = declaration.parent; var parentType = getTypeForBindingElementParent(pattern.parent); if (parentType === errorType) { return errorType; } if (!parentType) { return declaration.initializer ? checkDeclarationInitializer(declaration) : parentType; } if (isTypeAny(parentType)) { return parentType; } var type; if (pattern.kind === 180) { if (declaration.dotDotDotToken) { if (parentType.flags & 2 || !isValidSpreadType(parentType)) { error(declaration, ts.Diagnostics.Rest_types_may_only_be_created_from_object_types); return errorType; } var literalMembers = []; for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!element.dotDotDotToken) { literalMembers.push(element.propertyName || element.name); } } type = getRestType(parentType, literalMembers, declaration.symbol); } else { 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)) { 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) && getIndexTypeOfType(parentType, 1) || getIndexTypeOfType(parentType, 0); if (!indexerType && noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors) { if (getIndexTypeOfType(parentType, 1)) { error(declaration, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number); } else { error(declaration, ts.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature, typeToString(parentType)); } } return indexerType || anyType; } var nameType = isLate ? checkComputedPropertyName(name) : undefined; var text = isLate ? getLateBoundNameFromType(nameType) : isWellKnown ? ts.getPropertyNameForKnownSymbolName(ts.idText(name.expression.name)) : ts.getTextOfPropertyName(name); if (strictNullChecks && declaration.flags & 4194304 && ts.isParameterDeclaration(declaration)) { parentType = getNonNullableType(parentType); } 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)); } return anyType; } var declaredType = getConstraintForLocation(getTypeOfPropertyOfType(parentType, text), declaration.name); type = declaredType && getFlowTypeOfReference(declaration, declaredType) || 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; } } } else { var elementType = checkIteratedTypeOrElementType(parentType, pattern, false, false); if (declaration.dotDotDotToken) { type = createArrayType(elementType); } else { var propName = "" + pattern.elements.indexOf(declaration); type = isTupleLikeType(parentType) ? getTypeOfPropertyOfType(parentType, propName) : elementType; if (!type) { if (isTupleType(parentType)) { error(declaration, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(parentType), getTypeReferenceArity(parentType), pattern.elements.length); } else { error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName); } return errorType; } } } if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkExpressionCached(declaration.initializer)) & 8192)) { type = getTypeWithFacts(type, 131072); } return declaration.initializer ? getUnionType([type, checkExpressionCached(declaration.initializer)], 2) : type; } function getTypeForDeclarationFromJSDocComment(declaration) { var jsdocType = ts.getJSDocType(declaration); if (jsdocType) { return getTypeFromTypeNode(jsdocType); } return undefined; } function isNullOrUndefined(node) { var expr = ts.skipParentheses(node); return expr.kind === 95 || expr.kind === 71 && getResolvedSymbol(expr) === undefinedSymbol; } function isEmptyArrayLiteral(node) { var expr = ts.skipParentheses(node); return expr.kind === 183 && expr.elements.length === 0; } function addOptionality(type, optional) { if (optional === void 0) { optional = true; } return strictNullChecks && optional ? getOptionalType(type) : type; } function getTypeForVariableLikeDeclaration(declaration, includeOptionality) { if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 221) { var indexType = getIndexType(checkNonNullExpression(declaration.parent.parent.expression)); return indexType.flags & (65536 | 1048576) ? getExtractStringType(indexType) : stringType; } if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 222) { var forOfStatement = declaration.parent.parent; return checkRightHandSideOfForOf(forOfStatement.expression, forOfStatement.awaitModifier) || anyType; } if (ts.isBindingPattern(declaration.parent)) { return getTypeForBindingElement(declaration); } var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration) || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken); var declaredType = tryGetTypeFromEffectiveTypeNode(declaration); if (declaredType) { return addOptionality(declaredType, isOptional); } if ((noImplicitAny || ts.isInJavaScriptFile(declaration)) && 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; } if (declaration.initializer && isEmptyArrayLiteral(declaration.initializer)) { return autoArrayType; } } if (declaration.kind === 149) { var func = declaration.parent; 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) { ts.Debug.assert(!thisParameter.type); return getTypeOfSymbol(getterSignature.thisParameter); } return getReturnTypeOfSignature(getterSignature); } } var type = void 0; if (declaration.symbol.escapedName === "this") { type = getContextualThisParameterType(func); } else { type = getContextuallyTypedParameterType(declaration); } if (type) { return addOptionality(type, isOptional); } } if (declaration.initializer) { var type = checkDeclarationInitializer(declaration); return addOptionality(type, isOptional); } if (ts.isJsxAttribute(declaration)) { return trueType; } if (ts.isBindingPattern(declaration.name)) { return getTypeFromBindingPattern(declaration.name, false, true); } return undefined; } function getWidenedTypeFromJSSpecialPropertyDeclarations(symbol) { var specialDeclaration = ts.getAssignedJavascriptInitializer(symbol.valueDeclaration); if (specialDeclaration) { return getWidenedLiteralType(checkExpressionCached(specialDeclaration)); } var types = []; var constructorTypes; var definedInConstructor = false; var definedInMethod = false; var jsDocType; var _loop_4 = function (declaration) { var declarationInConstructor = false; 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) { var thisContainer = ts.getThisContainer(expression, false); declarationInConstructor = thisContainer.kind === 155 || thisContainer.kind === 234 || (thisContainer.kind === 192 && !ts.isPrototypePropertyAssignment(thisContainer.parent)); if (declarationInConstructor) { definedInConstructor = true; } else { definedInMethod = true; } } var type_1 = getTypeForDeclarationFromJSDocComment(expression.parent); if (type_1) { var declarationType = getWidenedType(type_1); if (!jsDocType) { jsDocType = declarationType; } else if (jsDocType !== errorType && declarationType !== errorType && !isTypeIdenticalTo(jsDocType, declarationType) && !(symbol.flags & 67108864)) { errorNextVariableOrPropertyDeclarationMustHaveSameType(jsDocType, declaration, declarationType); } } else if (!jsDocType) { var type_2 = getWidenedLiteralType(checkExpressionCached(expression.right)); 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); symbol.exports.forEach(function (s, name) { if (members_3.has(name)) { var exportedMember = exportedType_1.members.get(name); var union = createSymbol(s.flags | exportedMember.flags, name); union.type = getUnionType([getTypeOfSymbol(s), getTypeOfSymbol(exportedMember)]); members_3.set(name, union); } else { members_3.set(name, s); } }); type_2 = createAnonymousType(exportedType_1.symbol, members_3, exportedType_1.callSignatures, exportedType_1.constructSignatures, exportedType_1.stringIndexInfo, exportedType_1.numberIndexInfo); } var anyedType = type_2; if (isEmptyArrayLiteralType(type_2)) { anyedType = anyArrayType; if (noImplicitAny) { reportImplicitAnyError(expression, anyArrayType); } } types.push(anyedType); if (declarationInConstructor) { (constructorTypes || (constructorTypes = [])).push(anyedType); } } }; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; var state_2 = _loop_4(declaration); if (typeof state_2 === "object") return state_2.value; } var type = jsDocType; if (!type) { if (definedInMethod) { var propType = getTypeOfSpecialPropertyOfBaseType(symbol); if (propType) { (constructorTypes || (constructorTypes = [])).push(propType); definedInConstructor = true; } } 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); }) === neverType) { if (noImplicitAny) { reportImplicitAnyError(symbol.valueDeclaration, anyType); } return anyType; } return widened; } function getTypeOfSpecialPropertyOfBaseType(specialProperty) { var parentDeclaration = ts.forEach(specialProperty.declarations, function (d) { var parent = ts.getThisContainer(d, false).parent; return ts.isClassLike(parent) && parent; }); if (parentDeclaration) { var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(parentDeclaration)); var baseClassType = classType && getBaseTypes(classType)[0]; if (baseClassType) { return getTypeOfPropertyOfType(baseClassType, specialProperty.escapedName); } } } function getTypeFromBindingElement(element, includePatternInType, reportErrors) { if (element.initializer) { return checkDeclarationInitializer(element); } if (ts.isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors); } if (reportErrors && noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { reportImplicitAnyError(element, anyType); } return anyType; } function getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) { var members = ts.createSymbolTable(); var stringIndexInfo; var objectFlags = 128; ts.forEach(pattern.elements, function (e) { var name = e.propertyName || e.name; if (isComputedNonLiteralName(name)) { objectFlags |= 512; return; } if (e.dotDotDotToken) { stringIndexInfo = createIndexInfo(anyType, false); return; } var text = ts.getTextOfPropertyName(name); 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; result.objectFlags |= objectFlags; if (includePatternInType) { result.pattern = pattern; } return result; } function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) { var elements = pattern.elements; var lastElement = ts.lastOrUndefined(elements); if (!lastElement || (!ts.isOmittedExpression(lastElement) && lastElement.dotDotDotToken)) { return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; } var elementTypes = ts.map(elements, function (e) { return ts.isOmittedExpression(e) ? anyType : getTypeFromBindingElement(e, includePatternInType, reportErrors); }); var result = createTupleType(elementTypes); if (includePatternInType) { result = cloneTypeReference(result); result.pattern = pattern; } return result; } function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) { if (includePatternInType === void 0) { includePatternInType = false; } if (reportErrors === void 0) { reportErrors = false; } return pattern.kind === 180 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors); } function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) { return widenTypeForVariableLikeDeclaration(getTypeForVariableLikeDeclaration(declaration, true), declaration, reportErrors); } function widenTypeForVariableLikeDeclaration(type, declaration, reportErrors) { if (type) { if (reportErrors) { reportErrorsFromWidening(declaration, type); } if (type.flags & 2048 && (ts.isBindingElement(declaration) || !declaration.type) && type.symbol !== getSymbolOfNode(declaration)) { type = esSymbolType; } return getWidenedType(type); } type = ts.isParameter(declaration) && declaration.dotDotDotToken ? anyArrayType : anyType; if (reportErrors && noImplicitAny) { if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); } } return type; } function declarationBelongsToPrivateAmbientMember(declaration) { var root = ts.getRootDeclaration(declaration); var memberDeclaration = root.kind === 149 ? root.parent : root; return isPrivateWithinAmbient(memberDeclaration); } function tryGetTypeFromEffectiveTypeNode(declaration) { var typeNode = ts.getEffectiveTypeAnnotationNode(declaration); if (typeNode) { return getTypeFromTypeNode(typeNode); } } function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { if (symbol.flags & 4194304) { return links.type = getTypeOfPrototypeProperty(symbol); } if (symbol === requireSymbol || symbol === moduleSymbol) { return links.type = anyType; } var declaration = symbol.valueDeclaration; if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) { return links.type = anyType; } 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) { return links.type = checkExpression(declaration.expression); } if (!pushTypeResolution(symbol, 0)) { return errorType; } var type = getJSSpecialType(symbol, declaration); if (!type) { if (ts.isJSDocPropertyLikeTag(declaration) || ts.isPropertyAccessExpression(declaration) || ts.isIdentifier(declaration) || ts.isClassDeclaration(declaration) || ts.isFunctionDeclaration(declaration) || (ts.isMethodDeclaration(declaration) && !ts.isObjectLiteralMethod(declaration)) || ts.isMethodSignature(declaration)) { if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { return getTypeOfFuncClassEnumModule(symbol); } type = tryGetTypeFromEffectiveTypeNode(declaration) || anyType; } else if (ts.isPropertyAssignment(declaration)) { type = tryGetTypeFromEffectiveTypeNode(declaration) || checkPropertyAssignment(declaration); } else if (ts.isJsxAttribute(declaration)) { type = tryGetTypeFromEffectiveTypeNode(declaration) || checkJsxAttribute(declaration); } else if (ts.isShorthandPropertyAssignment(declaration)) { type = tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionForMutableLocation(declaration.name, 0); } else if (ts.isObjectLiteralMethod(declaration)) { 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, true); } else { return ts.Debug.fail("Unhandled declaration kind! " + ts.Debug.showSyntaxKind(declaration) + " for " + ts.Debug.showSymbol(symbol)); } } if (!popTypeResolution()) { type = reportCircularityError(symbol); } links.type = type; } return links.type; } function getJSSpecialType(symbol, decl) { if (!ts.isInJavaScriptFile(decl)) { return undefined; } else if (ts.isJSDocPropertyLikeTag(decl) && decl.typeExpression) { return getTypeFromTypeNode(decl.typeExpression.type); } else if (ts.isBinaryExpression(decl) || ts.isPropertyAccessExpression(decl) && ts.isBinaryExpression(decl.parent)) { return getJSInitializerType(decl, symbol, ts.getAssignedJavascriptInitializer(ts.isBinaryExpression(decl) ? decl.left : decl)) || getWidenedTypeFromJSSpecialPropertyDeclarations(symbol); } else if (ts.isParameter(decl) || ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl) || ts.isVariableDeclaration(decl) || ts.isBindingElement(decl)) { var isOptional = ts.isParameter(decl) && isJSDocOptionalParameter(decl) || !ts.isBindingElement(decl) && !ts.isVariableDeclaration(decl) && !!decl.questionToken; var declaredType = tryGetTypeFromEffectiveTypeNode(decl); return declaredType && addOptionality(declaredType, isOptional) || getJSInitializerType(decl, symbol, ts.getDeclaredJavascriptInitializer(decl)) || getWidenedTypeForVariableLikeDeclaration(decl, true); } } function getJSInitializerType(decl, symbol, init) { if (init && ts.isInJavaScriptFile(init) && ts.isObjectLiteralExpression(init)) { var exports_1 = ts.createSymbolTable(); while (ts.isBinaryExpression(decl) || ts.isPropertyAccessExpression(decl)) { var s_1 = getSymbolOfNode(decl); if (s_1 && ts.hasEntries(s_1.exports)) { mergeSymbolTable(exports_1, s_1.exports); } decl = ts.isBinaryExpression(decl) ? decl.parent : decl.parent.parent; } var s = getSymbolOfNode(decl); if (s && ts.hasEntries(s.exports)) { mergeSymbolTable(exports_1, s.exports); } return createAnonymousType(symbol, exports_1, ts.emptyArray, ts.emptyArray, jsObjectLiteralIndexInfo, undefined); } } function getAnnotatedAccessorType(accessor) { if (accessor) { if (accessor.kind === 156) { var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor); return getterTypeAnnotation && getTypeFromTypeNode(getterTypeAnnotation); } else { var setterTypeAnnotation = ts.getEffectiveSetAccessorTypeAnnotationNode(accessor); return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); } } return undefined; } function getAnnotatedAccessorThisParameter(accessor) { var parameter = getAccessorThisParameter(accessor); return parameter && parameter.symbol; } function getThisTypeOfDeclaration(declaration) { return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { 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)) { return errorType; } var type = void 0; var getterReturnType = getAnnotatedAccessorType(getter); if (getterReturnType) { type = getterReturnType; } else { var setterParameterType = getAnnotatedAccessorType(setter); if (setterParameterType) { type = setterParameterType; } else { if (getter && getter.body) { type = getReturnTypeFromBody(getter); } else { if (noImplicitAny) { if (setter) { error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation, symbolToString(symbol)); } else { ts.Debug.assert(!!getter, "there must existed getter as we are current checking either setter or getter in this function"); error(getter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation, symbolToString(symbol)); } } type = anyType; } } } if (!popTypeResolution()) { type = anyType; if (noImplicitAny) { 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)); } } links.type = type; } return links.type; } function getBaseTypeVariableOfClass(symbol) { var baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol)); return baseConstructorType.flags & 2162688 ? baseConstructorType : undefined; } function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { var jsDeclaration = ts.getDeclarationOfJSInitializer(symbol.valueDeclaration); if (jsDeclaration) { var jsSymbol = getSymbolOfNode(jsDeclaration); if (jsSymbol && (ts.hasEntries(jsSymbol.exports) || ts.hasEntries(jsSymbol.members))) { symbol = cloneSymbol(symbol); links = symbol; if (ts.hasEntries(jsSymbol.exports)) { symbol.exports = symbol.exports || ts.createSymbolTable(); mergeSymbolTable(symbol.exports, jsSymbol.exports); } if (ts.hasEntries(jsSymbol.members)) { symbol.members = symbol.members || ts.createSymbolTable(); mergeSymbolTable(symbol.members, jsSymbol.members); } } } if (symbol.flags & 1536 && ts.isShorthandAmbientModuleSymbol(symbol)) { links.type = anyType; } else if (symbol.valueDeclaration.kind === 200 || symbol.valueDeclaration.kind === 185 && symbol.valueDeclaration.parent.kind === 200) { links.type = getWidenedTypeFromJSSpecialPropertyDeclarations(symbol); } else { 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 ? getOptionalType(type) : type; } } } return links.type; } function getTypeOfEnumMember(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { links.type = getDeclaredTypeOfEnumMember(symbol); } return links.type; } function getTypeOfAlias(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { var targetSymbol = resolveAlias(symbol); links.type = targetSymbol.flags & 67216319 ? getTypeOfSymbol(targetSymbol) : errorType; } return links.type; } function getTypeOfInstantiatedSymbol(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { if (symbolInstantiationDepth === 100) { error(symbol.valueDeclaration, ts.Diagnostics.Generic_type_instantiation_is_excessively_deep_and_possibly_infinite); links.type = errorType; } else { if (!pushTypeResolution(symbol, 0)) { return errorType; } symbolInstantiationDepth++; var type = instantiateType(getTypeOfSymbol(links.target), links.mapper); symbolInstantiationDepth--; if (!popTypeResolution()) { type = reportCircularityError(symbol); } links.type = type; } } return links.type; } function reportCircularityError(symbol) { 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; } 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) { return getTypeOfInstantiatedSymbol(symbol); } if (ts.getCheckFlags(symbol) & 2048) { return getTypeOfReverseMappedSymbol(symbol); } if (symbol.flags & (3 | 4)) { return getTypeOfVariableOrParameterOrProperty(symbol); } if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { return getTypeOfFuncClassEnumModule(symbol); } if (symbol.flags & 8) { return getTypeOfEnumMember(symbol); } if (symbol.flags & 98304) { return getTypeOfAccessors(symbol); } if (symbol.flags & 2097152) { return getTypeOfAlias(symbol); } return errorType; } function isReferenceToType(type, target) { return type !== undefined && target !== undefined && (ts.getObjectFlags(type) & 4) !== 0 && type.target === target; } function getTargetType(type) { return ts.getObjectFlags(type) & 4 ? type.target : type; } function hasBaseType(type, checkBase) { return check(type); function check(type) { if (ts.getObjectFlags(type) & (3 | 4)) { var target = getTargetType(type); return target === checkBase || ts.some(getBaseTypes(target), check); } else if (type.flags & 524288) { return ts.some(type.types, check); } return false; } } function appendTypeParameters(typeParameters, declarations) { for (var _i = 0, declarations_2 = declarations; _i < declarations_2.length; _i++) { var declaration = declarations_2[_i]; typeParameters = ts.appendIfUnique(typeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(declaration))); } return typeParameters; } function getOuterTypeParameters(node, includeThisTypes) { while (true) { node = node.parent; if (!node) { return undefined; } switch (node.kind) { 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 297: case 298: case 292: case 177: case 171: var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); if (node.kind === 177) { return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter))); } else if (node.kind === 171) { return ts.concatenate(outerTypeParameters, getInferTypeParameters(node)); } var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node)); var thisType = includeThisTypes && (node.kind === 235 || node.kind === 205 || node.kind === 236) && getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters; } } } function getOuterTypeParametersOfClassOrInterface(symbol) { var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 236); return getOuterTypeParameters(declaration); } function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; if (node.kind === 236 || node.kind === 235 || node.kind === 205 || ts.isTypeAlias(node)) { var declaration = node; result = appendTypeParameters(result, ts.getEffectiveTypeParameterDeclarations(declaration)); } } return result; } function getTypeParametersOfClassOrInterface(symbol) { return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); } function isMixinConstructorType(type) { 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; } return false; } function isConstructorType(type) { if (isValidBaseType(type) && getSignaturesOfType(type, 1).length > 0) { return true; } if (type.flags & 2162688) { var constraint = getBaseConstraintOfType(type); return !!constraint && isValidBaseType(constraint) && isMixinConstructorType(constraint); } return false; } function getBaseTypeNodeOfClass(type) { var decl = type.symbol.valueDeclaration; if (ts.isInJavaScriptFile(decl)) { var tag = ts.getJSDocAugmentsTag(decl); if (tag) { return tag.class; } } return ts.getClassExtendsHeritageClauseElement(decl); } function getConstructorsForTypeArguments(type, typeArgumentNodes, location) { var typeArgCount = ts.length(typeArgumentNodes); var isJavaScript = ts.isInJavaScriptFile(location); 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; }); } function getBaseConstructorTypeOfClass(type) { if (!type.resolvedBaseConstructorType) { var decl = type.symbol.valueDeclaration; var extended = ts.getClassExtendsHeritageClauseElement(decl); var baseTypeNode = getBaseTypeNodeOfClass(type); if (!baseTypeNode) { return type.resolvedBaseConstructorType = undefinedType; } if (!pushTypeResolution(type, 1)) { return errorType; } var baseConstructorType = checkExpression(baseTypeNode.expression); if (extended && baseTypeNode !== extended) { ts.Debug.assert(!extended.typeArguments); checkExpression(extended.expression); } 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) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) { error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); return type.resolvedBaseConstructorType = errorType; } type.resolvedBaseConstructorType = baseConstructorType; } return type.resolvedBaseConstructorType; } function getBaseTypes(type) { if (!type.resolvedBaseTypes) { if (type.objectFlags & 8) { type.resolvedBaseTypes = [createArrayType(getUnionType(type.typeParameters))]; } else if (type.symbol.flags & (32 | 64)) { if (type.symbol.flags & 32) { resolveBaseTypesOfClass(type); } if (type.symbol.flags & 64) { resolveBaseTypesOfInterface(type); } } else { ts.Debug.fail("type must be class or interface"); } } return type.resolvedBaseTypes; } function resolveBaseTypesOfClass(type) { type.resolvedBaseTypes = ts.resolvingEmptyArray; var baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type)); 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 && areAllOuterTypeParametersApplied(originalBaseType)) { baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol, typeArgs); } else if (baseConstructorType.flags & 1) { baseType = baseConstructorType; } else { 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); return type.resolvedBaseTypes = ts.emptyArray; } baseType = getReturnTypeOfSignature(constructors[0]); } if (baseType === errorType) { return type.resolvedBaseTypes = ts.emptyArray; } if (!isValidBaseType(baseType)) { error(baseTypeNode.expression, ts.Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType)); 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, undefined, 2)); return type.resolvedBaseTypes = ts.emptyArray; } if (type.resolvedBaseTypes === ts.resolvingEmptyArray) { type.members = undefined; } return type.resolvedBaseTypes = [baseType]; } function areAllOuterTypeParametersApplied(type) { var outerTypeParameters = type.outerTypeParameters; if (outerTypeParameters) { var last_1 = outerTypeParameters.length - 1; var typeArguments = type.typeArguments; return outerTypeParameters[last_1].symbol !== typeArguments[last_1].symbol; } return true; } function isValidBaseType(type) { 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 && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); if (baseType !== errorType) { if (isValidBaseType(baseType)) { if (type !== baseType && !hasBaseType(baseType, type)) { if (type.resolvedBaseTypes === ts.emptyArray) { type.resolvedBaseTypes = [baseType]; } else { type.resolvedBaseTypes.push(baseType); } } else { error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 2)); } } else { error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); } } } } } } function isThislessInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (declaration.kind === 236) { if (declaration.flags & 64) { return false; } var baseTypeNodes = ts.getInterfaceBaseTypeNodes(declaration); if (baseTypeNodes) { 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, true); if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { return false; } } } } } } return true; } function getDeclaredTypeOfClassOrInterface(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { var kind = symbol.flags & 32 ? 1 : 2; var type = links.declaredType = createObjectType(kind, symbol); var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol); var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); if (outerTypeParameters || localTypeParameters || kind === 1 || !isThislessInterface(symbol)) { type.objectFlags |= 4; type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters); type.outerTypeParameters = outerTypeParameters; type.localTypeParameters = localTypeParameters; type.instantiations = ts.createMap(); type.instantiations.set(getTypeListId(type.typeParameters), type); type.target = type; type.typeArguments = type.typeParameters; type.thisType = createType(65536); type.thisType.isThisType = true; type.thisType.symbol = symbol; type.thisType.constraint = type; } } return links.declaredType; } function getDeclaredTypeOfTypeAlias(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { if (!pushTypeResolution(symbol, 2)) { return errorType; } var declaration = ts.find(symbol.declarations, function (d) { return ts.isJSDocTypeAlias(d) || d.kind === 237; }); var typeNode = ts.isJSDocTypeAlias(declaration) ? declaration.typeExpression : declaration.type; var type = typeNode ? getTypeFromTypeNode(typeNode) : errorType; if (popTypeResolution()) { var typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); if (typeParameters) { links.typeParameters = typeParameters; links.instantiations = ts.createMap(); links.instantiations.set(getTypeListId(typeParameters), type); } } else { type = errorType; error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); } links.declaredType = type; } return links.declaredType; } function isStringConcatExpression(expr) { if (expr.kind === 9) { return true; } else if (expr.kind === 200) { return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right); } return false; } function isLiteralEnumMember(member) { var expr = member.initializer; if (!expr) { return !(member.flags & 4194304); } switch (expr.kind) { case 9: case 8: return true; 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: return isStringConcatExpression(expr); default: return false; } } function getEnumKind(symbol) { var links = getSymbolLinks(symbol); if (links.enumKind !== undefined) { return links.enumKind; } var hasNonLiteralMember = false; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; 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) { return links.enumKind = 1; } if (!isLiteralEnumMember(member)) { hasNonLiteralMember = true; } } } } return links.enumKind = hasNonLiteralMember ? 0 : 1; } function getBaseTypeOfEnumLiteralType(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) { enumCount++; var memberTypeList = []; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; 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)); getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType; memberTypeList.push(memberType); } } } if (memberTypeList.length) { 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); enumType.symbol = symbol; return links.declaredType = enumType; } function getDeclaredTypeOfEnumMember(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { var enumType = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); if (!links.declaredType) { links.declaredType = enumType; } } return links.declaredType; } function getDeclaredTypeOfTypeParameter(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { var type = createType(65536); type.symbol = symbol; links.declaredType = type; } return links.declaredType; } function getDeclaredTypeOfAlias(symbol) { var links = getSymbolLinks(symbol); if (!links.declaredType) { links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol)); } return links.declaredType; } function getDeclaredTypeOfSymbol(symbol) { return tryGetDeclaredTypeOfSymbol(symbol) || errorType; } function tryGetDeclaredTypeOfSymbol(symbol) { if (symbol.flags & (32 | 64)) { return getDeclaredTypeOfClassOrInterface(symbol); } if (symbol.flags & 524288) { return getDeclaredTypeOfTypeAlias(symbol); } if (symbol.flags & 262144) { return getDeclaredTypeOfTypeParameter(symbol); } if (symbol.flags & 384) { return getDeclaredTypeOfEnum(symbol); } if (symbol.flags & 8) { return getDeclaredTypeOfEnumMember(symbol); } if (symbol.flags & 2097152) { return getDeclaredTypeOfAlias(symbol); } return undefined; } function isThislessType(node) { switch (node.kind) { 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: return isThislessType(node.elementType); case 162: return !node.typeArguments || node.typeArguments.every(isThislessType); } return false; } function isThislessTypeParameter(node) { return !node.constraint || isThislessType(node.constraint); } function isThislessVariableLikeDeclaration(node) { var typeNode = ts.getEffectiveTypeAnnotationNode(node); return typeNode ? isThislessType(typeNode) : !ts.hasInitializer(node); } function isThislessFunctionLikeDeclaration(node) { var returnType = ts.getEffectiveReturnTypeNode(node); var typeParameters = ts.getEffectiveTypeParameterDeclarations(node); return (node.kind === 155 || (!!returnType && isThislessType(returnType))) && node.parameters.every(isThislessVariableLikeDeclaration) && typeParameters.every(isThislessTypeParameter); } function isThisless(symbol) { if (symbol.declarations && symbol.declarations.length === 1) { var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { case 152: case 151: return isThislessVariableLikeDeclaration(declaration); case 154: case 153: case 155: return isThislessFunctionLikeDeclaration(declaration); } } } return false; } function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) { var result = ts.createSymbolTable(); for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) { var symbol = symbols_2[_i]; result.set(symbol.escapedName, mappingThisOnly && isThisless(symbol) ? symbol : instantiateSymbol(symbol, mapper)); } return result; } function addInheritedMembers(symbols, baseSymbols) { for (var _i = 0, baseSymbols_1 = baseSymbols; _i < baseSymbols_1.length; _i++) { var s = baseSymbols_1[_i]; if (!symbols.has(s.escapedName)) { symbols.set(s.escapedName, s); } } } function resolveDeclaredMembers(type) { if (!type.declaredProperties) { var symbol = type.symbol; var members = getMembersOfSymbol(symbol); type.declaredProperties = getNamedMembers(members); type.declaredCallSignatures = ts.emptyArray; type.declaredConstructSignatures = ts.emptyArray; type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call")); type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new")); type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0); type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1); } return type; } function isTypeUsableAsLateBoundName(type) { return !!(type.flags & 2240); } function isLateBindableName(node) { return ts.isComputedPropertyName(node) && ts.isEntityNameExpression(node.expression) && isTypeUsableAsLateBoundName(checkComputedPropertyName(node)); } function hasLateBindableName(node) { var name = ts.getNameOfDeclaration(node); return !!name && isLateBindableName(name); } function hasNonBindableDynamicName(node) { return ts.hasDynamicName(node) && !hasLateBindableName(node); } function isNonBindableDynamicName(node) { return ts.isDynamicName(node) && !isLateBindableName(node); } function getLateBoundNameFromType(type) { if (type.flags & 2048) { return "__@" + type.symbol.escapedName + "@" + getSymbolId(type.symbol); } if (type.flags & 192) { return ts.escapeLeadingUnderscores("" + type.value); } return ts.Debug.fail(); } function addDeclarationToLateBoundSymbol(symbol, member, symbolFlags) { ts.Debug.assert(!!(ts.getCheckFlags(symbol) & 1024), "Expected a late-bound symbol."); symbol.flags |= symbolFlags; getSymbolLinks(member.symbol).lateSymbol = symbol; if (!symbol.declarations) { symbol.declarations = [member]; } else { symbol.declarations.push(member); } if (symbolFlags & 67216319) { if (!symbol.valueDeclaration || symbol.valueDeclaration.kind !== member.kind) { symbol.valueDeclaration = member; } } } 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) { links.resolvedSymbol = decl.symbol; var type = checkComputedPropertyName(decl.name); if (isTypeUsableAsLateBoundName(type)) { var memberName = getLateBoundNameFromType(type); var symbolFlags = decl.symbol.flags; var lateSymbol = lateSymbols.get(memberName); if (!lateSymbol) lateSymbols.set(memberName, lateSymbol = createSymbol(0, memberName, 1024)); var earlySymbol = earlySymbols && earlySymbols.get(memberName); if (lateSymbol.flags & getExcludedSymbolFlags(symbolFlags) || earlySymbol) { 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, memberName, 1024); } lateSymbol.nameType = type; addDeclarationToLateBoundSymbol(lateSymbol, decl, symbolFlags); if (lateSymbol.parent) { ts.Debug.assert(lateSymbol.parent === parent, "Existing symbol parent should match new one"); } else { lateSymbol.parent = parent; } return links.resolvedSymbol = lateSymbol; } } return links.resolvedSymbol; } function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) { var links = getSymbolLinks(symbol); if (!links[resolutionKind]) { var isStatic = resolutionKind === "resolvedExports"; var earlySymbols = !isStatic ? symbol.members : symbol.flags & 1536 ? getExportsOfModuleWorker(symbol) : symbol.exports; links[resolutionKind] = earlySymbols || emptySymbols; var lateSymbols = ts.createSymbolTable(); for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; var members = ts.getMembersOfDeclaration(decl); if (members) { for (var _b = 0, members_4 = members; _b < members_4.length; _b++) { var member = members_4[_b]; if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) { lateBindMember(symbol, earlySymbols, lateSymbols, member); } } } } links[resolutionKind] = combineSymbolTables(earlySymbols, lateSymbols) || emptySymbols; } return links[resolutionKind]; } function getMembersOfSymbol(symbol) { return symbol.flags & 6240 ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedMembers") : symbol.members || emptySymbols; } function getLateBoundSymbol(symbol) { if (symbol.flags & 106500 && symbol.escapedName === "__computed") { var links = getSymbolLinks(symbol); if (!links.lateSymbol && ts.some(symbol.declarations, hasLateBindableName)) { if (ts.some(symbol.declarations, ts.hasStaticModifier)) { getExportsOfSymbol(symbol.parent); } else { getMembersOfSymbol(symbol.parent); } } return links.lateSymbol || (links.lateSymbol = symbol); } return symbol; } function getTypeWithThisArgument(type, thisArgument, needApparentType) { if (ts.getObjectFlags(type) & 4) { var target = type.target; var typeArguments = type.typeArguments; if (ts.length(target.typeParameters) === ts.length(typeArguments)) { var ref = createTypeReference(target, ts.concatenate(typeArguments, [thisArgument || target.thisType])); return needApparentType ? getApparentType(ref) : ref; } } else if (type.flags & 524288) { return getIntersectionType(ts.map(type.types, function (t) { return getTypeWithThisArgument(t, thisArgument, needApparentType); })); } return needApparentType ? getApparentType(type) : type; } function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) { var mapper; var members; var callSignatures; var constructSignatures; var stringIndexInfo; var numberIndexInfo; if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) { mapper = identityMapper; members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties); callSignatures = source.declaredCallSignatures; constructSignatures = source.declaredConstructSignatures; stringIndexInfo = source.declaredStringIndexInfo; numberIndexInfo = source.declaredNumberIndexInfo; } else { mapper = createTypeMapper(typeParameters, typeArguments); members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1); callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper); constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper); stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper); numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper); } var baseTypes = getBaseTypes(source); if (baseTypes.length) { if (source.symbol && members === getMembersOfSymbol(source.symbol)) { members = ts.createSymbolTable(source.declaredProperties); } setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); var thisArgument = ts.lastOrUndefined(typeArguments); for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) { 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)); constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1)); if (!stringIndexInfo) { stringIndexInfo = instantiatedBaseType === anyType ? createIndexInfo(anyType, false) : getIndexInfoOfType(instantiatedBaseType, 0); } numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1); } } setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } function resolveClassOrInterfaceMembers(type) { resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray); } function resolveTypeReferenceMembers(type) { var source = resolveDeclaredMembers(type.target); var typeParameters = ts.concatenate(source.typeParameters, [source.thisType]); var typeArguments = type.typeArguments && type.typeArguments.length === typeParameters.length ? type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, resolvedTypePredicate, minArgumentCount, hasRestParameter, hasLiteralTypes) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.resolvedTypePredicate = resolvedTypePredicate; sig.minArgumentCount = minArgumentCount; sig.hasRestParameter = hasRestParameter; sig.hasLiteralTypes = hasLiteralTypes; sig.target = undefined; sig.mapper = undefined; return sig; } function cloneSignature(sig) { 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); if (baseSignatures.length === 0) { return [createSignature(undefined, classType.localTypeParameters, undefined, ts.emptyArray, classType, undefined, 0, false, false)]; } var baseTypeNode = getBaseTypeNodeOfClass(classType); var isJavaScript = ts.isInJavaScriptFile(baseTypeNode); var typeArguments = typeArgumentsFromTypeReferenceNode(baseTypeNode); var typeArgCount = ts.length(typeArguments); var result = []; for (var _i = 0, baseSignatures_1 = baseSignatures; _i < baseSignatures_1.length; _i++) { var baseSig = baseSignatures_1[_i]; var minTypeArgumentCount = getMinTypeArgumentCount(baseSig.typeParameters); var typeParamCount = ts.length(baseSig.typeParameters); if (isJavaScript || typeArgCount >= minTypeArgumentCount && typeArgCount <= typeParamCount) { var sig = typeParamCount ? createSignatureInstantiation(baseSig, fillMissingTypeArguments(typeArguments, baseSig.typeParameters, minTypeArgumentCount, isJavaScript)) : cloneSignature(baseSig); sig.typeParameters = classType.localTypeParameters; sig.resolvedReturnType = classType; result.push(sig); } } return result; } function findMatchingSignature(signatureList, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes) { for (var _i = 0, signatureList_1 = signatureList; _i < signatureList_1.length; _i++) { var s = signatureList_1[_i]; if (compareSignaturesIdentical(s, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypesIdentical)) { return s; } } } function findMatchingSignatures(signatureLists, signature, listIndex) { if (signature.typeParameters) { if (listIndex > 0) { return undefined; } for (var i = 1; i < signatureLists.length; i++) { if (!findMatchingSignature(signatureLists[i], signature, false, false, false)) { return undefined; } } return [signature]; } var result; for (var i = 0; i < signatureLists.length; i++) { var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, true, true, true); if (!match) { return undefined; } result = ts.appendIfUnique(result, match); } return result; } 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]; if (!result || !findMatchingSignature(result, signature, false, true, true)) { var unionSignatures = findMatchingSignatures(signatureLists, signature, i); if (unionSignatures) { var s = signature; if (unionSignatures.length > 1) { var thisParameter = signature.thisParameter; if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return sig.thisParameter ? getTypeOfSymbol(sig.thisParameter) : anyType; }), 2); thisParameter = createSymbolWithType(signature.thisParameter, thisType); } s = cloneSignature(signature); s.thisParameter = thisParameter; s.unionSignatures = unionSignatures; } (result || (result = [])).push(s); } } } } return result || ts.emptyArray; } function getUnionIndexInfo(types, kind) { var indexTypes = []; var isAnyReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var type = types_2[_i]; var indexInfo = getIndexInfoOfType(type, kind); if (!indexInfo) { return undefined; } indexTypes.push(indexInfo.type); isAnyReadonly = isAnyReadonly || indexInfo.isReadonly; } return createIndexInfo(getUnionType(indexTypes, 2), isAnyReadonly); } function resolveUnionTypeMembers(type) { 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) { return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]); } function intersectIndexInfos(info1, info2) { return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly); } function unionSpreadIndexInfos(info1, info2) { return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly); } function includeMixinType(type, types, index) { var mixedTypes = []; for (var i = 0; i < types.length; i++) { if (i === index) { mixedTypes.push(type); } else if (isMixinConstructorType(types[i])) { mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1)[0])); } } return getIntersectionType(mixedTypes); } function resolveIntersectionTypeMembers(type) { var callSignatures = ts.emptyArray; var constructSignatures = ts.emptyArray; var stringIndexInfo; var numberIndexInfo; var types = type.types; var mixinCount = ts.countWhere(types, isMixinConstructorType); var _loop_5 = function (i) { var t = type.types[i]; if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) { var signatures = getSignaturesOfType(t, 1); if (signatures.length && mixinCount > 0) { signatures = ts.map(signatures, function (s) { var clone = cloneSignature(s); clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i); return clone; }); } constructSignatures = ts.concatenate(constructSignatures, signatures); } 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); } function resolveAnonymousTypeMembers(type) { var symbol = type.symbol; if (type.target) { 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) { var members = getMembersOfSymbol(symbol); 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 { 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) { var classType = getDeclaredTypeOfClassOrInterface(symbol); var baseConstructorType = getBaseConstructorTypeOfClass(classType); if (baseConstructorType.flags & (131072 | 524288 | 2162688)) { members = ts.createSymbolTable(getNamedMembers(members)); addInheritedMembers(members, getPropertiesOfType(baseConstructorType)); } else if (baseConstructorType === anyType) { stringIndexInfo = createIndexInfo(anyType, false); } } var numberIndexInfo = symbol.flags & 384 ? enumNumberIndexInfo : undefined; setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo); if (symbol.flags & (16 | 8192)) { type.callSignatures = getSignaturesOfSymbol(symbol); } if (symbol.flags & 32) { var classType = getDeclaredTypeOfClassOrInterface(symbol); var constructSignatures = getSignaturesOfSymbol(symbol.members.get("__constructor")); if (!constructSignatures.length) { constructSignatures = getDefaultConstructSignatures(classType); } type.constructSignatures = constructSignatures; } } } function resolveReverseMappedTypeMembers(type) { var indexInfo = getIndexInfoOfType(type.source, 0); var modifiers = getMappedTypeModifiers(type.mappedType); 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 | (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); inferredProp.mappedType = type.mappedType; members.set(prop.escapedName, inferredProp); } setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined); } function resolveMappedTypeMembers(type) { var members = ts.createSymbolTable(); var stringIndexInfo; var numberIndexInfo; setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); var typeParameter = getTypeParameterFromMappedType(type); var constraintType = getConstraintTypeFromMappedType(type); var templateType = getTemplateTypeFromMappedType(type.target || type); var modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); var templateModifiers = getMappedTypeModifiers(type); var include = keyofStringsOnly ? 64 : 2240; if (isMappedTypeWithKeyofConstraintDeclaration(type)) { for (var _i = 0, _a = getPropertiesOfType(modifiersType); _i < _a.length; _i++) { var prop = _a[_i]; addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include), undefined, prop); } if (modifiersType.flags & 1 || getIndexInfoOfType(modifiersType, 0)) { addMemberForKeyType(stringType); } if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1)) { addMemberForKeyType(numberType); } } else { 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) { var templateMapper = combineTypeMappers(type.mapper, createTypeMapper([typeParameter], [t])); var propType = instantiateType(templateType, templateMapper); if (t.flags & 2240) { var propName = getLateBoundNameFromType(t); var modifiersProp = getPropertyOfType(modifiersType, propName); 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 ? getTypeWithFacts(propType, 131072) : propType; if (origin) { prop.syntheticOrigin = origin; prop.declarations = origin.declarations; } prop.nameType = t; members.set(propName, prop); } else if (t.flags & (1 | 4)) { stringIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1)); } else if (t.flags & 8) { numberIndexInfo = createIndexInfo(propType, !!(templateModifiers & 1)); } } } function getTypeParameterFromMappedType(type) { return type.typeParameter || (type.typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(type.declaration.typeParameter))); } function getConstraintTypeFromMappedType(type) { return type.constraintType || (type.constraintType = instantiateType(getConstraintOfTypeParameter(getTypeParameterFromMappedType(type)), type.mapper || identityMapper) || errorType); } function getTemplateTypeFromMappedType(type) { return type.templateType || (type.templateType = type.declaration.type ? 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); return constraintDeclaration.kind === 175 && constraintDeclaration.operator === 128; } function getModifiersTypeFromMappedType(type) { if (!type.modifiersType) { if (isMappedTypeWithKeyofConstraintDeclaration(type)) { type.modifiersType = instantiateType(getTypeFromTypeNode(getConstraintDeclarationForMappedType(type).type), type.mapper || identityMapper); } else { var declaredType = getTypeFromMappedTypeNode(type.declaration); var constraint = getConstraintTypeFromMappedType(declaredType); 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 ? 2 : 1 : 0) | (declaration.questionToken ? declaration.questionToken.kind === 38 ? 8 : 4 : 0); } function getMappedTypeOptionality(type) { var modifiers = getMappedTypeModifiers(type); return modifiers & 8 ? -1 : modifiers & 4 ? 1 : 0; } function getCombinedMappedTypeOptionality(type) { var optionality = getMappedTypeOptionality(type); var modifiersType = getModifiersTypeFromMappedType(type); return optionality || (isGenericMappedType(modifiersType) ? getMappedTypeOptionality(modifiersType) : 0); } function isPartialMappedType(type) { return !!(ts.getObjectFlags(type) & 32 && getMappedTypeModifiers(type) & 4); } function isGenericMappedType(type) { return !!(ts.getObjectFlags(type) & 32) && isGenericIndexType(getConstraintTypeFromMappedType(type)); } function resolveStructuredTypeMembers(type) { if (!type.members) { if (type.flags & 131072) { if (type.objectFlags & 4) { resolveTypeReferenceMembers(type); } else if (type.objectFlags & 3) { resolveClassOrInterfaceMembers(type); } else if (type.objectFlags & 2048) { resolveReverseMappedTypeMembers(type); } else if (type.objectFlags & 16) { resolveAnonymousTypeMembers(type); } else if (type.objectFlags & 32) { resolveMappedTypeMembers(type); } } else if (type.flags & 262144) { resolveUnionTypeMembers(type); } else if (type.flags & 524288) { resolveIntersectionTypeMembers(type); } } return type; } function getPropertiesOfObjectType(type) { if (type.flags & 131072) { return resolveStructuredTypeMembers(type).properties; } return ts.emptyArray; } function getPropertyOfObjectType(type, name) { if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); var symbol = resolved.members.get(name); if (symbol && symbolIsValue(symbol)) { return symbol; } } } function getPropertiesOfUnionOrIntersectionType(type) { if (!type.resolvedProperties) { var members = ts.createSymbolTable(); for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var current = _a[_i]; for (var _b = 0, _c = getPropertiesOfType(current); _b < _c.length; _b++) { var prop = _c[_b]; if (!members.has(prop.escapedName)) { var combinedProp = getPropertyOfUnionOrIntersectionType(type, prop.escapedName); if (combinedProp) { members.set(prop.escapedName, combinedProp); } } } if (type.flags & 262144) { break; } } type.resolvedProperties = getNamedMembers(members); } return type.resolvedProperties; } function getPropertiesOfType(type) { type = getApparentType(type); return type.flags & 786432 ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); } function getAllPossiblePropertiesOfTypes(types) { var unionType = getUnionType(types); if (!(unionType.flags & 262144)) { return getAugmentedPropertiesOfType(unionType); } var props = ts.createSymbolTable(); for (var _i = 0, types_3 = types; _i < types_3.length; _i++) { var memberType = types_3[_i]; for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) { var escapedName = _b[_a].escapedName; if (!props.has(escapedName)) { var prop = createUnionOrIntersectionProperty(unionType, escapedName); if (prop) props.set(escapedName, prop); } } } return ts.arrayFrom(props.values()); } function getConstraintOfType(type) { return type.flags & 65536 ? getConstraintOfTypeParameter(type) : type.flags & 2097152 ? getConstraintOfIndexedAccess(type) : type.flags & 4194304 ? getConstraintOfConditionalType(type) : getBaseConstraintOfType(type); } function getConstraintOfTypeParameter(typeParameter) { return hasNonCircularBaseConstraint(typeParameter) ? getConstraintFromTypeParameter(typeParameter) : undefined; } function getConstraintOfIndexedAccess(type) { var objectType = getBaseConstraintOfType(type.objectType) || type.objectType; var indexType = getBaseConstraintOfType(type.indexType) || type.indexType; var constraint = !isGenericObjectType(objectType) && !isGenericIndexType(indexType) ? getIndexedAccessType(objectType, indexType) : undefined; return constraint && constraint !== errorType ? constraint : undefined; } function getDefaultConstraintOfConditionalType(type) { if (!type.resolvedDefaultConstraint) { var rootTrueType = type.root.trueType; 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) { 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)) { return instantiated; } } } return undefined; } function getConstraintOfConditionalType(type) { return getConstraintOfDistributiveConditionalType(type) || getDefaultConstraintOfConditionalType(type); } function getUnionConstraintOfIntersection(type, targetIsUnion) { var constraints; var hasDisjointDomainType = false; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; if (t.flags & 15794176) { var constraint = getConstraintOfType(t); while (constraint && constraint.flags & (65536 | 1048576 | 4194304)) { constraint = getConstraintOfType(constraint); } if (constraint) { if (!(constraint.flags & 262144)) { return undefined; } constraints = ts.append(constraints, constraint); } } else if (t.flags & 16809468) { hasDisjointDomainType = true; } } if (constraints && (targetIsUnion || hasDisjointDomainType)) { if (hasDisjointDomainType) { for (var _b = 0, _c = type.types; _b < _c.length; _b++) { var t = _c[_b]; if (t.flags & 16809468) { constraints = ts.append(constraints, t); } } } return getIntersectionType(constraints); } return undefined; } function getBaseConstraintOfInstantiableNonPrimitiveUnionOrIntersection(type) { if (type.flags & (14745600 | 786432)) { var constraint = getResolvedBaseConstraint(type); if (constraint !== noConstraintType && constraint !== circularConstraintType) { return constraint; } } } function getBaseConstraintOfType(type) { var constraint = getBaseConstraintOfInstantiableNonPrimitiveUnionOrIntersection(type); if (!constraint && type.flags & 1048576) { return keyofConstraintType; } return constraint; } function getBaseConstraintOrType(type) { return getBaseConstraintOfType(type) || type; } function hasNonCircularBaseConstraint(type) { return getResolvedBaseConstraint(type) !== circularConstraintType; } function getResolvedBaseConstraint(type) { var circular; if (!type.resolvedBaseConstraint) { var constraint = getBaseConstraint(type); type.resolvedBaseConstraint = circular ? circularConstraintType : getTypeWithThisArgument(constraint || noConstraintType, type); } return type.resolvedBaseConstraint; function getBaseConstraint(t) { if (!pushTypeResolution(t, 4)) { circular = true; return undefined; } var result = computeBaseConstraint(getSimplifiedType(t)); if (!popTypeResolution()) { circular = true; return undefined; } return result; } function computeBaseConstraint(t) { if (t.flags & 65536) { var constraint = getConstraintFromTypeParameter(t); return t.isThisType || !constraint ? constraint : getBaseConstraint(constraint); } if (t.flags & 786432) { var types = t.types; var baseTypes = []; for (var _i = 0, types_4 = types; _i < types_4.length; _i++) { var type_3 = types_4[_i]; var baseType = getBaseConstraint(type_3); if (baseType) { baseTypes.push(baseType); } } return t.flags & 262144 && baseTypes.length === types.length ? getUnionType(baseTypes) : t.flags & 524288 && baseTypes.length ? getIntersectionType(baseTypes) : undefined; } if (t.flags & 1048576) { return keyofConstraintType; } 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) { var constraint = getConstraintOfConditionalType(t); return constraint && getBaseConstraint(constraint); } if (t.flags & 8388608) { return getBaseConstraint(t.substitute); } if (isGenericMappedType(t)) { return emptyObjectType; } return t; } } function getApparentTypeOfIntersectionType(type) { return type.resolvedApparentType || (type.resolvedApparentType = getTypeWithThisArgument(type, type, true)); } function getResolvedTypeParameterDefault(typeParameter) { if (!typeParameter.default) { if (typeParameter.target) { var targetDefault = getResolvedTypeParameterDefault(typeParameter.target); typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper) : noConstraintType; } else { 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) { typeParameter.default = defaultType; } } } else if (typeParameter.default === resolvingDefaultType) { typeParameter.default = circularConstraintType; } return typeParameter.default; } function getDefaultFromTypeParameter(typeParameter) { var defaultType = getResolvedTypeParameterDefault(typeParameter); return defaultType !== noConstraintType && defaultType !== circularConstraintType ? defaultType : undefined; } function hasNonCircularTypeParameterDefault(typeParameter) { return getResolvedTypeParameterDefault(typeParameter) !== circularConstraintType; } function hasTypeParameterDefault(typeParameter) { return !!(typeParameter.symbol && ts.forEach(typeParameter.symbol.declarations, function (decl) { return ts.isTypeParameterDeclaration(decl) && decl.default; })); } function getApparentType(type) { 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; 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]; var type = getApparentType(current); if (type !== errorType) { var prop = getPropertyOfType(type, name); var modifiers = prop ? ts.getDeclarationModifierFlagsFromSymbol(prop) : 0; if (prop && !(modifiers & excludeModifiers)) { commonFlags &= prop.flags; props = ts.appendIfUnique(props, prop); 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; } } else if (isUnion) { checkFlags |= 16; } } } if (!props) { return undefined; } if (props.length === 1 && !(checkFlags & 16)) { return props[0]; } var declarations; var commonType; var nameType; var propTypes = []; var first = true; var commonValueDeclaration; var hasNonUniformValueDeclaration = false; for (var _b = 0, props_1 = props; _b < props_1.length; _b++) { var prop = props_1[_b]; if (!commonValueDeclaration) { commonValueDeclaration = prop.valueDeclaration; } else if (prop.valueDeclaration !== commonValueDeclaration) { hasNonUniformValueDeclaration = true; } declarations = ts.addRange(declarations, prop.declarations); var type = getTypeOfSymbol(prop); if (first) { commonType = type; nameType = prop.nameType; first = false; } else { if (type !== commonType) { checkFlags |= 32; } } propTypes.push(type); } var result = createSymbol(4 | commonFlags, name, syntheticFlag | checkFlags); result.containingType = containingType; if (!hasNonUniformValueDeclaration && commonValueDeclaration) { result.valueDeclaration = commonValueDeclaration; } result.declarations = declarations; result.nameType = nameType; result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } function getUnionOrIntersectionProperty(type, name) { var properties = type.propertyCache || (type.propertyCache = ts.createSymbolTable()); var property = properties.get(name); if (!property) { property = createUnionOrIntersectionProperty(type, name); if (property) { properties.set(name, property); } } return property; } function getPropertyOfUnionOrIntersectionType(type, name) { var property = getUnionOrIntersectionProperty(type, name); return property && !(ts.getCheckFlags(property) & 16) ? property : undefined; } function getPropertyOfType(type, name) { type = getApparentType(type); if (type.flags & 131072) { var resolved = resolveStructuredTypeMembers(type); var symbol = resolved.members.get(name); if (symbol && symbolIsValue(symbol)) { return symbol; } if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { var symbol_1 = getPropertyOfObjectType(globalFunctionType, name); if (symbol_1) { return symbol_1; } } return getPropertyOfObjectType(globalObjectType, name); } if (type.flags & 786432) { return getPropertyOfUnionOrIntersectionType(type, name); } return undefined; } function getSignaturesOfStructuredType(type, kind) { if (type.flags & 917504) { var resolved = resolveStructuredTypeMembers(type); return kind === 0 ? resolved.callSignatures : resolved.constructSignatures; } return ts.emptyArray; } function getSignaturesOfType(type, kind) { return getSignaturesOfStructuredType(getApparentType(type), kind); } function getIndexInfoOfStructuredType(type, kind) { if (type.flags & 917504) { var resolved = resolveStructuredTypeMembers(type); return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo; } } function getIndexTypeOfStructuredType(type, kind) { var info = getIndexInfoOfStructuredType(type, kind); return info && info.type; } function getIndexInfoOfType(type, kind) { return getIndexInfoOfStructuredType(getApparentType(type), kind); } function getIndexTypeOfType(type, kind) { return getIndexTypeOfStructuredType(getApparentType(type), kind); } function getImplicitIndexTypeOfType(type, kind) { if (isObjectTypeWithInferableIndex(type)) { var propTypes = []; for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) { var prop = _a[_i]; if (kind === 0 || isNumericLiteralName(prop.escapedName)) { propTypes.push(getTypeOfSymbol(prop)); } } if (propTypes.length) { return getUnionType(propTypes, 2); } } return undefined; } function getTypeParametersFromDeclaration(declaration) { var result; for (var _i = 0, _a = ts.getEffectiveTypeParameterDeclarations(declaration); _i < _a.length; _i++) { var node = _a[_i]; result = ts.appendIfUnique(result, getDeclaredTypeOfTypeParameter(node.symbol)); } return result; } function symbolsToArray(symbols) { var result = []; symbols.forEach(function (symbol, id) { if (!isReservedMemberName(id)) { result.push(symbol); } }); return result; } function isJSDocOptionalParameter(node) { 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; })); } function tryFindAmbientModule(moduleName, withAugmentations) { if (ts.isExternalModuleNameRelative(moduleName)) { return undefined; } var symbol = getSymbol(globals, '"' + moduleName + '"', 512); return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol; } function isOptionalParameter(node) { if (ts.hasQuestionToken(node) || isOptionalJSDocParameterTag(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { var signature = getSignatureFromDeclaration(node.parent); var parameterIndex = node.parent.parameters.indexOf(node); ts.Debug.assert(parameterIndex >= 0); return parameterIndex >= signature.minArgumentCount; } var iife = ts.getImmediatelyInvokedFunctionExpression(node.parent); if (iife) { return !node.type && !node.dotDotDotToken && node.parent.parameters.indexOf(node) >= iife.arguments.length; } return false; } function isOptionalJSDocParameterTag(node) { if (!ts.isJSDocParameterTag(node)) { return false; } var isBracketed = node.isBracketed, typeExpression = node.typeExpression; return isBracketed || !!typeExpression && typeExpression.type.kind === 283; } function createTypePredicateFromTypePredicateNode(node) { var parameterName = node.parameterName; var type = getTypeFromTypeNode(node.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, parameterName: parameterName, parameterIndex: parameterIndex, type: type }; } function createThisTypePredicate(type) { return { kind: 0, type: type }; } function getMinTypeArgumentCount(typeParameters) { var minTypeArgumentCount = 0; if (typeParameters) { for (var i = 0; i < typeParameters.length; i++) { if (!hasTypeParameterDefault(typeParameters[i])) { minTypeArgumentCount = i + 1; } } } return minTypeArgumentCount; } function fillMissingTypeArguments(typeArguments, typeParameters, minTypeArgumentCount, isJavaScriptImplicitAny) { var numTypeParameters = ts.length(typeParameters); if (numTypeParameters) { var numTypeArguments = ts.length(typeArguments); if (isJavaScriptImplicitAny || (numTypeArguments >= minTypeArgumentCount && numTypeArguments <= numTypeParameters)) { if (!typeArguments) { typeArguments = []; } for (var i = numTypeArguments; i < numTypeParameters; i++) { typeArguments[i] = getDefaultTypeArgumentType(isJavaScriptImplicitAny); } for (var i = numTypeArguments; i < numTypeParameters; i++) { var mapper = createTypeMapper(typeParameters, typeArguments); var defaultType = getDefaultFromTypeParameter(typeParameters[i]); if (isJavaScriptImplicitAny && defaultType && isTypeIdenticalTo(defaultType, emptyObjectType)) { defaultType = anyType; } typeArguments[i] = defaultType ? instantiateType(defaultType, mapper) : getDefaultTypeArgumentType(isJavaScriptImplicitAny); } typeArguments.length = typeParameters.length; } } return typeArguments; } function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { var parameters = []; var hasLiteralTypes = false; var minArgumentCount = 0; var thisParameter = void 0; var hasThisParameter = false; var iife = ts.getImmediatelyInvokedFunctionExpression(declaration); var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); var isUntypedSignatureInJSFile = !iife && ts.isInJavaScriptFile(declaration) && ts.isValueSignatureDeclaration(declaration) && !ts.hasJSDocParameterTags(declaration) && !ts.getJSDocType(declaration); 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; 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") { hasThisParameter = true; thisParameter = param.symbol; } else { parameters.push(paramSymbol); } if (type && type.kind === 178) { hasLiteralTypes = true; } var isOptionalParameter_1 = isOptionalJSDocParameterTag(param) || param.initializer || param.questionToken || param.dotDotDotToken || iife && parameters.length > iife.arguments.length && !type || isUntypedSignatureInJSFile || isJSDocOptionalParameter(param); if (!isOptionalParameter_1) { minArgumentCount = parameters.length; } } if ((declaration.kind === 156 || declaration.kind === 157) && !hasNonBindableDynamicName(declaration) && (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 156 ? 157 : 156; var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind); if (other) { thisParameter = getAnnotatedAccessorThisParameter(other); } } 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, undefined, minArgumentCount, hasRestLikeParameter, hasLiteralTypes); } return links.resolvedSignature; } function maybeAddJsSyntheticRestParameter(declaration, parameters) { if (ts.isJSDocSignature(declaration) || !containsArgumentsReference(declaration)) { return false; } var lastParam = ts.lastOrUndefined(declaration.parameters); var lastParamTags = lastParam ? ts.getJSDocParameterTags(lastParam) : ts.getJSDocTags(declaration).filter(ts.isJSDocParameterTag); var lastParamVariadicType = ts.firstDefined(lastParamTags, function (p) { return p.typeExpression && ts.isJSDocVariadicType(p.typeExpression.type) ? p.typeExpression.type : undefined; }); var syntheticArgsSymbol = createSymbol(3, "args"); syntheticArgsSymbol.type = lastParamVariadicType ? createArrayType(getTypeFromTypeNode(lastParamVariadicType.type)) : anyArrayType; syntheticArgsSymbol.isRestParameter = true; if (lastParamVariadicType) { parameters.pop(); } parameters.push(syntheticArgsSymbol); return true; } function getSignatureReturnTypeFromDeclaration(declaration, isJSConstructSignature, classType) { if (isJSConstructSignature) { return getTypeFromTypeNode(declaration.parameters[0].type); } else if (classType) { return classType; } var typeNode = ts.getEffectiveReturnTypeNode(declaration); if (typeNode) { return getTypeFromTypeNode(typeNode); } if (declaration.kind === 156 && !hasNonBindableDynamicName(declaration)) { var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 157); return getAnnotatedAccessorType(setter); } if (ts.nodeIsMissing(declaration.body)) { return anyType; } } function containsArgumentsReference(declaration) { var links = getNodeLinks(declaration); if (links.containsArgumentsReference === undefined) { if (links.flags & 8192) { links.containsArgumentsReference = true; } else { links.containsArgumentsReference = traverse(declaration.body); } } return links.containsArgumentsReference; function traverse(node) { if (!node) return false; switch (node.kind) { case 71: return node.escapedText === "arguments" && ts.isExpressionNode(node); 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); } } } function getSignaturesOfSymbol(symbol) { if (!symbol) return ts.emptyArray; var result = []; for (var i = 0; i < symbol.declarations.length; i++) { var decl = symbol.declarations[i]; if (!ts.isFunctionLike(decl)) continue; if (i > 0 && decl.body) { var previous = symbol.declarations[i - 1]; if (decl.parent === previous.parent && decl.kind === previous.kind && decl.pos === previous.end) { continue; } } result.push(getSignatureFromDeclaration(decl)); } return result; } function resolveExternalModuleTypeByLiteral(name) { var moduleSym = resolveExternalModuleName(name, name); if (moduleSym) { var resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); if (resolvedModuleSymbol) { return getTypeOfSymbol(resolvedModuleSymbol); } } return anyType; } function getThisTypeOfSignature(signature) { if (signature.thisParameter) { return getTypeOfSymbol(signature.thisParameter); } } function signatureHasTypePredicate(signature) { return getTypePredicateOfSignature(signature) !== undefined; } function getTypePredicateOfSignature(signature) { if (!signature.resolvedTypePredicate) { if (signature.target) { var targetTypePredicate = getTypePredicateOfSignature(signature.target); signature.resolvedTypePredicate = targetTypePredicate ? instantiateTypePredicate(targetTypePredicate, signature.mapper) : noTypePredicate; } else if (signature.unionSignatures) { signature.resolvedTypePredicate = getUnionTypePredicate(signature.unionSignatures) || noTypePredicate; } else { var declaration = signature.declaration; signature.resolvedTypePredicate = declaration && declaration.type && declaration.type.kind === 161 ? createTypePredicateFromTypePredicateNode(declaration.type) : noTypePredicate; } ts.Debug.assert(!!signature.resolvedTypePredicate); } return signature.resolvedTypePredicate === noTypePredicate ? undefined : signature.resolvedTypePredicate; } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3)) { return errorType; } var type = void 0; if (signature.target) { type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); } else if (signature.unionSignatures) { type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature), 2); } else { type = getReturnTypeFromBody(signature.declaration); } if (!popTypeResolution()) { type = anyType; if (noImplicitAny) { var declaration = signature.declaration; var name = ts.getNameOfDeclaration(declaration); if (name) { error(name, 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, ts.declarationNameToString(name)); } else { error(declaration, ts.Diagnostics.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); } } } signature.resolvedReturnType = type; } return signature.resolvedReturnType; } function isResolvingReturnTypeOfSignature(signature) { 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 && type.target === globalArrayType) { return type.typeArguments[0]; } } return anyType; } function getSignatureInstantiation(signature, typeArguments, isJavascript) { typeArguments = fillMissingTypeArguments(typeArguments, signature.typeParameters, getMinTypeArgumentCount(signature.typeParameters), isJavascript); var instantiations = signature.instantiations || (signature.instantiations = ts.createMap()); var id = getTypeListId(typeArguments); var instantiation = instantiations.get(id); if (!instantiation) { instantiations.set(id, instantiation = createSignatureInstantiation(signature, typeArguments)); } return instantiation; } function createSignatureInstantiation(signature, typeArguments) { return instantiateSignature(signature, createSignatureTypeMapper(signature, typeArguments), true); } function createSignatureTypeMapper(signature, typeArguments) { return createTypeMapper(signature.typeParameters, typeArguments); } function getErasedSignature(signature) { return signature.typeParameters ? signature.erasedSignatureCache || (signature.erasedSignatureCache = createErasedSignature(signature)) : signature; } function createErasedSignature(signature) { return instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); } function getCanonicalSignature(signature) { return signature.typeParameters ? signature.canonicalSignatureCache || (signature.canonicalSignatureCache = createCanonicalSignature(signature)) : signature; } function createCanonicalSignature(signature) { 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) { var typeParameters = signature.typeParameters; 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), true); } return signature; } function getOrCreateTypeFromSignature(signature) { if (!signature.isolatedSignatureType) { 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; type.constructSignatures = isConstructor ? [signature] : ts.emptyArray; signature.isolatedSignatureType = type; } return signature.isolatedSignatureType; } function getIndexSymbol(symbol) { return symbol.members.get("__index"); } function getIndexDeclarationOfSymbol(symbol, kind) { var syntaxKind = kind === 1 ? 134 : 137; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; var node = ts.cast(decl, ts.isIndexSignatureDeclaration); if (node.parameters.length === 1) { var parameter = node.parameters[0]; if (parameter.type && parameter.type.kind === syntaxKind) { return node; } } } } return undefined; } function createIndexInfo(type, isReadonly, declaration) { return { type: type, isReadonly: isReadonly, declaration: declaration }; } function getIndexInfoOfSymbol(symbol, kind) { var declaration = getIndexDeclarationOfSymbol(symbol, kind); if (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); return decl && decl.constraint; } function getInferredTypeParameterConstraint(typeParameter) { var inferences; if (typeParameter.symbol) { for (var _i = 0, _a = typeParameter.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (declaration.parent.kind === 172 && declaration.parent.parent.kind === 162) { var typeReference = declaration.parent.parent; var typeParameters = getTypeParametersForTypeReference(typeReference); if (typeParameters) { var index = typeReference.typeArguments.indexOf(declaration.parent); if (index < typeParameters.length) { var declaredConstraint = getConstraintOfTypeParameter(typeParameters[index]); if (declaredConstraint) { var mapper = createTypeMapper(typeParameters, getEffectiveTypeArguments(typeReference, typeParameters)); var constraint = instantiateType(declaredConstraint, mapper); if (constraint !== typeParameter) { inferences = ts.append(inferences, constraint); } } } } } } } return inferences && getIntersectionType(inferences); } function getConstraintFromTypeParameter(typeParameter) { if (!typeParameter.constraint) { if (typeParameter.target) { var targetConstraint = getConstraintOfTypeParameter(typeParameter.target); typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType; } else { var constraintDeclaration = getConstraintDeclaration(typeParameter); typeParameter.constraint = constraintDeclaration ? getTypeFromTypeNode(constraintDeclaration) : getInferredTypeParameterConstraint(typeParameter) || noConstraintType; } } return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 148).parent); } function getTypeListId(types) { var result = ""; if (types) { var length_3 = types.length; var i = 0; while (i < length_3) { var startId = types[i].id; var count = 1; while (i + count < length_3 && types[i + count].id === startId + count) { count++; } if (result.length) { result += ","; } result += startId; if (count > 1) { result += ":" + count; } i += count; } } return result; } function getPropagatingFlagsOfTypes(types, excludeKinds) { var result = 0; for (var _i = 0, types_5 = types; _i < types_5.length; _i++) { var type = types_5[_i]; if (!(type.flags & excludeKinds)) { result |= type.flags; } } return result & 939524096; } function createTypeReference(target, typeArguments) { var id = getTypeListId(typeArguments); var type = target.instantiations.get(id); if (!type) { type = createObjectType(4, target.symbol); target.instantiations.set(id, type); type.flags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments, 0) : 0; type.target = target; type.typeArguments = typeArguments; } return type; } function cloneTypeReference(source) { var type = createType(source.flags); type.symbol = source.symbol; type.objectFlags = source.objectFlags; type.target = source.target; type.typeArguments = source.typeArguments; return type; } function getTypeReferenceArity(type) { return ts.length(type.target.typeParameters); } function getTypeFromClassOrInterfaceReference(node, symbol, typeArgs) { var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); var typeParameters = type.localTypeParameters; if (typeParameters) { var numTypeArguments = ts.length(node.typeArguments); var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters); var isJs = ts.isInJavaScriptFile(node); var isJsImplicitAny = !noImplicitAny && isJs; if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) { 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 : ts.Diagnostics.Generic_type_0_requires_1_type_argument_s : 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, undefined, 2); error(node, diag, typeStr, minTypeArgumentCount, typeParameters.length); if (!isJs) { return errorType; } } var typeArguments = ts.concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgs, typeParameters, minTypeArgumentCount, isJs)); return createTypeReference(type, typeArguments); } return checkNoTypeArguments(node, symbol) ? type : errorType; } function getTypeAliasInstantiation(symbol, typeArguments) { var type = getDeclaredTypeOfSymbol(symbol); var links = getSymbolLinks(symbol); var typeParameters = links.typeParameters; var id = getTypeListId(typeArguments); var instantiation = links.instantiations.get(id); if (!instantiation) { links.instantiations.set(id, instantiation = instantiateType(type, createTypeMapper(typeParameters, fillMissingTypeArguments(typeArguments, typeParameters, getMinTypeArgumentCount(typeParameters), ts.isInJavaScriptFile(symbol.valueDeclaration))))); } return instantiation; } function getTypeFromTypeAliasReference(node, symbol, typeArguments) { var type = getDeclaredTypeOfSymbol(symbol); var typeParameters = getSymbolLinks(symbol).typeParameters; if (typeParameters) { var numTypeArguments = ts.length(node.typeArguments); var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters); if (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length) { error(node, minTypeArgumentCount === typeParameters.length ? ts.Diagnostics.Generic_type_0_requires_1_type_argument_s : ts.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, symbolToString(symbol), minTypeArgumentCount, typeParameters.length); return errorType; } return getTypeAliasInstantiation(symbol, typeArguments); } return checkNoTypeArguments(node, symbol) ? type : errorType; } function getTypeReferenceName(node) { switch (node.kind) { case 162: return node.typeName; case 207: var expr = node.expression; if (ts.isEntityNameExpression(expr)) { return expr; } } return undefined; } function resolveTypeReferenceName(typeReferenceName, meaning) { if (!typeReferenceName) { return unknownSymbol; } return resolveEntityName(typeReferenceName, meaning) || unknownSymbol; } function getTypeReferenceType(node, symbol) { var typeArguments = typeArgumentsFromTypeReferenceNode(node); if (symbol === unknownSymbol) { return errorType; } var type = getTypeReferenceTypeWorker(node, symbol, typeArguments); if (type) { return type; } var res = tryGetDeclaredTypeOfSymbol(symbol); if (res) { return checkNoTypeArguments(node, symbol) ? res.flags & 65536 ? getConstrainedTypeVariable(res, node) : res : errorType; } if (!(symbol.flags & 67216319 && isJSDocTypeReference(node))) { return errorType; } var jsdocType = getJSDocTypeReference(node, symbol, typeArguments); if (jsdocType) { return jsdocType; } resolveTypeReferenceName(getTypeReferenceName(node), 67901928); return getTypeOfSymbol(symbol); } 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) { return (referenceType && assignedType ? getIntersectionType([assignedType, referenceType]) : referenceType || assignedType); } } function getTypeReferenceTypeWorker(node, symbol, typeArguments) { if (symbol.flags & (32 | 64)) { if (symbol.valueDeclaration && ts.isBinaryExpression(symbol.valueDeclaration.parent)) { var jsdocType = getJSDocTypeReference(node, symbol, typeArguments); if (jsdocType) { return jsdocType; } } return getTypeFromClassOrInterfaceReference(node, symbol, typeArguments); } if (symbol.flags & 524288) { return getTypeFromTypeAliasReference(node, symbol, typeArguments); } if (symbol.flags & 16 && isJSDocTypeReference(node) && (symbol.members || ts.getJSDocClassTag(symbol.valueDeclaration))) { return getInferredClassType(symbol); } } function getSubstitutionType(typeVariable, substitute) { var result = createType(8388608); result.typeVariable = typeVariable; result.substitute = substitute; return result; } function isUnaryTupleTypeNode(node) { 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]) : getActualTypeVariable(getTypeFromTypeNode(checkNode)) === typeVariable ? getTypeFromTypeNode(extendsNode) : undefined; } function getConstrainedTypeVariable(typeVariable, node) { var constraints; while (node && !ts.isStatement(node) && node.kind !== 286) { var parent = node.parent; if (parent.kind === 171 && node === parent.trueType) { var constraint = getImpliedConstraint(typeVariable, parent.checkType, parent.extendsType); if (constraint) { constraints = ts.append(constraints, constraint); } } node = parent; } return constraints ? getSubstitutionType(typeVariable, getIntersectionType(ts.append(constraints, typeVariable))) : typeVariable; } function isJSDocTypeReference(node) { return !!(node.flags & 2097152) && node.kind === 162; } function checkNoTypeArguments(node, symbol) { if (node.typeArguments) { error(node, ts.Diagnostics.Type_0_is_not_generic, symbol ? symbolToString(symbol) : node.typeName ? ts.declarationNameToString(node.typeName) : "(anonymous)"); return false; } return true; } function getIntendedTypeFromJSDocTypeReference(node) { if (ts.isIdentifier(node.typeName)) { var typeArgs = node.typeArguments; switch (node.typeName.escapedText) { case "String": checkNoTypeArguments(node); return stringType; case "Number": checkNoTypeArguments(node); return numberType; case "Boolean": checkNoTypeArguments(node); return booleanType; case "Void": checkNoTypeArguments(node); return voidType; case "Undefined": checkNoTypeArguments(node); return undefinedType; case "Null": checkNoTypeArguments(node); return nullType; case "Function": case "function": checkNoTypeArguments(node); return globalFunctionType; case "Array": case "array": return !typeArgs || !typeArgs.length ? anyArrayType : undefined; case "Promise": case "promise": return !typeArgs || !typeArgs.length ? createPromiseType(anyType) : undefined; case "Object": if (typeArgs && typeArgs.length === 2) { if (ts.isJSDocIndexSignature(node)) { var indexed = getTypeFromTypeNode(typeArgs[0]); var target = getTypeFromTypeNode(typeArgs[1]); var index = createIndexInfo(target, false); return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined); } return anyType; } checkNoTypeArguments(node); return anyType; } } } function getTypeFromJSDocNullableTypeNode(node) { var type = getTypeFromTypeNode(node.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; if (isJSDocTypeReference(node)) { type = getIntendedTypeFromJSDocTypeReference(node); meaning |= 67216319; } if (!type) { symbol = resolveTypeReferenceName(getTypeReferenceName(node), meaning); type = getTypeReferenceType(node, symbol); } links.resolvedSymbol = symbol; links.resolvedType = type; } return links.resolvedType; } function typeArgumentsFromTypeReferenceNode(node) { return ts.map(node.typeArguments, getTypeFromTypeNode); } function getTypeFromTypeQueryNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = getWidenedType(checkExpression(node.exprName)); } return links.resolvedType; } function getTypeOfGlobalSymbol(symbol, arity) { function getTypeDeclaration(symbol) { var declarations = symbol.declarations; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { case 235: case 236: case 238: return declaration; } } } if (!symbol) { return arity ? emptyGenericType : emptyObjectType; } var type = getDeclaredTypeOfSymbol(symbol); 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; } if (ts.length(type.typeParameters) !== arity) { error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, ts.symbolName(symbol), arity); return arity ? emptyGenericType : emptyObjectType; } return type; } function getGlobalValueSymbol(name, reportErrors) { return getGlobalSymbol(name, 67216319, reportErrors ? ts.Diagnostics.Cannot_find_global_value_0 : undefined); } function getGlobalTypeSymbol(name, reportErrors) { return getGlobalSymbol(name, 67901928, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined); } function getGlobalSymbol(name, meaning, diagnostic) { 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", 1, true)) || emptyGenericType; } function getGlobalTemplateStringsArrayType() { return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray", 0, true)) || emptyObjectType; } function getGlobalImportMetaType() { 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", 0, reportErrors)) || emptyObjectType; } function getGlobalPromiseType(reportErrors) { 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", 0, reportErrors)) || emptyObjectType; } function getGlobalAsyncIterableType(reportErrors) { return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType("AsyncIterable", 1, reportErrors)) || emptyGenericType; } function getGlobalAsyncIteratorType(reportErrors) { return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalAsyncIterableIteratorType(reportErrors) { return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalIterableType(reportErrors) { return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable", 1, reportErrors)) || emptyGenericType; } function getGlobalIteratorType(reportErrors) { return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator", 1, reportErrors)) || emptyGenericType; } function getGlobalIterableIteratorType(reportErrors) { return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator", 1, reportErrors)) || emptyGenericType; } function getGlobalTypeOrUndefined(name, arity) { if (arity === void 0) { arity = 0; } var symbol = getGlobalSymbol(name, 67901928, undefined); return symbol && getTypeOfGlobalSymbol(symbol, arity); } function getGlobalExtractSymbol() { return deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalSymbol("Extract", 524288, ts.Diagnostics.Cannot_find_global_type_0)); } function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) { return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType; } function createTypedPropertyDescriptorType(propertyType) { return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]); } function createAsyncIterableType(iteratedType) { return createTypeFromGenericGlobalType(getGlobalAsyncIterableType(true), [iteratedType]); } function createAsyncIterableIteratorType(iteratedType) { return createTypeFromGenericGlobalType(getGlobalAsyncIterableIteratorType(true), [iteratedType]); } function createIterableType(iteratedType) { return createTypeFromGenericGlobalType(getGlobalIterableType(true), [iteratedType]); } function createIterableIteratorType(iteratedType) { return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(true), [iteratedType]); } function createArrayType(elementType) { return createTypeFromGenericGlobalType(globalArrayType, [elementType]); } function getTypeFromArrayTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType)); } return links.resolvedType; } function createTupleTypeOfArity(arity) { var typeParameters = []; var properties = []; for (var i = 0; i < arity; i++) { var typeParameter = createType(65536); typeParameters.push(typeParameter); var property = createSymbol(4, "" + i); property.type = typeParameter; properties.push(property); } var lengthSymbol = createSymbol(4, "length"); lengthSymbol.type = getLiteralType(arity); properties.push(lengthSymbol); var type = createObjectType(8 | 4); type.typeParameters = typeParameters; type.outerTypeParameters = undefined; type.localTypeParameters = typeParameters; type.instantiations = ts.createMap(); type.instantiations.set(getTypeListId(type.typeParameters), type); type.target = type; type.typeArguments = type.typeParameters; type.thisType = createType(65536); type.thisType.isThisType = true; type.thisType.constraint = type; type.declaredProperties = properties; type.declaredCallSignatures = ts.emptyArray; type.declaredConstructSignatures = ts.emptyArray; type.declaredStringIndexInfo = undefined; type.declaredNumberIndexInfo = undefined; return type; } function getTupleTypeOfArity(arity) { return tupleTypes[arity] || (tupleTypes[arity] = createTupleTypeOfArity(arity)); } function createTupleType(elementTypes) { return createTypeReference(getTupleTypeOfArity(elementTypes.length), elementTypes); } function getTypeFromTupleTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode)); } return links.resolvedType; } function getTypeId(type) { return type.id; } function containsType(types, type) { return ts.binarySearch(types, type, getTypeId, ts.compareValues) >= 0; } 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 && combined & 27072) { return true; } combined |= t.flags; 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; } } return false; } function addTypeToUnion(typeSet, includes, type) { var flags = type.flags; if (flags & 262144) { return addTypesToUnion(typeSet, includes, type.types); } if (!(flags & 32768 || flags & 524288 && isEmptyIntersectionType(type))) { includes |= flags & ~939524096; if (flags & 3) { if (type === wildcardType) includes |= 268435456; } 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 && type.objectFlags & 16 && type.symbol && type.symbol.flags & (16 | 8192) && containsIdenticalType(typeSet, type))) { typeSet.splice(~index, 0, type); } } } } return includes; } function addTypesToUnion(typeSet, includes, types) { for (var _i = 0, types_6 = types; _i < types_6.length; _i++) { var type = types_6[_i]; includes = addTypeToUnion(typeSet, includes, type); } return includes; } function containsIdenticalType(types, type) { for (var _i = 0, types_7 = types; _i < types_7.length; _i++) { var t = types_7[_i]; if (isTypeIdenticalTo(t, type)) { return true; } } return false; } 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) || !(ts.getObjectFlags(getTargetType(target)) & 1) || isTypeDerivedFrom(source, target))) { return true; } } return false; } function isSetOfLiteralsFromSameEnum(types) { var first = types[0]; 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) || (firstEnum !== getParentOfSymbol(other.symbol))) { return false; } } return true; } return false; } function removeSubtypes(types) { if (types.length === 0 || isSetOfLiteralsFromSameEnum(types)) { return; } var i = types.length; while (i > 0) { i--; if (isSubtypeOfAny(types[i], types)) { ts.orderedRemoveItemAt(types, i); } } } function removeRedundantLiteralTypes(types, includes) { var i = types.length; while (i > 0) { i--; var t = types[i]; 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); } } } function getUnionType(types, unionReduction, aliasSymbol, aliasTypeArguments) { if (unionReduction === void 0) { unionReduction = 1; } if (types.length === 0) { return neverType; } if (types.length === 1) { return types[0]; } var typeSet = []; var includes = addTypesToUnion(typeSet, 0, types); if (includes & 3) { return includes & 1 ? includes & 268435456 ? wildcardType : anyType : unknownType; } switch (unionReduction) { case 1: if (includes & 2240) { removeRedundantLiteralTypes(typeSet, includes); } break; case 2: removeSubtypes(typeSet); break; } if (typeSet.length === 0) { return includes & 16384 ? includes & 134217728 ? nullType : nullWideningType : includes & 8192 ? includes & 134217728 ? undefinedType : undefinedWideningType : neverType; } return getUnionTypeFromSortedList(typeSet, includes & 16749629 ? 0 : 67108864, aliasSymbol, aliasTypeArguments); } function getUnionTypePredicate(signatures) { var first; var types = []; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var sig = signatures_2[_i]; var pred = getTypePredicateOfSignature(sig); if (!pred) { continue; } if (first) { if (!typePredicateKindsMatch(first, pred)) { return undefined; } } else { first = pred; } types.push(pred.type); } if (!first) { return undefined; } var unionType = getUnionType(types); return ts.isIdentifierTypePredicate(first) ? createIdentifierTypePredicate(first.parameterName, first.parameterIndex, unionType) : createThisTypePredicate(unionType); } function typePredicateKindsMatch(a, b) { return ts.isIdentifierTypePredicate(a) ? ts.isIdentifierTypePredicate(b) && a.parameterIndex === b.parameterIndex : !ts.isIdentifierTypePredicate(b); } function getUnionTypeFromSortedList(types, unionOfUnitTypes, aliasSymbol, aliasTypeArguments) { if (types.length === 0) { return neverType; } if (types.length === 1) { return types[0]; } var id = getTypeListId(types); var type = unionTypes.get(id); if (!type) { var propagatedFlags = getPropagatingFlagsOfTypes(types, 24576); type = createType(262144 | propagatedFlags | unionOfUnitTypes); unionTypes.set(id, type); type.types = types; type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = aliasTypeArguments; } return type; } function getTypeFromUnionTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var aliasSymbol = getAliasSymbolForTypeNode(node); 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) { return addTypesToIntersection(typeSet, includes, type.types); } if (ts.getObjectFlags(type) & 16 && isEmptyObjectType(type)) { includes |= 536870912; } else { includes |= flags & ~939524096; if (flags & 3) { if (type === wildcardType) includes |= 268435456; } 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; } function addTypesToIntersection(typeSet, includes, types) { for (var _i = 0, types_8 = types; _i < types_8.length; _i++) { var type = types_8[_i]; includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type)); } return includes; } function removeRedundantPrimitiveTypes(types, includes) { var i = types.length; while (i > 0) { i--; var t = types[i]; var remove = t.flags & 4 && includes & 64 || t.flags & 8 && includes & 128 || t.flags & 1024 && includes & 2048; if (remove) { ts.orderedRemoveItemAt(types, i); } } } function intersectUnionsOfUnitTypes(types) { 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) { intersection = ts.filter(intersection, function (u) { return containsType(t.types, u); }); ts.orderedRemoveItemAt(types, i); } i--; }; while (i > unionIndex) { _loop_6(); } if (intersection === unionType.types) { return false; } types[unionIndex] = getUnionTypeFromSortedList(intersection, unionType.flags & 67108864); return true; } function getIntersectionType(types, aliasSymbol, aliasTypeArguments) { var typeSet = []; var includes = addTypesToIntersection(typeSet, 0, types); if (includes & 32768) { return neverType; } if (includes & 1) { return includes & 268435456 ? wildcardType : anyType; } if (!strictNullChecks && includes & 24576) { return includes & 8192 ? undefinedType : nullType; } if (includes & 4 && includes & 64 || includes & 8 && includes & 128 || includes & 1024 && includes & 2048) { removeRedundantPrimitiveTypes(typeSet, includes); } if (includes & 536870912 && !(includes & 131072)) { typeSet.push(emptyObjectType); } if (typeSet.length === 0) { return unknownType; } if (typeSet.length === 1) { return typeSet[0]; } if (includes & 262144) { if (includes & 67108864 && intersectUnionsOfUnitTypes(typeSet)) { return getIntersectionType(typeSet, aliasSymbol, aliasTypeArguments); } 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, aliasSymbol, aliasTypeArguments); } var id = getTypeListId(typeSet); var type = intersectionTypes.get(id); if (!type) { var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 24576); type = createType(524288 | propagatedFlags); intersectionTypes.set(id, type); type.types = typeSet; type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = aliasTypeArguments; } return type; } function getTypeFromIntersectionTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var aliasSymbol = getAliasSymbolForTypeNode(node); links.resolvedType = getIntersectionType(ts.map(node.types, getTypeFromTypeNode), aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); } return links.resolvedType; } function createIndexType(type, stringsOnly) { var result = createType(1048576); result.type = type; result.stringsOnly = stringsOnly; return result; } function getIndexTypeForGenericType(type, stringsOnly) { return stringsOnly ? type.resolvedStringIndexType || (type.resolvedStringIndexType = createIndexType(type, true)) : type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, false)); } function getLiteralTypeFromPropertyName(prop, include) { 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 && ts.isNumericLiteral(name.expression) ? getLiteralType(+name.expression.text) : getLiteralType(ts.symbolName(prop)); } if (type && type.flags & include) { return type; } } return neverType; } function getLiteralTypeFromPropertyNames(type, include) { return getUnionType(ts.map(getPropertiesOfType(type), function (t) { return getLiteralTypeFromPropertyName(t, include); })); } function getNonEnumNumberIndexInfo(type) { var numberIndexInfo = getIndexInfoOfType(type, 1); return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined; } function getIndexType(type, stringsOnly) { if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; } 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 ? 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) { return type; } var extractTypeAlias = getGlobalExtractSymbol(); return extractTypeAlias ? getTypeAliasInstantiation(extractTypeAlias, [type, stringType]) : stringType; } function getIndexTypeOrString(type) { var indexType = getExtractStringType(getIndexType(type)); return indexType.flags & 32768 ? stringType : indexType; } function getTypeFromTypeOperatorNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { switch (node.operator) { case 128: links.resolvedType = getIndexType(getTypeFromTypeNode(node.type)); break; case 141: links.resolvedType = node.type.kind === 138 ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent)) : errorType; break; } } return links.resolvedType; } function createIndexedAccessType(objectType, indexType) { var type = createType(2097152); type.objectType = objectType; type.indexType = indexType; return type; } function getPropertyTypeForIndexType(objectType, indexType, accessNode, cacheSymbol) { var accessExpression = accessNode && accessNode.kind === 186 ? accessNode : undefined; var propName = isTypeUsableAsLateBoundName(indexType) ? getLateBoundNameFromType(indexType) : 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, 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; } if (cacheSymbol) { getNodeLinks(accessNode).resolvedSymbol = prop; } } return getTypeOfSymbol(prop); } } if (!(indexType.flags & 24576) && isTypeAssignableToKind(indexType, 68 | 168 | 3072)) { if (isTypeAny(objectType)) { return objectType; } var indexInfo = isTypeAssignableToKind(indexType, 168) && getIndexInfoOfType(objectType, 1) || getIndexInfoOfType(objectType, 0) || undefined; if (indexInfo) { 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))) { error(accessExpression, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType)); } return indexInfo.type; } if (indexType.flags & 32768) { return neverType; } if (accessExpression && !isConstEnumObjectType(objectType)) { if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors) { if (getIndexTypeOfType(objectType, 1)) { error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number); } else { error(accessExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature, typeToString(objectType)); } } return anyType; } } if (accessNode) { 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 | 8)) { error(indexNode, ts.Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); } else { error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); } } return errorType; } function isGenericObjectType(type) { return maybeTypeOfKind(type, 14745600 | 134217728); } function isGenericIndexType(type) { return maybeTypeOfKind(type, 14745600 | 1048576); } function isStringIndexOnlyType(type) { if (type.flags & 131072 && !isGenericMappedType(type)) { var t = resolveStructuredTypeMembers(type); return t.properties.length === 0 && t.callSignatures.length === 0 && t.constructSignatures.length === 0 && !!t.stringIndexInfo && !t.numberIndexInfo; } return false; } function isMappedTypeToNever(type) { return !!(ts.getObjectFlags(type) & 32) && getTemplateTypeFromMappedType(type) === neverType; } function getSimplifiedType(type) { return type.flags & 2097152 ? getSimplifiedIndexedAccessType(type) : type; } function getSimplifiedIndexedAccessType(type) { if (type.simplified) { return type.simplified === circularConstraintType ? type : type.simplified; } type.simplified = circularConstraintType; var objectType = getSimplifiedType(type.objectType); 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)); } else { regularTypes.push(t); } } return type.simplified = getUnionType([ getSimplifiedType(getIndexedAccessType(getIntersectionType(regularTypes), type.indexType)), getIntersectionType(stringIndexTypes) ]); } 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 (isGenericMappedType(objectType)) { return type.simplified = substituteIndexedMappedType(objectType, type); } if (objectType.flags & 65536) { var constraint = getConstraintFromTypeParameter(objectType); if (constraint && isGenericMappedType(constraint)) { return type.simplified = substituteIndexedMappedType(constraint, type); } } return type.simplified = type; } function substituteIndexedMappedType(objectType, type) { var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]); var templateMapper = combineTypeMappers(objectType.mapper, mapper); return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper); } function getIndexedAccessType(objectType, indexType, accessNode) { if (objectType === wildcardType || indexType === wildcardType) { return wildcardType; } if (isGenericIndexType(indexType) || !(accessNode && accessNode.kind === 186) && isGenericObjectType(objectType)) { if (objectType.flags & 3) { return objectType; } var id = objectType.id + "," + indexType.id; var type = indexedAccessTypes.get(id); if (!type) { indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType)); } return type; } var apparentObjectType = getApparentType(objectType); 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, false); if (propType === errorType) { return errorType; } propTypes.push(propType); } return getUnionType(propTypes); } return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, true); } function getTypeFromIndexedAccessTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var objectType = getTypeFromTypeNode(node.objectType); var indexType = getTypeFromTypeNode(node.indexType); var resolved = getIndexedAccessType(objectType, indexType, node); links.resolvedType = resolved.flags & 2097152 && resolved.objectType === objectType && resolved.indexType === indexType ? getConstrainedTypeVariable(resolved, node) : resolved; } return links.resolvedType; } function getTypeFromMappedTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var type = createObjectType(32, node.symbol); type.declaration = node; type.aliasSymbol = getAliasSymbolForTypeNode(node); type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(type.aliasSymbol); links.resolvedType = type; getConstraintTypeFromMappedType(type); } return links.resolvedType; } function getActualTypeVariable(type) { return type.flags & 8388608 ? type.typeVariable : type; } function getConditionalType(root, mapper) { var checkType = instantiateType(root.checkType, mapper); var extendsType = instantiateType(root.extendsType, mapper); if (checkType === wildcardType || extendsType === wildcardType) { return wildcardType; } var isDeferred = root.isDistributive && maybeTypeOfKind(checkType, 15794176); var combinedMapper; if (root.inferTypeParameters) { var context = createInferenceContext(root.inferTypeParameters, undefined, 0); if (!isDeferred) { inferTypes(context.inferences, checkType, extendsType, 32 | 64); } combinedMapper = combineTypeMappers(mapper, context); } if (!isDeferred) { if (extendsType.flags & 3) { return instantiateType(root.trueType, mapper); } if (checkType.flags & 1) { return getUnionType([instantiateType(root.trueType, combinedMapper || mapper), instantiateType(root.falseType, mapper)]); } var inferredExtendsType = combinedMapper ? instantiateType(root.extendsType, combinedMapper) : extendsType; if (!isTypeAssignableTo(getWildcardInstantiation(checkType), getWildcardInstantiation(inferredExtendsType))) { return instantiateType(root.falseType, mapper); } if (checkTypeRelatedTo(checkType, inferredExtendsType, definitelyAssignableRelation, undefined)) { return instantiateType(root.trueType, combinedMapper || mapper); } } var erasedCheckType = getActualTypeVariable(checkType); 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); return result; } function getTrueTypeFromConditionalType(type) { return type.resolvedTrueType || (type.resolvedTrueType = instantiateType(type.root.trueType, type.mapper)); } function getFalseTypeFromConditionalType(type) { return type.resolvedFalseType || (type.resolvedFalseType = instantiateType(type.root.falseType, type.mapper)); } function getInferTypeParameters(node) { var result; if (node.locals) { node.locals.forEach(function (symbol) { if (symbol.flags & 262144) { result = ts.append(result, getDeclaredTypeOfSymbol(symbol)); } }); } return result; } function isPossiblyReferencedInConditionalType(tp, node) { if (isTypeParameterPossiblyReferenced(tp, node)) { return true; } while (node) { if (node.kind === 171) { if (isTypeParameterPossiblyReferenced(tp, node.extendsType)) { return true; } } node = node.parent; } return false; } function getTypeFromConditionalTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var checkType = getTypeFromTypeNode(node.checkType); var aliasSymbol = getAliasSymbolForTypeNode(node); var aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); var allOuterTypeParameters = getOuterTypeParameters(node, true); var outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : ts.filter(allOuterTypeParameters, function (tp) { return isPossiblyReferencedInConditionalType(tp, node); }); var root = { node: node, checkType: checkType, extendsType: getTypeFromTypeNode(node.extendsType), trueType: getTypeFromTypeNode(node.trueType), falseType: getTypeFromTypeNode(node.falseType), isDistributive: !!(checkType.flags & 65536), inferTypeParameters: getInferTypeParameters(node), outerTypeParameters: outerTypeParameters, instantiations: undefined, aliasSymbol: aliasSymbol, aliasTypeArguments: aliasTypeArguments }; links.resolvedType = getConditionalType(root, undefined); if (outerTypeParameters) { root.instantiations = ts.createMap(); root.instantiations.set(getTypeListId(outerTypeParameters), links.resolvedType); } } return links.resolvedType; } function getTypeFromInferTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)); } return links.resolvedType; } function getIdentifierChain(node) { if (ts.isIdentifier(node)) { return [node]; } else { return ts.append(getIdentifierChain(node.left), node.right); } } function getTypeFromImportTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { if (node.isTypeOf && node.typeArguments) { error(node, ts.Diagnostics.Type_arguments_cannot_be_used_here); links.resolvedSymbol = unknownSymbol; return links.resolvedType = errorType; } if (!ts.isLiteralImportTypeNode(node)) { error(node.argument, ts.Diagnostics.String_literal_expected); links.resolvedSymbol = unknownSymbol; return links.resolvedType = errorType; } var argumentType = getTypeFromTypeNode(node.argument); var targetMeaning = node.isTypeOf ? 67216319 : 67901928; var moduleName = argumentType.value; 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, 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 : 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)); return links.resolvedType = errorType; } getNodeLinks(current).resolvedSymbol = next; getNodeLinks(current.parent).resolvedSymbol = next; currentNamespace = next; } resolveImportSymbolType(node, links, currentNamespace, targetMeaning); } else { if (moduleSymbol_1.flags & targetMeaning) { resolveImportSymbolType(node, links, moduleSymbol_1, targetMeaning); } else { 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; } function resolveImportSymbolType(node, links, symbol, meaning) { var resolvedSymbol = resolveSymbol(symbol); links.resolvedSymbol = resolvedSymbol; if (meaning === 67216319) { return links.resolvedType = getTypeOfSymbol(symbol); } else { return links.resolvedType = getTypeReferenceType(node, resolvedSymbol); } } function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { var aliasSymbol = getAliasSymbolForTypeNode(node); if (getMembersOfSymbol(node.symbol).size === 0 && !aliasSymbol) { links.resolvedType = emptyTypeLiteralType; } else { var type = createObjectType(16, node.symbol); type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); if (ts.isJSDocTypeLiteral(node) && node.isArrayType) { type = createArrayType(type); } links.resolvedType = type; } } return links.resolvedType; } function getAliasSymbolForTypeNode(node) { return ts.isTypeAlias(node.parent) ? getSymbolOfNode(node.parent) : undefined; } function getTypeArgumentsForAliasSymbol(symbol) { return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : undefined; } function getSpreadType(left, right, symbol, typeFlags, objectFlags) { if (left.flags & 1 || right.flags & 1) { return anyType; } if (left.flags & 2 || right.flags & 2) { return unknownType; } if (left.flags & 32768) { return right; } if (right.flags & 32768) { return left; } if (left.flags & 262144) { return mapType(left, function (t) { return getSpreadType(t, right, symbol, typeFlags, objectFlags); }); } if (right.flags & 262144) { return mapType(right, function (t) { return getSpreadType(left, t, symbol, typeFlags, objectFlags); }); } if (right.flags & (272 | 168 | 68 | 544 | 16777216 | 1048576)) { return left; } var members = ts.createSymbolTable(); var skippedPrivateMembers = ts.createUnderscoreEscapedMap(); var stringIndexInfo; var numberIndexInfo; if (left === emptyObjectType) { stringIndexInfo = getIndexInfoOfType(right, 0); numberIndexInfo = getIndexInfoOfType(right, 1); } else { 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]; var isSetterWithoutGetter = rightProp.flags & 65536 && !(rightProp.flags & 32768); if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 | 16)) { skippedPrivateMembers.set(rightProp.escapedName, true); } else if (!isClassMethod(rightProp) && !isSetterWithoutGetter) { members.set(rightProp.escapedName, getNonReadonlySymbol(rightProp)); } } for (var _b = 0, _c = getPropertiesOfType(left); _b < _c.length; _b++) { var leftProp = _c[_b]; if (leftProp.flags & 65536 && !(leftProp.flags & 32768) || skippedPrivateMembers.has(leftProp.escapedName) || isClassMethod(leftProp)) { continue; } if (members.has(leftProp.escapedName)) { var rightProp = members.get(leftProp.escapedName); var rightType = getTypeOfSymbol(rightProp); if (rightProp.flags & 16777216) { var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations); var flags = 4 | (leftProp.flags & 16777216); var result = createSymbol(flags, leftProp.escapedName); result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 131072)]); result.leftSpread = leftProp; result.rightSpread = rightProp; result.declarations = declarations; result.nameType = leftProp.nameType; members.set(leftProp.escapedName, result); } } else { members.set(leftProp.escapedName, getNonReadonlySymbol(leftProp)); } } var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getNonReadonlyIndexSignature(stringIndexInfo), getNonReadonlyIndexSignature(numberIndexInfo)); spread.flags |= typeFlags | 268435456; spread.objectFlags |= objectFlags | (128 | 1024); return spread; } function getNonReadonlySymbol(prop) { if (!isReadonlySymbol(prop)) { return prop; } var flags = 4 | (prop.flags & 16777216); var result = createSymbol(flags, prop.escapedName); result.type = getTypeOfSymbol(prop); result.declarations = prop.declarations; result.nameType = prop.nameType; result.syntheticOrigin = prop; return result; } function getNonReadonlyIndexSignature(index) { if (index && index.isReadonly) { return createIndexInfo(index.type, false, index.declaration); } return index; } function isClassMethod(prop) { return prop.flags & 8192 && ts.find(prop.declarations, function (decl) { return ts.isClassLike(decl.parent); }); } function createLiteralType(flags, value, symbol) { var type = createType(flags); type.symbol = symbol; type.value = value; return type; } function getFreshTypeOfLiteralType(type) { if (type.flags & 192 && !(type.flags & 33554432)) { if (!type.freshType) { var freshType = createLiteralType(type.flags | 33554432, type.value, type.symbol); freshType.regularType = type; type.freshType = freshType; } return type.freshType; } return type; } function getRegularTypeOfLiteralType(type) { return type.flags & 192 && type.flags & 33554432 ? type.regularType : type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getRegularTypeOfLiteralType)) : type; } function getLiteralType(value, enumId, symbol) { 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 : 64) | (enumId ? 512 : 0); literalTypes.set(key, type = createLiteralType(flags, value, symbol)); } return type; } function getTypeFromLiteralTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = getRegularTypeOfLiteralType(checkExpression(node.literal)); } return links.resolvedType; } function createUniqueESSymbolType(symbol) { var type = createType(2048); type.symbol = symbol; return type; } function getESSymbolLikeTypeForNode(node) { if (ts.isValidESSymbolDeclaration(node)) { var symbol = getSymbolOfNode(node); var links = getSymbolLinks(symbol); return links.uniqueESSymbolType || (links.uniqueESSymbolType = createUniqueESSymbolType(symbol)); } return esSymbolType; } function getThisType(node) { var container = ts.getThisContainer(node, false); var parent = container && container.parent; 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; } } error(node, ts.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface); return errorType; } function getTypeFromThisTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { links.resolvedType = getThisType(node); } return links.resolvedType; } function getTypeFromTypeNode(node) { switch (node.kind) { case 119: case 279: case 280: return anyType; case 142: return unknownType; case 137: return stringType; case 134: return numberType; case 122: return booleanType; case 138: return esSymbolType; case 105: return voidType; case 140: return undefinedType; case 95: return nullType; case 131: return neverType; case 135: return node.flags & 65536 ? anyType : nonPrimitiveType; case 174: case 99: return getTypeFromThisTypeNode(node); case 178: return getTypeFromLiteralTypeNode(node); case 162: return getTypeFromTypeReference(node); case 161: return booleanType; case 207: return getTypeFromTypeReference(node); case 165: return getTypeFromTypeQueryNode(node); case 167: return getTypeFromArrayTypeNode(node); case 168: return getTypeFromTupleTypeNode(node); case 169: return getTypeFromUnionTypeNode(node); case 170: return getTypeFromIntersectionTypeNode(node); case 281: return getTypeFromJSDocNullableTypeNode(node); case 283: return addOptionality(getTypeFromTypeNode(node.type)); case 173: case 282: case 278: return getTypeFromTypeNode(node.type); case 285: return getTypeFromJSDocVariadicType(node); case 163: case 164: case 166: case 287: case 284: case 288: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); case 175: return getTypeFromTypeOperatorNode(node); case 176: return getTypeFromIndexedAccessTypeNode(node); case 177: return getTypeFromMappedTypeNode(node); case 171: return getTypeFromConditionalTypeNode(node); case 172: return getTypeFromInferTypeNode(node); case 179: return getTypeFromImportTypeNode(node); case 71: case 146: var symbol = getSymbolAtLocation(node); return (symbol && getDeclaredTypeOfSymbol(symbol)); default: return errorType; } } function instantiateList(items, mapper, instantiator) { if (items && items.length) { for (var i = 0; i < items.length; i++) { var item = items[i]; var mapped = instantiator(item, mapper); if (item !== mapped) { var result = i === 0 ? [] : items.slice(0, i); result.push(mapped); for (i++; i < items.length; i++) { result.push(instantiator(items[i], mapper)); } return result; } } } return items; } function instantiateTypes(types, mapper) { return instantiateList(types, mapper, instantiateType); } function instantiateSignatures(signatures, mapper) { return instantiateList(signatures, mapper, instantiateSignature); } function makeUnaryTypeMapper(source, target) { return function (t) { return t === source ? target : t; }; } function makeBinaryTypeMapper(source1, target1, source2, target2) { return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; } function makeArrayTypeMapper(sources, targets) { return function (t) { for (var i = 0; i < sources.length; i++) { if (t === sources[i]) { return targets ? targets[i] : anyType; } } return t; }; } function createTypeMapper(sources, targets) { ts.Debug.assert(targets === undefined || sources.length === targets.length); return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : sources.length === 2 ? makeBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) : makeArrayTypeMapper(sources, targets); } function createTypeEraser(sources) { return createTypeMapper(sources, undefined); } function createBackreferenceMapper(typeParameters, index) { return function (t) { return typeParameters.indexOf(t) >= index ? emptyObjectType : t; }; } function isInferenceContext(mapper) { return !!mapper.typeParameters; } function cloneTypeMapper(mapper) { return mapper && isInferenceContext(mapper) ? createInferenceContext(mapper.typeParameters, mapper.signature, mapper.flags | 2, mapper.compareTypes, mapper.inferences) : mapper; } function combineTypeMappers(mapper1, mapper2) { if (!mapper1) return mapper2; if (!mapper2) return mapper1; return function (t) { return instantiateType(mapper1(t), mapper2); }; } function createReplacementMapper(source, target, baseMapper) { return function (t) { return t === source ? target : baseMapper(t); }; } function wildcardMapper(type) { return type.flags & 65536 ? wildcardType : type; } function cloneTypeParameter(typeParameter) { var result = createType(65536); result.symbol = typeParameter.symbol; result.target = typeParameter; return result; } function instantiateTypePredicate(predicate, mapper) { if (ts.isIdentifierTypePredicate(predicate)) { return { kind: 1, parameterName: predicate.parameterName, parameterIndex: predicate.parameterIndex, type: instantiateType(predicate.type, mapper) }; } else { return { kind: 0, type: instantiateType(predicate.type, mapper) }; } } function instantiateSignature(signature, mapper, eraseTypeParameters) { var freshTypeParameters; if (signature.typeParameters && !eraseTypeParameters) { 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++) { var tp = freshTypeParameters_1[_i]; tp.mapper = mapper; } } 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 | 15794176)) { return symbol; } if (ts.getCheckFlags(symbol) & 1) { symbol = links.target; mapper = combineTypeMappers(links.mapper, mapper); } var result = createSymbol(symbol.flags, symbol.escapedName, 1 | (ts.getCheckFlags(symbol) & 1024)); result.declarations = symbol.declarations; result.parent = symbol.parent; result.target = symbol; result.mapper = mapper; if (symbol.valueDeclaration) { result.valueDeclaration = symbol.valueDeclaration; } if (symbol.nameType) { result.nameType = symbol.nameType; } if (isTransientSymbol(symbol)) { if (symbol.isRestParameter) { result.isRestParameter = symbol.isRestParameter; } } return result; } function getAnonymousTypeInstantiation(type, mapper) { var target = type.objectFlags & 64 ? type.target : type; var symbol = target.symbol; var links = getSymbolLinks(symbol); var typeParameters = links.outerTypeParameters; if (!typeParameters) { var declaration_1 = symbol.declarations[0]; if (ts.isInJavaScriptFile(declaration_1)) { var paramTag = ts.findAncestor(declaration_1, ts.isJSDocParameterTag); if (paramTag) { var paramSymbol = ts.getParameterSymbolFromJSDoc(paramTag); if (paramSymbol) { declaration_1 = paramSymbol.valueDeclaration; } } } 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 && !target.aliasTypeArguments ? ts.filter(typeParameters, function (tp) { return isTypeParameterPossiblyReferenced(tp, declaration_1); }) : typeParameters; links.outerTypeParameters = typeParameters; if (typeParameters.length) { links.instantiations = ts.createMap(); links.instantiations.set(getTypeListId(typeParameters), target); } } if (typeParameters.length) { 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 ? instantiateMappedType(target, newMapper) : instantiateAnonymousType(target, newMapper); links.instantiations.set(id, result); } return result; } return type; } function maybeTypeParameterReference(node) { return !(node.kind === 146 || node.parent.kind === 162 && node.parent.typeArguments && node === node.parent.typeName); } function isTypeParameterPossiblyReferenced(tp, node) { 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 ? "quit" : n === container_3; })) { return !!ts.forEachChild(node, containsReference); } } return true; function containsReference(node) { switch (node.kind) { case 174: return !!tp.isThisType; case 71: return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) && getTypeFromTypeNode(node) === tp; case 165: return true; } return !!ts.forEachChild(node, containsReference); } } function instantiateMappedType(type, mapper) { var constraintType = getConstraintTypeFromMappedType(type); if (constraintType.flags & 1048576) { var typeVariable_1 = constraintType.type; if (typeVariable_1.flags & 65536) { var mappedTypeVariable = instantiateType(typeVariable_1, mapper); if (typeVariable_1 !== mappedTypeVariable) { return mapType(mappedTypeVariable, function (t) { if (isMappableType(t)) { return instantiateAnonymousType(type, createReplacementMapper(typeVariable_1, t, mapper)); } return t; }); } } } return instantiateAnonymousType(type, mapper); } function isMappableType(type) { return type.flags & (3 | 14745600 | 131072 | 524288); } function instantiateAnonymousType(type, mapper) { var result = createObjectType(type.objectFlags | 64, type.symbol); if (type.objectFlags & 32) { result.declaration = type.declaration; } result.target = type; result.mapper = mapper; result.aliasSymbol = type.aliasSymbol; result.aliasTypeArguments = instantiateTypes(type.aliasTypeArguments, mapper); return result; } function getConditionalTypeInstantiation(type, mapper) { var root = type.root; if (root.outerTypeParameters) { var typeArguments = ts.map(root.outerTypeParameters, mapper); var id = getTypeListId(typeArguments); var result = root.instantiations.get(id); if (!result) { var newMapper = createTypeMapper(root.outerTypeParameters, typeArguments); result = instantiateConditionalType(root, newMapper); root.instantiations.set(id, result); } return result; } return type; } function instantiateConditionalType(root, mapper) { if (root.isDistributive) { var checkType_1 = root.checkType; var instantiatedType = mapper(checkType_1); if (checkType_1 !== instantiatedType && instantiatedType.flags & (262144 | 32768)) { return mapType(instantiatedType, function (t) { return getConditionalType(root, createReplacementMapper(checkType_1, t, mapper)); }); } } return getConditionalType(root, mapper); } function instantiateType(type, mapper) { if (type && mapper && mapper !== identityMapper) { if (type.flags & 65536) { return mapper(type); } 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) { return getAnonymousTypeInstantiation(type, mapper); } 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 && !(type.flags & 32764)) { var types = type.types; var newTypes = instantiateTypes(types, mapper); return newTypes !== types ? getUnionType(newTypes, 1, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper)) : type; } 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) { return getIndexType(instantiateType(type.type, mapper)); } if (type.flags & 2097152) { return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper)); } if (type.flags & 4194304) { return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper)); } if (type.flags & 8388608) { return instantiateType(type.typeVariable, mapper); } } return type; } function getWildcardInstantiation(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); } function isContextSensitive(node) { ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); switch (node.kind) { case 192: case 193: case 154: return isContextSensitiveFunctionLikeDeclaration(node); case 184: return ts.some(node.properties, isContextSensitive); case 183: return ts.some(node.elements, isContextSensitive); case 201: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); case 200: return node.operatorToken.kind === 54 && (isContextSensitive(node.left) || isContextSensitive(node.right)); case 270: return isContextSensitive(node.initializer); case 191: return isContextSensitive(node.expression); case 263: return ts.some(node.properties, isContextSensitive); case 262: { var initializer = node.initializer; return !!initializer && isContextSensitive(initializer); } case 265: { var expression = node.expression; return !!expression && isContextSensitive(expression); } } return false; } function isContextSensitiveFunctionLikeDeclaration(node) { if (node.typeParameters) { return false; } if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) { return true; } if (node.kind !== 193) { var parameter = ts.firstOrUndefined(node.parameters); if (!(parameter && ts.parameterIsThisKeyword(parameter))) { return true; } } var body = node.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) { var resolved = resolveStructuredTypeMembers(type); if (resolved.constructSignatures.length) { var result = createObjectType(16, type.symbol); result.members = resolved.members; result.properties = resolved.properties; result.callSignatures = ts.emptyArray; result.constructSignatures = ts.emptyArray; return result; } } else if (type.flags & 524288) { return getIntersectionType(ts.map(type.types, getTypeWithoutSignatures)); } return type; } function isTypeIdenticalTo(source, target) { return isTypeRelatedTo(source, target, identityRelation); } function compareTypesIdentical(source, target) { return isTypeRelatedTo(source, target, identityRelation) ? -1 : 0; } function compareTypesAssignable(source, target) { return isTypeRelatedTo(source, target, assignableRelation) ? -1 : 0; } function isTypeSubtypeOf(source, target) { return isTypeRelatedTo(source, target, subtypeRelation); } function isTypeAssignableTo(source, target) { return isTypeRelatedTo(source, target, assignableRelation); } function isTypeDerivedFrom(source, 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)); } function isTypeComparableTo(source, target) { return isTypeRelatedTo(source, target, comparableRelation); } function areTypesComparable(type1, type2) { return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); } function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain); } 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, ignoreReturnTypes, false, undefined, compareTypesAssignable) !== 0; } function compareSignaturesRelated(source, target, callbackCheck, ignoreReturnTypes, reportErrors, errorReporter, compareTypes) { if (source === target) { return -1; } if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { return 0; } if (source.typeParameters && source.typeParameters !== target.typeParameters) { target = getCanonicalSignature(target); source = instantiateSignatureInContextOf(source, target, undefined, compareTypes); } 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) { 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; } result &= related; } } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); var checkCount = getNumParametersToCheckForSignatureRelatability(source, sourceMax, target, targetMax); var sourceParams = source.parameters; var targetParams = target.parameters; 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); 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) === (getFalsyFlags(targetType) & 24576); var related = callbacks ? 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; } result &= related; } if (!ignoreReturnTypes) { var targetReturnType = getReturnTypeOfSignature(target); if (targetReturnType === voidType) { return result; } var sourceReturnType = getReturnTypeOfSignature(source); var targetTypePredicate = getTypePredicateOfSignature(target); if (targetTypePredicate) { var sourceTypePredicate = getTypePredicateOfSignature(source); if (sourceTypePredicate) { 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; } } else { result &= callbackCheck === 1 && compareTypes(targetReturnType, sourceReturnType, false) || compareTypes(sourceReturnType, targetReturnType, reportErrors); } } return result; } function compareTypePredicateRelatedTo(source, target, sourceDeclaration, targetDeclaration, reportErrors, errorReporter, compareTypes) { if (source.kind !== target.kind) { if (reportErrors) { 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; } 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); if (sourceIndex !== targetIndex) { if (reportErrors) { 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; } } var related = compareTypes(source.type, target.type, reportErrors); if (related === 0 && reportErrors) { errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); } return related; } function isImplementationCompatibleWithOverload(implementation, overload) { var erasedSource = getErasedSignature(implementation); var erasedTarget = getErasedSignature(overload); var sourceReturnType = getReturnTypeOfSignature(erasedSource); var targetReturnType = getReturnTypeOfSignature(erasedTarget); if (targetReturnType === voidType || isTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation) || isTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation)) { return isSignatureAssignableTo(erasedSource, erasedTarget, true); } return false; } function getNumNonRestParameters(signature) { var numParams = signature.parameters.length; return signature.hasRestParameter ? numParams - 1 : numParams; } function getNumParametersToCheckForSignatureRelatability(source, sourceNonRestParamCount, target, targetNonRestParamCount) { if (source.hasRestParameter === target.hasRestParameter) { if (source.hasRestParameter) { return Math.max(sourceNonRestParamCount, targetNonRestParamCount) + 1; } else { return Math.min(sourceNonRestParamCount, targetNonRestParamCount); } } else { return source.hasRestParameter ? targetNonRestParamCount : sourceNonRestParamCount; } } function isEmptyResolvedType(t) { return t.properties.length === 0 && t.callSignatures.length === 0 && t.constructSignatures.length === 0 && !t.stringIndexInfo && !t.numberIndexInfo; } function isEmptyObjectType(type) { 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) { if (sourceSymbol === targetSymbol) { return true; } var id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol); var relation = enumRelation.get(id); if (relation !== undefined) { return relation; } 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) { var targetProperty = getPropertyOfType(targetEnumType, property.escapedName); if (!targetProperty || !(targetProperty.flags & 8)) { if (errorReporter) { errorReporter(ts.Diagnostics.Property_0_is_missing_in_type_1, ts.symbolName(property), typeToString(getDeclaredTypeOfSymbol(targetSymbol), undefined, 64)); } enumRelation.set(id, false); return false; } } } enumRelation.set(id, true); return true; } function isSimpleTypeRelatedTo(source, target, relation, errorReporter) { var s = source.flags; var t = target.flags; if (t & 3 || s & 32768 || source === wildcardType) return true; if (t & 32768) return false; if (s & 68 && t & 4) return true; if (s & 64 && s & 512 && t & 64 && !(t & 512) && source.value === target.value) return true; if (s & 168 && t & 8) return true; if (s & 128 && s & 512 && t & 128 && !(t & 512) && source.value === target.value) return true; if (s & 272 && t & 16) return true; if (s & 3072 && t & 1024) return true; if (s & 32 && t & 32 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; if (s & 512 && t & 512) { if (s & 262144 && t & 262144 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; if (s & 448 && t & 448 && source.value === target.value && isEnumTypeRelatedTo(getParentOfSymbol(source.symbol), getParentOfSymbol(target.symbol), errorReporter)) return true; } if (s & 8192 && (!strictNullChecks || t & (8192 | 4096))) return true; if (s & 16384 && (!strictNullChecks || t & 16384)) return true; if (s & 131072 && t & 16777216) return true; if (s & 2048 || t & 2048) return false; if (relation === assignableRelation || relation === definitelyAssignableRelation || relation === comparableRelation) { if (s & 1) return true; 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 && source.flags & 33554432) { source = source.regularType; } if (target.flags & 192 && target.flags & 33554432) { target = target.regularType; } if (source === target || relation === comparableRelation && !(target.flags & 32768) && isSimpleTypeRelatedTo(target, source, relation) || relation !== identityRelation && isSimpleTypeRelatedTo(source, target, relation)) { return true; } if (source.flags & 131072 && target.flags & 131072) { var related = relation.get(getRelationKey(source, target, relation)); if (related !== undefined) { return related === 1; } } 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 && !(isUnhyphenatedJsxName(sourceProp.escapedName) || targetMemberType); } function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) { var errorInfo; var maybeKeys; var sourceStack; var targetStack; var maybeCount = 0; var depth = 0; 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, !!errorNode, headMessage); if (overflow) { error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); } else if (errorInfo) { if (containingMessageChain) { var chain_1 = containingMessageChain(); if (chain_1) { errorInfo = ts.concatenateDiagnosticMessageChains(chain_1, errorInfo); } } var relatedInformation = void 0; 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, undefined); if (helpfulRetry) { var diag = ts.createDiagnosticForNode(links.originatingImport, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead); relatedInformation = ts.append(relatedInformation, diag); } } } diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation)); } return result !== 0; function reportError(message, arg0, arg1, arg2) { ts.Debug.assert(!!errorNode); errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); } function reportRelationError(message, source, target) { var sourceType = typeToString(source); var targetType = typeToString(target); if (sourceType === targetType) { sourceType = typeToString(source, undefined, 64); targetType = typeToString(target, undefined, 64); } if (!message) { if (relation === comparableRelation) { message = ts.Diagnostics.Type_0_is_not_comparable_to_type_1; } else if (sourceType === targetType) { message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated; } else { message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1; } } reportError(message, sourceType, targetType); } function tryElaborateErrorsForPrimitivesAndObjects(source, target) { var sourceType = typeToString(source); var targetType = typeToString(target); if ((globalStringType === source && stringType === target) || (globalNumberType === source && numberType === target) || (globalBooleanType === source && booleanType === 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)) { return false; } var seenNonNullable = false; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; if (t.flags & 24576) { continue; } if (seenNonNullable) { return true; } seenNonNullable = true; } return false; } function isRelatedTo(source, target, reportErrors, headMessage) { if (reportErrors === void 0) { reportErrors = false; } if (source.flags & 192 && source.flags & 33554432) { source = source.regularType; } if (target.flags & 192 && target.flags & 33554432) { target = target.regularType; } if (source.flags & 8388608) { source = relation === definitelyAssignableRelation ? source.typeVariable : source.substitute; } if (target.flags & 8388608) { target = target.typeVariable; } if (source.flags & 2097152) { source = getSimplifiedType(source); } if (target.flags & 2097152) { target = getSimplifiedType(target); } if (source === target) return -1; if (relation === identityRelation) { return isIdenticalTo(source, target); } if (relation === comparableRelation && !(target.flags & 32768) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : 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; } if (isUnionOrIntersectionTypeWithoutNullableConstituents(target) && !discriminantType) { source = getRegularTypeOfObjectLiteral(source); } } if (relation !== comparableRelation && !(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); 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; } var result = 0; var saveErrorInfo = errorInfo; var saveIsIntersectionConstituent = isIntersectionConstituent; isIntersectionConstituent = false; if (source.flags & 262144) { result = relation === comparableRelation ? someTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764)) : eachTypeRelatedToType(source, target, reportErrors && !(source.flags & 32764)); } else { if (target.flags & 262144) { result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 32764) && !(target.flags & 32764)); } else if (target.flags & 524288) { isIntersectionConstituent = true; result = typeRelatedToEachType(source, target, reportErrors); } else if (source.flags & 524288) { result = someTypeRelatedToType(source, target, false); } if (!result && (source.flags & 16711680 || target.flags & 16711680)) { if (result = recursiveTypeRelatedTo(source, target, reportErrors)) { errorInfo = saveErrorInfo; } } } if (!result && source.flags & 524288) { var constraint = getUnionConstraintOfIntersection(source, !!(target.flags & 262144)); if (constraint) { if (result = isRelatedTo(constraint, target, reportErrors)) { errorInfo = saveErrorInfo; } } } isIntersectionConstituent = saveIsIntersectionConstituent; if (!result && reportErrors) { if (source.flags & 131072 && target.flags & 32764) { tryElaborateErrorsForPrimitivesAndObjects(source, target); } 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 && 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))) { return result; } } reportRelationError(headMessage, source, target); } return result; } function isIdenticalTo(source, target) { var result; var flags = source.flags & target.flags; if (flags & 131072) { return recursiveTypeRelatedTo(source, target, false); } if (flags & (262144 | 524288)) { if (result = eachTypeRelatedToSomeType(source, target)) { if (result &= eachTypeRelatedToSomeType(target, source)) { return result; } } } if (flags & 1048576) { return isRelatedTo(source.type, target.type, 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) { if (source.root.isDistributive === target.root.isDistributive) { 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; } } } } } } if (flags & 8388608) { return isRelatedTo(source.substitute, target.substitute, false); } return 0; } function hasExcessProperties(source, target, discriminant, reportErrors) { 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) { return hasExcessProperties(source, discriminant, undefined, reportErrors); } var _loop_7 = function (prop) { if (!isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) { if (reportErrors) { if (!errorNode) return { value: ts.Debug.fail() }; if (ts.isJsxAttributes(errorNode) || ts.isJsxOpeningLikeElement(errorNode)) { reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(prop), typeToString(target)); } else { 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; })) { var propDeclaration = prop.valueDeclaration; ts.Debug.assertNode(propDeclaration, ts.isObjectLiteralElementLike); errorNode = propDeclaration; var name = propDeclaration.name; if (ts.isIdentifier(name)) { suggestion = getSuggestionForNonexistentProperty(name, target); } } if (suggestion !== undefined) { reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2, symbolToString(prop), typeToString(target), suggestion); } else { reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(target)); } } } return { value: true }; } }; for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { var prop = _a[_i]; var state_3 = _loop_7(prop); if (typeof state_3 === "object") return state_3.value; } } return false; } function eachTypeRelatedToSomeType(source, target) { 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, false); if (!related) { return 0; } result &= related; } return result; } function typeRelatedToSomeType(source, target, reportErrors) { var targetTypes = target.types; 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, false); if (related) { return related; } } if (reportErrors) { var discriminantType = findMatchingDiscriminantType(source, target); isRelatedTo(source, discriminantType || targetTypes[targetTypes.length - 1], true); } return 0; } function findMatchingDiscriminantType(source, target) { var match; var sourceProperties = getPropertiesOfObjectType(source); if (sourceProperties) { var sourcePropertiesFiltered = findDiscriminantProperties(sourceProperties, target); if (sourcePropertiesFiltered) { for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) { var sourceProperty = sourcePropertiesFiltered_1[_i]; var sourceType = getTypeOfSymbol(sourceProperty); for (var _a = 0, _b = target.types; _a < _b.length; _a++) { var type = _b[_a]; var targetType = getTypeOfPropertyOfType(type, sourceProperty.escapedName); if (targetType && isRelatedTo(sourceType, targetType)) { if (type === match) continue; if (match) { return undefined; } match = type; } } } } } return match; } function typeRelatedToEachType(source, target, reportErrors) { 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; } result &= related; } return result; } function someTypeRelatedToType(source, target, reportErrors) { var sourceTypes = source.types; if (source.flags & 262144 && containsType(sourceTypes, target)) { return -1; } var len = sourceTypes.length; for (var i = 0; i < len; i++) { var related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1); if (related) { return related; } } return 0; } function eachTypeRelatedToType(source, target, reportErrors) { 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; } result &= related; } return result; } function typeArgumentsRelatedTo(source, target, variances, reportErrors) { var sources = source.typeArguments || ts.emptyArray; var targets = target.typeArguments || ts.emptyArray; if (sources.length !== targets.length && relation === identityRelation) { return 0; } var length = sources.length <= targets.length ? sources.length : targets.length; var result = -1; for (var i = 0; i < length; i++) { var variance = i < variances.length ? variances[i] : 1; if (variance !== 4) { var s = sources[i]; var t = targets[i]; var related = -1; if (variance === 1) { related = isRelatedTo(s, t, reportErrors); } else if (variance === 2) { related = isRelatedTo(t, s, reportErrors); } else if (variance === 3) { related = isRelatedTo(t, s, false); if (!related) { related = isRelatedTo(s, t, reportErrors); } } else { related = isRelatedTo(s, t, reportErrors); if (related) { related &= isRelatedTo(t, s, reportErrors); } } if (!related) { return 0; } result &= related; } } return result; } function recursiveTypeRelatedTo(source, target, reportErrors) { if (overflow) { return 0; } var id = getRelationKey(source, target, relation); var related = relation.get(id); if (related !== undefined) { if (reportErrors && related === 2) { relation.set(id, 3); } else { return related === 1 ? -1 : 0; } } if (!maybeKeys) { maybeKeys = []; sourceStack = []; targetStack = []; } else { for (var i = 0; i < maybeCount; i++) { if (id === maybeKeys[i]) { return 1; } } if (depth === 100) { overflow = true; return 0; } } var maybeStart = maybeCount; maybeKeys[maybeCount] = id; maybeCount++; sourceStack[depth] = source; targetStack[depth] = target; depth++; var saveExpandingFlags = expandingFlags; 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 || depth === 0) { for (var i = maybeStart; i < maybeCount; i++) { relation.set(maybeKeys[i], 1); } maybeCount = maybeStart; } } else { relation.set(id, reportErrors ? 3 : 2); maybeCount = maybeStart; } return result; } function getConstraintForRelation(type) { return relation === definitelyAssignableRelation ? undefined : getConstraintOfType(type); } function structuredTypeRelatedTo(source, target, reportErrors) { var result; var originalErrorInfo; var saveErrorInfo = errorInfo; 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)) { return result; } } } } else if (target.flags & 1048576) { if (source.flags & 1048576) { if (result = isRelatedTo(target.type, source.type, false)) { return result; } } if (relation !== definitelyAssignableRelation) { var simplified = getSimplifiedType(target.type); var constraint = simplified !== target.type ? simplified : getConstraintOfType(target.type); if (constraint) { if (result = isRelatedTo(source, getIndexType(constraint, target.stringsOnly), reportErrors)) { return result; } } } } else if (target.flags & 2097152) { var constraint = getConstraintForRelation(target); if (constraint) { if (result = isRelatedTo(source, constraint, reportErrors)) { errorInfo = saveErrorInfo; return result; } } } else if (isGenericMappedType(target)) { var template = getTemplateTypeFromMappedType(target); var modifiers = getMappedTypeModifiers(target); if (!(modifiers & 8)) { if (template.flags & 2097152 && template.objectType === source && template.indexType === getTypeParameterFromMappedType(target)) { return -1; } if (!isGenericMappedType(source) && getConstraintTypeFromMappedType(target) === getIndexType(source)) { var indexedAccessType = getIndexedAccessType(source, getTypeParameterFromMappedType(target)); var templateType = getTemplateTypeFromMappedType(target); if (result = isRelatedTo(indexedAccessType, templateType, reportErrors)) { errorInfo = saveErrorInfo; return result; } } } } 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); } if (result) { errorInfo = saveErrorInfo; return result; } } var constraint = getConstraintForRelation(source); if (!constraint || (source.flags & 65536 && constraint.flags & 3)) { if (result = isRelatedTo(emptyObjectType, extractTypesOfKind(target, ~16777216))) { errorInfo = saveErrorInfo; return result; } } else { var instantiated = getTypeWithThisArgument(constraint, source); if (result = isRelatedTo(instantiated, target, reportErrors)) { errorInfo = saveErrorInfo; return result; } } } else if (source.flags & 1048576) { if (result = isRelatedTo(keyofConstraintType, target, reportErrors)) { errorInfo = saveErrorInfo; return result; } } 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)) { result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), reportErrors); } if (result) { errorInfo = saveErrorInfo; return result; } } } else if (relation !== definitelyAssignableRelation) { var distributiveConstraint = getConstraintOfDistributiveConditionalType(source); if (distributiveConstraint) { if (result = isRelatedTo(distributiveConstraint, target, reportErrors)) { errorInfo = saveErrorInfo; return result; } } var defaultConstraint = getDefaultConstraintOfConditionalType(source); if (defaultConstraint) { if (result = isRelatedTo(defaultConstraint, target, reportErrors)) { errorInfo = saveErrorInfo; return result; } } } } else { 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; } if (variances !== ts.emptyArray && !hasCovariantVoidArgument(target, variances)) { if (!(reportErrors && ts.some(variances, function (v) { return v === 0; }))) { return 0; } originalErrorInfo = errorInfo; errorInfo = saveErrorInfo; } } var sourceIsPrimitive = !!(source.flags & 32764); if (relation !== identityRelation) { source = getApparentType(source); } if (source.flags & (131072 | 524288) && target.flags & 131072) { var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !sourceIsPrimitive; if (isPartialMappedType(target) && !isGenericMappedType(source) && isEmptyObjectType(source)) { result = -1; } else if (isGenericMappedType(target)) { result = isGenericMappedType(source) ? mappedTypeRelatedTo(source, target, reportStructuralErrors) : 0; } else { result = propertiesRelatedTo(source, target, reportStructuralErrors); if (result) { result &= signaturesRelatedTo(source, target, 0, reportStructuralErrors); if (result) { result &= signaturesRelatedTo(source, target, 1, reportStructuralErrors); if (result) { result &= indexTypesRelatedTo(source, target, 0, sourceIsPrimitive, reportStructuralErrors); if (result) { result &= indexTypesRelatedTo(source, target, 1, sourceIsPrimitive, reportStructuralErrors); } } } } } if (result) { if (!originalErrorInfo) { errorInfo = saveErrorInfo; return result; } errorInfo = originalErrorInfo; } } } return 0; } function mappedTypeRelatedTo(source, target, reportErrors) { var modifiersRelated = relation === comparableRelation || (relation === identityRelation ? getMappedTypeModifiers(source) === getMappedTypeModifiers(target) : getCombinedMappedTypeOptionality(source) <= getCombinedMappedTypeOptionality(target)); if (modifiersRelated) { var result_2; if (result_2 = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) { var mapper = createTypeMapper([getTypeParameterFromMappedType(source)], [getTypeParameterFromMappedType(target)]); return result_2 & isRelatedTo(instantiateType(getTemplateTypeFromMappedType(source), mapper), getTemplateTypeFromMappedType(target), reportErrors); } } return 0; } function propertiesRelatedTo(source, target, reportErrors) { if (relation === identityRelation) { return propertiesIdenticalTo(source, target); } var requireOptionalProperties = relation === subtypeRelation && !isObjectLiteralType(source) && !isEmptyArrayLiteralType(source); var unmatchedProperty = getUnmatchedProperty(source, target, requireOptionalProperties); if (unmatchedProperty) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(unmatchedProperty), typeToString(source)); } return 0; } if (isObjectLiteralType(target)) { for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) { var sourceProp = _a[_i]; if (!getPropertyOfObjectType(target, sourceProp.escapedName)) { var sourceType = getTypeOfSymbol(sourceProp); if (!(sourceType === undefinedType || sourceType === undefinedWideningType)) { if (reportErrors) { reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target)); } return 0; } } } } 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)) { var sourceProp = getPropertyOfType(source, targetProp.escapedName); if (sourceProp && sourceProp !== targetProp) { if (isIgnoredJsxProperty(source, sourceProp, getTypeOfSymbol(targetProp))) { continue; } var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp); var targetPropFlags = ts.getDeclarationModifierFlagsFromSymbol(targetProp); if (sourcePropFlags & 8 || targetPropFlags & 8) { var hasDifferingDeclarations = sourceProp.valueDeclaration !== targetProp.valueDeclaration; 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; } if (hasDifferingDeclarations) { if (reportErrors) { 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 ? source : target), typeToString(sourcePropFlags & 8 ? target : source)); } } return 0; } } 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; } } 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; } 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; } result &= related; 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; } } } } return result; } function isWeakType(type) { 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); }); } if (type.flags & 524288) { return ts.every(type.types, isWeakType); } return false; } function hasCommonProperties(source, target) { 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)) { return true; } } return false; } function propertiesIdenticalTo(source, target) { if (!(source.flags & 131072 && target.flags & 131072)) { return 0; } var sourceProperties = getPropertiesOfObjectType(source); var targetProperties = getPropertiesOfObjectType(target); if (sourceProperties.length !== targetProperties.length) { return 0; } 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; } var related = compareProperties(sourceProp, targetProp, isRelatedTo); if (!related) { return 0; } result &= related; } return result; } function signaturesRelatedTo(source, target, kind, reportErrors) { if (relation === identityRelation) { return signaturesIdenticalTo(source, target, kind); } if (target === anyFunctionType || source === anyFunctionType) { return -1; } var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); if (kind === 1 && sourceSignatures.length && targetSignatures.length) { if (ts.isAbstractConstructorType(source) && !ts.isAbstractConstructorType(target)) { if (reportErrors) { reportError(ts.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type); } return 0; } if (!constructorVisibilitiesAreCompatible(sourceSignatures[0], targetSignatures[0], reportErrors)) { return 0; } } var result = -1; var saveErrorInfo = errorInfo; 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], true, reportErrors); if (!related) { return 0; } result &= related; } } else if (sourceSignatures.length === 1 && targetSignatures.length === 1) { 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]; 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, true, shouldElaborateErrors); if (related) { result &= related; errorInfo = saveErrorInfo; continue outer; } shouldElaborateErrors = false; } if (shouldElaborateErrors) { reportError(ts.Diagnostics.Type_0_provides_no_match_for_the_signature_1, typeToString(source), signatureToString(t, undefined, undefined, kind)); } return 0; } } return result; } function signatureRelatedTo(source, target, erase, reportErrors) { 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; } var result = -1; for (var i = 0; i < sourceSignatures.length; i++) { var related = compareSignaturesIdentical(sourceSignatures[i], targetSignatures[i], false, false, false, isRelatedTo); if (!related) { return 0; } result &= related; } return result; } function eachPropertyRelatedTo(source, target, kind, reportErrors) { var result = -1; for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { var prop = _a[_i]; if (isIgnoredJsxProperty(source, prop, undefined)) { continue; } if (prop.nameType && prop.nameType.flags & 2048) { continue; } 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; } result &= related; } } return result; } function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) { var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors); if (!related && reportErrors) { reportError(ts.Diagnostics.Index_signatures_are_incompatible); } return related; } function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors) { if (relation === identityRelation) { return indexTypesIdenticalTo(source, target, kind); } var targetInfo = getIndexInfoOfType(target, kind); if (!targetInfo || targetInfo.type.flags & 3 && !sourceIsPrimitive) { return -1; } var sourceInfo = getIndexInfoOfType(source, kind) || kind === 1 && getIndexInfoOfType(source, 0); if (sourceInfo) { return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors); } if (isGenericMappedType(source)) { return (kind === 0 && isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors)); } if (isObjectTypeWithInferableIndex(source)) { var related = -1; if (kind === 0) { var sourceNumberInfo = getIndexInfoOfType(source, 1); if (sourceNumberInfo) { related = indexInfoRelatedTo(sourceNumberInfo, targetInfo, reportErrors); } } if (related) { related &= eachPropertyRelatedTo(source, targetInfo.type, kind, reportErrors); } return related; } if (reportErrors) { reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); } return 0; } function indexTypesIdenticalTo(source, target, indexKind) { var targetInfo = getIndexInfoOfType(target, indexKind); var sourceInfo = getIndexInfoOfType(source, indexKind); if (!sourceInfo && !targetInfo) { return -1; } if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) { return isRelatedTo(sourceInfo.type, targetInfo.type); } return 0; } function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) { if (!sourceSignature.declaration || !targetSignature.declaration) { return true; } var sourceAccessibility = ts.getSelectedModifierFlags(sourceSignature.declaration, 24); var targetAccessibility = ts.getSelectedModifierFlags(targetSignature.declaration, 24); if (targetAccessibility === 8) { return true; } if (targetAccessibility === 16 && sourceAccessibility !== 8) { return true; } if (targetAccessibility !== 16 && !sourceAccessibility) { return true; } if (reportErrors) { reportError(ts.Diagnostics.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type, visibilityToString(sourceAccessibility), visibilityToString(targetAccessibility)); } return false; } } function getMarkerTypeReference(type, source, target) { var result = createTypeReference(type, ts.map(type.typeParameters, function (t) { return t === source ? target : t; })); result.objectFlags |= 8192; return result; } function getVariances(type) { if (!strictFunctionTypes) { return ts.emptyArray; } var typeParameters = type.typeParameters || ts.emptyArray; var variances = type.variances; if (!variances) { if (type === globalArrayType || type === globalReadonlyArrayType) { variances = [1]; } else { type.variances = ts.emptyArray; variances = []; for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) { var tp = typeParameters_1[_i]; var typeWithSuper = getMarkerTypeReference(type, tp, markerSuperType); var typeWithSub = getMarkerTypeReference(type, tp, markerSubType); 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); } } type.variances = variances; } return variances; } function hasCovariantVoidArgument(type, variances) { for (var i = 0; i < variances.length; i++) { if (variances[i] === 1 && type.typeArguments[i].flags & 4096) { return true; } } return false; } function isUnconstrainedTypeParameter(type) { return type.flags & 65536 && !getConstraintFromTypeParameter(type); } function isTypeReferenceWithGenericArguments(type) { return !!(ts.getObjectFlags(type) & 4) && ts.some(type.typeArguments, function (t) { return isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t); }); } function getTypeReferenceId(type, typeParameters, depth) { if (depth === void 0) { depth = 0; } var result = "" + type.target.id; for (var _i = 0, _a = type.typeArguments; _i < _a.length; _i++) { var t = _a[_i]; if (isUnconstrainedTypeParameter(t)) { var index = typeParameters.indexOf(t); if (index < 0) { index = typeParameters.length; typeParameters.push(t); } result += "=" + index; } else if (depth < 4 && isTypeReferenceWithGenericArguments(t)) { result += "<" + getTypeReferenceId(t, typeParameters, depth + 1) + ">"; } else { result += "-" + t.id; } } return result; } function getRelationKey(source, target, relation) { if (relation === identityRelation && source.id > target.id) { var temp = source; source = target; target = temp; } if (isTypeReferenceWithGenericArguments(source) && isTypeReferenceWithGenericArguments(target)) { var typeParameters = []; return getTypeReferenceId(source, typeParameters) + "," + getTypeReferenceId(target, typeParameters); } return source.id + "," + target.id; } function forEachProperty(prop, callback) { 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); var result = p && forEachProperty(p, callback); if (result) { return result; } } return undefined; } return callback(prop); } function getDeclaringClass(prop) { return prop.parent && prop.parent.flags & 32 ? getDeclaredTypeOfSymbol(getParentOfSymbol(prop)) : undefined; } function isPropertyInClassDerivedFrom(prop, baseClass) { return forEachProperty(prop, function (sp) { var sourceClass = getDeclaringClass(sp); return sourceClass ? hasBaseType(sourceClass, baseClass) : false; }); } function isValidOverrideOf(sourceProp, targetProp) { return !forEachProperty(targetProp, function (tp) { return ts.getDeclarationModifierFlagsFromSymbol(tp) & 16 ? !isPropertyInClassDerivedFrom(sourceProp, getDeclaringClass(tp)) : false; }); } function isClassDerivedFromDeclaringClasses(checkClass, prop) { return forEachProperty(prop, function (p) { return ts.getDeclarationModifierFlagsFromSymbol(p) & 16 ? !hasBaseType(checkClass, getDeclaringClass(p)) : false; }) ? undefined : checkClass; } function isDeeplyNestedType(type, stack, depth) { 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 && t.symbol === symbol) { count++; if (count >= 5) return true; } } } } return false; } function isPropertyIdenticalTo(sourceProp, targetProp) { return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== 0; } function compareProperties(sourceProp, targetProp, compareTypes) { if (sourceProp === targetProp) { return -1; } var sourcePropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(sourceProp) & 24; var targetPropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(targetProp) & 24; if (sourcePropAccessibility !== targetPropAccessibility) { return 0; } if (sourcePropAccessibility) { if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) { return 0; } } else { if ((sourceProp.flags & 16777216) !== (targetProp.flags & 16777216)) { return 0; } } if (isReadonlySymbol(sourceProp) !== isReadonlySymbol(targetProp)) { return 0; } return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); } function isMatchingSignature(source, target, partialMatch) { if (source.parameters.length === target.parameters.length && source.minArgumentCount === target.minArgumentCount && source.hasRestParameter === target.hasRestParameter) { return true; } var sourceRestCount = source.hasRestParameter ? 1 : 0; var targetRestCount = target.hasRestParameter ? 1 : 0; if (partialMatch && source.minArgumentCount <= target.minArgumentCount && (sourceRestCount > targetRestCount || sourceRestCount === targetRestCount && source.parameters.length >= target.parameters.length)) { return true; } return false; } function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes) { if (source === target) { return -1; } if (!(isMatchingSignature(source, target, partialMatch))) { return 0; } if (ts.length(source.typeParameters) !== ts.length(target.typeParameters)) { return 0; } source = getErasedSignature(source); target = getErasedSignature(target); var result = -1; if (!ignoreThisTypes) { var sourceThisType = getThisTypeOfSignature(source); if (sourceThisType) { var targetThisType = getThisTypeOfSignature(target); if (targetThisType) { var related = compareTypes(sourceThisType, targetThisType); if (!related) { return 0; } result &= related; } } } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { var s = isRestParameterIndex(source, i) ? getRestTypeOfSignature(source) : getTypeOfParameter(source.parameters[i]); var t = isRestParameterIndex(target, i) ? getRestTypeOfSignature(target) : getTypeOfParameter(target.parameters[i]); var related = compareTypes(s, t); if (!related) { return 0; } result &= related; } if (!ignoreReturnTypes) { var sourceTypePredicate = getTypePredicateOfSignature(source); var targetTypePredicate = getTypePredicateOfSignature(target); result &= sourceTypePredicate !== undefined || targetTypePredicate !== undefined ? compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes) : compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); } return result; } function compareTypePredicatesIdentical(source, target, compareTypes) { 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; } function literalTypesWithSameBaseType(types) { var commonBaseType; for (var _i = 0, types_9 = types; _i < types_9.length; _i++) { var t = types_9[_i]; var baseType = getBaseTypeOfLiteralType(t); if (!commonBaseType) { commonBaseType = baseType; } if (baseType === t || baseType !== commonBaseType) { return false; } } return true; } function getSupertypeOrUnion(types) { return literalTypesWithSameBaseType(types) ? getUnionType(types) : ts.reduceLeft(types, function (s, t) { return isTypeSubtypeOf(s, t) ? t : s; }); } function getCommonSupertype(types) { if (!strictNullChecks) { return getSupertypeOrUnion(types); } var primaryTypes = ts.filter(types, function (t) { return !(t.flags & 24576); }); return primaryTypes.length ? getNullableType(getSupertypeOrUnion(primaryTypes), getFalsyFlagsOfTypes(types) & 24576) : getUnionType(types, 2); } function getCommonSubtype(types) { return ts.reduceLeft(types, function (s, t) { return isTypeSubtypeOf(t, s) ? t : s; }); } function isArrayType(type) { return !!(ts.getObjectFlags(type) & 4) && type.target === globalArrayType; } function isArrayLikeType(type) { 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; return elementType === undefinedWideningType || elementType === implicitNeverType; } function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } function isNeitherUnitTypeNorNever(type) { return !(type.flags & (27072 | 32768)); } function isUnitType(type) { return !!(type.flags & 27072); } function isLiteralType(type) { 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 ? 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 ? 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 ? esSymbolType : type.flags & 262144 ? getUnionType(ts.sameMap(type.types, getWidenedUniqueESSymbolType)) : type; } function getWidenedLiteralLikeTypeForContextualType(type, contextualType) { if (!isLiteralOfContextualType(type, contextualType)) { type = getWidenedUniqueESSymbolType(getWidenedLiteralType(type)); } return type; } function isTupleType(type) { return !!(ts.getObjectFlags(type) & 4 && type.target.objectFlags & 8); } function getFalsyFlagsOfTypes(types) { var result = 0; for (var _i = 0, types_10 = types; _i < types_10.length; _i++) { var t = types_10[_i]; result |= getFalsyFlags(t); } return result; } function getFalsyFlags(type) { 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 ? filterType(type, function (t) { return !(getFalsyFlags(t) & 29120); }) : type; } function extractDefinitelyFalsyTypes(type) { return mapType(type, getDefinitelyFalsyPartOfType); } function getDefinitelyFalsyPartOfType(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; } function getNullableType(type, flags) { var missing = (flags & ~type.flags) & (8192 | 16384); return missing === 0 ? type : 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 ? type : getUnionType([type, undefinedType]); } function getGlobalNonNullableTypeInstantiation(type) { if (!deferredGlobalNonNullableTypeAlias) { deferredGlobalNonNullableTypeAlias = getGlobalSymbol("NonNullable", 524288, undefined) || unknownSymbol; } if (deferredGlobalNonNullableTypeAlias !== unknownSymbol) { return getTypeAliasInstantiation(deferredGlobalNonNullableTypeAlias, [type]); } return getTypeWithFacts(type, 524288); } function getNonNullableType(type) { return strictNullChecks ? getGlobalNonNullableTypeInstantiation(type) : type; } function isObjectTypeWithInferableIndex(type) { return type.symbol && (type.symbol.flags & (4096 | 2048 | 512)) !== 0 && !typeHasCallOrConstructSignatures(type); } function createSymbolWithType(source, type) { var symbol = createSymbol(source.flags, source.escapedName); symbol.declarations = source.declarations; symbol.parent = source.parent; symbol.type = type; symbol.target = source; if (source.valueDeclaration) { symbol.valueDeclaration = source.valueDeclaration; } if (source.nameType) { symbol.nameType = source.nameType; } return symbol; } function transformTypeOfMembers(type, f) { var members = ts.createSymbolTable(); for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) { var property = _a[_i]; var original = getTypeOfSymbol(property); var updated = f(original); members.set(property.escapedName, updated === original ? property : createSymbolWithType(property, updated)); } return members; } function getRegularTypeOfObjectLiteral(type) { if (!(isObjectLiteralType(type) && type.flags & 33554432)) { return type; } var regularType = type.regularType; if (regularType) { return regularType; } 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; regularNew.objectFlags |= 128; type.regularType = regularNew; return regularNew; } function createWideningContext(parent, propertyName, siblings) { return { parent: parent, propertyName: propertyName, siblings: siblings, resolvedProperties: undefined }; } function getSiblingsOfContext(context) { if (!context.siblings) { var siblings_1 = []; for (var _i = 0, _a = getSiblingsOfContext(context.parent); _i < _a.length; _i++) { var type = _a[_i]; if (isObjectLiteralType(type)) { var prop = getPropertyOfObjectType(type, context.propertyName); if (prop) { forEachType(getTypeOfSymbol(prop), function (t) { siblings_1.push(t); }); } } } context.siblings = siblings_1; } return context.siblings; } function getPropertiesOfContext(context) { if (!context.resolvedProperties) { 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)) { for (var _b = 0, _c = getPropertiesOfType(t); _b < _c.length; _b++) { var prop = _c[_b]; names.set(prop.escapedName, prop); } } } context.resolvedProperties = ts.arrayFrom(names.values()); } return context.resolvedProperties; } function getWidenedProperty(prop, context) { if (!(prop.flags & 4)) { return prop; } var original = getTypeOfSymbol(prop); var propContext = context && createWideningContext(context, prop.escapedName, undefined); var widened = getWidenedTypeWithContext(original, propContext); return widened === original ? prop : createSymbolWithType(prop, widened); } function getUndefinedProperty(prop) { var cached = undefinedProperties.get(prop.escapedName); if (cached) { return cached; } var result = createSymbolWithType(prop, undefinedType); result.flags |= 16777216; undefinedProperties.set(prop.escapedName, result); return result; } function getWidenedTypeOfObjectLiteral(type, context) { var members = ts.createSymbolTable(); for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) { var prop = _a[_i]; members.set(prop.escapedName, getWidenedProperty(prop, context)); } if (context) { for (var _b = 0, _c = getPropertiesOfContext(context); _b < _c.length; _b++) { var prop = _c[_b]; if (!members.has(prop.escapedName)) { members.set(prop.escapedName, getUndefinedProperty(prop)); } } } 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, undefined); } function getWidenedTypeWithContext(type, context) { if (type.flags & 402653184) { if (type.flags & 24576) { return anyType; } if (isObjectLiteralType(type)) { return getWidenedTypeOfObjectLiteral(type, context); } 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)); } } return type; } function reportWideningErrorsInType(type) { var errorReported = false; if (type.flags & 134217728) { if (type.flags & 262144) { if (ts.some(type.types, isEmptyObjectType)) { errorReported = true; } else { for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; if (reportWideningErrorsInType(t)) { errorReported = true; } } } } if (isArrayType(type) || isTupleType(type)) { for (var _b = 0, _c = type.typeArguments; _b < _c.length; _b++) { var t = _c[_b]; if (reportWideningErrorsInType(t)) { errorReported = true; } } } if (isObjectLiteralType(type)) { for (var _d = 0, _e = getPropertiesOfObjectType(type); _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); 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))); } errorReported = true; } } } } return errorReported; } function reportImplicitAnyError(declaration, type) { var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { case 200: case 152: case 151: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; 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: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; 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: error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type); return; default: diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type; } error(declaration, diagnostic, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)), typeAsString); } function reportErrorsFromWidening(declaration, type) { if (produceDiagnostics && noImplicitAny && type.flags & 134217728) { if (!reportWideningErrorsInType(type)) { reportImplicitAnyError(declaration, type); } } } function forEachMatchingParameterType(source, target, callback) { var sourceMax = source.parameters.length; var targetMax = target.parameters.length; var count; if (source.hasRestParameter && target.hasRestParameter) { count = Math.max(sourceMax, targetMax); } else if (source.hasRestParameter) { count = targetMax; } else if (target.hasRestParameter) { count = sourceMax; } else { count = Math.min(sourceMax, targetMax); } for (var i = 0; i < count; i++) { callback(getTypeAtPosition(source, i), getTypeAtPosition(target, i)); } } function createInferenceContext(typeParameters, signature, flags, compareTypes, baseInferences) { var inferences = baseInferences ? baseInferences.map(cloneInferenceInfo) : typeParameters.map(createInferenceInfo); var context = mapper; context.typeParameters = typeParameters; context.signature = signature; context.inferences = inferences; context.flags = flags; context.compareTypes = compareTypes || compareTypesAssignable; return context; function mapper(t) { for (var i = 0; i < inferences.length; i++) { if (t === inferences[i].typeParameter) { inferences[i].isFixed = true; return getInferredType(context, i); } } return t; } } function createInferenceInfo(typeParameter) { return { typeParameter: typeParameter, candidates: undefined, contraCandidates: undefined, inferredType: undefined, priority: undefined, topLevel: true, isFixed: false }; } function cloneInferenceInfo(inference) { return { typeParameter: inference.typeParameter, candidates: inference.candidates && inference.candidates.slice(), contraCandidates: inference.contraCandidates && inference.contraCandidates.slice(), inferredType: inference.inferredType, priority: inference.priority, topLevel: inference.topLevel, isFixed: inference.isFixed }; } function couldContainTypeVariables(type) { var objectFlags = ts.getObjectFlags(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) { type.couldContainTypeVariables = ts.some(type.types, couldContainTypeVariables); } return type.couldContainTypeVariables; } function isTypeParameterAtTopLevel(type, typeParameter) { return type === typeParameter || !!(type.flags & 786432) && ts.some(type.types, function (t) { return isTypeParameterAtTopLevel(t, typeParameter); }); } function createEmptyObjectTypeFromStringLiteral(type) { var members = ts.createSymbolTable(); forEachType(type, function (t) { if (!(t.flags & 64)) { return; } var name = ts.escapeLeadingUnderscores(t.value); var literalProp = createSymbol(4, name); literalProp.type = anyType; if (t.symbol) { literalProp.declarations = t.symbol.declarations; literalProp.valueDeclaration = t.symbol.valueDeclaration; } members.set(name, literalProp); }); var indexInfo = type.flags & 4 ? createIndexInfo(emptyObjectType, false) : undefined; return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined); } function inferTypeForHomomorphicMappedType(source, target) { var key = source.id + "," + target.id; if (reverseMappedCache.has(key)) { return reverseMappedCache.get(key); } reverseMappedCache.set(key, undefined); var type = createReverseMappedType(source, target); reverseMappedCache.set(key, type); return type; } function createReverseMappedType(source, target) { var properties = getPropertiesOfType(source); if (properties.length === 0 && !getIndexInfoOfType(source, 0)) { return undefined; } for (var _i = 0, properties_4 = properties; _i < properties_4.length; _i++) { var prop = properties_4[_i]; if (getTypeOfSymbol(prop).flags & 536870912) { return undefined; } } var reversed = createObjectType(2048 | 16, undefined); reversed.source = source; reversed.mappedType = target; return reversed; } function getTypeOfReverseMappedSymbol(symbol) { return inferReverseMappedType(symbol.propertyType, symbol.mappedType); } function inferReverseMappedType(sourceType, target) { var typeParameter = getIndexedAccessType(getConstraintTypeFromMappedType(target).type, getTypeParameterFromMappedType(target)); var templateType = getTemplateTypeFromMappedType(target); var inference = createInferenceInfo(typeParameter); inferTypes([inference], sourceType, templateType); return getTypeFromInference(inference); } function getUnmatchedProperty(source, target, requireOptionalProperties) { 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)) { var sourceProp = getPropertyOfType(source, targetProp.escapedName); if (!sourceProp) { return targetProp; } } } return undefined; } function typesDefinitelyUnrelated(source, target) { return isTupleType(source) && isTupleType(target) && getTypeReferenceArity(source) !== getTypeReferenceArity(target) || !!getUnmatchedProperty(source, target, false) && !!getUnmatchedProperty(target, source, false); } function getTypeFromInference(inference) { return inference.candidates ? getUnionType(inference.candidates, 2) : inference.contraCandidates ? getIntersectionType(inference.contraCandidates) : emptyObjectType; } function inferTypes(inferences, originalSource, originalTarget, priority) { if (priority === void 0) { priority = 0; } var symbolStack; var visited; var contravariant = false; var propagationType; inferFromTypes(originalSource, originalTarget); function inferFromTypes(source, target) { if (!couldContainTypeVariables(target)) { return; } if (source === wildcardType) { var savePropagationType = propagationType; propagationType = source; inferFromTypes(target, target); propagationType = savePropagationType; return; } if (source.aliasSymbol && source.aliasTypeArguments && source.aliasSymbol === target.aliasSymbol) { var sourceTypes = source.aliasTypeArguments; var targetTypes = target.aliasTypeArguments; for (var i = 0; i < sourceTypes.length; i++) { inferFromTypes(sourceTypes[i], targetTypes[i]); } return; } 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]; inferFromTypes(t, t); } return; } var matchingTypes = void 0; for (var _b = 0, _c = source.types; _b < _c.length; _b++) { var t = _c[_b]; if (typeIdenticalToSomeType(t, target.types)) { (matchingTypes || (matchingTypes = [])).push(t); inferFromTypes(t, t); } else if (t.flags & (128 | 64)) { var b = getBaseTypeOfLiteralType(t); if (typeIdenticalToSomeType(b, target.types)) { (matchingTypes || (matchingTypes = [])).push(t, b); } } } if (matchingTypes) { source = removeTypesFromUnionOrIntersection(source, matchingTypes); target = removeTypesFromUnionOrIntersection(target, matchingTypes); } } if (target.flags & 2162688) { if (source.flags & 536870912 || source === silentNeverType) { return; } var inference = getInferenceInfoForType(target); if (inference) { if (!inference.isFixed) { if (inference.priority === undefined || priority < inference.priority) { inference.candidates = undefined; inference.contraCandidates = undefined; inference.priority = priority; } if (priority === inference.priority) { var candidate = propagationType || source; if (contravariant) { inference.contraCandidates = ts.append(inference.contraCandidates, candidate); } else { inference.candidates = ts.append(inference.candidates, candidate); } } if (!(priority & 8) && target.flags & 65536 && !isTypeParameterAtTopLevel(originalTarget, target)) { inference.topLevel = false; } } return; } } 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) { inferFromContravariantTypes(sourceTypes[i], targetTypes[i]); } else { inferFromTypes(sourceTypes[i], targetTypes[i]); } } } else if (source.flags & 1048576 && target.flags & 1048576) { contravariant = !contravariant; inferFromTypes(source.type, target.type); contravariant = !contravariant; } else if ((isLiteralType(source) || source.flags & 4) && target.flags & 1048576) { var empty = createEmptyObjectTypeFromStringLiteral(source); contravariant = !contravariant; var savePriority = priority; priority |= 16; inferFromTypes(empty, target.type); priority = savePriority; contravariant = !contravariant; } else if (source.flags & 2097152 && target.flags & 2097152) { inferFromTypes(source.objectType, target.objectType); inferFromTypes(source.indexType, target.indexType); } 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) { var targetTypes = target.types; var typeVariableCount = 0; var typeVariable = void 0; for (var _d = 0, targetTypes_3 = targetTypes; _d < targetTypes_3.length; _d++) { var t = targetTypes_3[_d]; if (getInferenceInfoForType(t)) { typeVariable = t; typeVariableCount++; } else { inferFromTypes(source, t); } } if (typeVariableCount === 1) { var savePriority = priority; priority |= 1; inferFromTypes(source, typeVariable); priority = savePriority; } } 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]; inferFromTypes(sourceType, target); } } else { if (!(priority & 32 && source.flags & (524288 | 15794176))) { source = getApparentType(source); } if (source.flags & (131072 | 524288)) { var key = source.id + "," + target.id; if (visited && visited.get(key)) { return; } (visited || (visited = ts.createMap())).set(key, true); 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)) { return; } (symbolStack || (symbolStack = [])).push(symbol); inferFromObjectTypes(source, target); symbolStack.pop(); } else { inferFromObjectTypes(source, target); } } } } function inferFromContravariantTypes(source, target) { if (strictFunctionTypes || priority & 64) { contravariant = !contravariant; inferFromTypes(source, target); contravariant = !contravariant; } else { inferFromTypes(source, target); } } function getInferenceInfoForType(type) { 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) { return inference; } } } return undefined; } function inferFromObjectTypes(source, target) { if (isGenericMappedType(source) && isGenericMappedType(target)) { inferFromTypes(getConstraintTypeFromMappedType(source), getConstraintTypeFromMappedType(target)); inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target)); } if (ts.getObjectFlags(target) & 32) { var constraintType = getConstraintTypeFromMappedType(target); 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; inferFromTypes(inferredType, inference.typeParameter); priority = savePriority; } } return; } if (constraintType.flags & 65536) { var savePriority = priority; priority |= 4; inferFromTypes(getIndexType(source), constraintType); priority = savePriority; inferFromTypes(getUnionType(ts.map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target)); return; } } if (!typesDefinitelyUnrelated(source, target)) { inferFromProperties(source, target); inferFromSignatures(source, target, 0); inferFromSignatures(source, target, 1); inferFromIndexTypes(source, target); } } function inferFromProperties(source, target) { var properties = getPropertiesOfObjectType(target); for (var _i = 0, properties_6 = properties; _i < properties_6.length; _i++) { var targetProp = properties_6[_i]; var sourceProp = getPropertyOfType(source, targetProp.escapedName); if (sourceProp) { inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); } } } function inferFromSignatures(source, target, kind) { var sourceSignatures = getSignaturesOfType(source, kind); var targetSignatures = getSignaturesOfType(target, kind); var sourceLen = sourceSignatures.length; var targetLen = targetSignatures.length; var len = sourceLen < targetLen ? sourceLen : targetLen; for (var i = 0; i < len; i++) { inferFromSignature(getBaseSignature(sourceSignatures[sourceLen - len + i]), getBaseSignature(targetSignatures[targetLen - len + i])); } } function inferFromSignature(source, target) { forEachMatchingParameterType(source, target, inferFromContravariantTypes); var sourceTypePredicate = getTypePredicateOfSignature(source); var targetTypePredicate = getTypePredicateOfSignature(target); if (sourceTypePredicate && targetTypePredicate && sourceTypePredicate.kind === targetTypePredicate.kind) { inferFromTypes(sourceTypePredicate.type, targetTypePredicate.type); } else { inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); } } function inferFromIndexTypes(source, target) { var targetStringIndexType = getIndexTypeOfType(target, 0); if (targetStringIndexType) { var sourceIndexType = getIndexTypeOfType(source, 0) || getImplicitIndexTypeOfType(source, 0); if (sourceIndexType) { inferFromTypes(sourceIndexType, targetStringIndexType); } } var targetNumberIndexType = getIndexTypeOfType(target, 1); if (targetNumberIndexType) { var sourceIndexType = getIndexTypeOfType(source, 1) || getIndexTypeOfType(source, 0) || getImplicitIndexTypeOfType(source, 1); if (sourceIndexType) { inferFromTypes(sourceIndexType, targetNumberIndexType); } } } } function typeIdenticalToSomeType(type, types) { for (var _i = 0, types_11 = types; _i < types_11.length; _i++) { var t = types_11[_i]; if (isTypeIdenticalTo(t, type)) { return true; } } return false; } function removeTypesFromUnionOrIntersection(type, typesToRemove) { var reducedTypes = []; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var t = _a[_i]; if (!typeIdenticalToSomeType(t, typesToRemove)) { reducedTypes.push(t); } } return type.flags & 262144 ? getUnionType(reducedTypes) : getIntersectionType(reducedTypes); } function hasPrimitiveConstraint(type) { var constraint = getConstraintOfTypeParameter(type); return !!constraint && maybeTypeOfKind(constraint, 32764 | 1048576); } function isObjectLiteralType(type) { 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)); return ts.concatenate(ts.filter(candidates, function (t) { return !isObjectLiteralType(t); }), [objectLiteralsType]); } } return candidates; } function getContravariantInference(inference) { return inference.priority & 28 ? getIntersectionType(inference.contraCandidates) : getCommonSubtype(inference.contraCandidates); } function getCovariantInference(inference, context, signature) { var candidates = widenObjectLiteralCandidates(inference.candidates); 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; var unwidenedType = context.flags & 1 || inference.priority & 28 ? getUnionType(baseCandidates, 2) : getCommonSupertype(baseCandidates); return getWidenedType(unwidenedType); } function getInferredType(context, index) { var inference = context.inferences[index]; var inferredType = inference.inferredType; if (!inferredType) { var signature = context.signature; if (signature) { if (inference.candidates) { inferredType = getCovariantInference(inference, context, signature); if (inferredType.flags & 32768 && inference.contraCandidates) { inferredType = getContravariantInference(inference); } } else if (inference.contraCandidates) { inferredType = getContravariantInference(inference); } else if (context.flags & 2) { inferredType = silentNeverType; } else { var defaultType = getDefaultFromTypeParameter(inference.typeParameter); if (defaultType) { inferredType = instantiateType(defaultType, combineTypeMappers(createBackreferenceMapper(context.signature.typeParameters, index), context)); } else { inferredType = getDefaultTypeArgumentType(!!(context.flags & 4)); } } } else { inferredType = getTypeFromInference(inference); } inference.inferredType = inferredType; var constraint = getConstraintOfTypeParameter(inference.typeParameter); if (constraint) { var instantiatedConstraint = instantiateType(constraint, context); if (!context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { inference.inferredType = inferredType = instantiatedConstraint; } } } return inferredType; } function getDefaultTypeArgumentType(isInJavaScriptFile) { return isInJavaScriptFile ? anyType : emptyObjectType; } function getInferredTypes(context) { var result = []; for (var i = 0; i < context.inferences.length; i++) { result.push(getInferredType(context, i)); } return result; } function getResolvedSymbol(node) { var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && 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) { return !!ts.findAncestor(node, function (n) { return n.kind === 165 ? true : n.kind === 71 || n.kind === 146 ? false : "quit"; }); } function getFlowCacheKey(node) { if (node.kind === 71) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? (isConstraintPosition(node) ? "@" : "") + getSymbolId(symbol) : undefined; } if (node.kind === 99) { return "0"; } if (node.kind === 185) { var key = getFlowCacheKey(node.expression); return key && key + "." + ts.idText(node.name); } if (node.kind === 182) { var container = node.parent.parent; var key = container.kind === 182 ? getFlowCacheKey(container) : (container.initializer && getFlowCacheKey(container.initializer)); var text = getBindingElementNameText(node); var result = key && text && (key + "." + text); return result; } return undefined; } function getBindingElementNameText(element) { var parent = element.parent; if (parent.kind === 180) { var name = element.propertyName || element.name; switch (name.kind) { case 71: return ts.idText(name); case 147: return ts.isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined; case 9: case 8: return name.text; default: ts.Debug.fail("Unexpected name kind for binding element name"); } } else { return "" + parent.elements.indexOf(element); } } function isMatchingReference(source, target) { switch (source.kind) { case 71: return target.kind === 71 && getResolvedSymbol(source) === getResolvedSymbol(target) || (target.kind === 232 || target.kind === 182) && getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target); 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: if (target.kind !== 185) return false; var t = target; if (t.name.escapedText !== getBindingElementNameText(source)) return false; if (source.parent.parent.kind === 182 && isMatchingReference(source.parent.parent, t.expression)) { return true; } if (source.parent.parent.kind === 232) { var maybeId = source.parent.parent.initializer; return !!maybeId && isMatchingReference(maybeId, t.expression); } } return false; } function containsMatchingReference(source, target) { while (source.kind === 185) { source = source.expression; if (isMatchingReference(source, target)) { return true; } } return false; } function containsMatchingReferenceDiscriminant(source, target) { return target.kind === 185 && containsMatchingReference(source, target.expression) && isDiscriminantProperty(getDeclaredTypeOfReference(target.expression), target.name.escapedText); } function getDeclaredTypeOfReference(expr) { if (expr.kind === 71) { return getTypeOfSymbol(getResolvedSymbol(expr)); } 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) { var prop = getUnionOrIntersectionProperty(type, name); if (prop && ts.getCheckFlags(prop) & 2) { if (prop.isDiscriminantProperty === undefined) { prop.isDiscriminantProperty = !!(prop.checkFlags & 32) && isLiteralType(getTypeOfSymbol(prop)); } return prop.isDiscriminantProperty; } } return false; } function findDiscriminantProperties(sourceProperties, target) { var result; for (var _i = 0, sourceProperties_2 = sourceProperties; _i < sourceProperties_2.length; _i++) { var sourceProperty = sourceProperties_2[_i]; if (isDiscriminantProperty(target, sourceProperty.escapedName)) { if (result) { result.push(sourceProperty); continue; } result = [sourceProperty]; } } return result; } function isOrContainsMatchingReference(source, target) { return isMatchingReference(source, target) || containsMatchingReference(source, target); } function hasMatchingArgument(callExpression, reference) { if (callExpression.arguments) { for (var _i = 0, _a = callExpression.arguments; _i < _a.length; _i++) { var argument = _a[_i]; if (isOrContainsMatchingReference(reference, argument)) { return true; } } } if (callExpression.expression.kind === 185 && isOrContainsMatchingReference(reference, callExpression.expression.expression)) { return true; } return false; } function getFlowNodeId(flow) { if (!flow.id) { flow.id = nextFlowId; nextFlowId++; } return flow.id; } function typeMaybeAssignableTo(source, target) { if (!(source.flags & 262144)) { return isTypeAssignableTo(source, target); } for (var _i = 0, _a = source.types; _i < _a.length; _i++) { var t = _a[_i]; if (isTypeAssignableTo(t, target)) { return true; } } return false; } function getAssignmentReducedType(declaredType, assignedType) { if (declaredType !== assignedType) { if (assignedType.flags & 32768) { return assignedType; } var reducedType = filterType(declaredType, function (t) { return typeMaybeAssignableTo(assignedType, t); }); if (!(reducedType.flags & 32768)) { return reducedType; } } return declaredType; } function getTypeFactsOfTypes(types) { var result = 0; for (var _i = 0, types_12 = types; _i < types_12.length; _i++) { var t = types_12[_i]; result |= getTypeFacts(t); } return result; } function isFunctionObjectType(type) { 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) { return strictNullChecks ? 4079361 : 4194049; } if (flags & 64) { var isEmpty = type.value === ""; return strictNullChecks ? isEmpty ? 3030785 : 1982209 : isEmpty ? 3145473 : 4194049; } if (flags & (8 | 32)) { return strictNullChecks ? 4079234 : 4193922; } if (flags & 128) { var isZero = type.value === 0; return strictNullChecks ? isZero ? 3030658 : 1982082 : isZero ? 3145346 : 4193922; } if (flags & 16) { return strictNullChecks ? 4078980 : 4193668; } if (flags & 272) { return strictNullChecks ? type === falseType ? 3030404 : 1981828 : type === falseType ? 3145092 : 4193668; } if (flags & 131072) { return isFunctionObjectType(type) ? strictNullChecks ? 1970144 : 4181984 : strictNullChecks ? 1972176 : 4184016; } if (flags & (4096 | 8192)) { return 2457472; } if (flags & 16384) { return 2340752; } if (flags & 3072) { return strictNullChecks ? 1981320 : 4193160; } if (flags & 16777216) { return strictNullChecks ? 1972176 : 4184016; } if (flags & 15794176) { return getTypeFacts(getBaseConstraintOfType(type) || emptyObjectType); } if (flags & 786432) { return getTypeFactsOfTypes(type.types); } return 4194303; } function getTypeWithFacts(type, include) { return filterType(type, function (t) { return (getTypeFacts(t) & include) !== 0; }); } function getTypeWithDefault(type, defaultExpression) { if (defaultExpression) { var defaultType = getTypeOfExpression(defaultExpression); 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) || getIndexTypeOfType(type, 0) || errorType; } function getTypeOfDestructuredArrayElement(type, index) { return isTupleLikeType(type) && getTypeOfPropertyOfType(type, "" + index) || checkIteratedTypeOrElementType(type, undefined, false, false) || errorType; } function getTypeOfDestructuredSpreadExpression(type) { return createArrayType(checkIteratedTypeOrElementType(type, undefined, false, false) || errorType); } function getAssignedTypeOfBinaryExpression(node) { 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 && parent.parent.left === parent || parent.parent.kind === 222 && parent.parent.initializer === parent; } function getAssignedTypeOfArrayLiteralElement(node, element) { return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element)); } function getAssignedTypeOfSpreadExpression(node) { return getTypeOfDestructuredSpreadExpression(getAssignedType(node.parent)); } function getAssignedTypeOfPropertyAssignment(node) { return getTypeOfDestructuredProperty(getAssignedType(node.parent), node.name); } function getAssignedTypeOfShorthandPropertyAssignment(node) { return getTypeWithDefault(getAssignedTypeOfPropertyAssignment(node), node.objectAssignmentInitializer); } function getAssignedType(node) { var parent = node.parent; switch (parent.kind) { case 221: return stringType; case 222: return checkRightHandSideOfForOf(parent.expression, parent.awaitModifier) || errorType; case 200: return getAssignedTypeOfBinaryExpression(parent); case 194: return undefinedType; case 183: return getAssignedTypeOfArrayLiteralElement(parent, node); case 204: return getAssignedTypeOfSpreadExpression(parent); case 270: return getAssignedTypeOfPropertyAssignment(parent); case 271: return getAssignedTypeOfShorthandPropertyAssignment(parent); } return errorType; } function getInitialTypeOfBindingElement(node) { var pattern = node.parent; var parentType = getInitialType(pattern.parent); var type = pattern.kind === 180 ? getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : !node.dotDotDotToken ? getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) : getTypeOfDestructuredSpreadExpression(parentType); return getTypeWithDefault(type, node.initializer); } function getTypeOfInitializer(node) { var links = getNodeLinks(node); return links.resolvedType || getTypeOfExpression(node); } function getInitialTypeOfVariableDeclaration(node) { if (node.initializer) { return getTypeOfInitializer(node.initializer); } if (node.parent.parent.kind === 221) { return stringType; } 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 ? getInitialTypeOfVariableDeclaration(node) : getInitialTypeOfBindingElement(node); } function getInitialOrAssignedType(node) { return node.kind === 232 || node.kind === 182 ? getInitialType(node) : getAssignedType(node); } function isEmptyArrayAssignment(node) { return node.kind === 232 && node.initializer && isEmptyArrayLiteral(node.initializer) || node.kind !== 182 && node.parent.kind === 200 && isEmptyArrayLiteral(node.parent.right); } function getReferenceCandidate(node) { switch (node.kind) { case 191: return getReferenceCandidate(node.expression); case 200: switch (node.operatorToken.kind) { case 58: return getReferenceCandidate(node.left); case 26: return getReferenceCandidate(node.right); } } return node; } function getReferenceRoot(node) { var parent = node.parent; 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) { return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression)); } return neverType; } function getSwitchClauseTypes(switchStatement) { var links = getNodeLinks(switchStatement); if (!links.switchTypes) { links.switchTypes = []; for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) { var clause = _a[_i]; links.switchTypes.push(getTypeOfSwitchClause(clause)); } } return links.switchTypes; } function eachTypeContainedIn(source, types) { 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 && isTypeSubsetOfUnion(source, target); } function isTypeSubsetOfUnion(source, target) { if (source.flags & 262144) { for (var _i = 0, _a = source.types; _i < _a.length; _i++) { var t = _a[_i]; if (!containsType(target.types, t)) { return false; } } return true; } if (source.flags & 512 && getBaseTypeOfEnumLiteralType(source) === target) { return true; } return containsType(target.types, source); } function forEachType(type, f) { return type.flags & 262144 ? ts.forEach(type.types, f) : f(type); } function filterType(type, f) { if (type.flags & 262144) { var types = type.types; var filtered = ts.filter(types, f); return filtered === types ? type : getUnionTypeFromSortedList(filtered, type.flags & 67108864); } return f(type) ? type : neverType; } function mapType(type, mapper, noReductions) { if (type.flags & 32768) { return type; } if (!(type.flags & 262144)) { return mapper(type); } var types = type.types; var mappedType; var mappedTypes; for (var _i = 0, types_13 = types; _i < types_13.length; _i++) { var current = types_13[_i]; var t = mapper(current); if (t) { if (!mappedType) { mappedType = t; } else if (!mappedTypes) { mappedTypes = [mappedType, t]; } else { mappedTypes.push(t); } } } return mappedTypes ? getUnionType(mappedTypes, noReductions ? 0 : 1) : mappedType; } function extractTypesOfKind(type, kind) { return filterType(type, function (t) { return (t.flags & kind) !== 0; }); } function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) { if (isTypeSubsetOf(stringType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 64) || isTypeSubsetOf(numberType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 128)) { return mapType(typeWithPrimitives, function (t) { return t.flags & 4 ? extractTypesOfKind(typeWithLiterals, 4 | 64) : t.flags & 8 ? extractTypesOfKind(typeWithLiterals, 8 | 128) : t; }); } return typeWithPrimitives; } function isIncomplete(flowType) { return flowType.flags === 0; } function getTypeFromFlowType(flowType) { return flowType.flags === 0 ? flowType.type : flowType; } function createFlowType(type, incomplete) { return incomplete ? { flags: 0, type: type } : type; } function createEvolvingArrayType(elementType) { var result = createObjectType(256); result.elementType = elementType; return result; } function getEvolvingArrayType(elementType) { return evolvingArrayTypes[elementType.id] || (evolvingArrayTypes[elementType.id] = createEvolvingArrayType(elementType)); } 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 ? autoArrayType : createArrayType(elementType.flags & 262144 ? getUnionType(elementType.types, 2) : elementType); } function getFinalArrayType(evolvingArrayType) { return evolvingArrayType.finalArrayType || (evolvingArrayType.finalArrayType = createFinalArrayType(evolvingArrayType.elementType)); } function finalizeEvolvingArrayType(type) { return ts.getObjectFlags(type) & 256 ? getFinalArrayType(type) : type; } function getElementTypeOfEvolvingArrayType(type) { 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)) { if (!(ts.getObjectFlags(t) & 256)) { return false; } hasEvolvingArrayType = true; } } return hasEvolvingArrayType; } function getUnionOrEvolvingArrayType(types, subtypeReduction) { return isEvolvingArrayTypeList(types) ? getEvolvingArrayType(getUnionType(ts.map(types, getElementTypeOfEvolvingArrayType))) : getUnionType(ts.sameMap(types, finalizeEvolvingArrayType), subtypeReduction); } function isEvolvingArrayOperationTarget(node) { var root = getReferenceRoot(node); var parent = root.parent; 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 && parent.parent.operatorToken.kind === 58 && parent.parent.left === parent && !ts.isAssignmentTarget(parent.parent) && isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 168); return isLengthPushOrUnshift || isElementAssignment; } function maybeTypePredicateCall(node) { var links = getNodeLinks(node); if (links.maybeTypePredicate === undefined) { links.maybeTypePredicate = getMaybeTypePredicate(node); } return links.maybeTypePredicate; } function getMaybeTypePredicate(node) { 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), signatureHasTypePredicate); } } return false; } function reportFlowControlError(node) { var block = ts.findAncestor(node, ts.isFunctionOrModuleBlock); var sourceFile = ts.getSourceFileOfNode(node); var span = ts.getSpanOfTokenAtPosition(sourceFile, block.statements.pos); diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis)); } function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) { if (initialType === void 0) { initialType = declaredType; } var key; var flowDepth = 0; if (flowAnalysisDisabled) { return errorType; } if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 33492479)) { return declaredType; } var sharedFlowStart = sharedFlowCount; var evolvedType = getTypeFromFlowType(getTypeAtFlowNode(reference.flowNode)); sharedFlowCount = sharedFlowStart; 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) { flowAnalysisDisabled = true; reportFlowControlError(reference); return errorType; } flowDepth++; while (true) { var flags = flow.flags; if (flags & 1024) { for (var i = sharedFlowStart; i < sharedFlowCount; i++) { if (sharedFlowNodes[i] === flow) { flowDepth--; return sharedFlowTypes[i]; } } } var type = void 0; if (flags & 4096) { flow.locked = true; type = getTypeAtFlowNode(flow.antecedent); flow.locked = false; } else if (flags & 2048) { flow = flow.antecedent; continue; } else if (flags & 16) { type = getTypeAtFlowAssignment(flow); if (!type) { flow = flow.antecedent; continue; } } else if (flags & 96) { type = getTypeAtFlowCondition(flow); } else if (flags & 128) { type = getTypeAtSwitchClause(flow); } else if (flags & 12) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; continue; } type = flags & 4 ? getTypeAtFlowBranchLabel(flow) : getTypeAtFlowLoopLabel(flow); } else if (flags & 256) { type = getTypeAtFlowArrayMutation(flow); if (!type) { flow = flow.antecedent; continue; } } else if (flags & 2) { var container = flow.container; if (container && container !== flowContainer && reference.kind !== 185 && reference.kind !== 99) { flow = container.flowNode; continue; } type = initialType; } else { type = convertAutoToAny(declaredType); } if (flags & 1024) { sharedFlowNodes[sharedFlowCount] = flow; sharedFlowTypes[sharedFlowCount] = type; sharedFlowCount++; } flowDepth--; return type; } } function getTypeAtFlowAssignment(flow) { var node = flow.node; if (isMatchingReference(reference, node)) { if (ts.getAssignmentTargetKind(node) === 2) { var flowType = getTypeAtFlowNode(flow.antecedent); return createFlowType(getBaseTypeOfLiteralType(getTypeFromFlowType(flowType)), isIncomplete(flowType)); } if (declaredType === autoType || declaredType === autoArrayType) { if (isEmptyArrayAssignment(node)) { return getEvolvingArrayType(neverType); } var assignedType = getBaseTypeOfLiteralType(getInitialOrAssignedType(node)); return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType; } if (declaredType.flags & 262144) { return getAssignmentReducedType(declaredType, getInitialOrAssignedType(node)); } return declaredType; } if (containsMatchingReference(reference, node)) { return declaredType; } return undefined; } function getTypeAtFlowArrayMutation(flow) { if (declaredType === autoType || declaredType === autoArrayType) { var node = flow.node; 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) { var evolvedType_1 = type; 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); } } else { var indexType = getTypeOfExpression(node.left.argumentExpression); if (isTypeAssignableToKind(indexType, 168)) { evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, node.right); } } return evolvedType_1 === type ? flowType : createFlowType(evolvedType_1, isIncomplete(flowType)); } return flowType; } } return undefined; } function getTypeAtFlowCondition(flow) { var flowType = getTypeAtFlowNode(flow.antecedent); var type = getTypeFromFlowType(flowType); if (type.flags & 32768) { return flowType; } 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 ? silentNeverType : narrowedType; return createFlowType(resultType, incomplete); } function getTypeAtSwitchClause(flow) { var flowType = getTypeAtFlowNode(flow.antecedent); var type = getTypeFromFlowType(flowType); var expr = flow.switchStatement.expression; if (isMatchingReference(reference, expr)) { type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); } else if (isMatchingReferenceDiscriminant(expr, type)) { type = narrowTypeByDiscriminant(type, expr, function (t) { return narrowTypeBySwitchOnDiscriminant(t, flow.switchStatement, flow.clauseStart, flow.clauseEnd); }); } return createFlowType(type, isIncomplete(flowType)); } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; var subtypeReduction = false; var seenIncomplete = false; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { var antecedent = _a[_i]; if (antecedent.flags & 2048 && antecedent.lock.locked) { continue; } var flowType = getTypeAtFlowNode(antecedent); var type = getTypeFromFlowType(flowType); if (type === declaredType && declaredType === initialType) { return type; } ts.pushIfUnique(antecedentTypes, type); if (!isTypeSubsetOf(type, declaredType)) { subtypeReduction = true; } if (isIncomplete(flowType)) { seenIncomplete = true; } } return createFlowType(getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 : 1), seenIncomplete); } function getTypeAtFlowLoopLabel(flow) { var id = getFlowNodeId(flow); var cache = flowLoopCaches[id] || (flowLoopCaches[id] = ts.createMap()); if (!key) { key = getFlowCacheKey(reference); if (!key) { return declaredType; } } var cached = cache.get(key); if (cached) { return cached; } for (var i = flowLoopStart; i < flowLoopCount; i++) { if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key && flowLoopTypes[i].length) { return createFlowType(getUnionOrEvolvingArrayType(flowLoopTypes[i], 1), true); } } var antecedentTypes = []; var subtypeReduction = false; var firstAntecedentType; flowLoopNodes[flowLoopCount] = flow; flowLoopKeys[flowLoopCount] = key; flowLoopTypes[flowLoopCount] = antecedentTypes; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { var antecedent = _a[_i]; flowLoopCount++; var flowType = getTypeAtFlowNode(antecedent); flowLoopCount--; if (!firstAntecedentType) { firstAntecedentType = flowType; } var type = getTypeFromFlowType(flowType); var cached_1 = cache.get(key); if (cached_1) { return cached_1; } ts.pushIfUnique(antecedentTypes, type); if (!isTypeSubsetOf(type, declaredType)) { subtypeReduction = true; } if (type === declaredType) { break; } } var result = getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 : 1); if (isIncomplete(firstAntecedentType)) { return createFlowType(result, true); } cache.set(key, result); return result; } function isMatchingReferenceDiscriminant(expr, computedType) { return expr.kind === 185 && computedType.flags & 262144 && isMatchingReference(reference, expr.expression) && isDiscriminantProperty(computedType, expr.name.escapedText); } function narrowTypeByDiscriminant(type, propAccess, narrowType) { var propName = propAccess.name.escapedText; var propType = getTypeOfPropertyOfType(type, propName); var narrowedPropType = propType && narrowType(propType); return propType === narrowedPropType ? type : filterType(type, function (t) { return isTypeComparableTo(getTypeOfPropertyOfType(t, propName), narrowedPropType); }); } function narrowTypeByTruthiness(type, expr, assumeTrue) { if (isMatchingReference(reference, expr)) { return getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152); } if (isMatchingReferenceDiscriminant(expr, declaredType)) { return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 1048576 : 2097152); }); } if (containsMatchingReferenceDiscriminant(reference, expr)) { return declaredType; } return type; } function isTypePresencePossible(type, propName, assumeTrue) { if (getIndexInfoOfType(type, 0)) { return true; } var prop = getPropertyOfType(type, propName); if (prop) { return prop.flags & 16777216 ? true : assumeTrue; } return !assumeTrue; } function narrowByInKeyword(type, literal, assumeTrue) { 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); }); } return type; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { case 58: return narrowTypeByTruthiness(type, expr.left, assumeTrue); 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 && ts.isStringLiteralLike(right_1)) { return narrowTypeByTypeof(type, left_1, operator_1, right_1, assumeTrue); } if (right_1.kind === 195 && ts.isStringLiteralLike(left_1)) { return narrowTypeByTypeof(type, right_1, operator_1, left_1, assumeTrue); } if (isMatchingReference(reference, left_1)) { return narrowTypeByEquality(type, operator_1, right_1, assumeTrue); } if (isMatchingReference(reference, right_1)) { return narrowTypeByEquality(type, operator_1, left_1, assumeTrue); } if (isMatchingReferenceDiscriminant(left_1, declaredType)) { return narrowTypeByDiscriminant(type, left_1, function (t) { return narrowTypeByEquality(t, operator_1, right_1, assumeTrue); }); } if (isMatchingReferenceDiscriminant(right_1, declaredType)) { return narrowTypeByDiscriminant(type, right_1, function (t) { return narrowTypeByEquality(t, operator_1, left_1, assumeTrue); }); } if (containsMatchingReferenceDiscriminant(reference, left_1) || containsMatchingReferenceDiscriminant(reference, right_1)) { return declaredType; } break; case 93: return narrowTypeByInstanceof(type, expr, assumeTrue); case 92: var target = getReferenceCandidate(expr.right); if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) { return narrowByInKeyword(type, expr.left, assumeTrue); } break; case 26: return narrowType(type, expr.right, assumeTrue); } return type; } function narrowTypeByEquality(type, operator, value, assumeTrue) { if (type.flags & 1) { return type; } if (operator === 33 || operator === 35) { assumeTrue = !assumeTrue; } var valueType = getTypeOfExpression(value); if (valueType.flags & 24576) { if (!strictNullChecks) { return type; } var doubleEquals = operator === 32 || operator === 33; var facts = doubleEquals ? assumeTrue ? 65536 : 524288 : valueType.flags & 16384 ? assumeTrue ? 32768 : 262144 : assumeTrue ? 16384 : 131072; return getTypeWithFacts(type, facts); } if (type.flags & 16909315) { return type; } if (assumeTrue) { var narrowedType = filterType(type, function (t) { return areTypesComparable(t, valueType); }); return narrowedType.flags & 32768 ? type : replacePrimitivesWithLiterals(narrowedType, valueType); } if (isUnitType(valueType)) { var regularType_1 = getRegularTypeOfLiteralType(valueType); return filterType(type, function (t) { return getRegularTypeOfLiteralType(t) !== regularType_1; }); } return type; } function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { var target = getReferenceCandidate(typeOfExpr.expression); if (!isMatchingReference(reference, target)) { if (containsMatchingReference(reference, target)) { return declaredType; } return type; } if (operator === 33 || operator === 35) { assumeTrue = !assumeTrue; } if (type.flags & 1 && literal.text === "function") { return type; } 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) { var constraint = getBaseConstraintOfType(type) || anyType; if (isTypeSubtypeOf(targetType, constraint)) { return getIntersectionType([type, targetType]); } } } } var facts = assumeTrue ? typeofEQFacts.get(literal.text) || 64 : typeofNEFacts.get(literal.text) || 8192; return getTypeWithFacts(type, facts); } function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { var switchTypes = getSwitchClauseTypes(switchStatement); if (!switchTypes.length) { return type; } var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, neverType); var discriminantType = getUnionType(clauseTypes); 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 ? defaultType : getUnionType([caseType, defaultType]); } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceCandidate(expr.left); if (!isMatchingReference(reference, left)) { if (containsMatchingReference(reference, left)) { return declaredType; } return type; } var rightType = getTypeOfExpression(expr.right); if (!isTypeSubtypeOf(rightType, globalFunctionType)) { return type; } var targetType; var prototypeProperty = getPropertyOfType(rightType, "prototype"); if (prototypeProperty) { var prototypePropertyType = getTypeOfSymbol(prototypeProperty); if (!isTypeAny(prototypePropertyType)) { targetType = prototypePropertyType; } } if (isTypeAny(type) && (targetType === globalObjectType || targetType === globalFunctionType)) { return type; } if (!targetType) { var constructSignatures = void 0; if (ts.getObjectFlags(rightType) & 2) { constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures; } 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)); })); } } if (targetType) { return getNarrowedType(type, targetType, assumeTrue, isTypeDerivedFrom); } return type; } function getNarrowedType(type, candidate, assumeTrue, isRelated) { if (!assumeTrue) { return filterType(type, function (t) { return !isRelated(t, candidate); }); } if (type.flags & 262144) { var assignableType = filterType(type, function (t) { return isRelated(t, candidate); }); if (!(assignableType.flags & 32768)) { return assignableType; } } return isTypeSubtypeOf(candidate, type) ? candidate : isTypeAssignableTo(type, candidate) ? type : isTypeAssignableTo(candidate, type) ? candidate : getIntersectionType([type, candidate]); } function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { if (!hasMatchingArgument(callExpression, reference) || !maybeTypePredicateCall(callExpression)) { return type; } var signature = getResolvedSignature(callExpression); var predicate = getTypePredicateOfSignature(signature); if (!predicate) { return type; } if (isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType)) { return type; } if (ts.isIdentifierTypePredicate(predicate)) { var predicateArgument = callExpression.arguments[predicate.parameterIndex - (signature.thisParameter ? 1 : 0)]; if (predicateArgument) { if (isMatchingReference(reference, predicateArgument)) { return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf); } if (containsMatchingReference(reference, predicateArgument)) { return declaredType; } } } else { var invokedExpression = ts.skipParentheses(callExpression.expression); if (invokedExpression.kind === 186 || invokedExpression.kind === 185) { var accessExpression = invokedExpression; var possibleReference = ts.skipParentheses(accessExpression.expression); if (isMatchingReference(reference, possibleReference)) { return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf); } if (containsMatchingReference(reference, possibleReference)) { return declaredType; } } } return type; } function narrowType(type, expr, assumeTrue) { switch (expr.kind) { case 71: case 99: case 97: case 185: return narrowTypeByTruthiness(type, expr, assumeTrue); case 187: return narrowTypeByTypePredicate(type, expr, assumeTrue); case 191: return narrowType(type, expr.expression, assumeTrue); case 200: return narrowTypeByBinaryExpression(type, expr, assumeTrue); case 198: if (expr.operator === 51) { return narrowType(type, expr.operand, !assumeTrue); } break; } return type; } } function getTypeOfSymbolAtLocation(symbol, location) { symbol = symbol.exportSymbol || symbol; if (location.kind === 71) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } if (ts.isExpressionNode(location) && !ts.isAssignmentTarget(location)) { var type = getTypeOfExpression(location); if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { return type; } } } return getTypeOfSymbol(symbol); } function getControlFlowContainer(node) { return ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) || node.kind === 240 || node.kind === 274 || node.kind === 152; }); } function isParameterAssigned(symbol) { var func = ts.getRootDeclaration(symbol.valueDeclaration).parent; var links = getNodeLinks(func); if (!(links.flags & 4194304)) { links.flags |= 4194304; if (!hasParentWithAssignmentsMarked(func)) { markParameterAssignments(func); } } return symbol.isAssigned || false; } function hasParentWithAssignmentsMarked(node) { return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 4194304); }); } function markParameterAssignments(node) { if (node.kind === 71) { if (ts.isAssignmentTarget(node)) { var symbol = getResolvedSymbol(node); if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 149) { symbol.isAssigned = true; } } } else { ts.forEachChild(node, markParameterAssignments); } } function isConstVariable(symbol) { return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType; } function removeOptionalityFromDeclaredType(declaredType, declaration) { var annotationIncludesUndefined = strictNullChecks && declaration.kind === 149 && declaration.initializer && 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 || 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 && maybeTypeOfKind(getBaseConstraintOfType(type) || emptyObjectType, 24576); } function getConstraintForLocation(type, node) { if (type && isConstraintPosition(node) && forEachType(type, typeHasNullableConstraint)) { return mapType(getWidenedType(type), getBaseConstraintOrType); } return type; } function markAliasReferenced(symbol, location) { if (isNonLocalAlias(symbol, 67216319) && !isInTypeQuery(location) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { markAliasSymbolAsReferenced(symbol); } } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); if (symbol === unknownSymbol) { return errorType; } if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); 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)) { 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; return getTypeOfSymbol(symbol); } 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) { 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; getNodeLinks(node).flags |= 16777216; break; } container = ts.getContainingClass(container); } } else if (declaration.kind === 205) { var container = ts.getThisContainer(node, false); while (container.kind !== 274) { if (container.parent === declaration) { if (container.kind === 152 && ts.hasModifier(container, 32)) { getNodeLinks(declaration).flags |= 8388608; getNodeLinks(node).flags |= 16777216; } break; } container = ts.getThisContainer(container, false); } } } checkNestedBlockScopedBinding(node, symbol); var type = getConstraintForLocation(getTypeOfSymbol(localOrExportSymbol), node); var assignmentKind = ts.getAssignmentTargetKind(node); if (assignmentKind) { 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; } if (isReadonlySymbol(localOrExportSymbol)) { error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, symbolToString(symbol)); return errorType; } } var isAlias = localOrExportSymbol.flags & 2097152; if (localOrExportSymbol.flags & 3) { if (assignmentKind === 1) { return type; } } else if (isAlias) { declaration = ts.find(symbol.declarations, isSomeImportDeclaration); } else { return type; } if (!declaration) { return type; } 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); while (flowContainer !== declarationContainer && (flowContainer.kind === 192 || flowContainer.kind === 193 || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) && (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) { flowContainer = getControlFlowContainer(flowContainer); } var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAsignmentTarget || 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); if (type === autoType || type === autoArrayType) { if (flowType === autoType || flowType === autoArrayType) { if (noImplicitAny) { error(ts.getNameOfDeclaration(declaration), ts.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined, symbolToString(symbol), typeToString(flowType)); error(node, ts.Diagnostics.Variable_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType)); } return convertAutoToAny(flowType); } } else if (!assumeInitialized && !(getFalsyFlags(type) & 8192) && getFalsyFlags(flowType) & 8192) { error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); return type; } return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; } function isInsideFunction(node, threshold) { return !!ts.findAncestor(node, function (n) { return n === threshold ? "quit" : ts.isFunctionLike(n); }); } function checkNestedBlockScopedBinding(node, symbol) { if (languageVersion >= 2 || (symbol.flags & (2 | 32)) === 0 || symbol.valueDeclaration.parent.kind === 269) { return; } 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, false)) { containedInIterationStatement = true; break; } current = current.parent; } if (containedInIterationStatement) { if (usedInFunction) { getNodeLinks(current).flags |= 65536; } if (container.kind === 220 && ts.getAncestor(symbol.valueDeclaration, 233).parent === container && isAssignedInBodyOfForStatement(node, container)) { getNodeLinks(symbol.valueDeclaration).flags |= 2097152; } getNodeLinks(symbol.valueDeclaration).flags |= 262144; } if (usedInFunction) { getNodeLinks(symbol.valueDeclaration).flags |= 131072; } } function isAssignedInBodyOfForStatement(node, container) { var current = node; while (current.parent.kind === 191) { current = current.parent; } var isAssigned = false; if (ts.isAssignmentTarget(current)) { isAssigned = true; } else if ((current.parent.kind === 198 || current.parent.kind === 199)) { var expr = current.parent; isAssigned = expr.operator === 43 || expr.operator === 44; } if (!isAssigned) { return false; } return !!ts.findAncestor(current, function (n) { return n === container ? "quit" : n === container.statement; }); } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2; if (container.kind === 152 || container.kind === 155) { var classNode = container.parent; getNodeLinks(classNode).flags |= 4; } else { getNodeLinks(container).flags |= 4; } } function findFirstSuperCall(n) { if (ts.isSuperCall(n)) { return n; } else if (ts.isFunctionLike(n)) { return undefined; } return ts.forEachChild(n, findFirstSuperCall); } function getSuperCallInConstructor(constructor) { var links = getNodeLinks(constructor); if (links.hasSuperCall === undefined) { links.superCall = findFirstSuperCall(constructor.body); links.hasSuperCall = links.superCall ? true : false; } return links.superCall; } function classDeclarationExtendsNull(classDecl) { var classSymbol = getSymbolOfNode(classDecl); var classInstanceType = getDeclaredTypeOfSymbol(classSymbol); var baseConstructorType = getBaseConstructorTypeOfClass(classInstanceType); return baseConstructorType === nullWideningType; } function checkThisBeforeSuper(node, container, diagnosticMessage) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { var superCall = getSuperCallInConstructor(container); if (!superCall || superCall.end > node.pos) { error(node, diagnosticMessage); } } } function checkThisExpression(node) { var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; if (container.kind === 155) { checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class); } if (container.kind === 193) { container = ts.getThisContainer(container, false); needToCaptureLexicalThis = (languageVersion < 2); } switch (container.kind) { case 239: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); break; case 238: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); break; case 155: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; case 152: case 151: if (ts.hasModifier(container, 32)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; case 147: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } if (needToCaptureLexicalThis) { captureLexicalThis(node, container); } var type = tryGetThisTypeAt(node, container); if (!type && noImplicitThis) { 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, false); } if (ts.isFunctionLike(container) && (!isInParameterInitializerBeforeContainingFunction(node) || ts.getThisParameter(container))) { 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)) { return getFlowTypeOfReference(node, getInferredClassType(classSymbol)); } } var thisType = getThisTypeOfDeclaration(container) || getContextualThisParameterType(container); if (thisType) { return getFlowTypeOfReference(node, thisType); } } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); var type = ts.hasModifier(container, 32) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; return getFlowTypeOfReference(node, type); } if (ts.isInJavaScriptFile(node)) { var type = getTypeForThisExpressionFromJSDoc(container); if (type && type !== errorType) { return getFlowTypeOfReference(node, type); } } } function getTypeForThisExpressionFromJSDoc(node) { var jsdocType = ts.getJSDocType(node); if (jsdocType && jsdocType.kind === 284) { var jsDocFunctionType = jsdocType; if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].name && jsDocFunctionType.parameters[0].name.escapedText === "this") { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); } } var thisTag = ts.getJSDocThisTag(node); if (thisTag && thisTag.typeExpression) { return getTypeFromTypeNode(thisTag.typeExpression); } } function isInConstructorArgumentInitializer(node, constructorDecl) { return !!ts.findAncestor(node, function (n) { return n === constructorDecl ? "quit" : n.kind === 149; }); } function checkSuperExpression(node) { var isCallExpression = node.parent.kind === 187 && node.parent.expression === node; var container = ts.getSuperContainer(node, true); var needToCaptureLexicalThis = false; if (!isCallExpression) { while (container && container.kind === 193) { container = ts.getSuperContainer(container, true); needToCaptureLexicalThis = languageVersion < 2; } } var canUseSuperExpression = isLegalUsageOfSuperExpression(container); var nodeCheckFlag = 0; if (!canUseSuperExpression) { 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)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class); } return errorType; } 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) || isCallExpression) { nodeCheckFlag = 512; } else { nodeCheckFlag = 256; } getNodeLinks(node).flags |= nodeCheckFlag; if (container.kind === 154 && ts.hasModifier(container, 256)) { if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) { getNodeLinks(container).flags |= 4096; } else { getNodeLinks(container).flags |= 2048; } } if (needToCaptureLexicalThis) { captureLexicalThis(node.parent, container); } 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 { return anyType; } } var classLikeDeclaration = container.parent; if (!ts.getClassExtendsHeritageClauseElement(classLikeDeclaration)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class); return errorType; } var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classLikeDeclaration)); var baseClassType = classType && getBaseTypes(classType)[0]; if (!baseClassType) { return errorType; } if (container.kind === 155 && isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return errorType; } return nodeCheckFlag === 512 ? getBaseConstructorTypeOfClass(classType) : getTypeWithThisArgument(baseClassType, classType.thisType); function isLegalUsageOfSuperExpression(container) { if (!container) { return false; } if (isCallExpression) { return container.kind === 155; } else { 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 || container.kind === 153 || container.kind === 156 || container.kind === 157 || container.kind === 152 || container.kind === 151 || container.kind === 155; } } } return false; } } function getContainingObjectLiteral(func) { 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 && type.target === globalThisType ? type.typeArguments[0] : undefined; } function getThisTypeFromContextualType(type) { return mapType(type, function (t) { return t.flags & 524288 ? ts.forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); }); } function getContextualThisParameterType(func) { if (func.kind === 193) { return undefined; } if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { var thisParameter = contextualSignature.thisParameter; if (thisParameter) { return getTypeOfSymbol(thisParameter); } } } var inJs = ts.isInJavaScriptFile(func); if (noImplicitThis || inJs) { var containingLiteral = getContainingObjectLiteral(func); if (containingLiteral) { var contextualType = getApparentTypeOfContextualType(containingLiteral); var literal = containingLiteral; var type = contextualType; while (type) { var thisType = getThisTypeFromContextualType(type); if (thisType) { return instantiateType(thisType, getContextualMapper(containingLiteral)); } if (literal.parent.kind !== 270) { break; } literal = literal.parent.parent; type = getApparentTypeOfContextualType(literal); } return contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral); } var parent = func.parent; if (parent.kind === 200 && parent.operatorToken.kind === 58) { var target = parent.left; if (target.kind === 185 || target.kind === 186) { var expression = target.expression; if (inJs && ts.isIdentifier(expression)) { var sourceFile = ts.getSourceFileOfNode(parent); if (sourceFile.commonJsModuleIndicator && getResolvedSymbol(expression) === sourceFile.symbol) { return undefined; } } return checkExpressionCached(expression); } } } return undefined; } function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; if (!isContextSensitiveFunctionOrObjectLiteralMethod(func)) { return undefined; } var iife = ts.getImmediatelyInvokedFunctionExpression(func); if (iife && iife.arguments) { var indexOfParameter = func.parameters.indexOf(parameter); if (parameter.dotDotDotToken) { var restTypes = []; for (var i = indexOfParameter; i < iife.arguments.length; i++) { restTypes.push(getWidenedLiteralType(checkExpression(iife.arguments[i]))); } return restTypes.length ? createArrayType(getUnionType(restTypes)) : undefined; } var links = getNodeLinks(iife); var cached = links.resolvedSignature; links.resolvedSignature = anySignature; var type = indexOfParameter < iife.arguments.length ? getWidenedLiteralType(checkExpression(iife.arguments[indexOfParameter])) : parameter.initializer ? undefined : undefinedWideningType; links.resolvedSignature = cached; return type; } var contextualSignature = getContextualSignature(func); if (contextualSignature) { var funcHasRestParameters = ts.hasRestParameter(func); 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); indexOfParameter -= 1; } if (indexOfParameter < len) { return getTypeAtPosition(contextualSignature, indexOfParameter); } if (funcHasRestParameters && indexOfParameter === (func.parameters.length - 1) && isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { return getTypeOfSymbol(ts.last(contextualSignature.parameters)); } } } function getContextualTypeForInitializerExpression(node) { var declaration = node.parent; if (ts.hasInitializer(declaration) && node === declaration.initializer) { var typeNode = ts.getEffectiveTypeAnnotationNode(declaration); if (typeNode) { return getTypeFromTypeNode(typeNode); } if (declaration.kind === 149) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; } } if (ts.isBindingPattern(declaration.name)) { 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) { var parentTypeNode = ts.getEffectiveTypeAnnotationNode(parentDeclaration); if (parentTypeNode && !ts.isBindingPattern(name)) { var text = ts.getTextOfPropertyName(name); if (text) { return getTypeOfPropertyOfType(getTypeFromTypeNode(parentTypeNode), text); } } } } } return undefined; } function getContextualTypeForReturnExpression(node) { var func = ts.getContainingFunction(node); if (func) { var functionFlags = ts.getFunctionFlags(func); if (functionFlags & 1) { return undefined; } var contextualReturnType = getContextualReturnType(func); return functionFlags & 2 ? contextualReturnType && getAwaitedTypeOfPromise(contextualReturnType) : contextualReturnType; } return undefined; } function getContextualTypeForYieldOperand(node) { var func = ts.getContainingFunction(node); if (func) { var functionFlags = ts.getFunctionFlags(func); var contextualReturnType = getContextualReturnType(func); if (contextualReturnType) { return node.asteriskToken ? contextualReturnType : getIteratedTypeOfGenerator(contextualReturnType, (functionFlags & 2) !== 0); } } return undefined; } function isInParameterInitializerBeforeContainingFunction(node) { var inBindingInitializer = false; while (node.parent && !ts.isFunctionLike(node.parent)) { if (ts.isParameter(node.parent) && (inBindingInitializer || node.parent.initializer === node)) { return true; } if (ts.isBindingElement(node.parent) && node.parent.initializer === node) { inBindingInitializer = true; } node = node.parent; } return false; } function getContextualReturnType(functionDecl) { if (functionDecl.kind === 155 || ts.getEffectiveReturnTypeNode(functionDecl) || isGetAccessorWithAnnotatedSetAccessor(functionDecl)) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); if (signature && !isResolvingReturnTypeOfSignature(signature)) { return getReturnTypeOfSignature(signature); } return undefined; } function getContextualTypeForArgument(callTarget, arg) { var args = getEffectiveCallArguments(callTarget); var argIndex = args.indexOf(arg); return argIndex === -1 ? undefined : getContextualTypeForArgumentAtIndex(callTarget, argIndex); } function getContextualTypeForArgumentAtIndex(callTarget, argIndex) { var signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget); return getTypeAtPosition(signature, argIndex); } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { if (template.parent.kind === 189) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; } function getContextualTypeForBinaryOperand(node) { var binaryExpression = node.parent; var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right; switch (operatorToken.kind) { case 58: return node === right && isContextSensitiveAssignment(binaryExpression) ? getTypeOfExpression(left) : undefined; case 54: var type = getContextualType(binaryExpression); return !type && node === right && !ts.isDefaultedJavascriptInitializer(binaryExpression) ? getTypeOfExpression(left) : type; case 53: case 26: return node === right ? getContextualType(binaryExpression) : undefined; default: return undefined; } } function isContextSensitiveAssignment(binaryExpression) { var kind = ts.getSpecialPropertyAssignmentKind(binaryExpression); switch (kind) { case 0: return true; case 5: return !binaryExpression.left.symbol; case 1: case 2: case 3: case 4: case 6: return false; default: return ts.Debug.assertNever(kind); } } function getTypeOfPropertyOfContextualType(type, name) { return mapType(type, function (t) { var prop = t.flags & 917504 ? getPropertyOfType(t, name) : undefined; return prop ? getTypeOfSymbol(prop) : undefined; }, true); } function getIndexTypeOfContextualType(type, kind) { return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, true); } function contextualTypeIsTupleLikeType(type) { return !!(type.flags & 262144 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); } function getContextualTypeForObjectLiteralMethod(node) { ts.Debug.assert(ts.isObjectLiteralMethod(node)); if (node.flags & 8388608) { return undefined; } return getContextualTypeForObjectLiteralElement(node); } function getContextualTypeForObjectLiteralElement(element) { var objectLiteral = element.parent; var type = getApparentTypeOfContextualType(objectLiteral); if (type) { if (!hasNonBindableDynamicName(element)) { var symbolName_1 = getSymbolOfNode(element).escapedName; var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_1); if (propertyType) { return propertyType; } } return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) || getIndexTypeOfContextualType(type, 0); } return undefined; } function getContextualTypeForElementExpression(arrayContextualType, index) { return arrayContextualType && (getTypeOfPropertyOfContextualType(arrayContextualType, "" + index) || getIndexTypeOfContextualType(arrayContextualType, 1) || getIteratedTypeOrElementType(arrayContextualType, undefined, false, false, false)); } 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); var jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); return attributesType && !isTypeAny(attributesType) && jsxChildrenPropertyName && jsxChildrenPropertyName !== "" ? getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName) : undefined; } function getContextualTypeForJsxExpression(node) { var exprParent = node.parent; return ts.isJsxAttributeLike(exprParent) ? getContextualType(node) : ts.isJsxElement(exprParent) ? getContextualTypeForChildJsxExpression(exprParent) : undefined; } function getContextualTypeForJsxAttribute(attribute) { if (ts.isJsxAttribute(attribute)) { var attributesType = getApparentTypeOfContextualType(attribute.parent); if (!attributesType || isTypeAny(attributesType)) { return undefined; } return getTypeOfPropertyOfContextualType(attributesType, attribute.name.escapedText); } else { return getContextualType(attribute.parent); } } function isPossiblyDiscriminantValue(node) { switch (node.kind) { case 9: case 8: case 13: case 101: case 86: case 95: case 71: return true; case 185: case 191: return isPossiblyDiscriminantValue(node.expression); } return false; } function getApparentTypeOfContextualType(node) { var contextualType = getContextualType(node); contextualType = contextualType && mapType(contextualType, getApparentType); if (!(contextualType && contextualType.flags & 262144 && ts.isObjectLiteralExpression(node))) { return contextualType; } 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) 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, undefined)) { if (match) { if (type === match) continue; match = undefined; break propLoop; } match = type; } } } } return match || contextualType; } function getContextualType(node) { if (node.flags & 8388608) { return undefined; } if (node.contextualType) { return node.contextualType; } var parent = node.parent; switch (parent.kind) { case 232: case 149: case 152: case 151: case 182: return getContextualTypeForInitializerExpression(node); case 193: case 225: return getContextualTypeForReturnExpression(node); case 203: return getContextualTypeForYieldOperand(parent); case 187: case 188: return getContextualTypeForArgument(parent, node); case 190: case 208: return getTypeFromTypeNode(parent.type); case 200: return getContextualTypeForBinaryOperand(node); case 270: case 271: return getContextualTypeForObjectLiteralElement(parent); case 272: return getApparentTypeOfContextualType(parent.parent); case 183: { var arrayLiteral = parent; var type = getApparentTypeOfContextualType(arrayLiteral); return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node)); } case 201: return getContextualTypeForConditionalOperand(node); case 211: ts.Debug.assert(parent.parent.kind === 202); return getContextualTypeForSubstitutionExpression(parent.parent, node); case 191: { var tag = ts.isInJavaScriptFile(parent) ? ts.getJSDocTypeTag(parent) : undefined; return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent); } case 265: return getContextualTypeForJsxExpression(parent); case 262: case 264: return getContextualTypeForJsxAttribute(parent); case 257: case 256: return getContextualJsxElementAttributesType(parent); } return undefined; } function getContextualMapper(node) { var ancestor = ts.findAncestor(node, function (n) { return !!n.contextualMapper; }); return ancestor ? ancestor.contextualMapper : identityMapper; } function getContextualJsxElementAttributesType(node) { if (isJsxIntrinsicIdentifier(node.tagName)) { return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); } var valueType = checkExpression(node.tagName); if (isTypeAny(valueType)) { return anyType; } var isJs = ts.isInJavaScriptFile(node); return mapType(valueType, function (t) { return getJsxSignaturesParameterTypes(t, isJs, node); }); } function getJsxSignaturesParameterTypes(valueType, isJs, context) { if (valueType.flags & 4) { return anyType; } else if (valueType.flags & 64) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, context); if (intrinsicElementsType !== errorType) { var stringLiteralTypeName = valueType.value; var intrinsicProp = getPropertyOfType(intrinsicElementsType, ts.escapeLeadingUnderscores(stringLiteralTypeName)); if (intrinsicProp) { return getTypeOfSymbol(intrinsicProp); } var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); if (indexSignatureType) { return indexSignatureType; } } return anyType; } var signatures = getSignaturesOfType(valueType, 1); var ctor = true; if (signatures.length === 0) { signatures = getSignaturesOfType(valueType, 0); ctor = false; if (signatures.length === 0) { return errorType; } } var links = getNodeLinks(context); if (!links.resolvedSignatures) { links.resolvedSignatures = ts.createMap(); } var cacheKey = "" + getTypeId(valueType); var cachedResolved = links.resolvedSignatures.get(cacheKey); if (cachedResolved && cachedResolved !== resolvingSignaturesArray) { signatures = cachedResolved; } else if (!cachedResolved) { 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, false); } : function (t) { return getJsxPropsTypeFromCallSignature(t, context); }), 0); } function getJsxPropsTypeFromCallSignature(sig, context) { var propsType = getTypeOfFirstParameterOfSignatureWithFallback(sig, emptyObjectType); var intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context); if (intrinsicAttribs !== errorType) { propsType = intersectTypes(intrinsicAttribs, propsType); } return propsType; } function getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation) { var instanceType = getReturnTypeOfSignature(sig); return isTypeAny(instanceType) ? instanceType : getTypeOfPropertyOfType(instanceType, forcedLookupLocation); } function getJsxPropsTypeFromClassType(sig, isJs, context, reportErrors) { var forcedLookupLocation = getJsxElementPropertiesName(getJsxNamespaceAt(context)); var attributesType = forcedLookupLocation === undefined ? getTypeOfFirstParameterOfSignatureWithFallback(sig, emptyObjectType) : forcedLookupLocation === "" ? getReturnTypeOfSignature(sig) : getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation); if (!attributesType) { 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)) { return attributesType; } else { var apparentAttributesType = attributesType; var intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes, context); if (intrinsicClassAttribs !== errorType) { var typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol); var hostClassType = getReturnTypeOfSignature(sig); apparentAttributesType = intersectTypes(typeParams ? createTypeReference(intrinsicClassAttribs, fillMissingTypeArguments([hostClassType], typeParams, getMinTypeArgumentCount(typeParams), isJs)) : intrinsicClassAttribs, apparentAttributesType); } var intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context); if (intrinsicAttribs !== errorType) { apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType); } return apparentAttributesType; } } function getContextualCallSignature(type, node) { var signatures = getSignaturesOfType(type, 0); if (signatures.length === 1) { var signature = signatures[0]; if (!isAritySmaller(signature, node)) { return signature; } } } function isAritySmaller(signature, target) { var targetParameterCount = 0; for (; targetParameterCount < target.parameters.length; targetParameterCount++) { var param = target.parameters[targetParameterCount]; if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { break; } } if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) { targetParameterCount--; } var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length; return sourceLength < targetParameterCount; } function isFunctionExpressionOrArrowFunction(node) { return node.kind === 192 || node.kind === 193; } function getContextualSignatureForFunctionLikeDeclaration(node) { return isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node) ? getContextualSignature(node) : undefined; } function getContextualTypeForFunctionLikeDeclaration(node) { return ts.isObjectLiteralMethod(node) ? getContextualTypeForObjectLiteralMethod(node) : getApparentTypeOfContextualType(node); } function getContextualSignature(node) { ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); var type; if (ts.isInJavaScriptFile(node)) { var jsdoc = ts.getJSDocType(node); if (jsdoc) { type = getTypeFromTypeNode(jsdoc); } } if (!type) { type = getContextualTypeForFunctionLikeDeclaration(node); } if (!type) { return undefined; } if (!(type.flags & 262144)) { return getContextualCallSignature(type, node); } var signatureList; var types = type.types; for (var _i = 0, types_15 = types; _i < types_15.length; _i++) { var current = types_15[_i]; var signature = getContextualCallSignature(current, node); if (signature) { if (!signatureList) { signatureList = [signature]; } else if (!compareSignaturesIdentical(signatureList[0], signature, false, true, true, compareTypesIdentical)) { return undefined; } else { signatureList.push(signature); } } } var result; if (signatureList) { result = cloneSignature(signatureList[0]); result.unionSignatures = signatureList; } return result; } function checkSpreadExpression(node, checkMode) { if (languageVersion < 2 && compilerOptions.downlevelIteration) { checkExternalEmitHelpers(node, 1536); } var arrayOrIterableType = checkExpression(node.expression, checkMode); return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false, false); } function hasDefaultValue(node) { return (node.kind === 182 && !!node.initializer) || (node.kind === 200 && node.operatorToken.kind === 58); } function checkArrayLiteral(node, checkMode) { var elements = node.elements; var hasSpreadElement = false; var elementTypes = []; var inDestructuringPattern = ts.isAssignmentTarget(node); var contextualType = getApparentTypeOfContextualType(node); for (var index = 0; index < elements.length; index++) { var e = elements[index]; if (inDestructuringPattern && e.kind === 204) { var restArrayType = checkExpression(e.expression, checkMode); var restElementType = getIndexTypeOfType(restArrayType, 1) || getIteratedTypeOrElementType(restArrayType, undefined, false, false, false); if (restElementType) { elementTypes.push(restElementType); } } else { var elementContextualType = getContextualTypeForElementExpression(contextualType, index); var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType); elementTypes.push(type); } hasSpreadElement = hasSpreadElement || e.kind === 204; } if (!hasSpreadElement) { if (inDestructuringPattern && elementTypes.length) { var type = cloneTypeReference(createTupleType(elementTypes)); type.pattern = node; return type; } if (contextualType && contextualTypeIsTupleLikeType(contextualType)) { var pattern = contextualType.pattern; 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]; if (hasDefaultValue(patternElement)) { elementTypes.push(contextualType.typeArguments[i]); } else { 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); } } } if (elementTypes.length) { return createTupleType(elementTypes); } } } return createArrayType(elementTypes.length ? getUnionType(elementTypes, 2) : strictNullChecks ? implicitNeverType : undefinedWideningType); } function isNumericName(name) { switch (name.kind) { case 147: return isNumericComputedName(name); case 71: return isNumericLiteralName(name.escapedText); case 8: case 9: return isNumericLiteralName(name.text); default: return false; } } function isNumericComputedName(name) { return isTypeAssignableToKind(checkComputedPropertyName(name), 168); } function isInfinityOrNaNString(name) { return name === "Infinity" || name === "-Infinity" || name === "NaN"; } function isNumericLiteralName(name) { return (+name).toString() === name; } function checkComputedPropertyName(node) { var links = getNodeLinks(node.expression); if (!links.resolvedType) { links.resolvedType = checkExpression(node.expression); 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, true); } } return links.resolvedType; } function getObjectLiteralIndexInfo(propertyNodes, offset, properties, kind) { var propTypes = []; for (var i = 0; i < properties.length; i++) { if (kind === 0 || isNumericName(propertyNodes[i + offset].name)) { propTypes.push(getTypeOfSymbol(properties[i])); } } var unionType = propTypes.length ? getUnionType(propTypes, 2) : undefinedType; return createIndexInfo(unionType, false); } function checkObjectLiteral(node, checkMode) { var inDestructuringPattern = ts.isAssignmentTarget(node); checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable; var propertiesArray = []; var spread = emptyObjectType; var propagatedFlags = 33554432; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && (contextualType.pattern.kind === 180 || contextualType.pattern.kind === 184); var isInJSFile = ts.isInJavaScriptFile(node) && !ts.isInJsonFile(node); var isJSObjectLiteral = !contextualType && isInJSFile; var typeFlags = 0; var patternWithComputedProperties = false; var hasComputedStringProperty = false; var hasComputedNumberProperty = false; propertiesTable = ts.createSymbolTable(); var offset = 0; 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 && !ts.isWellKnownSymbolSyntactically(memberDecl.name.expression) ? checkComputedPropertyName(memberDecl.name) : undefined; if (memberDecl.kind === 270 || memberDecl.kind === 271 || ts.isObjectLiteralMethod(memberDecl)) { var type = memberDecl.kind === 270 ? checkPropertyAssignment(memberDecl, checkMode) : memberDecl.kind === 271 ? checkExpressionForMutableLocation(memberDecl.name, checkMode) : checkObjectLiteralMethod(memberDecl, checkMode); if (isInJSFile) { var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl); if (jsDocType) { checkTypeAssignableTo(type, jsDocType, memberDecl); type = jsDocType; } } typeFlags |= type.flags; var nameType = computedNameType && computedNameType.flags & 2240 ? computedNameType : undefined; var prop = nameType ? createSymbol(4 | member.flags, getLateBoundNameFromType(nameType), 1024) : createSymbol(4 | member.flags, member.escapedName); if (nameType) { prop.nameType = nameType; } if (inDestructuringPattern) { var isOptional = (memberDecl.kind === 270 && hasDefaultValue(memberDecl.initializer)) || (memberDecl.kind === 271 && memberDecl.objectAssignmentInitializer); if (isOptional) { prop.flags |= 16777216; } } else if (contextualTypeHasPattern && !(ts.getObjectFlags(contextualType) & 512)) { var impliedProp = getPropertyOfType(contextualType, member.escapedName); if (impliedProp) { prop.flags |= impliedProp.flags & 16777216; } 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)); } } prop.declarations = member.declarations; prop.parent = member.parent; if (member.valueDeclaration) { prop.valueDeclaration = member.valueDeclaration; } prop.type = type; prop.target = member; member = prop; } else if (memberDecl.kind === 272) { if (languageVersion < 2) { checkExternalEmitHelpers(memberDecl, 2); } if (propertiesArray.length > 0) { spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags, 0); propertiesArray = []; propertiesTable = ts.createSymbolTable(); hasComputedStringProperty = false; hasComputedNumberProperty = false; typeFlags = 0; } var type = checkExpression(memberDecl.expression); if (!isValidSpreadType(type)) { error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types); return errorType; } spread = getSpreadType(spread, type, node.symbol, propagatedFlags, 0); offset = i + 1; continue; } else { ts.Debug.assert(memberDecl.kind === 156 || memberDecl.kind === 157); checkNodeDeferred(memberDecl); } if (computedNameType && !(computedNameType.flags & 2240)) { if (isTypeAssignableTo(computedNameType, stringNumberSymbolType)) { if (isTypeAssignableTo(computedNameType, numberType)) { hasComputedNumberProperty = true; } else { hasComputedStringProperty = true; } if (inDestructuringPattern) { patternWithComputedProperties = true; } } } else { propertiesTable.set(member.escapedName, member); } propertiesArray.push(member); } 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)) { 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); propertiesArray.push(prop); } } } if (spread !== emptyObjectType) { if (propertiesArray.length > 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) : 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; result.flags |= 268435456 | freshObjectLiteralFlag | (typeFlags & 939524096); result.objectFlags |= 128; if (patternWithComputedProperties) { result.objectFlags |= 512; } if (inDestructuringPattern) { result.pattern = node; } if (!(result.flags & 24576)) { propagatedFlags |= (result.flags & 939524096); } return result; } } function isValidSpreadType(type) { 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) { checkJsxOpeningLikeElementOrOpeningFragment(node.openingElement, checkMode); if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) { getIntrinsicTagSymbol(node.closingElement); } else { checkExpression(node.closingElement.tagName); } return getJsxElementTypeAt(node) || anyType; } function checkJsxFragment(node, checkMode) { checkJsxOpeningLikeElementOrOpeningFragment(node.openingFragment, checkMode); 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; } function isUnhyphenatedJsxName(name) { return !ts.stringContains(name, "-"); } function isJsxIntrinsicIdentifier(tagName) { switch (tagName.kind) { case 185: case 99: return false; case 71: return ts.isIntrinsicJsxName(tagName.escapedText); default: return ts.Debug.fail(); } } function checkJsxAttribute(node, checkMode) { return node.initializer ? checkExpressionForMutableLocation(node.initializer, checkMode) : trueType; } function createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode) { var attributes = openingLikeElement.attributes; var attributesTable = ts.createSymbolTable(); var spread = emptyObjectType; var hasSpreadAnyType = false; var typeToIntersect; var explicitlySpecifyChildrenAttribute = false; var jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(openingLikeElement)); for (var _i = 0, _a = attributes.properties; _i < _a.length; _i++) { var attributeDecl = _a[_i]; var member = attributeDecl.symbol; if (ts.isJsxAttribute(attributeDecl)) { var exprType = checkJsxAttribute(attributeDecl, checkMode); var attributeSymbol = createSymbol(4 | 33554432 | member.flags, member.escapedName); attributeSymbol.declarations = member.declarations; attributeSymbol.parent = member.parent; if (member.valueDeclaration) { attributeSymbol.valueDeclaration = member.valueDeclaration; } attributeSymbol.type = exprType; attributeSymbol.target = member; attributesTable.set(attributeSymbol.escapedName, attributeSymbol); if (attributeDecl.name.escapedText === jsxChildrenPropertyName) { explicitlySpecifyChildrenAttribute = true; } } else { ts.Debug.assert(attributeDecl.kind === 264); if (attributesTable.size > 0) { spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, 0, 4096); attributesTable = ts.createSymbolTable(); } var exprType = checkExpressionCached(attributeDecl.expression, checkMode); if (isTypeAny(exprType)) { hasSpreadAnyType = true; } if (isValidSpreadType(exprType)) { spread = getSpreadType(spread, exprType, openingLikeElement.symbol, 0, 4096); } else { typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType; } } } if (!hasSpreadAnyType) { if (attributesTable.size > 0) { spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, 0, 4096); } } 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 !== "") { if (explicitlySpecifyChildrenAttribute) { error(attributes, ts.Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, ts.unescapeLeadingUnderscores(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, undefined, undefined), attributes.symbol, 0, 4096); } } if (hasSpreadAnyType) { return anyType; } if (typeToIntersect && spread !== emptyObjectType) { return getIntersectionType([typeToIntersect, spread]); } return typeToIntersect || (spread === emptyObjectType ? createJsxAttributesType() : spread); function createJsxAttributesType() { var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, undefined, undefined); result.flags |= 268435456; result.objectFlags |= 128 | 4096; return result; } } function checkJsxChildren(node, checkMode) { var childrenTypes = []; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; if (child.kind === 10) { if (!child.containsOnlyWhiteSpaces) { childrenTypes.push(stringType); } } else { childrenTypes.push(checkExpressionForMutableLocation(child, checkMode)); } } return childrenTypes; } 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); return typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType; } function getIntrinsicTagSymbol(node) { var links = getNodeLinks(node); if (!links.resolvedSymbol) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, node); if (intrinsicElementsType !== errorType) { if (!ts.isIdentifier(node.tagName)) return ts.Debug.fail(); var intrinsicProp = getPropertyOfType(intrinsicElementsType, node.tagName.escapedText); if (intrinsicProp) { links.jsxFlags |= 1; return links.resolvedSymbol = intrinsicProp; } var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); if (indexSignatureType) { links.jsxFlags |= 2; return links.resolvedSymbol = intrinsicElementsType.symbol; } error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(node.tagName), "JSX." + JsxNames.IntrinsicElements); return links.resolvedSymbol = unknownSymbol; } else { if (noImplicitAny) { error(node, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, ts.unescapeLeadingUnderscores(JsxNames.IntrinsicElements)); } return links.resolvedSymbol = unknownSymbol; } } return links.resolvedSymbol; } function instantiateJsxSignatures(node, signatures) { var instantiatedSignatures = []; var candidateForTypeArgumentError; var hasTypeArgumentError = !!node.typeArguments; for (var _i = 0, signatures_3 = signatures; _i < signatures_3.length; _i++) { var signature = signatures_3[_i]; if (signature.typeParameters) { var isJavascript = ts.isInJavaScriptFile(node); var typeArgumentInstantiated = getJsxSignatureTypeArgumentInstantiation(signature, node, isJavascript, false); if (typeArgumentInstantiated) { hasTypeArgumentError = false; instantiatedSignatures.push(typeArgumentInstantiated); } else { if (node.typeArguments && hasCorrectTypeArgumentArity(signature, node.typeArguments)) { candidateForTypeArgumentError = signature; } var inferenceContext = createInferenceContext(signature.typeParameters, signature, isJavascript ? 4 : 0); var typeArguments = inferJsxTypeArguments(signature, node, inferenceContext); instantiatedSignatures.push(getSignatureInstantiation(signature, typeArguments, isJavascript)); } } else { instantiatedSignatures.push(signature); } } if (node.typeArguments && hasTypeArgumentError) { if (candidateForTypeArgumentError) { checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, true); } else if (node.typeArguments.length !== 0) { diagnostics.add(getTypeArgumentArityError(node, signatures, node.typeArguments)); } } return instantiatedSignatures; } function getJsxSignatureTypeArgumentInstantiation(signature, node, isJavascript, reportErrors) { if (reportErrors === void 0) { reportErrors = false; } if (!node.typeArguments) { return; } if (!hasCorrectTypeArgumentArity(signature, node.typeArguments)) { return; } var args = checkTypeArguments(signature, node.typeArguments, reportErrors); if (!args) { return; } return getSignatureInstantiation(signature, args, isJavascript); } function getJsxNamespaceAt(location) { var namespaceName = getJsxNamespace(location); var resolvedNamespace = resolveName(location, namespaceName, 1920, undefined, namespaceName, false); if (resolvedNamespace) { var candidate = getSymbol(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, 1920); if (candidate) { return candidate; } } return getGlobalSymbol(JsxNames.JSX, 1920, undefined); } function getNameFromJsxElementAttributesContainer(nameOfAttribPropContainer, jsxNamespace) { var jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol(jsxNamespace.exports, nameOfAttribPropContainer, 67901928); var jsxElementAttribPropInterfaceType = jsxElementAttribPropInterfaceSym && getDeclaredTypeOfSymbol(jsxElementAttribPropInterfaceSym); var propertiesOfJsxElementAttribPropInterface = jsxElementAttribPropInterfaceType && getPropertiesOfType(jsxElementAttribPropInterfaceType); if (propertiesOfJsxElementAttribPropInterface) { if (propertiesOfJsxElementAttribPropInterface.length === 0) { return ""; } else if (propertiesOfJsxElementAttribPropInterface.length === 1) { return propertiesOfJsxElementAttribPropInterface[0].escapedName; } else if (propertiesOfJsxElementAttribPropInterface.length > 1) { error(jsxElementAttribPropInterfaceSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, ts.unescapeLeadingUnderscores(nameOfAttribPropContainer)); } } return undefined; } function getJsxElementPropertiesName(jsxNamespace) { return getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer, jsxNamespace); } function getJsxElementChildrenPropertyName(jsxNamespace) { return getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer, jsxNamespace); } function getApparentTypeOfJsxPropsType(propsType) { if (!propsType) { return undefined; } if (propsType.flags & 524288) { var propsApparentType = []; for (var _i = 0, _a = propsType.types; _i < _a.length; _i++) { var t = _a[_i]; propsApparentType.push(getApparentType(t)); } return getIntersectionType(propsApparentType); } return getApparentType(propsType); } function defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) { ts.Debug.assert(!(elementType.flags & 262144)); if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) { var jsxStatelessElementType = getJsxStatelessElementTypeAt(openingLikeElement); if (jsxStatelessElementType) { 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)) { var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, openingLikeElement); if (intrinsicAttributes !== errorType) { paramType = intersectTypes(intrinsicAttributes, paramType); } return paramType; } } } } return undefined; } function tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) { ts.Debug.assert(!(elementType.flags & 262144)); if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) { var jsxStatelessElementType = getJsxStatelessElementTypeAt(openingLikeElement); if (jsxStatelessElementType) { var candidatesOutArray = []; getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray); var result = void 0; var allMatchingAttributesType = void 0; for (var _i = 0, candidatesOutArray_1 = candidatesOutArray; _i < candidatesOutArray_1.length; _i++) { var candidate = candidatesOutArray_1[_i]; var callReturnType = getReturnTypeOfSignature(candidate); var paramType = callReturnType && (candidate.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(candidate.parameters[0])); paramType = getApparentTypeOfJsxPropsType(paramType); if (callReturnType && isTypeAssignableTo(callReturnType, jsxStatelessElementType)) { var shouldBeCandidate = true; for (var _a = 0, _b = openingLikeElement.attributes.properties; _a < _b.length; _a++) { var attribute = _b[_a]; if (ts.isJsxAttribute(attribute) && isUnhyphenatedJsxName(attribute.name.escapedText) && !getPropertyOfType(paramType, attribute.name.escapedText)) { shouldBeCandidate = false; break; } } if (shouldBeCandidate) { result = intersectTypes(result, paramType); } allMatchingAttributesType = intersectTypes(allMatchingAttributesType, paramType); } } if (!result) { result = allMatchingAttributesType; } var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, openingLikeElement); if (intrinsicAttributes !== errorType) { result = intersectTypes(intrinsicAttributes, result); } return result; } } return undefined; } function getInstantiatedJsxSignatures(openingLikeElement, elementType, reportErrors) { var links = getNodeLinks(openingLikeElement); if (!links.resolvedSignatures) { links.resolvedSignatures = ts.createMap(); } var cacheKey = "" + getTypeId(elementType); if (links.resolvedSignatures.get(cacheKey) && links.resolvedSignatures.get(cacheKey) === resolvingSignaturesArray) { return; } else if (links.resolvedSignatures.get(cacheKey)) { return links.resolvedSignatures.get(cacheKey); } links.resolvedSignatures.set(cacheKey, resolvingSignaturesArray); var signatures = getSignaturesOfType(elementType, 1); if (signatures.length === 0) { signatures = getSignaturesOfType(elementType, 0); if (signatures.length === 0) { if (reportErrors) { error(openingLikeElement.tagName, ts.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, ts.getTextOfNode(openingLikeElement.tagName)); } return; } } var results = instantiateJsxSignatures(openingLikeElement, signatures); links.resolvedSignatures.set(cacheKey, results); return results; } function resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, elementType, elementClassType) { if (elementType.flags & 262144) { var types = elementType.types; return getUnionType(types.map(function (type) { return resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, type, elementClassType); }), 2); } if (isTypeAny(elementType)) { return elementType; } else if (elementType.flags & 4) { return anyType; } else if (elementType.flags & 64) { var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, openingLikeElement); if (intrinsicElementsType !== errorType) { var stringLiteralTypeName = elementType.value; var intrinsicProp = getPropertyOfType(intrinsicElementsType, ts.escapeLeadingUnderscores(stringLiteralTypeName)); if (intrinsicProp) { return getTypeOfSymbol(intrinsicProp); } 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); } return anyType; } var instantiatedSignatures = getInstantiatedJsxSignatures(openingLikeElement, elementType, true); if (!ts.length(instantiatedSignatures)) { return errorType; } var elemInstanceType = getUnionType(instantiatedSignatures.map(getReturnTypeOfSignature), 2); var statelessAttributesType = shouldIncludeAllStatelessAttributesType ? tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) : defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType); if (statelessAttributesType) { return statelessAttributesType; } 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, true); })); } function getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node) { ts.Debug.assert(isJsxIntrinsicIdentifier(node.tagName)); var links = getNodeLinks(node); if (!links.resolvedJsxElementAttributesType) { var symbol = getIntrinsicTagSymbol(node); if (links.jsxFlags & 1) { return links.resolvedJsxElementAttributesType = getTypeOfSymbol(symbol); } else if (links.jsxFlags & 2) { return links.resolvedJsxElementAttributesType = getIndexInfoOfSymbol(symbol, 0).type; } else { return links.resolvedJsxElementAttributesType = errorType; } } return links.resolvedJsxElementAttributesType; } function getCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType) { return resolveCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType, checkExpression(node.tagName), getJsxElementClassTypeAt(node)); } function getAllAttributesTypeFromJsxOpeningLikeElement(node) { if (isJsxIntrinsicIdentifier(node.tagName)) { return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); } else { return getCustomJsxElementAttributesType(node, true); } } function getAttributesTypeFromJsxOpeningLikeElement(node) { if (isJsxIntrinsicIdentifier(node.tagName)) { return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); } else { return getCustomJsxElementAttributesType(node, false); } } function getJsxAttributePropertySymbol(attrib) { var attributesType = getAttributesTypeFromJsxOpeningLikeElement(attrib.parent.parent); var prop = getPropertyOfType(attributesType, attrib.name.escapedText); return prop || unknownSymbol; } function getJsxElementClassTypeAt(location) { var type = getJsxType(JsxNames.ElementClass, location); if (type === errorType) return undefined; return type; } function getJsxElementTypeAt(location) { return getJsxType(JsxNames.Element, location); } function getJsxStatelessElementTypeAt(location) { var jsxElementType = getJsxElementTypeAt(location); if (jsxElementType) { return getUnionType([jsxElementType, nullType]); } } function getJsxIntrinsicTagNamesAt(location) { var intrinsics = getJsxType(JsxNames.IntrinsicElements, location); return intrinsics ? getPropertiesOfType(intrinsics) : ts.emptyArray; } function checkJsxPreconditions(errorNode) { if ((compilerOptions.jsx || 0) === 0) { error(errorNode, ts.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided); } if (getJsxElementTypeAt(errorNode) === undefined) { if (noImplicitAny) { error(errorNode, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist); } } } function checkJsxOpeningLikeElementOrOpeningFragment(node, checkMode) { var isNodeOpeningLikeElement = ts.isJsxOpeningLikeElement(node); if (isNodeOpeningLikeElement) { checkGrammarJsxElement(node); } checkJsxPreconditions(node); 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, reactRefErr, reactNamespace, true); if (reactSym) { reactSym.isReferenced = 67108863; if (reactSym.flags & 2097152 && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) { markAliasSymbolAsReferenced(reactSym); } } if (isNodeOpeningLikeElement) { checkJsxAttributesAssignableToTagNameAttributes(node, checkMode); } else { checkJsxChildren(node.parent); } } function isKnownProperty(targetType, name, isComparingJsxAttributes) { if (targetType.flags & 131072) { var resolved = resolveStructuredTypeMembers(targetType); if (resolved.stringIndexInfo || resolved.numberIndexInfo && isNumericLiteralName(name) || getPropertyOfObjectType(targetType, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { return true; } } 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)) { return true; } } } return false; } function checkJsxAttributesAssignableToTagNameAttributes(openingLikeElement, checkMode) { var targetAttributesType = isJsxIntrinsicIdentifier(openingLikeElement.tagName) ? getIntrinsicAttributesTypeFromJsxOpeningLikeElement(openingLikeElement) : getCustomJsxElementAttributesType(openingLikeElement, false); var sourceAttributesType = createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode); var isSourceAttributeTypeAssignableToTarget = isTypeAssignableTo(sourceAttributesType, targetAttributesType); if (isSourceAttributeTypeAssignableToTarget && !isTypeAny(sourceAttributesType) && !isTypeAny(targetAttributesType)) { for (var _i = 0, _a = openingLikeElement.attributes.properties; _i < _a.length; _i++) { var attribute = _a[_i]; if (!ts.isJsxAttribute(attribute)) { continue; } var attrName = attribute.name; var isNotIgnoredJsxProperty = (isUnhyphenatedJsxName(ts.idText(attrName)) || !!(getPropertyOfType(targetAttributesType, attrName.escapedText))); if (isNotIgnoredJsxProperty && !isKnownProperty(targetAttributesType, attrName.escapedText, true)) { error(attribute, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(attrName), typeToString(targetAttributesType)); break; } } } else if (!isSourceAttributeTypeAssignableToTarget) { if (ts.length(openingLikeElement.attributes.properties)) { var reportedError = false; var _loop_8 = function (prop) { if (ts.isJsxSpreadAttribute(prop)) return "continue"; var name = ts.idText(prop.name); var sourcePropType = getIndexedAccessType(sourceAttributesType, getLiteralType(name)); var targetPropType = getIndexedAccessType(targetAttributesType, getLiteralType(name)); 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; } }; for (var _b = 0, _c = openingLikeElement.attributes.properties; _b < _c.length; _b++) { var prop = _c[_b]; _loop_8(prop); } if (reportedError) { return; } } checkTypeAssignableTo(sourceAttributesType, targetAttributesType, openingLikeElement.tagName); } } function checkJsxExpression(node, checkMode) { if (node.expression) { var type = checkExpression(node.expression, checkMode); if (node.dotDotDotToken && type !== anyType && !isArrayType(type)) { error(node, ts.Diagnostics.JSX_spread_child_must_be_an_array_type); } return type; } else { return errorType; } } function getDeclarationKindFromSymbol(s) { return s.valueDeclaration ? s.valueDeclaration.kind : 152; } function getDeclarationNodeFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : 0; } function isPrototypeProperty(symbol) { 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; } } function checkPropertyAccessibility(node, left, type, prop) { var flags = ts.getDeclarationModifierFlagsFromSymbol(prop); var errorNode = node.kind === 185 || node.kind === 232 ? node.name : node.kind === 179 ? node : node.right; 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) { 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) { error(errorNode, ts.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop))); return false; } } 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)); return false; } } if (!(flags & 24)) { return true; } 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))); return false; } return true; } if (left.kind === 97) { return true; } var enclosingClass = forEachEnclosingClass(node, function (enclosingDeclaration) { var enclosingClass = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingDeclaration)); return isClassDerivedFromDeclaringClasses(enclosingClass, prop) ? enclosingClass : undefined; }); if (!enclosingClass) { var thisParameter = void 0; 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) ? getConstraintFromTypeParameter(thisType) : thisType); } if (flags & 32) { return true; } 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)); return false; } return true; } function getThisParameterFromNodeContext(node) { 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 && 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) { error(node, ts.Diagnostics.Object_is_of_type_unknown); return errorType; } var kind = (strictNullChecks ? getFalsyFlags(type) : type.flags) & 24576; if (kind) { 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 | 32768) ? errorType : t; } return type; } function checkPropertyAccessExpression(node) { return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name); } function checkQualifiedName(node) { return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right); } function checkPropertyAccessExpressionOrQualifiedName(node, left, right) { var propType; var leftType = checkNonNullExpression(left); var parentSymbol = getNodeLinks(left).resolvedSymbol; var apparentType = getApparentType(getWidenedType(leftType)); if (isTypeAny(apparentType) || apparentType === silentNeverType) { if (ts.isIdentifier(left) && parentSymbol) { markAliasReferenced(parentSymbol, node); } return apparentType; } var assignmentKind = ts.getAssignmentTargetKind(node); var prop = getPropertyOfType(apparentType, right.escapedText); if (ts.isIdentifier(left) && parentSymbol && !(prop && isConstEnumOrConstEnumOnlyModule(prop))) { markAliasReferenced(parentSymbol, node); } if (!prop) { var indexInfo = getIndexInfoOfType(apparentType, 0); if (!(indexInfo && indexInfo.type)) { if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) { reportNonexistentProperty(right, leftType.flags & 65536 && leftType.isThisType ? apparentType : leftType); } return errorType; } if (indexInfo.isReadonly && (ts.isAssignmentTarget(node) || ts.isDeleteTarget(node))) { error(node, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(apparentType)); } propType = indexInfo.type; } else { checkPropertyNotUsedBeforeDeclaration(prop, node, right); markPropertyAsReferenced(prop, node, left.kind === 99); getNodeLinks(node).resolvedSymbol = prop; checkPropertyAccessibility(node, left, apparentType, prop); if (assignmentKind) { if (isReferenceToReadonlyEntity(node, prop) || isReferenceThroughNamespaceImport(node)) { error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, ts.idText(right)); return errorType; } } propType = getConstraintForLocation(getTypeOfSymbol(prop), node); } if (node.kind !== 185 || assignmentKind === 1 || prop && !(prop.flags & (3 | 4 | 98304)) && !(prop.flags & 8192 && propType.flags & 262144)) { return propType; } var assumeUninitialized = false; if (strictNullChecks && strictPropertyInitialization && left.kind === 99) { var declaration = prop && prop.valueDeclaration; if (declaration && isInstancePropertyWithoutInitializer(declaration)) { var flowContainer = getControlFlowContainer(node); if (flowContainer.kind === 155 && flowContainer.parent === declaration.parent) { assumeUninitialized = true; } } } var flowType = getFlowTypeOfReference(node, propType, assumeUninitialized ? getOptionalType(propType) : propType); 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; } function checkPropertyNotUsedBeforeDeclaration(prop, node, right) { var valueDeclaration = prop.valueDeclaration; if (!valueDeclaration) { return; } if (isInPropertyInitializer(node) && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right) && !isPropertyDeclaredInAncestorClass(prop)) { error(right, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.idText(right)); } 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)); } } function isInPropertyInitializer(node) { return !!ts.findAncestor(node, function (node) { switch (node.kind) { case 152: return true; case 270: return false; default: return ts.isExpressionNode(node) ? false : "quit"; } }); } function isPropertyDeclaredInAncestorClass(prop) { if (!(prop.parent.flags & 32)) { return false; } var classType = getTypeOfSymbol(prop.parent); while (true) { classType = classType.symbol && getSuperClass(classType); if (!classType) { return false; } var superProperty = getPropertyOfType(classType, prop.escapedName); if (superProperty && superProperty.valueDeclaration) { return true; } } } function getSuperClass(classType) { var x = getBaseTypes(classType); if (x.length === 0) { return undefined; } return getIntersectionType(x); } function reportNonexistentProperty(propNode, containingType) { var errorInfo; 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)) { errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype)); break; } } } var promisedType = getPromisedTypeOfPromise(containingType); if (promisedType && getPropertyOfType(promisedType, propNode.escapedText)) { errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_forget_to_use_await, ts.declarationNameToString(propNode), typeToString(containingType)); } else { var suggestion = getSuggestionForNonexistentProperty(propNode, containingType); if (suggestion !== undefined) { errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, ts.declarationNameToString(propNode), typeToString(containingType), suggestion); } else { errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(containingType)); } } diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo)); } function getSuggestionForNonexistentProperty(node, containingType) { 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, undefined, outerName, false, false, function (symbols, name, meaning) { ts.Debug.assertEqual(outerName, name, "name should equal outerName"); var symbol = getSymbol(symbols, name, meaning); 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); return suggestion && ts.symbolName(suggestion); } function getSpellingSuggestionForName(name, symbols, meaning) { return ts.getSpellingSuggestion(name, symbols, getCandidateName); function getCandidateName(candidate) { var candidateName = ts.symbolName(candidate); return !ts.startsWith(candidateName, "\"") && candidate.flags & meaning ? candidateName : undefined; } } function markPropertyAsReferenced(prop, nodeForCheckWriteOnly, isThisAccess) { if (!prop || !(prop.flags & 106500) || !prop.valueDeclaration || !ts.hasModifier(prop.valueDeclaration, 8)) { return; } if (nodeForCheckWriteOnly && ts.isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & 65536 && !(prop.flags & 32768))) { return; } if (isThisAccess) { var containingMethod = ts.findAncestor(nodeForCheckWriteOnly, ts.isFunctionLikeDeclaration); if (containingMethod && containingMethod.symbol === prop) { return; } } (ts.getCheckFlags(prop) & 1 ? getSymbolLinks(prop).target : prop).isReferenced = 67108863; } function isValidPropertyAccess(node, propertyName) { switch (node.kind) { case 185: return isValidPropertyAccessWithType(node, node.expression, propertyName, getWidenedType(checkExpression(node.expression))); case 146: return isValidPropertyAccessWithType(node, node.left, propertyName, getWidenedType(checkExpression(node.left))); case 179: return isValidPropertyAccessWithType(node, node, propertyName, getTypeFromTypeNode(node)); } } function isValidPropertyAccessForCompletions(node, type, property) { 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); ts.Debug.assert(signatures.length !== 0); return signatures.some(function (sig) { var signatureThisType = getThisTypeOfSignature(sig); return !signatureThisType || isTypeAssignableTo(actualThisType, getInstantiatedSignatureThisType(sig, signatureThisType, actualThisType)); }); } function getInstantiatedSignatureThisType(sig, signatureThisType, actualThisType) { if (!sig.typeParameters) { return signatureThisType; } var context = createInferenceContext(sig.typeParameters, sig, 0); inferTypes(context.inferences, actualThisType, signatureThisType); return instantiateType(signatureThisType, createSignatureTypeMapper(sig, getInferredTypes(context))); } function isValidPropertyAccessWithType(node, left, propertyName, type) { if (type === errorType || isTypeAny(type)) { return true; } var prop = getPropertyOfType(type, propertyName); return prop ? checkPropertyAccessibility(node, left, type, prop) : ts.isInJavaScriptFile(node) && (type.flags & 262144) !== 0 && type.types.some(function (elementType) { return isValidPropertyAccessWithType(node, left, propertyName, elementType); }); } function getForInVariableSymbol(node) { var initializer = node.initializer; if (initializer.kind === 233) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); } } else if (initializer.kind === 71) { return getResolvedSymbol(initializer); } return undefined; } function hasNumericPropertyNames(type) { return getIndexTypeOfType(type, 1) && !getIndexTypeOfType(type, 0); } function isForInVariableForNumericPropertyNames(expr) { var e = ts.skipParentheses(expr); if (e.kind === 71) { var symbol = getResolvedSymbol(e); if (symbol.flags & 3) { var child = expr; var node = expr.parent; while (node) { if (node.kind === 221 && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(getTypeOfExpression(node.expression))) { return true; } child = node; node = node.parent; } } } return false; } function checkIndexedAccess(node) { var objectType = checkNonNullExpression(node.expression); var indexExpression = node.argumentExpression; if (!indexExpression) { var sourceFile = ts.getSourceFileOfNode(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); } else { var start = node.end - "]".length; var end = node.end; grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Expression_expected); } return errorType; } var indexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : checkExpression(indexExpression); if (objectType === errorType || objectType === silentNeverType) { return objectType; } if (isConstEnumObjectType(objectType) && indexExpression.kind !== 9) { error(indexExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal); return errorType; } return checkIndexedAccessIndexType(getIndexedAccessType(objectType, indexType, node), node); } function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) { if (expressionType === errorType) { return false; } if (!ts.isWellKnownSymbolSyntactically(expression)) { return false; } 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; } var leftHandSide = expression.expression; var leftHandSideSymbol = getResolvedSymbol(leftHandSide); if (!leftHandSideSymbol) { return false; } var globalESSymbol = getGlobalESSymbolConstructorSymbol(true); if (!globalESSymbol) { return false; } if (leftHandSideSymbol !== globalESSymbol) { if (reportError) { error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object); } return false; } return true; } function callLikeExpressionMayHaveTypeArguments(node) { return ts.isCallOrNewExpression(node); } function resolveUntypedCall(node) { if (callLikeExpressionMayHaveTypeArguments(node)) { ts.forEach(node.typeArguments, checkSourceElement); } if (node.kind === 189) { checkExpression(node.template); } else if (node.kind !== 150) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); } return anySignature; } function resolveErrorCall(node) { resolveUntypedCall(node); return unknownSignature; } function reorderCandidates(signatures, result) { var lastParent; var lastSymbol; var cutoffIndex = 0; var index; var specializedIndex = -1; var spliceIndex; ts.Debug.assert(!result.length); for (var _i = 0, signatures_4 = signatures; _i < signatures_4.length; _i++) { var signature = signatures_4[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); var parent = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { if (lastParent && parent === lastParent) { index = index + 1; } else { lastParent = parent; index = cutoffIndex; } } else { index = cutoffIndex = result.length; lastParent = parent; } lastSymbol = symbol; if (signature.hasLiteralTypes) { specializedIndex++; spliceIndex = specializedIndex; cutoffIndex++; } else { spliceIndex = index; } result.splice(spliceIndex, 0, signature); } } function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; if (arg && arg.kind === 204) { return i; } } return -1; } function hasCorrectArity(node, args, signature, signatureHelpTrailingComma) { if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; } var argCount; var typeArguments; var callIsIncomplete = false; var spreadArgIndex = -1; if (ts.isJsxOpeningLikeElement(node)) { return true; } if (node.kind === 189) { argCount = args.length; typeArguments = node.typeArguments; if (node.template.kind === 202) { var lastSpan = ts.last(node.template.templateSpans); callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated; } else { var templateLiteral = node.template; ts.Debug.assert(templateLiteral.kind === 13); callIsIncomplete = !!templateLiteral.isUnterminated; } } else if (node.kind === 150) { typeArguments = undefined; argCount = getEffectiveArgumentCount(node, undefined, signature); } else { if (!node.arguments) { ts.Debug.assert(node.kind === 188); return signature.minArgumentCount === 0; } argCount = signatureHelpTrailingComma ? args.length + 1 : args.length; callIsIncomplete = node.arguments.end === node.end; typeArguments = node.typeArguments; spreadArgIndex = getSpreadArgumentIndex(args); } if (!hasCorrectTypeArgumentArity(signature, typeArguments)) { return false; } if (spreadArgIndex >= 0) { return isRestParameterIndex(signature, spreadArgIndex) || signature.minArgumentCount <= spreadArgIndex && spreadArgIndex < signature.parameters.length; } if (!signature.hasRestParameter && argCount > signature.parameters.length) { return false; } var hasEnoughArguments = argCount >= signature.minArgumentCount; return callIsIncomplete || hasEnoughArguments; } function hasCorrectTypeArgumentArity(signature, typeArguments) { var numTypeParameters = ts.length(signature.typeParameters); var minTypeArgumentCount = getMinTypeArgumentCount(signature.typeParameters); return !typeArguments || (typeArguments.length >= minTypeArgumentCount && typeArguments.length <= numTypeParameters); } function getSingleCallSignature(type) { 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) { return resolved.callSignatures[0]; } } return undefined; } function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper, compareTypes) { var context = createInferenceContext(signature.typeParameters, signature, 1, compareTypes); forEachMatchingParameterType(contextualSignature, signature, function (source, target) { inferTypes(context.inferences, instantiateType(source, contextualMapper || identityMapper), target); }); if (!contextualMapper) { inferTypes(context.inferences, getReturnTypeOfSignature(contextualSignature), getReturnTypeOfSignature(signature), 8); } return getSignatureInstantiation(signature, getInferredTypes(context), ts.isInJavaScriptFile(contextualSignature.declaration)); } function inferJsxTypeArguments(signature, node, context) { var skipContextParamType = getTypeAtPosition(signature, 0); var checkAttrTypeSkipContextSensitive = checkExpressionWithContextualType(node.attributes, skipContextParamType, identityMapper); inferTypes(context.inferences, checkAttrTypeSkipContextSensitive, skipContextParamType); 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) { for (var _i = 0, _a = context.inferences; _i < _a.length; _i++) { var inference = _a[_i]; if (!inference.isFixed) { inference.inferredType = undefined; } } if (node.kind !== 150) { var contextualType = getContextualType(node); if (contextualType) { var instantiatedType = instantiateType(contextualType, cloneTypeMapper(getContextualMapper(node))); var contextualSignature = getSingleCallSignature(instantiatedType); var inferenceSourceType = contextualSignature && contextualSignature.typeParameters ? getOrCreateTypeFromSignature(getSignatureInstantiation(contextualSignature, contextualSignature.typeParameters, ts.isInJavaScriptFile(node))) : instantiatedType; var inferenceTargetType = getReturnTypeOfSignature(signature); inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 8); } } var thisType = getThisTypeOfSignature(signature); if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; inferTypes(context.inferences, thisArgumentType, thisType); } var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); if (arg === undefined || arg.kind !== 206) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i); if (argType === undefined) { var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : context; argType = checkExpressionWithContextualType(arg, paramType, mapper); } inferTypes(context.inferences, argType, paramType); } } if (excludeArgument) { for (var i = 0; i < argCount; i++) { if (excludeArgument[i] === false) { var arg = args[i]; var paramType = getTypeAtPosition(signature, i); inferTypes(context.inferences, checkExpressionWithContextualType(arg, paramType, context), paramType); } } } return getInferredTypes(context); } function checkTypeArguments(signature, typeArgumentNodes, reportErrors, headMessage) { var isJavascript = ts.isInJavaScriptFile(signature.declaration); var typeParameters = signature.typeParameters; var typeArgumentTypes = fillMissingTypeArguments(ts.map(typeArgumentNodes, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), isJavascript); var mapper; for (var i = 0; i < typeArgumentNodes.length; i++) { ts.Debug.assert(typeParameters[i] !== undefined, "Should not call checkTypeArguments with too many type arguments"); var constraint = getConstraintOfTypeParameter(typeParameters[i]); if (!constraint) continue; 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); } var typeArgument = typeArgumentTypes[i]; if (!checkTypeAssignableTo(typeArgument, getTypeWithThisArgument(instantiateType(constraint, mapper), typeArgument), reportErrors ? typeArgumentNodes[i] : undefined, typeArgumentHeadMessage, errorInfo)) { return false; } } return typeArgumentTypes; } function checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation) { 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; var paramType = getTypeAtPosition(signature, 0); 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]; if (!getPropertyOfType(paramType, arg.escapedName) && isUnhyphenatedJsxName(arg.escapedName)) { return false; } } 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) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; var errorNode = reportErrors ? (thisArgumentNode || node) : undefined; var headMessage_1 = ts.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1; if (!checkTypeRelatedTo(thisArgumentType, thisType, relation, errorNode, headMessage_1)) { return false; } } var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); if (arg === undefined || arg.kind !== 206) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i) || checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); var checkArgType = excludeArgument ? getRegularTypeOfObjectLiteral(argType) : argType; var errorNode = reportErrors ? getEffectiveArgumentErrorNode(node, i, arg) : undefined; if (!checkTypeRelatedTo(checkArgType, paramType, relation, errorNode, headMessage)) { return false; } } } return true; } function getThisArgumentOfCall(node) { if (node.kind === 187) { var callee = ts.skipOuterExpressions(node.expression); if (callee.kind === 185 || callee.kind === 186) { return callee.expression; } } } function getEffectiveCallArguments(node) { if (node.kind === 189) { var template = node.template; 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) { return undefined; } else if (ts.isJsxOpeningLikeElement(node)) { return node.attributes.properties.length > 0 ? [node.attributes] : ts.emptyArray; } else { return node.arguments || ts.emptyArray; } } function getEffectiveArgumentCount(node, args, signature) { if (node.kind === 150) { switch (node.parent.kind) { case 235: case 205: return 1; case 152: return 2; case 154: case 156: case 157: if (languageVersion === 0) { return 2; } return signature.parameters.length >= 3 ? 3 : 2; case 149: return 3; default: return ts.Debug.fail(); } } else { return args.length; } } function getEffectiveDecoratorFirstArgumentType(node) { if (node.kind === 235) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } if (node.kind === 149) { node = node.parent; if (node.kind === 155) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } if (node.kind === 152 || node.kind === 154 || node.kind === 156 || node.kind === 157) { return getParentTypeOfClassElement(node); } ts.Debug.fail("Unsupported decorator target."); return errorType; } function getEffectiveDecoratorSecondArgumentType(node) { if (node.kind === 235) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return errorType; } if (node.kind === 149) { node = node.parent; if (node.kind === 155) { return anyType; } } 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: return getLiteralType(ts.idText(name)); case 8: case 9: return getLiteralType(name.text); case 147: var nameType = checkComputedPropertyName(name); if (isTypeAssignableToKind(nameType, 3072)) { return nameType; } else { return stringType; } default: ts.Debug.fail("Unsupported property name."); return errorType; } } ts.Debug.fail("Unsupported decorator target."); return errorType; } function getEffectiveDecoratorThirdArgumentType(node) { if (node.kind === 235) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return errorType; } if (node.kind === 149) { return numberType; } if (node.kind === 152) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return errorType; } 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; } function getEffectiveDecoratorArgumentType(node, argIndex) { if (argIndex === 0) { return getEffectiveDecoratorFirstArgumentType(node.parent); } else if (argIndex === 1) { return getEffectiveDecoratorSecondArgumentType(node.parent); } else if (argIndex === 2) { return getEffectiveDecoratorThirdArgumentType(node.parent); } ts.Debug.fail("Decorators should not have a fourth synthetic argument."); return errorType; } function getEffectiveArgumentType(node, argIndex) { if (node.kind === 150) { return getEffectiveDecoratorArgumentType(node, argIndex); } else if (argIndex === 0 && node.kind === 189) { return getGlobalTemplateStringsArrayType(); } return undefined; } function getEffectiveArgument(node, args, argIndex) { if (node.kind === 150 || (argIndex === 0 && node.kind === 189)) { return undefined; } return args[argIndex]; } function getEffectiveArgumentErrorNode(node, argIndex, arg) { if (node.kind === 150) { return node.expression; } else if (argIndex === 0 && node.kind === 189) { return node.template; } else { return arg; } } function getTypeArgumentArityError(node, signatures, typeArguments) { var min = Infinity; var max = -Infinity; for (var _i = 0, signatures_5 = signatures; _i < signatures_5.length; _i++) { var sig = signatures_5[_i]; min = Math.min(min, getMinTypeArgumentCount(sig.typeParameters)); max = Math.max(max, ts.length(sig.typeParameters)); } var paramCount = min === max ? min : min + "-" + max; 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; var isDecorator = node.kind === 150; var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node); var typeArguments; if (!isDecorator) { typeArguments = node.typeArguments; if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 97) { ts.forEach(typeArguments, checkSourceElement); } } var candidates = candidatesOutArray || []; 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); var isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; var excludeArgument; var excludeCount = 0; if (!isDecorator && !isSingleNonGenericCandidate) { for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) { if (isContextSensitive(args[i])) { if (!excludeArgument) { excludeArgument = new Array(args.length); } excludeArgument[i] = true; excludeCount++; } } } var candidateForArgumentError; var candidateForTypeArgumentError; var result; var signatureHelpTrailingComma = candidatesOutArray && node.kind === 187 && node.arguments.hasTrailingComma; if (candidates.length > 1) { result = chooseOverload(candidates, subtypeRelation, signatureHelpTrailingComma); } if (!result) { result = chooseOverload(candidates, assignableRelation, signatureHelpTrailingComma); } if (result) { return result; } if (candidateForArgumentError) { if (isJsxOpeningOrSelfClosingElement) { return candidateForArgumentError; } checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true); } else if (candidateForTypeArgumentError) { 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)); } else if (args) { var min_1 = Number.POSITIVE_INFINITY; var max = Number.NEGATIVE_INFINITY; for (var _i = 0, signatures_6 = signatures; _i < signatures_6.length; _i++) { var sig = signatures_6[_i]; min_1 = Math.min(min_1, sig.minArgumentCount); max = Math.max(max, sig.parameters.length); } var hasRestParameter_1 = ts.some(signatures, function (sig) { return sig.hasRestParameter; }); var hasSpreadArgument = getSpreadArgumentIndex(args) > -1; var paramCount = hasRestParameter_1 ? min_1 : min_1 < max ? min_1 + "-" + max : min_1; var argCount = args.length; if (argCount <= max && hasSpreadArgument) { argCount--; } var error_1 = hasRestParameter_1 && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1_or_more : hasRestParameter_1 ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 : hasSpreadArgument ? ts.Diagnostics.Expected_0_arguments_but_got_1_or_more : ts.Diagnostics.Expected_0_arguments_but_got_1; diagnostics.add(ts.createDiagnosticForNode(node, error_1, paramCount, argCount)); } else if (fallbackError) { diagnostics.add(ts.createDiagnosticForNode(node, fallbackError)); } if (!produceDiagnostics) { 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); while (typeArguments_1.length > typeParameters.length) { typeArguments_1.pop(); } while (typeArguments_1.length < typeParameters.length) { typeArguments_1.push(getDefaultTypeArgumentType(ts.isInJavaScriptFile(node))); } var instantiated = createSignatureInstantiation(candidate, typeArguments_1); candidates[bestIndex] = instantiated; return instantiated; } return candidate; } return resolveErrorCall(node); function chooseOverload(candidates, relation, signatureHelpTrailingComma) { if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; } candidateForArgumentError = undefined; candidateForTypeArgumentError = undefined; if (isSingleNonGenericCandidate) { var candidate = candidates[0]; if (!hasCorrectArity(node, args, candidate, signatureHelpTrailingComma)) { return undefined; } if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) { candidateForArgumentError = candidate; return undefined; } return candidate; } for (var candidateIndex = 0; candidateIndex < candidates.length; candidateIndex++) { var originalCandidate = candidates[candidateIndex]; if (!hasCorrectArity(node, args, originalCandidate, signatureHelpTrailingComma)) { continue; } var candidate = void 0; var inferenceContext = originalCandidate.typeParameters ? 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, false); if (typeArgumentResult) { typeArgumentTypes = typeArgumentResult; } else { candidateForTypeArgumentError = originalCandidate; break; } } else { typeArgumentTypes = inferTypeArguments(node, candidate, args, excludeArgument, inferenceContext); } var isJavascript = ts.isInJavaScriptFile(candidate.declaration); candidate = getSignatureInstantiation(candidate, typeArgumentTypes, isJavascript); } if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) { candidateForArgumentError = candidate; break; } if (excludeCount === 0) { candidates[candidateIndex] = candidate; return candidate; } excludeCount--; if (excludeCount > 0) { excludeArgument[excludeArgument.indexOf(true)] = false; } else { excludeArgument = undefined; } } } return undefined; } } function getLongestCandidateIndex(candidates, argsCount) { var maxParamsIndex = -1; var maxParams = -1; for (var i = 0; i < candidates.length; i++) { var candidate = candidates[i]; if (candidate.hasRestParameter || candidate.parameters.length >= argsCount) { return i; } if (candidate.parameters.length > maxParams) { maxParams = candidate.parameters.length; maxParamsIndex = i; } } return maxParamsIndex; } function resolveCallExpression(node, candidatesOutArray) { if (node.expression.kind === 97) { var superType = checkSuperExpression(node.expression); if (isTypeAny(superType)) { ts.forEach(node.arguments, checkExpresionNoReturn); return anySignature; } if (superType !== errorType) { var baseTypeNode = ts.getClassExtendsHeritageClauseElement(ts.getContainingClass(node)); if (baseTypeNode) { var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments, baseTypeNode); return resolveCall(node, baseConstructors, candidatesOutArray); } } return resolveUntypedCall(node); } var funcType = checkNonNullExpression(node.expression, ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null, ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_undefined, ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null_or_undefined); if (funcType === silentNeverType) { return silentNeverSignature; } var apparentType = getApparentType(funcType); if (apparentType === errorType) { return resolveErrorCall(node); } var callSignatures = getSignaturesOfType(apparentType, 0); var constructSignatures = getSignaturesOfType(apparentType, 1); if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, constructSignatures.length)) { if (funcType !== errorType && node.typeArguments) { error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } return resolveUntypedCall(node); } 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); } return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray); } function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) { 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) { 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); } } var expressionType = checkNonNullExpression(node.expression); if (expressionType === silentNeverType) { return silentNeverSignature; } expressionType = getApparentType(expressionType); if (expressionType === errorType) { return resolveErrorCall(node); } if (isTypeAny(expressionType)) { if (node.typeArguments) { error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); } return resolveUntypedCall(node); } var constructSignatures = getSignaturesOfType(expressionType, 1); if (constructSignatures.length) { if (!isConstructorAccessible(node, constructSignatures[0])) { return resolveErrorCall(node); } var valueDecl = expressionType.symbol && ts.getClassLikeDeclarationOfSymbol(expressionType.symbol); 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); } var callSignatures = getSignaturesOfType(expressionType, 0); if (callSignatures.length) { var signature = resolveCall(node, callSignatures, candidatesOutArray); if (!isJavaScriptConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; } invocationError(node, expressionType, 1); return resolveErrorCall(node); } function isConstructorAccessible(node, signature) { if (!signature || !signature.declaration) { return true; } var declaration = signature.declaration; var modifiers = ts.getSelectedModifierFlags(declaration, 24); if (!modifiers) { return true; } var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol); var declaringClass = getDeclaredTypeOfSymbol(declaration.parent.symbol); if (!isNodeWithinClass(node, declaringClassDeclaration)) { var containingClass = ts.getContainingClass(node); if (containingClass) { var containingType = getTypeOfNode(containingClass); var baseTypes = getBaseTypes(containingType); while (baseTypes.length) { var baseType = baseTypes[0]; if (modifiers & 16 && baseType.symbol === declaration.parent.symbol) { return true; } baseTypes = getBaseTypes(baseType); } } 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) { error(node, ts.Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); } return false; } return true; } function invocationError(node, apparentType, kind) { invocationErrorRecovery(apparentType, kind, 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))); } function invocationErrorRecovery(apparentType, kind, diagnostic) { if (!apparentType.symbol) { return; } var importNode = getSymbolLinks(apparentType.symbol).originatingImport; if (importNode && !ts.isImportCall(importNode)) { var sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); if (!sigs || !sigs.length) return; diagnostic.relatedInformation = diagnostic.relatedInformation || []; diagnostic.relatedInformation.push(ts.createDiagnosticForNode(importNode, ts.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); } } function resolveTaggedTemplateExpression(node, candidatesOutArray) { var tagType = checkExpression(node.tag); var apparentType = getApparentType(tagType); if (apparentType === errorType) { return resolveErrorCall(node); } 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); return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray); } function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { case 235: case 205: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; case 149: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; case 152: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; 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(); } } function resolveDecorator(node, candidatesOutArray) { var funcType = checkExpression(node.expression); var apparentType = getApparentType(funcType); if (apparentType === errorType) { return resolveErrorCall(node); } 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, 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(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); var diag = ts.createDiagnosticForNodeFromMessageChain(node, errorInfo); diagnostics.add(diag); invocationErrorRecovery(apparentType, 0, diag); return resolveErrorCall(node); } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } function isPotentiallyUncalledDecorator(decorator, signatures) { return signatures.length && ts.every(signatures, function (signature) { return signature.minArgumentCount === 0 && !signature.hasRestParameter && signature.parameters.length < getEffectiveArgumentCount(decorator, undefined, signature); }); } function getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray) { ts.Debug.assert(!(elementType.flags & 262144)); var callSignatures = elementType && getSignaturesOfType(elementType, 0); if (callSignatures && callSignatures.length > 0) { return resolveCall(openingLikeElement, callSignatures, candidatesOutArray); } return undefined; } function resolveSignature(node, candidatesOutArray) { switch (node.kind) { case 187: return resolveCallExpression(node, candidatesOutArray); case 188: return resolveNewExpression(node, candidatesOutArray); case 189: return resolveTaggedTemplateExpression(node, candidatesOutArray); case 150: return resolveDecorator(node, candidatesOutArray); case 257: case 256: var exprTypes = checkExpression(node.tagName); return forEachType(exprTypes, function (exprType) { var sfcResult = getResolvedJsxStatelessFunctionSignature(node, exprType, candidatesOutArray); if (sfcResult && sfcResult !== unknownSignature) { return sfcResult; } var sigs = getInstantiatedJsxSignatures(node, exprType); if (candidatesOutArray && ts.length(sigs)) { candidatesOutArray.push.apply(candidatesOutArray, sigs); } return ts.length(sigs) ? sigs[0] : unknownSignature; }) || unknownSignature; } throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); } function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); var cached = links.resolvedSignature; if (cached && cached !== resolvingSignature && !candidatesOutArray) { return cached; } links.resolvedSignature = resolvingSignature; var result = resolveSignature(node, candidatesOutArray); links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; return result; } function isJavaScriptConstructor(node) { if (node && ts.isInJavaScriptFile(node)) { if (ts.getJSDocClassTag(node)) return true; var symbol = ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) ? getSymbolOfNode(node) : ts.isVariableDeclaration(node) && node.initializer && ts.isFunctionExpression(node.initializer) ? getSymbolOfNode(node.initializer) : undefined; return !!symbol && symbol.members !== undefined; } return false; } function getJavaScriptClassType(symbol) { var inferred; if (isJavaScriptConstructor(symbol.valueDeclaration)) { inferred = getInferredClassType(symbol); } var assigned = getAssignedClassType(symbol); var valueType = getTypeOfSymbol(symbol); if (valueType.symbol && !isInferredClassType(valueType) && isJavaScriptConstructor(valueType.symbol.valueDeclaration)) { inferred = getInferredClassType(valueType.symbol); } return assigned && inferred ? getIntersectionType([inferred, assigned]) : assigned || inferred; } function getAssignedClassType(symbol) { var decl = symbol.valueDeclaration; var assignmentSymbol = decl && decl.parent && (ts.isBinaryExpression(decl.parent) && getSymbolOfNode(decl.parent.left) || ts.isVariableDeclaration(decl.parent) && getSymbolOfNode(decl.parent)); if (assignmentSymbol) { var prototype = ts.forEach(assignmentSymbol.declarations, getAssignedJavascriptPrototype); if (prototype) { return checkExpression(prototype); } } } function getAssignedJavascriptPrototype(node) { if (!node.parent) { return false; } var parent = node.parent; while (parent && parent.kind === 185) { parent = parent.parent; } if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 58) { var right = ts.getInitializerOfBinaryExpression(parent); return ts.isObjectLiteralExpression(right) && right; } } function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); if (!links.inferredClassType) { 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 && getSymbolLinks(type.symbol).inferredClassType === type; } function checkCallExpression(node) { if (!checkGrammarTypeArguments(node, node.typeArguments)) checkGrammarArguments(node.arguments); var signature = getResolvedSignature(node); if (node.expression.kind === 97) { return voidType; } if (node.kind === 188) { var declaration = signature.declaration; if (declaration && declaration.kind !== 155 && declaration.kind !== 159 && declaration.kind !== 164 && !ts.isJSDocConstructSignature(declaration)) { var funcSymbol = checkExpression(node.expression).symbol; if (!funcSymbol && node.expression.kind === 71) { funcSymbol = getResolvedSymbol(node.expression); } var type = funcSymbol && getJavaScriptClassType(funcSymbol); if (type) { return signature.target ? instantiateType(type, signature.mapper) : type; } if (noImplicitAny) { error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); } return anyType; } } if (ts.isInJavaScriptFile(node) && isCommonJsRequire(node)) { return resolveExternalModuleTypeByLiteral(node.arguments[0]); } var returnType = getReturnTypeOfSignature(signature); if (returnType.flags & 3072 && isSymbolOrSymbolForCall(node)) { return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent)); } var jsAssignmentType; if (ts.isInJavaScriptFile(node)) { var decl = ts.getDeclarationOfJSInitializer(node); if (decl) { var jsSymbol = getSymbolOfNode(decl); if (jsSymbol && ts.hasEntries(jsSymbol.exports)) { jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, jsObjectLiteralIndexInfo, undefined); } } } return jsAssignmentType ? getIntersectionType([returnType, jsAssignmentType]) : returnType; } function isSymbolOrSymbolForCall(node) { if (!ts.isCallExpression(node)) return false; var left = node.expression; if (ts.isPropertyAccessExpression(left) && left.name.escapedText === "for") { left = left.expression; } if (!ts.isIdentifier(left) || left.escapedText !== "Symbol") { return false; } var globalESSymbol = getGlobalESSymbolConstructorSymbol(false); if (!globalESSymbol) { return false; } return globalESSymbol === resolveName(left, "Symbol", 67216319, undefined, undefined, false); } function checkImportCallExpression(node) { if (!checkGrammarArguments(node.arguments)) checkGrammarImportCallExpression(node); if (node.arguments.length === 0) { return createPromiseReturnType(node, anyType); } var specifier = node.arguments[0]; var specifierType = checkExpressionCached(specifier); for (var i = 1; i < node.arguments.length; ++i) { checkExpressionCached(node.arguments[i]); } 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)); } var moduleSymbol = resolveExternalModuleName(node, specifier); if (moduleSymbol) { var esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, true); if (esModuleSymbol) { return createPromiseReturnType(node, getTypeWithSyntheticDefaultImportType(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol)); } } return createPromiseReturnType(node, anyType); } function getTypeWithSyntheticDefaultImportType(type, symbol, originalSymbol) { if (allowSyntheticDefaultImports && type && type !== errorType) { var synthType = type; if (!synthType.syntheticType) { var file = ts.find(originalSymbol.declarations, ts.isSourceFile); var hasSyntheticDefault = canHaveSyntheticDefault(file, originalSymbol, false); if (hasSyntheticDefault) { var memberTable = ts.createSymbolTable(); var newSymbol = createSymbol(2097152, "default"); newSymbol.target = resolveSymbol(symbol); 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, 0, 0) : defaultContainingObject; } else { synthType.syntheticType = type; } } return synthType.syntheticType; } return type; } function isCommonJsRequire(node) { if (!ts.isRequireCall(node, true)) { return false; } if (!ts.isIdentifier(node.expression)) return ts.Debug.fail(); var resolvedRequire = resolveName(node.expression, node.expression.escapedText, 67216319, undefined, undefined, true); if (resolvedRequire === requireSymbol) { return true; } if (resolvedRequire.flags & 2097152) { return false; } var targetDeclarationKind = resolvedRequire.flags & 16 ? 234 : resolvedRequire.flags & 3 ? 232 : 0; if (targetDeclarationKind !== 0) { var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind); return !!decl && !!(decl.flags & 4194304); } return false; } function checkTaggedTemplateExpression(node) { checkGrammarTypeArguments(node, node.typeArguments); if (languageVersion < 2) { checkExternalEmitHelpers(node, 65536); } return getReturnTypeOfSignature(getResolvedSignature(node)); } function checkAssertion(node) { return checkAssertionWorker(node, node.type, node.expression); } function checkAssertionWorker(errNode, type, expression, checkMode) { var exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(checkExpression(expression, checkMode))); checkSourceElement(type); var targetType = getTypeFromTypeNode(type); if (produceDiagnostics && targetType !== errorType) { var widenedType = getWidenedType(exprType); if (!isTypeComparableTo(targetType, widenedType)) { checkTypeComparableTo(exprType, targetType, errNode, ts.Diagnostics.Type_0_cannot_be_converted_to_type_1); } } return targetType; } function checkNonNullAssertion(node) { return getNonNullableType(checkExpression(node.expression)); } function checkMetaProperty(node) { checkGrammarMetaProperty(node); if (node.keywordToken === 94) { return checkNewTargetMetaProperty(node); } if (node.keywordToken === 91) { return checkImportMetaProperty(node); } return ts.Debug.assertNever(node.keywordToken); } function checkNewTargetMetaProperty(node) { var container = ts.getNewTargetContainer(node); if (!container) { 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) { var symbol = getSymbolOfNode(container.parent); return getTypeOfSymbol(symbol); } else { var symbol = getSymbolOfNode(container); return getTypeOfSymbol(symbol); } } function checkImportMetaProperty(node) { 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), "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; } function getTypeOfParameter(symbol) { var type = getTypeOfSymbol(symbol); if (strictNullChecks) { var declaration = symbol.valueDeclaration; if (declaration && ts.hasInitializer(declaration)) { return getOptionalType(type); } } return type; } function getTypeAtPosition(signature, pos) { return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfParameter(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfParameter(signature.parameters[pos]) : anyType; } function getTypeOfFirstParameterOfSignature(signature) { return getTypeOfFirstParameterOfSignatureWithFallback(signature, neverType); } function getTypeOfFirstParameterOfSignatureWithFallback(signature, fallbackType) { return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : fallbackType; } function inferFromAnnotatedParameters(signature, context, mapper) { var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); for (var i = 0; i < len; i++) { var declaration = signature.parameters[i].valueDeclaration; if (declaration.type) { var typeNode = ts.getEffectiveTypeAnnotationNode(declaration); if (typeNode) { inferTypes(mapper.inferences, getTypeFromTypeNode(typeNode), getTypeAtPosition(context, i)); } } } } function assignContextualParameterTypes(signature, context) { signature.typeParameters = context.typeParameters; if (context.thisParameter) { var parameter = signature.thisParameter; if (!parameter || parameter.valueDeclaration && !parameter.valueDeclaration.type) { if (!parameter) { signature.thisParameter = createSymbolWithType(context.thisParameter, undefined); } assignTypeToParameterAndFixTypeParameters(signature.thisParameter, getTypeOfSymbol(context.thisParameter)); } } var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); for (var i = 0; i < len; i++) { var parameter = signature.parameters[i]; if (!ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) { var contextualParameterType = getTypeAtPosition(context, i); assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType); } } if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) { var parameter = ts.last(signature.parameters); if (isTransientSymbol(parameter) || !ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) { var contextualParameterType = getTypeOfSymbol(ts.last(context.parameters)); assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType); } } } 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) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } else { assignBindingElementTypes(element.name); } } } } function assignTypeToParameterAndFixTypeParameters(parameter, contextualType) { var links = getSymbolLinks(parameter); if (!links.type) { links.type = contextualType; var decl = parameter.valueDeclaration; if (decl.name.kind !== 71) { if (links.type === emptyObjectType) { links.type = getTypeFromBindingPattern(decl.name); } assignBindingElementTypes(decl.name); } } } function createPromiseType(promisedType) { var globalPromiseType = getGlobalPromiseType(true); if (globalPromiseType !== emptyGenericType) { promisedType = getAwaitedType(promisedType) || emptyObjectType; return createTypeReference(globalPromiseType, [promisedType]); } return emptyObjectType; } function createPromiseReturnType(func, promisedType) { var promiseType = createPromiseType(promisedType); if (promiseType === emptyObjectType) { error(func, ts.isImportCall(func) ? ts.Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option : 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(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); } return promiseType; } function getReturnTypeFromBody(func, checkMode) { if (!func.body) { return errorType; } var functionFlags = ts.getFunctionFlags(func); var type; if (func.body.kind !== 213) { type = checkExpressionCached(func.body, checkMode); 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) { types = ts.concatenate(checkAndAggregateYieldOperandTypes(func, checkMode), types); if (!types || types.length === 0) { 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)); } return iterableIteratorAny; } } else { if (!types) { return functionFlags & 2 ? createPromiseReturnType(func, neverType) : neverType; } if (types.length === 0) { return functionFlags & 2 ? createPromiseReturnType(func, voidType) : voidType; } } type = getUnionType(types, 2); } var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!contextualSignature) { reportErrorsFromWidening(func, type); } if (isUnitType(type)) { var contextualType = !contextualSignature ? undefined : contextualSignature === getSignatureFromDeclaration(func) ? type : getReturnTypeOfSignature(contextualSignature); if (contextualType) { switch (functionFlags & 3) { case 3: contextualType = getIteratedTypeOfGenerator(contextualType, true); break; case 1: contextualType = getIteratedTypeOfGenerator(contextualType, false); break; case 2: contextualType = getPromisedTypeOfPromise(contextualType); break; } } type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); } var widenedType = getWidenedType(type); switch (functionFlags & 3) { case 3: return createAsyncIterableIteratorType(widenedType); case 1: return createIterableIteratorType(widenedType); case 2: return createPromiseType(widenedType); default: return widenedType; } } function checkAndAggregateYieldOperandTypes(func, checkMode) { var aggregatedTypes = []; var isAsync = (ts.getFunctionFlags(func) & 2) !== 0; ts.forEachYieldExpression(func.body, function (yieldExpression) { ts.pushIfUnique(aggregatedTypes, getYieldedTypeOfYieldExpression(yieldExpression, isAsync, checkMode)); }); return aggregatedTypes; } function getYieldedTypeOfYieldExpression(node, isAsync, checkMode) { var errorNode = node.expression || node; var expressionType = node.expression ? checkExpressionCached(node.expression, checkMode) : undefinedWideningType; 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); } function isExhaustiveSwitchStatement(node) { if (!node.possiblyExhaustive) { return false; } var type = getTypeOfExpression(node.expression); if (!isLiteralType(type)) { return false; } var switchTypes = getSwitchClauseTypes(node); if (!switchTypes.length || ts.some(switchTypes, isNeitherUnitTypeNorNever)) { return false; } return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralType), switchTypes); } function functionHasImplicitReturn(func) { if (!(func.flags & 128)) { return false; } if (ts.some(func.body.statements, function (statement) { return statement.kind === 227 && isExhaustiveSwitchStatement(statement); })) { return false; } return true; } function checkAndAggregateReturnExpressionTypes(func, checkMode) { var functionFlags = ts.getFunctionFlags(func); var aggregatedTypes = []; var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; if (expr) { var type = checkExpressionCached(expr, checkMode); 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) { hasReturnOfTypeNever = true; } ts.pushIfUnique(aggregatedTypes, type); } else { hasReturnWithNoExpression = true; } }); if (aggregatedTypes.length === 0 && !hasReturnWithNoExpression && (hasReturnOfTypeNever || mayReturnNever(func))) { return undefined; } if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression && !(isJavaScriptConstructor(func) && aggregatedTypes.some(function (t) { return t.symbol === func.symbol; }))) { ts.pushIfUnique(aggregatedTypes, undefinedType); } return aggregatedTypes; } function mayReturnNever(func) { switch (func.kind) { case 192: case 193: return true; case 154: return func.parent.kind === 184; default: return false; } } function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) { if (!produceDiagnostics) { return; } if (returnType && maybeTypeOfKind(returnType, 3 | 4096)) { return; } if (func.kind === 153 || ts.nodeIsMissing(func.body) || func.body.kind !== 213 || !functionHasImplicitReturn(func)) { return; } 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) { 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)) { error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined); } else if (compilerOptions.noImplicitReturns) { if (!returnType) { if (!hasExplicitReturn) { return; } var inferredReturnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); if (isUnwrappedReturnTypeVoidOrAny(func, inferredReturnType)) { return; } } error(ts.getEffectiveReturnTypeNode(func) || func, ts.Diagnostics.Not_all_code_paths_return_a_value); } } function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) { ts.Debug.assert(node.kind !== 154 || ts.isObjectLiteralMethod(node)); if (checkMode === 1 && isContextSensitive(node)) { return anyFunctionType; } var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); if (!hasGrammarError && node.kind === 192) { checkGrammarForGenerator(node); } var links = getNodeLinks(node); var type = getTypeOfSymbol(getMergedSymbol(node.symbol)); if (isTypeAny(type)) { return type; } if (!(links.flags & 1024)) { var contextualSignature = getContextualSignature(node); if (!(links.flags & 1024)) { links.flags |= 1024; if (contextualSignature) { var signature = getSignaturesOfType(type, 0)[0]; if (isContextSensitive(node)) { var contextualMapper = getContextualMapper(node); if (checkMode === 2) { inferFromAnnotatedParameters(signature, contextualSignature, contextualMapper); } var instantiatedContextualSignature = contextualMapper === identityMapper ? contextualSignature : instantiateSignature(contextualSignature, contextualMapper); assignContextualParameterTypes(signature, instantiatedContextualSignature); } if (!ts.getEffectiveReturnTypeNode(node) && !signature.resolvedReturnType) { var returnType = getReturnTypeFromBody(node, checkMode); if (!signature.resolvedReturnType) { signature.resolvedReturnType = returnType; } } } checkSignatureDeclaration(node); checkNodeDeferred(node); } } return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(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) === 2 ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(returnTypeNode)); if ((functionFlags & 1) === 0) { checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); } if (node.body) { if (!returnTypeNode) { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } if (node.body.kind === 213) { checkSourceElement(node.body); } else { var exprType = checkExpression(node.body); if (returnOrPromisedType) { 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 { checkTypeAssignableTo(exprType, returnOrPromisedType, node.body); } } } } } function checkArithmeticOperandType(operand, type, diagnostic) { if (!isTypeAssignableToKind(type, 168)) { error(operand, diagnostic); return false; } return true; } function isReadonlySymbol(symbol) { 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)) { if (symbol.flags & 4 && (expr.kind === 185 || expr.kind === 186) && expr.expression.kind === 99) { var func = ts.getContainingFunction(expr); if (!(func && func.kind === 155)) { return true; } return !(func.parent === symbol.valueDeclaration.parent || func === symbol.valueDeclaration.parent); } return true; } return false; } function isReferenceThroughNamespaceImport(expr) { if (expr.kind === 185 || expr.kind === 186) { var node = ts.skipParentheses(expr.expression); if (node.kind === 71) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol.flags & 2097152) { var declaration = getDeclarationOfAliasSymbol(symbol); return !!declaration && declaration.kind === 246; } } } return false; } function checkReferenceExpression(expr, invalidReferenceMessage) { var node = ts.skipOuterExpressions(expr, 2 | 1); if (node.kind !== 71 && node.kind !== 185 && node.kind !== 186) { error(expr, invalidReferenceMessage); return false; } return true; } function checkDeleteExpression(node) { checkExpression(node.expression); var expr = ts.skipParentheses(node.expression); if (expr.kind !== 185 && expr.kind !== 186) { error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference); return booleanType; } var links = getNodeLinks(expr); var symbol = getExportSymbolOfValueSymbolIfExported(links.resolvedSymbol); if (symbol && isReadonlySymbol(symbol)) { error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property); } return booleanType; } function checkTypeOfExpression(node) { checkExpression(node.expression); return typeofType; } function checkVoidExpression(node) { checkExpression(node.expression); return undefinedWideningType; } function checkAwaitExpression(node) { if (produceDiagnostics) { if (!(node.flags & 16384)) { grammarErrorOnFirstToken(node, ts.Diagnostics.await_expression_is_only_allowed_within_an_async_function); } if (isInParameterInitializerBeforeContainingFunction(node)) { error(node, ts.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer); } } var operandType = checkExpression(node.expression); return checkAwaitedType(operandType, node, ts.Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } function checkPrefixUnaryExpression(node) { var operandType = checkExpression(node.operand); if (operandType === silentNeverType) { return silentNeverType; } if (node.operand.kind === 8) { if (node.operator === 38) { return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text)); } else if (node.operator === 37) { return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text)); } } switch (node.operator) { case 37: case 38: case 52: checkNonNullType(operandType, node.operand); 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: var facts = getTypeFacts(operandType) & (1048576 | 2097152); return facts === 1048576 ? falseType : facts === 2097152 ? trueType : booleanType; 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) { checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access); } return numberType; } return errorType; } function checkPostfixUnaryExpression(node) { var operandType = checkExpression(node.operand); if (operandType === silentNeverType) { return silentNeverType; } 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) { checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access); } return numberType; } function maybeTypeOfKind(type, kind) { if (type.flags & kind & ~134217728 || kind & 134217728 && isGenericMappedType(type)) { return true; } 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]; if (maybeTypeOfKind(t, kind)) { return true; } } } return false; } function isTypeAssignableToKind(source, kind, strict) { if (source.flags & kind) { return true; } if (strict && source.flags & (3 | 4096 | 8192 | 16384)) { return false; } 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 ? ts.every(source.types, function (subType) { return allTypesAssignableToKind(subType, kind, strict); }) : isTypeAssignableToKind(source, kind, strict); } function isConstEnumObjectType(type) { return !!(ts.getObjectFlags(type) & 16) && !!type.symbol && isConstEnumSymbol(type.symbol); } function isConstEnumSymbol(symbol) { return (symbol.flags & 128) !== 0; } function checkInstanceOfExpression(left, right, leftType, rightType) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } if (!isTypeAny(leftType) && 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); } 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); } return booleanType; } function checkInExpression(left, right, leftType, rightType) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); 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 | 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; } function checkObjectLiteralAssignment(node, sourceType) { var properties = node.properties; if (strictNullChecks && properties.length === 0) { return checkNonNullType(sourceType, node); } for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) { var p = properties_7[_i]; checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, properties); } return sourceType; } function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, allProperties) { if (property.kind === 270 || property.kind === 271) { var name = property.name; if (name.kind === 147) { checkComputedPropertyName(name); } if (isComputedNonLiteralName(name)) { return undefined; } var text = ts.getTextOfPropertyName(name); var type = isTypeAny(objectLiteralType) ? objectLiteralType : getTypeOfPropertyOfType(objectLiteralType, text) || isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) || getIndexTypeOfType(objectLiteralType, 0); if (type) { if (property.kind === 271) { return checkDestructuringAssignment(property, type); } else { return checkDestructuringAssignment(property.initializer, type); } } else { 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) { if (languageVersion < 6) { checkExternalEmitHelpers(property, 4); } var nonRestNames = []; if (allProperties) { for (var i = 0; i < allProperties.length - 1; i++) { nonRestNames.push(allProperties[i].name); } } var type = getRestType(objectLiteralType, nonRestNames, objectLiteralType.symbol); checkGrammarForDisallowedTrailingComma(allProperties, ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); return checkDestructuringAssignment(property.expression, type); } else { error(property, ts.Diagnostics.Property_assignment_expected); } } function checkArrayLiteralAssignment(node, sourceType, checkMode) { var elements = node.elements; if (languageVersion < 2 && compilerOptions.downlevelIteration) { checkExternalEmitHelpers(node, 512); } var elementType = checkIteratedTypeOrElementType(sourceType, node, false, false) || errorType; for (var i = 0; i < elements.length; i++) { checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, checkMode); } return sourceType; } function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) { var elements = node.elements; var element = elements[elementIndex]; if (element.kind !== 206) { if (element.kind !== 204) { var propName = "" + elementIndex; var type = isTypeAny(sourceType) ? sourceType : isTupleLikeType(sourceType) ? getTypeOfPropertyOfType(sourceType, propName) : elementType; if (type) { return checkDestructuringAssignment(element, type, checkMode); } else { 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); } else { error(element, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName); } } } else { if (elementIndex < elements.length - 1) { error(element, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); } else { var restExpression = element.expression; if (restExpression.kind === 200 && restExpression.operatorToken.kind === 58) { error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); } else { checkGrammarForDisallowedTrailingComma(node.elements, ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); return checkDestructuringAssignment(restExpression, createArrayType(elementType), checkMode); } } } } return undefined; } function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode) { var target; if (exprOrAssignment.kind === 271) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { if (strictNullChecks && !(getFalsyFlags(checkExpression(prop.objectAssignmentInitializer)) & 8192)) { sourceType = getTypeWithFacts(sourceType, 131072); } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, checkMode); } target = exprOrAssignment.name; } else { target = exprOrAssignment; } if (target.kind === 200 && target.operatorToken.kind === 58) { checkBinaryExpression(target, checkMode); target = target.left; } if (target.kind === 184) { return checkObjectLiteralAssignment(target, sourceType); } 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 ? 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, undefined); } return sourceType; } function isSideEffectFree(node) { node = ts.skipParentheses(node); switch (node.kind) { 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: return isSideEffectFree(node.whenTrue) && isSideEffectFree(node.whenFalse); case 200: if (ts.isAssignmentOperator(node.operatorToken.kind)) { return false; } return isSideEffectFree(node.left) && isSideEffectFree(node.right); case 198: case 199: switch (node.operator) { case 51: case 37: case 38: case 52: return true; } return false; case 196: case 190: case 208: default: return false; } } function isTypeEqualityComparableTo(source, target) { return (target.flags & 24576) !== 0 || isTypeComparableTo(source, target); } function checkBinaryExpression(node, checkMode) { if (ts.isInJavaScriptFile(node) && ts.getAssignedJavascriptInitializer(node)) { return checkExpression(node.right, checkMode); } return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, checkMode, node); } function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) { var operator = operatorToken.kind; 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: 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 ((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 { 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) { checkAssignmentOperator(numberType); } } return numberType; case 37: case 59: if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } if (!isTypeAssignableToKind(leftType, 68) && !isTypeAssignableToKind(rightType, 68)) { leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); } var resultType = void 0; if (isTypeAssignableToKind(leftType, 168, true) && isTypeAssignableToKind(rightType, 168, true)) { resultType = numberType; } else if (isTypeAssignableToKind(leftType, 68, true) || isTypeAssignableToKind(rightType, 68, true)) { resultType = stringType; } else if (isTypeAny(leftType) || isTypeAny(rightType)) { resultType = leftType === errorType || rightType === errorType ? errorType : anyType; } if (resultType && !checkForDisallowedESSymbolOperand(operator)) { return resultType; } if (!resultType) { reportOperatorError(); return anyType; } if (operator === 59) { checkAssignmentOperator(resultType); } return resultType; case 27: case 29: case 30: case 31: if (checkForDisallowedESSymbolOperand(operator)) { leftType = getBaseTypeOfLiteralType(checkNonNullType(leftType, left)); rightType = getBaseTypeOfLiteralType(checkNonNullType(rightType, right)); if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { reportOperatorError(); } } return booleanType; case 32: case 33: case 34: case 35: var leftIsLiteral = isLiteralType(leftType); var rightIsLiteral = isLiteralType(rightType); if (!leftIsLiteral || !rightIsLiteral) { leftType = leftIsLiteral ? getBaseTypeOfLiteralType(leftType) : leftType; rightType = rightIsLiteral ? getBaseTypeOfLiteralType(rightType) : rightType; } if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; case 93: return checkInstanceOfExpression(left, right, leftType, rightType); case 92: return checkInExpression(left, right, leftType, rightType); case 53: return getTypeFacts(leftType) & 1048576 ? getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) : leftType; case 54: return getTypeFacts(leftType) & 2097152 ? getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2) : leftType; case 58: var special = ts.getSpecialPropertyAssignmentKind(left.parent); checkSpecialAssignment(special, right); if (isJSSpecialPropertyAssignment(special)) { return leftType; } else { checkAssignmentOperator(rightType); return getRegularTypeOfObjectLiteral(rightType); } 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); } return rightType; default: return ts.Debug.fail(); } function checkSpecialAssignment(special, right) { 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) { var name = prop.escapedName; 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)); } } } } } function isEvalNode(node) { return node.kind === 71 && node.escapedText === "eval"; } function checkForDisallowedESSymbolOperand(operator) { 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)); return false; } return true; } function getSuggestedBooleanOperator(operator) { switch (operator) { 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)) { 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")) { checkTypeAssignableTo(valueType, leftType, left, undefined); } } } function isJSSpecialPropertyAssignment(special) { switch (special) { case 1: case 2: case 5: case 6: case 3: case 4: var symbol = getSymbolOfNode(left); var init = ts.getAssignedJavascriptInitializer(right); return init && ts.isObjectLiteralExpression(init) && symbol && ts.hasEntries(symbol.exports); default: return false; } } function reportOperatorError() { error(errorNode || operatorToken, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(operatorToken.kind), typeToString(leftType), typeToString(rightType)); } } function isYieldExpressionInClass(node) { var current = node; var parent = node.parent; while (parent) { if (ts.isFunctionLike(parent) && current === parent.body) { return false; } else if (ts.isClassLike(current)) { return true; } current = parent; parent = parent.parent; } return false; } function checkYieldExpression(node) { if (produceDiagnostics) { if (!(node.flags & 4096) || isYieldExpressionInClass(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body); } if (isInParameterInitializerBeforeContainingFunction(node)) { error(node, ts.Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer); } } var func = ts.getContainingFunction(node); if (!func) return anyType; var functionFlags = ts.getFunctionFlags(func); if (!(functionFlags & 1)) { return anyType; } if (node.asteriskToken) { if ((functionFlags & 3) === 3 && languageVersion < 6) { checkExternalEmitHelpers(node, 26624); } if ((functionFlags & 3) === 1 && languageVersion < 2 && compilerOptions.downlevelIteration) { checkExternalEmitHelpers(node, 256); } } 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, undefined); } 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); } function checkTemplateExpression(node) { ts.forEach(node.templateSpans, function (templateSpan) { 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) { return node.parent.parent; } return node; } function checkExpressionWithContextualType(node, contextualType, contextualMapper) { var context = getContextNode(node); var saveContextualType = context.contextualType; var saveContextualMapper = context.contextualMapper; context.contextualType = contextualType; context.contextualMapper = contextualMapper; var checkMode = contextualMapper === identityMapper ? 1 : contextualMapper ? 2 : 3; var result = checkExpression(node, checkMode); context.contextualType = saveContextualType; context.contextualMapper = saveContextualMapper; return result; } function checkExpressionCached(node, checkMode) { var links = getNodeLinks(node); if (!links.resolvedType) { if (checkMode) { return checkExpression(node, checkMode); } var saveFlowLoopStart = flowLoopStart; flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, checkMode); flowLoopStart = saveFlowLoopStart; } return links.resolvedType; } function isTypeAssertion(node) { node = ts.skipParentheses(node); return node.kind === 190 || node.kind === 208; } function checkDeclarationInitializer(declaration) { var initializer = ts.getEffectiveInitializer(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) { if (noImplicitAny) { reportImplicitAnyError(declaration, anyType); } return anyType; } else if (isEmptyArrayLiteralType(widened)) { if (noImplicitAny) { reportImplicitAnyError(declaration, anyArrayType); } return anyArrayType; } } return widened; } function isLiteralOfContextualType(candidateType, contextualType) { if (contextualType) { if (contextualType.flags & 786432) { var types = contextualType.types; return ts.some(types, function (t) { return isLiteralOfContextualType(candidateType, t); }); } if (contextualType.flags & 14745600) { var constraint = getBaseConstraintOfType(contextualType) || emptyObjectType; return maybeTypeOfKind(constraint, 4) && maybeTypeOfKind(candidateType, 64) || maybeTypeOfKind(constraint, 8) && maybeTypeOfKind(candidateType, 128) || maybeTypeOfKind(constraint, 1024) && maybeTypeOfKind(candidateType, 2048) || isLiteralOfContextualType(candidateType, constraint); } 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; } function checkExpressionForMutableLocation(node, checkMode, contextualType) { if (arguments.length === 2) { contextualType = getContextualType(node); } var type = checkExpression(node, checkMode); return isTypeAssertion(node) ? type : getWidenedLiteralLikeTypeForContextualType(type, contextualType); } function checkPropertyAssignment(node, checkMode) { if (node.name.kind === 147) { checkComputedPropertyName(node.name); } return checkExpressionForMutableLocation(node.initializer, checkMode); } function checkObjectLiteralMethod(node, checkMode) { checkGrammarMethod(node); 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) { var signature = getSingleCallSignature(type); if (signature && signature.typeParameters) { var contextualType = getApparentTypeOfContextualType(node); if (contextualType) { var contextualSignature = getSingleCallSignature(getNonNullableType(contextualType)); if (contextualSignature && !contextualSignature.typeParameters) { return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, getContextualMapper(node))); } } } } return type; } function getTypeOfExpression(node, cache) { 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); } } return cache ? checkExpressionCached(node) : checkExpression(node); } function getContextFreeTypeOfExpression(node) { var saveContextualType = node.contextualType; node.contextualType = anyType; var type = getTypeOfExpression(node); node.contextualType = saveContextualType; return type; } function checkExpresionNoReturn(node) { checkExpression(node); } function checkExpression(node, checkMode) { var type; if (node.kind === 146) { type = checkQualifiedName(node); } else { var uninstantiatedType = checkExpressionWorker(node, checkMode); type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); } if (isConstEnumObjectType(type)) { 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); } } return type; } function checkParenthesizedExpression(node, checkMode) { var tag = ts.isInJavaScriptFile(node) ? ts.getJSDocTypeTag(node) : undefined; if (tag) { return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode); } return checkExpression(node.expression, checkMode); } function checkExpressionWorker(node, checkMode) { switch (node.kind) { case 71: return checkIdentifier(node); case 99: return checkThisExpression(node); case 97: return checkSuperExpression(node); case 95: return nullWideningType; case 13: case 9: return getFreshTypeOfLiteralType(getLiteralType(node.text)); case 8: checkGrammarNumericLiteral(node); return getFreshTypeOfLiteralType(getLiteralType(+node.text)); case 101: return trueType; case 86: return falseType; case 202: return checkTemplateExpression(node); case 12: return globalRegExpType; case 183: return checkArrayLiteral(node, checkMode); case 184: return checkObjectLiteral(node, checkMode); case 185: return checkPropertyAccessExpression(node); case 186: return checkIndexedAccess(node); case 187: if (node.expression.kind === 91) { return checkImportCallExpression(node); } case 188: return checkCallExpression(node); case 189: return checkTaggedTemplateExpression(node); case 191: return checkParenthesizedExpression(node, checkMode); case 205: return checkClassExpression(node); case 192: case 193: return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode); case 195: return checkTypeOfExpression(node); case 190: case 208: return checkAssertion(node); case 209: return checkNonNullAssertion(node); case 210: return checkMetaProperty(node); case 194: return checkDeleteExpression(node); case 196: return checkVoidExpression(node); case 197: return checkAwaitExpression(node); case 198: return checkPrefixUnaryExpression(node); case 199: return checkPostfixUnaryExpression(node); case 200: return checkBinaryExpression(node, checkMode); case 201: return checkConditionalExpression(node, checkMode); case 204: return checkSpreadExpression(node, checkMode); case 206: return undefinedWideningType; case 203: return checkYieldExpression(node); case 265: return checkJsxExpression(node, checkMode); case 255: return checkJsxElement(node, checkMode); case 256: return checkJsxSelfClosingElement(node, checkMode); case 259: return checkJsxFragment(node, checkMode); case 263: return checkJsxAttributes(node, checkMode); case 257: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return errorType; } function checkTypeParameter(node) { if (node.expression) { grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected); } checkSourceElement(node.constraint); checkSourceElement(node.default); var typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node)); if (!hasNonCircularBaseConstraint(typeParameter)) { error(node.constraint, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(typeParameter)); } if (!hasNonCircularTypeParameterDefault(typeParameter)) { error(node.default, ts.Diagnostics.Type_parameter_0_has_a_circular_default, typeToString(typeParameter)); } var constraintType = getConstraintOfTypeParameter(typeParameter); var defaultType = getDefaultFromTypeParameter(typeParameter); if (constraintType && defaultType) { checkTypeAssignableTo(defaultType, getTypeWithThisArgument(constraintType, defaultType), node.default, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } if (produceDiagnostics) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); } } function checkParameter(node) { checkGrammarDecoratorsAndModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); 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); } } if (node.questionToken && ts.isBindingPattern(node.name) && func.body) { error(node, ts.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature); } if (node.name && ts.isIdentifier(node.name) && (node.name.escapedText === "this" || node.name.escapedText === "new")) { 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 || func.kind === 159 || func.kind === 164) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } } if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isArrayType(getTypeOfSymbol(node.symbol))) { error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); } } function getTypePredicateParameterIndex(parameterList, parameter) { if (parameterList) { for (var i = 0; i < parameterList.length; i++) { var param = parameterList[i]; if (param.name.kind === 71 && param.name.escapedText === parameter.escapedText) { return i; } } } return -1; } function checkTypePredicate(node) { var parent = getTypePredicateParent(node); if (!parent) { error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); return; } var typePredicate = getTypePredicateOfSignature(getSignatureFromDeclaration(parent)); if (!typePredicate) { return; } checkSourceElement(node.type); var parameterName = node.parameterName; if (ts.isThisTypePredicate(typePredicate)) { getTypeFromThisTypeNode(parameterName); } else { if (typePredicate.parameterIndex >= 0) { if (parent.parameters[typePredicate.parameterIndex].dotDotDotToken) { error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); } else { 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) { var hasReportedError = false; for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) { var name = _a[_i].name; if (ts.isBindingPattern(name) && checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, parameterName, typePredicate.parameterName)) { hasReportedError = true; break; } } if (!hasReportedError) { error(node.parameterName, ts.Diagnostics.Cannot_find_parameter_0, typePredicate.parameterName); } } } } function getTypePredicateParent(node) { switch (node.parent.kind) { case 193: case 158: case 234: case 192: case 163: case 154: case 153: var parent = node.parent; if (node === parent.type) { return parent; } } } function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) { for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { var element = _a[_i]; if (ts.isOmittedExpression(element)) { continue; } var name = element.name; 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 || name.kind === 180) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) { return true; } } } } function checkSignatureDeclaration(node) { if (node.kind === 160) { checkGrammarIndexSignature(node); } 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)) { if ((functionFlags & 3) === 3 && languageVersion < 6) { checkExternalEmitHelpers(node, 6144); } if ((functionFlags & 3) === 2 && languageVersion < 4) { checkExternalEmitHelpers(node, 64); } if ((functionFlags & 3) !== 0 && languageVersion < 2) { checkExternalEmitHelpers(node, 128); } } checkTypeParameters(node.typeParameters); ts.forEach(node.parameters, checkParameter); if (node.type) { checkSourceElement(node.type); } if (produceDiagnostics) { checkCollisionWithArgumentsInGeneratedCode(node); var returnTypeNode = ts.getEffectiveReturnTypeNode(node); if (noImplicitAny && !returnTypeNode) { switch (node.kind) { case 159: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; 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 | 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) !== 0) || anyType; var iterableIteratorInstantiation = functionFlags_1 & 2 ? createAsyncIterableIteratorType(generatorElementType) : createIterableIteratorType(generatorElementType); checkTypeAssignableTo(iterableIteratorInstantiation, returnType, returnTypeNode); } } else if ((functionFlags_1 & 3) === 2) { checkAsyncFunctionReturnType(node); } } 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) { 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); } } } else { 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: addName(names, name, memberName, 1); break; case 157: addName(names, name, memberName, 2); break; case 152: addName(names, name, memberName, 3); break; case 154: addName(names, name, memberName, 4); break; } } } } function addName(names, location, name, meaning) { var prev = names.get(name); if (prev) { if (prev & 4) { if (meaning !== 4) { error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location)); } } else if (prev & meaning) { error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location)); } else { names.set(name, prev | meaning); } } else { names.set(name, meaning); } } } 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); if (isStatic && memberNameNode) { var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode); switch (memberName) { case "name": case "length": case "caller": case "arguments": case "prototype": var message = ts.Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1; var className = getNameOfSymbolAsWritten(getSymbolOfNode(node)); error(memberNameNode, message, memberName, className); break; } } } } function checkObjectTypeForDuplicateDeclarations(node) { var names = ts.createMap(); for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; if (member.kind === 151) { var memberName = void 0; var name = member.name; switch (name.kind) { case 9: case 8: memberName = name.text; break; case 71: memberName = ts.idText(name); break; default: continue; } if (names.get(memberName)) { error(ts.getNameOfDeclaration(member.symbol.valueDeclaration), ts.Diagnostics.Duplicate_identifier_0, memberName); error(member.name, ts.Diagnostics.Duplicate_identifier_0, memberName); } else { names.set(memberName, true); } } } } function checkTypeForDuplicateIndexSignatures(node) { if (node.kind === 236) { var nodeSymbol = getSymbolOfNode(node); if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { return; } } var indexSymbol = getIndexSymbol(getSymbolOfNode(node)); if (indexSymbol) { var seenNumericIndexer = false; var seenStringIndexer = false; for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { case 137: if (!seenStringIndexer) { seenStringIndexer = true; } else { error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; case 134: if (!seenNumericIndexer) { seenNumericIndexer = true; } else { error(declaration, ts.Diagnostics.Duplicate_number_index_signature); } break; } } } } } function checkPropertyDeclaration(node) { if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarProperty(node)) checkGrammarComputedPropertyName(node.name); checkVariableLikeDeclaration(node); } function checkMethodDeclaration(node) { if (!checkGrammarMethod(node)) checkGrammarComputedPropertyName(node.name); checkFunctionOrMethodDeclaration(node); 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) { checkSignatureDeclaration(node); if (!checkGrammarConstructorTypeParameters(node)) checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); if (node === firstDeclaration) { checkFunctionOrConstructorSymbol(symbol); } if (ts.nodeIsMissing(node.body)) { return; } if (!produceDiagnostics) { return; } function isInstancePropertyWithInitializer(n) { return n.kind === 152 && !ts.hasModifier(n, 32) && !!n.initializer; } var containingClassDecl = node.parent; if (ts.getClassExtendsHeritageClauseElement(containingClassDecl)) { captureLexicalThis(node.parent, containingClassDecl); var classExtendsNull = classDeclarationExtendsNull(containingClassDecl); var superCall = getSuperCallInConstructor(node); if (superCall) { if (classExtendsNull) { error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); } var superCallShouldBeFirst = ts.some(node.parent.members, isInstancePropertyWithInitializer) || 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 && ts.isSuperCall(statement.expression)) { superCallStatement = statement; break; } if (!ts.isPrologueDirective(statement)) { break; } } if (!superCallStatement) { error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); } } } else if (!classExtendsNull) { error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); } } } function checkAccessorDeclaration(node) { if (produceDiagnostics) { if (!checkGrammarFunctionLikeDeclaration(node) && !checkGrammarAccessor(node)) checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); 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); } } } if (node.name.kind === 147) { checkComputedPropertyName(node.name); } if (!hasNonBindableDynamicName(node)) { 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) !== (otherFlags & 28)) { error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); } if ((nodeFlags & 128) !== (otherFlags & 128)) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } 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) { checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType); } } checkSourceElement(node.body); } function checkAccessorDeclarationTypesIdentical(first, second, getAnnotatedType, message) { var firstType = getAnnotatedType(first); var secondType = getAnnotatedType(second); if (firstType && secondType && !isTypeIdenticalTo(firstType, secondType)) { error(first, message); } } function checkMissingDeclaration(node) { checkDecorators(node); } function getEffectiveTypeArguments(node, typeParameters) { return fillMissingTypeArguments(ts.map(node.typeArguments, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), ts.isInJavaScriptFile(node)); } function checkTypeArgumentConstraints(node, typeParameters) { var typeArguments; var mapper; var result = true; for (var i = 0; i < typeParameters.length; i++) { var constraint = getConstraintOfTypeParameter(typeParameters[i]); if (constraint) { if (!typeArguments) { typeArguments = getEffectiveTypeArguments(node, typeParameters); mapper = createTypeMapper(typeParameters, typeArguments); } result = result && checkTypeAssignableTo(typeArguments[i], instantiateType(constraint, mapper), node.typeArguments[i], ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); } } return result; } function getTypeParametersForTypeReference(node) { var type = getTypeFromTypeReference(node); if (type !== errorType) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol) { 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 && 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) { ts.forEach(node.typeArguments, checkSourceElement); if (produceDiagnostics) { var typeParameters = getTypeParametersForTypeReference(node); if (typeParameters) { checkTypeArgumentConstraints(node, typeParameters); } } } 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)); } } } function getTypeArgumentConstraint(node) { var typeReferenceNode = ts.tryCast(node.parent, ts.isTypeReferenceType); if (!typeReferenceNode) return undefined; var typeParameters = getTypeParametersForTypeReference(typeReferenceNode); var constraint = getConstraintOfTypeParameter(typeParameters[typeReferenceNode.typeArguments.indexOf(node)]); return constraint && instantiateType(constraint, createTypeMapper(typeParameters, getEffectiveTypeArguments(typeReferenceNode, typeParameters))); } function checkTypeQuery(node) { getTypeFromTypeQueryNode(node); } function checkTypeLiteral(node) { ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); checkIndexConstraints(type); checkTypeForDuplicateIndexSignatures(node); checkObjectTypeForDuplicateDeclarations(node); } } function checkArrayType(node) { checkSourceElement(node.elementType); } function checkTupleType(node) { var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes); if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) { grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty); } ts.forEach(node.elementTypes, checkSourceElement); } function checkUnionOrIntersectionType(node) { ts.forEach(node.types, checkSourceElement); } function checkIndexedAccessIndexType(type, accessNode) { if (!(type.flags & 2097152)) { return type; } var objectType = type.objectType; var indexType = type.indexType; 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; } 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)); return type; } function checkIndexedAccessType(node) { checkSourceElement(node.objectType); checkSourceElement(node.indexType); checkIndexedAccessIndexType(getTypeFromIndexedAccessTypeNode(node), node); } function checkMappedType(node) { checkSourceElement(node.typeParameter); checkSourceElement(node.type); if (noImplicitAny && !node.type) { reportImplicitAnyError(node, anyType); } var type = getTypeFromMappedTypeNode(node); var constraintType = getConstraintTypeFromMappedType(type); checkTypeAssignableTo(constraintType, keyofConstraintType, node.typeParameter.constraint); } function checkTypeOperator(node) { checkGrammarTypeOperatorNode(node); checkSourceElement(node.type); } function checkConditionalType(node) { ts.forEachChild(node, checkSourceElement); } function checkInferType(node) { 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); } function checkImportType(node) { checkSourceElement(node.argument); getTypeFromTypeNode(node); } function isPrivateWithinAmbient(node) { return ts.hasModifier(node, 8) && !!(node.flags & 4194304); } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = ts.getCombinedModifierFlags(n); 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; } return flags & flagsToCheck; } function checkFunctionOrConstructorSymbol(symbol) { if (!produceDiagnostics) { return; } function getCanonicalOverload(overloads, implementation) { var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent; return implementationSharesContainerWithFirstOverload ? implementation : overloads[0]; } function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, 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) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); } else if (deviation & 2) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); } 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) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); } }); } } function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken, allHaveQuestionToken) { if (someHaveQuestionToken !== allHaveQuestionToken) { var canonicalHasQuestionToken_1 = ts.hasQuestionToken(getCanonicalOverload(overloads, implementation)); ts.forEach(overloads, function (o) { var deviation = ts.hasQuestionToken(o) !== canonicalHasQuestionToken_1; if (deviation) { error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required); } }); } } var flagsToCheck = 1 | 2 | 8 | 16 | 128; var someNodeFlags = 0; var allNodeFlags = flagsToCheck; var someHaveQuestionToken = false; var allHaveQuestionToken = true; var hasOverloads = false; var bodyDeclaration; var lastSeenNonAmbientDeclaration; var previousDeclaration; var declarations = symbol.declarations; var isConstructor = (symbol.flags & 16384) !== 0; function reportImplementationExpectedError(node) { if (node.name && ts.nodeIsMissing(node.name)) { return; } var seen = false; var subsequentNode = ts.forEachChild(node.parent, function (c) { if (seen) { return c; } else { seen = c === node; } }); if (subsequentNode && subsequentNode.pos === node.end) { if (subsequentNode.kind === node.kind) { var errorNode_1 = subsequentNode.name || subsequentNode; 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 || node.kind === 153) && ts.hasModifier(node, 32) !== ts.hasModifier(subsequentNode, 32); if (reportError) { 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; } else if (ts.nodeIsPresent(subsequentNode.body)) { error(errorNode_1, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name)); return; } } } var errorNode = node.name || node; if (isConstructor) { error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing); } else { if (ts.hasModifier(node, 128)) { error(errorNode, ts.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive); } else { error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); } } } var duplicateFunctionDeclaration = false; var multipleConstructorImplementation = false; 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; var inAmbientContextOrInterface = node.parent.kind === 236 || node.parent.kind === 166 || inAmbientContext; if (inAmbientContextOrInterface) { previousDeclaration = undefined; } if (node.kind === 234 || node.kind === 154 || node.kind === 153 || node.kind === 155) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node); allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node); if (ts.nodeIsPresent(node.body) && bodyDeclaration) { if (isConstructor) { multipleConstructorImplementation = true; } else { duplicateFunctionDeclaration = true; } } else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { if (!bodyDeclaration) { bodyDeclaration = node; } } else { hasOverloads = true; } previousDeclaration = node; if (!inAmbientContextOrInterface) { lastSeenNonAmbientDeclaration = node; } } } if (multipleConstructorImplementation) { ts.forEach(declarations, function (declaration) { error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); }); } if (duplicateFunctionDeclaration) { ts.forEach(declarations, function (declaration) { error(ts.getNameOfDeclaration(declaration), ts.Diagnostics.Duplicate_function_implementation); }); } if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !ts.hasModifier(lastSeenNonAmbientDeclaration, 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken); if (bodyDeclaration) { var signatures = getSignaturesOfSymbol(symbol); var bodySignature = getSignatureFromDeclaration(bodyDeclaration); for (var _a = 0, signatures_7 = signatures; _a < signatures_7.length; _a++) { var signature = signatures_7[_a]; if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { error(signature.declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation); break; } } } } } function checkExportsOnMergedDeclarations(node) { if (!produceDiagnostics) { return; } var symbol = node.localSymbol; if (!symbol) { symbol = getSymbolOfNode(node); if (!symbol.exportSymbol) { return; } } if (ts.getDeclarationOfKind(symbol, node.kind) !== node) { return; } 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 | 512); if (effectiveDeclarationFlags & 1) { if (effectiveDeclarationFlags & 512) { defaultExportedDeclarationSpaces |= declarationSpaces; } else { exportedDeclarationSpaces |= declarationSpaces; } } else { nonExportedDeclarationSpaces |= declarationSpaces; } } var nonDefaultExportedDeclarationSpaces = exportedDeclarationSpaces | nonExportedDeclarationSpaces; var commonDeclarationSpacesForExportsAndLocals = exportedDeclarationSpaces & nonExportedDeclarationSpaces; var commonDeclarationSpacesForDefaultAndNonDefault = defaultExportedDeclarationSpaces & nonDefaultExportedDeclarationSpaces; if (commonDeclarationSpacesForExportsAndLocals || commonDeclarationSpacesForDefaultAndNonDefault) { for (var _b = 0, _c = symbol.declarations; _b < _c.length; _b++) { var d = _c[_b]; var declarationSpaces = getDeclarationSpaces(d); var name = ts.getNameOfDeclaration(d); 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)); } else if (declarationSpaces & commonDeclarationSpacesForExportsAndLocals) { error(name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(name)); } } } 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: case 237: case 298: 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; } d = d.expression; 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: case 182: case 234: case 248: return 1; default: return ts.Debug.fail(ts.Debug.showSyntaxKind(d)); } } } function getAwaitedTypeOfPromise(type, errorNode, diagnosticMessage) { var promisedType = getPromisedTypeOfPromise(type, errorNode); return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage); } function getPromisedTypeOfPromise(promise, errorNode) { if (isTypeAny(promise)) { return undefined; } var typeAsPromise = promise; if (typeAsPromise.promisedTypeOfPromise) { return typeAsPromise.promisedTypeOfPromise; } if (isReferenceToType(promise, getGlobalPromiseType(false))) { return typeAsPromise.promisedTypeOfPromise = promise.typeArguments[0]; } var thenFunction = getTypeOfPropertyOfType(promise, "then"); if (isTypeAny(thenFunction)) { return undefined; } 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); if (isTypeAny(onfulfilledParameterType)) { return undefined; } 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); } function checkAwaitedType(type, errorNode, diagnosticMessage) { return getAwaitedType(type, errorNode, diagnosticMessage) || errorType; } function getAwaitedType(type, errorNode, diagnosticMessage) { var typeAsAwaitable = type; if (typeAsAwaitable.awaitedTypeOfType) { return typeAsAwaitable.awaitedTypeOfType; } if (isTypeAny(type)) { return typeAsAwaitable.awaitedTypeOfType = type; } if (type.flags & 262144) { var types = void 0; for (var _i = 0, _a = type.types; _i < _a.length; _i++) { var constituentType = _a[_i]; types = ts.append(types, getAwaitedType(constituentType, errorNode, diagnosticMessage)); } if (!types) { return undefined; } return typeAsAwaitable.awaitedTypeOfType = getUnionType(types); } var promisedType = getPromisedTypeOfPromise(type); if (promisedType) { if (type.id === promisedType.id || awaitedTypeStack.indexOf(promisedType.id) >= 0) { if (errorNode) { error(errorNode, ts.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method); } return undefined; } awaitedTypeStack.push(type.id); var awaitedType = getAwaitedType(promisedType, errorNode, diagnosticMessage); awaitedTypeStack.pop(); if (!awaitedType) { return undefined; } return typeAsAwaitable.awaitedTypeOfType = awaitedType; } var thenFunction = getTypeOfPropertyOfType(type, "then"); if (thenFunction && getSignaturesOfType(thenFunction, 0).length > 0) { if (errorNode) { if (!diagnosticMessage) return ts.Debug.fail(); error(errorNode, diagnosticMessage); } return undefined; } return typeAsAwaitable.awaitedTypeOfType = type; } function checkAsyncFunctionReturnType(node) { var returnTypeNode = ts.getEffectiveReturnTypeNode(node); var returnType = getTypeFromTypeNode(returnTypeNode); if (languageVersion >= 2) { if (returnType === errorType) { return errorType; } var globalPromiseType = getGlobalPromiseType(true); if (globalPromiseType !== emptyGenericType && !isReferenceToType(returnType, globalPromiseType)) { error(returnTypeNode, ts.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type); return errorType; } } else { markTypeNodeAsReferenced(returnTypeNode); if (returnType === errorType) { return errorType; } var promiseConstructorName = ts.getEntityNameFromTypeNode(returnTypeNode); if (promiseConstructorName === undefined) { 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, true); var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType; if (promiseConstructorType === errorType) { 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 { 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; } var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType(true); if (globalPromiseConstructorLikeType === emptyObjectType) { 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; } var rootName = promiseConstructorName && getFirstIdentifier(promiseConstructorName); 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; } } 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); } function checkDecorator(node) { var signature = getResolvedSignature(node); var returnType = getReturnTypeOfSignature(signature); if (returnType.flags & 1) { return; } var expectedReturnType; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { case 235: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; case 149: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; case 152: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; case 154: case 156: case 157: var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); break; default: return ts.Debug.fail(); } checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, function () { return errorInfo; }); } function markTypeNodeAsReferenced(node) { markEntityNameOrEntityExpressionAsReference(node && ts.getEntityNameFromTypeNode(node)); } function markEntityNameOrEntityExpressionAsReference(typeName) { if (!typeName) return; var rootName = getFirstIdentifier(typeName); var meaning = (typeName.kind === 71 ? 67901928 : 1920) | 2097152; var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, undefined, undefined, true); if (rootSymbol && rootSymbol.flags & 2097152 && symbolIsValue(rootSymbol) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))) { markAliasSymbolAsReferenced(rootSymbol); } } function markDecoratorMedataDataTypeNodeAsReferenced(node) { var entityName = getEntityNameForDecoratorMetadata(node); if (entityName && ts.isEntityName(entityName)) { markEntityNameOrEntityExpressionAsReference(entityName); } } function getEntityNameForDecoratorMetadata(node) { if (node) { switch (node.kind) { 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) { typeNode = typeNode.type; } if (typeNode.kind === 131) { continue; } if (!strictNullChecks && (typeNode.kind === 95 || typeNode.kind === 140)) { continue; } var individualEntityName = getEntityNameForDecoratorMetadata(typeNode); if (!individualEntityName) { return undefined; } if (commonEntityName) { if (!ts.isIdentifier(commonEntityName) || !ts.isIdentifier(individualEntityName) || commonEntityName.escapedText !== individualEntityName.escapedText) { return undefined; } } else { commonEntityName = individualEntityName; } } return commonEntityName; case 173: return getEntityNameForDecoratorMetadata(node.type); case 162: return node.typeName; } } } function getParameterTypeNodeForDecoratorCheck(node) { var typeNode = ts.getEffectiveTypeAnnotationNode(node); return ts.isRestParameter(node) ? ts.getRestParameterElementType(typeNode) : typeNode; } function checkDecorators(node) { if (!node.decorators) { return; } if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) { return; } if (!compilerOptions.experimentalDecorators) { 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); if (node.kind === 149) { checkExternalEmitHelpers(firstDecorator, 32); } if (compilerOptions.emitDecoratorMetadata) { checkExternalEmitHelpers(firstDecorator, 16); switch (node.kind) { case 235: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); } } break; 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: markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node)); break; case 149: markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node)); var containingSignature = node.parent; for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) { var parameter = _e[_d]; markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); } break; } } ts.forEach(node.decorators, checkDecorator); } function checkFunctionDeclaration(node) { if (produceDiagnostics) { checkFunctionOrMethodDeclaration(node); checkGrammarForGenerator(node); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); } } function checkJSDocTypeAliasTag(node) { if (!node.typeExpression) { 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) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0); } checkSourceElement(node.typeExpression); } function checkJSDocTypeTag(node) { checkSourceElement(node.typeExpression); } function checkJSDocParameterTag(node) { checkSourceElement(node.typeExpression); if (!ts.getParameterSymbolFromJSDoc(node)) { var decl = ts.getHostSignatureFromJSDoc(node); 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 ? 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 ? node.name.right : node.name)); } } } } function checkJSDocAugmentsTag(node) { var classLike = ts.getJSDocHost(node); if (!ts.isClassDeclaration(classLike) && !ts.isClassExpression(classLike)) { error(classLike, ts.Diagnostics.JSDoc_0_is_not_attached_to_a_class, ts.idText(node.tagName)); return; } var augmentsTags = ts.getJSDocTags(classLike).filter(ts.isJSDocAugmentsTag); ts.Debug.assert(augmentsTags.length > 0); if (augmentsTags.length > 1) { error(augmentsTags[1], ts.Diagnostics.Class_declarations_cannot_have_more_than_one_augments_or_extends_tag); } var name = getIdentifierFromEntityNameExpression(node.class.expression); var extend = ts.getClassExtendsHeritageClauseElement(classLike); if (extend) { var className = getIdentifierFromEntityNameExpression(extend.expression); if (className && name.escapedText !== className.escapedText) { error(name, ts.Diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause, ts.idText(node.tagName), ts.idText(name), ts.idText(className)); } } } function getIdentifierFromEntityNameExpression(node) { switch (node.kind) { case 71: return node; case 185: return node.name; default: return undefined; } } function checkFunctionOrMethodDeclaration(node) { checkDecorators(node); checkSignatureDeclaration(node); var functionFlags = ts.getFunctionFlags(node); if (node.name && node.name.kind === 147) { checkComputedPropertyName(node.name); } if (!hasNonBindableDynamicName(node)) { var symbol = getSymbolOfNode(node); var localSymbol = node.localSymbol || symbol; var firstDeclaration = ts.find(localSymbol.declarations, function (declaration) { return declaration.kind === node.kind && !(declaration.flags & 65536); }); if (node === firstDeclaration) { checkFunctionOrConstructorSymbol(localSymbol); } if (symbol.parent) { if (ts.getDeclarationOfKind(symbol, node.kind) === node) { checkFunctionOrConstructorSymbol(symbol); } } } var body = node.kind === 153 ? undefined : node.body; checkSourceElement(body); var returnTypeNode = ts.getEffectiveReturnTypeNode(node); if ((functionFlags & 1) === 0) { var returnOrPromisedType = returnTypeNode && (functionFlags & 2 ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(returnTypeNode)); checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); } if (produceDiagnostics && !returnTypeNode) { if (noImplicitAny && ts.nodeIsMissing(body) && !isPrivateWithinAmbient(node)) { reportImplicitAnyError(node, anyType); } if (functionFlags & 1 && ts.nodeIsPresent(body)) { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } } function registerForUnusedIdentifiersCheck(node) { if (produceDiagnostics) { var sourceFile = ts.getSourceFileOfNode(node); var potentiallyUnusedIdentifiers = allPotentiallyUnusedIdentifiers.get(sourceFile.path); if (!potentiallyUnusedIdentifiers) { potentiallyUnusedIdentifiers = []; allPotentiallyUnusedIdentifiers.set(sourceFile.path, potentiallyUnusedIdentifiers); } potentiallyUnusedIdentifiers.push(node); } } function checkUnusedIdentifiers(potentiallyUnusedIdentifiers, addDiagnostic) { for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) { var node = potentiallyUnusedIdentifiers_1[_i]; switch (node.kind) { case 235: case 205: checkUnusedClassMembers(node, addDiagnostic); checkUnusedTypeParameters(node, addDiagnostic); break; case 236: checkUnusedTypeParameters(node, addDiagnostic); break; case 274: case 239: case 213: case 241: case 220: case 221: case 222: checkUnusedLocalsAndParameters(node, addDiagnostic); break; 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: case 158: case 159: case 163: case 164: case 237: checkUnusedTypeParameters(node, addDiagnostic); break; default: ts.Debug.assertNever(node, "Node should not have been registered for unused identifiers check"); } } } 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, 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; } function checkUnusedClassMembers(node, addDiagnostic) { if (!(node.flags & 4194304)) { for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; switch (member.kind) { 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)) { addDiagnostic(0, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol))); } break; 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)) { 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: case 212: break; default: ts.Debug.fail(); } } } } function checkUnusedTypeParameters(node, addDiagnostic) { var typeParameters = ts.getEffectiveTypeParameterDeclarations(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) && !isIdentifierThatStartsWithUnderScore(typeParameter.name)) { addDiagnostic(1, ts.createDiagnosticForNode(typeParameter.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(typeParameter.symbol))); } } } } function addToGroup(map, key, value, getKey) { var keyString = String(getKey(key)); var group = map.get(keyString); if (group) { group[1].push(value); } else { map.set(keyString, [key, [value]]); } } function tryGetRootParameterDeclaration(node) { return ts.tryCast(ts.getRootDeclaration(node), ts.isParameter); } function checkUnusedLocalsAndParameters(nodeWithLocals, addDiagnostic) { if (nodeWithLocals.flags & 4194304) return; var unusedImports = ts.createMap(); var unusedDestructures = ts.createMap(); var unusedVariables = ts.createMap(); nodeWithLocals.locals.forEach(function (local) { 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++) { var declaration = _a[_i]; if (ts.isAmbientModule(declaration) || (ts.isVariableDeclaration(declaration) && ts.isForInOrOfStatement(declaration.parent.parent) || isImportedDeclaration(declaration)) && isIdentifierThatStartsWithUnderScore(declaration.name)) { continue; } if (isImportedDeclaration(declaration)) { addToGroup(unusedImports, importClauseFromImported(declaration), declaration, getNodeId); } else if (ts.isBindingElement(declaration) && ts.isObjectBindingPattern(declaration.parent)) { var lastElement = ts.last(declaration.parent.elements); if (declaration === lastElement || !ts.last(declaration.parent.elements).dotDotDotToken) { addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId); } } else if (ts.isVariableDeclaration(declaration)) { addToGroup(unusedVariables, declaration.parent, declaration, getNodeId); } else { var parameter = local.valueDeclaration && tryGetRootParameterDeclaration(local.valueDeclaration); if (parameter) { var name = ts.getNameOfDeclaration(local.valueDeclaration); if (!ts.isParameterPropertyDeclaration(parameter) && !ts.parameterIsThisKeyword(parameter) && !parameterNameStartsWithUnderscore(name)) { addDiagnostic(1, ts.createDiagnosticForNode(name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(local))); } } else { errorUnusedLocal(declaration, ts.symbolName(local), addDiagnostic); } } } }); unusedImports.forEach(function (_a) { var importClause = _a[0], unuseds = _a[1]; var importDecl = importClause.parent; var nDeclarations = (importClause.name ? 1 : 0) + (importClause.namedBindings ? (importClause.namedBindings.kind === 246 ? 1 : importClause.namedBindings.elements.length) : 0); if (nDeclarations === unuseds.length) { 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)); } else { for (var _i = 0, unuseds_1 = unuseds; _i < unuseds_1.length; _i++) { var unused = unuseds_1[_i]; errorUnusedLocal(unused, ts.idText(unused.name), addDiagnostic); } } }); unusedDestructures.forEach(function (_a) { var bindingPattern = _a[0], bindingElements = _a[1]; var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 : 0; if (bindingPattern.elements.length === bindingElements.length) { if (bindingElements.length === 1 && bindingPattern.parent.kind === 232 && bindingPattern.parent.parent.kind === 233) { addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId); } else { addDiagnostic(kind, bindingElements.length === 1 ? ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(ts.first(bindingElements).name, ts.isIdentifier))) : ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics.All_destructured_elements_are_unused)); } } else { for (var _i = 0, bindingElements_1 = bindingElements; _i < bindingElements_1.length; _i++) { var e = bindingElements_1[_i]; addDiagnostic(kind, ts.createDiagnosticForNode(e, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(ts.cast(e.name, ts.isIdentifier)))); } } }); unusedVariables.forEach(function (_a) { var declarationList = _a[0], declarations = _a[1]; if (declarationList.declarations.length === declarations.length) { 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 ? 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, 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: return ts.idText(name); 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 || node.kind === 248 || node.kind === 246; } function importClauseFromImported(decl) { return decl.kind === 245 ? decl : decl.kind === 246 ? decl.parent : decl.parent.parent; } function checkBlock(node) { if (node.kind === 213) { checkGrammarStatementInAmbientContext(node); } if (ts.isFunctionOrModuleBlock(node)) { var saveFlowAnalysisDisabled = flowAnalysisDisabled; ts.forEach(node.statements, checkSourceElement); flowAnalysisDisabled = saveFlowAnalysisDisabled; } else { ts.forEach(node.statements, checkSourceElement); } if (node.locals) { registerForUnusedIdentifiersCheck(node); } } function checkCollisionWithArgumentsInGeneratedCode(node) { if (languageVersion >= 2 || compilerOptions.noEmit || !ts.hasRestParameter(node) || node.flags & 4194304 || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { if (p.name && !ts.isBindingPattern(p.name) && p.name.escapedText === argumentsSymbol.escapedName) { error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); } }); } function needCollisionCheckForIdentifier(node, identifier, name) { if (!(identifier && identifier.escapedText === name)) { return false; } 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) { return false; } var root = ts.getRootDeclaration(node); if (root.kind === 149 && ts.nodeIsMissing(root.parent.body)) { return false; } return true; } function checkIfThisIsCapturedInEnclosingScope(node) { ts.findAncestor(node, function (current) { 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); } else { error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference); } return true; } return false; }); } function checkIfNewTargetIsCapturedInEnclosingScope(node) { ts.findAncestor(node, function (current) { 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); } else { error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference); } return true; } return false; }); } function checkCollisionWithRequireExportsInGeneratedCode(node, name) { if (moduleKind >= ts.ModuleKind.ES2015 || compilerOptions.noEmit) { return; } if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); 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 || compilerOptions.noEmit || !needCollisionCheckForIdentifier(node, name, "Promise")) { return; } if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); 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) { if ((ts.getCombinedNodeFlags(node) & 3) !== 0 || ts.isParameterDeclaration(node)) { return; } if (node.kind === 232 && !node.initializer) { return; } var symbol = getSymbolOfNode(node); if (symbol.flags & 1) { if (!ts.isIdentifier(node.name)) return ts.Debug.fail(); var localDeclarationSymbol = resolveName(node, node.name.escapedText, 3, undefined, undefined, false); if (localDeclarationSymbol && localDeclarationSymbol !== symbol && 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; var namesShareScope = container && (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); } } } } } function checkParameterInitializer(node) { 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)) { return; } if (n.kind === 185) { return visit(n.expression); } else if (n.kind === 71) { var symbol = resolveName(n, n.escapedText, 67216319 | 2097152, undefined, undefined, false); if (!symbol || symbol === unknownSymbol || !symbol.valueDeclaration) { return; } if (symbol.valueDeclaration === node) { error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); return; } var enclosingContainer = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); if (enclosingContainer === func) { if (symbol.valueDeclaration.kind === 149 || symbol.valueDeclaration.kind === 182) { if (symbol.valueDeclaration.pos < node.pos) { return; } if (ts.findAncestor(n, function (current) { if (current === node.initializer) { return "quit"; } return ts.isFunctionLike(current.parent) || (current.parent.kind === 152 && !(ts.hasModifier(current.parent, 32)) && ts.isClassLike(current.parent.parent)); })) { return; } } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } } else { return ts.forEachChild(n, visit); } } } function convertAutoToAny(type) { return type === autoType ? anyType : type === autoArrayType ? anyArrayType : type; } function checkVariableLikeDeclaration(node) { checkDecorators(node); if (!ts.isBindingElement(node)) { checkSourceElement(node.type); } if (!node.name) { return; } if (node.name.kind === 147) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } if (node.kind === 182) { if (node.parent.kind === 180 && languageVersion < 6) { checkExternalEmitHelpers(node, 4); } if (node.propertyName && node.propertyName.kind === 147) { checkComputedPropertyName(node.propertyName); } 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)); markPropertyAsReferenced(property, undefined, false); if (parent.initializer && property) { checkPropertyAccessibility(parent, parent.initializer, parentType, property); } } } if (ts.isBindingPattern(node.name)) { if (node.name.kind === 181 && languageVersion < 2 && compilerOptions.downlevelIteration) { checkExternalEmitHelpers(node, 512); } ts.forEach(node.name.elements, checkSourceElement); } 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; } if (ts.isBindingPattern(node.name)) { 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, undefined); } checkParameterInitializer(node); } return; } var symbol = getSymbolOfNode(node); var type = convertAutoToAny(getTypeOfSymbol(symbol)); if (node === symbol.valueDeclaration) { var initializer = ts.getEffectiveInitializer(node); if (initializer) { var isJSObjectLiteralInitializer = ts.isInJavaScriptFile(node) && ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) && ts.hasEntries(symbol.exports); if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 221) { checkTypeAssignableTo(checkExpressionCached(initializer), type, node, undefined); checkParameterInitializer(node); } } } else { var declarationType = convertAutoToAny(getWidenedTypeForVariableLikeDeclaration(node)); if (type !== errorType && declarationType !== errorType && !isTypeIdenticalTo(type, declarationType) && !(symbol.flags & 67108864)) { errorNextVariableOrPropertyDeclarationMustHaveSameType(type, node, declarationType); } if (node.initializer) { 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 && node.kind !== 151) { checkExportsOnMergedDeclarations(node); if (node.kind === 232 || node.kind === 182) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); } } function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstType, nextDeclaration, nextType) { var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration); 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 && right.kind === 232) || (left.kind === 232 && right.kind === 149)) { return true; } if (ts.hasQuestionToken(left) !== ts.hasQuestionToken(right)) { return false; } var interestingFlags = 8 | 16 | 256 | 128 | 64 | 32; return ts.getSelectedModifierFlags(left, interestingFlags) === ts.getSelectedModifierFlags(right, interestingFlags); } function checkVariableDeclaration(node) { checkGrammarVariableDeclaration(node); return checkVariableLikeDeclaration(node); } function checkBindingElement(node) { checkGrammarBindingElement(node); return checkVariableLikeDeclaration(node); } function checkVariableStatement(node) { if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarVariableDeclarationList(node.declarationList)) checkGrammarForDisallowedLetOrConstStatement(node); ts.forEach(node.declarationList.declarations, checkSourceElement); } function checkExpressionStatement(node) { checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); } function checkIfStatement(node) { checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); 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) { checkGrammarStatementInAmbientContext(node); checkSourceElement(node.statement); checkExpression(node.expression); } function checkWhileStatement(node) { checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.statement); } function checkForStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { if (node.initializer && node.initializer.kind === 233) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { if (node.initializer.kind === 233) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { checkExpression(node.initializer); } } if (node.condition) checkExpression(node.condition); if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); if (node.locals) { registerForUnusedIdentifiersCheck(node); } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); if (node.awaitModifier) { var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node)); if ((functionFlags & (4 | 2)) === 2 && languageVersion < 6) { checkExternalEmitHelpers(node, 16384); } } else if (compilerOptions.downlevelIteration && languageVersion < 2) { checkExternalEmitHelpers(node, 256); } if (node.initializer.kind === 233) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression, node.awaitModifier); 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); if (iteratedType) { checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined); } } } checkSourceElement(node.statement); if (node.locals) { registerForUnusedIdentifiersCheck(node); } } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); var rightType = checkNonNullExpression(node.expression); 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); } checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var leftType = checkExpression(varExpr); 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 { checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access); } } 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); if (node.locals) { registerForUnusedIdentifiersCheck(node); } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; if (variableDeclarationList.declarations.length >= 1) { var decl = variableDeclarationList.declarations[0]; checkVariableDeclaration(decl); } } function checkRightHandSideOfForOf(rhsExpression, awaitModifier) { var expressionType = checkNonNullExpression(rhsExpression); return checkIteratedTypeOrElementType(expressionType, rhsExpression, true, awaitModifier !== undefined); } function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables) { if (isTypeAny(inputType)) { return inputType; } return getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, true) || anyType; } function getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, checkAssignability) { if (inputType === neverType) { reportTypeNotIterableError(errorNode, inputType, allowAsyncIterables); return undefined; } var uplevelIteration = languageVersion >= 2; var downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration; if (uplevelIteration || downlevelIteration || allowAsyncIterables) { var iteratedType = getIteratedTypeOfIterable(inputType, uplevelIteration ? errorNode : undefined, allowAsyncIterables, true, checkAssignability); if (iteratedType || uplevelIteration) { return iteratedType; } } var arrayType = inputType; var reportedError = false; var hasStringConstituent = false; if (allowStringInput) { if (arrayType.flags & 262144) { var arrayTypes = inputType.types; var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 68); }); if (filteredTypes !== arrayTypes) { arrayType = getUnionType(filteredTypes, 2); } } else if (arrayType.flags & 68) { arrayType = neverType; } hasStringConstituent = arrayType !== inputType; if (hasStringConstituent) { 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; } } if (arrayType.flags & 32768) { return stringType; } } } if (!isArrayLikeType(arrayType)) { if (errorNode && !reportedError) { 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 : isIterable ? ts.Diagnostics.Type_0_is_not_an_array_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators : ts.Diagnostics.Type_0_is_not_an_array_type : downlevelIteration ? ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator : isIterable ? ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators : ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type; error(errorNode, diagnostic, typeToString(arrayType)); } return hasStringConstituent ? stringType : undefined; } var arrayElementType = getIndexTypeOfType(arrayType, 1); if (hasStringConstituent && arrayElementType) { if (arrayElementType.flags & 68) { return stringType; } return getUnionType([arrayElementType, stringType], 2); } return arrayElementType; } function getIteratedTypeOfIterable(type, errorNode, allowAsyncIterables, allowSyncIterables, checkAssignability) { if (isTypeAny(type)) { return undefined; } return mapType(type, getIteratedType); function getIteratedType(type) { var typeAsIterable = type; if (allowAsyncIterables) { if (typeAsIterable.iteratedTypeOfAsyncIterable) { return typeAsIterable.iteratedTypeOfAsyncIterable; } if (isReferenceToType(type, getGlobalAsyncIterableType(false)) || isReferenceToType(type, getGlobalAsyncIterableIteratorType(false))) { return typeAsIterable.iteratedTypeOfAsyncIterable = type.typeArguments[0]; } } if (allowSyncIterables) { if (typeAsIterable.iteratedTypeOfIterable) { return typeAsIterable.iteratedTypeOfIterable; } if (isReferenceToType(type, getGlobalIterableType(false)) || isReferenceToType(type, getGlobalIterableIteratorType(false))) { return typeAsIterable.iteratedTypeOfIterable = type.typeArguments[0]; } } var asyncMethodType = allowAsyncIterables && getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("asyncIterator")); var methodType = asyncMethodType || (allowSyncIterables ? getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("iterator")) : undefined); if (isTypeAny(methodType)) { return undefined; } var signatures = methodType ? getSignaturesOfType(methodType, 0) : undefined; if (!ts.some(signatures)) { if (errorNode) { reportTypeNotIterableError(errorNode, type, allowAsyncIterables); errorNode = undefined; } return undefined; } var returnType = getUnionType(ts.map(signatures, getReturnTypeOfSignature), 2); var iteratedType = getIteratedTypeOfIterator(returnType, errorNode, !!asyncMethodType); if (checkAssignability && errorNode && iteratedType) { checkTypeAssignableTo(type, asyncMethodType ? createAsyncIterableType(iteratedType) : createIterableType(iteratedType), errorNode); } return asyncMethodType ? typeAsIterable.iteratedTypeOfAsyncIterable = iteratedType : typeAsIterable.iteratedTypeOfIterable = iteratedType; } } function reportTypeNotIterableError(errorNode, type, allowAsyncIterables) { error(errorNode, allowAsyncIterables ? 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)); } function getIteratedTypeOfIterator(type, errorNode, isAsyncIterator) { if (isTypeAny(type)) { return undefined; } var typeAsIterator = type; if (isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator) { return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator; } var getIteratorType = isAsyncIterator ? getGlobalAsyncIteratorType : getGlobalIteratorType; if (isReferenceToType(type, getIteratorType(false))) { return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator = type.typeArguments[0] : typeAsIterator.iteratedTypeOfIterator = type.typeArguments[0]; } var nextMethod = getTypeOfPropertyOfType(type, "next"); if (isTypeAny(nextMethod)) { return undefined; } var nextMethodSignatures = nextMethod ? getSignaturesOfType(nextMethod, 0) : ts.emptyArray; if (nextMethodSignatures.length === 0) { if (errorNode) { error(errorNode, isAsyncIterator ? ts.Diagnostics.An_async_iterator_must_have_a_next_method : ts.Diagnostics.An_iterator_must_have_a_next_method); } return undefined; } var nextResult = getUnionType(ts.map(nextMethodSignatures, getReturnTypeOfSignature), 2); if (isTypeAny(nextResult)) { return undefined; } 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)) { return undefined; } } var nextValue = nextResult && getTypeOfPropertyOfType(nextResult, "value"); if (!nextValue) { if (errorNode) { error(errorNode, isAsyncIterator ? ts.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property : ts.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property); } return undefined; } return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator = nextValue : typeAsIterator.iteratedTypeOfIterator = nextValue; } function getIteratedTypeOfGenerator(returnType, isAsyncGenerator) { if (isTypeAny(returnType)) { return undefined; } return getIteratedTypeOfIterable(returnType, undefined, isAsyncGenerator, !isAsyncGenerator, false) || getIteratedTypeOfIterator(returnType, undefined, isAsyncGenerator); } function checkBreakOrContinueStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) checkGrammarBreakOrContinueStatement(node); } function isGetAccessorWithAnnotatedSetAccessor(node) { return node.kind === 156 && ts.getEffectiveSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 157)) !== undefined; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = (ts.getFunctionFlags(func) & 3) === 2 ? getPromisedTypeOfPromise(returnType) : returnType; return !!unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 4096 | 3); } function checkReturnStatement(node) { if (checkGrammarStatementInAmbientContext(node)) { return; } var func = ts.getContainingFunction(node); if (!func) { grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); return; } var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); var functionFlags = ts.getFunctionFlags(func); var isGenerator = functionFlags & 1; if (strictNullChecks || node.expression || returnType.flags & 32768) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (isGenerator) { return; } else if (func.kind === 157) { if (node.expression) { error(node, ts.Diagnostics.Setters_cannot_return_a_value); } } 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) { 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) { checkTypeAssignableTo(awaitedType, promisedType, node); } } else { checkTypeAssignableTo(exprType, returnType, node); } } } 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) { if (!checkGrammarStatementInAmbientContext(node)) { if (node.flags & 16384) { grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block); } } checkExpression(node.expression); var sourceFile = ts.getSourceFileOfNode(node); if (!hasParseDiagnostics(sourceFile)) { var start = ts.getSpanOfTokenAtPosition(sourceFile, node.pos).start; var end = node.statement.pos; grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any); } } function checkSwitchStatement(node) { checkGrammarStatementInAmbientContext(node); var firstDefaultClause; var hasDuplicateDefaultClause = false; var expressionType = checkExpression(node.expression); var expressionIsLiteral = isLiteralType(expressionType); ts.forEach(node.caseBlock.clauses, function (clause) { if (clause.kind === 267 && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } else { var sourceFile = ts.getSourceFileOfNode(node); var start = ts.skipTrivia(sourceFile.text, clause.pos); var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); hasDuplicateDefaultClause = true; } } if (produceDiagnostics && clause.kind === 266) { var caseType = checkExpression(clause.expression); var caseIsLiteral = isLiteralType(caseType); var comparedExpressionType = expressionType; if (!caseIsLiteral || !expressionIsLiteral) { caseType = caseIsLiteral ? getBaseTypeOfLiteralType(caseType) : caseType; comparedExpressionType = getBaseTypeOfLiteralType(expressionType); } if (!isTypeEqualityComparableTo(comparedExpressionType, caseType)) { checkTypeComparableTo(caseType, comparedExpressionType, clause.expression, undefined); } } ts.forEach(clause.statements, checkSourceElement); }); if (node.caseBlock.locals) { registerForUnusedIdentifiersCheck(node.caseBlock); } } function checkLabeledStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { ts.findAncestor(node.parent, function (current) { if (ts.isFunctionLike(current)) { return "quit"; } 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; }); } checkSourceElement(node.statement); } function checkThrowStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { if (node.expression === undefined) { grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here); } } if (node.expression) { checkExpression(node.expression); } } function checkTryStatement(node) { checkGrammarStatementInAmbientContext(node); checkBlock(node.tryBlock); var catchClause = node.catchClause; if (catchClause) { if (catchClause.variableDeclaration) { if (catchClause.variableDeclaration.type) { grammarErrorOnFirstToken(catchClause.variableDeclaration.type, ts.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation); } else if (catchClause.variableDeclaration.initializer) { grammarErrorOnFirstToken(catchClause.variableDeclaration.initializer, ts.Diagnostics.Catch_clause_variable_cannot_have_an_initializer); } else { var blockLocals_1 = catchClause.block.locals; if (blockLocals_1) { ts.forEachKey(catchClause.locals, function (caughtName) { var blockLocal = blockLocals_1.get(caughtName); if (blockLocal && (blockLocal.flags & 2) !== 0) { grammarErrorOnNode(blockLocal.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, caughtName); } }); } } } checkBlock(catchClause.block); } if (node.finallyBlock) { checkBlock(node.finallyBlock); } } function checkIndexConstraints(type) { 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); checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1); }); var classDeclaration = type.symbol.valueDeclaration; if (ts.getObjectFlags(type) & 1 && ts.isClassLike(classDeclaration)) { for (var _i = 0, _a = classDeclaration.members; _i < _a.length; _i++) { var member = _a[_i]; if (!ts.hasModifier(member, 32) && hasNonBindableDynamicName(member)) { var symbol = getSymbolOfNode(member); var propType = getTypeOfSymbol(symbol); checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0); checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1); } } } } var errorNode; if (stringIndexType && numberIndexType) { errorNode = declaredNumberIndexer || declaredStringIndexer; 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)) { 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) { if (!indexType || ts.isKnownSymbol(prop)) { return; } var propDeclaration = prop.valueDeclaration; if (indexKind === 1 && !(propDeclaration ? isNumericName(ts.getNameOfDeclaration(propDeclaration)) : isNumericLiteralName(prop.escapedName))) { return; } var errorNode; if (propDeclaration && (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) { 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 ? 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)); } } } function checkTypeNameIsReserved(name, message) { switch (name.escapedText) { case "any": case "unknown": case "number": case "boolean": case "string": case "symbol": case "void": case "object": error(name, message, name.escapedText); } } function checkClassNameCollisionWithObject(name) { 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]); } } function checkTypeParameters(typeParameterDeclarations) { if (typeParameterDeclarations) { var seenDefault = false; for (var i = 0; i < typeParameterDeclarations.length; i++) { var node = typeParameterDeclarations[i]; checkTypeParameter(node); if (produceDiagnostics) { if (node.default) { seenDefault = true; } else if (seenDefault) { error(node, ts.Diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters); } for (var j = 0; j < i; j++) { if (typeParameterDeclarations[j].symbol === node.symbol) { error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name)); } } } } } } function checkTypeParameterListsIdentical(symbol) { if (symbol.declarations.length === 1) { return; } var links = getSymbolLinks(symbol); if (!links.typeParametersChecked) { links.typeParametersChecked = true; var declarations = getClassOrInterfaceDeclarationsOfSymbol(symbol); if (declarations.length <= 1) { return; } var type = getDeclaredTypeOfSymbol(symbol); if (!areTypeParametersIdentical(declarations, type.localTypeParameters)) { var name = symbolToString(symbol); for (var _i = 0, declarations_6 = declarations; _i < declarations_6.length; _i++) { var declaration = declarations_6[_i]; error(declaration.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name); } } } } function areTypeParametersIdentical(declarations, targetParameters) { var maxTypeArgumentCount = ts.length(targetParameters); var minTypeArgumentCount = getMinTypeArgumentCount(targetParameters); for (var _i = 0, declarations_7 = declarations; _i < declarations_7.length; _i++) { var declaration = declarations_7[_i]; var sourceParameters = ts.getEffectiveTypeParameterDeclarations(declaration); var numTypeParameters = sourceParameters.length; if (numTypeParameters < minTypeArgumentCount || numTypeParameters > maxTypeArgumentCount) { return false; } for (var i = 0; i < numTypeParameters; i++) { var source = sourceParameters[i]; var target = targetParameters[i]; if (source.name.escapedText !== target.symbol.escapedName) { return false; } var sourceConstraint = source.constraint && getTypeFromTypeNode(source.constraint); var targetConstraint = getConstraintFromTypeParameter(target); if (sourceConstraint) { if (!targetConstraint || !isTypeIdenticalTo(sourceConstraint, targetConstraint)) { return false; } } var sourceDefault = source.default && getTypeFromTypeNode(source.default); var targetDefault = getDefaultFromTypeParameter(target); if (sourceDefault && targetDefault && !isTypeIdenticalTo(sourceDefault, targetDefault)) { return false; } } } return true; } function checkClassExpression(node) { checkClassLikeDeclaration(node); checkNodeDeferred(node); return getTypeOfSymbol(getSymbolOfNode(node)); } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !ts.hasModifier(node, 512)) { grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassLikeDeclaration(node); checkDecorators(node); if (node.name) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); if (!(node.flags & 4194304)) { checkClassNameCollisionWithObject(node.name); } } checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node)); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); var staticType = getTypeOfSymbol(symbol); checkTypeParameterListsIdentical(symbol); checkClassForDuplicateDeclarations(node); if (!(node.flags & 4194304)) { checkClassForStaticPropertyNameConflicts(node); } var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); if (baseTypeNode) { if (languageVersion < 2) { checkExternalEmitHelpers(baseTypeNode.parent, 1); } var baseTypes = getBaseTypes(type); if (baseTypes.length && produceDiagnostics) { var baseType_1 = baseTypes[0]; var baseConstructorType = getBaseConstructorTypeOfClass(type); var staticBaseType = getApparentType(baseConstructorType); checkBaseTypeAccessibility(staticBaseType, baseTypeNode); checkSourceElement(baseTypeNode.expression); if (ts.some(baseTypeNode.typeArguments)) { ts.forEach(baseTypeNode.typeArguments, checkSourceElement); for (var _i = 0, _a = getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode); _i < _a.length; _i++) { var constructor = _a[_i]; if (!checkTypeArgumentConstraints(baseTypeNode, constructor.typeParameters)) { break; } } } var baseWithThis = getTypeWithThisArgument(baseType_1, type.thisType); 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 && !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) && !(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); } } checkKindsOfPropertyMemberOverrides(type, baseType_1); } } var implementedTypeNodes = ts.getClassImplementsHeritageClauseElements(node); if (implementedTypeNodes) { for (var _b = 0, implementedTypeNodes_1 = implementedTypeNodes; _b < implementedTypeNodes_1.length; _b++) { var typeRefNode = implementedTypeNodes_1[_b]; if (!ts.isEntityNameExpression(typeRefNode.expression)) { error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments); } checkTypeReferenceNode(typeRefNode); if (produceDiagnostics) { var t = getTypeFromTypeNode(typeRefNode); if (t !== errorType) { if (isValidBaseType(t)) { 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, undefined)) { issueMemberSpecificError(node, typeWithThis, baseWithThis, genericDiag); } } else { error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); } } } } } if (produceDiagnostics) { checkIndexConstraints(type); checkTypeForDuplicateIndexSignatures(node); checkPropertyInitialization(node); } } function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) { var issuedMemberError = false; var _loop_9 = function (member) { if (ts.hasStaticModifier(member)) { return "continue"; } var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); if (declaredProp) { var prop = getPropertyOfType(typeWithThis, declaredProp.escapedName); var baseProp = getPropertyOfType(baseWithThis, declaredProp.escapedName); if (prop && baseProp) { 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; } } } }; for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; _loop_9(member); } if (!issuedMemberError) { checkTypeAssignableTo(typeWithThis, baseWithThis, node.name || node, broadDiag); } } function checkBaseTypeAccessibility(type, node) { var signatures = getSignaturesOfType(type, 1); if (signatures.length) { var declaration = signatures[0].declaration; 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)); } } } } function getTargetSymbol(s) { return ts.getCheckFlags(s) & 1 ? s.target : s; } function getClassOrInterfaceDeclarationsOfSymbol(symbol) { return ts.filter(symbol.declarations, function (d) { return d.kind === 235 || d.kind === 236; }); } function checkKindsOfPropertyMemberOverrides(type, baseType) { 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) { continue; } 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) { if (derived === base) { var derivedClassDecl = ts.getClassLikeDeclarationOfSymbol(type.symbol); 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 { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, typeToString(type), symbolToString(baseProperty), typeToString(baseType)); } } } else { var derivedDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(derived); if (baseDeclarationFlags & 8 || derivedDeclarationFlags & 8) { continue; } if (isPrototypeProperty(base) || base.flags & 98308 && derived.flags & 98308) { continue; } var errorMessage = void 0; if (isPrototypeProperty(base)) { 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) { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; } else { errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; } error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); } } } } function checkInheritedPropertiesAreIdentical(type, typeNode) { var baseTypes = getBaseTypes(type); if (baseTypes.length < 2) { return true; } var seen = ts.createUnderscoreEscapedMap(); ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) { seen.set(p.escapedName, { prop: p, containingType: type }); }); var ok = true; for (var _i = 0, baseTypes_2 = baseTypes; _i < baseTypes_2.length; _i++) { var base = baseTypes_2[_i]; var properties = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType)); for (var _a = 0, properties_8 = properties; _a < properties_8.length; _a++) { var prop = properties_8[_a]; var existing = seen.get(prop.escapedName); if (!existing) { seen.set(prop.escapedName, { prop: prop, containingType: base }); } else { var isInheritedProperty = existing.containingType !== type; if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) { ok = false; var typeName1 = typeToString(existing.containingType); var typeName2 = typeToString(base); 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)); } } } } return ok; } function checkPropertyInitialization(node) { if (!strictNullChecks || !strictPropertyInitialization || node.flags & 4194304) { return; } var constructor = findConstructorDeclaration(node); for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; if (isInstancePropertyWithoutInitializer(member)) { var propName = member.name; if (ts.isIdentifier(propName)) { var type = getTypeOfSymbol(getSymbolOfNode(member)); 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)); } } } } } } function isInstancePropertyWithoutInitializer(node) { return node.kind === 152 && !ts.hasModifier(node, 32 | 128) && !node.exclamationToken && !node.initializer; } function isPropertyInitializedInConstructor(propName, propType, constructor) { var reference = ts.createPropertyAccess(ts.createThis(), propName); reference.flowNode = constructor.returnFlowNode; var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); return !(getFalsyFlags(flowType) & 8192); } function checkInterfaceDeclaration(node) { if (!checkGrammarDecoratorsAndModifiers(node)) checkGrammarInterfaceDeclaration(node); checkTypeParameters(node.typeParameters); if (produceDiagnostics) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(symbol); var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 236); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); if (checkInheritedPropertiesAreIdentical(type, node.name)) { for (var _i = 0, _a = getBaseTypes(type); _i < _a.length; _i++) { var baseType = _a[_i]; checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType, type.thisType), node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); } checkIndexConstraints(type); } } checkObjectTypeForDuplicateDeclarations(node); } ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) { if (!ts.isEntityNameExpression(heritageElement.expression)) { error(heritageElement.expression, ts.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments); } checkTypeReferenceNode(heritageElement); }); ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); registerForUnusedIdentifiersCheck(node); } } function checkTypeAliasDeclaration(node) { checkGrammarDecoratorsAndModifiers(node); checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0); checkTypeParameters(node.typeParameters); checkSourceElement(node.type); registerForUnusedIdentifiersCheck(node); } function computeEnumMemberValues(node) { var nodeLinks = getNodeLinks(node); 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]; var value = computeMemberValue(member, autoValue); getNodeLinks(member).enumMemberValue = value; autoValue = typeof value === "number" ? value + 1 : undefined; } } } function computeMemberValue(member, autoValue) { if (isComputedNonLiteralName(member.name)) { error(member.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums); } else { var text = ts.getTextOfPropertyName(member.name); if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) { error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name); } } if (member.initializer) { return computeConstantValue(member); } if (member.parent.flags & 4194304 && !ts.isConst(member.parent)) { return undefined; } if (autoValue !== undefined) { return autoValue; } error(member.name, ts.Diagnostics.Enum_member_must_have_initializer); return undefined; } function computeConstantValue(member) { var enumKind = getEnumKind(getSymbolOfNode(member.parent)); var isConstEnum = ts.isConst(member.parent); var initializer = member.initializer; var value = enumKind === 1 && !isLiteralEnumMember(member) ? undefined : evaluate(initializer); if (value !== undefined) { if (isConstEnum && typeof value === "number" && !isFinite(value)) { error(initializer, isNaN(value) ? ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN : ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value); } } 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) { error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression); } else { checkTypeAssignableTo(checkExpression(initializer), getDeclaredTypeOfSymbol(getSymbolOfNode(member.parent)), initializer, undefined); } return value; function evaluate(expr) { switch (expr.kind) { case 198: var value_2 = evaluate(expr.operand); if (typeof value_2 === "number") { switch (expr.operator) { case 37: return value_2; case 38: return -value_2; case 52: return ~value_2; } } break; 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: 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) { return left + right; } break; case 9: return expr.text; case 8: checkGrammarNumericLiteral(expr); return +expr.text; case 191: return evaluate(expr.expression); 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: case 185: var ex = expr; if (isConstantMemberAccess(ex)) { var type = getTypeOfExpression(ex.expression); if (type.symbol && type.symbol.flags & 384) { var name = void 0; if (ex.kind === 185) { name = ex.name.escapedText; } else { var argument = ex.argumentExpression; ts.Debug.assert(ts.isLiteralExpression(argument)); name = ts.escapeLeadingUnderscores(argument.text); } return evaluateEnumMember(expr, type.symbol, name); } } break; } return undefined; } function evaluateEnumMember(expr, enumSymbol, name) { var memberSymbol = enumSymbol.exports.get(name); if (memberSymbol) { var declaration = memberSymbol.valueDeclaration; if (declaration !== member) { if (isBlockScopedNameDeclaredBeforeUse(declaration, member)) { return getEnumMemberValue(declaration); } error(expr, ts.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums); return 0; } } return undefined; } } function isConstantMemberAccess(node) { 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; } checkGrammarDecoratorsAndModifiers(node); checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); checkExportsOnMergedDeclarations(node); computeEnumMemberValues(node); var enumIsConst = ts.isConst(node); if (compilerOptions.isolatedModules && enumIsConst && node.flags & 4194304) { error(node.name, ts.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided); } var enumSymbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind); if (node === firstDeclaration) { if (enumSymbol.declarations.length > 1) { 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); } }); } var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { if (declaration.kind !== 238) { return false; } var enumDeclaration = declaration; if (!enumDeclaration.members.length) { return false; } var firstEnumMember = enumDeclaration.members[0]; if (!firstEnumMember.initializer) { if (seenEnumMissingInitialInitializer_1) { error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element); } else { seenEnumMissingInitialInitializer_1 = true; } } }); } } function getFirstNonAmbientClassOrFunctionDeclaration(symbol) { 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 || (declaration.kind === 234 && ts.nodeIsPresent(declaration.body))) && !(declaration.flags & 4194304)) { return declaration; } } return undefined; } function inSameLexicalScope(node1, node2) { var container1 = ts.getEnclosingBlockScopeContainer(node1); var container2 = ts.getEnclosingBlockScopeContainer(node2); if (isGlobalSourceFile(container1)) { return isGlobalSourceFile(container2); } else if (isGlobalSourceFile(container2)) { return false; } else { return container1 === container2; } } function checkModuleDeclaration(node) { if (produceDiagnostics) { var isGlobalAugmentation = ts.isGlobalScopeAugmentation(node); 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); } var isAmbientExternalModule = ts.isAmbientModule(node); var contextErrorMessage = isAmbientExternalModule ? 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)) { return; } if (!checkGrammarDecoratorsAndModifiers(node)) { if (!inAmbientContext && node.name.kind === 9) { grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); } } if (ts.isIdentifier(node.name)) { checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); } checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); if (symbol.flags & 512 && symbol.declarations.length > 1 && !inAmbientContext && isInstantiatedModule(node, !!compilerOptions.preserveConstEnums || !!compilerOptions.isolatedModules)) { var firstNonAmbientClassOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); if (firstNonAmbientClassOrFunc) { if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(firstNonAmbientClassOrFunc)) { error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); } else if (node.pos < firstNonAmbientClassOrFunc.pos) { error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); } } var mergedClass = ts.getDeclarationOfKind(symbol, 235); if (mergedClass && inSameLexicalScope(node, mergedClass)) { getNodeLinks(node).flags |= 32768; } } if (isAmbientExternalModule) { if (ts.isExternalModuleAugmentation(node)) { 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]; checkModuleAugmentationElement(statement, isGlobalAugmentation); } } } else if (isGlobalSourceFile(node.parent)) { if (isGlobalAugmentation) { error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations); } else if (ts.isExternalModuleNameRelative(ts.getTextOfIdentifierOrLiteral(node.name))) { error(node.name, ts.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name); } } else { if (isGlobalAugmentation) { error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations); } else { error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces); } } } } if (node.body) { checkSourceElement(node.body); if (!ts.isGlobalScopeAugmentation(node)) { registerForUnusedIdentifiersCheck(node); } } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { case 214: for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; case 249: case 250: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; 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: 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]; checkModuleAugmentationElement(el, isGlobalAugmentation); } break; } case 235: case 238: case 234: case 236: case 239: case 237: if (isGlobalAugmentation) { return; } var symbol = getSymbolOfNode(node); if (symbol) { var reportError = !(symbol.flags & 33554432); if (!reportError) { reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } break; } } function getFirstIdentifier(node) { switch (node.kind) { case 71: return node; case 146: do { node = node.left; } while (node.kind !== 71); return node; case 185: do { node = node.expression; } while (node.kind !== 71); return node; } } function checkExternalImportOrExportDeclaration(node) { var moduleName = ts.getExternalModuleName(node); if (!moduleName || ts.nodeIsMissing(moduleName)) { return false; } if (!ts.isStringLiteral(moduleName)) { error(moduleName, ts.Diagnostics.String_literal_expected); return false; } 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)) { if (!isTopLevelInExternalModuleAugmentation(node)) { error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name); return false; } } return true; } function checkAliasSymbol(node) { var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target !== unknownSymbol) { 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 ? 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)); } if (compilerOptions.isolatedModules && node.kind === 252 && !(target.flags & 67216319) && !(node.flags & 4194304)) { error(node, ts.Diagnostics.Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided); } } } function checkImportBinding(node) { checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); checkAliasSymbol(node); } function checkImportDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { return; } if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers); } if (checkExternalImportOrExportDeclaration(node)) { var importClause = node.importClause; if (importClause) { if (importClause.name) { checkImportBinding(importClause); } if (importClause.namedBindings) { if (importClause.namedBindings.kind === 246) { checkImportBinding(importClause.namedBindings); } else { var moduleExisted = resolveExternalModuleName(node, node.moduleSpecifier); if (moduleExisted) { ts.forEach(importClause.namedBindings.elements, checkImportBinding); } } } } } } function checkImportEqualsDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { return; } checkGrammarDecoratorsAndModifiers(node); if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) { checkImportBinding(node); if (ts.hasModifier(node, 1)) { markExportAsReferenced(node); } if (node.moduleReference.kind !== 254) { var target = resolveAlias(getSymbolOfNode(node)); if (target !== unknownSymbol) { if (target.flags & 67216319) { var moduleName = getFirstIdentifier(node.moduleReference); 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) { checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); } } } else { 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); } } } } function checkExportDeclaration(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) { return; } if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers); } if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) { if (node.exportClause) { ts.forEach(node.exportClause.elements, checkExportSpecifier); 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 { 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); } } } } function checkGrammarModuleElementContext(node, errorMessage) { var isInAppropriateContext = node.parent.kind === 274 || node.parent.kind === 240 || node.parent.kind === 239; if (!isInAppropriateContext) { grammarErrorOnFirstToken(node, errorMessage); } return !isInAppropriateContext; } function checkExportSpecifier(node) { checkAliasSymbol(node); if (compilerOptions.declaration) { collectLinkedAliases(node.propertyName || node.name, true); } if (!node.parent.parent.moduleSpecifier) { var exportedName = node.propertyName || node.name; 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)); } else { markExportAsReferenced(node); } } } function checkExportAssignment(node) { if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) { return; } 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); } else { error(node, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module); } return; } if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasModifiers(node)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } if (node.expression.kind === 71) { markExportAsReferenced(node); if (compilerOptions.declaration) { collectLinkedAliases(node.expression, true); } } else { checkExpressionCached(node.expression); } checkExternalModuleExports(container); 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)) { if (moduleKind >= ts.ModuleKind.ES2015) { 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) { grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system); } } } function hasExportedMembers(moduleSymbol) { return ts.forEachEntry(moduleSymbol.exports, function (_, id) { return id !== "export="; }); } function checkExternalModuleExports(node) { var moduleSymbol = getSymbolOfNode(node); var links = getSymbolLinks(moduleSymbol); if (!links.exportsChecked) { var exportEqualsSymbol = moduleSymbol.exports.get("export="); if (exportEqualsSymbol && hasExportedMembers(moduleSymbol)) { var declaration = getDeclarationOfAliasSymbol(exportEqualsSymbol) || exportEqualsSymbol.valueDeclaration; if (!isTopLevelInExternalModuleAugmentation(declaration) && !ts.isInJavaScriptFile(declaration)) { error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); } } var exports_2 = getExportsOfModule(moduleSymbol); if (exports_2) { exports_2.forEach(function (_a, id) { var declarations = _a.declarations, flags = _a.flags; if (id === "__export") { return; } if (flags & (1920 | 64 | 384)) { return; } var exportedDeclarationsCount = ts.countWhere(declarations, isNotOverloadAndNotAccessor); if (flags & 524288 && exportedDeclarationsCount <= 2) { return; } if (exportedDeclarationsCount > 1) { for (var _i = 0, declarations_9 = declarations; _i < declarations_9.length; _i++) { var declaration = declarations_9[_i]; if (isNotOverload(declaration)) { diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Cannot_redeclare_exported_variable_0, ts.unescapeLeadingUnderscores(id))); } } } }); } links.exportsChecked = true; } } function isNotAccessor(declaration) { return !ts.isAccessor(declaration); } function isNotOverload(declaration) { return (declaration.kind !== 234 && declaration.kind !== 154) || !!declaration.body; } function checkSourceElement(node) { if (!node) { return; } if (ts.isInJavaScriptFile(node)) { ts.forEach(node.jsDoc, function (_a) { var tags = _a.tags; return ts.forEach(tags, checkSourceElement); }); } var kind = node.kind; if (cancellationToken) { switch (kind) { case 239: case 235: case 236: case 234: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { case 148: return checkTypeParameter(node); case 149: return checkParameter(node); case 152: case 151: return checkPropertyDeclaration(node); case 163: case 164: case 158: case 159: case 160: return checkSignatureDeclaration(node); case 154: case 153: return checkMethodDeclaration(node); case 155: return checkConstructorDeclaration(node); case 156: case 157: return checkAccessorDeclaration(node); case 162: return checkTypeReferenceNode(node); case 161: return checkTypePredicate(node); case 165: return checkTypeQuery(node); case 166: return checkTypeLiteral(node); case 167: return checkArrayType(node); case 168: return checkTupleType(node); case 169: case 170: return checkUnionOrIntersectionType(node); case 173: return checkSourceElement(node.type); case 175: return checkTypeOperator(node); case 171: return checkConditionalType(node); case 172: return checkInferType(node); case 179: return checkImportType(node); case 290: return checkJSDocAugmentsTag(node); case 298: case 292: return checkJSDocTypeAliasTag(node); case 296: return checkJSDocTypeTag(node); case 293: return checkJSDocParameterTag(node); case 284: checkSignatureDeclaration(node); case 282: case 281: case 279: case 280: case 287: checkJSDocTypeIsInJsFile(node); ts.forEachChild(node, checkSourceElement); return; case 285: checkJSDocVariadicType(node); return; case 278: return checkSourceElement(node.type); case 176: return checkIndexedAccessType(node); case 177: return checkMappedType(node); case 234: return checkFunctionDeclaration(node); case 213: case 240: return checkBlock(node); case 214: return checkVariableStatement(node); case 216: return checkExpressionStatement(node); case 217: return checkIfStatement(node); case 218: return checkDoStatement(node); case 219: return checkWhileStatement(node); case 220: return checkForStatement(node); case 221: return checkForInStatement(node); case 222: return checkForOfStatement(node); case 223: case 224: return checkBreakOrContinueStatement(node); case 225: return checkReturnStatement(node); case 226: return checkWithStatement(node); case 227: return checkSwitchStatement(node); case 228: return checkLabeledStatement(node); case 229: return checkThrowStatement(node); case 230: return checkTryStatement(node); case 232: return checkVariableDeclaration(node); case 182: return checkBindingElement(node); case 235: return checkClassDeclaration(node); case 236: return checkInterfaceDeclaration(node); case 237: return checkTypeAliasDeclaration(node); case 238: return checkEnumDeclaration(node); case 239: return checkModuleDeclaration(node); case 244: return checkImportDeclaration(node); case 243: return checkImportEqualsDeclaration(node); case 250: return checkExportDeclaration(node); case 249: return checkExportAssignment(node); case 215: case 231: checkGrammarStatementInAmbientContext(node); return; case 253: return checkMissingDeclaration(node); } } function checkJSDocTypeIsInJsFile(node) { if (!ts.isInJavaScriptFile(node)) { grammarErrorOnNode(node, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments); } } function checkJSDocVariadicType(node) { checkJSDocTypeIsInJsFile(node); checkSourceElement(node.type); var parent = node.parent; if (ts.isParameter(parent) && ts.isJSDocFunctionType(parent.parent)) { if (ts.last(parent.parent.parameters) !== parent) { error(node, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); } return; } if (!ts.isJSDocTypeExpression(parent)) { error(node, ts.Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature); } var paramTag = node.parent.parent; if (!ts.isJSDocParameterTag(paramTag)) { error(node, ts.Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature); return; } var param = ts.getParameterSymbolFromJSDoc(paramTag); if (!param) { return; } var host = ts.getHostSignatureFromJSDoc(paramTag); if (!host || ts.last(host.parameters).symbol !== param) { error(node, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); } } function getTypeFromJSDocVariadicType(node) { var type = getTypeFromTypeNode(node.type); var parent = node.parent; var paramTag = node.parent.parent; if (ts.isJSDocTypeExpression(node.parent) && ts.isJSDocParameterTag(paramTag)) { var host_1 = ts.getHostSignatureFromJSDoc(paramTag); if (host_1) { var lastParamDeclaration = ts.lastOrUndefined(host_1.parameters); var symbol = ts.getParameterSymbolFromJSDoc(paramTag); if (!lastParamDeclaration || symbol && lastParamDeclaration.symbol === symbol && ts.isRestParameter(lastParamDeclaration)) { return createArrayType(type); } } } if (ts.isParameter(parent) && ts.isJSDocFunctionType(parent.parent)) { return createArrayType(type); } return addOptionality(type); } function checkNodeDeferred(node) { if (deferredNodes) { deferredNodes.push(node); } } function checkDeferredNodes() { for (var _i = 0, _a = deferredNodes; _i < _a.length; _i++) { var node = _a[_i]; switch (node.kind) { case 192: case 193: case 154: case 153: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; case 156: case 157: checkAccessorDeclaration(node); break; case 205: checkClassExpressionDeferred(node); break; } } } function checkSourceFile(node) { ts.performance.mark("beforeCheck"); checkSourceFileWorker(node); ts.performance.mark("afterCheck"); ts.performance.measure("Check", "beforeCheck", "afterCheck"); } function unusedIsError(kind) { switch (kind) { case 0: return !!compilerOptions.noUnusedLocals; case 1: return !!compilerOptions.noUnusedParameters; default: return ts.Debug.assertNever(kind); } } function getPotentiallyUnusedIdentifiers(sourceFile) { return allPotentiallyUnusedIdentifiers.get(sourceFile.path) || ts.emptyArray; } function checkSourceFileWorker(node) { var links = getNodeLinks(node); if (!(links.flags & 1)) { if (compilerOptions.skipLibCheck && node.isDeclarationFile || compilerOptions.skipDefaultLibCheck && node.hasNoDefaultLib) { return; } checkGrammarSourceFile(node); ts.clear(potentialThisCollisions); ts.clear(potentialNewTargetCollisions); deferredNodes = []; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); if (ts.isExternalOrCommonJsModule(node)) { registerForUnusedIdentifiersCheck(node); } if (!node.isDeclarationFile && (compilerOptions.noUnusedLocals || compilerOptions.noUnusedParameters)) { checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(node), function (kind, diag) { if (unusedIsError(kind)) { diagnostics.add(diag); } }); } deferredNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } if (potentialThisCollisions.length) { ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); ts.clear(potentialThisCollisions); } if (potentialNewTargetCollisions.length) { ts.forEach(potentialNewTargetCollisions, checkIfNewTargetIsCapturedInEnclosingScope); ts.clear(potentialNewTargetCollisions); } links.flags |= 1; } } function getDiagnostics(sourceFile, ct) { try { cancellationToken = ct; return getDiagnosticsWorker(sourceFile); } finally { cancellationToken = undefined; } } function getDiagnosticsWorker(sourceFile) { throwIfNonDiagnosticsProducing(); if (sourceFile) { var previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); var previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length; checkSourceFile(sourceFile); var semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); var currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); if (currentGlobalDiagnostics !== previousGlobalDiagnostics) { var deferredGlobalDiagnostics = ts.relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, ts.compareDiagnostics); return ts.concatenate(deferredGlobalDiagnostics, semanticDiagnostics); } else if (previousGlobalDiagnosticsSize === 0 && currentGlobalDiagnostics.length > 0) { return ts.concatenate(currentGlobalDiagnostics, semanticDiagnostics); } return semanticDiagnostics; } ts.forEach(host.getSourceFiles(), checkSourceFile); return diagnostics.getDiagnostics(); } function getGlobalDiagnostics() { throwIfNonDiagnosticsProducing(); return diagnostics.getGlobalDiagnostics(); } function throwIfNonDiagnosticsProducing() { if (!produceDiagnostics) { throw new Error("Trying to get diagnostics from a type checker that does not produce them."); } } function getSymbolsInScope(location, meaning) { if (location.flags & 8388608) { return []; } var symbols = ts.createSymbolTable(); var isStatic = false; populateSymbols(); return symbolsToArray(symbols); function populateSymbols() { while (location) { if (location.locals && !isGlobalSourceFile(location)) { copySymbols(location.locals, meaning); } switch (location.kind) { case 239: copySymbols(getSymbolOfNode(location).exports, meaning & 2623475); break; case 238: copySymbols(getSymbolOfNode(location).exports, meaning & 8); break; case 205: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } case 235: case 236: if (!isStatic) { copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 67901928); } break; case 192: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); } break; } if (ts.introducesArgumentsExoticObject(location)) { copySymbol(argumentsSymbol, meaning); } isStatic = ts.hasModifier(location, 32); location = location.parent; } copySymbols(globals, meaning); } function copySymbol(symbol, meaning) { if (ts.getCombinedLocalAndExportSymbolFlags(symbol) & meaning) { var id = symbol.escapedName; if (!symbols.has(id)) { symbols.set(id, symbol); } } } function copySymbols(source, meaning) { if (meaning) { source.forEach(function (symbol) { copySymbol(symbol, meaning); }); } } } function isTypeDeclarationName(name) { return name.kind === 71 && isTypeDeclaration(name.parent) && name.parent.name === name; } function isTypeDeclaration(node) { switch (node.kind) { case 148: case 235: case 236: case 237: case 238: return true; default: return false; } } function isTypeReferenceIdentifier(node) { while (node.parent.kind === 146) { node = node.parent; } return node.parent.kind === 162; } function isHeritageClauseElementIdentifier(node) { while (node.parent.kind === 185) { node = node.parent; } return node.parent.kind === 207; } function forEachEnclosingClass(node, callback) { var result; while (true) { node = ts.getContainingClass(node); if (!node) break; if (result = callback(node)) break; } return result; } function isNodeWithinConstructorOfClass(node, classDeclaration) { return ts.findAncestor(node, function (element) { if (ts.isConstructorDeclaration(element) && ts.nodeIsPresent(element.body) && element.parent === classDeclaration) { return true; } else if (element === classDeclaration || ts.isFunctionLikeDeclaration(element)) { return "quit"; } return false; }); } function isNodeWithinClass(node, classDeclaration) { return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { while (nodeOnRightSide.parent.kind === 146) { nodeOnRightSide = nodeOnRightSide.parent; } if (nodeOnRightSide.parent.kind === 243) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined; } if (nodeOnRightSide.parent.kind === 249) { return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined; } return undefined; } function isInRightSideOfImportOrExportAssignment(node) { return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined; } function getSpecialPropertyAssignmentSymbolFromEntityName(entityName) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { case 1: case 3: return getSymbolOfNode(entityName.parent); case 4: case 2: case 5: return getSymbolOfNode(entityName.parent.parent); } } function isImportTypeQualifierPart(node) { var parent = node.parent; while (ts.isQualifiedName(parent)) { node = parent; parent = parent.parent; } if (parent && parent.kind === 179 && parent.qualifier === node) { return parent; } return undefined; } function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) { if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 185 && entityName.parent === entityName.parent.parent.left) { var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(entityName); if (specialPropertyAssignmentSymbol) { return specialPropertyAssignmentSymbol; } } 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)) { var importEqualsDeclaration = ts.getAncestor(entityName, 243); ts.Debug.assert(importEqualsDeclaration !== undefined); return getSymbolOfPartOfRightHandSideOfImportEquals(entityName, true); } if (!ts.isPropertyAccessExpression(entityName)) { var possibleImportNode = isImportTypeQualifierPart(entityName); if (possibleImportNode) { getTypeFromTypeNode(possibleImportNode); var sym = getNodeLinks(entityName).resolvedSymbol; return sym === unknownSymbol ? undefined : sym; } } while (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } if (isHeritageClauseElementIdentifier(entityName)) { var meaning = 0; if (entityName.parent.kind === 207) { meaning = 67901928; if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { meaning |= 67216319; } } else { meaning = 1920; } meaning |= 2097152; var entityNameSymbol = ts.isEntityNameExpression(entityName) ? resolveEntityName(entityName, meaning) : undefined; if (entityNameSymbol) { return entityNameSymbol; } } if (entityName.parent.kind === 293) { return ts.getParameterSymbolFromJSDoc(entityName.parent); } if (entityName.parent.kind === 148 && entityName.parent.parent.kind === 297) { ts.Debug.assert(!ts.isInJavaScriptFile(entityName)); var typeParameter = ts.getTypeParameterFromJsDoc(entityName.parent); return typeParameter && typeParameter.symbol; } if (ts.isExpressionNode(entityName)) { if (ts.nodeIsMissing(entityName)) { return undefined; } if (entityName.kind === 71) { if (ts.isJSXTagName(entityName) && isJsxIntrinsicIdentifier(entityName)) { var symbol = getIntrinsicTagSymbol(entityName.parent); return symbol === unknownSymbol ? undefined : symbol; } return resolveEntityName(entityName, 67216319, false, true); } else if (entityName.kind === 185 || entityName.kind === 146) { var links = getNodeLinks(entityName); if (links.resolvedSymbol) { return links.resolvedSymbol; } if (entityName.kind === 185) { checkPropertyAccessExpression(entityName); } else { checkQualifiedName(entityName); } return links.resolvedSymbol; } } else if (isTypeReferenceIdentifier(entityName)) { var meaning = entityName.parent.kind === 162 ? 67901928 : 1920; return resolveEntityName(entityName, meaning, false, true); } else if (entityName.parent.kind === 262) { return getJsxAttributePropertySymbol(entityName.parent); } if (entityName.parent.kind === 161) { return resolveEntityName(entityName, 1); } return undefined; } function getSymbolAtLocation(node) { if (node.kind === 274) { return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; } var parent = node.parent; var grandParent = parent.parent; if (node.flags & 8388608) { return undefined; } if (isDeclarationNameOrImportPropertyName(node)) { return getSymbolOfNode(parent); } else if (ts.isLiteralComputedPropertyDeclarationName(node)) { return getSymbolOfNode(parent.parent); } if (node.kind === 71) { if (isInRightSideOfImportOrExportAssignment(node)) { return getSymbolOfEntityNameOrPropertyAccessExpression(node); } else if (parent.kind === 182 && grandParent.kind === 180 && node === parent.propertyName) { var typeOfPattern = getTypeOfNode(grandParent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.escapedText); if (propertyDeclaration) { return propertyDeclaration; } } } switch (node.kind) { case 71: case 185: case 146: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 99: var container = ts.getThisContainer(node, false); if (ts.isFunctionLike(container)) { var sig = getSignatureFromDeclaration(container); if (sig.thisParameter) { return sig.thisParameter; } } if (ts.isInExpressionContext(node)) { return checkExpression(node).symbol; } case 174: return getTypeFromThisTypeNode(node).symbol; case 97: return checkExpression(node).symbol; case 123: var constructorDeclaration = node.parent; if (constructorDeclaration && constructorDeclaration.kind === 155) { return constructorDeclaration.parent.symbol; } return undefined; case 9: case 13: if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || ((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); } 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: case 89: case 36: return getSymbolOfNode(node.parent); case 179: return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal) : undefined; default: return undefined; } } function getShorthandAssignmentValueSymbol(location) { if (location && location.kind === 271) { return resolveEntityName(location.name, 67216319 | 2097152); } return undefined; } function getExportSpecifierLocalTargetSymbol(node) { return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : resolveEntityName(node.propertyName || node.name, 67216319 | 67901928 | 1920 | 2097152); } function getTypeOfNode(node) { if (node.flags & 8388608) { return errorType; } if (ts.isPartOfTypeNode(node)) { var typeFromTypeNode = getTypeFromTypeNode(node); if (typeFromTypeNode && ts.isExpressionWithTypeArgumentsInClassImplementsClause(node)) { var containingClass = ts.getContainingClass(node); var classType = getTypeOfNode(containingClass); typeFromTypeNode = getTypeWithThisArgument(typeFromTypeNode, classType.thisType); } return typeFromTypeNode; } if (ts.isExpressionNode(node)) { return getRegularTypeOfExpression(node); } if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) { var classNode = ts.getContainingClass(node); var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classNode)); var baseType = getBaseTypes(classType)[0]; return baseType && getTypeWithThisArgument(baseType, classType.thisType); } if (isTypeDeclaration(node)) { var symbol = getSymbolOfNode(node); return getDeclaredTypeOfSymbol(symbol); } if (isTypeDeclarationName(node)) { var symbol = getSymbolAtLocation(node); return symbol && getDeclaredTypeOfSymbol(symbol); } if (ts.isDeclaration(node)) { var symbol = getSymbolOfNode(node); return getTypeOfSymbol(symbol); } if (isDeclarationNameOrImportPropertyName(node)) { var symbol = getSymbolAtLocation(node); return symbol && getTypeOfSymbol(symbol); } if (ts.isBindingPattern(node)) { return getTypeForVariableLikeDeclaration(node.parent, true); } if (isInRightSideOfImportOrExportAssignment(node)) { var symbol = getSymbolAtLocation(node); if (symbol) { var declaredType = getDeclaredTypeOfSymbol(symbol); return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol); } } return errorType; } function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { 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 (expr.parent.kind === 200) { var iteratedType = getTypeOfExpression(expr.parent.right); return checkDestructuringAssignment(expr, iteratedType || errorType); } if (expr.parent.kind === 270) { var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || errorType, expr.parent); } ts.Debug.assert(expr.parent.kind === 183); var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || errorType, expr.parent, false, false) || errorType; return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, expr.parent.elements.indexOf(expr), elementType || errorType); } function getPropertySymbolOfDestructuringAssignment(location) { var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent); return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.escapedText); } function getRegularTypeOfExpression(expr) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; } return getRegularTypeOfLiteralType(getTypeOfExpression(expr)); } function getParentTypeOfClassElement(node) { var classSymbol = getSymbolOfNode(node.parent); return ts.hasModifier(node, 32) ? getTypeOfSymbol(classSymbol) : getDeclaredTypeOfSymbol(classSymbol); } function getAugmentedPropertiesOfType(type) { type = getApparentType(type); var propsByName = ts.createSymbolTable(getPropertiesOfType(type)); if (typeHasCallOrConstructSignatures(type)) { ts.forEach(getPropertiesOfType(globalFunctionType), function (p) { if (!propsByName.has(p.escapedName)) { propsByName.set(p.escapedName, p); } }); } return getNamedMembers(propsByName); } function typeHasCallOrConstructSignatures(type) { return ts.typeHasCallOrConstructSignatures(type, checker); } function getRootSymbols(symbol) { var roots = getImmediateRootSymbols(symbol); return roots ? ts.flatMap(roots, getRootSymbols) : [symbol]; } function getImmediateRootSymbols(symbol) { if (ts.getCheckFlags(symbol) & 6) { return ts.mapDefined(getSymbolLinks(symbol).containingType.types, function (type) { return getPropertyOfType(type, symbol.escapedName); }); } else if (symbol.flags & 33554432) { var _a = symbol, leftSpread = _a.leftSpread, rightSpread = _a.rightSpread, syntheticOrigin = _a.syntheticOrigin; return leftSpread ? [leftSpread, rightSpread] : syntheticOrigin ? [syntheticOrigin] : ts.singleElementArray(tryGetAliasTarget(symbol)); } return undefined; } function tryGetAliasTarget(symbol) { var target; var next = symbol; while (next = getSymbolLinks(next).target) { target = next; } return target; } function isArgumentsLocalBinding(nodeIn) { if (!ts.isGeneratedIdentifier(nodeIn)) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { var isPropertyName_1 = node.parent.kind === 185 && node.parent.name === node; return !isPropertyName_1 && getReferencedValueSymbol(node) === argumentsSymbol; } } return false; } function moduleExportsSomeValue(moduleReferenceExpression) { var moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression); if (!moduleSymbol || ts.isShorthandAmbientModuleSymbol(moduleSymbol)) { return true; } var hasExportAssignment = hasExportAssignmentSymbol(moduleSymbol); moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); var symbolLinks = getSymbolLinks(moduleSymbol); if (symbolLinks.exportsSomeValue === undefined) { symbolLinks.exportsSomeValue = hasExportAssignment ? !!(moduleSymbol.flags & 67216319) : ts.forEachEntry(getExportsOfModule(moduleSymbol), isValue); } return symbolLinks.exportsSomeValue; function isValue(s) { s = resolveSymbol(s); return s && !!(s.flags & 67216319); } } function isNameOfModuleOrEnumDeclaration(node) { return ts.isModuleOrEnumDeclaration(node.parent) && node === node.parent.name; } function getReferencedExportContainer(nodeIn, prefixLocals) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { var symbol = getReferencedValueSymbol(node, isNameOfModuleOrEnumDeclaration(node)); if (symbol) { if (symbol.flags & 1048576) { var exportSymbol = getMergedSymbol(symbol.exportSymbol); 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 && parentSymbol_1.valueDeclaration.kind === 274) { var symbolFile = parentSymbol_1.valueDeclaration; var referenceFile = ts.getSourceFileOfNode(node); var symbolIsUmdExport = symbolFile !== referenceFile; return symbolIsUmdExport ? undefined : symbolFile; } return ts.findAncestor(node.parent, function (n) { return ts.isModuleOrEnumDeclaration(n) && getSymbolOfNode(n) === parentSymbol_1; }); } } } } function getReferencedImportDeclaration(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { var symbol = getReferencedValueSymbol(node); if (isNonLocalAlias(symbol, 67216319)) { return getDeclarationOfAliasSymbol(symbol); } } return undefined; } function isSymbolOfDeclarationWithCollidingName(symbol) { 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, undefined, undefined, false)) { links.isDeclarationWithCollidingName = true; } 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 { links.isDeclarationWithCollidingName = false; } } } return links.isDeclarationWithCollidingName; } return false; } function getReferencedDeclarationWithCollidingName(nodeIn) { if (!ts.isGeneratedIdentifier(nodeIn)) { var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier); if (node) { var symbol = getReferencedValueSymbol(node); if (symbol && isSymbolOfDeclarationWithCollidingName(symbol)) { return symbol.valueDeclaration; } } } return undefined; } function isDeclarationWithCollidingName(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isDeclaration); if (node) { var symbol = getSymbolOfNode(node); if (symbol) { return isSymbolOfDeclarationWithCollidingName(symbol); } } return false; } function isValueAliasDeclaration(node) { switch (node.kind) { case 243: case 245: case 246: case 248: case 252: return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol); case 250: var exportClause = node.exportClause; return !!exportClause && ts.some(exportClause.elements, isValueAliasDeclaration); case 249: return node.expression && node.expression.kind === 71 ? isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) : true; } return false; } function isTopLevelValueImportEqualsWithEntityName(nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration); if (node === undefined || node.parent.kind !== 274 || !ts.isInternalModuleImportEqualsDeclaration(node)) { return false; } var isValue = isAliasResolvedToValue(getSymbolOfNode(node)); return isValue && node.moduleReference && !ts.nodeIsMissing(node.moduleReference); } function isAliasResolvedToValue(symbol) { var target = resolveAlias(symbol); if (target === unknownSymbol) { return true; } return !!(target.flags & 67216319) && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { return isConstEnumSymbol(s) || !!s.constEnumOnlyModule; } function isReferencedAliasDeclaration(node, checkChildren) { if (ts.isAliasSymbolDeclaration(node)) { var symbol = getSymbolOfNode(node); if (symbol && getSymbolLinks(symbol).referenced) { return true; } var target = getSymbolLinks(symbol).target; if (target && ts.getModifierFlags(node) & 1 && target.flags & 67216319) { return true; } } if (checkChildren) { return !!ts.forEachChild(node, function (node) { return isReferencedAliasDeclaration(node, checkChildren); }); } return false; } function isImplementationOfOverload(node) { if (ts.nodeIsPresent(node.body)) { if (ts.isGetAccessor(node) || ts.isSetAccessor(node)) return false; var symbol = getSymbolOfNode(node); var signaturesOfSymbol = getSignaturesOfSymbol(symbol); return signaturesOfSymbol.length > 1 || (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node); } return false; } function isRequiredInitializedParameter(parameter) { return !!strictNullChecks && !isOptionalParameter(parameter) && !ts.isJSDocParameterTag(parameter) && !!parameter.initializer && !ts.hasModifier(parameter, 92); } function isOptionalUninitializedParameterProperty(parameter) { return strictNullChecks && isOptionalParameter(parameter) && !parameter.initializer && ts.hasModifier(parameter, 92); } function getNodeCheckFlags(node) { return getNodeLinks(node).flags || 0; } function getEnumMemberValue(node) { computeEnumMemberValues(node.parent); return getNodeLinks(node).enumMemberValue; } function canHaveConstantValue(node) { switch (node.kind) { case 273: case 185: case 186: return true; } return false; } function getConstantValue(node) { if (node.kind === 273) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; if (symbol && (symbol.flags & 8)) { if (ts.isConstEnumDeclaration(symbol.valueDeclaration.parent)) { return getEnumMemberValue(symbol.valueDeclaration); } } return undefined; } function isFunctionType(type) { return !!(type.flags & 131072) && getSignaturesOfType(type, 0).length > 0; } function getTypeReferenceSerializationKind(typeNameIn, location) { var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName); if (!typeName) return ts.TypeReferenceSerializationKind.Unknown; if (location) { location = ts.getParseTreeNode(location); if (!location) return ts.TypeReferenceSerializationKind.Unknown; } var valueSymbol = resolveEntityName(typeName, 67216319, true, false, location); var typeSymbol = resolveEntityName(typeName, 67901928, true, false, location); if (valueSymbol && valueSymbol === typeSymbol) { var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false); if (globalPromiseSymbol && valueSymbol === globalPromiseSymbol) { return ts.TypeReferenceSerializationKind.Promise; } var constructorType = getTypeOfSymbol(valueSymbol); if (constructorType && isConstructorType(constructorType)) { return ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue; } } if (!typeSymbol) { return ts.TypeReferenceSerializationKind.Unknown; } var type = getDeclaredTypeOfSymbol(typeSymbol); if (type === errorType) { return ts.TypeReferenceSerializationKind.Unknown; } else if (type.flags & 3) { return ts.TypeReferenceSerializationKind.ObjectType; } else if (isTypeAssignableToKind(type, 4096 | 24576 | 32768)) { return ts.TypeReferenceSerializationKind.VoidNullableOrNeverType; } else if (isTypeAssignableToKind(type, 272)) { return ts.TypeReferenceSerializationKind.BooleanType; } else if (isTypeAssignableToKind(type, 168)) { return ts.TypeReferenceSerializationKind.NumberLikeType; } else if (isTypeAssignableToKind(type, 68)) { return ts.TypeReferenceSerializationKind.StringLikeType; } else if (isTupleType(type)) { return ts.TypeReferenceSerializationKind.ArrayLikeType; } else if (isTypeAssignableToKind(type, 3072)) { return ts.TypeReferenceSerializationKind.ESSymbolType; } else if (isFunctionType(type)) { return ts.TypeReferenceSerializationKind.TypeWithCallSignature; } else if (isArrayType(type)) { return ts.TypeReferenceSerializationKind.ArrayLikeType; } else { return ts.TypeReferenceSerializationKind.ObjectType; } } function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) { var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor); if (!declaration) { return ts.createToken(119); } var symbol = getSymbolOfNode(declaration); var type = symbol && !(symbol.flags & (2048 | 131072)) ? getWidenedLiteralType(getTypeOfSymbol(symbol)) : errorType; if (type.flags & 2048 && type.symbol === symbol) { flags |= 1048576; } if (addUndefined) { type = getOptionalType(type); } 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); } var signature = getSignatureFromDeclaration(signatureDeclaration); 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); } var type = getWidenedType(getRegularTypeOfExpression(expr)); return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024, tracker); } function hasGlobalName(name) { return globals.has(ts.escapeLeadingUnderscores(name)); } function getReferencedValueSymbol(reference, startInDeclarationContainer) { var resolvedSymbol = getNodeLinks(reference).resolvedSymbol; if (resolvedSymbol) { return resolvedSymbol; } var location = reference; if (startInDeclarationContainer) { var parent = reference.parent; if (ts.isDeclaration(parent) && reference === parent.name) { location = getDeclarationContainer(parent); } } return resolveName(location, reference.escapedText, 67216319 | 1048576 | 2097152, undefined, undefined, true); } function getReferencedValueDeclaration(referenceIn) { if (!ts.isGeneratedIdentifier(referenceIn)) { var reference = ts.getParseTreeNode(referenceIn, ts.isIdentifier); if (reference) { var symbol = getReferencedValueSymbol(reference); if (symbol) { return getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; } } } return undefined; } function isLiteralConstDeclaration(node) { if (ts.isConst(node)) { var type = getTypeOfSymbol(getSymbolOfNode(node)); return !!(type.flags & 192 && type.flags & 33554432); } return false; } function literalTypeToNode(type) { return ts.createLiteral(type.value); } function createLiteralConstValue(node) { var type = getTypeOfSymbol(getSymbolOfNode(node)); return literalTypeToNode(type); } function createResolver() { var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); var fileToDirective; if (resolvedTypeReferenceDirectives) { fileToDirective = ts.createMap(); resolvedTypeReferenceDirectives.forEach(function (resolvedDirective, key) { if (!resolvedDirective || !resolvedDirective.resolvedFileName) { return; } var file = host.getSourceFile(resolvedDirective.resolvedFileName); fileToDirective.set(file.path, key); }); } return { getReferencedExportContainer: getReferencedExportContainer, getReferencedImportDeclaration: getReferencedImportDeclaration, getReferencedDeclarationWithCollidingName: getReferencedDeclarationWithCollidingName, isDeclarationWithCollidingName: isDeclarationWithCollidingName, isValueAliasDeclaration: function (node) { node = ts.getParseTreeNode(node); return node ? isValueAliasDeclaration(node) : true; }, hasGlobalName: hasGlobalName, isReferencedAliasDeclaration: function (node, checkChildren) { node = ts.getParseTreeNode(node); return node ? isReferencedAliasDeclaration(node, checkChildren) : true; }, getNodeCheckFlags: function (node) { node = ts.getParseTreeNode(node); return node ? getNodeCheckFlags(node) : 0; }, isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName, isDeclarationVisible: isDeclarationVisible, isImplementationOfOverload: isImplementationOfOverload, isRequiredInitializedParameter: isRequiredInitializedParameter, isOptionalUninitializedParameterProperty: isOptionalUninitializedParameterProperty, createTypeOfDeclaration: createTypeOfDeclaration, createReturnTypeOfSignatureDeclaration: createReturnTypeOfSignatureDeclaration, createTypeOfExpression: createTypeOfExpression, createLiteralConstValue: createLiteralConstValue, isSymbolAccessible: isSymbolAccessible, isEntityNameVisible: isEntityNameVisible, getConstantValue: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue); return node ? getConstantValue(node) : undefined; }, collectLinkedAliases: collectLinkedAliases, getReferencedValueDeclaration: getReferencedValueDeclaration, getTypeReferenceSerializationKind: getTypeReferenceSerializationKind, isOptionalParameter: isOptionalParameter, moduleExportsSomeValue: moduleExportsSomeValue, isArgumentsLocalBinding: isArgumentsLocalBinding, getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol, isLiteralConstDeclaration: isLiteralConstDeclaration, isLateBound: function (nodeIn) { var node = ts.getParseTreeNode(nodeIn, ts.isDeclaration); var symbol = node && getSymbolOfNode(node); 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); 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 ? accessor : otherAccessor; var getAccessor = accessor.kind === 156 ? accessor : otherAccessor; return { firstAccessor: firstAccessor, secondAccessor: secondAccessor, setAccessor: setAccessor, getAccessor: getAccessor }; } }; function isInHeritageClause(node) { return node.parent && node.parent.kind === 207 && node.parent.parent && node.parent.parent.kind === 268; } function getTypeReferenceDirectivesForEntityName(node) { if (!fileToDirective) { return undefined; } var meaning = 67901928 | 1920; if ((node.kind === 71 && isInTypeQuery(node)) || (node.kind === 185 && !isInHeritageClause(node))) { meaning = 67216319 | 1048576; } var symbol = resolveEntityName(node, meaning, true); return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined; } function getTypeReferenceDirectivesForSymbol(symbol, meaning) { if (!fileToDirective) { return undefined; } if (!isSymbolFromTypeDeclarationFile(symbol)) { return undefined; } var typeReferenceDirectives; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (decl.symbol && decl.symbol.flags & meaning) { var file = ts.getSourceFileOfNode(decl); var typeReferenceDirective = fileToDirective.get(file.path); if (typeReferenceDirective) { (typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective); } else { return undefined; } } } return typeReferenceDirectives; } function isSymbolFromTypeDeclarationFile(symbol) { if (!symbol.declarations) { return false; } var current = symbol; while (true) { var parent = getParentOfSymbol(current); if (parent) { current = parent; } else { break; } } if (current.valueDeclaration && current.valueDeclaration.kind === 274 && current.flags & 512) { return false; } for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; var file = ts.getSourceFileOfNode(decl); if (fileToDirective.has(file.path)) { return true; } } return false; } } function getExternalModuleFileFromDeclaration(declaration) { 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); } function initializeTypeChecker() { for (var _i = 0, _a = host.getSourceFiles(); _i < _a.length; _i++) { var file = _a[_i]; ts.bindSourceFile(file, compilerOptions); } var augmentations; for (var _b = 0, _c = host.getSourceFiles(); _b < _c.length; _b++) { var file = _c[_b]; if (!ts.isExternalOrCommonJsModule(file)) { mergeSymbolTable(globals, file.locals); } if (file.patternAmbientModules && file.patternAmbientModules.length) { patternAmbientModules = ts.concatenate(patternAmbientModules, file.patternAmbientModules); } if (file.moduleAugmentations.length) { (augmentations || (augmentations = [])).push(file.moduleAugmentations); } if (file.symbol && file.symbol.globalExports) { var source = file.symbol.globalExports; source.forEach(function (sourceSymbol, id) { if (!globals.has(id)) { globals.set(id, sourceSymbol); } }); } } if (augmentations) { 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++) { var augmentation = list_1[_e]; if (!ts.isGlobalScopeAugmentation(augmentation.parent)) continue; mergeModuleAugmentation(augmentation); } } } addToSymbolTable(globals, builtinGlobals, ts.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0); getSymbolLinks(undefinedSymbol).type = undefinedWideningType; getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments", 0, true); getSymbolLinks(unknownSymbol).type = errorType; 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 = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined); } globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", 1); anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType; globalThisType = getGlobalTypeOrUndefined("ThisType", 1); if (augmentations) { 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++) { var augmentation = list_2[_g]; if (ts.isGlobalScopeAugmentation(augmentation.parent)) continue; mergeModuleAugmentation(augmentation); } } } } function checkExternalEmitHelpers(location, helpers) { if ((requestedExternalEmitHelpers & helpers) !== helpers && compilerOptions.importHelpers) { var sourceFile = ts.getSourceFileOfNode(location); if (ts.isEffectiveExternalModule(sourceFile, compilerOptions) && !(location.flags & 4194304)) { var helpersModule = resolveHelpersModule(sourceFile, location); if (helpersModule !== unknownSymbol) { var uncheckedHelpers = helpers & ~requestedExternalEmitHelpers; for (var helper = 1; helper <= 65536; helper <<= 1) { if (uncheckedHelpers & helper) { var name = getHelperName(helper); 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); } } } } requestedExternalEmitHelpers |= helpers; } } } function getHelperName(helper) { switch (helper) { 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"); } } function resolveHelpersModule(node, errorNode) { if (!externalHelpersModule) { externalHelpersModule = resolveExternalModule(node, ts.externalHelpersModuleNameText, ts.Diagnostics.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found, errorNode) || unknownSymbol; } return externalHelpersModule; } function checkGrammarDecoratorsAndModifiers(node) { return checkGrammarDecorators(node) || checkGrammarModifiers(node); } function checkGrammarDecorators(node) { if (!node.decorators) { return false; } if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) { 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 || 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); } } return false; } function checkGrammarModifiers(node) { var quickResult = reportObviousModifierErrors(node); if (quickResult !== undefined) { return quickResult; } var lastStatic, lastDeclare, lastAsync, lastReadonly; var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; 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) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { 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: case 113: case 112: var text = visibilityToString(ts.modifierToFlag(modifier.kind)); if (flags & 28) { return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen); } else if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); } else if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "readonly"); } else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } 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) { if (modifier.kind === 112) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract"); } else { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "abstract"); } } flags |= ts.modifierToFlag(modifier.kind); break; case 115: if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static"); } else if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly"); } else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } 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) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } else if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } flags |= 32; lastStatic = modifier; break; case 132: if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } 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; lastReadonly = modifier; break; case 84: if (flags & 1) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export"); } else if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); } else if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "abstract"); } else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } 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) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= 1; break; 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; break; case 124: if (flags & 2) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare"); } 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) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } else if (node.kind === 149) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } 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; lastDeclare = modifier; break; case 117: if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } 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 && ts.hasModifier(node.parent, 128))) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } if (flags & 32) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); } if (flags & 8) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "private", "abstract"); } } flags |= 128; break; case 120: if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async"); } 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) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } flags |= 256; lastAsync = modifier; break; } } if (node.kind === 155) { if (flags & 32) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } if (flags & 128) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract"); } else if (flags & 256) { return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async"); } 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 || 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 && (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 && (flags & 92) && node.dotDotDotToken) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256) { return checkGrammarAsyncModifier(node, lastAsync); } return false; } function reportObviousModifierErrors(node) { return !node.modifiers ? false : shouldReportBadModifier(node) ? grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here) : undefined; } function shouldReportBadModifier(node) { switch (node.kind) { 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 || node.parent.kind === 274) { return false; } switch (node.kind) { case 234: return nodeHasAnyModifiersExcept(node, 120); case 235: return nodeHasAnyModifiersExcept(node, 117); case 236: case 214: case 237: return true; case 238: return nodeHasAnyModifiersExcept(node, 76); default: ts.Debug.fail(); return false; } } } function nodeHasAnyModifiersExcept(node, allowedModifier) { return node.modifiers.length > 1 || node.modifiers[0].kind !== allowedModifier; } function checkGrammarAsyncModifier(node, asyncModifier) { switch (node.kind) { case 154: case 234: case 192: case 193: return false; } return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async"); } function checkGrammarForDisallowedTrailingComma(list, diag) { if (diag === void 0) { diag = ts.Diagnostics.Trailing_comma_not_allowed; } if (list && list.hasTrailingComma) { return grammarErrorAtPos(list[0], list.end - ",".length, ",".length, diag); } return false; } function checkGrammarTypeParameterList(typeParameters, file) { if (typeParameters && typeParameters.length === 0) { var start = typeParameters.pos - "<".length; var end = ts.skipTrivia(file.text, typeParameters.end) + ">".length; return grammarErrorAtPos(file, start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty); } return false; } function checkGrammarParameterList(parameters) { var seenOptionalParameter = false; var parameterCount = parameters.length; for (var i = 0; i < parameterCount; i++) { var parameter = parameters[i]; if (parameter.dotDotDotToken) { if (i !== (parameterCount - 1)) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); } 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)) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_rest_parameter_cannot_be_optional); } if (parameter.initializer) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); } } else if (parameter.questionToken) { seenOptionalParameter = true; if (parameter.initializer) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); } } else if (seenOptionalParameter && !parameter.initializer) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); } } } function checkGrammarFunctionLikeDeclaration(node) { var file = ts.getSourceFileOfNode(node); return checkGrammarDecoratorsAndModifiers(node) || checkGrammarTypeParameterList(node.typeParameters, file) || checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); } function checkGrammarClassLikeDeclaration(node) { var file = ts.getSourceFileOfNode(node); return checkGrammarClassDeclarationHeritageClauses(node) || checkGrammarTypeParameterList(node.typeParameters, file); } function checkGrammarArrowFunction(node, file) { if (!ts.isArrowFunction(node)) { return false; } var equalsGreaterThanToken = node.equalsGreaterThanToken; var startLine = ts.getLineAndCharacterOfPosition(file, equalsGreaterThanToken.pos).line; var endLine = ts.getLineAndCharacterOfPosition(file, equalsGreaterThanToken.end).line; return startLine !== endLine && grammarErrorOnNode(equalsGreaterThanToken, ts.Diagnostics.Line_terminator_not_permitted_before_arrow); } function checkGrammarIndexSignatureParameters(node) { var parameter = node.parameters[0]; if (node.parameters.length !== 1) { if (parameter) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); } else { return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter); } } if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } if (ts.hasModifiers(parameter)) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); } if (parameter.initializer) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); } if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } if (parameter.type.kind !== 137 && parameter.type.kind !== 134) { var type = getTypeFromTypeNode(parameter.type); 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 && 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); } if (!node.type) { return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); } return false; } function checkGrammarIndexSignature(node) { return checkGrammarDecoratorsAndModifiers(node) || checkGrammarIndexSignatureParameters(node); } function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) { if (typeArguments && typeArguments.length === 0) { var sourceFile = ts.getSourceFileOfNode(node); var start = typeArguments.pos - "<".length; var end = ts.skipTrivia(sourceFile.text, typeArguments.end) + ">".length; return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty); } return false; } function checkGrammarTypeArguments(node, typeArguments) { return checkGrammarForDisallowedTrailingComma(typeArguments) || checkGrammarForAtLeastOneTypeArgument(node, typeArguments); } function checkGrammarForOmittedArgument(args) { if (args) { for (var _i = 0, args_5 = args; _i < args_5.length; _i++) { var arg = args_5[_i]; if (arg.kind === 206) { return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } } return false; } function checkGrammarArguments(args) { return checkGrammarForOmittedArgument(args); } function checkGrammarHeritageClause(node) { var types = node.types; if (checkGrammarForDisallowedTrailingComma(types)) { return true; } if (types && types.length === 0) { var listType = ts.tokenToString(node.token); return grammarErrorAtPos(node, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType); } return ts.some(types, checkGrammarExpressionWithTypeArguments); } function checkGrammarExpressionWithTypeArguments(node) { return checkGrammarTypeArguments(node, node.typeArguments); } function checkGrammarClassDeclarationHeritageClauses(node) { var seenExtendsClause = false; var seenImplementsClause = false; if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) { for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) { var heritageClause = _a[_i]; if (heritageClause.token === 85) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } if (seenImplementsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_must_precede_implements_clause); } if (heritageClause.types.length > 1) { return grammarErrorOnFirstToken(heritageClause.types[1], ts.Diagnostics.Classes_can_only_extend_a_single_class); } seenExtendsClause = true; } else { ts.Debug.assert(heritageClause.token === 108); if (seenImplementsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen); } seenImplementsClause = true; } checkGrammarHeritageClause(heritageClause); } } } function checkGrammarInterfaceDeclaration(node) { var seenExtendsClause = false; if (node.heritageClauses) { for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) { var heritageClause = _a[_i]; if (heritageClause.token === 85) { if (seenExtendsClause) { return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); } seenExtendsClause = true; } else { ts.Debug.assert(heritageClause.token === 108); return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause); } checkGrammarHeritageClause(heritageClause); } } return false; } function checkGrammarComputedPropertyName(node) { if (node.kind !== 147) { return false; } var computedPropertyName = node; 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 || 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) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator); } } } function checkGrammarForInvalidQuestionMark(questionToken, message) { 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) { continue; } var name = prop.name; if (name.kind === 147) { checkGrammarComputedPropertyName(name); } 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); } if (prop.modifiers) { for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { var mod = _c[_b]; if (mod.kind !== 120 || prop.kind !== 154) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } } } var currentKind = void 0; switch (prop.kind) { case 270: case 271: checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); if (name.kind === 8) { checkGrammarNumericLiteral(name); } case 154: currentKind = 1; break; case 156: currentKind = 2; break; case 157: currentKind = 4; break; default: throw ts.Debug.assertNever(prop, "Unexpected syntax kind:" + prop.kind); } var effectiveName = ts.getPropertyNameForPropertyNameNode(name); if (effectiveName === undefined) { continue; } var existingKind = seen.get(effectiveName); if (!existingKind) { seen.set(effectiveName, currentKind); } else { if (currentKind === 1 && existingKind === 1) { grammarErrorOnNode(name, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name)); } else if ((currentKind & 6) && (existingKind & 6)) { if (existingKind !== 6 && currentKind !== existingKind) { seen.set(effectiveName, currentKind | existingKind); } else { return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); } } else { return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); } } } } function checkGrammarJsxElement(node) { checkGrammarTypeArguments(node, node.typeArguments); var seen = ts.createUnderscoreEscapedMap(); for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) { var attr = _a[_i]; if (attr.kind === 264) { continue; } var name = attr.name, initializer = attr.initializer; if (!seen.get(name.escapedText)) { seen.set(name.escapedText, true); } else { return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } if (initializer && initializer.kind === 265 && !initializer.expression) { return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } } function checkGrammarForInOrForOfStatement(forInOrOfStatement) { if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } 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) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; if (!declarations.length) { return false; } if (declarations.length > 1) { 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 ? 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 ? 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); } } } return false; } function checkGrammarAccessor(accessor) { var kind = accessor.kind; if (languageVersion < 1) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } 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)) { return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); } 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 ? ts.Diagnostics.A_get_accessor_cannot_have_parameters : ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } else if (kind === 157) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } else { var parameter = accessor.parameters[0]; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); } else if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); } else if (parameter.initializer) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); } } } return false; } function doesAccessorHaveCorrectParameterCount(accessor) { return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 156 ? 0 : 1); } function getAccessorThisParameter(accessor) { if (accessor.parameters.length === (accessor.kind === 156 ? 1 : 2)) { return ts.getThisParameter(accessor); } } function checkGrammarTypeOperatorNode(node) { 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: var decl = parent; 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)) { return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const); } break; 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: 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; default: return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here); } } } function checkGrammarForInvalidDynamicName(node, message) { if (isNonBindableDynamicName(node)) { return grammarErrorOnNode(node, message); } } function checkGrammarMethod(node) { if (checkGrammarFunctionLikeDeclaration(node)) { return true; } 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)) { return true; } else if (node.body === undefined) { return grammarErrorAtPos(node, node.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); } } if (checkGrammarForGenerator(node)) { return true; } } if (ts.isClassLike(node.parent)) { 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 && !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) { 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) { 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); } } function checkGrammarBreakOrContinueStatement(node) { var current = node; while (current) { if (ts.isFunctionLike(current)) { return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { case 228: if (node.label && current.label.escapedText === node.label.escapedText) { 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: if (node.kind === 224 && !node.label) { return false; } break; default: if (ts.isIterationStatement(current, false) && !node.label) { return false; } break; } current = current.parent; } if (node.label) { 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 ? 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); } } function checkGrammarBindingElement(node) { if (node.dotDotDotToken) { var elements = node.parent.elements; if (node !== ts.last(elements)) { 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 || 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) { return grammarErrorAtPos(node, node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); } } } function isStringOrNumberLiteralExpression(expr) { 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 && node.parent.parent.kind !== 222) { if (node.flags & 4194304) { if (node.initializer) { if (ts.isConst(node) && !node.type) { if (!isStringOrNumberLiteralExpression(node.initializer)) { return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal); } } else { 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))) { var equalsTokenLength = "=".length; return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); } } else if (!node.initializer) { if (ts.isBindingPattern(node.name) && !ts.isBindingPattern(node.parent)) { return grammarErrorOnNode(node, ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer); } if (ts.isConst(node)) { return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized); } } } 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) && ts.hasModifier(node.parent.parent, 1)) { checkESModuleMarker(node.name); } var checkLetConstNames = (ts.isLet(node) || ts.isConst(node)); return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name); } function checkESModuleMarker(name) { 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); } } else { var elements = name.elements; for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var element = elements_1[_i]; if (!ts.isOmittedExpression(element)) { return checkESModuleMarker(element.name); } } } return false; } function checkGrammarNameInLetOrConstDeclarations(name) { 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); } } else { var elements = name.elements; for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { var element = elements_2[_i]; if (!ts.isOmittedExpression(element)) { checkGrammarNameInLetOrConstDeclarations(element.name); } } } return false; } function checkGrammarVariableDeclarationList(declarationList) { var declarations = declarationList.declarations; if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) { return true; } if (!declarationList.declarations.length) { return grammarErrorAtPos(declarationList, declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); } return false; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { case 217: case 218: case 219: case 226: case 220: case 221: case 222: return false; case 228: return allowLetAndConstDeclarations(parent.parent); } return true; } function checkGrammarForDisallowedLetOrConstStatement(node) { if (!allowLetAndConstDeclarations(node.parent)) { if (ts.isLet(node.declarationList)) { return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block); } else if (ts.isConst(node.declarationList)) { return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block); } } } function checkGrammarMetaProperty(node) { var escapedText = node.name.escapedText; switch (node.keywordToken) { 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: 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"); } break; } } function hasParseDiagnostics(sourceFile) { return sourceFile.parseDiagnostics.length > 0; } function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) { var sourceFile = ts.getSourceFileOfNode(node); if (!hasParseDiagnostics(sourceFile)) { var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos); diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2)); return true; } return false; } function grammarErrorAtPos(nodeForSourceFile, start, length, message, arg0, arg1, arg2) { var sourceFile = ts.getSourceFileOfNode(nodeForSourceFile); if (!hasParseDiagnostics(sourceFile)) { diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2)); return true; } return false; } function grammarErrorOnNode(node, message, arg0, arg1, arg2) { var sourceFile = ts.getSourceFileOfNode(node); if (!hasParseDiagnostics(sourceFile)) { diagnostics.add(ts.createDiagnosticForNode(node, message, arg0, arg1, arg2)); return true; } return false; } function checkGrammarConstructorTypeParameters(node) { var jsdocTypeParameters = ts.isInJavaScriptFile(node) && ts.getJSDocTypeParameterDeclarations(node); if (node.typeParameters || jsdocTypeParameters && jsdocTypeParameters.length) { var _a = node.typeParameters || jsdocTypeParameters && jsdocTypeParameters[0] || node, pos = _a.pos, end = _a.end; return grammarErrorAtPos(node, pos, end - pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); } } function checkGrammarConstructorTypeAnnotation(node) { var type = ts.getEffectiveReturnTypeNode(node); if (type) { return grammarErrorOnNode(type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); } } function checkGrammarProperty(node) { if (ts.isClassLike(node.parent)) { if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } } 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; } if (node.initializer) { return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } 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; } if (node.initializer) { return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_type_literal_property_cannot_have_an_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 || ts.hasModifier(node, 32 | 128))) { return grammarErrorOnNode(node.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context); } } function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { 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); } 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) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } } } return false; } function checkGrammarSourceFile(node) { return !!(node.flags & 4194304) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node); } function checkGrammarStatementInAmbientContext(node) { if (node.flags & 4194304) { if (ts.isAccessor(node.parent)) { return getNodeLinks(node).hasReportedStatementInAmbientContext = true; } 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); } if (node.parent.kind === 213 || node.parent.kind === 240 || node.parent.kind === 274) { var links_1 = getNodeLinks(node.parent); if (!links_1.hasReportedStatementInAmbientContext) { return links_1.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); } } else { } } return false; } function checkGrammarNumericLiteral(node) { if (node.numericLiteralFlags & 32) { var diagnosticMessage = void 0; 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)) { diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0; } 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; var literal = (withMinus ? "-" : "") + "0o" + node.text; return grammarErrorOnNode(withMinus ? node.parent : node, diagnosticMessage, literal); } } return false; } function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) { var sourceFile = ts.getSourceFileOfNode(node); if (!hasParseDiagnostics(sourceFile)) { var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos); diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), 0, message, arg0, arg1, arg2)); return true; } return false; } function getAmbientModules() { if (!ambientModulesCache) { ambientModulesCache = []; globals.forEach(function (global, sym) { if (ambientModuleSymbolRegex.test(sym)) { ambientModulesCache.push(global); } }); } return ambientModulesCache; } function checkGrammarImportCallExpression(node) { if (moduleKind === ts.ModuleKind.ES2015) { return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_is_only_supported_when_module_flag_is_commonjs_or_esNext); } if (node.typeArguments) { return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_cannot_have_type_arguments); } var nodeArguments = node.arguments; if (nodeArguments.length !== 1) { return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument); } if (ts.isSpreadElement(nodeArguments[0])) { return grammarErrorOnNode(nodeArguments[0], ts.Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element); } return false; } } ts.createTypeChecker = createTypeChecker; function isDeclarationNameOrImportPropertyName(name) { switch (name.parent.kind) { case 248: case 252: return ts.isIdentifier(name); default: return ts.isDeclarationName(name); } } function isSomeImportDeclaration(decl) { switch (decl.kind) { case 245: case 243: case 246: case 248: return true; case 71: return decl.parent.kind === 248; default: return false; } } var JsxNames; (function (JsxNames) { JsxNames.JSX = "JSX"; JsxNames.IntrinsicElements = "IntrinsicElements"; JsxNames.ElementClass = "ElementClass"; JsxNames.ElementAttributesPropertyNameContainer = "ElementAttributesProperty"; JsxNames.ElementChildrenAttributeNameContainer = "ElementChildrenAttribute"; JsxNames.Element = "Element"; JsxNames.IntrinsicAttributes = "IntrinsicAttributes"; JsxNames.IntrinsicClassAttributes = "IntrinsicClassAttributes"; })(JsxNames || (JsxNames = {})); })(ts || (ts = {})); var ts; (function (ts) { function createSynthesizedNode(kind) { var node = ts.createNode(kind, -1, -1); node.flags |= 8; return node; } function updateNode(updated, original) { if (updated !== original) { setOriginalNode(updated, original); setTextRange(updated, original); ts.aggregateTransformFlags(updated); } return updated; } ts.updateNode = updateNode; function createNodeArray(elements, hasTrailingComma) { if (!elements || elements === ts.emptyArray) { elements = []; } else if (ts.isNodeArray(elements)) { return elements; } var array = elements; array.pos = -1; array.end = -1; array.hasTrailingComma = hasTrailingComma; return array; } ts.createNodeArray = createNodeArray; function getSynthesizedClone(node) { if (node === undefined) { return node; } var clone = createSynthesizedNode(node.kind); clone.flags |= node.flags; setOriginalNode(clone, node); for (var key in node) { if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) { continue; } clone[key] = node[key]; } return clone; } ts.getSynthesizedClone = getSynthesizedClone; function createLiteral(value, isSingleQuote) { if (typeof value === "number") { return createNumericLiteral(value + ""); } if (typeof value === "boolean") { return value ? createTrue() : createFalse(); } if (ts.isString(value)) { var res = createStringLiteral(value); if (isSingleQuote) res.singleQuote = true; return res; } return createLiteralFromNode(value); } ts.createLiteral = createLiteral; function createNumericLiteral(value) { var node = createSynthesizedNode(8); node.text = value; node.numericLiteralFlags = 0; return node; } ts.createNumericLiteral = createNumericLiteral; function createStringLiteral(text) { var node = createSynthesizedNode(9); node.text = text; return node; } ts.createStringLiteral = createStringLiteral; function createRegularExpressionLiteral(text) { var node = createSynthesizedNode(12); node.text = text; return node; } ts.createRegularExpressionLiteral = createRegularExpressionLiteral; function createLiteralFromNode(sourceNode) { var node = createStringLiteral(ts.getTextOfIdentifierOrLiteral(sourceNode)); node.textSourceNode = sourceNode; return node; } function createIdentifier(text, typeArguments) { var node = createSynthesizedNode(71); node.escapedText = ts.escapeLeadingUnderscores(text); node.originalKeywordKind = text ? ts.stringToToken(text) : 0; node.autoGenerateFlags = 0; node.autoGenerateId = 0; if (typeArguments) { node.typeArguments = createNodeArray(typeArguments); } return node; } ts.createIdentifier = createIdentifier; function updateIdentifier(node, typeArguments) { return node.typeArguments !== typeArguments ? updateNode(createIdentifier(ts.idText(node), typeArguments), node) : node; } ts.updateIdentifier = updateIdentifier; var nextAutoGenerateId = 0; function createTempVariable(recordTempVariable, reservedInNestedScopes) { var name = createIdentifier(""); name.autoGenerateFlags = 1; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; if (recordTempVariable) { recordTempVariable(name); } if (reservedInNestedScopes) { name.autoGenerateFlags |= 8; } return name; } ts.createTempVariable = createTempVariable; function createLoopVariable() { var name = createIdentifier(""); name.autoGenerateFlags = 2; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; } ts.createLoopVariable = createLoopVariable; function createUniqueName(text) { var name = createIdentifier(text); name.autoGenerateFlags = 3; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; } ts.createUniqueName = createUniqueName; function createOptimisticUniqueName(text) { var name = createIdentifier(text); name.autoGenerateFlags = 3 | 16; name.autoGenerateId = nextAutoGenerateId; nextAutoGenerateId++; return name; } ts.createOptimisticUniqueName = createOptimisticUniqueName; function createFileLevelUniqueName(text) { var name = createOptimisticUniqueName(text); name.autoGenerateFlags |= 32; return name; } ts.createFileLevelUniqueName = createFileLevelUniqueName; function getGeneratedNameForNode(node, flags) { var name = createIdentifier(ts.isIdentifier(node) ? ts.idText(node) : ""); name.autoGenerateFlags = 4 | flags; name.autoGenerateId = nextAutoGenerateId; name.original = node; nextAutoGenerateId++; return name; } ts.getGeneratedNameForNode = getGeneratedNameForNode; function createToken(token) { return createSynthesizedNode(token); } ts.createToken = createToken; function createSuper() { return createSynthesizedNode(97); } ts.createSuper = createSuper; function createThis() { return createSynthesizedNode(99); } ts.createThis = createThis; function createNull() { return createSynthesizedNode(95); } ts.createNull = createNull; function createTrue() { return createSynthesizedNode(101); } ts.createTrue = createTrue; function createFalse() { return createSynthesizedNode(86); } ts.createFalse = createFalse; function createModifier(kind) { return createToken(kind); } ts.createModifier = createModifier; function createModifiersFromModifierFlags(flags) { var result = []; if (flags & 1) { result.push(createModifier(84)); } if (flags & 2) { result.push(createModifier(124)); } if (flags & 512) { result.push(createModifier(79)); } if (flags & 2048) { result.push(createModifier(76)); } if (flags & 4) { result.push(createModifier(114)); } if (flags & 8) { result.push(createModifier(112)); } if (flags & 16) { result.push(createModifier(113)); } if (flags & 128) { result.push(createModifier(117)); } if (flags & 32) { result.push(createModifier(115)); } if (flags & 64) { result.push(createModifier(132)); } if (flags & 256) { result.push(createModifier(120)); } return result; } ts.createModifiersFromModifierFlags = createModifiersFromModifierFlags; function createQualifiedName(left, right) { var node = createSynthesizedNode(146); node.left = left; node.right = asName(right); return node; } ts.createQualifiedName = createQualifiedName; function updateQualifiedName(node, left, right) { return node.left !== left || node.right !== right ? updateNode(createQualifiedName(left, right), node) : node; } ts.updateQualifiedName = updateQualifiedName; function parenthesizeForComputedName(expression) { return (ts.isBinaryExpression(expression) && expression.operatorToken.kind === 26) || expression.kind === 303 ? createParen(expression) : expression; } function createComputedPropertyName(expression) { var node = createSynthesizedNode(147); node.expression = parenthesizeForComputedName(expression); return node; } ts.createComputedPropertyName = createComputedPropertyName; function updateComputedPropertyName(node, expression) { return node.expression !== expression ? updateNode(createComputedPropertyName(expression), node) : node; } ts.updateComputedPropertyName = updateComputedPropertyName; function createTypeParameterDeclaration(name, constraint, defaultType) { var node = createSynthesizedNode(148); node.name = asName(name); node.constraint = constraint; node.default = defaultType; return node; } ts.createTypeParameterDeclaration = createTypeParameterDeclaration; function updateTypeParameterDeclaration(node, name, constraint, defaultType) { return node.name !== name || node.constraint !== constraint || node.default !== defaultType ? updateNode(createTypeParameterDeclaration(name, constraint, defaultType), node) : node; } ts.updateTypeParameterDeclaration = updateTypeParameterDeclaration; function createParameter(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) { var node = createSynthesizedNode(149); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.dotDotDotToken = dotDotDotToken; node.name = asName(name); node.questionToken = questionToken; node.type = type; node.initializer = initializer ? ts.parenthesizeExpressionForList(initializer) : undefined; return node; } ts.createParameter = createParameter; function updateParameter(node, decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) { return node.decorators !== decorators || node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? updateNode(createParameter(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer), node) : node; } ts.updateParameter = updateParameter; function createDecorator(expression) { var node = createSynthesizedNode(150); node.expression = ts.parenthesizeForAccess(expression); return node; } ts.createDecorator = createDecorator; function updateDecorator(node, expression) { return node.expression !== expression ? updateNode(createDecorator(expression), node) : node; } ts.updateDecorator = updateDecorator; function createPropertySignature(modifiers, name, questionToken, type, initializer) { var node = createSynthesizedNode(151); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.questionToken = questionToken; node.type = type; node.initializer = initializer; return node; } ts.createPropertySignature = createPropertySignature; function updatePropertySignature(node, modifiers, name, questionToken, type, initializer) { return node.modifiers !== modifiers || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? updateNode(createPropertySignature(modifiers, name, questionToken, type, initializer), node) : node; } ts.updatePropertySignature = updatePropertySignature; function createProperty(decorators, modifiers, name, questionOrExclamationToken, type, initializer) { var node = createSynthesizedNode(152); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); 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; } ts.createProperty = createProperty; function updateProperty(node, decorators, modifiers, name, questionOrExclamationToken, type, initializer) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || 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) : node; } ts.updateProperty = updateProperty; function createMethodSignature(typeParameters, parameters, type, name, questionToken) { var node = createSignatureDeclaration(153, typeParameters, parameters, type); node.name = asName(name); node.questionToken = questionToken; return node; } ts.createMethodSignature = createMethodSignature; function updateMethodSignature(node, typeParameters, parameters, type, name, questionToken) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.name !== name || node.questionToken !== questionToken ? updateNode(createMethodSignature(typeParameters, parameters, type, name, questionToken), node) : node; } ts.updateMethodSignature = updateMethodSignature; function createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) { var node = createSynthesizedNode(154); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; node.name = asName(name); node.questionToken = questionToken; node.typeParameters = asNodeArray(typeParameters); node.parameters = createNodeArray(parameters); node.type = type; node.body = body; return node; } ts.createMethod = createMethod; function updateMethod(node, decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.questionToken !== questionToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? updateNode(createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node) : node; } ts.updateMethod = updateMethod; function createConstructor(decorators, modifiers, parameters, body) { var node = createSynthesizedNode(155); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.typeParameters = undefined; node.parameters = createNodeArray(parameters); node.type = undefined; node.body = body; return node; } ts.createConstructor = createConstructor; function updateConstructor(node, decorators, modifiers, parameters, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.parameters !== parameters || node.body !== body ? updateNode(createConstructor(decorators, modifiers, parameters, body), node) : node; } ts.updateConstructor = updateConstructor; function createGetAccessor(decorators, modifiers, name, parameters, type, body) { var node = createSynthesizedNode(156); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = undefined; node.parameters = createNodeArray(parameters); node.type = type; node.body = body; return node; } ts.createGetAccessor = createGetAccessor; function updateGetAccessor(node, decorators, modifiers, name, parameters, type, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.parameters !== parameters || node.type !== type || node.body !== body ? updateNode(createGetAccessor(decorators, modifiers, name, parameters, type, body), node) : node; } ts.updateGetAccessor = updateGetAccessor; function createSetAccessor(decorators, modifiers, name, parameters, body) { var node = createSynthesizedNode(157); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = undefined; node.parameters = createNodeArray(parameters); node.body = body; return node; } ts.createSetAccessor = createSetAccessor; function updateSetAccessor(node, decorators, modifiers, name, parameters, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.parameters !== parameters || node.body !== body ? updateNode(createSetAccessor(decorators, modifiers, name, parameters, body), node) : node; } ts.updateSetAccessor = updateSetAccessor; function createCallSignature(typeParameters, parameters, type) { return createSignatureDeclaration(158, typeParameters, parameters, type); } ts.createCallSignature = createCallSignature; function updateCallSignature(node, typeParameters, parameters, type) { return updateSignatureDeclaration(node, typeParameters, parameters, type); } ts.updateCallSignature = updateCallSignature; function createConstructSignature(typeParameters, parameters, type) { return createSignatureDeclaration(159, typeParameters, parameters, type); } ts.createConstructSignature = createConstructSignature; function updateConstructSignature(node, typeParameters, parameters, type) { return updateSignatureDeclaration(node, typeParameters, parameters, type); } ts.updateConstructSignature = updateConstructSignature; function createIndexSignature(decorators, modifiers, parameters, type) { var node = createSynthesizedNode(160); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.parameters = createNodeArray(parameters); node.type = type; return node; } ts.createIndexSignature = createIndexSignature; function updateIndexSignature(node, decorators, modifiers, parameters, type) { return node.parameters !== parameters || node.type !== type || node.decorators !== decorators || node.modifiers !== modifiers ? updateNode(createIndexSignature(decorators, modifiers, parameters, type), node) : node; } ts.updateIndexSignature = updateIndexSignature; function createSignatureDeclaration(kind, typeParameters, parameters, type, typeArguments) { var node = createSynthesizedNode(kind); node.typeParameters = asNodeArray(typeParameters); node.parameters = asNodeArray(parameters); node.type = type; node.typeArguments = asNodeArray(typeArguments); return node; } ts.createSignatureDeclaration = createSignatureDeclaration; function updateSignatureDeclaration(node, typeParameters, parameters, type) { return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node) : node; } function createKeywordTypeNode(kind) { return createSynthesizedNode(kind); } ts.createKeywordTypeNode = createKeywordTypeNode; function createTypePredicateNode(parameterName, type) { var node = createSynthesizedNode(161); node.parameterName = asName(parameterName); node.type = type; return node; } ts.createTypePredicateNode = createTypePredicateNode; function updateTypePredicateNode(node, parameterName, type) { return node.parameterName !== parameterName || node.type !== type ? updateNode(createTypePredicateNode(parameterName, type), node) : node; } ts.updateTypePredicateNode = updateTypePredicateNode; function createTypeReferenceNode(typeName, typeArguments) { var node = createSynthesizedNode(162); node.typeName = asName(typeName); node.typeArguments = typeArguments && ts.parenthesizeTypeParameters(typeArguments); return node; } ts.createTypeReferenceNode = createTypeReferenceNode; function updateTypeReferenceNode(node, typeName, typeArguments) { return node.typeName !== typeName || node.typeArguments !== typeArguments ? updateNode(createTypeReferenceNode(typeName, typeArguments), node) : node; } ts.updateTypeReferenceNode = updateTypeReferenceNode; function createFunctionTypeNode(typeParameters, parameters, type) { return createSignatureDeclaration(163, typeParameters, parameters, type); } ts.createFunctionTypeNode = createFunctionTypeNode; function updateFunctionTypeNode(node, typeParameters, parameters, type) { return updateSignatureDeclaration(node, typeParameters, parameters, type); } ts.updateFunctionTypeNode = updateFunctionTypeNode; function createConstructorTypeNode(typeParameters, parameters, type) { return createSignatureDeclaration(164, typeParameters, parameters, type); } ts.createConstructorTypeNode = createConstructorTypeNode; function updateConstructorTypeNode(node, typeParameters, parameters, type) { return updateSignatureDeclaration(node, typeParameters, parameters, type); } ts.updateConstructorTypeNode = updateConstructorTypeNode; function createTypeQueryNode(exprName) { var node = createSynthesizedNode(165); node.exprName = exprName; return node; } ts.createTypeQueryNode = createTypeQueryNode; function updateTypeQueryNode(node, exprName) { return node.exprName !== exprName ? updateNode(createTypeQueryNode(exprName), node) : node; } ts.updateTypeQueryNode = updateTypeQueryNode; function createTypeLiteralNode(members) { var node = createSynthesizedNode(166); node.members = createNodeArray(members); return node; } ts.createTypeLiteralNode = createTypeLiteralNode; function updateTypeLiteralNode(node, members) { return node.members !== members ? updateNode(createTypeLiteralNode(members), node) : node; } ts.updateTypeLiteralNode = updateTypeLiteralNode; function createArrayTypeNode(elementType) { var node = createSynthesizedNode(167); node.elementType = ts.parenthesizeArrayTypeMember(elementType); return node; } ts.createArrayTypeNode = createArrayTypeNode; function updateArrayTypeNode(node, elementType) { return node.elementType !== elementType ? updateNode(createArrayTypeNode(elementType), node) : node; } ts.updateArrayTypeNode = updateArrayTypeNode; function createTupleTypeNode(elementTypes) { var node = createSynthesizedNode(168); node.elementTypes = createNodeArray(elementTypes); return node; } ts.createTupleTypeNode = createTupleTypeNode; function updateTypleTypeNode(node, elementTypes) { return node.elementTypes !== elementTypes ? updateNode(createTupleTypeNode(elementTypes), node) : node; } ts.updateTypleTypeNode = updateTypleTypeNode; function createUnionTypeNode(types) { return createUnionOrIntersectionTypeNode(169, types); } ts.createUnionTypeNode = createUnionTypeNode; function updateUnionTypeNode(node, types) { return updateUnionOrIntersectionTypeNode(node, types); } ts.updateUnionTypeNode = updateUnionTypeNode; function createIntersectionTypeNode(types) { return createUnionOrIntersectionTypeNode(170, types); } ts.createIntersectionTypeNode = createIntersectionTypeNode; function updateIntersectionTypeNode(node, types) { return updateUnionOrIntersectionTypeNode(node, types); } ts.updateIntersectionTypeNode = updateIntersectionTypeNode; function createUnionOrIntersectionTypeNode(kind, types) { var node = createSynthesizedNode(kind); node.types = ts.parenthesizeElementTypeMembers(types); return node; } ts.createUnionOrIntersectionTypeNode = createUnionOrIntersectionTypeNode; function updateUnionOrIntersectionTypeNode(node, types) { return node.types !== types ? updateNode(createUnionOrIntersectionTypeNode(node.kind, types), node) : node; } function createConditionalTypeNode(checkType, extendsType, trueType, falseType) { var node = createSynthesizedNode(171); node.checkType = ts.parenthesizeConditionalTypeMember(checkType); node.extendsType = ts.parenthesizeConditionalTypeMember(extendsType); node.trueType = trueType; node.falseType = falseType; return node; } ts.createConditionalTypeNode = createConditionalTypeNode; function updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType) { return node.checkType !== checkType || node.extendsType !== extendsType || node.trueType !== trueType || node.falseType !== falseType ? updateNode(createConditionalTypeNode(checkType, extendsType, trueType, falseType), node) : node; } ts.updateConditionalTypeNode = updateConditionalTypeNode; function createInferTypeNode(typeParameter) { var node = createSynthesizedNode(172); node.typeParameter = typeParameter; return node; } ts.createInferTypeNode = createInferTypeNode; function updateInferTypeNode(node, typeParameter) { return node.typeParameter !== typeParameter ? updateNode(createInferTypeNode(typeParameter), node) : node; } ts.updateInferTypeNode = updateInferTypeNode; function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) { var node = createSynthesizedNode(179); node.argument = argument; node.qualifier = qualifier; node.typeArguments = asNodeArray(typeArguments); node.isTypeOf = isTypeOf; return node; } ts.createImportTypeNode = createImportTypeNode; function updateImportTypeNode(node, argument, qualifier, typeArguments, isTypeOf) { return node.argument !== argument || node.qualifier !== qualifier || node.typeArguments !== typeArguments || node.isTypeOf !== isTypeOf ? updateNode(createImportTypeNode(argument, qualifier, typeArguments, isTypeOf), node) : node; } ts.updateImportTypeNode = updateImportTypeNode; function createParenthesizedType(type) { var node = createSynthesizedNode(173); node.type = type; return node; } ts.createParenthesizedType = createParenthesizedType; function updateParenthesizedType(node, type) { return node.type !== type ? updateNode(createParenthesizedType(type), node) : node; } ts.updateParenthesizedType = updateParenthesizedType; function createThisTypeNode() { return createSynthesizedNode(174); } ts.createThisTypeNode = createThisTypeNode; function createTypeOperatorNode(operatorOrType, type) { var node = createSynthesizedNode(175); node.operator = typeof operatorOrType === "number" ? operatorOrType : 128; node.type = ts.parenthesizeElementTypeMember(typeof operatorOrType === "number" ? type : operatorOrType); return node; } ts.createTypeOperatorNode = createTypeOperatorNode; function updateTypeOperatorNode(node, type) { return node.type !== type ? updateNode(createTypeOperatorNode(node.operator, type), node) : node; } ts.updateTypeOperatorNode = updateTypeOperatorNode; function createIndexedAccessTypeNode(objectType, indexType) { var node = createSynthesizedNode(176); node.objectType = ts.parenthesizeElementTypeMember(objectType); node.indexType = indexType; return node; } ts.createIndexedAccessTypeNode = createIndexedAccessTypeNode; function updateIndexedAccessTypeNode(node, objectType, indexType) { return node.objectType !== objectType || node.indexType !== indexType ? updateNode(createIndexedAccessTypeNode(objectType, indexType), node) : node; } ts.updateIndexedAccessTypeNode = updateIndexedAccessTypeNode; function createMappedTypeNode(readonlyToken, typeParameter, questionToken, type) { var node = createSynthesizedNode(177); node.readonlyToken = readonlyToken; node.typeParameter = typeParameter; node.questionToken = questionToken; node.type = type; return node; } ts.createMappedTypeNode = createMappedTypeNode; function updateMappedTypeNode(node, readonlyToken, typeParameter, questionToken, type) { return node.readonlyToken !== readonlyToken || node.typeParameter !== typeParameter || node.questionToken !== questionToken || node.type !== type ? updateNode(createMappedTypeNode(readonlyToken, typeParameter, questionToken, type), node) : node; } ts.updateMappedTypeNode = updateMappedTypeNode; function createLiteralTypeNode(literal) { var node = createSynthesizedNode(178); node.literal = literal; return node; } ts.createLiteralTypeNode = createLiteralTypeNode; function updateLiteralTypeNode(node, literal) { return node.literal !== literal ? updateNode(createLiteralTypeNode(literal), node) : node; } ts.updateLiteralTypeNode = updateLiteralTypeNode; function createObjectBindingPattern(elements) { var node = createSynthesizedNode(180); node.elements = createNodeArray(elements); return node; } ts.createObjectBindingPattern = createObjectBindingPattern; function updateObjectBindingPattern(node, elements) { return node.elements !== elements ? updateNode(createObjectBindingPattern(elements), node) : node; } ts.updateObjectBindingPattern = updateObjectBindingPattern; function createArrayBindingPattern(elements) { var node = createSynthesizedNode(181); node.elements = createNodeArray(elements); return node; } ts.createArrayBindingPattern = createArrayBindingPattern; function updateArrayBindingPattern(node, elements) { return node.elements !== elements ? updateNode(createArrayBindingPattern(elements), node) : node; } ts.updateArrayBindingPattern = updateArrayBindingPattern; function createBindingElement(dotDotDotToken, propertyName, name, initializer) { var node = createSynthesizedNode(182); node.dotDotDotToken = dotDotDotToken; node.propertyName = asName(propertyName); node.name = asName(name); node.initializer = initializer; return node; } ts.createBindingElement = createBindingElement; function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) { return node.propertyName !== propertyName || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.initializer !== initializer ? updateNode(createBindingElement(dotDotDotToken, propertyName, name, initializer), node) : node; } ts.updateBindingElement = updateBindingElement; function createArrayLiteral(elements, multiLine) { var node = createSynthesizedNode(183); node.elements = ts.parenthesizeListElements(createNodeArray(elements)); if (multiLine) node.multiLine = true; return node; } ts.createArrayLiteral = createArrayLiteral; function updateArrayLiteral(node, elements) { return node.elements !== elements ? updateNode(createArrayLiteral(elements, node.multiLine), node) : node; } ts.updateArrayLiteral = updateArrayLiteral; function createObjectLiteral(properties, multiLine) { var node = createSynthesizedNode(184); node.properties = createNodeArray(properties); if (multiLine) node.multiLine = true; return node; } ts.createObjectLiteral = createObjectLiteral; function updateObjectLiteral(node, properties) { return node.properties !== properties ? updateNode(createObjectLiteral(properties, node.multiLine), node) : node; } ts.updateObjectLiteral = updateObjectLiteral; function createPropertyAccess(expression, name) { var node = createSynthesizedNode(185); node.expression = ts.parenthesizeForAccess(expression); node.name = asName(name); setEmitFlags(node, 131072); return node; } ts.createPropertyAccess = createPropertyAccess; function updatePropertyAccess(node, expression, name) { return node.expression !== expression || node.name !== name ? updateNode(setEmitFlags(createPropertyAccess(expression, name), ts.getEmitFlags(node)), node) : node; } ts.updatePropertyAccess = updatePropertyAccess; function createElementAccess(expression, index) { var node = createSynthesizedNode(186); node.expression = ts.parenthesizeForAccess(expression); node.argumentExpression = asExpression(index); return node; } ts.createElementAccess = createElementAccess; function updateElementAccess(node, expression, argumentExpression) { return node.expression !== expression || node.argumentExpression !== argumentExpression ? updateNode(createElementAccess(expression, argumentExpression), node) : node; } ts.updateElementAccess = updateElementAccess; function createCall(expression, typeArguments, argumentsArray) { var node = createSynthesizedNode(187); node.expression = ts.parenthesizeForAccess(expression); node.typeArguments = asNodeArray(typeArguments); node.arguments = ts.parenthesizeListElements(createNodeArray(argumentsArray)); return node; } ts.createCall = createCall; function updateCall(node, expression, typeArguments, argumentsArray) { return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== argumentsArray ? updateNode(createCall(expression, typeArguments, argumentsArray), node) : node; } ts.updateCall = updateCall; function createNew(expression, typeArguments, argumentsArray) { var node = createSynthesizedNode(188); node.expression = ts.parenthesizeForNew(expression); node.typeArguments = asNodeArray(typeArguments); node.arguments = argumentsArray ? ts.parenthesizeListElements(createNodeArray(argumentsArray)) : undefined; return node; } ts.createNew = createNew; function updateNew(node, expression, typeArguments, argumentsArray) { return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== argumentsArray ? updateNode(createNew(expression, typeArguments, argumentsArray), node) : node; } ts.updateNew = updateNew; function createTaggedTemplate(tag, typeArgumentsOrTemplate, template) { var node = createSynthesizedNode(189); node.tag = ts.parenthesizeForAccess(tag); if (template) { node.typeArguments = asNodeArray(typeArgumentsOrTemplate); node.template = template; } else { node.typeArguments = undefined; node.template = typeArgumentsOrTemplate; } return node; } ts.createTaggedTemplate = createTaggedTemplate; function updateTaggedTemplate(node, tag, typeArgumentsOrTemplate, template) { return node.tag !== tag || (template ? node.typeArguments !== typeArgumentsOrTemplate || node.template !== template : node.typeArguments !== undefined || node.template !== typeArgumentsOrTemplate) ? updateNode(createTaggedTemplate(tag, typeArgumentsOrTemplate, template), node) : node; } ts.updateTaggedTemplate = updateTaggedTemplate; function createTypeAssertion(type, expression) { var node = createSynthesizedNode(190); node.type = type; node.expression = ts.parenthesizePrefixOperand(expression); return node; } ts.createTypeAssertion = createTypeAssertion; function updateTypeAssertion(node, type, expression) { return node.type !== type || node.expression !== expression ? updateNode(createTypeAssertion(type, expression), node) : node; } ts.updateTypeAssertion = updateTypeAssertion; function createParen(expression) { var node = createSynthesizedNode(191); node.expression = expression; return node; } ts.createParen = createParen; function updateParen(node, expression) { return node.expression !== expression ? updateNode(createParen(expression), node) : node; } ts.updateParen = updateParen; function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { var node = createSynthesizedNode(192); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.parameters = createNodeArray(parameters); node.type = type; node.body = body; return node; } ts.createFunctionExpression = createFunctionExpression; function updateFunctionExpression(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return node.name !== name || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? updateNode(createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node) : node; } ts.updateFunctionExpression = updateFunctionExpression; function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { var node = createSynthesizedNode(193); node.modifiers = asNodeArray(modifiers); node.typeParameters = asNodeArray(typeParameters); node.parameters = createNodeArray(parameters); node.type = type; node.equalsGreaterThanToken = equalsGreaterThanToken || createToken(36); node.body = ts.parenthesizeConciseBody(body); return node; } ts.createArrowFunction = createArrowFunction; function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, bodyOrUndefined) { var equalsGreaterThanToken; var body; if (bodyOrUndefined === undefined) { equalsGreaterThanToken = node.equalsGreaterThanToken; body = ts.cast(equalsGreaterThanTokenOrBody, ts.isConciseBody); } else { equalsGreaterThanToken = ts.cast(equalsGreaterThanTokenOrBody, function (n) { return n.kind === 36; }); body = bodyOrUndefined; } return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.equalsGreaterThanToken !== equalsGreaterThanToken || node.body !== body ? updateNode(createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body), node) : node; } ts.updateArrowFunction = updateArrowFunction; function createDelete(expression) { var node = createSynthesizedNode(194); node.expression = ts.parenthesizePrefixOperand(expression); return node; } ts.createDelete = createDelete; function updateDelete(node, expression) { return node.expression !== expression ? updateNode(createDelete(expression), node) : node; } ts.updateDelete = updateDelete; function createTypeOf(expression) { var node = createSynthesizedNode(195); node.expression = ts.parenthesizePrefixOperand(expression); return node; } ts.createTypeOf = createTypeOf; function updateTypeOf(node, expression) { return node.expression !== expression ? updateNode(createTypeOf(expression), node) : node; } ts.updateTypeOf = updateTypeOf; function createVoid(expression) { var node = createSynthesizedNode(196); node.expression = ts.parenthesizePrefixOperand(expression); return node; } ts.createVoid = createVoid; function updateVoid(node, expression) { return node.expression !== expression ? updateNode(createVoid(expression), node) : node; } ts.updateVoid = updateVoid; function createAwait(expression) { var node = createSynthesizedNode(197); node.expression = ts.parenthesizePrefixOperand(expression); return node; } ts.createAwait = createAwait; function updateAwait(node, expression) { return node.expression !== expression ? updateNode(createAwait(expression), node) : node; } ts.updateAwait = updateAwait; function createPrefix(operator, operand) { var node = createSynthesizedNode(198); node.operator = operator; node.operand = ts.parenthesizePrefixOperand(operand); return node; } ts.createPrefix = createPrefix; function updatePrefix(node, operand) { return node.operand !== operand ? updateNode(createPrefix(node.operator, operand), node) : node; } ts.updatePrefix = updatePrefix; function createPostfix(operand, operator) { var node = createSynthesizedNode(199); node.operand = ts.parenthesizePostfixOperand(operand); node.operator = operator; return node; } ts.createPostfix = createPostfix; function updatePostfix(node, operand) { return node.operand !== operand ? updateNode(createPostfix(operand, node.operator), node) : node; } ts.updatePostfix = updatePostfix; function createBinary(left, operator, right) { var node = createSynthesizedNode(200); var operatorToken = asToken(operator); var operatorKind = operatorToken.kind; node.left = ts.parenthesizeBinaryOperand(operatorKind, left, true, undefined); node.operatorToken = operatorToken; node.right = ts.parenthesizeBinaryOperand(operatorKind, right, false, node.left); return node; } ts.createBinary = createBinary; function updateBinary(node, left, right, operator) { return node.left !== left || node.right !== right ? updateNode(createBinary(left, operator || node.operatorToken, right), node) : node; } ts.updateBinary = updateBinary; function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) { var node = createSynthesizedNode(201); node.condition = ts.parenthesizeForConditionalHead(condition); node.questionToken = whenFalse ? questionTokenOrWhenTrue : createToken(55); node.whenTrue = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenTrueOrWhenFalse : questionTokenOrWhenTrue); node.colonToken = whenFalse ? colonToken : createToken(56); node.whenFalse = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenFalse : whenTrueOrWhenFalse); return node; } ts.createConditional = createConditional; function updateConditional(node, condition) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } if (args.length === 2) { var whenTrue_1 = args[0], whenFalse_1 = args[1]; return updateConditional(node, condition, node.questionToken, whenTrue_1, node.colonToken, whenFalse_1); } ts.Debug.assert(args.length === 4); var questionToken = args[0], whenTrue = args[1], colonToken = args[2], whenFalse = args[3]; return node.condition !== condition || node.questionToken !== questionToken || node.whenTrue !== whenTrue || node.colonToken !== colonToken || node.whenFalse !== whenFalse ? updateNode(createConditional(condition, questionToken, whenTrue, colonToken, whenFalse), node) : node; } ts.updateConditional = updateConditional; function createTemplateExpression(head, templateSpans) { var node = createSynthesizedNode(202); node.head = head; node.templateSpans = createNodeArray(templateSpans); return node; } ts.createTemplateExpression = createTemplateExpression; function updateTemplateExpression(node, head, templateSpans) { return node.head !== head || node.templateSpans !== templateSpans ? updateNode(createTemplateExpression(head, templateSpans), node) : node; } ts.updateTemplateExpression = updateTemplateExpression; function createTemplateHead(text) { var node = createSynthesizedNode(14); node.text = text; return node; } ts.createTemplateHead = createTemplateHead; function createTemplateMiddle(text) { var node = createSynthesizedNode(15); node.text = text; return node; } ts.createTemplateMiddle = createTemplateMiddle; function createTemplateTail(text) { var node = createSynthesizedNode(16); node.text = text; return node; } ts.createTemplateTail = createTemplateTail; function createNoSubstitutionTemplateLiteral(text) { var node = createSynthesizedNode(13); node.text = text; return node; } ts.createNoSubstitutionTemplateLiteral = createNoSubstitutionTemplateLiteral; function createYield(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; function updateYield(node, asteriskToken, expression) { return node.expression !== expression || node.asteriskToken !== asteriskToken ? updateNode(createYield(asteriskToken, expression), node) : node; } ts.updateYield = updateYield; function createSpread(expression) { var node = createSynthesizedNode(204); node.expression = ts.parenthesizeExpressionForList(expression); return node; } ts.createSpread = createSpread; function updateSpread(node, expression) { return node.expression !== expression ? updateNode(createSpread(expression), node) : node; } ts.updateSpread = updateSpread; function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) { var node = createSynthesizedNode(205); node.decorators = undefined; node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.heritageClauses = asNodeArray(heritageClauses); node.members = createNodeArray(members); return node; } ts.createClassExpression = createClassExpression; function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) { return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? updateNode(createClassExpression(modifiers, name, typeParameters, heritageClauses, members), node) : node; } ts.updateClassExpression = updateClassExpression; function createOmittedExpression() { return createSynthesizedNode(206); } ts.createOmittedExpression = createOmittedExpression; function createExpressionWithTypeArguments(typeArguments, expression) { var node = createSynthesizedNode(207); node.expression = ts.parenthesizeForAccess(expression); node.typeArguments = asNodeArray(typeArguments); return node; } ts.createExpressionWithTypeArguments = createExpressionWithTypeArguments; function updateExpressionWithTypeArguments(node, typeArguments, expression) { return node.typeArguments !== typeArguments || node.expression !== expression ? updateNode(createExpressionWithTypeArguments(typeArguments, expression), node) : node; } ts.updateExpressionWithTypeArguments = updateExpressionWithTypeArguments; function createAsExpression(expression, type) { var node = createSynthesizedNode(208); node.expression = expression; node.type = type; return node; } ts.createAsExpression = createAsExpression; function updateAsExpression(node, expression, type) { return node.expression !== expression || node.type !== type ? updateNode(createAsExpression(expression, type), node) : node; } ts.updateAsExpression = updateAsExpression; function createNonNullExpression(expression) { var node = createSynthesizedNode(209); node.expression = ts.parenthesizeForAccess(expression); return node; } ts.createNonNullExpression = createNonNullExpression; function updateNonNullExpression(node, expression) { return node.expression !== expression ? updateNode(createNonNullExpression(expression), node) : node; } ts.updateNonNullExpression = updateNonNullExpression; function createMetaProperty(keywordToken, name) { var node = createSynthesizedNode(210); node.keywordToken = keywordToken; node.name = name; return node; } ts.createMetaProperty = createMetaProperty; function updateMetaProperty(node, name) { return node.name !== name ? updateNode(createMetaProperty(node.keywordToken, name), node) : node; } ts.updateMetaProperty = updateMetaProperty; function createTemplateSpan(expression, literal) { var node = createSynthesizedNode(211); node.expression = expression; node.literal = literal; return node; } ts.createTemplateSpan = createTemplateSpan; function updateTemplateSpan(node, expression, literal) { return node.expression !== expression || node.literal !== literal ? updateNode(createTemplateSpan(expression, literal), node) : node; } ts.updateTemplateSpan = updateTemplateSpan; function createSemicolonClassElement() { return createSynthesizedNode(212); } ts.createSemicolonClassElement = createSemicolonClassElement; function createBlock(statements, multiLine) { var block = createSynthesizedNode(213); block.statements = createNodeArray(statements); if (multiLine) block.multiLine = multiLine; return block; } ts.createBlock = createBlock; function createExpressionStatement(expression) { var node = createSynthesizedNode(216); node.expression = expression; return node; } ts.createExpressionStatement = createExpressionStatement; function updateBlock(node, statements) { return node.statements !== statements ? updateNode(createBlock(statements, node.multiLine), node) : node; } ts.updateBlock = updateBlock; function createVariableStatement(modifiers, declarationList) { var node = createSynthesizedNode(214); node.decorators = undefined; node.modifiers = asNodeArray(modifiers); node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList; return node; } ts.createVariableStatement = createVariableStatement; function updateVariableStatement(node, modifiers, declarationList) { return node.modifiers !== modifiers || node.declarationList !== declarationList ? updateNode(createVariableStatement(modifiers, declarationList), node) : node; } ts.updateVariableStatement = updateVariableStatement; function createEmptyStatement() { return createSynthesizedNode(215); } ts.createEmptyStatement = createEmptyStatement; function createStatement(expression) { return createExpressionStatement(ts.parenthesizeExpressionForExpressionStatement(expression)); } ts.createStatement = createStatement; function updateStatement(node, expression) { return node.expression !== expression ? updateNode(createStatement(expression), node) : node; } ts.updateStatement = updateStatement; function createIf(expression, thenStatement, elseStatement) { var node = createSynthesizedNode(217); node.expression = expression; node.thenStatement = thenStatement; node.elseStatement = elseStatement; return node; } ts.createIf = createIf; function updateIf(node, expression, thenStatement, elseStatement) { return node.expression !== expression || node.thenStatement !== thenStatement || node.elseStatement !== elseStatement ? updateNode(createIf(expression, thenStatement, elseStatement), node) : node; } ts.updateIf = updateIf; function createDo(statement, expression) { var node = createSynthesizedNode(218); node.statement = statement; node.expression = expression; return node; } ts.createDo = createDo; function updateDo(node, statement, expression) { return node.statement !== statement || node.expression !== expression ? updateNode(createDo(statement, expression), node) : node; } ts.updateDo = updateDo; function createWhile(expression, statement) { var node = createSynthesizedNode(219); node.expression = expression; node.statement = statement; return node; } ts.createWhile = createWhile; function updateWhile(node, expression, statement) { return node.expression !== expression || node.statement !== statement ? updateNode(createWhile(expression, statement), node) : node; } ts.updateWhile = updateWhile; function createFor(initializer, condition, incrementor, statement) { var node = createSynthesizedNode(220); node.initializer = initializer; node.condition = condition; node.incrementor = incrementor; node.statement = statement; return node; } ts.createFor = createFor; function updateFor(node, initializer, condition, incrementor, statement) { return node.initializer !== initializer || node.condition !== condition || node.incrementor !== incrementor || node.statement !== statement ? updateNode(createFor(initializer, condition, incrementor, statement), node) : node; } ts.updateFor = updateFor; function createForIn(initializer, expression, statement) { var node = createSynthesizedNode(221); node.initializer = initializer; node.expression = expression; node.statement = statement; return node; } ts.createForIn = createForIn; function updateForIn(node, initializer, expression, statement) { return node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? updateNode(createForIn(initializer, expression, statement), node) : node; } ts.updateForIn = updateForIn; function createForOf(awaitModifier, initializer, expression, statement) { var node = createSynthesizedNode(222); node.awaitModifier = awaitModifier; node.initializer = initializer; node.expression = expression; node.statement = statement; return node; } ts.createForOf = createForOf; function updateForOf(node, awaitModifier, initializer, expression, statement) { return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? updateNode(createForOf(awaitModifier, initializer, expression, statement), node) : node; } ts.updateForOf = updateForOf; function createContinue(label) { var node = createSynthesizedNode(223); node.label = asName(label); return node; } ts.createContinue = createContinue; function updateContinue(node, label) { return node.label !== label ? updateNode(createContinue(label), node) : node; } ts.updateContinue = updateContinue; function createBreak(label) { var node = createSynthesizedNode(224); node.label = asName(label); return node; } ts.createBreak = createBreak; function updateBreak(node, label) { return node.label !== label ? updateNode(createBreak(label), node) : node; } ts.updateBreak = updateBreak; function createReturn(expression) { var node = createSynthesizedNode(225); node.expression = expression; return node; } ts.createReturn = createReturn; function updateReturn(node, expression) { return node.expression !== expression ? updateNode(createReturn(expression), node) : node; } ts.updateReturn = updateReturn; function createWith(expression, statement) { var node = createSynthesizedNode(226); node.expression = expression; node.statement = statement; return node; } ts.createWith = createWith; function updateWith(node, expression, statement) { return node.expression !== expression || node.statement !== statement ? updateNode(createWith(expression, statement), node) : node; } ts.updateWith = updateWith; function createSwitch(expression, caseBlock) { var node = createSynthesizedNode(227); node.expression = ts.parenthesizeExpressionForList(expression); node.caseBlock = caseBlock; return node; } ts.createSwitch = createSwitch; function updateSwitch(node, expression, caseBlock) { return node.expression !== expression || node.caseBlock !== caseBlock ? updateNode(createSwitch(expression, caseBlock), node) : node; } ts.updateSwitch = updateSwitch; function createLabel(label, statement) { var node = createSynthesizedNode(228); node.label = asName(label); node.statement = statement; return node; } ts.createLabel = createLabel; function updateLabel(node, label, statement) { return node.label !== label || node.statement !== statement ? updateNode(createLabel(label, statement), node) : node; } ts.updateLabel = updateLabel; function createThrow(expression) { var node = createSynthesizedNode(229); node.expression = expression; return node; } ts.createThrow = createThrow; function updateThrow(node, expression) { return node.expression !== expression ? updateNode(createThrow(expression), node) : node; } ts.updateThrow = updateThrow; function createTry(tryBlock, catchClause, finallyBlock) { var node = createSynthesizedNode(230); node.tryBlock = tryBlock; node.catchClause = catchClause; node.finallyBlock = finallyBlock; return node; } ts.createTry = createTry; function updateTry(node, tryBlock, catchClause, finallyBlock) { return node.tryBlock !== tryBlock || node.catchClause !== catchClause || node.finallyBlock !== finallyBlock ? updateNode(createTry(tryBlock, catchClause, finallyBlock), node) : node; } ts.updateTry = updateTry; function createDebuggerStatement() { return createSynthesizedNode(231); } ts.createDebuggerStatement = createDebuggerStatement; function createVariableDeclaration(name, type, initializer) { var node = createSynthesizedNode(232); node.name = asName(name); node.type = type; node.initializer = initializer !== undefined ? ts.parenthesizeExpressionForList(initializer) : undefined; return node; } ts.createVariableDeclaration = createVariableDeclaration; function updateVariableDeclaration(node, name, type, initializer) { return node.name !== name || node.type !== type || node.initializer !== initializer ? updateNode(createVariableDeclaration(name, type, initializer), node) : node; } ts.updateVariableDeclaration = updateVariableDeclaration; function createVariableDeclarationList(declarations, flags) { if (flags === void 0) { flags = 0; } var node = createSynthesizedNode(233); node.flags |= flags & 3; node.declarations = createNodeArray(declarations); return node; } ts.createVariableDeclarationList = createVariableDeclarationList; function updateVariableDeclarationList(node, declarations) { return node.declarations !== declarations ? updateNode(createVariableDeclarationList(declarations, node.flags), node) : node; } ts.updateVariableDeclarationList = updateVariableDeclarationList; function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { var node = createSynthesizedNode(234); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.asteriskToken = asteriskToken; node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.parameters = createNodeArray(parameters); node.type = type; node.body = body; return node; } ts.createFunctionDeclaration = createFunctionDeclaration; function updateFunctionDeclaration(node, decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? updateNode(createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body), node) : node; } ts.updateFunctionDeclaration = updateFunctionDeclaration; function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) { var node = createSynthesizedNode(235); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.heritageClauses = asNodeArray(heritageClauses); node.members = createNodeArray(members); return node; } ts.createClassDeclaration = createClassDeclaration; function updateClassDeclaration(node, decorators, modifiers, name, typeParameters, heritageClauses, members) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? updateNode(createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members), node) : node; } ts.updateClassDeclaration = updateClassDeclaration; function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) { var node = createSynthesizedNode(236); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.heritageClauses = asNodeArray(heritageClauses); node.members = createNodeArray(members); return node; } ts.createInterfaceDeclaration = createInterfaceDeclaration; function updateInterfaceDeclaration(node, decorators, modifiers, name, typeParameters, heritageClauses, members) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? updateNode(createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members), node) : node; } ts.updateInterfaceDeclaration = updateInterfaceDeclaration; function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) { var node = createSynthesizedNode(237); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.typeParameters = asNodeArray(typeParameters); node.type = type; return node; } ts.createTypeAliasDeclaration = createTypeAliasDeclaration; function updateTypeAliasDeclaration(node, decorators, modifiers, name, typeParameters, type) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.type !== type ? updateNode(createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type), node) : node; } ts.updateTypeAliasDeclaration = updateTypeAliasDeclaration; function createEnumDeclaration(decorators, modifiers, name, members) { var node = createSynthesizedNode(238); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.members = createNodeArray(members); return node; } ts.createEnumDeclaration = createEnumDeclaration; function updateEnumDeclaration(node, decorators, modifiers, name, members) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.members !== members ? updateNode(createEnumDeclaration(decorators, modifiers, name, members), node) : node; } ts.updateEnumDeclaration = updateEnumDeclaration; function createModuleDeclaration(decorators, modifiers, name, body, flags) { 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; node.body = body; return node; } ts.createModuleDeclaration = createModuleDeclaration; function updateModuleDeclaration(node, decorators, modifiers, name, body) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.body !== body ? updateNode(createModuleDeclaration(decorators, modifiers, name, body, node.flags), node) : node; } ts.updateModuleDeclaration = updateModuleDeclaration; function createModuleBlock(statements) { var node = createSynthesizedNode(240); node.statements = createNodeArray(statements); return node; } ts.createModuleBlock = createModuleBlock; function updateModuleBlock(node, statements) { return node.statements !== statements ? updateNode(createModuleBlock(statements), node) : node; } ts.updateModuleBlock = updateModuleBlock; function createCaseBlock(clauses) { var node = createSynthesizedNode(241); node.clauses = createNodeArray(clauses); return node; } ts.createCaseBlock = createCaseBlock; function updateCaseBlock(node, clauses) { return node.clauses !== clauses ? updateNode(createCaseBlock(clauses), node) : node; } ts.updateCaseBlock = updateCaseBlock; function createNamespaceExportDeclaration(name) { var node = createSynthesizedNode(242); node.name = asName(name); return node; } ts.createNamespaceExportDeclaration = createNamespaceExportDeclaration; function updateNamespaceExportDeclaration(node, name) { return node.name !== name ? updateNode(createNamespaceExportDeclaration(name), node) : node; } ts.updateNamespaceExportDeclaration = updateNamespaceExportDeclaration; function createImportEqualsDeclaration(decorators, modifiers, name, moduleReference) { var node = createSynthesizedNode(243); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = asName(name); node.moduleReference = moduleReference; return node; } ts.createImportEqualsDeclaration = createImportEqualsDeclaration; function updateImportEqualsDeclaration(node, decorators, modifiers, name, moduleReference) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name || node.moduleReference !== moduleReference ? updateNode(createImportEqualsDeclaration(decorators, modifiers, name, moduleReference), node) : node; } ts.updateImportEqualsDeclaration = updateImportEqualsDeclaration; function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) { var node = createSynthesizedNode(244); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.importClause = importClause; node.moduleSpecifier = moduleSpecifier; return node; } ts.createImportDeclaration = createImportDeclaration; function updateImportDeclaration(node, decorators, modifiers, importClause, moduleSpecifier) { return node.decorators !== decorators || node.modifiers !== modifiers || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier ? updateNode(createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier), node) : node; } ts.updateImportDeclaration = updateImportDeclaration; function createImportClause(name, namedBindings) { var node = createSynthesizedNode(245); node.name = name; node.namedBindings = namedBindings; return node; } ts.createImportClause = createImportClause; function updateImportClause(node, name, namedBindings) { return node.name !== name || node.namedBindings !== namedBindings ? updateNode(createImportClause(name, namedBindings), node) : node; } ts.updateImportClause = updateImportClause; function createNamespaceImport(name) { var node = createSynthesizedNode(246); node.name = name; return node; } ts.createNamespaceImport = createNamespaceImport; function updateNamespaceImport(node, name) { return node.name !== name ? updateNode(createNamespaceImport(name), node) : node; } ts.updateNamespaceImport = updateNamespaceImport; function createNamedImports(elements) { var node = createSynthesizedNode(247); node.elements = createNodeArray(elements); return node; } ts.createNamedImports = createNamedImports; function updateNamedImports(node, elements) { return node.elements !== elements ? updateNode(createNamedImports(elements), node) : node; } ts.updateNamedImports = updateNamedImports; function createImportSpecifier(propertyName, name) { var node = createSynthesizedNode(248); node.propertyName = propertyName; node.name = name; return node; } ts.createImportSpecifier = createImportSpecifier; function updateImportSpecifier(node, propertyName, name) { return node.propertyName !== propertyName || node.name !== name ? updateNode(createImportSpecifier(propertyName, name), node) : node; } ts.updateImportSpecifier = updateImportSpecifier; function createExportAssignment(decorators, modifiers, isExportEquals, expression) { var node = createSynthesizedNode(249); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.isExportEquals = isExportEquals; node.expression = isExportEquals ? ts.parenthesizeBinaryOperand(58, expression, false, undefined) : ts.parenthesizeDefaultExpression(expression); return node; } ts.createExportAssignment = createExportAssignment; function updateExportAssignment(node, decorators, modifiers, expression) { return node.decorators !== decorators || node.modifiers !== modifiers || node.expression !== expression ? updateNode(createExportAssignment(decorators, modifiers, node.isExportEquals, expression), node) : node; } ts.updateExportAssignment = updateExportAssignment; function createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier) { var node = createSynthesizedNode(250); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.exportClause = exportClause; node.moduleSpecifier = moduleSpecifier; return node; } ts.createExportDeclaration = createExportDeclaration; function updateExportDeclaration(node, decorators, modifiers, exportClause, moduleSpecifier) { return node.decorators !== decorators || node.modifiers !== modifiers || node.exportClause !== exportClause || node.moduleSpecifier !== moduleSpecifier ? updateNode(createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier), node) : node; } ts.updateExportDeclaration = updateExportDeclaration; function createNamedExports(elements) { var node = createSynthesizedNode(251); node.elements = createNodeArray(elements); return node; } ts.createNamedExports = createNamedExports; function updateNamedExports(node, elements) { return node.elements !== elements ? updateNode(createNamedExports(elements), node) : node; } ts.updateNamedExports = updateNamedExports; function createExportSpecifier(propertyName, name) { var node = createSynthesizedNode(252); node.propertyName = asName(propertyName); node.name = asName(name); return node; } ts.createExportSpecifier = createExportSpecifier; function updateExportSpecifier(node, propertyName, name) { return node.propertyName !== propertyName || node.name !== name ? updateNode(createExportSpecifier(propertyName, name), node) : node; } ts.updateExportSpecifier = updateExportSpecifier; function createExternalModuleReference(expression) { var node = createSynthesizedNode(254); node.expression = expression; return node; } ts.createExternalModuleReference = createExternalModuleReference; function updateExternalModuleReference(node, expression) { return node.expression !== expression ? updateNode(createExternalModuleReference(expression), node) : node; } ts.updateExternalModuleReference = updateExternalModuleReference; function createJsxElement(openingElement, children, closingElement) { var node = createSynthesizedNode(255); node.openingElement = openingElement; node.children = createNodeArray(children); node.closingElement = closingElement; return node; } ts.createJsxElement = createJsxElement; function updateJsxElement(node, openingElement, children, closingElement) { return node.openingElement !== openingElement || node.children !== children || node.closingElement !== closingElement ? updateNode(createJsxElement(openingElement, children, closingElement), node) : node; } ts.updateJsxElement = updateJsxElement; function createJsxSelfClosingElement(tagName, typeArguments, attributes) { var node = createSynthesizedNode(256); node.tagName = tagName; node.typeArguments = typeArguments && createNodeArray(typeArguments); node.attributes = attributes; return node; } ts.createJsxSelfClosingElement = createJsxSelfClosingElement; function updateJsxSelfClosingElement(node, tagName, typeArguments, attributes) { return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? updateNode(createJsxSelfClosingElement(tagName, typeArguments, attributes), node) : node; } ts.updateJsxSelfClosingElement = updateJsxSelfClosingElement; function createJsxOpeningElement(tagName, typeArguments, attributes) { var node = createSynthesizedNode(257); node.tagName = tagName; node.typeArguments = typeArguments && createNodeArray(typeArguments); node.attributes = attributes; return node; } ts.createJsxOpeningElement = createJsxOpeningElement; function updateJsxOpeningElement(node, tagName, typeArguments, attributes) { return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? updateNode(createJsxOpeningElement(tagName, typeArguments, attributes), node) : node; } ts.updateJsxOpeningElement = updateJsxOpeningElement; function createJsxClosingElement(tagName) { var node = createSynthesizedNode(258); node.tagName = tagName; return node; } ts.createJsxClosingElement = createJsxClosingElement; function updateJsxClosingElement(node, tagName) { return node.tagName !== tagName ? updateNode(createJsxClosingElement(tagName), node) : node; } ts.updateJsxClosingElement = updateJsxClosingElement; function createJsxFragment(openingFragment, children, closingFragment) { var node = createSynthesizedNode(259); node.openingFragment = openingFragment; node.children = createNodeArray(children); node.closingFragment = closingFragment; return node; } ts.createJsxFragment = createJsxFragment; function updateJsxFragment(node, openingFragment, children, closingFragment) { return node.openingFragment !== openingFragment || node.children !== children || node.closingFragment !== closingFragment ? updateNode(createJsxFragment(openingFragment, children, closingFragment), node) : node; } ts.updateJsxFragment = updateJsxFragment; function createJsxAttribute(name, initializer) { var node = createSynthesizedNode(262); node.name = name; node.initializer = initializer; return node; } ts.createJsxAttribute = createJsxAttribute; function updateJsxAttribute(node, name, initializer) { return node.name !== name || node.initializer !== initializer ? updateNode(createJsxAttribute(name, initializer), node) : node; } ts.updateJsxAttribute = updateJsxAttribute; function createJsxAttributes(properties) { var node = createSynthesizedNode(263); node.properties = createNodeArray(properties); return node; } ts.createJsxAttributes = createJsxAttributes; function updateJsxAttributes(node, properties) { return node.properties !== properties ? updateNode(createJsxAttributes(properties), node) : node; } ts.updateJsxAttributes = updateJsxAttributes; function createJsxSpreadAttribute(expression) { var node = createSynthesizedNode(264); node.expression = expression; return node; } ts.createJsxSpreadAttribute = createJsxSpreadAttribute; function updateJsxSpreadAttribute(node, expression) { return node.expression !== expression ? updateNode(createJsxSpreadAttribute(expression), node) : node; } ts.updateJsxSpreadAttribute = updateJsxSpreadAttribute; function createJsxExpression(dotDotDotToken, expression) { var node = createSynthesizedNode(265); node.dotDotDotToken = dotDotDotToken; node.expression = expression; return node; } ts.createJsxExpression = createJsxExpression; function updateJsxExpression(node, expression) { return node.expression !== expression ? updateNode(createJsxExpression(node.dotDotDotToken, expression), node) : node; } ts.updateJsxExpression = updateJsxExpression; function createCaseClause(expression, statements) { var node = createSynthesizedNode(266); node.expression = ts.parenthesizeExpressionForList(expression); node.statements = createNodeArray(statements); return node; } ts.createCaseClause = createCaseClause; function updateCaseClause(node, expression, statements) { return node.expression !== expression || node.statements !== statements ? updateNode(createCaseClause(expression, statements), node) : node; } ts.updateCaseClause = updateCaseClause; function createDefaultClause(statements) { var node = createSynthesizedNode(267); node.statements = createNodeArray(statements); return node; } ts.createDefaultClause = createDefaultClause; function updateDefaultClause(node, statements) { return node.statements !== statements ? updateNode(createDefaultClause(statements), node) : node; } ts.updateDefaultClause = updateDefaultClause; function createHeritageClause(token, types) { var node = createSynthesizedNode(268); node.token = token; node.types = createNodeArray(types); return node; } ts.createHeritageClause = createHeritageClause; function updateHeritageClause(node, types) { return node.types !== types ? updateNode(createHeritageClause(node.token, types), node) : node; } ts.updateHeritageClause = updateHeritageClause; function createCatchClause(variableDeclaration, block) { var node = createSynthesizedNode(269); node.variableDeclaration = ts.isString(variableDeclaration) ? createVariableDeclaration(variableDeclaration) : variableDeclaration; node.block = block; return node; } ts.createCatchClause = createCatchClause; function updateCatchClause(node, variableDeclaration, block) { return node.variableDeclaration !== variableDeclaration || node.block !== block ? updateNode(createCatchClause(variableDeclaration, block), node) : node; } ts.updateCatchClause = updateCatchClause; function createPropertyAssignment(name, initializer) { var node = createSynthesizedNode(270); node.name = asName(name); node.questionToken = undefined; node.initializer = ts.parenthesizeExpressionForList(initializer); return node; } ts.createPropertyAssignment = createPropertyAssignment; function updatePropertyAssignment(node, name, initializer) { return node.name !== name || node.initializer !== initializer ? updateNode(createPropertyAssignment(name, initializer), node) : node; } ts.updatePropertyAssignment = updatePropertyAssignment; function createShorthandPropertyAssignment(name, objectAssignmentInitializer) { var node = createSynthesizedNode(271); node.name = asName(name); node.objectAssignmentInitializer = objectAssignmentInitializer !== undefined ? ts.parenthesizeExpressionForList(objectAssignmentInitializer) : undefined; return node; } ts.createShorthandPropertyAssignment = createShorthandPropertyAssignment; function updateShorthandPropertyAssignment(node, name, objectAssignmentInitializer) { return node.name !== name || node.objectAssignmentInitializer !== objectAssignmentInitializer ? updateNode(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node) : node; } ts.updateShorthandPropertyAssignment = updateShorthandPropertyAssignment; function createSpreadAssignment(expression) { var node = createSynthesizedNode(272); node.expression = expression !== undefined ? ts.parenthesizeExpressionForList(expression) : undefined; return node; } ts.createSpreadAssignment = createSpreadAssignment; function updateSpreadAssignment(node, expression) { return node.expression !== expression ? updateNode(createSpreadAssignment(expression), node) : node; } ts.updateSpreadAssignment = updateSpreadAssignment; function createEnumMember(name, initializer) { var node = createSynthesizedNode(273); node.name = asName(name); node.initializer = initializer && ts.parenthesizeExpressionForList(initializer); return node; } ts.createEnumMember = createEnumMember; function updateEnumMember(node, name, initializer) { return node.name !== name || node.initializer !== initializer ? updateNode(createEnumMember(name, initializer), node) : node; } ts.updateEnumMember = updateEnumMember; function updateSourceFileNode(node, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) { if (node.statements !== statements || (isDeclarationFile !== undefined && node.isDeclarationFile !== isDeclarationFile) || (referencedFiles !== undefined && node.referencedFiles !== referencedFiles) || (typeReferences !== undefined && node.typeReferenceDirectives !== typeReferences) || (libReferences !== undefined && node.libReferenceDirectives !== libReferences) || (hasNoDefaultLib !== undefined && node.hasNoDefaultLib !== hasNoDefaultLib)) { var updated = createSynthesizedNode(274); updated.flags |= node.flags; updated.statements = createNodeArray(statements); updated.endOfFileToken = node.endOfFileToken; updated.fileName = node.fileName; updated.path = node.path; updated.text = node.text; updated.isDeclarationFile = isDeclarationFile === undefined ? node.isDeclarationFile : isDeclarationFile; updated.referencedFiles = referencedFiles === undefined ? node.referencedFiles : referencedFiles; updated.typeReferenceDirectives = typeReferences === undefined ? node.typeReferenceDirectives : typeReferences; updated.hasNoDefaultLib = hasNoDefaultLib === undefined ? node.hasNoDefaultLib : hasNoDefaultLib; updated.libReferenceDirectives = libReferences === undefined ? node.libReferenceDirectives : libReferences; if (node.amdDependencies !== undefined) updated.amdDependencies = node.amdDependencies; if (node.moduleName !== undefined) updated.moduleName = node.moduleName; if (node.languageVariant !== undefined) updated.languageVariant = node.languageVariant; if (node.renamedDependencies !== undefined) updated.renamedDependencies = node.renamedDependencies; if (node.languageVersion !== undefined) updated.languageVersion = node.languageVersion; if (node.scriptKind !== undefined) updated.scriptKind = node.scriptKind; if (node.externalModuleIndicator !== undefined) updated.externalModuleIndicator = node.externalModuleIndicator; if (node.commonJsModuleIndicator !== undefined) updated.commonJsModuleIndicator = node.commonJsModuleIndicator; if (node.identifiers !== undefined) updated.identifiers = node.identifiers; if (node.nodeCount !== undefined) updated.nodeCount = node.nodeCount; if (node.identifierCount !== undefined) updated.identifierCount = node.identifierCount; if (node.symbolCount !== undefined) updated.symbolCount = node.symbolCount; if (node.parseDiagnostics !== undefined) updated.parseDiagnostics = node.parseDiagnostics; if (node.bindDiagnostics !== undefined) updated.bindDiagnostics = node.bindDiagnostics; if (node.bindSuggestionDiagnostics !== undefined) updated.bindSuggestionDiagnostics = node.bindSuggestionDiagnostics; if (node.lineMap !== undefined) updated.lineMap = node.lineMap; if (node.classifiableNames !== undefined) updated.classifiableNames = node.classifiableNames; if (node.resolvedModules !== undefined) updated.resolvedModules = node.resolvedModules; if (node.resolvedTypeReferenceDirectiveNames !== undefined) updated.resolvedTypeReferenceDirectiveNames = node.resolvedTypeReferenceDirectiveNames; if (node.imports !== undefined) updated.imports = node.imports; if (node.moduleAugmentations !== undefined) updated.moduleAugmentations = node.moduleAugmentations; if (node.pragmas !== undefined) updated.pragmas = node.pragmas; if (node.localJsxFactory !== undefined) updated.localJsxFactory = node.localJsxFactory; if (node.localJsxNamespace !== undefined) updated.localJsxNamespace = node.localJsxNamespace; return updateNode(updated, node); } return node; } ts.updateSourceFileNode = updateSourceFileNode; function getMutableClone(node) { var clone = getSynthesizedClone(node); clone.pos = node.pos; clone.end = node.end; clone.parent = node.parent; return clone; } ts.getMutableClone = getMutableClone; function createNotEmittedStatement(original) { var node = createSynthesizedNode(301); node.original = original; setTextRange(node, original); return node; } ts.createNotEmittedStatement = createNotEmittedStatement; function createEndOfDeclarationMarker(original) { var node = createSynthesizedNode(305); node.emitNode = {}; node.original = original; return node; } ts.createEndOfDeclarationMarker = createEndOfDeclarationMarker; function createMergeDeclarationMarker(original) { var node = createSynthesizedNode(304); node.emitNode = {}; node.original = original; return node; } ts.createMergeDeclarationMarker = createMergeDeclarationMarker; function createPartiallyEmittedExpression(expression, original) { var node = createSynthesizedNode(302); node.expression = expression; node.original = original; setTextRange(node, original); return node; } ts.createPartiallyEmittedExpression = createPartiallyEmittedExpression; function updatePartiallyEmittedExpression(node, expression) { if (node.expression !== expression) { return updateNode(createPartiallyEmittedExpression(expression, node.original), node); } return node; } ts.updatePartiallyEmittedExpression = updatePartiallyEmittedExpression; function flattenCommaElements(node) { if (ts.nodeIsSynthesized(node) && !ts.isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) { if (node.kind === 303) { return node.elements; } if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) { return [node.left, node.right]; } } return node; } function createCommaList(elements) { var node = createSynthesizedNode(303); node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements)); return node; } ts.createCommaList = createCommaList; function updateCommaList(node, elements) { return node.elements !== elements ? updateNode(createCommaList(elements), node) : node; } ts.updateCommaList = updateCommaList; function createBundle(sourceFiles, prepends) { if (prepends === void 0) { prepends = ts.emptyArray; } var node = ts.createNode(275); node.prepends = prepends; node.sourceFiles = sourceFiles; return node; } ts.createBundle = createBundle; function createUnparsedSourceFile(text, mapPath, map) { var node = ts.createNode(276); node.text = text; node.sourceMapPath = mapPath; node.sourceMapText = map; return node; } ts.createUnparsedSourceFile = createUnparsedSourceFile; function createInputFiles(javascript, declaration, javascriptMapPath, javascriptMapText, declarationMapPath, declarationMapText) { var node = ts.createNode(277); node.javascriptText = javascript; node.javascriptMapPath = javascriptMapPath; node.javascriptMapText = javascriptMapText; node.declarationText = declaration; node.declarationMapPath = declarationMapPath; node.declarationMapText = declarationMapText; return node; } ts.createInputFiles = createInputFiles; function updateBundle(node, sourceFiles, prepends) { if (prepends === void 0) { prepends = ts.emptyArray; } if (node.sourceFiles !== sourceFiles || node.prepends !== prepends) { return createBundle(sourceFiles, prepends); } return node; } ts.updateBundle = updateBundle; function createImmediatelyInvokedFunctionExpression(statements, param, 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(undefined, undefined, param ? [param] : [], undefined, undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []); } ts.createImmediatelyInvokedArrowFunction = createImmediatelyInvokedArrowFunction; function createComma(left, right) { return createBinary(left, 26, right); } ts.createComma = createComma; function createLessThan(left, right) { return createBinary(left, 27, right); } ts.createLessThan = createLessThan; function createAssignment(left, right) { return createBinary(left, 58, right); } ts.createAssignment = createAssignment; function createStrictEquality(left, right) { return createBinary(left, 34, right); } ts.createStrictEquality = createStrictEquality; function createStrictInequality(left, right) { return createBinary(left, 35, right); } ts.createStrictInequality = createStrictInequality; function createAdd(left, right) { return createBinary(left, 37, right); } ts.createAdd = createAdd; function createSubtract(left, right) { return createBinary(left, 38, right); } ts.createSubtract = createSubtract; function createPostfixIncrement(operand) { return createPostfix(operand, 43); } ts.createPostfixIncrement = createPostfixIncrement; function createLogicalAnd(left, right) { return createBinary(left, 53, right); } ts.createLogicalAnd = createLogicalAnd; function createLogicalOr(left, right) { return createBinary(left, 54, right); } ts.createLogicalOr = createLogicalOr; function createLogicalNot(operand) { return createPrefix(51, operand); } ts.createLogicalNot = createLogicalNot; function createVoidZero() { return createVoid(createLiteral(0)); } ts.createVoidZero = createVoidZero; function createExportDefault(expression) { return createExportAssignment(undefined, undefined, false, expression); } ts.createExportDefault = createExportDefault; function createExternalModuleExport(exportName) { return createExportDeclaration(undefined, undefined, createNamedExports([createExportSpecifier(undefined, exportName)])); } ts.createExternalModuleExport = createExternalModuleExport; function asName(name) { return ts.isString(name) ? createIdentifier(name) : name; } function asExpression(value) { return ts.isString(value) || typeof value === "number" ? createLiteral(value) : value; } function asNodeArray(array) { return array ? createNodeArray(array) : undefined; } function asToken(value) { return typeof value === "number" ? createToken(value) : value; } function disposeEmitNodes(sourceFile) { sourceFile = ts.getSourceFileOfNode(ts.getParseTreeNode(sourceFile)); var emitNode = sourceFile && sourceFile.emitNode; var annotatedNodes = emitNode && emitNode.annotatedNodes; if (annotatedNodes) { for (var _i = 0, annotatedNodes_1 = annotatedNodes; _i < annotatedNodes_1.length; _i++) { var node = annotatedNodes_1[_i]; node.emitNode = undefined; } } } ts.disposeEmitNodes = disposeEmitNodes; function getOrCreateEmitNode(node) { if (!node.emitNode) { if (ts.isParseTreeNode(node)) { if (node.kind === 274) { return node.emitNode = { annotatedNodes: [node] }; } var sourceFile = ts.getSourceFileOfNode(node); getOrCreateEmitNode(sourceFile).annotatedNodes.push(node); } node.emitNode = {}; } return node.emitNode; } ts.getOrCreateEmitNode = getOrCreateEmitNode; function setTextRange(range, location) { if (location) { range.pos = location.pos; range.end = location.end; } return range; } ts.setTextRange = setTextRange; function setEmitFlags(node, emitFlags) { getOrCreateEmitNode(node).flags = emitFlags; return node; } ts.setEmitFlags = setEmitFlags; function addEmitFlags(node, emitFlags) { var emitNode = getOrCreateEmitNode(node); emitNode.flags = emitNode.flags | emitFlags; return node; } ts.addEmitFlags = addEmitFlags; function getSourceMapRange(node) { var emitNode = node.emitNode; return (emitNode && emitNode.sourceMapRange) || node; } ts.getSourceMapRange = getSourceMapRange; function setSourceMapRange(node, range) { getOrCreateEmitNode(node).sourceMapRange = range; return node; } ts.setSourceMapRange = setSourceMapRange; var SourceMapSource; function createSourceMapSource(fileName, text, skipTrivia) { return new (SourceMapSource || (SourceMapSource = ts.objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia); } ts.createSourceMapSource = createSourceMapSource; function getTokenSourceMapRange(node, token) { var emitNode = node.emitNode; var tokenSourceMapRanges = emitNode && emitNode.tokenSourceMapRanges; return tokenSourceMapRanges && tokenSourceMapRanges[token]; } ts.getTokenSourceMapRange = getTokenSourceMapRange; function setTokenSourceMapRange(node, token, range) { var emitNode = getOrCreateEmitNode(node); var tokenSourceMapRanges = emitNode.tokenSourceMapRanges || (emitNode.tokenSourceMapRanges = []); tokenSourceMapRanges[token] = range; return node; } ts.setTokenSourceMapRange = setTokenSourceMapRange; function getStartsOnNewLine(node) { var emitNode = node.emitNode; return emitNode && emitNode.startsOnNewLine; } ts.getStartsOnNewLine = getStartsOnNewLine; function setStartsOnNewLine(node, newLine) { getOrCreateEmitNode(node).startsOnNewLine = newLine; return node; } ts.setStartsOnNewLine = setStartsOnNewLine; function getCommentRange(node) { var emitNode = node.emitNode; return (emitNode && emitNode.commentRange) || node; } ts.getCommentRange = getCommentRange; function setCommentRange(node, range) { getOrCreateEmitNode(node).commentRange = range; return node; } ts.setCommentRange = setCommentRange; function getSyntheticLeadingComments(node) { var emitNode = node.emitNode; return emitNode && emitNode.leadingComments; } ts.getSyntheticLeadingComments = getSyntheticLeadingComments; function setSyntheticLeadingComments(node, comments) { getOrCreateEmitNode(node).leadingComments = comments; return node; } ts.setSyntheticLeadingComments = setSyntheticLeadingComments; function addSyntheticLeadingComment(node, kind, text, hasTrailingNewLine) { return setSyntheticLeadingComments(node, ts.append(getSyntheticLeadingComments(node), { kind: kind, pos: -1, end: -1, hasTrailingNewLine: hasTrailingNewLine, text: text })); } ts.addSyntheticLeadingComment = addSyntheticLeadingComment; function getSyntheticTrailingComments(node) { var emitNode = node.emitNode; return emitNode && emitNode.trailingComments; } ts.getSyntheticTrailingComments = getSyntheticTrailingComments; function setSyntheticTrailingComments(node, comments) { getOrCreateEmitNode(node).trailingComments = comments; return node; } ts.setSyntheticTrailingComments = setSyntheticTrailingComments; function addSyntheticTrailingComment(node, kind, text, hasTrailingNewLine) { return setSyntheticTrailingComments(node, ts.append(getSyntheticTrailingComments(node), { kind: kind, pos: -1, end: -1, hasTrailingNewLine: hasTrailingNewLine, text: text })); } ts.addSyntheticTrailingComment = addSyntheticTrailingComment; function moveSyntheticComments(node, original) { setSyntheticLeadingComments(node, getSyntheticLeadingComments(original)); setSyntheticTrailingComments(node, getSyntheticTrailingComments(original)); var emit = getOrCreateEmitNode(original); emit.leadingComments = undefined; emit.trailingComments = undefined; return node; } ts.moveSyntheticComments = moveSyntheticComments; function getConstantValue(node) { var emitNode = node.emitNode; return emitNode && emitNode.constantValue; } ts.getConstantValue = getConstantValue; function setConstantValue(node, value) { var emitNode = getOrCreateEmitNode(node); emitNode.constantValue = value; return node; } ts.setConstantValue = setConstantValue; function addEmitHelper(node, helper) { var emitNode = getOrCreateEmitNode(node); emitNode.helpers = ts.append(emitNode.helpers, helper); return node; } ts.addEmitHelper = addEmitHelper; function addEmitHelpers(node, helpers) { if (ts.some(helpers)) { var emitNode = getOrCreateEmitNode(node); for (var _i = 0, helpers_1 = helpers; _i < helpers_1.length; _i++) { var helper = helpers_1[_i]; emitNode.helpers = ts.appendIfUnique(emitNode.helpers, helper); } } return node; } ts.addEmitHelpers = addEmitHelpers; function removeEmitHelper(node, helper) { var emitNode = node.emitNode; if (emitNode) { var helpers = emitNode.helpers; if (helpers) { return ts.orderedRemoveItem(helpers, helper); } } return false; } ts.removeEmitHelper = removeEmitHelper; function getEmitHelpers(node) { var emitNode = node.emitNode; return emitNode && emitNode.helpers; } ts.getEmitHelpers = getEmitHelpers; function moveEmitHelpers(source, target, predicate) { var sourceEmitNode = source.emitNode; var sourceEmitHelpers = sourceEmitNode && sourceEmitNode.helpers; if (!ts.some(sourceEmitHelpers)) return; var targetEmitNode = getOrCreateEmitNode(target); var helpersRemoved = 0; for (var i = 0; i < sourceEmitHelpers.length; i++) { var helper = sourceEmitHelpers[i]; if (predicate(helper)) { helpersRemoved++; targetEmitNode.helpers = ts.appendIfUnique(targetEmitNode.helpers, helper); } else if (helpersRemoved > 0) { sourceEmitHelpers[i - helpersRemoved] = helper; } } if (helpersRemoved > 0) { sourceEmitHelpers.length -= helpersRemoved; } } ts.moveEmitHelpers = moveEmitHelpers; function compareEmitHelpers(x, y) { if (x === y) return 0; if (x.priority === y.priority) return 0; if (x.priority === undefined) return 1; if (y.priority === undefined) return -1; return ts.compareValues(x.priority, y.priority); } ts.compareEmitHelpers = compareEmitHelpers; function setOriginalNode(node, original) { node.original = original; if (original) { var emitNode = original.emitNode; if (emitNode) node.emitNode = mergeEmitNode(emitNode, node.emitNode); } return node; } ts.setOriginalNode = setOriginalNode; function mergeEmitNode(sourceEmitNode, destEmitNode) { 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 = {}; if (leadingComments) destEmitNode.leadingComments = ts.addRange(leadingComments.slice(), destEmitNode.leadingComments); if (trailingComments) destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments); if (flags) destEmitNode.flags = flags; if (commentRange) destEmitNode.commentRange = commentRange; if (sourceMapRange) destEmitNode.sourceMapRange = sourceMapRange; if (tokenSourceMapRanges) destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges); if (constantValue !== undefined) destEmitNode.constantValue = constantValue; if (helpers) destEmitNode.helpers = ts.addRange(destEmitNode.helpers, helpers); if (startsOnNewLine !== undefined) destEmitNode.startsOnNewLine = startsOnNewLine; return destEmitNode; } function mergeTokenSourceMapRanges(sourceRanges, destRanges) { if (!destRanges) destRanges = []; for (var key in sourceRanges) { destRanges[key] = sourceRanges[key]; } return destRanges; } })(ts || (ts = {})); (function (ts) { ts.nullTransformationContext = { enableEmitNotification: ts.noop, enableSubstitution: ts.noop, endLexicalEnvironment: function () { return undefined; }, getCompilerOptions: ts.notImplemented, getEmitHost: ts.notImplemented, getEmitResolver: ts.notImplemented, hoistFunctionDeclaration: ts.noop, hoistVariableDeclaration: ts.noop, isEmitNotificationEnabled: ts.notImplemented, isSubstitutionEnabled: ts.notImplemented, onEmitNode: ts.noop, onSubstituteNode: ts.notImplemented, readEmitHelpers: ts.notImplemented, requestEmitHelper: ts.noop, resumeLexicalEnvironment: ts.noop, startLexicalEnvironment: ts.noop, suspendLexicalEnvironment: ts.noop, addDiagnostic: ts.noop, }; function createTypeCheck(value, tag) { return tag === "undefined" ? ts.createStrictEquality(value, ts.createVoidZero()) : ts.createStrictEquality(ts.createTypeOf(value), ts.createLiteral(tag)); } ts.createTypeCheck = createTypeCheck; function createMemberAccessForPropertyName(target, memberName, location) { if (ts.isComputedPropertyName(memberName)) { return ts.setTextRange(ts.createElementAccess(target, memberName.expression), location); } else { var expression = ts.setTextRange(ts.isIdentifier(memberName) ? ts.createPropertyAccess(target, memberName) : ts.createElementAccess(target, memberName), memberName); 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"), undefined, [ thisArg ].concat(argumentsList)), location); } ts.createFunctionCall = createFunctionCall; function createFunctionApply(func, thisArg, argumentsExpression, location) { return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "apply"), undefined, [ thisArg, argumentsExpression ]), location); } ts.createFunctionApply = createFunctionApply; function createArraySlice(array, start) { var argumentsList = []; if (start !== undefined) { argumentsList.push(typeof start === "number" ? ts.createLiteral(start) : start); } return ts.createCall(ts.createPropertyAccess(array, "slice"), undefined, argumentsList); } ts.createArraySlice = createArraySlice; function createArrayConcat(array, 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"), undefined, [left, right]), location); } ts.createMathPow = createMathPow; function createReactNamespace(reactNamespace, parent) { var react = ts.createIdentifier(reactNamespace || "React"); react.flags &= ~8; react.parent = ts.getParseTreeNode(parent); return react; } function createJsxFactoryExpressionFromEntityName(jsxFactory, parent) { if (ts.isQualifiedName(jsxFactory)) { var left = createJsxFactoryExpressionFromEntityName(jsxFactory.left, parent); var right = ts.createIdentifier(ts.idText(jsxFactory.right)); right.escapedText = jsxFactory.right.escapedText; return ts.createPropertyAccess(left, right); } else { return createReactNamespace(ts.idText(jsxFactory), parent); } } function createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parent) { return jsxFactoryEntity ? createJsxFactoryExpressionFromEntityName(jsxFactoryEntity, parent) : ts.createPropertyAccess(createReactNamespace(reactNamespace, parent), "createElement"); } function createExpressionForJsxElement(jsxFactoryEntity, reactNamespace, tagName, props, children, parentElement, location) { var argumentsList = [tagName]; if (props) { argumentsList.push(props); } if (children && children.length > 0) { if (!props) { argumentsList.push(ts.createNull()); } if (children.length > 1) { for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { var child = children_1[_i]; startOnNewLine(child); argumentsList.push(child); } } else { argumentsList.push(children[0]); } } return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location); } ts.createExpressionForJsxElement = createExpressionForJsxElement; function createExpressionForJsxFragment(jsxFactoryEntity, reactNamespace, children, parentElement, location) { var tagName = ts.createPropertyAccess(createReactNamespace(reactNamespace, parentElement), "Fragment"); var argumentsList = [tagName]; argumentsList.push(ts.createNull()); if (children && children.length > 0) { if (children.length > 1) { for (var _i = 0, children_2 = children; _i < children_2.length; _i++) { var child = children_2[_i]; startOnNewLine(child); argumentsList.push(child); } } else { argumentsList.push(children[0]); } } return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location); } ts.createExpressionForJsxFragment = createExpressionForJsxFragment; function getHelperName(name) { return ts.setEmitFlags(ts.createIdentifier(name), 4096 | 2); } ts.getHelperName = getHelperName; var valuesHelper = { name: "typescript:values", scoped: false, text: "\n var __values = (this && this.__values) || function (o) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n if (m) return m.call(o);\n return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n };" }; function createValuesHelper(context, expression, location) { context.requestEmitHelper(valuesHelper); return ts.setTextRange(ts.createCall(getHelperName("__values"), undefined, [expression]), location); } ts.createValuesHelper = createValuesHelper; var readHelper = { name: "typescript:read", scoped: false, text: "\n var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n };" }; function createReadHelper(context, iteratorRecord, count, location) { context.requestEmitHelper(readHelper); return ts.setTextRange(ts.createCall(getHelperName("__read"), undefined, count !== undefined ? [iteratorRecord, ts.createLiteral(count)] : [iteratorRecord]), location); } ts.createReadHelper = createReadHelper; var spreadHelper = { name: "typescript:spread", scoped: false, text: "\n var __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n };" }; function createSpreadHelper(context, argumentList, location) { context.requestEmitHelper(readHelper); context.requestEmitHelper(spreadHelper); return ts.setTextRange(ts.createCall(getHelperName("__spread"), undefined, argumentList), location); } ts.createSpreadHelper = createSpreadHelper; function createForOfBindingStatement(node, boundValue) { if (ts.isVariableDeclarationList(node)) { var firstDeclaration = ts.first(node.declarations); 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), node); return ts.setTextRange(ts.createStatement(updatedExpression), node); } } ts.createForOfBindingStatement = createForOfBindingStatement; function insertLeadingStatement(dest, source) { if (ts.isBlock(dest)) { return ts.updateBlock(dest, ts.setTextRange(ts.createNodeArray([source].concat(dest.statements)), dest.statements)); } else { return ts.createBlock(ts.createNodeArray([dest, source]), true); } } ts.insertLeadingStatement = insertLeadingStatement; function restoreEnclosingLabel(node, outermostLabeledStatement, afterRestoreLabelCallback) { if (!outermostLabeledStatement) { return node; } var updated = ts.updateLabel(outermostLabeledStatement, outermostLabeledStatement.label, outermostLabeledStatement.statement.kind === 228 ? restoreEnclosingLabel(node, outermostLabeledStatement.statement) : node); if (afterRestoreLabelCallback) { afterRestoreLabelCallback(outermostLabeledStatement); } return updated; } ts.restoreEnclosingLabel = restoreEnclosingLabel; function shouldBeCapturedInTempVariable(node, cacheIdentifiers) { var target = ts.skipParentheses(node); switch (target.kind) { case 71: return cacheIdentifiers; case 99: case 8: case 9: return false; case 183: var elements = target.elements; if (elements.length === 0) { return false; } return true; case 184: return target.properties.length > 0; default: return true; } } function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers) { if (cacheIdentifiers === void 0) { cacheIdentifiers = false; } var callee = skipOuterExpressions(expression, 7); var thisArg; var target; if (ts.isSuperProperty(callee)) { thisArg = ts.createThis(); target = callee; } else if (callee.kind === 97) { thisArg = ts.createThis(); target = languageVersion < 2 ? ts.setTextRange(ts.createIdentifier("_super"), callee) : callee; } else if (ts.getEmitFlags(callee) & 4096) { thisArg = ts.createVoidZero(); target = parenthesizeForAccess(callee); } else { switch (callee.kind) { case 185: { if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { thisArg = ts.createTempVariable(recordTempVariable); target = ts.createPropertyAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.name); ts.setTextRange(target, callee); } else { thisArg = callee.expression; target = callee; } break; } case 186: { if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { thisArg = ts.createTempVariable(recordTempVariable); target = ts.createElementAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.argumentExpression); ts.setTextRange(target, callee); } else { thisArg = callee.expression; target = callee; } break; } default: { thisArg = ts.createVoidZero(); target = parenthesizeForAccess(expression); break; } } } return { target: target, thisArg: thisArg }; } ts.createCallBinding = createCallBinding; function inlineExpressions(expressions) { return expressions.length > 10 ? ts.createCommaList(expressions) : ts.reduceLeft(expressions, ts.createComma); } ts.inlineExpressions = inlineExpressions; function createExpressionFromEntityName(node) { if (ts.isQualifiedName(node)) { var left = createExpressionFromEntityName(node.left); var right = ts.getMutableClone(node.right); return ts.setTextRange(ts.createPropertyAccess(left, right), node); } else { return ts.getMutableClone(node); } } ts.createExpressionFromEntityName = createExpressionFromEntityName; function createExpressionForPropertyName(memberName) { if (ts.isIdentifier(memberName)) { return ts.createLiteral(memberName); } else if (ts.isComputedPropertyName(memberName)) { return ts.getMutableClone(memberName.expression); } else { return ts.getMutableClone(memberName); } } ts.createExpressionForPropertyName = createExpressionForPropertyName; function createExpressionForObjectLiteralElementLike(node, property, receiver) { switch (property.kind) { case 156: case 157: return createExpressionForAccessorDeclaration(node.properties, property, receiver, !!node.multiLine); case 270: return createExpressionForPropertyAssignment(property, receiver); case 271: return createExpressionForShorthandPropertyAssignment(property, receiver); case 154: return createExpressionForMethodDeclaration(property, receiver); } } ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike; function createExpressionForAccessorDeclaration(properties, property, receiver, multiLine) { var _a = ts.getAllAccessorDeclarations(properties, property), firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor; if (property === firstAccessor) { var properties_9 = []; if (getAccessor) { 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, undefined, undefined, undefined, setAccessor.parameters, undefined, setAccessor.body); ts.setTextRange(setterFunction, setAccessor); ts.setOriginalNode(setterFunction, setAccessor); var setter = ts.createPropertyAssignment("set", setterFunction); properties_9.push(setter); } 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"), undefined, [ receiver, createExpressionForPropertyName(property.name), ts.createObjectLiteral(properties_9, multiLine) ]), firstAccessor); return ts.aggregateTransformFlags(expression); } return undefined; } function createExpressionForPropertyAssignment(property, receiver) { 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, 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, method.name), ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(method.modifiers, method.asteriskToken, undefined, undefined, method.parameters, undefined, method.body), method), method)), method), method)); } function getInternalName(node, allowComments, allowSourceMaps) { return getName(node, allowComments, allowSourceMaps, 16384 | 32768); } ts.getInternalName = getInternalName; function isInternalName(node) { return (ts.getEmitFlags(node) & 32768) !== 0; } ts.isInternalName = isInternalName; function getLocalName(node, allowComments, allowSourceMaps) { return getName(node, allowComments, allowSourceMaps, 16384); } ts.getLocalName = getLocalName; function isLocalName(node) { return (ts.getEmitFlags(node) & 16384) !== 0; } ts.isLocalName = isLocalName; function getExportName(node, allowComments, allowSourceMaps) { return getName(node, allowComments, allowSourceMaps, 8192); } ts.getExportName = getExportName; function isExportName(node) { return (ts.getEmitFlags(node) & 8192) !== 0; } ts.isExportName = isExportName; function getDeclarationName(node, allowComments, allowSourceMaps) { return getName(node, allowComments, allowSourceMaps); } ts.getDeclarationName = getDeclarationName; function getName(node, allowComments, allowSourceMaps, emitFlags) { if (emitFlags === void 0) { emitFlags = 0; } var nodeName = ts.getNameOfDeclaration(node); if (nodeName && ts.isIdentifier(nodeName) && !ts.isGeneratedIdentifier(nodeName)) { var name = ts.getMutableClone(nodeName); emitFlags |= ts.getEmitFlags(nodeName); if (!allowSourceMaps) emitFlags |= 48; if (!allowComments) emitFlags |= 1536; if (emitFlags) ts.setEmitFlags(name, emitFlags); return name; } return ts.getGeneratedNameForNode(node); } function getExternalModuleOrNamespaceExportName(ns, node, allowComments, allowSourceMaps) { if (ns && ts.hasModifier(node, 1)) { return getNamespaceMemberName(ns, getName(node), allowComments, allowSourceMaps); } return getExportName(node, allowComments, allowSourceMaps); } ts.getExternalModuleOrNamespaceExportName = getExternalModuleOrNamespaceExportName; 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; if (!allowComments) emitFlags |= 1536; if (emitFlags) ts.setEmitFlags(qualifiedName, emitFlags); return qualifiedName; } ts.getNamespaceMemberName = getNamespaceMemberName; function convertToFunctionBody(node, multiLine) { return ts.isBlock(node) ? node : ts.setTextRange(ts.createBlock([ts.setTextRange(ts.createReturn(node), node)], multiLine), node); } ts.convertToFunctionBody = convertToFunctionBody; function convertFunctionDeclarationToExpression(node) { if (!node.body) return ts.Debug.fail(); var updated = ts.createFunctionExpression(node.modifiers, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body); ts.setOriginalNode(updated, node); ts.setTextRange(updated, node); if (ts.getStartsOnNewLine(node)) { ts.setStartsOnNewLine(updated, true); } ts.aggregateTransformFlags(updated); return updated; } ts.convertFunctionDeclarationToExpression = convertFunctionDeclarationToExpression; function isUseStrictPrologue(node) { return ts.isStringLiteral(node.expression) && node.expression.text === "use strict"; } function addPrologue(target, source, ensureUseStrict, visitor) { var offset = addStandardPrologue(target, source, ensureUseStrict); return addCustomPrologue(target, source, offset, visitor); } ts.addPrologue = addPrologue; 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; var statementOffset = 0; var numStatements = source.length; while (statementOffset < numStatements) { var statement = source[statementOffset]; if (ts.isPrologueDirective(statement)) { if (isUseStrictPrologue(statement)) { foundUseStrict = true; } target.push(statement); } else { break; } statementOffset++; } if (ensureUseStrict && !foundUseStrict) { target.push(startOnNewLine(ts.createStatement(ts.createLiteral("use strict")))); } return statementOffset; } ts.addStandardPrologue = addStandardPrologue; function addCustomPrologue(target, source, statementOffset, visitor) { var numStatements = source.length; while (statementOffset !== undefined && statementOffset < numStatements) { var statement = source[statementOffset]; if (ts.getEmitFlags(statement) & 1048576) { ts.append(target, visitor ? ts.visitNode(statement, visitor, ts.isStatement) : statement); } else { break; } statementOffset++; } return statementOffset; } ts.addCustomPrologue = addCustomPrologue; function startsWithUseStrict(statements) { var firstStatement = ts.firstOrUndefined(statements); return firstStatement !== undefined && ts.isPrologueDirective(firstStatement) && isUseStrictPrologue(firstStatement); } ts.startsWithUseStrict = startsWithUseStrict; function ensureUseStrict(statements) { var foundUseStrict = false; for (var _i = 0, statements_3 = statements; _i < statements_3.length; _i++) { var statement = statements_3[_i]; if (ts.isPrologueDirective(statement)) { if (isUseStrictPrologue(statement)) { foundUseStrict = true; break; } } else { break; } } if (!foundUseStrict) { return ts.setTextRange(ts.createNodeArray([ startOnNewLine(ts.createStatement(ts.createLiteral("use strict"))) ].concat(statements)), statements); } return statements; } ts.ensureUseStrict = ensureUseStrict; function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { var skipped = ts.skipPartiallyEmittedExpressions(operand); if (skipped.kind === 191) { return operand; } return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) ? ts.createParen(operand) : operand; } ts.parenthesizeBinaryOperand = parenthesizeBinaryOperand; function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { 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: if (!isLeftSideOfBinary && binaryOperatorAssociativity === 1 && operand.kind === 203) { return false; } return true; case 1: return false; case 0: if (isLeftSideOfBinary) { return binaryOperatorAssociativity === 1; } else { if (ts.isBinaryExpression(emittedOperand) && emittedOperand.operatorToken.kind === binaryOperator) { if (operatorHasAssociativeProperty(binaryOperator)) { return false; } if (binaryOperator === 37) { var leftKind = leftOperand ? getLiteralKindOfBinaryPlusOperand(leftOperand) : 0; if (ts.isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(emittedOperand)) { return false; } } } var operandAssociativity = ts.getExpressionAssociativity(emittedOperand); return operandAssociativity === 0; } } } function operatorHasAssociativeProperty(binaryOperator) { return binaryOperator === 39 || binaryOperator === 49 || binaryOperator === 48 || binaryOperator === 50; } function getLiteralKindOfBinaryPlusOperand(node) { node = ts.skipPartiallyEmittedExpressions(node); if (ts.isLiteralKind(node.kind)) { return node.kind; } if (node.kind === 200 && node.operatorToken.kind === 37) { if (node.cachedLiteralKind !== undefined) { return node.cachedLiteralKind; } var leftKind = getLiteralKindOfBinaryPlusOperand(node.left); var literalKind = ts.isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(node.right) ? leftKind : 0; node.cachedLiteralKind = literalKind; return literalKind; } return 0; } function parenthesizeForConditionalHead(condition) { var conditionalPrecedence = ts.getOperatorPrecedence(201, 55); var emittedCondition = ts.skipPartiallyEmittedExpressions(condition); var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition); if (ts.compareValues(conditionPrecedence, conditionalPrecedence) === -1) { return ts.createParen(condition); } return condition; } ts.parenthesizeForConditionalHead = parenthesizeForConditionalHead; function parenthesizeSubexpressionOfConditionalExpression(e) { var emittedExpression = ts.skipPartiallyEmittedExpressions(e); return emittedExpression.kind === 200 && emittedExpression.operatorToken.kind === 26 || emittedExpression.kind === 303 ? ts.createParen(e) : e; } ts.parenthesizeSubexpressionOfConditionalExpression = parenthesizeSubexpressionOfConditionalExpression; function parenthesizeDefaultExpression(e) { var check = ts.skipPartiallyEmittedExpressions(e); return (check.kind === 205 || check.kind === 192 || check.kind === 303 || ts.isBinaryExpression(check) && check.operatorToken.kind === 26) ? ts.createParen(e) : e; } ts.parenthesizeDefaultExpression = parenthesizeDefaultExpression; function parenthesizeForNew(expression) { var leftmostExpr = getLeftmostExpression(expression, true); switch (leftmostExpr.kind) { case 187: return ts.createParen(expression); case 188: return !leftmostExpr.arguments ? ts.createParen(expression) : expression; } return parenthesizeForAccess(expression); } ts.parenthesizeForNew = parenthesizeForNew; function parenthesizeForAccess(expression) { var emittedExpression = ts.skipPartiallyEmittedExpressions(expression); if (ts.isLeftHandSideExpression(emittedExpression) && (emittedExpression.kind !== 188 || emittedExpression.arguments)) { return expression; } return ts.setTextRange(ts.createParen(expression), expression); } ts.parenthesizeForAccess = parenthesizeForAccess; function parenthesizePostfixOperand(operand) { return ts.isLeftHandSideExpression(operand) ? operand : ts.setTextRange(ts.createParen(operand), operand); } ts.parenthesizePostfixOperand = parenthesizePostfixOperand; function parenthesizePrefixOperand(operand) { return ts.isUnaryExpression(operand) ? operand : ts.setTextRange(ts.createParen(operand), operand); } ts.parenthesizePrefixOperand = parenthesizePrefixOperand; function parenthesizeListElements(elements) { var result; for (var i = 0; i < elements.length; i++) { var element = parenthesizeExpressionForList(elements[i]); if (result !== undefined || element !== elements[i]) { if (result === undefined) { result = elements.slice(0, i); } result.push(element); } } if (result !== undefined) { return ts.setTextRange(ts.createNodeArray(result, elements.hasTrailingComma), elements); } return elements; } ts.parenthesizeListElements = parenthesizeListElements; function parenthesizeExpressionForList(expression) { var emittedExpression = ts.skipPartiallyEmittedExpressions(expression); var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression); var commaPrecedence = ts.getOperatorPrecedence(200, 26); return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(ts.createParen(expression), expression); } ts.parenthesizeExpressionForList = parenthesizeExpressionForList; function parenthesizeExpressionForExpressionStatement(expression) { var emittedExpression = ts.skipPartiallyEmittedExpressions(expression); if (ts.isCallExpression(emittedExpression)) { var callee = emittedExpression.expression; var kind = ts.skipPartiallyEmittedExpressions(callee).kind; if (kind === 192 || kind === 193) { var mutableCall = ts.getMutableClone(emittedExpression); mutableCall.expression = ts.setTextRange(ts.createParen(callee), callee); return recreateOuterExpressions(expression, mutableCall, 4); } } 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 ? ts.createParenthesizedType(member) : member; } ts.parenthesizeConditionalTypeMember = parenthesizeConditionalTypeMember; function parenthesizeElementTypeMember(member) { switch (member.kind) { case 169: case 170: case 163: case 164: return ts.createParenthesizedType(member); } return parenthesizeConditionalTypeMember(member); } ts.parenthesizeElementTypeMember = parenthesizeElementTypeMember; function parenthesizeArrayTypeMember(member) { switch (member.kind) { case 165: case 175: case 172: return ts.createParenthesizedType(member); } return parenthesizeElementTypeMember(member); } ts.parenthesizeArrayTypeMember = parenthesizeArrayTypeMember; function parenthesizeElementTypeMembers(members) { return ts.createNodeArray(ts.sameMap(members, parenthesizeElementTypeMember)); } ts.parenthesizeElementTypeMembers = parenthesizeElementTypeMembers; function parenthesizeTypeParameters(typeParameters) { if (ts.some(typeParameters)) { var params = []; for (var i = 0; i < typeParameters.length; ++i) { var entry = typeParameters[i]; params.push(i === 0 && ts.isFunctionOrConstructorTypeNode(entry) && entry.typeParameters ? ts.createParenthesizedType(entry) : entry); } return ts.createNodeArray(params); } } ts.parenthesizeTypeParameters = parenthesizeTypeParameters; function getLeftmostExpression(node, stopAtCallExpressions) { while (true) { switch (node.kind) { case 199: node = node.operand; continue; case 200: node = node.left; continue; case 201: node = node.condition; continue; case 187: if (stopAtCallExpressions) { return node; } case 186: case 185: node = node.expression; continue; case 302: node = node.expression; continue; } return node; } } function parenthesizeConciseBody(body) { 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; } switch (node.kind) { case 191: return (kinds & 1) !== 0; case 190: case 208: case 209: return (kinds & 2) !== 0; case 302: return (kinds & 4) !== 0; } return false; } ts.isOuterExpression = isOuterExpression; function skipOuterExpressions(node, kinds) { if (kinds === void 0) { kinds = 7; } var previousNode; do { previousNode = node; if (kinds & 1) { node = ts.skipParentheses(node); } if (kinds & 2) { node = skipAssertions(node); } if (kinds & 4) { node = ts.skipPartiallyEmittedExpressions(node); } } while (previousNode !== node); return node; } ts.skipOuterExpressions = skipOuterExpressions; function skipAssertions(node) { while (ts.isAssertionExpression(node) || node.kind === 209) { node = node.expression; } return node; } ts.skipAssertions = skipAssertions; function updateOuterExpression(outerExpression, expression) { switch (outerExpression.kind) { 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 302: return ts.updatePartiallyEmittedExpression(outerExpression, expression); } } function isIgnorableParen(node) { return node.kind === 191 && ts.nodeIsSynthesized(node) && ts.nodeIsSynthesized(ts.getSourceMapRange(node)) && ts.nodeIsSynthesized(ts.getCommentRange(node)) && !ts.some(ts.getSyntheticLeadingComments(node)) && !ts.some(ts.getSyntheticTrailingComments(node)); } function recreateOuterExpressions(outerExpression, innerExpression, kinds) { if (kinds === void 0) { kinds = 7; } if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { return updateOuterExpression(outerExpression, recreateOuterExpressions(outerExpression.expression, innerExpression)); } return innerExpression; } ts.recreateOuterExpressions = recreateOuterExpressions; function startOnNewLine(node) { return ts.setStartsOnNewLine(node, true); } ts.startOnNewLine = startOnNewLine; function getExternalHelpersModuleName(node) { var parseNode = ts.getOriginalNode(node, ts.isSourceFile); var emitNode = parseNode && parseNode.emitNode; return emitNode && emitNode.externalHelpersModuleName; } ts.getExternalHelpersModuleName = getExternalHelpersModuleName; function getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions, hasExportStarsToExportValues, hasImportStarOrImportDefault) { if (compilerOptions.importHelpers && ts.isEffectiveExternalModule(node, compilerOptions)) { var externalHelpersModuleName = getExternalHelpersModuleName(node); if (externalHelpersModuleName) { return externalHelpersModuleName; } var moduleKind = ts.getEmitModuleKind(compilerOptions); var create = (hasExportStarsToExportValues || (compilerOptions.esModuleInterop && hasImportStarOrImportDefault)) && moduleKind !== ts.ModuleKind.System && moduleKind !== ts.ModuleKind.ES2015 && moduleKind !== ts.ModuleKind.ESNext; if (!create) { var helpers = ts.getEmitHelpers(node); if (helpers) { for (var _i = 0, helpers_2 = helpers; _i < helpers_2.length; _i++) { var helper = helpers_2[_i]; if (!helper.scoped) { create = true; break; } } } } if (create) { var parseNode = ts.getOriginalNode(node, ts.isSourceFile); var emitNode = ts.getOrCreateEmitNode(parseNode); return emitNode.externalHelpersModuleName || (emitNode.externalHelpersModuleName = ts.createUniqueName(ts.externalHelpersModuleNameText)); } } } ts.getOrCreateExternalHelpersModuleNameIfNeeded = getOrCreateExternalHelpersModuleNameIfNeeded; 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 && node.importClause) { return ts.getGeneratedNameForNode(node); } if (node.kind === 250 && node.moduleSpecifier) { return ts.getGeneratedNameForNode(node); } return undefined; } ts.getLocalNameForExternalImport = getLocalNameForExternalImport; function getExternalModuleNameLiteral(importNode, sourceFile, host, resolver, compilerOptions) { var moduleName = ts.getExternalModuleName(importNode); if (moduleName.kind === 9) { return tryGetModuleNameFromDeclaration(importNode, host, resolver, compilerOptions) || tryRenameExternalModule(moduleName, sourceFile) || ts.getSynthesizedClone(moduleName); } return undefined; } ts.getExternalModuleNameLiteral = getExternalModuleNameLiteral; function tryRenameExternalModule(moduleName, sourceFile) { var rename = sourceFile.renamedDependencies && sourceFile.renamedDependencies.get(moduleName.text); return rename && ts.createLiteral(rename); } function tryGetModuleNameFromFile(file, host, options) { if (!file) { return undefined; } if (file.moduleName) { return ts.createLiteral(file.moduleName); } if (!file.isDeclarationFile && (options.out || options.outFile)) { return ts.createLiteral(ts.getExternalModuleNameFromPath(host, file.fileName)); } return undefined; } ts.tryGetModuleNameFromFile = tryGetModuleNameFromFile; function tryGetModuleNameFromDeclaration(declaration, host, resolver, compilerOptions) { return tryGetModuleNameFromFile(resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions); } function getInitializerOfBindingOrAssignmentElement(bindingElement) { if (ts.isDeclarationBindingElement(bindingElement)) { return bindingElement.initializer; } if (ts.isPropertyAssignment(bindingElement)) { var initializer = bindingElement.initializer; return ts.isAssignmentExpression(initializer, true) ? initializer.right : undefined; } if (ts.isShorthandPropertyAssignment(bindingElement)) { return bindingElement.objectAssignmentInitializer; } if (ts.isAssignmentExpression(bindingElement, true)) { return bindingElement.right; } if (ts.isSpreadElement(bindingElement)) { return getInitializerOfBindingOrAssignmentElement(bindingElement.expression); } } ts.getInitializerOfBindingOrAssignmentElement = getInitializerOfBindingOrAssignmentElement; function getTargetOfBindingOrAssignmentElement(bindingElement) { if (ts.isDeclarationBindingElement(bindingElement)) { return bindingElement.name; } if (ts.isObjectLiteralElementLike(bindingElement)) { switch (bindingElement.kind) { case 270: return getTargetOfBindingOrAssignmentElement(bindingElement.initializer); case 271: return bindingElement.name; case 272: return getTargetOfBindingOrAssignmentElement(bindingElement.expression); } return undefined; } if (ts.isAssignmentExpression(bindingElement, true)) { return getTargetOfBindingOrAssignmentElement(bindingElement.left); } if (ts.isSpreadElement(bindingElement)) { return getTargetOfBindingOrAssignmentElement(bindingElement.expression); } return bindingElement; } ts.getTargetOfBindingOrAssignmentElement = getTargetOfBindingOrAssignmentElement; function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) { switch (bindingElement.kind) { case 149: case 182: return bindingElement.dotDotDotToken; case 204: case 272: return bindingElement; } return undefined; } ts.getRestIndicatorOfBindingOrAssignmentElement = getRestIndicatorOfBindingOrAssignmentElement; function getPropertyNameOfBindingOrAssignmentElement(bindingElement) { switch (bindingElement.kind) { case 182: if (bindingElement.propertyName) { var propertyName = bindingElement.propertyName; return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression) ? propertyName.expression : propertyName; } break; case 270: if (bindingElement.name) { var propertyName = bindingElement.name; return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression) ? propertyName.expression : propertyName; } break; case 272: return bindingElement.name; } var target = getTargetOfBindingOrAssignmentElement(bindingElement); if (target && ts.isPropertyName(target)) { return ts.isComputedPropertyName(target) && ts.isStringOrNumericLiteral(target.expression) ? target.expression : target; } ts.Debug.fail("Invalid property name for binding element."); } ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement; function getElementsOfBindingOrAssignmentPattern(name) { switch (name.kind) { case 180: case 181: case 183: return name.elements; case 184: return name.properties; } } ts.getElementsOfBindingOrAssignmentPattern = getElementsOfBindingOrAssignmentPattern; function convertToArrayAssignmentElement(element) { if (ts.isBindingElement(element)) { if (element.dotDotDotToken) { ts.Debug.assertNode(element.name, ts.isIdentifier); return ts.setOriginalNode(ts.setTextRange(ts.createSpread(element.name), element), element); } var expression = convertToAssignmentElementTarget(element.name); return element.initializer ? ts.setOriginalNode(ts.setTextRange(ts.createAssignment(expression, element.initializer), element), element) : expression; } ts.Debug.assertNode(element, ts.isExpression); return element; } ts.convertToArrayAssignmentElement = convertToArrayAssignmentElement; function convertToObjectAssignmentElement(element) { if (ts.isBindingElement(element)) { if (element.dotDotDotToken) { ts.Debug.assertNode(element.name, ts.isIdentifier); return ts.setOriginalNode(ts.setTextRange(ts.createSpreadAssignment(element.name), element), element); } if (element.propertyName) { var expression = convertToAssignmentElementTarget(element.name); return ts.setOriginalNode(ts.setTextRange(ts.createPropertyAssignment(element.propertyName, element.initializer ? ts.createAssignment(expression, element.initializer) : expression), element), element); } ts.Debug.assertNode(element.name, ts.isIdentifier); return ts.setOriginalNode(ts.setTextRange(ts.createShorthandPropertyAssignment(element.name, element.initializer), element), element); } ts.Debug.assertNode(element, ts.isObjectLiteralElementLike); return element; } ts.convertToObjectAssignmentElement = convertToObjectAssignmentElement; function convertToAssignmentPattern(node) { switch (node.kind) { case 181: case 183: return convertToArrayAssignmentPattern(node); case 180: case 184: return convertToObjectAssignmentPattern(node); } } ts.convertToAssignmentPattern = convertToAssignmentPattern; function convertToObjectAssignmentPattern(node) { if (ts.isObjectBindingPattern(node)) { return ts.setOriginalNode(ts.setTextRange(ts.createObjectLiteral(ts.map(node.elements, convertToObjectAssignmentElement)), node), node); } ts.Debug.assertNode(node, ts.isObjectLiteralExpression); return node; } ts.convertToObjectAssignmentPattern = convertToObjectAssignmentPattern; function convertToArrayAssignmentPattern(node) { if (ts.isArrayBindingPattern(node)) { return ts.setOriginalNode(ts.setTextRange(ts.createArrayLiteral(ts.map(node.elements, convertToArrayAssignmentElement)), node), node); } ts.Debug.assertNode(node, ts.isArrayLiteralExpression); return node; } ts.convertToArrayAssignmentPattern = convertToArrayAssignmentPattern; function convertToAssignmentElementTarget(node) { if (ts.isBindingPattern(node)) { return convertToAssignmentPattern(node); } ts.Debug.assertNode(node, ts.isExpression); return node; } ts.convertToAssignmentElementTarget = convertToAssignmentElementTarget; })(ts || (ts = {})); var ts; (function (ts) { var isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration); function visitNode(node, visitor, test, lift) { if (node === undefined || visitor === undefined) { return node; } ts.aggregateTransformFlags(node); var visited = visitor(node); if (visited === node) { return node; } var visitedNode; if (visited === undefined) { return undefined; } else if (ts.isArray(visited)) { visitedNode = (lift || extractSingleNode)(visited); } else { visitedNode = visited; } ts.Debug.assertNode(visitedNode, test); ts.aggregateTransformFlags(visitedNode); return visitedNode; } ts.visitNode = visitNode; function visitNodes(nodes, visitor, test, start, count) { if (nodes === undefined || visitor === undefined) { return nodes; } var updated; var length = nodes.length; if (start === undefined || start < 0) { start = 0; } if (count === undefined || count > length - start) { count = length - start; } if (start > 0 || count < length) { updated = ts.createNodeArray([], nodes.hasTrailingComma && start + count === length); } 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) { updated = ts.createNodeArray(nodes.slice(0, i), nodes.hasTrailingComma); ts.setTextRange(updated, nodes); } if (visited) { if (ts.isArray(visited)) { for (var _i = 0, visited_1 = visited; _i < visited_1.length; _i++) { var visitedNode = visited_1[_i]; ts.Debug.assertNode(visitedNode, test); ts.aggregateTransformFlags(visitedNode); updated.push(visitedNode); } } else { ts.Debug.assertNode(visited, test); ts.aggregateTransformFlags(visited); updated.push(visited); } } } } return updated || nodes; } ts.visitNodes = visitNodes; function visitLexicalEnvironment(statements, visitor, context, start, ensureUseStrict) { context.startLexicalEnvironment(); statements = visitNodes(statements, visitor, ts.isStatement, start); if (ensureUseStrict && !ts.startsWithUseStrict(statements)) { statements = ts.setTextRange(ts.createNodeArray([ts.createStatement(ts.createLiteral("use strict"))].concat(statements)), statements); } var declarations = context.endLexicalEnvironment(); return ts.setTextRange(ts.createNodeArray(ts.concatenate(declarations, statements)), statements); } ts.visitLexicalEnvironment = visitLexicalEnvironment; function visitParameterList(nodes, visitor, context, nodesVisitor) { if (nodesVisitor === void 0) { nodesVisitor = visitNodes; } context.startLexicalEnvironment(); var updated = nodesVisitor(nodes, visitor, ts.isParameterDeclaration); context.suspendLexicalEnvironment(); return updated; } ts.visitParameterList = visitParameterList; function visitFunctionBody(node, visitor, context) { context.resumeLexicalEnvironment(); var updated = visitNode(node, visitor, ts.isConciseBody); var declarations = context.endLexicalEnvironment(); if (ts.some(declarations)) { var block = ts.convertToFunctionBody(updated); var statements = ts.mergeLexicalEnvironment(block.statements, declarations); return ts.updateBlock(block, statements); } return updated; } ts.visitFunctionBody = visitFunctionBody; function visitEachChild(node, visitor, context, nodesVisitor, tokenVisitor) { if (nodesVisitor === void 0) { nodesVisitor = visitNodes; } if (node === undefined) { return undefined; } var kind = node.kind; if ((kind > 0 && kind <= 145) || kind === 174) { return node; } switch (kind) { case 71: return ts.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, isTypeNodeOrTypeParameterDeclaration)); case 146: return ts.updateQualifiedName(node, visitNode(node.left, visitor, ts.isEntityName), visitNode(node.right, visitor, ts.isIdentifier)); case 147: return ts.updateComputedPropertyName(node, visitNode(node.expression, visitor, ts.isExpression)); 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: 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: return ts.updateDecorator(node, visitNode(node.expression, visitor, ts.isExpression)); 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: 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: 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: 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: 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: 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: 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: return ts.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); 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: 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)); case 161: return ts.updateTypePredicateNode(node, visitNode(node.parameterName, visitor), visitNode(node.type, visitor, ts.isTypeNode)); case 162: return ts.updateTypeReferenceNode(node, visitNode(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode)); 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: return ts.updateConstructorTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode)); case 165: return ts.updateTypeQueryNode(node, visitNode(node.exprName, visitor, ts.isEntityName)); case 166: return ts.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement)); case 167: return ts.updateArrayTypeNode(node, visitNode(node.elementType, visitor, ts.isTypeNode)); case 168: return ts.updateTypleTypeNode(node, nodesVisitor(node.elementTypes, visitor, ts.isTypeNode)); case 169: return ts.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode)); case 170: return ts.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode)); 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: return ts.updateInferTypeNode(node, visitNode(node.typeParameter, visitor, ts.isTypeParameterDeclaration)); 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: return ts.updateParenthesizedType(node, visitNode(node.type, visitor, ts.isTypeNode)); case 175: return ts.updateTypeOperatorNode(node, visitNode(node.type, visitor, ts.isTypeNode)); case 176: return ts.updateIndexedAccessTypeNode(node, visitNode(node.objectType, visitor, ts.isTypeNode), visitNode(node.indexType, visitor, ts.isTypeNode)); 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: return ts.updateLiteralTypeNode(node, visitNode(node.literal, visitor, ts.isExpression)); case 180: return ts.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement)); case 181: return ts.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement)); 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)); case 183: return ts.updateArrayLiteral(node, nodesVisitor(node.elements, visitor, ts.isExpression)); case 184: return ts.updateObjectLiteral(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike)); case 185: return ts.updatePropertyAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.name, visitor, ts.isIdentifier)); case 186: return ts.updateElementAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.argumentExpression, visitor, ts.isExpression)); 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: return ts.updateNew(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression)); 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: return ts.updateTypeAssertion(node, visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression)); case 191: return ts.updateParen(node, visitNode(node.expression, visitor, ts.isExpression)); 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: 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: return ts.updateDelete(node, visitNode(node.expression, visitor, ts.isExpression)); case 195: return ts.updateTypeOf(node, visitNode(node.expression, visitor, ts.isExpression)); case 196: return ts.updateVoid(node, visitNode(node.expression, visitor, ts.isExpression)); case 197: return ts.updateAwait(node, visitNode(node.expression, visitor, ts.isExpression)); case 198: return ts.updatePrefix(node, visitNode(node.operand, visitor, ts.isExpression)); case 199: return ts.updatePostfix(node, visitNode(node.operand, visitor, ts.isExpression)); 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: 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: return ts.updateTemplateExpression(node, visitNode(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan)); case 203: return ts.updateYield(node, visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.expression, visitor, ts.isExpression)); case 204: return ts.updateSpread(node, visitNode(node.expression, visitor, ts.isExpression)); 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: return ts.updateExpressionWithTypeArguments(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression)); case 208: return ts.updateAsExpression(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.type, visitor, ts.isTypeNode)); case 209: return ts.updateNonNullExpression(node, visitNode(node.expression, visitor, ts.isExpression)); case 210: return ts.updateMetaProperty(node, visitNode(node.name, visitor, ts.isIdentifier)); case 211: return ts.updateTemplateSpan(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail)); case 213: return ts.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement)); case 214: return ts.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.declarationList, visitor, ts.isVariableDeclarationList)); case 216: return ts.updateStatement(node, visitNode(node.expression, visitor, ts.isExpression)); 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: return ts.updateDo(node, visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock), visitNode(node.expression, visitor, ts.isExpression)); case 219: return ts.updateWhile(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); 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: 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: 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: return ts.updateContinue(node, visitNode(node.label, visitor, ts.isIdentifier)); case 224: return ts.updateBreak(node, visitNode(node.label, visitor, ts.isIdentifier)); case 225: return ts.updateReturn(node, visitNode(node.expression, visitor, ts.isExpression)); case 226: return ts.updateWith(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); case 227: return ts.updateSwitch(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.caseBlock, visitor, ts.isCaseBlock)); case 228: return ts.updateLabel(node, visitNode(node.label, visitor, ts.isIdentifier), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); case 229: return ts.updateThrow(node, visitNode(node.expression, visitor, ts.isExpression)); 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: return ts.updateVariableDeclaration(node, visitNode(node.name, visitor, ts.isBindingName), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression)); case 233: return ts.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration)); 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: 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: 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: 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: 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: 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: return ts.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement)); case 241: return ts.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause)); case 242: return ts.updateNamespaceExportDeclaration(node, visitNode(node.name, visitor, ts.isIdentifier)); 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: 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: return ts.updateImportClause(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.namedBindings, visitor, ts.isNamedImportBindings)); case 246: return ts.updateNamespaceImport(node, visitNode(node.name, visitor, ts.isIdentifier)); case 247: return ts.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier)); case 248: return ts.updateImportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier)); 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: 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: return ts.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier)); case 252: return ts.updateExportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier)); case 254: return ts.updateExternalModuleReference(node, visitNode(node.expression, visitor, ts.isExpression)); 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: return ts.updateJsxSelfClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.attributes, visitor, ts.isJsxAttributes)); 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: return ts.updateJsxClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression)); 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: return ts.updateJsxAttribute(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.initializer, visitor, ts.isStringLiteralOrJsxExpression)); case 263: return ts.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike)); case 264: return ts.updateJsxSpreadAttribute(node, visitNode(node.expression, visitor, ts.isExpression)); case 265: return ts.updateJsxExpression(node, visitNode(node.expression, visitor, ts.isExpression)); case 266: return ts.updateCaseClause(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement)); case 267: return ts.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement)); case 268: return ts.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments)); case 269: return ts.updateCatchClause(node, visitNode(node.variableDeclaration, visitor, ts.isVariableDeclaration), visitNode(node.block, visitor, ts.isBlock)); case 270: return ts.updatePropertyAssignment(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression)); case 271: return ts.updateShorthandPropertyAssignment(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.objectAssignmentInitializer, visitor, ts.isExpression)); case 272: return ts.updateSpreadAssignment(node, visitNode(node.expression, visitor, ts.isExpression)); case 273: return ts.updateEnumMember(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression)); case 274: return ts.updateSourceFileNode(node, visitLexicalEnvironment(node.statements, visitor, context)); case 302: return ts.updatePartiallyEmittedExpression(node, visitNode(node.expression, visitor, ts.isExpression)); case 303: return ts.updateCommaList(node, nodesVisitor(node.elements, visitor, ts.isExpression)); default: return node; } } ts.visitEachChild = visitEachChild; function extractSingleNode(nodes) { ts.Debug.assert(nodes.length <= 1, "Too many nodes written to output."); return ts.singleOrUndefined(nodes); } })(ts || (ts = {})); (function (ts) { function reduceNode(node, f, initial) { return node ? f(initial, node) : initial; } function reduceNodeArray(nodes, f, initial) { return nodes ? f(initial, nodes) : initial; } function reduceEachChild(node, initial, cbNode, cbNodeArray) { if (node === undefined) { return initial; } var reduceNodes = cbNodeArray ? reduceNodeArray : ts.reduceLeft; var cbNodes = cbNodeArray || cbNode; var kind = node.kind; if ((kind > 0 && kind <= 145)) { return initial; } if ((kind >= 161 && kind <= 178)) { return initial; } var result = initial; switch (node.kind) { case 212: case 215: case 206: case 231: case 301: break; case 146: result = reduceNode(node.left, cbNode, result); result = reduceNode(node.right, cbNode, result); break; case 147: result = reduceNode(node.expression, cbNode, result); break; 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: result = reduceNode(node.expression, cbNode, result); break; 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: 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: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.typeParameters, cbNodes, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; case 155: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.body, cbNode, result); break; case 156: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; case 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; case 180: case 181: result = reduceNodes(node.elements, cbNodes, result); break; case 182: result = reduceNode(node.propertyName, cbNode, result); result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; case 183: result = reduceNodes(node.elements, cbNodes, result); break; case 184: result = reduceNodes(node.properties, cbNodes, result); break; case 185: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.name, cbNode, result); break; case 186: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.argumentExpression, cbNode, result); break; case 187: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); result = reduceNodes(node.arguments, cbNodes, result); break; case 188: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); result = reduceNodes(node.arguments, cbNodes, result); break; case 189: result = reduceNode(node.tag, cbNode, result); result = reduceNode(node.template, cbNode, result); break; case 190: result = reduceNode(node.type, cbNode, result); result = reduceNode(node.expression, cbNode, result); break; case 192: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.typeParameters, cbNodes, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; case 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: case 194: case 195: case 196: case 197: case 203: case 204: case 209: result = reduceNode(node.expression, cbNode, result); break; case 198: case 199: result = reduceNode(node.operand, cbNode, result); break; case 200: result = reduceNode(node.left, cbNode, result); result = reduceNode(node.right, cbNode, result); break; case 201: result = reduceNode(node.condition, cbNode, result); result = reduceNode(node.whenTrue, cbNode, result); result = reduceNode(node.whenFalse, cbNode, result); break; case 202: result = reduceNode(node.head, cbNode, result); result = reduceNodes(node.templateSpans, cbNodes, result); break; 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: result = reduceNode(node.expression, cbNode, result); result = reduceNodes(node.typeArguments, cbNodes, result); break; case 208: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.type, cbNode, result); break; case 211: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.literal, cbNode, result); break; case 213: result = reduceNodes(node.statements, cbNodes, result); break; case 214: result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.declarationList, cbNode, result); break; case 216: result = reduceNode(node.expression, cbNode, result); break; case 217: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.thenStatement, cbNode, result); result = reduceNode(node.elseStatement, cbNode, result); break; case 218: result = reduceNode(node.statement, cbNode, result); result = reduceNode(node.expression, cbNode, result); break; case 219: case 226: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; 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: case 222: result = reduceNode(node.initializer, cbNode, result); result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; case 225: case 229: result = reduceNode(node.expression, cbNode, result); break; case 227: result = reduceNode(node.expression, cbNode, result); result = reduceNode(node.caseBlock, cbNode, result); break; case 228: result = reduceNode(node.label, cbNode, result); result = reduceNode(node.statement, cbNode, result); break; case 230: result = reduceNode(node.tryBlock, cbNode, result); result = reduceNode(node.catchClause, cbNode, result); result = reduceNode(node.finallyBlock, cbNode, result); break; case 232: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; case 233: result = reduceNodes(node.declarations, cbNodes, result); break; case 234: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.typeParameters, cbNodes, result); result = reduceNodes(node.parameters, cbNodes, result); result = reduceNode(node.type, cbNode, result); result = reduceNode(node.body, cbNode, result); break; case 235: result = reduceNodes(node.decorators, cbNodes, result); result = reduceNodes(node.modifiers, cbNodes, result); result = reduceNode(node.name, cbNode, result); result = reduceNodes(node.typeParameters, cbNodes, result); result = reduceNodes(node.heritageClauses, cbNodes, result); result = reduceNodes(node.members, cbNodes, result); break; case 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: 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: result = reduceNodes(node.statements, cbNodes, result); break; case 241: result = reduceNodes(node.clauses, cbNodes, result); break; 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: 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: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.namedBindings, cbNode, result); break; case 246: result = reduceNode(node.name, cbNode, result); break; case 247: case 251: result = reduceNodes(node.elements, cbNodes, result); break; case 248: case 252: result = reduceNode(node.propertyName, cbNode, result); result = reduceNode(node.name, cbNode, result); break; 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: 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; case 254: result = reduceNode(node.expression, cbNode, result); break; case 255: result = reduceNode(node.openingElement, cbNode, result); result = ts.reduceLeft(node.children, cbNode, result); result = reduceNode(node.closingElement, cbNode, result); break; case 259: result = reduceNode(node.openingFragment, cbNode, result); result = ts.reduceLeft(node.children, cbNode, result); result = reduceNode(node.closingFragment, cbNode, result); break; case 256: case 257: result = reduceNode(node.tagName, cbNode, result); result = reduceNode(node.attributes, cbNode, result); break; case 263: result = reduceNodes(node.properties, cbNodes, result); break; case 258: result = reduceNode(node.tagName, cbNode, result); break; case 262: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; case 264: result = reduceNode(node.expression, cbNode, result); break; case 265: result = reduceNode(node.expression, cbNode, result); break; case 266: result = reduceNode(node.expression, cbNode, result); case 267: result = reduceNodes(node.statements, cbNodes, result); break; case 268: result = reduceNodes(node.types, cbNodes, result); break; case 269: result = reduceNode(node.variableDeclaration, cbNode, result); result = reduceNode(node.block, cbNode, result); break; case 270: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; case 271: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.objectAssignmentInitializer, cbNode, result); break; case 272: result = reduceNode(node.expression, cbNode, result); break; case 273: result = reduceNode(node.name, cbNode, result); result = reduceNode(node.initializer, cbNode, result); break; case 274: result = reduceNodes(node.statements, cbNodes, result); break; case 302: result = reduceNode(node.expression, cbNode, result); break; case 303: result = reduceNodes(node.elements, cbNodes, result); break; default: break; } return result; } ts.reduceEachChild = reduceEachChild; function mergeLexicalEnvironment(statements, declarations) { if (!ts.some(declarations)) { return statements; } return ts.isNodeArray(statements) ? ts.setTextRange(ts.createNodeArray(ts.prependStatements(statements.slice(), declarations)), statements) : ts.prependStatements(statements, declarations); } ts.mergeLexicalEnvironment = mergeLexicalEnvironment; 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; function aggregateTransformFlags(node) { aggregateTransformFlagsForNode(node); return node; } ts.aggregateTransformFlags = aggregateTransformFlags; function aggregateTransformFlagsForNode(node) { if (node === undefined) { return 0; } if (node.transformFlags & 536870912) { return node.transformFlags & ~ts.getTransformFlagsSubtreeExclusions(node.kind); } var subtreeFlags = aggregateTransformFlagsForSubtree(node); return ts.computeTransformFlagsForNode(node, subtreeFlags); } function aggregateTransformFlagsForNodeArray(nodes) { if (nodes === undefined) { return 0; } 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; } nodes.transformFlags = nodeArrayFlags | 536870912; return subtreeFlags; } function aggregateTransformFlagsForSubtree(node) { if (ts.hasModifier(node, 2) || (ts.isTypeNode(node) && node.kind !== 207)) { return 0; } return reduceEachChild(node, 0, aggregateTransformFlagsForChildNode, aggregateTransformFlagsForChildNodes); } function aggregateTransformFlagsForChildNode(transformFlags, node) { return transformFlags | aggregateTransformFlagsForNode(node); } function aggregateTransformFlagsForChildNodes(transformFlags, nodes) { return transformFlags | aggregateTransformFlagsForNodeArray(nodes); } var Debug; (function (Debug) { var isDebugInfoEnabled = false; function failBadSyntaxKind(node, message) { return Debug.fail((message || "Unexpected node.") + "\r\nNode " + ts.formatSyntaxKind(node.kind) + " was unexpected.", failBadSyntaxKind); } Debug.failBadSyntaxKind = failBadSyntaxKind; 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) ? 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) ? 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) ? 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) ? function (node, message) { return Debug.assert(node === undefined, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was unexpected'."; }, Debug.assertMissingNode); } : ts.noop; function enableDebugInfo() { if (isDebugInfoEnabled) return; 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 ? ts.formatObjectFlags(this.objectFlags) : ""; } }, __debugTypeToString: { value: function () { return this.checker.typeToString(this); } }, }); var nodeConstructors = [ ts.objectAllocator.getNodeConstructor(), ts.objectAllocator.getIdentifierConstructor(), ts.objectAllocator.getTokenConstructor(), ts.objectAllocator.getSourceFileConstructor() ]; for (var _i = 0, nodeConstructors_1 = nodeConstructors; _i < nodeConstructors_1.length; _i++) { var ctor = nodeConstructors_1[_i]; if (!ctor.prototype.hasOwnProperty("__debugKind")) { Object.defineProperties(ctor.prototype, { __debugKind: { get: function () { return ts.formatSyntaxKind(this.kind); } }, __debugModifierFlags: { get: function () { return ts.formatModifierFlags(ts.getModifierFlagsNoCache(this)); } }, __debugTransformFlags: { get: function () { return ts.formatTransformFlags(this.transformFlags); } }, __debugEmitFlags: { get: function () { return ts.formatEmitFlags(ts.getEmitFlags(this)); } }, __debugGetText: { value: function (includeTrivia) { if (ts.nodeIsSynthesized(this)) return ""; var parseNode = ts.getParseTreeNode(this); var sourceFile = parseNode && ts.getSourceFileOfNode(parseNode); return sourceFile ? ts.getSourceTextOfNodeFromSourceFile(sourceFile, parseNode, includeTrivia) : ""; } } }); } } isDebugInfoEnabled = true; } Debug.enableDebugInfo = enableDebugInfo; })(Debug = ts.Debug || (ts.Debug = {})); })(ts || (ts = {})); var ts; (function (ts) { function createSourceFileLikeCache(host) { var cached = ts.createMap(); return { get: function (path) { if (cached.has(path)) { return cached.get(path); } if (!host.fileExists || !host.readFile || !host.fileExists(path)) return; var text = host.readFile(path); var file = { text: text, lineMap: undefined, getLineAndCharacterOfPosition: function (pos) { return ts.computeLineAndCharacterOfPosition(ts.getLineStarts(this), pos); } }; cached.set(path, file); return file; } }; } ts.createSourceFileLikeCache = createSourceFileLikeCache; })(ts || (ts = {})); (function (ts) { var sourcemaps; (function (sourcemaps) { sourcemaps.identitySourceMapper = { getOriginalPosition: ts.identity, getGeneratedPosition: ts.identity }; function decode(host, mapPath, map, program, fallbackCache) { if (fallbackCache === void 0) { fallbackCache = ts.createSourceFileLikeCache(host); } var currentDirectory = ts.getDirectoryPath(mapPath); var sourceRoot = map.sourceRoot || currentDirectory; var decodedMappings; var generatedOrderedMappings; var sourceOrderedMappings; return { getOriginalPosition: getOriginalPosition, getGeneratedPosition: getGeneratedPosition }; function getGeneratedPosition(loc) { var maps = getSourceOrderedMappings(); if (!ts.length(maps)) return loc; var targetIndex = ts.binarySearch(maps, { sourcePath: loc.fileName, sourcePosition: loc.position }, ts.identity, compareProcessedPositionSourcePositions); if (targetIndex < 0 && maps.length > 0) { targetIndex = ~targetIndex; } if (!maps[targetIndex] || ts.comparePaths(loc.fileName, maps[targetIndex].sourcePath, sourceRoot) !== 0) { return loc; } return { fileName: ts.toPath(map.file, sourceRoot, host.getCanonicalFileName), position: maps[targetIndex].emittedPosition }; } function getOriginalPosition(loc) { var maps = getGeneratedOrderedMappings(); if (!ts.length(maps)) return loc; var targetIndex = ts.binarySearch(maps, { emittedPosition: loc.position }, ts.identity, compareProcessedPositionEmittedPositions); if (targetIndex < 0 && maps.length > 0) { targetIndex = ~targetIndex; } return { fileName: ts.toPath(maps[targetIndex].sourcePath, sourceRoot, host.getCanonicalFileName), position: maps[targetIndex].sourcePosition }; } function getSourceFileLike(fileName, location) { var file = program && program.getSourceFile(fileName); if (!file) { var path = ts.toPath(fileName, location, host.getCanonicalFileName); return fallbackCache.get(path); } return file; } function getPositionOfLineAndCharacterUsingName(fileName, directory, line, character) { var file = getSourceFileLike(fileName, directory); if (!file) { return -1; } return ts.getPositionOfLineAndCharacter(file, line, character); } function getDecodedMappings() { return decodedMappings || (decodedMappings = calculateDecodedMappings(map, processPosition, host)); } function getSourceOrderedMappings() { return sourceOrderedMappings || (sourceOrderedMappings = getDecodedMappings().slice().sort(compareProcessedPositionSourcePositions)); } function getGeneratedOrderedMappings() { return generatedOrderedMappings || (generatedOrderedMappings = getDecodedMappings().slice().sort(compareProcessedPositionEmittedPositions)); } function compareProcessedPositionSourcePositions(a, b) { return ts.comparePaths(a.sourcePath, b.sourcePath, sourceRoot) || ts.compareValues(a.sourcePosition, b.sourcePosition); } function compareProcessedPositionEmittedPositions(a, b) { return ts.compareValues(a.emittedPosition, b.emittedPosition); } function processPosition(position) { var sourcePath = map.sources[position.sourceIndex]; return { emittedPosition: getPositionOfLineAndCharacterUsingName(map.file, currentDirectory, position.emittedLine, position.emittedColumn), sourcePosition: getPositionOfLineAndCharacterUsingName(sourcePath, sourceRoot, position.sourceLine, position.sourceColumn), sourcePath: sourcePath, }; } } sourcemaps.decode = decode; function decodeMappings(map) { var state = { encodedText: map.mappings, currentNameIndex: undefined, sourceMapNamesLength: map.names ? map.names.length : undefined, currentEmittedColumn: 0, currentEmittedLine: 0, currentSourceColumn: 0, currentSourceLine: 0, currentSourceIndex: 0, decodingIndex: 0 }; function captureSpan() { return { emittedColumn: state.currentEmittedColumn, emittedLine: state.currentEmittedLine, sourceColumn: state.currentSourceColumn, sourceIndex: state.currentSourceIndex, sourceLine: state.currentSourceLine, nameIndex: state.currentNameIndex }; } return { get decodingIndex() { return state.decodingIndex; }, get error() { return state.error; }, get lastSpan() { return captureSpan(); }, next: function () { if (hasCompletedDecoding(state) || state.error) return { done: true, value: undefined }; if (!decodeSinglePosition(state)) return { done: true, value: undefined }; return { done: false, value: captureSpan() }; } }; } sourcemaps.decodeMappings = decodeMappings; function calculateDecodedMappings(map, processPosition, host) { var decoder = decodeMappings(map); var positions = ts.arrayFrom(decoder, processPosition); if (decoder.error) { if (host && host.log) { host.log("Encountered error while decoding sourcemap: " + decoder.error); } return []; } return positions; } sourcemaps.calculateDecodedMappings = calculateDecodedMappings; function hasCompletedDecoding(state) { return state.decodingIndex === state.encodedText.length; } function decodeSinglePosition(state) { while (state.decodingIndex < state.encodedText.length) { var char = state.encodedText.charCodeAt(state.decodingIndex); if (char === 59) { state.currentEmittedLine++; state.currentEmittedColumn = 0; state.decodingIndex++; continue; } if (char === 44) { state.decodingIndex++; continue; } state.currentEmittedColumn += base64VLQFormatDecode(); if (createErrorIfCondition(state.currentEmittedColumn < 0, "Invalid emittedColumn found")) { return false; } if (createErrorIfCondition(isSourceMappingSegmentEnd(state.encodedText, state.decodingIndex), "Unsupported Error Format: No entries after emitted column")) { return false; } state.currentSourceIndex += base64VLQFormatDecode(); if (createErrorIfCondition(state.currentSourceIndex < 0, "Invalid sourceIndex found")) { return false; } if (createErrorIfCondition(isSourceMappingSegmentEnd(state.encodedText, state.decodingIndex), "Unsupported Error Format: No entries after sourceIndex")) { return false; } state.currentSourceLine += base64VLQFormatDecode(); if (createErrorIfCondition(state.currentSourceLine < 0, "Invalid sourceLine found")) { return false; } if (createErrorIfCondition(isSourceMappingSegmentEnd(state.encodedText, state.decodingIndex), "Unsupported Error Format: No entries after emitted Line")) { return false; } state.currentSourceColumn += base64VLQFormatDecode(); if (createErrorIfCondition(state.currentSourceColumn < 0, "Invalid sourceLine found")) { return false; } if (!isSourceMappingSegmentEnd(state.encodedText, state.decodingIndex)) { if (state.currentNameIndex === undefined) { state.currentNameIndex = 0; } state.currentNameIndex += base64VLQFormatDecode(); } if (createErrorIfCondition(!isSourceMappingSegmentEnd(state.encodedText, state.decodingIndex), "Unsupported Error Format: There are more entries after " + (state.currentNameIndex === undefined ? "sourceColumn" : "nameIndex"))) { return false; } return true; } createErrorIfCondition(true, "No encoded entry found"); return false; function createErrorIfCondition(condition, errormsg) { if (state.error) { return true; } if (condition) { state.error = errormsg; } return condition; } function base64VLQFormatDecode() { var moreDigits = true; var shiftCount = 0; var value = 0; for (; moreDigits; state.decodingIndex++) { if (createErrorIfCondition(state.decodingIndex >= state.encodedText.length, "Error in decoding base64VLQFormatDecode, past the mapping string")) { return undefined; } var currentByte = base64FormatDecode(state.encodedText.charAt(state.decodingIndex)); moreDigits = (currentByte & 32) !== 0; value = value | ((currentByte & 31) << shiftCount); shiftCount += 5; } if ((value & 1) === 0) { value = value >> 1; } else { value = value >> 1; value = -value; } return value; } } function base64FormatDecode(char) { return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(char); } function isSourceMappingSegmentEnd(encodedText, pos) { return (pos === encodedText.length || encodedText.charCodeAt(pos) === 44 || encodedText.charCodeAt(pos) === 59); } })(sourcemaps = ts.sourcemaps || (ts.sourcemaps = {})); })(ts || (ts = {})); var ts; (function (ts) { function getOriginalNodeId(node) { node = ts.getOriginalNode(node); return node ? ts.getNodeId(node) : 0; } ts.getOriginalNodeId = getOriginalNodeId; function containsDefaultReference(node) { if (!node) return false; if (!ts.isNamedImports(node)) return false; return ts.some(node.elements, isNamedDefaultReference); } function isNamedDefaultReference(e) { return e.propertyName !== undefined && e.propertyName.escapedText === "default"; } function chainBundle(transformSourceFile) { return transformSourceFileOrBundle; function transformSourceFileOrBundle(node) { return node.kind === 274 ? transformSourceFile(node) : transformBundle(node); } function transformBundle(node) { return ts.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends); } } ts.chainBundle = chainBundle; function getImportNeedsImportStarHelper(node) { if (!!ts.getNamespaceDeclarationNode(node)) { return true; } var bindings = node.importClause && node.importClause.namedBindings; if (!bindings) { return false; } if (!ts.isNamedImports(bindings)) return false; var defaultRefCount = 0; for (var _i = 0, _a = bindings.elements; _i < _a.length; _i++) { var binding = _a[_i]; if (isNamedDefaultReference(binding)) { defaultRefCount++; } } return (defaultRefCount > 0 && defaultRefCount !== bindings.elements.length) || (!!(bindings.elements.length - defaultRefCount) && ts.isDefaultImport(node)); } ts.getImportNeedsImportStarHelper = getImportNeedsImportStarHelper; function getImportNeedsImportDefaultHelper(node) { 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) { var externalImports = []; var exportSpecifiers = ts.createMultiMap(); var exportedBindings = []; var uniqueExports = ts.createMap(); var exportedNames; var hasExportDefault = false; var exportEquals; var hasExportStarsToExportValues = false; var hasImportStarOrImportDefault = false; for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var node = _a[_i]; switch (node.kind) { case 244: externalImports.push(node); hasImportStarOrImportDefault = hasImportStarOrImportDefault || getImportNeedsImportStarHelper(node) || getImportNeedsImportDefaultHelper(node); break; case 243: if (node.moduleReference.kind === 254) { externalImports.push(node); } break; case 250: if (node.moduleSpecifier) { if (!node.exportClause) { externalImports.push(node); hasExportStarsToExportValues = true; } else { externalImports.push(node); } } else { for (var _b = 0, _c = node.exportClause.elements; _b < _c.length; _b++) { var specifier = _c[_b]; if (!uniqueExports.get(ts.idText(specifier.name))) { var name = specifier.propertyName || specifier.name; exportSpecifiers.add(ts.idText(name), specifier); var decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); if (decl) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); } uniqueExports.set(ts.idText(specifier.name), true); exportedNames = ts.append(exportedNames, specifier.name); } } } break; case 249: if (node.isExportEquals && !exportEquals) { exportEquals = node; } break; 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: if (ts.hasModifier(node, 1)) { if (ts.hasModifier(node, 512)) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node)); hasExportDefault = true; } } else { var name = node.name; if (!uniqueExports.get(ts.idText(name))) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); uniqueExports.set(ts.idText(name), true); exportedNames = ts.append(exportedNames, name); } } } break; case 235: if (ts.hasModifier(node, 1)) { if (ts.hasModifier(node, 512)) { if (!hasExportDefault) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node)); hasExportDefault = true; } } else { var name = node.name; if (name && !uniqueExports.get(ts.idText(name))) { multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); uniqueExports.set(ts.idText(name), true); exportedNames = ts.append(exportedNames, name); } } } break; } } var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStarOrImportDefault); var externalHelpersImportDeclaration = externalHelpersModuleName && ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)); if (externalHelpersImportDeclaration) { ts.addEmitFlags(externalHelpersImportDeclaration, 67108864); externalImports.unshift(externalHelpersImportDeclaration); } return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames, externalHelpersImportDeclaration: externalHelpersImportDeclaration }; } ts.collectExternalModuleInfo = collectExternalModuleInfo; function collectExportedVariableInfo(decl, uniqueExports, exportedNames) { if (ts.isBindingPattern(decl.name)) { for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { exportedNames = collectExportedVariableInfo(element, uniqueExports, exportedNames); } } } else if (!ts.isGeneratedIdentifier(decl.name)) { var text = ts.idText(decl.name); if (!uniqueExports.get(text)) { uniqueExports.set(text, true); exportedNames = ts.append(exportedNames, decl.name); } } return exportedNames; } function multiMapSparseArrayAdd(map, key, value) { var values = map[key]; if (values) { values.push(value); } else { map[key] = values = [value]; } return values; } function isSimpleCopiableExpression(expression) { return ts.isStringLiteralLike(expression) || expression.kind === 8 || ts.isKeyword(expression.kind) || ts.isIdentifier(expression); } ts.isSimpleCopiableExpression = isSimpleCopiableExpression; function helperString(input) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return function (uniqueName) { var result = ""; for (var i = 0; i < args.length; i++) { result += input[i]; result += uniqueName(args[i]); } result += input[input.length - 1]; return result; }; } ts.helperString = helperString; })(ts || (ts = {})); var ts; (function (ts) { var FlattenLevel; (function (FlattenLevel) { FlattenLevel[FlattenLevel["All"] = 0] = "All"; FlattenLevel[FlattenLevel["ObjectRest"] = 1] = "ObjectRest"; })(FlattenLevel = ts.FlattenLevel || (ts.FlattenLevel = {})); function flattenDestructuringAssignment(node, visitor, context, level, needsValue, createAssignmentCallback) { var location = node; var value; if (ts.isDestructuringAssignment(node)) { value = node.right; while (ts.isEmptyArrayLiteral(node.left) || ts.isEmptyObjectLiteral(node.left)) { if (ts.isDestructuringAssignment(value)) { location = node = value; value = node.right; } else { return ts.visitNode(value, visitor, ts.isExpression); } } } var expressions; var flattenContext = { context: context, level: level, downlevelIteration: !!context.getCompilerOptions().downlevelIteration, hoistTempVariables: true, emitExpression: emitExpression, emitBindingOrAssignment: emitBindingOrAssignment, createArrayBindingOrAssignmentPattern: makeArrayAssignmentPattern, createObjectBindingOrAssignmentPattern: makeObjectAssignmentPattern, createArrayBindingOrAssignmentElement: makeAssignmentElement, visitor: visitor }; if (value) { value = ts.visitNode(value, visitor, ts.isExpression); if (ts.isIdentifier(value) && bindingOrAssignmentElementAssignsToName(node, value.escapedText)) { value = ensureIdentifier(flattenContext, value, false, location); } else if (needsValue) { value = ensureIdentifier(flattenContext, value, true, location); } else if (ts.nodeIsSynthesized(node)) { location = value; } } flattenBindingOrAssignmentElement(flattenContext, node, value, location, ts.isDestructuringAssignment(node)); if (value && needsValue) { if (!ts.some(expressions)) { return value; } expressions.push(value); } return ts.aggregateTransformFlags(ts.inlineExpressions(expressions)) || ts.createOmittedExpression(); function emitExpression(expression) { ts.setEmitFlags(expression, 64); ts.aggregateTransformFlags(expression); expressions = ts.append(expressions, expression); } function emitBindingOrAssignment(target, value, location, original) { ts.Debug.assertNode(target, createAssignmentCallback ? ts.isIdentifier : ts.isExpression); var expression = createAssignmentCallback ? createAssignmentCallback(target, value, location) : ts.setTextRange(ts.createAssignment(ts.visitNode(target, visitor, ts.isExpression), value), location); expression.original = original; emitExpression(expression); } } ts.flattenDestructuringAssignment = flattenDestructuringAssignment; function bindingOrAssignmentElementAssignsToName(element, escapedName) { var target = ts.getTargetOfBindingOrAssignmentElement(element); if (ts.isBindingOrAssignmentPattern(target)) { return bindingOrAssignmentPatternAssignsToName(target, escapedName); } else if (ts.isIdentifier(target)) { return target.escapedText === escapedName; } return false; } function bindingOrAssignmentPatternAssignsToName(pattern, escapedName) { var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern); for (var _i = 0, elements_3 = elements; _i < elements_3.length; _i++) { var element = elements_3[_i]; if (bindingOrAssignmentElementAssignsToName(element, escapedName)) { return true; } } return false; } function flattenDestructuringBinding(node, visitor, context, level, rval, hoistTempVariables, skipInitializer) { if (hoistTempVariables === void 0) { hoistTempVariables = false; } var pendingExpressions; var pendingDeclarations = []; var declarations = []; var flattenContext = { context: context, level: level, downlevelIteration: !!context.getCompilerOptions().downlevelIteration, hoistTempVariables: hoistTempVariables, emitExpression: emitExpression, emitBindingOrAssignment: emitBindingOrAssignment, createArrayBindingOrAssignmentPattern: makeArrayBindingPattern, createObjectBindingOrAssignmentPattern: makeObjectBindingPattern, createArrayBindingOrAssignmentElement: makeBindingElement, visitor: visitor }; if (ts.isVariableDeclaration(node)) { var initializer = ts.getInitializerOfBindingOrAssignmentElement(node); if (initializer && ts.isIdentifier(initializer) && bindingOrAssignmentElementAssignsToName(node, initializer.escapedText)) { 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(undefined); if (hoistTempVariables) { var value = ts.inlineExpressions(pendingExpressions); pendingExpressions = undefined; emitBindingOrAssignment(temp, value, undefined, undefined); } else { context.hoistVariableDeclaration(temp); var pendingDeclaration = ts.last(pendingDeclarations); pendingDeclaration.pendingExpressions = ts.append(pendingDeclaration.pendingExpressions, ts.createAssignment(temp, pendingDeclaration.value)); ts.addRange(pendingDeclaration.pendingExpressions, pendingExpressions); pendingDeclaration.value = temp; } } 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, 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); } ts.aggregateTransformFlags(variable); declarations.push(variable); } return declarations; function emitExpression(value) { pendingExpressions = ts.append(pendingExpressions, value); } function emitBindingOrAssignment(target, value, location, original) { ts.Debug.assertNode(target, ts.isBindingName); if (pendingExpressions) { value = ts.inlineExpressions(ts.append(pendingExpressions, value)); pendingExpressions = undefined; } pendingDeclarations.push({ pendingExpressions: pendingExpressions, name: target, value: value, location: location, original: original }); } } ts.flattenDestructuringBinding = flattenDestructuringBinding; function flattenBindingOrAssignmentElement(flattenContext, element, value, location, skipInitializer) { if (!skipInitializer) { var initializer = ts.visitNode(ts.getInitializerOfBindingOrAssignmentElement(element), flattenContext.visitor, ts.isExpression); if (initializer) { value = value ? createDefaultValueCheck(flattenContext, value, initializer, location) : initializer; } else if (!value) { value = ts.createVoidZero(); } } var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element); if (ts.isObjectBindingOrAssignmentPattern(bindingTarget)) { flattenObjectBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); } else if (ts.isArrayBindingOrAssignmentPattern(bindingTarget)) { flattenArrayBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); } else { flattenContext.emitBindingOrAssignment(bindingTarget, value, location, element); } } function flattenObjectBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) { var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern); var numElements = elements.length; if (numElements !== 1) { var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0; value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location); } var bindingElements; var computedTempVariables; for (var i = 0; i < numElements; i++) { var element = elements[i]; if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) { var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(element); if (flattenContext.level >= 1 && !(element.transformFlags & (524288 | 1048576)) && !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (524288 | 1048576)) && !ts.isComputedPropertyName(propertyName)) { bindingElements = ts.append(bindingElements, element); } else { if (bindingElements) { flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); bindingElements = undefined; } var rhsValue = createDestructuringPropertyAccess(flattenContext, value, propertyName); if (ts.isComputedPropertyName(propertyName)) { computedTempVariables = ts.append(computedTempVariables, rhsValue.argumentExpression); } flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } else if (i === numElements - 1) { if (bindingElements) { flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); bindingElements = undefined; } var rhsValue = createRestCall(flattenContext.context, value, elements, computedTempVariables, pattern); flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } if (bindingElements) { flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); } } function flattenArrayBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) { var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern); var numElements = elements.length; if (flattenContext.level < 1 && flattenContext.downlevelIteration) { value = ensureIdentifier(flattenContext, ts.createReadHelper(flattenContext.context, value, numElements > 0 && ts.getRestIndicatorOfBindingOrAssignmentElement(elements[numElements - 1]) ? undefined : numElements, location), false, location); } else if (numElements !== 1 && (flattenContext.level < 1 || numElements === 0) || ts.every(elements, ts.isOmittedExpression)) { var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0; value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location); } var bindingElements; var restContainingElements; for (var i = 0; i < numElements; i++) { var element = elements[i]; if (flattenContext.level >= 1) { if (element.transformFlags & 1048576) { var temp = ts.createTempVariable(undefined); if (flattenContext.hoistTempVariables) { flattenContext.context.hoistVariableDeclaration(temp); } restContainingElements = ts.append(restContainingElements, [temp, element]); bindingElements = ts.append(bindingElements, flattenContext.createArrayBindingOrAssignmentElement(temp)); } else { bindingElements = ts.append(bindingElements, element); } } else if (ts.isOmittedExpression(element)) { continue; } else if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) { var rhsValue = ts.createElementAccess(value, i); flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } else if (i === numElements - 1) { var rhsValue = ts.createArraySlice(value, i); flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); } } if (bindingElements) { flattenContext.emitBindingOrAssignment(flattenContext.createArrayBindingOrAssignmentPattern(bindingElements), value, location, pattern); } if (restContainingElements) { for (var _i = 0, restContainingElements_1 = restContainingElements; _i < restContainingElements_1.length; _i++) { var _a = restContainingElements_1[_i], id = _a[0], element = _a[1]; flattenBindingOrAssignmentElement(flattenContext, element, id, element); } } } function createDefaultValueCheck(flattenContext, value, defaultValue, location) { value = ensureIdentifier(flattenContext, value, true, location); return ts.createConditional(ts.createTypeCheck(value, "undefined"), defaultValue, value); } function createDestructuringPropertyAccess(flattenContext, value, propertyName) { if (ts.isComputedPropertyName(propertyName)) { var argumentExpression = ensureIdentifier(flattenContext, ts.visitNode(propertyName.expression, flattenContext.visitor), false, propertyName); return ts.createElementAccess(value, argumentExpression); } else if (ts.isStringOrNumericLiteral(propertyName)) { var argumentExpression = ts.getSynthesizedClone(propertyName); argumentExpression.text = argumentExpression.text; return ts.createElementAccess(value, argumentExpression); } else { var name = ts.createIdentifier(ts.idText(propertyName)); return ts.createPropertyAccess(value, name); } } function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) { if (ts.isIdentifier(value) && reuseIdentifierExpressions) { return value; } else { 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, undefined); } return temp; } } function makeArrayBindingPattern(elements) { ts.Debug.assertEachNode(elements, ts.isArrayBindingElement); return ts.createArrayBindingPattern(elements); } function makeArrayAssignmentPattern(elements) { return ts.createArrayLiteral(ts.map(elements, ts.convertToArrayAssignmentElement)); } function makeObjectBindingPattern(elements) { ts.Debug.assertEachNode(elements, ts.isBindingElement); return ts.createObjectBindingPattern(elements); } function makeObjectAssignmentPattern(elements) { return ts.createObjectLiteral(ts.map(elements, ts.convertToObjectAssignmentElement)); } function makeBindingElement(name) { return ts.createBindingElement(undefined, undefined, name); } function makeAssignmentElement(name) { return name; } var restHelper = { name: "typescript:rest", scoped: false, text: "\n var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (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 };" }; function createRestCall(context, value, elements, computedTempVariables, location) { context.requestEmitHelper(restHelper); var propertyNames = []; var computedTempVariableOffset = 0; for (var i = 0; i < elements.length - 1; i++) { var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(elements[i]); if (propertyName) { if (ts.isComputedPropertyName(propertyName)) { var temp = computedTempVariables[computedTempVariableOffset]; computedTempVariableOffset++; propertyNames.push(ts.createConditional(ts.createTypeCheck(temp, "symbol"), temp, ts.createAdd(temp, ts.createLiteral("")))); } else { propertyNames.push(ts.createLiteral(propertyName)); } } } return ts.createCall(ts.getHelperName("__rest"), undefined, [ value, ts.setTextRange(ts.createArrayLiteral(propertyNames), location) ]); } })(ts || (ts = {})); var ts; (function (ts) { var USE_NEW_TYPE_METADATA_FORMAT = false; var TypeScriptSubstitutionFlags; (function (TypeScriptSubstitutionFlags) { TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["ClassAliases"] = 1] = "ClassAliases"; TypeScriptSubstitutionFlags[TypeScriptSubstitutionFlags["NamespaceExports"] = 2] = "NamespaceExports"; 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(); var compilerOptions = context.getCompilerOptions(); var strictNullChecks = ts.getStrictOptionValue(compilerOptions, "strictNullChecks"); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var moduleKind = ts.getEmitModuleKind(compilerOptions); var previousOnEmitNode = context.onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; context.enableSubstitution(185); context.enableSubstitution(186); var currentSourceFile; var currentNamespace; var currentNamespaceContainerName; var currentScope; var currentScopeFirstDeclarationsOfName; var enabledSubstitutions; var classAliases; var applicableSubstitutions; var pendingExpressions; return transformSourceFileOrBundle; function transformSourceFileOrBundle(node) { 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) { return ts.createUnparsedSourceFile(prepend.javascriptText, prepend.javascriptMapPath, prepend.javascriptMapText); } return prepend; })); } function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } currentSourceFile = node; var visited = saveStateAndInvoke(node, visitSourceFile); ts.addEmitHelpers(visited, context.readEmitHelpers()); currentSourceFile = undefined; return visited; } function saveStateAndInvoke(node, f) { var savedCurrentScope = currentScope; var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; onBeforeVisitNode(node); var visited = f(node); if (currentScope !== savedCurrentScope) { currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; } currentScope = savedCurrentScope; return visited; } function onBeforeVisitNode(node) { switch (node.kind) { case 274: case 241: case 240: case 213: currentScope = node; currentScopeFirstDeclarationsOfName = undefined; break; case 235: case 234: if (ts.hasModifier(node, 2)) { break; } if (node.name) { recordEmittedDeclarationInScope(node); } else { ts.Debug.assert(node.kind === 235 || ts.hasModifier(node, 512)); } break; } } function visitor(node) { return saveStateAndInvoke(node, visitorWorker); } function visitorWorker(node) { if (node.transformFlags & 1) { return visitTypeScript(node); } else if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } return node; } function sourceElementVisitor(node) { return saveStateAndInvoke(node, sourceElementVisitorWorker); } function sourceElementVisitorWorker(node) { switch (node.kind) { case 244: case 243: case 249: case 250: return visitEllidableStatement(node); default: return visitorWorker(node); } } function visitEllidableStatement(node) { var parsed = ts.getParseTreeNode(node); if (parsed !== node) { if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } return node; } switch (node.kind) { case 244: return visitImportDeclaration(node); case 243: return visitImportEqualsDeclaration(node); case 249: return visitExportAssignment(node); case 250: return visitExportDeclaration(node); default: ts.Debug.fail("Unhandled ellided statement"); } } function namespaceElementVisitor(node) { return saveStateAndInvoke(node, namespaceElementVisitorWorker); } function namespaceElementVisitorWorker(node) { if (node.kind === 250 || node.kind === 244 || node.kind === 245 || (node.kind === 243 && node.moduleReference.kind === 254)) { return undefined; } else if (node.transformFlags & 1 || ts.hasModifier(node, 1)) { return visitTypeScript(node); } else if (node.transformFlags & 2) { return ts.visitEachChild(node, visitor, context); } return node; } function classElementVisitor(node) { return saveStateAndInvoke(node, classElementVisitorWorker); } function classElementVisitorWorker(node) { switch (node.kind) { case 155: return undefined; case 152: case 160: case 156: case 157: case 154: return visitorWorker(node); case 212: return node; default: return ts.Debug.failBadSyntaxKind(node); } } function modifierVisitor(node) { if (ts.modifierToFlag(node.kind) & 2270) { return undefined; } else if (currentNamespace && node.kind === 84) { return undefined; } return node; } function visitTypeScript(node) { if (ts.hasModifier(node, 2) && ts.isStatement(node)) { return ts.createNotEmittedStatement(node); } switch (node.kind) { case 84: case 79: return currentNamespace ? undefined : node; 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: return visitPropertyDeclaration(node); case 242: return undefined; case 155: return visitConstructor(node); case 236: return ts.createNotEmittedStatement(node); case 235: return visitClassDeclaration(node); case 205: return visitClassExpression(node); case 268: return visitHeritageClause(node); case 207: return visitExpressionWithTypeArguments(node); case 154: return visitMethodDeclaration(node); case 156: return visitGetAccessor(node); case 157: return visitSetAccessor(node); case 234: return visitFunctionDeclaration(node); case 192: return visitFunctionExpression(node); case 193: return visitArrowFunction(node); case 149: return visitParameter(node); case 191: return visitParenthesizedExpression(node); case 190: case 208: return visitAssertionExpression(node); case 187: return visitCallExpression(node); case 188: return visitNewExpression(node); case 189: return visitTaggedTemplateExpression(node); case 209: return visitNonNullExpression(node); case 238: return visitEnumDeclaration(node); case 214: return visitVariableStatement(node); case 232: return visitVariableDeclaration(node); case 239: return visitModuleDeclaration(node); case 243: return visitImportEqualsDeclaration(node); default: return ts.Debug.failBadSyntaxKind(node); } } function visitSourceFile(node) { 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, 0, alwaysStrict)); } function shouldEmitDecorateCallForClass(node) { if (node.decorators && node.decorators.length > 0) { return true; } var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter); } return false; } function shouldEmitDecorateCallForParameter(parameter) { return parameter.decorators !== undefined && parameter.decorators.length > 0; } function getClassFacts(node, staticProperties) { var facts = 0; if (ts.some(staticProperties)) facts |= 1; var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node); if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95) facts |= 64; if (shouldEmitDecorateCallForClass(node)) facts |= 2; if (ts.childIsDecorated(node)) facts |= 4; if (isExportOfNamespace(node)) facts |= 8; else if (isDefaultExternalModuleExport(node)) facts |= 32; else if (isNamedExternalModuleExport(node)) facts |= 16; if (languageVersion <= 1 && (facts & 7)) facts |= 128; return facts; } function visitClassDeclaration(node) { var savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; var staticProperties = getInitializedProperties(node, true); var facts = getClassFacts(node, staticProperties); if (facts & 128) { context.startLexicalEnvironment(); } 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]; if (ts.some(pendingExpressions)) { statements.push(ts.createStatement(ts.inlineExpressions(pendingExpressions))); } pendingExpressions = savedPendingExpressions; if (facts & 1) { addInitializedPropertyStatements(statements, staticProperties, facts & 128 ? ts.getInternalName(node) : ts.getLocalName(node)); } addClassElementDecorationStatements(statements, node, false); addClassElementDecorationStatements(statements, node, true); addConstructorDecorationStatement(statements, node); if (facts & 128) { var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentSourceFile.text, node.members.end), 18); var localName = ts.getInternalName(node); var outer = ts.createPartiallyEmittedExpression(localName); outer.end = closingBraceLocation.end; ts.setEmitFlags(outer, 1536); var statement = ts.createReturn(outer); statement.pos = closingBraceLocation.pos; ts.setEmitFlags(statement, 1536 | 384); statements.push(statement); ts.prependStatements(statements, context.endLexicalEnvironment()); var iife = ts.createImmediatelyInvokedArrowFunction(statements); 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); ts.setSourceMapRange(varStatement, ts.moveRangePastDecorators(node)); ts.startOnNewLine(varStatement); statements = [varStatement]; } if (facts & 8) { addExportMemberAssignment(statements, node); } else if (facts & 128 || facts & 2) { if (facts & 32) { statements.push(ts.createExportDefault(ts.getLocalName(node, false, true))); } else if (facts & 16) { statements.push(ts.createExternalModuleExport(ts.getLocalName(node, false, true))); } } if (statements.length > 1) { statements.push(ts.createEndOfDeclarationMarker(node)); ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 4194304); } return ts.singleOrMany(statements); } function createClassDeclarationHeadWithoutDecorators(node, name, facts) { var modifiers = !(facts & 128) ? ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier) : undefined; 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) { emitFlags |= 32; } ts.setTextRange(classDeclaration, node); ts.setOriginalNode(classDeclaration, node); ts.setEmitFlags(classDeclaration, emitFlags); return classDeclaration; } function createClassDeclarationHeadWithDecorators(node, name, facts) { var location = ts.moveRangePastDecorators(node); var classAlias = getClassAliasIfNeeded(node); var declName = ts.getLocalName(node, false, true); var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause); var members = transformClassMembers(node, (facts & 64) !== 0); var classExpression = ts.createClassExpression(undefined, name, undefined, heritageClauses, members); ts.setOriginalNode(classExpression, node); ts.setTextRange(classExpression, location); 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; } function visitClassExpression(node) { var savedPendingExpressions = pendingExpressions; pendingExpressions = undefined; 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; })); 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; var temp = ts.createTempVariable(hoistVariableDeclaration, !!isClassWithConstructorReference); if (isClassWithConstructorReference) { enableSubstitutionForClassAliases(); var alias = ts.getSynthesizedClone(temp); alias.autoGenerateFlags &= ~8; classAliases[ts.getOriginalNodeId(node)] = alias; } ts.setEmitFlags(classExpression, 65536 | ts.getEmitFlags(classExpression)); expressions.push(ts.startOnNewLine(ts.createAssignment(temp, classExpression))); ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine)); pendingExpressions = savedPendingExpressions; ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp)); expressions.push(ts.startOnNewLine(temp)); return ts.inlineExpressions(expressions); } pendingExpressions = savedPendingExpressions; return classExpression; } function transformClassMembers(node, isDerivedClass) { var members = []; var constructor = transformConstructor(node, isDerivedClass); if (constructor) { members.push(constructor); } ts.addRange(members, ts.visitNodes(node.members, classElementVisitor, ts.isClassElement)); return ts.setTextRange(ts.createNodeArray(members), node.members); } function transformConstructor(node, isDerivedClass) { var hasInstancePropertyWithInitializer = ts.forEach(node.members, isInstanceInitializedProperty); var hasParameterPropertyAssignments = node.transformFlags & 262144; var constructor = ts.getFirstConstructorWithBody(node); if (!hasInstancePropertyWithInitializer && !hasParameterPropertyAssignments) { return ts.visitEachChild(constructor, visitor, context); } var parameters = transformConstructorParameters(constructor); var body = transformConstructorBody(node, constructor, isDerivedClass); return ts.startOnNewLine(ts.setOriginalNode(ts.setTextRange(ts.createConstructor(undefined, undefined, parameters, body), constructor || node), constructor)); } function transformConstructorParameters(constructor) { return ts.visitParameterList(constructor && constructor.parameters, visitor, context) || []; } function transformConstructorBody(node, constructor, isDerivedClass) { var statements = []; var indexOfFirstStatement = 0; resumeLexicalEnvironment(); if (constructor) { indexOfFirstStatement = addPrologueDirectivesAndInitialSuperCall(constructor, statements); var propertyAssignments = getParametersWithPropertyAssignments(constructor); ts.addRange(statements, ts.map(propertyAssignments, transformParameterWithPropertyAssignment)); } else if (isDerivedClass) { statements.push(ts.createStatement(ts.createCall(ts.createSuper(), undefined, [ts.createSpread(ts.createIdentifier("arguments"))]))); } var properties = getInitializedProperties(node, false); addInitializedPropertyStatements(statements, properties, ts.createThis()); if (constructor) { ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement)); } statements = ts.mergeLexicalEnvironment(statements, endLexicalEnvironment()); return ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true), constructor ? constructor.body : undefined); } function addPrologueDirectivesAndInitialSuperCall(ctor, result) { if (ctor.body) { var statements = ctor.body.statements; var index = ts.addPrologue(result, statements, false, visitor); if (index === statements.length) { return index; } var statement = statements[index]; if (statement.kind === 216 && ts.isSuperCall(statement.expression)) { result.push(ts.visitNode(statement, visitor, ts.isStatement)); return index + 1; } return index; } return 0; } function getParametersWithPropertyAssignments(node) { return ts.filter(node.parameters, isParameterWithPropertyAssignment); } function isParameterWithPropertyAssignment(parameter) { return ts.hasModifier(parameter, 92) && ts.isIdentifier(parameter.name); } function transformParameterWithPropertyAssignment(node) { ts.Debug.assert(ts.isIdentifier(node.name)); var name = node.name; var propertyName = ts.getMutableClone(name); ts.setEmitFlags(propertyName, 1536 | 48); var localName = ts.getMutableClone(name); 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)); } function getInitializedProperties(node, isStatic) { return ts.filter(node.members, isStatic ? isStaticInitializedProperty : isInstanceInitializedProperty); } function isStaticInitializedProperty(member) { return isInitializedProperty(member, true); } function isInstanceInitializedProperty(member) { return isInitializedProperty(member, false); } function isInitializedProperty(member, isStatic) { return member.kind === 152 && isStatic === ts.hasModifier(member, 32) && member.initializer !== undefined; } function addInitializedPropertyStatements(statements, properties, receiver) { for (var _i = 0, properties_10 = properties; _i < properties_10.length; _i++) { var property = properties_10[_i]; var statement = ts.createStatement(transformInitializedProperty(property, receiver)); ts.setSourceMapRange(statement, ts.moveRangePastModifiers(property)); ts.setCommentRange(statement, property); statements.push(statement); } } function generateInitializedPropertyExpressions(properties, receiver) { var expressions = []; for (var _i = 0, properties_11 = properties; _i < properties_11.length; _i++) { var property = properties_11[_i]; var expression = transformInitializedProperty(property, receiver); ts.startOnNewLine(expression); ts.setSourceMapRange(expression, ts.moveRangePastModifiers(property)); ts.setCommentRange(expression, property); expressions.push(expression); } return expressions; } function transformInitializedProperty(property, receiver) { 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, propertyName); return ts.createAssignment(memberAccess, initializer); } function getDecoratedClassElements(node, isStatic) { return ts.filter(node.members, isStatic ? function (m) { return isStaticDecoratedClassElement(m, node); } : function (m) { return isInstanceDecoratedClassElement(m, node); }); } function isStaticDecoratedClassElement(member, parent) { return isDecoratedClassElement(member, true, parent); } function isInstanceDecoratedClassElement(member, parent) { return isDecoratedClassElement(member, false, parent); } function isDecoratedClassElement(member, isStatic, parent) { return ts.nodeOrChildIsDecorated(member, parent) && isStatic === ts.hasModifier(member, 32); } function getDecoratorsOfParameters(node) { var decorators; if (node) { var parameters = node.parameters; for (var i = 0; i < parameters.length; i++) { var parameter = parameters[i]; if (decorators || parameter.decorators) { if (!decorators) { decorators = new Array(parameters.length); } decorators[i] = parameter.decorators; } } } return decorators; } function getAllDecoratorsOfConstructor(node) { var decorators = node.decorators; var parameters = getDecoratorsOfParameters(ts.getFirstConstructorWithBody(node)); if (!decorators && !parameters) { return undefined; } return { decorators: decorators, parameters: parameters }; } function getAllDecoratorsOfClassElement(node, member) { switch (member.kind) { case 156: case 157: return getAllDecoratorsOfAccessors(node, member); case 154: return getAllDecoratorsOfMethod(member); case 152: return getAllDecoratorsOfProperty(member); default: return undefined; } } function getAllDecoratorsOfAccessors(node, accessor) { if (!accessor.body) { return undefined; } var _a = ts.getAllAccessorDeclarations(node.members, accessor), firstAccessor = _a.firstAccessor, secondAccessor = _a.secondAccessor, setAccessor = _a.setAccessor; var firstAccessorWithDecorators = firstAccessor.decorators ? firstAccessor : secondAccessor && secondAccessor.decorators ? secondAccessor : undefined; if (!firstAccessorWithDecorators || accessor !== firstAccessorWithDecorators) { return undefined; } var decorators = firstAccessorWithDecorators.decorators; var parameters = getDecoratorsOfParameters(setAccessor); if (!decorators && !parameters) { return undefined; } return { decorators: decorators, parameters: parameters }; } function getAllDecoratorsOfMethod(method) { if (!method.body) { return undefined; } var decorators = method.decorators; var parameters = getDecoratorsOfParameters(method); if (!decorators && !parameters) { return undefined; } return { decorators: decorators, parameters: parameters }; } function getAllDecoratorsOfProperty(property) { var decorators = property.decorators; if (!decorators) { return undefined; } return { decorators: decorators }; } function transformAllDecoratorsOfDeclaration(node, container, allDecorators) { if (!allDecorators) { return undefined; } var decoratorExpressions = []; ts.addRange(decoratorExpressions, ts.map(allDecorators.decorators, transformDecorator)); ts.addRange(decoratorExpressions, ts.flatMap(allDecorators.parameters, transformDecoratorsOfParameter)); addTypeMetadata(node, container, decoratorExpressions); return decoratorExpressions; } function addClassElementDecorationStatements(statements, node, isStatic) { ts.addRange(statements, ts.map(generateClassElementDecorationExpressions(node, isStatic), expressionToStatement)); } function generateClassElementDecorationExpressions(node, isStatic) { var members = getDecoratedClassElements(node, isStatic); var expressions; for (var _i = 0, members_5 = members; _i < members_5.length; _i++) { var member = members_5[_i]; var expression = generateClassElementDecorationExpression(node, member); if (expression) { if (!expressions) { expressions = [expression]; } else { expressions.push(expression); } } } return expressions; } function generateClassElementDecorationExpression(node, member) { var allDecorators = getAllDecoratorsOfClassElement(node, member); var decoratorExpressions = transformAllDecoratorsOfDeclaration(member, node, allDecorators); if (!decoratorExpressions) { return undefined; } var prefix = getClassMemberPrefix(node, member); var memberName = getExpressionForPropertyName(member, true); var descriptor = languageVersion > 0 ? member.kind === 152 ? ts.createVoidZero() : ts.createNull() : undefined; var helper = createDecorateHelper(context, decoratorExpressions, prefix, memberName, descriptor, ts.moveRangePastDecorators(member)); ts.setEmitFlags(helper, 1536); return helper; } function addConstructorDecorationStatement(statements, node) { var expression = generateConstructorDecorationExpression(node); if (expression) { statements.push(ts.setOriginalNode(ts.createStatement(expression), node)); } } function generateConstructorDecorationExpression(node) { var allDecorators = getAllDecoratorsOfConstructor(node); var decoratorExpressions = transformAllDecoratorsOfDeclaration(node, node, allDecorators); if (!decoratorExpressions) { return undefined; } var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)]; 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); ts.setSourceMapRange(expression, ts.moveRangePastDecorators(node)); return expression; } function transformDecorator(decorator) { return ts.visitNode(decorator.expression, visitor, ts.isExpression); } 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, decorator.expression); ts.setEmitFlags(helper, 1536); expressions.push(helper); } } return expressions; } function addTypeMetadata(node, container, decoratorExpressions) { if (USE_NEW_TYPE_METADATA_FORMAT) { addNewTypeMetadata(node, container, decoratorExpressions); } else { addOldTypeMetadata(node, container, decoratorExpressions); } } function addOldTypeMetadata(node, container, decoratorExpressions) { if (compilerOptions.emitDecoratorMetadata) { if (shouldAddTypeMetadata(node)) { decoratorExpressions.push(createMetadataHelper(context, "design:type", serializeTypeOfNode(node))); } if (shouldAddParamTypesMetadata(node)) { decoratorExpressions.push(createMetadataHelper(context, "design:paramtypes", serializeParameterTypesOfNode(node, container))); } if (shouldAddReturnTypeMetadata(node)) { decoratorExpressions.push(createMetadataHelper(context, "design:returntype", serializeReturnTypeOfNode(node))); } } } function addNewTypeMetadata(node, container, decoratorExpressions) { if (compilerOptions.emitDecoratorMetadata) { var properties = void 0; if (shouldAddTypeMetadata(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(undefined, undefined, [], undefined, ts.createToken(36), serializeParameterTypesOfNode(node, container)))); } if (shouldAddReturnTypeMetadata(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, true))); } } } function shouldAddTypeMetadata(node) { var kind = node.kind; return kind === 154 || kind === 156 || kind === 157 || kind === 152; } function shouldAddReturnTypeMetadata(node) { return node.kind === 154; } function shouldAddParamTypesMetadata(node) { switch (node.kind) { case 235: case 205: return ts.getFirstConstructorWithBody(node) !== undefined; case 154: case 156: case 157: return true; } return false; } function serializeTypeOfNode(node) { switch (node.kind) { case 152: case 149: case 156: return serializeTypeNode(node.type); case 157: return serializeTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); case 235: case 205: case 154: return ts.createIdentifier("Function"); default: return ts.createVoidZero(); } } function serializeParameterTypesOfNode(node, container) { var valueDeclaration = ts.isClassLike(node) ? ts.getFirstConstructorWithBody(node) : ts.isFunctionLike(node) && ts.nodeIsPresent(node.body) ? node : undefined; var expressions = []; if (valueDeclaration) { var parameters = getParametersOfDecoratedDeclaration(valueDeclaration, container); var numParameters = parameters.length; for (var i = 0; i < numParameters; i++) { var parameter = parameters[i]; if (i === 0 && ts.isIdentifier(parameter.name) && parameter.name.escapedText === "this") { continue; } if (parameter.dotDotDotToken) { expressions.push(serializeTypeNode(ts.getRestParameterElementType(parameter.type))); } else { expressions.push(serializeTypeOfNode(parameter)); } } } return ts.createArrayLiteral(expressions); } function getParametersOfDecoratedDeclaration(node, container) { if (container && node.kind === 156) { var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor; if (setAccessor) { return setAccessor.parameters; } } return node.parameters; } function serializeReturnTypeOfNode(node) { if (ts.isFunctionLike(node) && node.type) { return serializeTypeNode(node.type); } else if (ts.isAsyncFunction(node)) { return ts.createIdentifier("Promise"); } return ts.createVoidZero(); } function serializeTypeNode(node) { if (node === undefined) { return ts.createIdentifier("Object"); } switch (node.kind) { case 105: case 140: case 95: case 131: return ts.createVoidZero(); case 173: return serializeTypeNode(node.type); case 163: case 164: return ts.createIdentifier("Function"); case 167: case 168: return ts.createIdentifier("Array"); case 161: case 122: return ts.createIdentifier("Boolean"); case 137: return ts.createIdentifier("String"); case 135: return ts.createIdentifier("Object"); case 178: switch (node.literal.kind) { case 9: return ts.createIdentifier("String"); case 8: return ts.createIdentifier("Number"); case 101: case 86: return ts.createIdentifier("Boolean"); default: return ts.Debug.failBadSyntaxKind(node.literal); } case 134: return ts.createIdentifier("Number"); case 138: return languageVersion < 2 ? getGlobalSymbolNameWithFallback() : ts.createIdentifier("Symbol"); case 162: return serializeTypeReferenceNode(node); case 170: case 169: return serializeUnionOrIntersectionType(node); 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); } return ts.createIdentifier("Object"); } function serializeUnionOrIntersectionType(node) { var serializedUnion; for (var _i = 0, _a = node.types; _i < _a.length; _i++) { var typeNode = _a[_i]; while (typeNode.kind === 173) { typeNode = typeNode.type; } if (typeNode.kind === 131) { continue; } if (!strictNullChecks && (typeNode.kind === 95 || typeNode.kind === 140)) { continue; } var serializedIndividual = serializeTypeNode(typeNode); if (ts.isIdentifier(serializedIndividual) && serializedIndividual.escapedText === "Object") { return serializedIndividual; } else if (serializedUnion) { if (!ts.isIdentifier(serializedUnion) || !ts.isIdentifier(serializedIndividual) || serializedUnion.escapedText !== serializedIndividual.escapedText) { return ts.createIdentifier("Object"); } } else { serializedUnion = serializedIndividual; } } return serializedUnion || ts.createVoidZero(); } function serializeTypeReferenceNode(node) { var kind = resolver.getTypeReferenceSerializationKind(node.typeName, currentScope); switch (kind) { case ts.TypeReferenceSerializationKind.Unknown: 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, false); case ts.TypeReferenceSerializationKind.VoidNullableOrNeverType: return ts.createVoidZero(); case ts.TypeReferenceSerializationKind.BooleanType: return ts.createIdentifier("Boolean"); case ts.TypeReferenceSerializationKind.NumberLikeType: return ts.createIdentifier("Number"); case ts.TypeReferenceSerializationKind.StringLikeType: return ts.createIdentifier("String"); case ts.TypeReferenceSerializationKind.ArrayLikeType: return ts.createIdentifier("Array"); case ts.TypeReferenceSerializationKind.ESSymbolType: return languageVersion < 2 ? getGlobalSymbolNameWithFallback() : ts.createIdentifier("Symbol"); case ts.TypeReferenceSerializationKind.TypeWithCallSignature: return ts.createIdentifier("Function"); case ts.TypeReferenceSerializationKind.Promise: return ts.createIdentifier("Promise"); case ts.TypeReferenceSerializationKind.ObjectType: return ts.createIdentifier("Object"); default: return ts.Debug.assertNever(kind); } } function serializeEntityNameAsExpression(node, useFallback) { switch (node.kind) { case 71: var name = ts.getMutableClone(node); name.flags &= ~8; name.original = undefined; name.parent = ts.getParseTreeNode(currentScope); if (useFallback) { return ts.createLogicalAnd(ts.createStrictInequality(ts.createTypeOf(name), ts.createLiteral("undefined")), name); } return name; case 146: return serializeQualifiedNameAsExpression(node, useFallback); } } function serializeQualifiedNameAsExpression(node, useFallback) { var left; 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, true)), temp); } else { left = serializeEntityNameAsExpression(node.left, false); } return ts.createPropertyAccess(left, node.right); } function getGlobalSymbolNameWithFallback() { return ts.createConditional(ts.createTypeCheck(ts.createIdentifier("Symbol"), "function"), ts.createIdentifier("Symbol"), ts.createIdentifier("Object")); } function isSimpleInlineableExpression(expression) { return !ts.isIdentifier(expression) && ts.isSimpleCopiableExpression(expression) || ts.isWellKnownSymbolSyntactically(expression); } function getExpressionForPropertyName(member, generateNameForComputedPropertyName) { var name = member.name; if (ts.isComputedPropertyName(name)) { return generateNameForComputedPropertyName && !isSimpleInlineableExpression(name.expression) ? ts.getGeneratedNameForNode(name) : name.expression; } else if (ts.isIdentifier(name)) { return ts.createLiteral(ts.idText(name)); } else { return ts.getSynthesizedClone(name); } } function getPropertyNameExpressionIfNeeded(name, shouldHoist, omitSimple) { if (ts.isComputedPropertyName(name)) { var expression = ts.visitNode(name.expression, visitor, ts.isExpression); var innerExpression = ts.skipPartiallyEmittedExpressions(expression); var inlinable = isSimpleInlineableExpression(innerExpression); if (!inlinable && shouldHoist) { var generatedName = ts.getGeneratedNameForNode(name); hoistVariableDeclaration(generatedName); return ts.createAssignment(generatedName, expression); } return (omitSimple && (inlinable || ts.isIdentifier(innerExpression))) ? undefined : expression; } } function visitPropertyNameOfClassElement(member) { var name = member.name; var expr = getPropertyNameExpressionIfNeeded(name, ts.some(member.decorators), false); if (expr) { if (ts.some(pendingExpressions)) { expr = ts.inlineExpressions(pendingExpressions.concat([expr])); pendingExpressions.length = 0; } return ts.updateComputedPropertyName(name, expr); } else { return name; } } function visitHeritageClause(node) { if (node.token === 85) { var types = ts.visitNodes(node.types, visitor, ts.isExpressionWithTypeArguments, 0, 1); return ts.setTextRange(ts.createHeritageClause(85, types), node); } return undefined; } function visitExpressionWithTypeArguments(node) { return ts.updateExpressionWithTypeArguments(node, undefined, ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression)); } function shouldEmitFunctionLikeDeclaration(node) { return !ts.nodeIsMissing(node.body); } function visitPropertyDeclaration(node) { var expr = getPropertyNameExpressionIfNeeded(node.name, ts.some(node.decorators) || !!node.initializer, true); if (expr && !isSimpleInlineableExpression(expr)) { (pendingExpressions || (pendingExpressions = [])).push(expr); } return undefined; } function visitConstructor(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return undefined; } 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)); } function visitMethodDeclaration(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return undefined; } 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) { ts.setCommentRange(updated, node); ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node)); } return updated; } function shouldEmitAccessorDeclaration(node) { return !(ts.nodeIsMissing(node.body) && ts.hasModifier(node, 128)); } function visitGetAccessor(node) { if (!shouldEmitAccessorDeclaration(node)) { return undefined; } 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) { ts.setCommentRange(updated, node); ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node)); } return updated; } function visitSetAccessor(node) { if (!shouldEmitAccessorDeclaration(node)) { return undefined; } 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) { ts.setCommentRange(updated, node); ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node)); } return updated; } function visitFunctionDeclaration(node) { if (!shouldEmitFunctionLikeDeclaration(node)) { return ts.createNotEmittedStatement(node); } 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); return statements; } return updated; } 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, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([])); return updated; } function visitArrowFunction(node) { 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; } function visitParameter(node) { if (ts.parameterIsThisKeyword(node)) { return undefined; } 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); return parameter; } function visitVariableStatement(node) { if (isExportOfNamespace(node)) { var variables = ts.getInitializedVariables(node.declarationList); if (variables.length === 0) { return undefined; } return ts.setTextRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node); } else { return ts.visitEachChild(node, visitor, context); } } function transformInitializedVariable(node) { var name = node.name; if (ts.isBindingPattern(name)) { return ts.flattenDestructuringAssignment(node, visitor, context, 0, false, createNamespaceExportExpression); } else { 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), undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)); } function visitParenthesizedExpression(node) { var innerExpression = ts.skipOuterExpressions(node.expression, ~2); if (ts.isAssertionExpression(innerExpression)) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); if (ts.length(ts.getLeadingCommentRangesOfNode(expression, currentSourceFile))) { return ts.updateParen(node, expression); } return ts.createPartiallyEmittedExpression(expression, node); } return ts.visitEachChild(node, visitor, context); } function visitAssertionExpression(node) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); return ts.createPartiallyEmittedExpression(expression, node); } function visitNonNullExpression(node) { var expression = ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression); return ts.createPartiallyEmittedExpression(expression, node); } function visitCallExpression(node) { 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), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); } function visitTaggedTemplateExpression(node) { return ts.updateTaggedTemplate(node, ts.visitNode(node.tag, visitor, ts.isExpression), undefined, ts.visitNode(node.template, visitor, ts.isExpression)); } function shouldEmitEnumDeclaration(node) { return !ts.isConst(node) || compilerOptions.preserveConstEnums || compilerOptions.isolatedModules; } function visitEnumDeclaration(node) { if (!shouldEmitEnumDeclaration(node)) { return undefined; } var statements = []; var emitFlags = 2; if (addVarForEnumOrModuleDeclaration(statements, node)) { if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) { emitFlags |= 512; } } var parameterName = getNamespaceParameterName(node); var containerName = getNamespaceContainerName(node); 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)) { var localName = ts.getLocalName(node, false, true); moduleArg = ts.createAssignment(localName, 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); statements.push(ts.createEndOfDeclarationMarker(node)); return statements; } function transformEnumBody(node, localName) { var savedCurrentNamespaceLocalName = currentNamespaceContainerName; currentNamespaceContainerName = localName; var statements = []; startLexicalEnvironment(); var members = ts.map(node.members, transformEnumMember); ts.prependStatements(statements, endLexicalEnvironment()); ts.addRange(statements, members); currentNamespaceContainerName = savedCurrentNamespaceLocalName; return ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true); } function transformEnumMember(member) { var name = getExpressionForPropertyName(member, false); var valueExpression = transformEnumMemberDeclarationValue(member); var innerAssignment = ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, name), valueExpression); var outerAssignment = valueExpression.kind === 9 ? innerAssignment : ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, innerAssignment), name); return ts.setTextRange(ts.createStatement(ts.setTextRange(outerAssignment, member)), member); } function transformEnumMemberDeclarationValue(member) { var value = resolver.getConstantValue(member); if (value !== undefined) { return ts.createLiteral(value); } else { enableSubstitutionForNonQualifiedEnumMembers(); if (member.initializer) { return ts.visitNode(member.initializer, visitor, ts.isExpression); } else { return ts.createVoidZero(); } } } function shouldEmitModuleDeclaration(node) { return ts.isInstantiatedModule(node, !!compilerOptions.preserveConstEnums || !!compilerOptions.isolatedModules); } function hasNamespaceQualifiedExportName(node) { return isExportOfNamespace(node) || (isExternalModuleExport(node) && moduleKind !== ts.ModuleKind.ES2015 && moduleKind !== ts.ModuleKind.ESNext && moduleKind !== ts.ModuleKind.System); } function recordEmittedDeclarationInScope(node) { if (!currentScopeFirstDeclarationsOfName) { currentScopeFirstDeclarationsOfName = ts.createUnderscoreEscapedMap(); } var name = declaredNameInScope(node); if (!currentScopeFirstDeclarationsOfName.has(name)) { currentScopeFirstDeclarationsOfName.set(name, node); } } function isFirstEmittedDeclarationInScope(node) { if (currentScopeFirstDeclarationsOfName) { var name = declaredNameInScope(node); return currentScopeFirstDeclarationsOfName.get(name) === node; } return true; } function declaredNameInScope(node) { ts.Debug.assertNode(node.name, ts.isIdentifier); return node.name.escapedText; } function addVarForEnumOrModuleDeclaration(statements, node) { var statement = ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([ ts.createVariableDeclaration(ts.getLocalName(node, false, true)) ], currentScope.kind === 274 ? 0 : 1)); ts.setOriginalNode(statement, node); recordEmittedDeclarationInScope(node); if (isFirstEmittedDeclarationInScope(node)) { if (node.kind === 238) { ts.setSourceMapRange(statement.declarationList, node); } else { ts.setSourceMapRange(statement, node); } ts.setCommentRange(statement, node); ts.setEmitFlags(statement, 1024 | 4194304); statements.push(statement); return true; } else { var mergeMarker = ts.createMergeDeclarationMarker(statement); ts.setEmitFlags(mergeMarker, 1536 | 4194304); statements.push(mergeMarker); return false; } } function visitModuleDeclaration(node) { if (!shouldEmitModuleDeclaration(node)) { return ts.createNotEmittedStatement(node); } ts.Debug.assertNode(node.name, ts.isIdentifier, "A TypeScript namespace should have an Identifier name."); enableSubstitutionForNamespaceExports(); var statements = []; var emitFlags = 2; if (addVarForEnumOrModuleDeclaration(statements, node)) { if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) { emitFlags |= 512; } } var parameterName = getNamespaceParameterName(node); var containerName = getNamespaceContainerName(node); 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)) { var localName = ts.getLocalName(node, false, true); moduleArg = ts.createAssignment(localName, 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); statements.push(ts.createEndOfDeclarationMarker(node)); return statements; } function transformModuleBody(node, namespaceLocalName) { var savedCurrentNamespaceContainerName = currentNamespaceContainerName; var savedCurrentNamespace = currentNamespace; var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; currentNamespaceContainerName = namespaceLocalName; currentNamespace = node; currentScopeFirstDeclarationsOfName = undefined; var statements = []; startLexicalEnvironment(); var statementsLocation; var blockLocation; var body = node.body; if (body.kind === 240) { saveStateAndInvoke(body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); }); statementsLocation = body.statements; blockLocation = body; } else { var result = visitModuleDeclaration(body); if (result) { if (ts.isArray(result)) { ts.addRange(statements, result); } else { statements.push(result); } } var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; statementsLocation = ts.moveRangePos(moduleBlock.statements, -1); } ts.prependStatements(statements, endLexicalEnvironment()); currentNamespaceContainerName = savedCurrentNamespaceContainerName; currentNamespace = savedCurrentNamespace; currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true); ts.setTextRange(block, blockLocation); if (body.kind !== 240) { ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536); } return block; } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { if (moduleDeclaration.body.kind === 239) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } } function visitImportDeclaration(node) { if (!node.importClause) { return node; } var importClause = ts.visitNode(node.importClause, visitImportClause, ts.isImportClause); return importClause ? ts.updateImportDeclaration(node, undefined, undefined, importClause, node.moduleSpecifier) : undefined; } function visitImportClause(node) { 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; } function visitNamedImportBindings(node) { if (node.kind === 246) { return resolver.isReferencedAliasDeclaration(node) ? node : undefined; } else { var elements = ts.visitNodes(node.elements, visitImportSpecifier, ts.isImportSpecifier); return ts.some(elements) ? ts.updateNamedImports(node, elements) : undefined; } } function visitImportSpecifier(node) { return resolver.isReferencedAliasDeclaration(node) ? node : undefined; } function visitExportAssignment(node) { return resolver.isValueAliasDeclaration(node) ? ts.visitEachChild(node, visitor, context) : undefined; } function visitExportDeclaration(node) { if (!node.exportClause) { return compilerOptions.isolatedModules || resolver.moduleExportsSomeValue(node.moduleSpecifier) ? node : undefined; } if (!resolver.isValueAliasDeclaration(node)) { return undefined; } var exportClause = ts.visitNode(node.exportClause, visitNamedExports, ts.isNamedExports); return exportClause ? ts.updateExportDeclaration(node, undefined, undefined, exportClause, node.moduleSpecifier) : undefined; } function visitNamedExports(node) { var elements = ts.visitNodes(node.elements, visitExportSpecifier, ts.isExportSpecifier); return ts.some(elements) ? ts.updateNamedExports(node, elements) : undefined; } function visitExportSpecifier(node) { return resolver.isValueAliasDeclaration(node) ? node : undefined; } function shouldEmitImportEqualsDeclaration(node) { return resolver.isReferencedAliasDeclaration(node) || (!ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportEqualsWithEntityName(node)); } function visitImportEqualsDeclaration(node) { if (ts.isExternalModuleImportEqualsDeclaration(node)) { return resolver.isReferencedAliasDeclaration(node) ? ts.visitEachChild(node, visitor, context) : undefined; } if (!shouldEmitImportEqualsDeclaration(node)) { return undefined; } var moduleReference = ts.createExpressionFromEntityName(node.moduleReference); ts.setEmitFlags(moduleReference, 1536 | 2048); if (isNamedExternalModuleExport(node) || !isExportOfNamespace(node)) { return ts.setOriginalNode(ts.setTextRange(ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([ ts.setOriginalNode(ts.createVariableDeclaration(node.name, undefined, moduleReference), node) ])), node), node); } else { return ts.setOriginalNode(createNamespaceExport(node.name, moduleReference, node), node); } } function isExportOfNamespace(node) { return currentNamespace !== undefined && ts.hasModifier(node, 1); } function isExternalModuleExport(node) { return currentNamespace === undefined && ts.hasModifier(node, 1); } function isNamedExternalModuleExport(node) { return isExternalModuleExport(node) && !ts.hasModifier(node, 512); } function isDefaultExternalModuleExport(node) { return isExternalModuleExport(node) && ts.hasModifier(node, 512); } function expressionToStatement(expression) { return ts.createStatement(expression); } function addExportMemberAssignment(statements, 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, 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, false, true); } function getNamespaceParameterName(node) { var name = ts.getGeneratedNameForNode(node); ts.setSourceMapRange(name, node.name); return name; } function getNamespaceContainerName(node) { return ts.getGeneratedNameForNode(node); } function getClassAliasIfNeeded(node) { 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; hoistVariableDeclaration(classAlias); return classAlias; } } function getClassPrototype(node) { return ts.createPropertyAccess(ts.getDeclarationName(node), "prototype"); } function getClassMemberPrefix(node, member) { return ts.hasModifier(member, 32) ? ts.getDeclarationName(node) : getClassPrototype(node); } function enableSubstitutionForNonQualifiedEnumMembers() { if ((enabledSubstitutions & 8) === 0) { enabledSubstitutions |= 8; context.enableSubstitution(71); } } function enableSubstitutionForClassAliases() { if ((enabledSubstitutions & 1) === 0) { enabledSubstitutions |= 1; context.enableSubstitution(71); classAliases = []; } } function enableSubstitutionForNamespaceExports() { if ((enabledSubstitutions & 2) === 0) { enabledSubstitutions |= 2; context.enableSubstitution(71); context.enableSubstitution(271); context.enableEmitNotification(239); } } function isTransformedModuleDeclaration(node) { return ts.getOriginalNode(node).kind === 239; } function isTransformedEnumDeclaration(node) { return ts.getOriginalNode(node).kind === 238; } function onEmitNode(hint, node, emitCallback) { var savedApplicableSubstitutions = applicableSubstitutions; var savedCurrentSourceFile = currentSourceFile; if (ts.isSourceFile(node)) { currentSourceFile = node; } if (enabledSubstitutions & 2 && isTransformedModuleDeclaration(node)) { applicableSubstitutions |= 2; } if (enabledSubstitutions & 8 && isTransformedEnumDeclaration(node)) { applicableSubstitutions |= 8; } previousOnEmitNode(hint, node, emitCallback); applicableSubstitutions = savedApplicableSubstitutions; currentSourceFile = savedCurrentSourceFile; } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (hint === 1) { return substituteExpression(node); } else if (ts.isShorthandPropertyAssignment(node)) { return substituteShorthandPropertyAssignment(node); } return node; } function substituteShorthandPropertyAssignment(node) { if (enabledSubstitutions & 2) { var name = node.name; var exportedName = trySubstituteNamespaceExportedName(name); if (exportedName) { if (node.objectAssignmentInitializer) { var initializer = ts.createAssignment(exportedName, node.objectAssignmentInitializer); return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node); } return ts.setTextRange(ts.createPropertyAssignment(name, exportedName), node); } } return node; } function substituteExpression(node) { switch (node.kind) { case 71: return substituteExpressionIdentifier(node); case 185: return substitutePropertyAccessExpression(node); case 186: return substituteElementAccessExpression(node); } return node; } function substituteExpressionIdentifier(node) { return trySubstituteClassAlias(node) || trySubstituteNamespaceExportedName(node) || node; } function trySubstituteClassAlias(node) { if (enabledSubstitutions & 1) { if (resolver.getNodeCheckFlags(node) & 16777216) { var declaration = resolver.getReferencedValueDeclaration(node); if (declaration) { var classAlias = classAliases[declaration.id]; if (classAlias) { var clone_1 = ts.getSynthesizedClone(classAlias); ts.setSourceMapRange(clone_1, node); ts.setCommentRange(clone_1, node); return clone_1; } } } } return undefined; } function trySubstituteNamespaceExportedName(node) { if (enabledSubstitutions & applicableSubstitutions && !ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) { 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), node); } } } return undefined; } function substitutePropertyAccessExpression(node) { return substituteConstantValue(node); } function substituteElementAccessExpression(node) { return substituteConstantValue(node); } function substituteConstantValue(node) { var constantValue = tryGetConstEnumValue(node); if (constantValue !== undefined) { 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, " " + propertyName + " "); } return substitute; } return node; } function tryGetConstEnumValue(node) { if (compilerOptions.isolatedModules) { return undefined; } return ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node) ? resolver.getConstantValue(node) : undefined; } } ts.transformTypeScript = transformTypeScript; function createDecorateHelper(context, decoratorExpressions, target, memberName, descriptor, location) { var argumentsArray = []; argumentsArray.push(ts.createArrayLiteral(decoratorExpressions, true)); argumentsArray.push(target); if (memberName) { argumentsArray.push(memberName); if (descriptor) { argumentsArray.push(descriptor); } } context.requestEmitHelper(decorateHelper); return ts.setTextRange(ts.createCall(ts.getHelperName("__decorate"), undefined, argumentsArray), location); } var decorateHelper = { name: "typescript:decorate", scoped: false, priority: 2, text: "\n var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n };" }; function createMetadataHelper(context, metadataKey, metadataValue) { context.requestEmitHelper(metadataHelper); return ts.createCall(ts.getHelperName("__metadata"), undefined, [ ts.createLiteral(metadataKey), metadataValue ]); } var metadataHelper = { name: "typescript:metadata", scoped: false, priority: 3, text: "\n var __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n };" }; function createParamHelper(context, expression, parameterOffset, location) { context.requestEmitHelper(paramHelper); return ts.setTextRange(ts.createCall(ts.getHelperName("__param"), undefined, [ ts.createLiteral(parameterOffset), expression ]), location); } var paramHelper = { name: "typescript:param", scoped: false, priority: 4, text: "\n var __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n };" }; })(ts || (ts = {})); var ts; (function (ts) { var ES2017SubstitutionFlags; (function (ES2017SubstitutionFlags) { 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); var enabledSubstitutions; var enclosingSuperContainerFlags = 0; var enclosingFunctionParameterNames; var previousOnEmitNode = context.onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } var visited = ts.visitEachChild(node, visitor, context); ts.addEmitHelpers(visited, context.readEmitHelpers()); return visited; } function visitor(node) { if ((node.transformFlags & 16) === 0) { return node; } switch (node.kind) { case 120: return undefined; case 197: return visitAwaitExpression(node); case 154: return visitMethodDeclaration(node); case 234: return visitFunctionDeclaration(node); case 192: return visitFunctionExpression(node); case 193: return visitArrowFunction(node); default: return ts.visitEachChild(node, visitor, context); } } function asyncBodyVisitor(node) { if (ts.isNodeWithPossibleHoistedDeclaration(node)) { switch (node.kind) { case 214: return visitVariableStatementInAsyncBody(node); case 220: return visitForStatementInAsyncBody(node); case 221: return visitForInStatementInAsyncBody(node); case 222: return visitForOfStatementInAsyncBody(node); case 269: return visitCatchClauseInAsyncBody(node); 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."); } } return visitor(node); } function visitCatchClauseInAsyncBody(node) { var catchClauseNames = ts.createUnderscoreEscapedMap(); recordDeclarationName(node.variableDeclaration, catchClauseNames); var catchClauseUnshadowedNames; catchClauseNames.forEach(function (_, escapedName) { if (enclosingFunctionParameterNames.has(escapedName)) { if (!catchClauseUnshadowedNames) { catchClauseUnshadowedNames = ts.cloneMap(enclosingFunctionParameterNames); } catchClauseUnshadowedNames.delete(escapedName); } }); if (catchClauseUnshadowedNames) { var savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames; enclosingFunctionParameterNames = catchClauseUnshadowedNames; var result = ts.visitEachChild(node, asyncBodyVisitor, context); enclosingFunctionParameterNames = savedEnclosingFunctionParameterNames; return result; } else { return ts.visitEachChild(node, asyncBodyVisitor, context); } } function visitVariableStatementInAsyncBody(node) { if (isVariableDeclarationListWithCollidingName(node.declarationList)) { 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, 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, 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; return ts.updateFor(node, isVariableDeclarationListWithCollidingName(initializer) ? 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)); } function visitAwaitExpression(node) { return ts.setOriginalNode(ts.setTextRange(ts.createYield(undefined, ts.visitNode(node.expression, visitor, ts.isExpression)), node), node); } function visitMethodDeclaration(node) { 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)); } function visitFunctionDeclaration(node) { 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)); } function visitFunctionExpression(node) { 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)); } function visitArrowFunction(node) { 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)); } function recordDeclarationName(_a, names) { var name = _a.name; if (ts.isIdentifier(name)) { names.set(name.escapedText, true); } else { for (var _i = 0, _b = name.elements; _i < _b.length; _i++) { var element = _b[_i]; if (!ts.isOmittedExpression(element)) { recordDeclarationName(element, names); } } } } function isVariableDeclarationListWithCollidingName(node) { return !!node && ts.isVariableDeclarationList(node) && !(node.flags & 3) && node.declarations.some(collidesWithParameterName); } function visitVariableDeclarationListWithCollidingNames(node, hasReceiver) { hoistVariableDeclarationList(node); var variables = ts.getInitializedVariables(node); if (variables.length === 0) { if (hasReceiver) { return ts.visitNode(ts.convertToAssignmentElementTarget(node.declarations[0].name), visitor, ts.isExpression); } return undefined; } return ts.inlineExpressions(ts.map(variables, transformInitializedVariable)); } function hoistVariableDeclarationList(node) { ts.forEach(node.declarations, hoistVariable); } function hoistVariable(_a) { var name = _a.name; if (ts.isIdentifier(name)) { hoistVariableDeclaration(name); } else { for (var _i = 0, _b = name.elements; _i < _b.length; _i++) { var element = _b[_i]; if (!ts.isOmittedExpression(element)) { hoistVariable(element); } } } } function transformInitializedVariable(node) { var converted = ts.setSourceMapRange(ts.createAssignment(ts.convertToAssignmentElementTarget(node.name), node.initializer), node); return ts.visitNode(converted, visitor, ts.isExpression); } function collidesWithParameterName(_a) { var name = _a.name; if (ts.isIdentifier(name)) { return enclosingFunctionParameterNames.has(name.escapedText); } else { for (var _i = 0, _b = name.elements; _i < _b.length; _i++) { var element = _b[_i]; if (!ts.isOmittedExpression(element) && collidesWithParameterName(element)) { return true; } } } return false; } function transformAsyncFunctionBody(node) { resumeLexicalEnvironment(); var original = ts.getOriginalNode(node, ts.isFunctionLike); var nodeType = original.type; 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++) { var parameter = _a[_i]; recordDeclarationName(parameter, enclosingFunctionParameterNames); } var result; if (!isArrowFunction) { var statements = []; 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, true); ts.setTextRange(block, node.body); if (languageVersion >= 2) { if (resolver.getNodeCheckFlags(node) & 4096) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.advancedAsyncSuperHelper); } else if (resolver.getNodeCheckFlags(node) & 2048) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.asyncSuperHelper); } } result = block; } else { var expression = createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformAsyncFunctionBodyWorker(node.body)); var declarations = endLexicalEnvironment(); if (ts.some(declarations)) { var block = ts.convertToFunctionBody(expression); result = ts.updateBlock(block, ts.setTextRange(ts.createNodeArray(ts.concatenate(declarations, block.statements)), block.statements)); } else { result = expression; } } enclosingFunctionParameterNames = savedEnclosingFunctionParameterNames; return result; } function transformAsyncFunctionBodyWorker(body, start) { if (ts.isBlock(body)) { return ts.updateBlock(body, ts.visitNodes(body.statements, asyncBodyVisitor, ts.isStatement, start)); } else { return ts.convertToFunctionBody(ts.visitNode(body, asyncBodyVisitor, ts.isConciseBody)); } } function getPromiseConstructor(type) { var typeName = type && ts.getEntityNameFromTypeNode(type); if (typeName && ts.isEntityName(typeName)) { var serializationKind = resolver.getTypeReferenceSerializationKind(typeName); if (serializationKind === ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue || serializationKind === ts.TypeReferenceSerializationKind.Unknown) { return typeName; } } return undefined; } function enableSubstitutionForAsyncMethodsWithSuper() { 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); } } function onEmitNode(hint, node, emitCallback) { if (enabledSubstitutions & 1 && isSuperContainer(node)) { var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096); if (superContainerFlags !== enclosingSuperContainerFlags) { var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; enclosingSuperContainerFlags = superContainerFlags; previousOnEmitNode(hint, node, emitCallback); enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; return; } } previousOnEmitNode(hint, node, emitCallback); } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (hint === 1 && enclosingSuperContainerFlags) { return substituteExpression(node); } return node; } function substituteExpression(node) { switch (node.kind) { case 185: return substitutePropertyAccessExpression(node); case 186: return substituteElementAccessExpression(node); case 187: return substituteCallExpression(node); } return node; } function substitutePropertyAccessExpression(node) { if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node); } return node; } function substituteElementAccessExpression(node) { if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(node.argumentExpression, node); } return node; } function substituteCallExpression(node) { var expression = node.expression; if (ts.isSuperProperty(expression)) { var argumentExpression = ts.isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [ ts.createThis() ].concat(node.arguments)); } return node; } function isSuperContainer(node) { var kind = node.kind; return kind === 235 || kind === 155 || kind === 154 || kind === 156 || kind === 157; } function createSuperAccessInAsyncMethod(argumentExpression, 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"), undefined, [argumentExpression]), location); } } } ts.transformES2017 = transformES2017; var awaiterHelper = { name: "typescript:awaiter", scoped: false, priority: 5, text: "\n var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n };" }; function createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, body) { context.requestEmitHelper(awaiterHelper); 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(), generatorFunc ]); } ts.asyncSuperHelper = { name: "typescript:async-super", scoped: true, text: ts.helperString(__makeTemplateObject(["\n const ", " = name => super[name];"], ["\n const ", " = name => super[name];"]), "_super") }; ts.advancedAsyncSuperHelper = { name: "typescript:advanced-async-super", scoped: true, 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 = {})); var ts; (function (ts) { var ESNextSubstitutionFlags; (function (ESNextSubstitutionFlags) { ESNextSubstitutionFlags[ESNextSubstitutionFlags["AsyncMethodsWithSuper"] = 1] = "AsyncMethodsWithSuper"; })(ESNextSubstitutionFlags || (ESNextSubstitutionFlags = {})); function transformESNext(context) { var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var resolver = context.getEmitResolver(); var compilerOptions = context.getCompilerOptions(); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var previousOnEmitNode = context.onEmitNode; context.onEmitNode = onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; var enabledSubstitutions; var enclosingFunctionFlags; var enclosingSuperContainerFlags = 0; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } var visited = ts.visitEachChild(node, visitor, context); ts.addEmitHelpers(visited, context.readEmitHelpers()); return visited; } function visitor(node) { return visitorWorker(node, false); } function visitorNoDestructuringValue(node) { return visitorWorker(node, true); } function visitorNoAsyncModifier(node) { if (node.kind === 120) { return undefined; } return node; } function visitorWorker(node, noDestructuringValue) { if ((node.transformFlags & 8) === 0) { return node; } switch (node.kind) { case 197: return visitAwaitExpression(node); case 203: return visitYieldExpression(node); case 225: return visitReturnStatement(node); case 228: return visitLabeledStatement(node); case 184: return visitObjectLiteralExpression(node); case 200: return visitBinaryExpression(node, noDestructuringValue); case 232: return visitVariableDeclaration(node); case 222: return visitForOfStatement(node, undefined); case 220: return visitForStatement(node); case 196: return visitVoidExpression(node); case 155: return visitConstructorDeclaration(node); case 154: return visitMethodDeclaration(node); case 156: return visitGetAccessorDeclaration(node); case 157: return visitSetAccessorDeclaration(node); case 234: return visitFunctionDeclaration(node); case 192: return visitFunctionExpression(node); case 193: return visitArrowFunction(node); case 149: return visitParameter(node); case 216: return visitExpressionStatement(node); case 191: return visitParenthesizedExpression(node, noDestructuringValue); case 269: return visitCatchClause(node); default: return ts.visitEachChild(node, visitor, context); } } function visitAwaitExpression(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 && 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); } return ts.setOriginalNode(ts.setTextRange(ts.createYield(createDownlevelAwait(node.expression ? ts.visitNode(node.expression, visitor, ts.isExpression) : ts.createVoidZero())), node), node); } return ts.visitEachChild(node, visitor, context); } function visitReturnStatement(node) { 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) { var statement = ts.unwrapInnermostStatementOfLabel(node); if (statement.kind === 222 && statement.awaitModifier) { return visitForOfStatement(statement, node); } return ts.restoreEnclosingLabel(ts.visitEachChild(statement, visitor, context), node); } return ts.visitEachChild(node, visitor, context); } function chunkObjectLiteralElements(elements) { var chunkObject; var objects = []; for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) { var e = elements_4[_i]; if (e.kind === 272) { if (chunkObject) { objects.push(ts.createObjectLiteral(chunkObject)); chunkObject = undefined; } var target = e.expression; objects.push(ts.visitNode(target, visitor, ts.isExpression)); } else { chunkObject = ts.append(chunkObject, e.kind === 270 ? ts.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression)) : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike)); } } if (chunkObject) { objects.push(ts.createObjectLiteral(chunkObject)); } return objects; } function visitObjectLiteralExpression(node) { if (node.transformFlags & 1048576) { var objects = chunkObjectLiteralElements(node.properties); if (objects.length && objects[0].kind !== 184) { objects.unshift(ts.createObjectLiteral()); } return createAssignHelper(context, objects); } return ts.visitEachChild(node, visitor, context); } function visitExpressionStatement(node) { return ts.visitEachChild(node, visitorNoDestructuringValue, context); } function visitParenthesizedExpression(node, noDestructuringValue) { return ts.visitEachChild(node, noDestructuringValue ? visitorNoDestructuringValue : visitor, context); } function visitCatchClause(node) { if (!node.variableDeclaration) { return ts.updateCatchClause(node, ts.createVariableDeclaration(ts.createTempVariable(undefined)), ts.visitNode(node.block, visitor, ts.isBlock)); } return ts.visitEachChild(node, visitor, context); } function visitBinaryExpression(node, noDestructuringValue) { if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 1048576) { return ts.flattenDestructuringAssignment(node, visitor, context, 1, !noDestructuringValue); } 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); } function visitVariableDeclaration(node) { if (ts.isBindingPattern(node.name) && node.name.transformFlags & 1048576) { return ts.flattenDestructuringBinding(node, visitor, context, 1); } return ts.visitEachChild(node, visitor, context); } function visitForStatement(node) { return ts.updateFor(node, ts.visitNode(node.initializer, visitorNoDestructuringValue, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement)); } function visitVoidExpression(node) { return ts.visitEachChild(node, visitorNoDestructuringValue, context); } function visitForOfStatement(node, outermostLabeledStatement) { if (node.initializer.transformFlags & 1048576) { node = transformForOfStatementWithObjectRest(node); } if (node.awaitModifier) { return transformForAwaitOfStatement(node, outermostLabeledStatement); } else { return ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement); } } function transformForOfStatementWithObjectRest(node) { var initializerWithoutParens = ts.skipParentheses(node.initializer); if (ts.isVariableDeclarationList(initializerWithoutParens) || ts.isAssignmentPattern(initializerWithoutParens)) { var bodyLocation = void 0; var statementsLocation = void 0; var temp = ts.createTempVariable(undefined); var statements = [ts.createForOfBindingStatement(initializerWithoutParens, temp)]; if (ts.isBlock(node.statement)) { ts.addRange(statements, node.statement.statements); bodyLocation = node.statement; statementsLocation = node.statement.statements; } else if (node.statement) { ts.append(statements, node.statement); bodyLocation = node.statement; statementsLocation = node.statement; } return ts.updateForOf(node, node.awaitModifier, ts.setTextRange(ts.createVariableDeclarationList([ ts.setTextRange(ts.createVariableDeclaration(temp), node.initializer) ], 1), node.initializer), node.expression, ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation)); } return node; } function convertForOfStatementHead(node, boundValue) { var binding = ts.createForOfBindingStatement(node.initializer, boundValue); var bodyLocation; var statementsLocation; var statements = [ts.visitNode(binding, visitor, ts.isStatement)]; var statement = ts.visitNode(node.statement, visitor, ts.isStatement); if (ts.isBlock(statement)) { ts.addRange(statements, statement.statements); bodyLocation = statement; statementsLocation = statement.statements; } else { statements.push(statement); } return ts.setEmitFlags(ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation), 48 | 384); } function createDownlevelAwait(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(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(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(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([ ts.setTextRange(ts.createVariableDeclaration(iterator, undefined, callValues), node.expression), ts.createVariableDeclaration(result) ]), 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)), 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) { 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; 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; 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; 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, undefined, enclosingFunctionFlags & 1 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) : node.modifiers, enclosingFunctionFlags & 2 ? undefined : 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; return updated; } function visitFunctionDeclaration(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(node); var updated = ts.updateFunctionDeclaration(node, undefined, enclosingFunctionFlags & 1 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) : node.modifiers, enclosingFunctionFlags & 2 ? undefined : node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function visitArrowFunction(node) { var savedEnclosingFunctionFlags = enclosingFunctionFlags; enclosingFunctionFlags = ts.getFunctionFlags(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 ? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier) : node.modifiers, enclosingFunctionFlags & 2 ? undefined : node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody(node)); enclosingFunctionFlags = savedEnclosingFunctionFlags; return updated; } function transformAsyncGeneratorFunctionBody(node) { resumeLexicalEnvironment(); var statements = []; var statementOffset = ts.addPrologue(statements, node.body.statements, false, visitor); appendObjectRestAssignmentsIfNeeded(statements, node); 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); if (languageVersion >= 2) { if (resolver.getNodeCheckFlags(node) & 4096) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.advancedAsyncSuperHelper); } else if (resolver.getNodeCheckFlags(node) & 2048) { enableSubstitutionForAsyncMethodsWithSuper(); ts.addEmitHelper(block, ts.asyncSuperHelper); } } return block; } function transformFunctionBody(node) { resumeLexicalEnvironment(); var statementOffset = 0; var statements = []; var body = ts.visitNode(node.body, visitor, ts.isConciseBody); if (ts.isBlock(body)) { statementOffset = ts.addPrologue(statements, body.statements, false, visitor); } ts.addRange(statements, appendObjectRestAssignmentsIfNeeded(undefined, node)); var leadingStatements = endLexicalEnvironment(); if (statementOffset > 0 || ts.some(statements) || ts.some(leadingStatements)) { 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)); } return body; } function appendObjectRestAssignmentsIfNeeded(statements, node) { for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; if (parameter.transformFlags & 1048576) { var temp = ts.getGeneratedNameForNode(parameter); var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1, temp, false, true); if (ts.some(declarations)) { var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(declarations)); ts.setEmitFlags(statement, 1048576); statements = ts.append(statements, statement); } } } return statements; } function enableSubstitutionForAsyncMethodsWithSuper() { 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); } } function onEmitNode(hint, node, emitCallback) { if (enabledSubstitutions & 1 && isSuperContainer(node)) { var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096); if (superContainerFlags !== enclosingSuperContainerFlags) { var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; enclosingSuperContainerFlags = superContainerFlags; previousOnEmitNode(hint, node, emitCallback); enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; return; } } previousOnEmitNode(hint, node, emitCallback); } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (hint === 1 && enclosingSuperContainerFlags) { return substituteExpression(node); } return node; } function substituteExpression(node) { switch (node.kind) { case 185: return substitutePropertyAccessExpression(node); case 186: return substituteElementAccessExpression(node); case 187: return substituteCallExpression(node); } return node; } function substitutePropertyAccessExpression(node) { if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node); } return node; } function substituteElementAccessExpression(node) { if (node.expression.kind === 97) { return createSuperAccessInAsyncMethod(node.argumentExpression, node); } return node; } function substituteCallExpression(node) { var expression = node.expression; if (ts.isSuperProperty(expression)) { var argumentExpression = ts.isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [ ts.createThis() ].concat(node.arguments)); } return node; } function isSuperContainer(node) { var kind = node.kind; return kind === 235 || kind === 155 || kind === 154 || kind === 156 || kind === 157; } function createSuperAccessInAsyncMethod(argumentExpression, 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"), undefined, [argumentExpression]), location); } } } ts.transformESNext = transformESNext; var assignHelper = { name: "typescript:assign", scoped: false, priority: 1, text: "\n var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };" }; function createAssignHelper(context, attributesSegments) { 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"), undefined, attributesSegments); } ts.createAssignHelper = createAssignHelper; var awaitHelper = { name: "typescript:await", scoped: false, text: "\n var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }" }; function createAwaitHelper(context, expression) { context.requestEmitHelper(awaitHelper); return ts.createCall(ts.getHelperName("__await"), undefined, [expression]); } var asyncGeneratorHelper = { name: "typescript:asyncGenerator", scoped: false, text: "\n var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n };" }; function createAsyncGeneratorHelper(context, generatorFunc) { context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncGeneratorHelper); (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144; return ts.createCall(ts.getHelperName("__asyncGenerator"), undefined, [ ts.createThis(), ts.createIdentifier("arguments"), generatorFunc ]); } var asyncDelegator = { name: "typescript:asyncDelegator", scoped: false, text: "\n var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\n };" }; function createAsyncDelegatorHelper(context, expression, location) { context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncDelegator); return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncDelegator"), undefined, [expression]), location); } var asyncValues = { name: "typescript:asyncValues", scoped: false, text: "\n var __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n };" }; function createAsyncValuesHelper(context, expression, location) { context.requestEmitHelper(asyncValues); return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncValues"), undefined, [expression]), location); } })(ts || (ts = {})); var ts; (function (ts) { function transformJsx(context) { var compilerOptions = context.getCompilerOptions(); var currentSourceFile; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } currentSourceFile = node; var visited = ts.visitEachChild(node, visitor, context); ts.addEmitHelpers(visited, context.readEmitHelpers()); return visited; } function visitor(node) { if (node.transformFlags & 4) { return visitorWorker(node); } else { return node; } } function visitorWorker(node) { switch (node.kind) { 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); } } function transformJsxChildToExpression(node) { switch (node.kind) { case 10: return visitJsxText(node); case 265: return visitJsxExpression(node); 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, node); } function visitJsxSelfClosingElement(node, isChild) { return visitJsxOpeningLikeElement(node, undefined, isChild, node); } function visitJsxFragment(node, isChild) { 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) { objectProperties = ts.createNull(); } else { 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])) { segments.unshift(ts.createObjectLiteral()); } objectProperties = ts.singleOrUndefined(segments); if (!objectProperties) { objectProperties = ts.createAssignHelper(context, segments); } } 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, ts.mapDefined(children, transformJsxChildToExpression), node, location); if (isChild) { ts.startOnNewLine(element); } return element; } function transformJsxSpreadAttributeToExpression(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } function transformJsxAttributeToObjectLiteralElement(node) { var name = getAttributeName(node); var expression = transformJsxAttributeInitializer(node.initializer); return ts.createPropertyAssignment(name, expression); } function transformJsxAttributeInitializer(node) { if (node === undefined) { return ts.createTrue(); } 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) { if (node.expression === undefined) { return ts.createTrue(); } return visitJsxExpression(node); } else { return ts.Debug.failBadSyntaxKind(node); } } function visitJsxText(node) { var fixed = fixupWhitespaceAndDecodeEntities(ts.getTextOfNode(node, true)); return fixed === undefined ? undefined : ts.createLiteral(fixed); } function fixupWhitespaceAndDecodeEntities(text) { var acc; var firstNonWhitespace = 0; var lastNonWhitespace = -1; for (var i = 0; i < text.length; i++) { var c = text.charCodeAt(i); if (ts.isLineBreak(c)) { if (firstNonWhitespace !== -1 && lastNonWhitespace !== -1) { acc = addLineOfJsxText(acc, text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1)); } firstNonWhitespace = -1; } else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; } } } return firstNonWhitespace !== -1 ? addLineOfJsxText(acc, text.substr(firstNonWhitespace)) : acc; } function addLineOfJsxText(acc, trimmedLine) { var decoded = decodeEntities(trimmedLine); return acc === undefined ? decoded : acc + " " + decoded; } function decodeEntities(text) { return text.replace(/&((#((\d+)|x([\da-fA-F]+)))|(\w+));/g, function (match, _all, _number, _digits, decimal, hex, word) { if (decimal) { return String.fromCharCode(parseInt(decimal, 10)); } else if (hex) { return String.fromCharCode(parseInt(hex, 16)); } else { var ch = entities.get(word); return ch ? String.fromCharCode(ch) : match; } }); } function tryDecodeEntities(text) { var decoded = decodeEntities(text); return decoded === text ? undefined : decoded; } function getTagName(node) { if (node.kind === 255) { return getTagName(node.openingElement); } else { var name = node.tagName; if (ts.isIdentifier(name) && ts.isIntrinsicJsxName(name.escapedText)) { return ts.createLiteral(ts.idText(name)); } else { return ts.createExpressionFromEntityName(name); } } } function getAttributeName(node) { var name = node.name; var text = ts.idText(name); if (/^[A-Za-z_]\w*$/.test(text)) { return name; } else { return ts.createLiteral(text); } } function visitJsxExpression(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } } ts.transformJsx = transformJsx; var entities = ts.createMapFromTemplate({ quot: 0x0022, amp: 0x0026, apos: 0x0027, lt: 0x003C, gt: 0x003E, nbsp: 0x00A0, iexcl: 0x00A1, cent: 0x00A2, pound: 0x00A3, curren: 0x00A4, yen: 0x00A5, brvbar: 0x00A6, sect: 0x00A7, uml: 0x00A8, copy: 0x00A9, ordf: 0x00AA, laquo: 0x00AB, not: 0x00AC, shy: 0x00AD, reg: 0x00AE, macr: 0x00AF, deg: 0x00B0, plusmn: 0x00B1, sup2: 0x00B2, sup3: 0x00B3, acute: 0x00B4, micro: 0x00B5, para: 0x00B6, middot: 0x00B7, cedil: 0x00B8, sup1: 0x00B9, ordm: 0x00BA, raquo: 0x00BB, frac14: 0x00BC, frac12: 0x00BD, frac34: 0x00BE, iquest: 0x00BF, Agrave: 0x00C0, Aacute: 0x00C1, Acirc: 0x00C2, Atilde: 0x00C3, Auml: 0x00C4, Aring: 0x00C5, AElig: 0x00C6, Ccedil: 0x00C7, Egrave: 0x00C8, Eacute: 0x00C9, Ecirc: 0x00CA, Euml: 0x00CB, Igrave: 0x00CC, Iacute: 0x00CD, Icirc: 0x00CE, Iuml: 0x00CF, ETH: 0x00D0, Ntilde: 0x00D1, Ograve: 0x00D2, Oacute: 0x00D3, Ocirc: 0x00D4, Otilde: 0x00D5, Ouml: 0x00D6, times: 0x00D7, Oslash: 0x00D8, Ugrave: 0x00D9, Uacute: 0x00DA, Ucirc: 0x00DB, Uuml: 0x00DC, Yacute: 0x00DD, THORN: 0x00DE, szlig: 0x00DF, agrave: 0x00E0, aacute: 0x00E1, acirc: 0x00E2, atilde: 0x00E3, auml: 0x00E4, aring: 0x00E5, aelig: 0x00E6, ccedil: 0x00E7, egrave: 0x00E8, eacute: 0x00E9, ecirc: 0x00EA, euml: 0x00EB, igrave: 0x00EC, iacute: 0x00ED, icirc: 0x00EE, iuml: 0x00EF, eth: 0x00F0, ntilde: 0x00F1, ograve: 0x00F2, oacute: 0x00F3, ocirc: 0x00F4, otilde: 0x00F5, ouml: 0x00F6, divide: 0x00F7, oslash: 0x00F8, ugrave: 0x00F9, uacute: 0x00FA, ucirc: 0x00FB, uuml: 0x00FC, yacute: 0x00FD, thorn: 0x00FE, yuml: 0x00FF, OElig: 0x0152, oelig: 0x0153, Scaron: 0x0160, scaron: 0x0161, Yuml: 0x0178, fnof: 0x0192, circ: 0x02C6, tilde: 0x02DC, Alpha: 0x0391, Beta: 0x0392, Gamma: 0x0393, Delta: 0x0394, Epsilon: 0x0395, Zeta: 0x0396, Eta: 0x0397, Theta: 0x0398, Iota: 0x0399, Kappa: 0x039A, Lambda: 0x039B, Mu: 0x039C, Nu: 0x039D, Xi: 0x039E, Omicron: 0x039F, Pi: 0x03A0, Rho: 0x03A1, Sigma: 0x03A3, Tau: 0x03A4, Upsilon: 0x03A5, Phi: 0x03A6, Chi: 0x03A7, Psi: 0x03A8, Omega: 0x03A9, alpha: 0x03B1, beta: 0x03B2, gamma: 0x03B3, delta: 0x03B4, epsilon: 0x03B5, zeta: 0x03B6, eta: 0x03B7, theta: 0x03B8, iota: 0x03B9, kappa: 0x03BA, lambda: 0x03BB, mu: 0x03BC, nu: 0x03BD, xi: 0x03BE, omicron: 0x03BF, pi: 0x03C0, rho: 0x03C1, sigmaf: 0x03C2, sigma: 0x03C3, tau: 0x03C4, upsilon: 0x03C5, phi: 0x03C6, chi: 0x03C7, psi: 0x03C8, omega: 0x03C9, thetasym: 0x03D1, upsih: 0x03D2, piv: 0x03D6, ensp: 0x2002, emsp: 0x2003, thinsp: 0x2009, zwnj: 0x200C, zwj: 0x200D, lrm: 0x200E, rlm: 0x200F, ndash: 0x2013, mdash: 0x2014, lsquo: 0x2018, rsquo: 0x2019, sbquo: 0x201A, ldquo: 0x201C, rdquo: 0x201D, bdquo: 0x201E, dagger: 0x2020, Dagger: 0x2021, bull: 0x2022, hellip: 0x2026, permil: 0x2030, prime: 0x2032, Prime: 0x2033, lsaquo: 0x2039, rsaquo: 0x203A, oline: 0x203E, frasl: 0x2044, euro: 0x20AC, image: 0x2111, weierp: 0x2118, real: 0x211C, trade: 0x2122, alefsym: 0x2135, larr: 0x2190, uarr: 0x2191, rarr: 0x2192, darr: 0x2193, harr: 0x2194, crarr: 0x21B5, lArr: 0x21D0, uArr: 0x21D1, rArr: 0x21D2, dArr: 0x21D3, hArr: 0x21D4, forall: 0x2200, part: 0x2202, exist: 0x2203, empty: 0x2205, nabla: 0x2207, isin: 0x2208, notin: 0x2209, ni: 0x220B, prod: 0x220F, sum: 0x2211, minus: 0x2212, lowast: 0x2217, radic: 0x221A, prop: 0x221D, infin: 0x221E, ang: 0x2220, and: 0x2227, or: 0x2228, cap: 0x2229, cup: 0x222A, int: 0x222B, there4: 0x2234, sim: 0x223C, cong: 0x2245, asymp: 0x2248, ne: 0x2260, equiv: 0x2261, le: 0x2264, ge: 0x2265, sub: 0x2282, sup: 0x2283, nsub: 0x2284, sube: 0x2286, supe: 0x2287, oplus: 0x2295, otimes: 0x2297, perp: 0x22A5, sdot: 0x22C5, lceil: 0x2308, rceil: 0x2309, lfloor: 0x230A, rfloor: 0x230B, lang: 0x2329, rang: 0x232A, loz: 0x25CA, spades: 0x2660, clubs: 0x2663, hearts: 0x2665, diams: 0x2666 }); })(ts || (ts = {})); var ts; (function (ts) { function transformES2016(context) { var hoistVariableDeclaration = context.hoistVariableDeclaration; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } return ts.visitEachChild(node, visitor, context); } function visitor(node) { if ((node.transformFlags & 32) === 0) { return node; } switch (node.kind) { case 200: return visitBinaryExpression(node); default: return ts.visitEachChild(node, visitor, context); } } function visitBinaryExpression(node) { switch (node.operatorToken.kind) { case 62: return visitExponentiationAssignmentExpression(node); case 40: return visitExponentiationExpression(node); default: return ts.visitEachChild(node, visitor, context); } } function visitExponentiationAssignmentExpression(node) { var target; var value; var left = ts.visitNode(node.left, visitor, ts.isExpression); var right = ts.visitNode(node.right, visitor, ts.isExpression); if (ts.isElementAccessExpression(left)) { 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)) { 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 { target = left; value = left; } return ts.setTextRange(ts.createAssignment(target, ts.createMathPow(value, right, node)), node); } function visitExponentiationExpression(node) { var left = ts.visitNode(node.left, visitor, ts.isExpression); var right = ts.visitNode(node.right, visitor, ts.isExpression); return ts.createMathPow(left, right, node); } } ts.transformES2016 = transformES2016; })(ts || (ts = {})); var ts; (function (ts) { var ES2015SubstitutionFlags; (function (ES2015SubstitutionFlags) { ES2015SubstitutionFlags[ES2015SubstitutionFlags["CapturedThis"] = 1] = "CapturedThis"; 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) { SuperCaptureResult[SuperCaptureResult["NoReplacement"] = 0] = "NoReplacement"; SuperCaptureResult[SuperCaptureResult["ReplaceSuperCapture"] = 1] = "ReplaceSuperCapture"; SuperCaptureResult[SuperCaptureResult["ReplaceWithReturn"] = 2] = "ReplaceWithReturn"; })(SuperCaptureResult || (SuperCaptureResult = {})); var HierarchyFacts; (function (HierarchyFacts) { HierarchyFacts[HierarchyFacts["None"] = 0] = "None"; 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"; HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask"; HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes"; HierarchyFacts[HierarchyFacts["BlockScopeExcludes"] = 4032] = "BlockScopeExcludes"; HierarchyFacts[HierarchyFacts["SourceFileIncludes"] = 64] = "SourceFileIncludes"; HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 3968] = "SourceFileExcludes"; HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes"; HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes"; HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes"; HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes"; HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes"; HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 16256] = "ArrowFunctionExcludes"; HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes"; HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes"; HierarchyFacts[HierarchyFacts["DoOrWhileStatementIncludes"] = 256] = "DoOrWhileStatementIncludes"; HierarchyFacts[HierarchyFacts["DoOrWhileStatementExcludes"] = 0] = "DoOrWhileStatementExcludes"; HierarchyFacts[HierarchyFacts["ForStatementIncludes"] = 1280] = "ForStatementIncludes"; HierarchyFacts[HierarchyFacts["ForStatementExcludes"] = 3008] = "ForStatementExcludes"; HierarchyFacts[HierarchyFacts["ForInOrForOfStatementIncludes"] = 2304] = "ForInOrForOfStatementIncludes"; HierarchyFacts[HierarchyFacts["ForInOrForOfStatementExcludes"] = 1984] = "ForInOrForOfStatementExcludes"; HierarchyFacts[HierarchyFacts["BlockIncludes"] = 128] = "BlockIncludes"; HierarchyFacts[HierarchyFacts["BlockExcludes"] = 3904] = "BlockExcludes"; HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes"; HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 4032] = "IterationStatementBlockExcludes"; HierarchyFacts[HierarchyFacts["ComputedPropertyNameIncludes"] = 8192] = "ComputedPropertyNameIncludes"; HierarchyFacts[HierarchyFacts["ComputedPropertyNameExcludes"] = 0] = "ComputedPropertyNameExcludes"; HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget"; HierarchyFacts[HierarchyFacts["NewTargetInComputedPropertyName"] = 32768] = "NewTargetInComputedPropertyName"; 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(); var resolver = context.getEmitResolver(); var previousOnSubstituteNode = context.onSubstituteNode; var previousOnEmitNode = context.onEmitNode; context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; var currentSourceFile; var currentText; var hierarchyFacts; var taggedTemplateStringDeclarations; function recordTaggedTemplateString(temp) { taggedTemplateStringDeclarations = ts.append(taggedTemplateStringDeclarations, ts.createVariableDeclaration(temp)); } var convertedLoopState; var enabledSubstitutions; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } currentSourceFile = node; currentText = node.text; var visited = visitSourceFile(node); ts.addEmitHelpers(visited, context.readEmitHelpers()); currentSourceFile = undefined; currentText = undefined; taggedTemplateStringDeclarations = undefined; hierarchyFacts = 0; return visited; } function enterSubtree(excludeFacts, includeFacts) { var ancestorFacts = hierarchyFacts; hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383; return ancestorFacts; } function exitSubtree(ancestorFacts, excludeFacts, includeFacts) { hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 | ancestorFacts; } function isReturnVoidStatementInConstructorWithCapturedSuper(node) { return (hierarchyFacts & 4096) !== 0 && node.kind === 225 && !node.expression; } function shouldVisitNode(node) { return (node.transformFlags & 128) !== 0 || convertedLoopState !== undefined || (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)) { return visitJavaScript(node); } else { return node; } } function functionBodyVisitor(node) { if (shouldVisitNode(node)) { return visitBlock(node, true); } return node; } function callExpressionVisitor(node) { if (node.kind === 97) { return visitSuperKeyword(true); } return visitor(node); } function visitJavaScript(node) { switch (node.kind) { case 115: return undefined; case 235: return visitClassDeclaration(node); case 205: return visitClassExpression(node); case 149: return visitParameter(node); case 234: return visitFunctionDeclaration(node); case 193: return visitArrowFunction(node); case 192: return visitFunctionExpression(node); case 232: return visitVariableDeclaration(node); case 71: return visitIdentifier(node); case 233: return visitVariableDeclarationList(node); case 227: return visitSwitchStatement(node); case 241: return visitCaseBlock(node); case 213: return visitBlock(node, false); case 224: case 223: return visitBreakOrContinueStatement(node); case 228: return visitLabeledStatement(node); 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: return visitObjectLiteralExpression(node); case 269: return visitCatchClause(node); case 271: return visitShorthandPropertyAssignment(node); case 147: return visitComputedPropertyName(node); case 183: return visitArrayLiteralExpression(node); case 187: return visitCallExpression(node); case 188: return visitNewExpression(node); 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: return visitStringLiteral(node); case 8: return visitNumericLiteral(node); case 189: return visitTaggedTemplateExpression(node); case 202: return visitTemplateExpression(node); case 203: return visitYieldExpression(node); case 204: return visitSpreadElement(node); case 97: return visitSuperKeyword(false); case 99: return visitThisKeyword(node); case 210: return visitMetaProperty(node); case 154: return visitMethodDeclaration(node); case 156: case 157: return visitAccessorDeclaration(node); case 214: return visitVariableStatement(node); case 225: return visitReturnStatement(node); default: return ts.visitEachChild(node, visitor, context); } } function visitSourceFile(node) { var ancestorFacts = enterSubtree(3968, 64); var statements = []; startLexicalEnvironment(); 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(undefined, ts.createVariableDeclarationList(taggedTemplateStringDeclarations))); } ts.prependStatements(statements, endLexicalEnvironment()); 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; convertedLoopState.allowedNonLabeledJumps |= 2; var result = ts.visitEachChild(node, visitor, context); convertedLoopState.allowedNonLabeledJumps = savedAllowedNonLabeledJumps; return result; } return ts.visitEachChild(node, visitor, context); } function visitCaseBlock(node) { var ancestorFacts = enterSubtree(4032, 0); var updated = ts.visitEachChild(node, visitor, context); exitSubtree(ancestorFacts, 0, 0); return updated; } function returnCapturedThis(node) { return ts.setOriginalNode(ts.createReturn(ts.createFileLevelUniqueName("_this")), node); } function visitReturnStatement(node) { if (convertedLoopState) { convertedLoopState.nonLocalJumps |= 8; if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) { node = returnCapturedThis(node); } return ts.createReturn(ts.createObjectLiteral([ ts.createPropertyAssignment(ts.createIdentifier("value"), node.expression ? ts.visitNode(node.expression, visitor, ts.isExpression) : ts.createVoidZero()) ])); } else if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) { return returnCapturedThis(node); } return ts.visitEachChild(node, visitor, context); } function visitThisKeyword(node) { if (convertedLoopState) { if (hierarchyFacts & 2) { convertedLoopState.containsLexicalThis = true; return node; } return convertedLoopState.thisName || (convertedLoopState.thisName = ts.createUniqueName("this")); } return node; } function visitIdentifier(node) { if (!convertedLoopState) { return node; } if (ts.isGeneratedIdentifier(node)) { return node; } if (node.escapedText !== "arguments" || !resolver.isArgumentsLocalBinding(node)) { return node; } return convertedLoopState.argumentsName || (convertedLoopState.argumentsName = ts.createUniqueName("arguments")); } function visitBreakOrContinueStatement(node) { if (convertedLoopState) { 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) { convertedLoopState.nonLocalJumps |= 2; labelMarker = "break"; } else { convertedLoopState.nonLocalJumps |= 4; labelMarker = "continue"; } } else { if (node.kind === 224) { labelMarker = "break-" + label.escapedText; setLabeledJump(convertedLoopState, true, ts.idText(label), labelMarker); } else { labelMarker = "continue-" + label.escapedText; setLabeledJump(convertedLoopState, false, ts.idText(label), labelMarker); } } var returnExpression = ts.createLiteral(labelMarker); if (convertedLoopState.loopOutParameters.length) { var outParams = convertedLoopState.loopOutParameters; var expr = void 0; for (var i = 0; i < outParams.length; i++) { var copyExpr = copyOutParameter(outParams[i], 1); if (i === 0) { expr = copyExpr; } else { expr = ts.createBinary(expr, 26, copyExpr); } } returnExpression = ts.createBinary(expr, 26, returnExpression); } return ts.createReturn(returnExpression); } } return ts.visitEachChild(node, visitor, context); } function visitClassDeclaration(node) { var variable = ts.createVariableDeclaration(ts.getLocalName(node, true), undefined, transformClassLikeDeclarationToExpression(node)); ts.setOriginalNode(variable, node); var statements = []; var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([variable])); ts.setOriginalNode(statement, node); ts.setTextRange(statement, node); ts.startOnNewLine(statement); statements.push(statement); 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) === 0) { statements.push(ts.createEndOfDeclarationMarker(node)); ts.setEmitFlags(statement, emitFlags | 4194304); } return ts.singleOrMany(statements); } function visitClassExpression(node) { return transformClassLikeDeclarationToExpression(node); } function transformClassLikeDeclarationToExpression(node) { if (node.name) { enableSubstitutionsForBlockScopedBindings(); } var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node); 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); var outer = ts.createPartiallyEmittedExpression(inner); outer.end = ts.skipTrivia(currentText, node.pos); ts.setEmitFlags(outer, 1536); var result = ts.createParen(ts.createCall(outer, undefined, extendsClauseElement ? [ts.visitNode(extendsClauseElement.expression, visitor, ts.isExpression)] : [])); ts.addSyntheticLeadingComment(result, 3, "* @class "); return result; } function transformClassBody(node, extendsClauseElement) { var statements = []; startLexicalEnvironment(); addExtendsHelperIfNeeded(statements, node, extendsClauseElement); addConstructor(statements, node, extendsClauseElement); addClassMembers(statements, node); var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentText, node.members.end), 18); var localName = ts.getInternalName(node); var outer = ts.createPartiallyEmittedExpression(localName); outer.end = closingBraceLocation.end; ts.setEmitFlags(outer, 1536); var statement = ts.createReturn(outer); statement.pos = closingBraceLocation.pos; ts.setEmitFlags(statement, 1536 | 384); statements.push(statement); ts.prependStatements(statements, endLexicalEnvironment()); var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true); ts.setEmitFlags(block, 1536); return block; } function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) { if (extendsClauseElement) { statements.push(ts.setTextRange(ts.createStatement(createExtendsHelper(context, ts.getInternalName(node))), extendsClauseElement)); } } function addConstructor(statements, node, extendsClauseElement) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; var ancestorFacts = enterSubtree(16278, 73); var constructor = ts.getFirstConstructorWithBody(node); var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined); 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); } statements.push(constructorFunction); exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; } function transformConstructorParameters(constructor, hasSynthesizedSuper) { return ts.visitParameterList(constructor && !hasSynthesizedSuper ? constructor.parameters : undefined, visitor, context) || []; } function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) { var statements = []; resumeLexicalEnvironment(); var statementOffset = -1; if (hasSynthesizedSuper) { statementOffset = 0; } else if (constructor) { statementOffset = ts.addStandardPrologue(statements, constructor.body.statements, false); } if (constructor) { addDefaultValueAssignmentsIfNeeded(statements, constructor); addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper); if (!hasSynthesizedSuper) { statementOffset = ts.addCustomPrologue(statements, constructor.body.statements, statementOffset, visitor); } ts.Debug.assert(statementOffset >= 0, "statementOffset not initialized correctly!"); } var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95; var superCaptureStatus = declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, constructor, isDerivedClass, hasSynthesizedSuper, statementOffset); if (superCaptureStatus === 1 || superCaptureStatus === 2) { statementOffset++; } if (constructor) { if (superCaptureStatus === 1) { hierarchyFacts |= 4096; } ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset)); } if (isDerivedClass && superCaptureStatus !== 2 && !(constructor && isSufficientlyCoveredByReturnStatements(constructor.body))) { statements.push(ts.createReturn(ts.createFileLevelUniqueName("_this"))); } ts.prependStatements(statements, endLexicalEnvironment()); if (constructor) { prependCaptureNewTargetIfNeeded(statements, constructor, false); } 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); } return block; } function isSufficientlyCoveredByReturnStatements(statement) { if (statement.kind === 225) { return true; } else if (statement.kind === 217) { var ifStatement = statement; if (ifStatement.elseStatement) { return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) && isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement); } } else if (statement.kind === 213) { var lastStatement = ts.lastOrUndefined(statement.statements); if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) { return true; } } return false; } function declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, ctor, isDerivedClass, hasSynthesizedSuper, statementOffset) { if (!isDerivedClass) { if (ctor) { addCaptureThisForNodeIfNeeded(statements, ctor); } return 0; } if (!ctor) { statements.push(ts.createReturn(createDefaultSuperCallOrThis())); return 2; } if (hasSynthesizedSuper) { captureThisForNode(statements, ctor, createDefaultSuperCallOrThis()); enableSubstitutionsForCapturedThis(); return 1; } var firstStatement; var superCallExpression; var ctorStatements = ctor.body.statements; if (statementOffset < ctorStatements.length) { firstStatement = ctorStatements[statementOffset]; if (firstStatement.kind === 216 && ts.isSuperCall(firstStatement.expression)) { superCallExpression = visitImmediateSuperCallInBody(firstStatement.expression); } } if (superCallExpression && statementOffset === ctorStatements.length - 1 && !(ctor.transformFlags & (16384 | 32768))) { var returnStatement = ts.createReturn(superCallExpression); if (superCallExpression.kind !== 200 || superCallExpression.left.kind !== 187) { ts.Debug.fail("Assumed generated super call would have form 'super.call(...) || this'."); } ts.setCommentRange(returnStatement, ts.getCommentRange(ts.setEmitFlags(superCallExpression.left, 1536))); statements.push(returnStatement); return 2; } captureThisForNode(statements, ctor, superCallExpression || createActualThis(), firstStatement); if (superCallExpression) { return 1; } return 0; } function createActualThis() { 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()); } function visitParameter(node) { if (node.dotDotDotToken) { return undefined; } else if (ts.isBindingPattern(node.name)) { return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, ts.getGeneratedNameForNode(node), undefined, undefined, undefined), node), node); } else if (node.initializer) { return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, node.name, undefined, undefined, undefined), node), node); } else { return node; } } function shouldAddDefaultValueAssignments(node) { return (node.transformFlags & 131072) !== 0; } function addDefaultValueAssignmentsIfNeeded(statements, node) { if (!shouldAddDefaultValueAssignments(node)) { return; } for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { var parameter = _a[_i]; var name = parameter.name, initializer = parameter.initializer, dotDotDotToken = parameter.dotDotDotToken; if (dotDotDotToken) { continue; } if (ts.isBindingPattern(name)) { addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer); } else if (initializer) { addDefaultValueAssignmentForInitializer(statements, parameter, name, initializer); } } } function addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) { var temp = ts.getGeneratedNameForNode(parameter); if (name.elements.length > 0) { 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)); } } 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), 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 | 32 | 1048576 | 1536); statements.push(statement); } function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) { return node && node.dotDotDotToken && node.name.kind === 71 && !inConstructorWithSynthesizedSuper; } function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) { var parameter = ts.lastOrUndefined(node.parameters); if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) { return; } var declarationName = ts.getMutableClone(parameter.name); ts.setEmitFlags(declarationName, 48); var expressionName = ts.getSynthesizedClone(parameter.name); var restIndex = node.parameters.length - 1; var temp = ts.createLoopVariable(); 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, 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))), parameter)) ])); ts.setEmitFlags(forStatement, 1048576); ts.startOnNewLine(forStatement); statements.push(forStatement); } function addCaptureThisForNodeIfNeeded(statements, node) { if (node.transformFlags & 32768 && node.kind !== 193) { captureThisForNode(statements, node, ts.createThis()); } } function captureThisForNode(statements, node, initializer, originalStatement) { enableSubstitutionsForCapturedThis(); var captureThisStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ ts.createVariableDeclaration(ts.createFileLevelUniqueName("_this"), undefined, initializer) ])); ts.setEmitFlags(captureThisStatement, 1536 | 1048576); ts.setTextRange(captureThisStatement, originalStatement); ts.setSourceMapRange(captureThisStatement, node); statements.push(captureThisStatement); } function prependCaptureNewTargetIfNeeded(statements, node, copyOnWrite) { if (hierarchyFacts & 16384) { var newTarget = void 0; switch (node.kind) { case 193: return statements; case 154: case 156: case 157: newTarget = ts.createVoidZero(); break; case 155: newTarget = ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4), "constructor"); break; 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(undefined, ts.createVariableDeclarationList([ ts.createVariableDeclaration(ts.createFileLevelUniqueName("_newTarget"), undefined, newTarget) ])); if (copyOnWrite) { return [captureNewTargetStatement].concat(statements); } statements.unshift(captureNewTargetStatement); } return statements; } function addClassMembers(statements, node) { for (var _i = 0, _a = node.members; _i < _a.length; _i++) { var member = _a[_i]; switch (member.kind) { case 212: statements.push(transformSemicolonClassElementToStatement(member)); break; case 154: statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node)); break; 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: break; default: ts.Debug.failBadSyntaxKind(node); break; } } } function transformSemicolonClassElementToStatement(member) { return ts.setTextRange(ts.createEmptyStatement(), member); } function transformClassMethodDeclarationToStatement(receiver, member, container) { 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), 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)), member); ts.setOriginalNode(statement, member); ts.setCommentRange(statement, commentRange); ts.setEmitFlags(statement, 48); exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0); return statement; } function transformAccessorsToStatement(receiver, accessors, container) { var statement = ts.createStatement(transformAccessorsToExpression(receiver, accessors, container, false)); ts.setEmitFlags(statement, 1536); ts.setSourceMapRange(statement, ts.getSourceMapRange(accessors.firstAccessor)); return statement; } function transformAccessorsToExpression(receiver, _a, container, startsOnNewLine) { var firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor; var ancestorFacts = enterSubtree(0, 0); var target = ts.getMutableClone(receiver); 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 | 16); ts.setSourceMapRange(propertyName, firstAccessor.name); var properties = []; if (getAccessor) { var getterFunction = transformFunctionLikeToExpression(getAccessor, undefined, undefined, container); ts.setSourceMapRange(getterFunction, ts.getSourceMapRange(getAccessor)); 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, undefined, undefined, container); ts.setSourceMapRange(setterFunction, ts.getSourceMapRange(setAccessor)); 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"), undefined, [ target, propertyName, ts.createObjectLiteral(properties, true) ]); if (startsOnNewLine) { ts.startOnNewLine(call); } exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0); return call; } function visitArrowFunction(node) { if (node.transformFlags & 16384) { enableSubstitutionsForCapturedThis(); } var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; 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); exitSubtree(ancestorFacts, 0, 0); convertedLoopState = savedConvertedLoopState; return func; } function visitFunctionExpression(node) { 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 ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); var name = hierarchyFacts & 16384 ? ts.getLocalName(node) : node.name; exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; return ts.updateFunctionExpression(node, undefined, node.asteriskToken, name, undefined, parameters, undefined, body); } function visitFunctionDeclaration(node) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; var ancestorFacts = enterSubtree(16286, 65); var parameters = ts.visitParameterList(node.parameters, visitor, context); var body = node.transformFlags & 64 ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); var name = hierarchyFacts & 16384 ? ts.getLocalName(node) : node.name; exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; return ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, undefined, parameters, undefined, body); } function transformFunctionLikeToExpression(node, location, name, container) { var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; 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 && !name && (node.kind === 234 || node.kind === 192)) { name = ts.getGeneratedNameForNode(node); } exitSubtree(ancestorFacts, 49152, 0); convertedLoopState = savedConvertedLoopState; return ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(undefined, node.asteriskToken, name, undefined, parameters, undefined, body), location), node); } function transformFunctionBody(node) { var multiLine = false; var singleLine = false; var statementsLocation; var closeBraceLocation; var leadingStatements = []; var statements = []; var body = node.body; var statementOffset; resumeLexicalEnvironment(); if (ts.isBlock(body)) { statementOffset = ts.addStandardPrologue(leadingStatements, body.statements, false); } addCaptureThisForNodeIfNeeded(leadingStatements, node); addDefaultValueAssignmentsIfNeeded(leadingStatements, node); addRestParameterIfNeeded(leadingStatements, node, false); if (ts.isBlock(body)) { statementOffset = ts.addCustomPrologue(leadingStatements, body.statements, statementOffset, visitor); statementsLocation = body.statements; ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, statementOffset)); if (!multiLine && body.multiLine) { multiLine = true; } } else { ts.Debug.assert(node.kind === 193); statementsLocation = ts.moveRangeEnd(body, -1); var equalsGreaterThanToken = node.equalsGreaterThanToken; if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) { if (ts.rangeEndIsOnSameLineAsRangeStart(equalsGreaterThanToken, body, currentSourceFile)) { singleLine = true; } else { multiLine = true; } } var expression = ts.visitNode(body, visitor, ts.isExpression); var returnStatement = ts.createReturn(expression); ts.setTextRange(returnStatement, body); ts.moveSyntheticComments(returnStatement, body); ts.setEmitFlags(returnStatement, 384 | 32 | 1024); statements.push(returnStatement); closeBraceLocation = body; } var lexicalEnvironment = context.endLexicalEnvironment(); ts.prependStatements(statements, lexicalEnvironment); 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); } if (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, true)), updated.statements)); } function visitBlock(node, isFunctionBody) { if (isFunctionBody) { return ts.visitEachChild(node, visitor, context); } var ancestorFacts = hierarchyFacts & 256 ? enterSubtree(4032, 512) : enterSubtree(3904, 128); var updated = ts.visitEachChild(node, visitor, context); exitSubtree(ancestorFacts, 0, 0); return updated; } function visitExpressionStatement(node) { switch (node.expression.kind) { 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); } function visitParenthesizedExpression(node, needsDestructuringValue) { if (!needsDestructuringValue) { switch (node.expression.kind) { 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); } function visitBinaryExpression(node, needsDestructuringValue) { if (ts.isDestructuringAssignment(node)) { return ts.flattenDestructuringAssignment(node, visitor, context, 0, needsDestructuringValue); } return ts.visitEachChild(node, visitor, context); } function visitVariableStatement(node) { var ancestorFacts = enterSubtree(0, ts.hasModifier(node, 1) ? 32 : 0); var updated; 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]; hoistVariableDeclarationDeclaredInConvertedLoop(convertedLoopState, decl); if (decl.initializer) { var assignment = void 0; if (ts.isBindingPattern(decl.name)) { assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0); } else { assignment = ts.createBinary(decl.name, 58, ts.visitNode(decl.initializer, visitor, ts.isExpression)); ts.setTextRange(assignment, decl); } assignments = ts.append(assignments, assignment); } } if (assignments) { updated = ts.setTextRange(ts.createStatement(ts.inlineExpressions(assignments)), node); } else { updated = undefined; } } else { updated = ts.visitEachChild(node, visitor, context); } exitSubtree(ancestorFacts, 0, 0); return updated; } function visitVariableDeclarationList(node) { if (node.transformFlags & 64) { if (node.flags & 3) { enableSubstitutionsForBlockScopedBindings(); } 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 && (ts.isBindingPattern(node.declarations[0].name) || ts.isBindingPattern(ts.last(node.declarations).name))) { var firstDeclaration = ts.firstOrUndefined(declarations); if (firstDeclaration) { ts.setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, ts.last(declarations).end)); } } return declarationList; } return ts.visitEachChild(node, visitor, context); } function shouldEmitExplicitInitializerForLetDeclaration(node) { var flags = resolver.getNodeCheckFlags(node); var isCapturedInFunction = flags & 131072; var isDeclaredInLoop = flags & 262144; var emittedAsTopLevel = (hierarchyFacts & 64) !== 0 || (isCapturedInFunction && isDeclaredInLoop && (hierarchyFacts & 512) !== 0); var emitExplicitInitializer = !emittedAsTopLevel && (hierarchyFacts & 2048) === 0 && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction && (hierarchyFacts & (1024 | 2048)) === 0)); return emitExplicitInitializer; } function visitVariableDeclarationInLetDeclarationList(node) { var name = node.name; if (ts.isBindingPattern(name)) { return visitVariableDeclaration(node); } if (!node.initializer && shouldEmitExplicitInitializerForLetDeclaration(node)) { var clone_2 = ts.getMutableClone(node); clone_2.initializer = ts.createVoidZero(); return clone_2; } return ts.visitEachChild(node, visitor, context); } function visitVariableDeclaration(node) { var ancestorFacts = enterSubtree(32, 0); var updated; if (ts.isBindingPattern(node.name)) { updated = ts.flattenDestructuringBinding(node, visitor, context, 0, undefined, (ancestorFacts & 32) !== 0); } else { updated = ts.visitEachChild(node, visitor, context); } exitSubtree(ancestorFacts, 0, 0); return updated; } function recordLabel(node) { convertedLoopState.labels.set(ts.idText(node.label), true); } function resetLabel(node) { convertedLoopState.labels.set(ts.idText(node.label), false); } function visitLabeledStatement(node) { if (convertedLoopState && !convertedLoopState.labels) { convertedLoopState.labels = ts.createMap(); } var statement = ts.unwrapInnermostStatementOfLabel(node, convertedLoopState && recordLabel); 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: case 219: return visitDoOrWhileStatement(node, outermostLabeledStatement); case 220: return visitForStatement(node, outermostLabeledStatement); case 221: return visitForInStatement(node, outermostLabeledStatement); 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, 0); return updated; } function visitDoOrWhileStatement(node, outermostLabeledStatement) { return visitIterationStatementWithFacts(0, 256, node, outermostLabeledStatement); } function visitForStatement(node, outermostLabeledStatement) { return visitIterationStatementWithFacts(3008, 1280, node, outermostLabeledStatement); } function visitForInStatement(node, outermostLabeledStatement) { return visitIterationStatementWithFacts(1984, 2304, node, outermostLabeledStatement); } function visitForOfStatement(node, outermostLabeledStatement) { 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) { enableSubstitutionsForBlockScopedBindings(); } var firstOriginalDeclaration = ts.firstOrUndefined(initializer.declarations); if (firstOriginalDeclaration && ts.isBindingPattern(firstOriginalDeclaration.name)) { var declarations = ts.flattenDestructuringBinding(firstOriginalDeclaration, visitor, context, 0, boundValue); var declarationList = ts.setTextRange(ts.createVariableDeclarationList(declarations), node.initializer); ts.setOriginalNode(declarationList, node.initializer); ts.setSourceMapRange(declarationList, ts.createRange(declarations[0].pos, ts.last(declarations).end)); statements.push(ts.createVariableStatement(undefined, declarationList)); } else { 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 { var assignment = ts.createAssignment(initializer, boundValue); if (ts.isDestructuringAssignment(assignment)) { ts.aggregateTransformFlags(assignment); statements.push(ts.createStatement(visitBinaryExpression(assignment, false))); } else { assignment.end = initializer.end; statements.push(ts.setTextRange(ts.createStatement(ts.visitNode(assignment, visitor, ts.isExpression)), ts.moveRangeEnd(initializer, -1))); } } if (convertedLoopBodyStatements) { return createSyntheticBlockForConvertedStatements(ts.addRange(statements, convertedLoopBodyStatements)); } else { var statement = ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock); if (ts.isBlock(statement)) { return ts.updateBlock(statement, ts.setTextRange(ts.createNodeArray(ts.concatenate(statements, statement.statements)), statement.statements)); } else { statements.push(statement); return createSyntheticBlockForConvertedStatements(statements); } } } function createSyntheticBlockForConvertedStatements(statements) { return ts.setEmitFlags(ts.createBlock(ts.createNodeArray(statements), true), 48 | 384); } function convertForOfStatementForArray(node, outermostLabeledStatement, convertedLoopBodyStatements) { var expression = ts.visitNode(node.expression, visitor, ts.isExpression); var counter = ts.createLoopVariable(); 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(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(undefined); var values = ts.createValuesHelper(context, expression, node.expression); var next = ts.createCall(ts.createPropertyAccess(iterator, "next"), undefined, []); hoistVariableDeclaration(errorRecord); hoistVariableDeclaration(returnMethod); 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)), 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)) ])); } function visitObjectLiteralExpression(node) { var properties = node.properties; var numProperties = properties.length; var numInitialProperties = numProperties; var numInitialPropertiesWithoutYield = numProperties; for (var i = 0; i < numProperties; i++) { var property = properties[i]; if ((property.transformFlags & 16777216 && hierarchyFacts & 4) && i < numInitialPropertiesWithoutYield) { numInitialPropertiesWithoutYield = i; } if (property.name.kind === 147) { numInitialProperties = i; break; } } if (numInitialProperties !== numProperties) { if (numInitialPropertiesWithoutYield < numInitialProperties) { numInitialProperties = numInitialPropertiesWithoutYield; } var temp = ts.createTempVariable(hoistVariableDeclaration); var expressions = []; 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); 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) !== 0; } function hoistVariableDeclarationDeclaredInConvertedLoop(state, node) { if (!state.hoistedLocalVariables) { state.hoistedLocalVariables = []; } visit(node.name); function visit(node) { if (node.kind === 71) { state.hoistedLocalVariables.push(node); } else { for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { visit(element.name); } } } } } function convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, convert) { if (!shouldConvertIterationStatementBody(node)) { var saveAllowedNonLabeledJumps = void 0; if (convertedLoopState) { saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; convertedLoopState.allowedNonLabeledJumps = 2 | 4; } var result = convert ? convert(node, outermostLabeledStatement, undefined) : ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement, convertedLoopState && resetLabel); if (convertedLoopState) { convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; } return result; } var functionName = ts.createUniqueName("_loop"); var loopInitializer; switch (node.kind) { case 220: case 221: case 222: var initializer = node.initializer; if (initializer && initializer.kind === 233) { loopInitializer = initializer; } break; } var loopParameters = []; var loopOutParameters = []; 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); } } var outerConvertedLoopState = convertedLoopState; convertedLoopState = { loopOutParameters: loopOutParameters }; if (outerConvertedLoopState) { if (outerConvertedLoopState.argumentsName) { convertedLoopState.argumentsName = outerConvertedLoopState.argumentsName; } if (outerConvertedLoopState.thisName) { convertedLoopState.thisName = outerConvertedLoopState.thisName; } if (outerConvertedLoopState.hoistedLocalVariables) { convertedLoopState.hoistedLocalVariables = outerConvertedLoopState.hoistedLocalVariables; } } startLexicalEnvironment(); var loopBody = ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock); var lexicalEnvironment = endLexicalEnvironment(); var currentState = convertedLoopState; convertedLoopState = outerConvertedLoopState; if (loopOutParameters.length || lexicalEnvironment) { var statements_4 = ts.isBlock(loopBody) ? loopBody.statements.slice() : [loopBody]; if (loopOutParameters.length) { copyOutParameters(loopOutParameters, 1, statements_4); } ts.prependStatements(statements_4, lexicalEnvironment); loopBody = ts.createBlock(statements_4, true); } if (ts.isBlock(loopBody)) { loopBody.multiLine = true; } else { loopBody = ts.createBlock([loopBody], true); } var containsYield = (node.statement.transformFlags & 16777216) !== 0; var isAsyncBlockContainingAwait = containsYield && (hierarchyFacts & 4) !== 0; var loopBodyFlags = 0; if (currentState.containsLexicalThis) { loopBodyFlags |= 8; } if (isAsyncBlockContainingAwait) { loopBodyFlags |= 262144; } 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; if (currentState.argumentsName) { if (outerConvertedLoopState) { outerConvertedLoopState.argumentsName = currentState.argumentsName; } else { (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.argumentsName, undefined, ts.createIdentifier("arguments"))); } } if (currentState.thisName) { if (outerConvertedLoopState) { outerConvertedLoopState.thisName = currentState.thisName; } else { (extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.thisName, undefined, ts.createIdentifier("this"))); } } if (currentState.hoistedLocalVariables) { if (outerConvertedLoopState) { outerConvertedLoopState.hoistedLocalVariables = currentState.hoistedLocalVariables; } else { if (!extraVariableDeclarations) { extraVariableDeclarations = []; } for (var _b = 0, _c = currentState.hoistedLocalVariables; _b < _c.length; _b++) { var identifier = _c[_b]; extraVariableDeclarations.push(ts.createVariableDeclaration(identifier)); } } } if (loopOutParameters.length) { if (!extraVariableDeclarations) { extraVariableDeclarations = []; } for (var _d = 0, loopOutParameters_1 = loopOutParameters; _d < loopOutParameters_1.length; _d++) { var outParam = loopOutParameters_1[_d]; extraVariableDeclarations.push(ts.createVariableDeclaration(outParam.outParamName)); } } if (extraVariableDeclarations) { statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(extraVariableDeclarations))); } var convertedLoopBodyStatements = generateCallToConvertedLoop(functionName, loopParameters, currentState, containsYield); var loop; if (convert) { loop = convert(node, outermostLabeledStatement, convertedLoopBodyStatements); } else { var clone_3 = ts.getMutableClone(node); clone_3.statement = undefined; clone_3 = ts.visitEachChild(clone_3, visitor, context); clone_3.statement = ts.createBlock(convertedLoopBodyStatements, true); clone_3.transformFlags = 0; ts.aggregateTransformFlags(clone_3); loop = ts.restoreEnclosingLabel(clone_3, outermostLabeledStatement, convertedLoopState && resetLabel); } statements.push(loop); return statements; } function copyOutParameter(outParam, copyDirection) { 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++) { var outParam = outParams_1[_i]; statements.push(ts.createStatement(copyOutParameter(outParam, copyDirection))); } } function generateCallToConvertedLoop(loopFunctionExpressionName, parameters, state, isAsyncBlockContainingAwait) { var outerConvertedLoopState = convertedLoopState; var statements = []; var isSimpleLoop = !(state.nonLocalJumps & ~4) && !state.labeledNonLocalBreaks && !state.labeledNonLocalContinues; var call = ts.createCall(loopFunctionExpressionName, undefined, ts.map(parameters, function (p) { return p.name; })); var callResult = isAsyncBlockContainingAwait ? ts.createYield(ts.createToken(39), ts.setEmitFlags(call, 8388608)) : call; if (isSimpleLoop) { statements.push(ts.createStatement(callResult)); copyOutParameters(state.loopOutParameters, 0, statements); } else { var loopResultName = ts.createUniqueName("state"); var stateVariable = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(loopResultName, undefined, callResult)])); statements.push(stateVariable); copyOutParameters(state.loopOutParameters, 0, statements); if (state.nonLocalJumps & 8) { var returnStatement = void 0; if (outerConvertedLoopState) { 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, ts.createLiteral("object")), returnStatement)); } 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, true, loopResultName, outerConvertedLoopState, caseClauses); processLabeledJumps(state.labeledNonLocalContinues, false, loopResultName, outerConvertedLoopState, caseClauses); statements.push(ts.createSwitch(loopResultName, ts.createCaseBlock(caseClauses))); } } return statements; } function setLabeledJump(state, isBreak, labelText, labelMarker) { if (isBreak) { if (!state.labeledNonLocalBreaks) { state.labeledNonLocalBreaks = ts.createMap(); } state.labeledNonLocalBreaks.set(labelText, labelMarker); } else { if (!state.labeledNonLocalContinues) { state.labeledNonLocalContinues = ts.createMap(); } state.labeledNonLocalContinues.set(labelText, labelMarker); } } function processLabeledJumps(table, isBreak, loopResultName, outerLoop, caseClauses) { if (!table) { return; } table.forEach(function (labelMarker, labelText) { var statements = []; if (!outerLoop || (outerLoop.labels && outerLoop.labels.get(labelText))) { var label = ts.createIdentifier(labelText); statements.push(isBreak ? ts.createBreak(label) : ts.createContinue(label)); } else { setLabeledJump(outerLoop, isBreak, labelText, labelMarker); statements.push(ts.createReturn(loopResultName)); } caseClauses.push(ts.createCaseClause(ts.createLiteral(labelMarker), statements)); }); } function processLoopVariableDeclaration(decl, loopParameters, loopOutParameters) { var name = decl.name; if (ts.isBindingPattern(name)) { for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { processLoopVariableDeclaration(element, loopParameters, loopOutParameters); } } } else { 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 }); } } } 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: case 157: var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property === accessors.firstAccessor) { expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine)); } break; case 154: expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine)); break; case 270: expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine)); break; case 271: expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine)); break; default: ts.Debug.failBadSyntaxKind(node); break; } } } 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); if (startsOnNewLine) { ts.startOnNewLine(expression); } return expression; } 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); if (startsOnNewLine) { ts.startOnNewLine(expression); } return expression; } function transformObjectLiteralMethodDeclarationToExpression(method, receiver, container, startsOnNewLine) { 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, hierarchyFacts & 49152 ? 16384 : 0); return expression; } function visitCatchClause(node) { 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(undefined); var newVariableDeclaration = ts.createVariableDeclaration(temp); ts.setTextRange(newVariableDeclaration, node.variableDeclaration); var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0, temp); var list = ts.createVariableDeclarationList(vars); ts.setTextRange(list, node.variableDeclaration); 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, 0); return updated; } function addStatementToStartOfBlock(block, statement) { var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement); return ts.updateBlock(block, [statement].concat(transformedStatements)); } function visitMethodDeclaration(node) { ts.Debug.assert(!ts.isComputedPropertyName(node.name)); 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); } function visitAccessorDeclaration(node) { ts.Debug.assert(!ts.isComputedPropertyName(node.name)); var savedConvertedLoopState = convertedLoopState; convertedLoopState = undefined; var ancestorFacts = enterSubtree(16286, 65); var updated; var parameters = ts.visitParameterList(node.parameters, visitor, context); var body = node.transformFlags & (32768 | 128) ? transformFunctionBody(node) : visitFunctionBodyDownLevel(node); 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, 0); convertedLoopState = savedConvertedLoopState; return updated; } function visitShorthandPropertyAssignment(node) { return ts.setTextRange(ts.createPropertyAssignment(node.name, ts.getSynthesizedClone(node.name)), node); } function visitComputedPropertyName(node) { var ancestorFacts = enterSubtree(0, 8192); var updated = ts.visitEachChild(node, visitor, context); exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 32768 : 0); return updated; } function visitYieldExpression(node) { return ts.visitEachChild(node, visitor, context); } function visitArrayLiteralExpression(node) { if (node.transformFlags & 64) { return transformAndSpreadElements(node.elements, true, !!node.multiLine, !!node.elements.hasTrailingComma); } return ts.visitEachChild(node, visitor, context); } function visitCallExpression(node) { if (ts.getEmitFlags(node) & 33554432) { return visitTypeScriptClassWrapper(node); } if (node.transformFlags & 64) { return visitCallExpressionWithPotentialCapturedThisAssignment(node, true); } return ts.updateCall(node, ts.visitNode(node.expression, callExpressionVisitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression)); } function visitTypeScriptClassWrapper(node) { var body = ts.cast(ts.cast(ts.skipOuterExpressions(node.expression), ts.isArrowFunction).body, ts.isBlock); 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); var variable = varStatement.declarationList.declarations[0]; var initializer = ts.skipOuterExpressions(variable.initializer); var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression); 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; var classBodyStart = 0; var classBodyEnd = -1; var statements = []; if (aliasAssignment) { var extendsCall = ts.tryCast(funcStatements[classBodyStart], ts.isExpressionStatement); if (extendsCall) { statements.push(extendsCall); classBodyStart++; } statements.push(funcStatements[classBodyStart]); classBodyStart++; statements.push(ts.createStatement(ts.createAssignment(aliasAssignment.left, ts.cast(variable.name, ts.isIdentifier)))); } while (!ts.isReturnStatement(ts.elementAt(funcStatements, classBodyEnd))) { classBodyEnd--; } ts.addRange(statements, funcStatements, classBodyStart, classBodyEnd); if (classBodyEnd < -1) { ts.addRange(statements, funcStatements, classBodyEnd + 1); } ts.addRange(statements, remainingStatements); 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, false); } function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) { 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) { ts.setEmitFlags(thisArg, 4); } var resultingCall = void 0; 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 { 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) { var actualThis = ts.createThis(); ts.setEmitFlags(actualThis, 4); var initializer = ts.createLogicalOr(resultingCall, actualThis); resultingCall = assignToCapturedThis ? ts.createAssignment(ts.createFileLevelUniqueName("_this"), initializer) : initializer; } return ts.setOriginalNode(resultingCall, node); } return ts.visitEachChild(node, visitor, context); } function visitNewExpression(node) { 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)), false, false, false)), undefined, []); } return ts.visitEachChild(node, visitor, context); } function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) { var numElements = elements.length; var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) { return visitPartition(partition, multiLine, hasTrailingComma && end === numElements); })); if (compilerOptions.downlevelIteration) { if (segments.length === 1) { var firstSegment = segments[0]; if (ts.isCallExpression(firstSegment) && ts.isIdentifier(firstSegment.expression) && (ts.getEmitFlags(firstSegment.expression) & 4096) && firstSegment.expression.escapedText === "___spread") { return segments[0]; } } return ts.createSpreadHelper(context, segments); } else { if (segments.length === 1) { var firstElement = elements[0]; return needsUniqueCopy && ts.isSpreadElement(firstElement) && firstElement.expression.kind !== 183 ? ts.createArraySlice(segments[0]) : segments[0]; } return ts.createArrayConcat(segments.shift(), segments); } } function partitionSpread(node) { return ts.isSpreadElement(node) ? visitSpanOfSpreads : visitSpanOfNonSpreads; } function visitSpanOfSpreads(chunk) { return ts.map(chunk, visitExpressionOfSpread); } function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) { return ts.createArrayLiteral(ts.visitNodes(ts.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine); } function visitSpreadElement(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } function visitExpressionOfSpread(node) { return ts.visitNode(node.expression, visitor, ts.isExpression); } function visitTemplateLiteral(node) { return ts.setTextRange(ts.createLiteral(node.text), node); } function visitStringLiteral(node) { if (node.hasExtendedUnicodeEscape) { return ts.setTextRange(ts.createLiteral(node.text), node); } return node; } function visitNumericLiteral(node) { if (node.numericLiteralFlags & 384) { return ts.setTextRange(ts.createNumericLiteral(node.text), node); } return node; } function visitTaggedTemplateExpression(node) { var tag = ts.visitNode(node.tag, visitor, ts.isExpression); var templateArguments = [undefined]; var cookedStrings = []; var rawStrings = []; var template = node.template; if (ts.isNoSubstitutionTemplateLiteral(template)) { cookedStrings.push(ts.createLiteral(template.text)); rawStrings.push(getRawLiteral(template)); } else { cookedStrings.push(ts.createLiteral(template.head.text)); rawStrings.push(getRawLiteral(template.head)); for (var _i = 0, _a = template.templateSpans; _i < _a.length; _i++) { var templateSpan = _a[_i]; cookedStrings.push(ts.createLiteral(templateSpan.literal.text)); rawStrings.push(getRawLiteral(templateSpan.literal)); templateArguments.push(ts.visitNode(templateSpan.expression, visitor, ts.isExpression)); } } var helperCall = createTemplateObjectHelper(context, ts.createArrayLiteral(cookedStrings), ts.createArrayLiteral(rawStrings)); if (ts.isExternalModule(currentSourceFile)) { var tempVar = ts.createUniqueName("templateObject"); recordTaggedTemplateString(tempVar); templateArguments[0] = ts.createLogicalOr(tempVar, ts.createAssignment(tempVar, helperCall)); } else { templateArguments[0] = helperCall; } return ts.createCall(tag, undefined, templateArguments); } function getRawLiteral(node) { var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node); var isLast = node.kind === 13 || node.kind === 16; text = text.substring(1, text.length - (isLast ? 1 : 2)); text = text.replace(/\r\n?/g, "\n"); return ts.setTextRange(ts.createLiteral(text), node); } function visitTemplateExpression(node) { var expressions = []; addTemplateHead(expressions, node); addTemplateSpans(expressions, node); var expression = ts.reduceLeft(expressions, ts.createAdd); if (ts.nodeIsSynthesized(expression)) { expression.pos = node.pos; expression.end = node.end; } return expression; } function shouldAddTemplateHead(node) { ts.Debug.assert(node.templateSpans.length !== 0); return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0; } function addTemplateHead(expressions, node) { if (!shouldAddTemplateHead(node)) { return; } expressions.push(ts.createLiteral(node.head.text)); } 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)); if (span.literal.text.length !== 0) { expressions.push(ts.createLiteral(span.literal.text)); } } } function visitSuperKeyword(isExpressionOfCall) { return hierarchyFacts & 8 && !isExpressionOfCall ? ts.createPropertyAccess(ts.createFileLevelUniqueName("_super"), "prototype") : ts.createFileLevelUniqueName("_super"); } function visitMetaProperty(node) { if (node.keywordToken === 94 && node.name.escapedText === "target") { if (hierarchyFacts & 8192) { hierarchyFacts |= 32768; } else { hierarchyFacts |= 16384; } return ts.createFileLevelUniqueName("_newTarget"); } return node; } function onEmitNode(hint, node, emitCallback) { if (enabledSubstitutions & 1 && ts.isFunctionLike(node)) { var ancestorFacts = enterSubtree(16286, ts.getEmitFlags(node) & 8 ? 65 | 16 : 65); previousOnEmitNode(hint, node, emitCallback); exitSubtree(ancestorFacts, 0, 0); return; } previousOnEmitNode(hint, node, emitCallback); } function enableSubstitutionsForBlockScopedBindings() { if ((enabledSubstitutions & 2) === 0) { enabledSubstitutions |= 2; context.enableSubstitution(71); } } function enableSubstitutionsForCapturedThis() { 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); } } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (hint === 1) { return substituteExpression(node); } if (ts.isIdentifier(node)) { return substituteIdentifier(node); } return node; } function substituteIdentifier(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); } } return node; } function isNameOfDeclarationWithCollidingName(node) { switch (node.parent.kind) { case 182: case 235: case 238: case 232: return node.parent.name === node && resolver.isDeclarationWithCollidingName(node.parent); } return false; } function substituteExpression(node) { switch (node.kind) { case 71: return substituteExpressionIdentifier(node); case 99: return substituteThisKeyword(node); } return node; } function substituteExpressionIdentifier(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); } } return node; } function isPartOfClassBody(declaration, node) { var currentNode = ts.getParseTreeNode(node); if (!currentNode || currentNode === declaration || currentNode.end <= declaration.pos || currentNode.pos >= declaration.end) { return false; } var blockScope = ts.getEnclosingBlockScopeContainer(declaration); while (currentNode) { if (currentNode === blockScope || currentNode === declaration) { return false; } if (ts.isClassElement(currentNode) && currentNode.parent === declaration) { return true; } currentNode = currentNode.parent; } return false; } function substituteThisKeyword(node) { if (enabledSubstitutions & 1 && hierarchyFacts & 16) { return ts.setTextRange(ts.createFileLevelUniqueName("_this"), node); } return node; } function getClassMemberPrefix(node, member) { return ts.hasModifier(member, 32) ? ts.getInternalName(node) : ts.createPropertyAccess(ts.getInternalName(node), "prototype"); } function hasSynthesizedDefaultSuperCall(constructor, hasExtendsClause) { if (!constructor || !hasExtendsClause) { return false; } if (ts.some(constructor.parameters)) { return false; } var statement = ts.firstOrUndefined(constructor.body.statements); if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 216) { return false; } var statementExpression = statement.expression; if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 187) { return false; } var callTarget = statementExpression.expression; if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 97) { return false; } var callArgument = ts.singleOrUndefined(statementExpression.arguments); if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 204) { return false; } var expression = callArgument.expression; return ts.isIdentifier(expression) && expression.escapedText === "arguments"; } } ts.transformES2015 = transformES2015; function createExtendsHelper(context, name) { context.requestEmitHelper(extendsHelper); 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"), undefined, [ cooked, raw ]); } var extendsHelper = { name: "typescript:extends", scoped: false, priority: 0, text: "\n var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n })();" }; var templateObjectHelper = { name: "typescript:makeTemplateObject", scoped: false, priority: 0, 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 = {})); var ts; (function (ts) { function transformES5(context) { var compilerOptions = context.getCompilerOptions(); var previousOnEmitNode; var noSubstitution; if (compilerOptions.jsx === 1 || compilerOptions.jsx === 3) { previousOnEmitNode = context.onEmitNode; context.onEmitNode = onEmitNode; context.enableEmitNotification(257); context.enableEmitNotification(258); context.enableEmitNotification(256); noSubstitution = []; } var previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; context.enableSubstitution(185); context.enableSubstitution(270); return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { return node; } function onEmitNode(hint, node, emitCallback) { switch (node.kind) { case 257: case 258: case 256: var tagName = node.tagName; noSubstitution[ts.getOriginalNodeId(tagName)] = true; break; } previousOnEmitNode(hint, node, emitCallback); } function onSubstituteNode(hint, node) { if (node.id && noSubstitution && noSubstitution[node.id]) { return previousOnSubstituteNode(hint, node); } node = previousOnSubstituteNode(hint, node); if (ts.isPropertyAccessExpression(node)) { return substitutePropertyAccessExpression(node); } else if (ts.isPropertyAssignment(node)) { return substitutePropertyAssignment(node); } return node; } function substitutePropertyAccessExpression(node) { var literalName = trySubstituteReservedName(node.name); if (literalName) { return ts.setTextRange(ts.createElementAccess(node.expression, literalName), node); } return node; } function substitutePropertyAssignment(node) { var literalName = ts.isIdentifier(node.name) && trySubstituteReservedName(node.name); if (literalName) { return ts.updatePropertyAssignment(node, literalName, node.initializer); } return node; } function trySubstituteReservedName(name) { var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined); if (token !== undefined && token >= 72 && token <= 107) { return ts.setTextRange(ts.createLiteral(name), name); } return undefined; } } ts.transformES5 = transformES5; })(ts || (ts = {})); 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"; })(OpCode || (OpCode = {})); var BlockAction; (function (BlockAction) { BlockAction[BlockAction["Open"] = 0] = "Open"; BlockAction[BlockAction["Close"] = 1] = "Close"; })(BlockAction || (BlockAction = {})); 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 = {})); 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 = {})); 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"; case 3: return "break"; case 4: return "yield"; case 5: return "yield*"; case 7: return "endfinally"; default: return undefined; } } function transformGenerators(context) { var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistFunctionDeclaration = context.hoistFunctionDeclaration, hoistVariableDeclaration = context.hoistVariableDeclaration; var compilerOptions = context.getCompilerOptions(); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var resolver = context.getEmitResolver(); var previousOnSubstituteNode = context.onSubstituteNode; context.onSubstituteNode = onSubstituteNode; var renamedCatchVariables; var renamedCatchVariableDeclarations; var inGeneratorFunctionBody; var inStatementContainingYield; 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; 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) === 0) { return node; } var visited = ts.visitEachChild(node, visitor, context); ts.addEmitHelpers(visited, context.readEmitHelpers()); return visited; } function visitor(node) { var transformFlags = node.transformFlags; if (inStatementContainingYield) { return visitJavaScriptInStatementContainingYield(node); } else if (inGeneratorFunctionBody) { return visitJavaScriptInGeneratorFunctionBody(node); } else if (transformFlags & 256) { return visitGenerator(node); } else if (transformFlags & 512) { return ts.visitEachChild(node, visitor, context); } else { return node; } } function visitJavaScriptInStatementContainingYield(node) { switch (node.kind) { case 218: return visitDoStatement(node); case 219: return visitWhileStatement(node); case 227: return visitSwitchStatement(node); case 228: return visitLabeledStatement(node); default: return visitJavaScriptInGeneratorFunctionBody(node); } } function visitJavaScriptInGeneratorFunctionBody(node) { switch (node.kind) { case 234: return visitFunctionDeclaration(node); case 192: return visitFunctionExpression(node); case 156: case 157: return visitAccessorDeclaration(node); case 214: return visitVariableStatement(node); case 220: return visitForStatement(node); case 221: return visitForInStatement(node); case 224: return visitBreakStatement(node); case 223: return visitContinueStatement(node); case 225: return visitReturnStatement(node); default: if (node.transformFlags & 16777216) { return visitJavaScriptContainingYield(node); } else if (node.transformFlags & (512 | 33554432)) { return ts.visitEachChild(node, visitor, context); } else { return node; } } } function visitJavaScriptContainingYield(node) { switch (node.kind) { case 200: return visitBinaryExpression(node); case 201: return visitConditionalExpression(node); case 203: return visitYieldExpression(node); case 183: return visitArrayLiteralExpression(node); case 184: return visitObjectLiteralExpression(node); case 186: return visitElementAccessExpression(node); case 187: return visitCallExpression(node); case 188: return visitNewExpression(node); default: return ts.visitEachChild(node, visitor, context); } } function visitGenerator(node) { switch (node.kind) { case 234: return visitFunctionDeclaration(node); case 192: return visitFunctionExpression(node); default: return ts.Debug.failBadSyntaxKind(node); } } function visitFunctionDeclaration(node) { if (node.asteriskToken) { 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; var savedInStatementContainingYield = inStatementContainingYield; inGeneratorFunctionBody = false; inStatementContainingYield = false; node = ts.visitEachChild(node, visitor, context); inGeneratorFunctionBody = savedInGeneratorFunctionBody; inStatementContainingYield = savedInStatementContainingYield; } if (inGeneratorFunctionBody) { hoistFunctionDeclaration(node); return undefined; } else { return node; } } function visitFunctionExpression(node) { if (node.asteriskToken) { 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; var savedInStatementContainingYield = inStatementContainingYield; inGeneratorFunctionBody = false; inStatementContainingYield = false; node = ts.visitEachChild(node, visitor, context); inGeneratorFunctionBody = savedInGeneratorFunctionBody; inStatementContainingYield = savedInStatementContainingYield; } return node; } function visitAccessorDeclaration(node) { var savedInGeneratorFunctionBody = inGeneratorFunctionBody; var savedInStatementContainingYield = inStatementContainingYield; inGeneratorFunctionBody = false; inStatementContainingYield = false; node = ts.visitEachChild(node, visitor, context); inGeneratorFunctionBody = savedInGeneratorFunctionBody; inStatementContainingYield = savedInStatementContainingYield; return node; } function transformGeneratorFunctionBody(body) { var statements = []; var savedInGeneratorFunctionBody = inGeneratorFunctionBody; var savedInStatementContainingYield = inStatementContainingYield; var savedBlocks = blocks; var savedBlockOffsets = blockOffsets; var savedBlockActions = blockActions; var savedBlockStack = blockStack; var savedLabelOffsets = labelOffsets; var savedLabelExpressions = labelExpressions; var savedNextLabelId = nextLabelId; var savedOperations = operations; var savedOperationArguments = operationArguments; var savedOperationLocations = operationLocations; var savedState = state; inGeneratorFunctionBody = true; inStatementContainingYield = false; blocks = undefined; blockOffsets = undefined; blockActions = undefined; blockStack = undefined; labelOffsets = undefined; labelExpressions = undefined; nextLabelId = 1; operations = undefined; operationArguments = undefined; operationLocations = undefined; state = ts.createTempVariable(undefined); resumeLexicalEnvironment(); 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)); inGeneratorFunctionBody = savedInGeneratorFunctionBody; inStatementContainingYield = savedInStatementContainingYield; blocks = savedBlocks; blockOffsets = savedBlockOffsets; blockActions = savedBlockActions; blockStack = savedBlockStack; labelOffsets = savedLabelOffsets; labelExpressions = savedLabelExpressions; nextLabelId = savedNextLabelId; operations = savedOperations; operationArguments = savedOperationArguments; operationLocations = savedOperationLocations; state = savedState; return ts.setTextRange(ts.createBlock(statements, body.multiLine), body); } function visitVariableStatement(node) { if (node.transformFlags & 16777216) { transformAndEmitVariableDeclarationList(node.declarationList); return undefined; } else { if (ts.getEmitFlags(node) & 1048576) { return node; } for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var variable = _a[_i]; hoistVariableDeclaration(variable.name); } var variables = ts.getInitializedVariables(node.declarationList); if (variables.length === 0) { return undefined; } return ts.setSourceMapRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node); } } function visitBinaryExpression(node) { var assoc = ts.getExpressionAssociativity(node); switch (assoc) { case 0: return visitLeftAssociativeBinaryExpression(node); case 1: return visitRightAssociativeBinaryExpression(node); default: return ts.Debug.assertNever(assoc); } } function isCompoundAssignment(kind) { return kind >= 59 && kind <= 70; } function getOperatorForCompoundAssignment(kind) { switch (kind) { 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; } } function visitRightAssociativeBinaryExpression(node) { var left = node.left, right = node.right; if (containsYield(right)) { var target = void 0; switch (left.kind) { case 185: target = ts.updatePropertyAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name); break; case 186: target = ts.updateElementAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), cacheExpression(ts.visitNode(left.argumentExpression, visitor, ts.isExpression))); break; default: target = ts.visitNode(left, visitor, ts.isExpression); break; } var operator = node.operatorToken.kind; if (isCompoundAssignment(operator)) { return ts.setTextRange(ts.createAssignment(target, ts.setTextRange(ts.createBinary(cacheExpression(target), getOperatorForCompoundAssignment(operator), ts.visitNode(right, visitor, ts.isExpression)), node)), node); } else { return ts.updateBinary(node, target, ts.visitNode(right, visitor, ts.isExpression)); } } return ts.visitEachChild(node, visitor, context); } function visitLeftAssociativeBinaryExpression(node) { if (containsYield(node.right)) { if (ts.isLogicalOperator(node.operatorToken.kind)) { return visitLogicalBinaryExpression(node); } else if (node.operatorToken.kind === 26) { return visitCommaExpression(node); } var clone_4 = ts.getMutableClone(node); clone_4.left = cacheExpression(ts.visitNode(node.left, visitor, ts.isExpression)); clone_4.right = ts.visitNode(node.right, visitor, ts.isExpression); return clone_4; } return ts.visitEachChild(node, visitor, context); } function visitLogicalBinaryExpression(node) { var resultLabel = defineLabel(); var resultLocal = declareLocal(); emitAssignment(resultLocal, ts.visitNode(node.left, visitor, ts.isExpression), node.left); if (node.operatorToken.kind === 53) { emitBreakWhenFalse(resultLabel, resultLocal, node.left); } else { emitBreakWhenTrue(resultLabel, resultLocal, node.left); } emitAssignment(resultLocal, ts.visitNode(node.right, visitor, ts.isExpression), node.right); markLabel(resultLabel); return resultLocal; } function visitCommaExpression(node) { var pendingExpressions = []; visit(node.left); visit(node.right); return ts.inlineExpressions(pendingExpressions); function visit(node) { if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) { visit(node.left); visit(node.right); } else { if (containsYield(node) && pendingExpressions.length > 0) { emitWorker(1, [ts.createStatement(ts.inlineExpressions(pendingExpressions))]); pendingExpressions = []; } pendingExpressions.push(ts.visitNode(node, visitor, ts.isExpression)); } } } function visitConditionalExpression(node) { 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), 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), node.whenFalse); markLabel(resultLabel); return resultLocal; } return ts.visitEachChild(node, visitor, context); } function visitYieldExpression(node) { var resumeLabel = defineLabel(); var expression = ts.visitNode(node.expression, visitor, ts.isExpression); if (node.asteriskToken) { var iterator = (ts.getEmitFlags(node.expression) & 8388608) === 0 ? ts.createValuesHelper(context, expression, node) : expression; emitYieldStar(iterator, node); } else { emitYield(expression, node); } markLabel(resumeLabel); return createGeneratorResume(node); } function visitArrayLiteralExpression(node) { return visitElements(node.elements, undefined, undefined, node.multiLine); } function visitElements(elements, leadingElement, location, multiLine) { var numInitialElements = countInitialNodesWithoutYield(elements); var temp; if (numInitialElements > 0) { temp = declareLocal(); var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements); emitAssignment(temp, ts.createArrayLiteral(leadingElement ? [leadingElement].concat(initialElements) : initialElements)); leadingElement = undefined; } var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements); return temp ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, multiLine)]) : ts.setTextRange(ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions, multiLine), location); function reduceElement(expressions, element) { if (containsYield(element) && expressions.length > 0) { var hasAssignedTemp = temp !== undefined; if (!temp) { temp = declareLocal(); } emitAssignment(temp, hasAssignedTemp ? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, multiLine)]) : ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions, multiLine)); leadingElement = undefined; expressions = []; } expressions.push(ts.visitNode(element, visitor, ts.isExpression)); return expressions; } } function visitObjectLiteralExpression(node) { var properties = node.properties; var multiLine = node.multiLine; var numInitialProperties = countInitialNodesWithoutYield(properties); var temp = declareLocal(); emitAssignment(temp, ts.createObjectLiteral(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), multiLine)); var expressions = ts.reduceLeft(properties, reduceProperty, [], numInitialProperties); expressions.push(multiLine ? ts.startOnNewLine(ts.getMutableClone(temp)) : temp); return ts.inlineExpressions(expressions); function reduceProperty(expressions, property) { if (containsYield(property) && expressions.length > 0) { emitStatement(ts.createStatement(ts.inlineExpressions(expressions))); expressions = []; } var expression = ts.createExpressionForObjectLiteralElementLike(node, property, temp); var visited = ts.visitNode(expression, visitor, ts.isExpression); if (visited) { if (multiLine) { ts.startOnNewLine(visited); } expressions.push(visited); } return expressions; } } function visitElementAccessExpression(node) { if (containsYield(node.argumentExpression)) { var clone_5 = ts.getMutableClone(node); clone_5.expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression)); clone_5.argumentExpression = ts.visitNode(node.argumentExpression, visitor, ts.isExpression); return clone_5; } return ts.visitEachChild(node, visitor, context); } function visitCallExpression(node) { if (!ts.isImportCall(node) && ts.forEach(node.arguments, containsYield)) { 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)) { 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, ts.createVoidZero())), undefined, []), node), node); } return ts.visitEachChild(node, visitor, context); } function transformAndEmitStatements(statements, start) { if (start === void 0) { start = 0; } var numStatements = statements.length; for (var i = start; i < numStatements; i++) { transformAndEmitStatement(statements[i]); } } function transformAndEmitEmbeddedStatement(node) { if (ts.isBlock(node)) { transformAndEmitStatements(node.statements); } else { transformAndEmitStatement(node); } } function transformAndEmitStatement(node) { var savedInStatementContainingYield = inStatementContainingYield; if (!inStatementContainingYield) { inStatementContainingYield = containsYield(node); } transformAndEmitStatementWorker(node); inStatementContainingYield = savedInStatementContainingYield; } function transformAndEmitStatementWorker(node) { switch (node.kind) { case 213: return transformAndEmitBlock(node); case 216: return transformAndEmitExpressionStatement(node); case 217: return transformAndEmitIfStatement(node); case 218: return transformAndEmitDoStatement(node); case 219: return transformAndEmitWhileStatement(node); case 220: return transformAndEmitForStatement(node); case 221: return transformAndEmitForInStatement(node); case 223: return transformAndEmitContinueStatement(node); case 224: return transformAndEmitBreakStatement(node); case 225: return transformAndEmitReturnStatement(node); case 226: return transformAndEmitWithStatement(node); case 227: return transformAndEmitSwitchStatement(node); case 228: return transformAndEmitLabeledStatement(node); case 229: return transformAndEmitThrowStatement(node); case 230: return transformAndEmitTryStatement(node); default: return emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function transformAndEmitBlock(node) { if (containsYield(node)) { transformAndEmitStatements(node.statements); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function transformAndEmitExpressionStatement(node) { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } function transformAndEmitVariableDeclarationList(node) { for (var _i = 0, _a = node.declarations; _i < _a.length; _i++) { var variable = _a[_i]; var name = ts.getSynthesizedClone(variable.name); ts.setCommentRange(name, variable.name); hoistVariableDeclaration(name); } var variables = ts.getInitializedVariables(node); var numVariables = variables.length; var variablesWritten = 0; var pendingExpressions = []; while (variablesWritten < numVariables) { for (var i = variablesWritten; i < numVariables; i++) { var variable = variables[i]; if (containsYield(variable.initializer) && pendingExpressions.length > 0) { break; } pendingExpressions.push(transformInitializedVariable(variable)); } if (pendingExpressions.length) { emitStatement(ts.createStatement(ts.inlineExpressions(pendingExpressions))); variablesWritten += pendingExpressions.length; pendingExpressions = []; } } return undefined; } function transformInitializedVariable(node) { return ts.setSourceMapRange(ts.createAssignment(ts.setSourceMapRange(ts.getSynthesizedClone(node.name), node.name), ts.visitNode(node.initializer, visitor, ts.isExpression)), node); } function transformAndEmitIfStatement(node) { if (containsYield(node)) { 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), node.expression); transformAndEmitEmbeddedStatement(node.thenStatement); if (node.elseStatement) { emitBreak(endLabel); markLabel(elseLabel); transformAndEmitEmbeddedStatement(node.elseStatement); } markLabel(endLabel); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function transformAndEmitDoStatement(node) { if (containsYield(node)) { var conditionLabel = defineLabel(); var loopLabel = defineLabel(); beginLoopBlock(conditionLabel); markLabel(loopLabel); transformAndEmitEmbeddedStatement(node.statement); markLabel(conditionLabel); emitBreakWhenTrue(loopLabel, ts.visitNode(node.expression, visitor, ts.isExpression)); endLoopBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitDoStatement(node) { if (inStatementContainingYield) { beginScriptLoopBlock(); node = ts.visitEachChild(node, visitor, context); endLoopBlock(); return node; } else { return ts.visitEachChild(node, visitor, context); } } function transformAndEmitWhileStatement(node) { if (containsYield(node)) { var loopLabel = defineLabel(); var endLabel = beginLoopBlock(loopLabel); markLabel(loopLabel); emitBreakWhenFalse(endLabel, ts.visitNode(node.expression, visitor, ts.isExpression)); transformAndEmitEmbeddedStatement(node.statement); emitBreak(loopLabel); endLoopBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitWhileStatement(node) { if (inStatementContainingYield) { beginScriptLoopBlock(); node = ts.visitEachChild(node, visitor, context); endLoopBlock(); return node; } else { return ts.visitEachChild(node, visitor, context); } } function transformAndEmitForStatement(node) { if (containsYield(node)) { var conditionLabel = defineLabel(); var incrementLabel = defineLabel(); var endLabel = beginLoopBlock(incrementLabel); if (node.initializer) { var initializer = node.initializer; if (ts.isVariableDeclarationList(initializer)) { transformAndEmitVariableDeclarationList(initializer); } else { emitStatement(ts.setTextRange(ts.createStatement(ts.visitNode(initializer, visitor, ts.isExpression)), initializer)); } } markLabel(conditionLabel); if (node.condition) { emitBreakWhenFalse(endLabel, ts.visitNode(node.condition, visitor, ts.isExpression)); } transformAndEmitEmbeddedStatement(node.statement); markLabel(incrementLabel); if (node.incrementor) { emitStatement(ts.setTextRange(ts.createStatement(ts.visitNode(node.incrementor, visitor, ts.isExpression)), node.incrementor)); } emitBreak(conditionLabel); endLoopBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitForStatement(node) { if (inStatementContainingYield) { beginScriptLoopBlock(); } var initializer = node.initializer; if (initializer && ts.isVariableDeclarationList(initializer)) { for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) { var variable = _a[_i]; hoistVariableDeclaration(variable.name); } var variables = ts.getInitializedVariables(initializer); node = ts.updateFor(node, variables.length > 0 ? ts.inlineExpressions(ts.map(variables, transformInitializedVariable)) : undefined, ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); } else { node = ts.visitEachChild(node, visitor, context); } if (inStatementContainingYield) { endLoopBlock(); } return node; } function transformAndEmitForInStatement(node) { if (containsYield(node)) { 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"), undefined, [key])))); emitAssignment(keysIndex, ts.createLiteral(0)); var conditionLabel = defineLabel(); var incrementLabel = defineLabel(); var endLabel = beginLoopBlock(incrementLabel); markLabel(conditionLabel); emitBreakWhenFalse(endLabel, ts.createLessThan(keysIndex, ts.createPropertyAccess(keysArray, "length"))); var variable = void 0; if (ts.isVariableDeclarationList(initializer)) { for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) { var variable_1 = _a[_i]; hoistVariableDeclaration(variable_1.name); } variable = ts.getSynthesizedClone(initializer.declarations[0].name); } else { variable = ts.visitNode(initializer, visitor, ts.isExpression); ts.Debug.assert(ts.isLeftHandSideExpression(variable)); } emitAssignment(variable, ts.createElementAccess(keysArray, keysIndex)); transformAndEmitEmbeddedStatement(node.statement); markLabel(incrementLabel); emitStatement(ts.createStatement(ts.createPostfixIncrement(keysIndex))); emitBreak(conditionLabel); endLoopBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitForInStatement(node) { if (inStatementContainingYield) { beginScriptLoopBlock(); } var initializer = node.initializer; if (ts.isVariableDeclarationList(initializer)) { for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) { var variable = _a[_i]; hoistVariableDeclaration(variable.name); } node = ts.updateForIn(node, initializer.declarations[0].name, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock)); } else { node = ts.visitEachChild(node, visitor, context); } if (inStatementContainingYield) { endLoopBlock(); } return node; } function transformAndEmitContinueStatement(node) { var label = findContinueTarget(node.label ? ts.idText(node.label) : undefined); if (label > 0) { emitBreak(label, node); } else { emitStatement(node); } } function visitContinueStatement(node) { if (inStatementContainingYield) { var label = findContinueTarget(node.label && ts.idText(node.label)); if (label > 0) { return createInlineBreak(label, node); } } return ts.visitEachChild(node, visitor, context); } function transformAndEmitBreakStatement(node) { var label = findBreakTarget(node.label ? ts.idText(node.label) : undefined); if (label > 0) { emitBreak(label, node); } else { emitStatement(node); } } function visitBreakStatement(node) { if (inStatementContainingYield) { var label = findBreakTarget(node.label && ts.idText(node.label)); if (label > 0) { return createInlineBreak(label, node); } } return ts.visitEachChild(node, visitor, context); } function transformAndEmitReturnStatement(node) { emitReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function visitReturnStatement(node) { return createInlineReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function transformAndEmitWithStatement(node) { if (containsYield(node)) { beginWithBlock(cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression))); transformAndEmitEmbeddedStatement(node.statement); endWithBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function transformAndEmitSwitchStatement(node) { if (containsYield(node.caseBlock)) { var caseBlock = node.caseBlock; var numClauses = caseBlock.clauses.length; var endLabel = beginSwitchBlock(); var expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression)); var clauseLabels = []; var defaultClauseIndex = -1; for (var i = 0; i < numClauses; i++) { var clause = caseBlock.clauses[i]; clauseLabels.push(defineLabel()); if (clause.kind === 267 && defaultClauseIndex === -1) { defaultClauseIndex = i; } } 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) { if (containsYield(clause.expression) && pendingClauses.length > 0) { break; } pendingClauses.push(ts.createCaseClause(ts.visitNode(clause.expression, visitor, ts.isExpression), [ createInlineBreak(clauseLabels[i], clause.expression) ])); } else { defaultClausesSkipped++; } } if (pendingClauses.length) { emitStatement(ts.createSwitch(expression, ts.createCaseBlock(pendingClauses))); clausesWritten += pendingClauses.length; pendingClauses = []; } if (defaultClausesSkipped > 0) { clausesWritten += defaultClausesSkipped; defaultClausesSkipped = 0; } } if (defaultClauseIndex >= 0) { emitBreak(clauseLabels[defaultClauseIndex]); } else { emitBreak(endLabel); } for (var i = 0; i < numClauses; i++) { markLabel(clauseLabels[i]); transformAndEmitStatements(caseBlock.clauses[i].statements); } endSwitchBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitSwitchStatement(node) { if (inStatementContainingYield) { beginScriptSwitchBlock(); } node = ts.visitEachChild(node, visitor, context); if (inStatementContainingYield) { endSwitchBlock(); } return node; } function transformAndEmitLabeledStatement(node) { if (containsYield(node)) { beginLabeledBlock(ts.idText(node.label)); transformAndEmitEmbeddedStatement(node.statement); endLabeledBlock(); } else { emitStatement(ts.visitNode(node, visitor, ts.isStatement)); } } function visitLabeledStatement(node) { if (inStatementContainingYield) { beginScriptLabeledBlock(ts.idText(node.label)); } node = ts.visitEachChild(node, visitor, context); if (inStatementContainingYield) { endLabeledBlock(); } return node; } function transformAndEmitThrowStatement(node) { emitThrow(ts.visitNode(node.expression, visitor, ts.isExpression), node); } function transformAndEmitTryStatement(node) { if (containsYield(node)) { beginExceptionBlock(); transformAndEmitEmbeddedStatement(node.tryBlock); if (node.catchClause) { beginCatchBlock(node.catchClause.variableDeclaration); transformAndEmitEmbeddedStatement(node.catchClause.block); } if (node.finallyBlock) { beginFinallyBlock(); transformAndEmitEmbeddedStatement(node.finallyBlock); } endExceptionBlock(); } else { emitStatement(ts.visitEachChild(node, visitor, context)); } } function containsYield(node) { return !!node && (node.transformFlags & 16777216) !== 0; } function countInitialNodesWithoutYield(nodes) { var numNodes = nodes.length; for (var i = 0; i < numNodes; i++) { if (containsYield(nodes[i])) { return i; } } return -1; } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (hint === 1) { return substituteExpression(node); } return node; } function substituteExpression(node) { if (ts.isIdentifier(node)) { return substituteExpressionIdentifier(node); } return node; } function substituteExpressionIdentifier(node) { if (!ts.isGeneratedIdentifier(node) && renamedCatchVariables && renamedCatchVariables.has(ts.idText(node))) { var original = ts.getOriginalNode(node); if (ts.isIdentifier(original) && original.parent) { var declaration = resolver.getReferencedValueDeclaration(original); if (declaration) { var name = renamedCatchVariableDeclarations[ts.getOriginalNodeId(declaration)]; if (name) { var clone_6 = ts.getMutableClone(name); ts.setSourceMapRange(clone_6, node); ts.setCommentRange(clone_6, node); return clone_6; } } } } return node; } function cacheExpression(node) { var temp; if (ts.isGeneratedIdentifier(node) || ts.getEmitFlags(node) & 4096) { return node; } temp = ts.createTempVariable(hoistVariableDeclaration); emitAssignment(temp, node, node); return temp; } function declareLocal(name) { var temp = name ? ts.createUniqueName(name) : ts.createTempVariable(undefined); hoistVariableDeclaration(temp); return temp; } function defineLabel() { if (!labelOffsets) { labelOffsets = []; } var label = nextLabelId; nextLabelId++; labelOffsets[label] = -1; return label; } function markLabel(label) { ts.Debug.assert(labelOffsets !== undefined, "No labels were defined."); labelOffsets[label] = operations ? operations.length : 0; } function beginBlock(block) { if (!blocks) { blocks = []; blockActions = []; blockOffsets = []; blockStack = []; } var index = blockActions.length; blockActions[index] = 0; blockOffsets[index] = operations ? operations.length : 0; blocks[index] = block; blockStack.push(block); return index; } function endBlock() { var block = peekBlock(); if (block === undefined) return ts.Debug.fail("beginBlock was never called."); var index = blockActions.length; blockActions[index] = 1; blockOffsets[index] = operations ? operations.length : 0; blocks[index] = block; blockStack.pop(); return block; } function peekBlock() { return ts.lastOrUndefined(blockStack); } function peekBlockKind() { var block = peekBlock(); return block && block.kind; } function beginWithBlock(expression) { var startLabel = defineLabel(); var endLabel = defineLabel(); markLabel(startLabel); beginBlock({ kind: 1, expression: expression, startLabel: startLabel, endLabel: endLabel }); } function endWithBlock() { ts.Debug.assert(peekBlockKind() === 1); var block = endBlock(); markLabel(block.endLabel); } function beginExceptionBlock() { var startLabel = defineLabel(); var endLabel = defineLabel(); markLabel(startLabel); beginBlock({ kind: 0, state: 0, startLabel: startLabel, endLabel: endLabel }); emitNop(); return endLabel; } function beginCatchBlock(variable) { ts.Debug.assert(peekBlockKind() === 0); var name; if (ts.isGeneratedIdentifier(variable.name)) { name = variable.name; hoistVariableDeclaration(variable.name); } else { var text = ts.idText(variable.name); name = declareLocal(text); if (!renamedCatchVariables) { renamedCatchVariables = ts.createMap(); renamedCatchVariableDeclarations = []; context.enableSubstitution(71); } renamedCatchVariables.set(text, true); renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name; } var exception = peekBlock(); ts.Debug.assert(exception.state < 1); var endLabel = exception.endLabel; emitBreak(endLabel); var catchLabel = defineLabel(); markLabel(catchLabel); exception.state = 1; exception.catchVariable = name; exception.catchLabel = catchLabel; emitAssignment(name, ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, [])); emitNop(); } function beginFinallyBlock() { ts.Debug.assert(peekBlockKind() === 0); var exception = peekBlock(); ts.Debug.assert(exception.state < 2); var endLabel = exception.endLabel; emitBreak(endLabel); var finallyLabel = defineLabel(); markLabel(finallyLabel); exception.state = 2; exception.finallyLabel = finallyLabel; } function endExceptionBlock() { ts.Debug.assert(peekBlockKind() === 0); var exception = endBlock(); var state = exception.state; if (state < 2) { emitBreak(exception.endLabel); } else { emitEndfinally(); } markLabel(exception.endLabel); emitNop(); exception.state = 3; } function beginScriptLoopBlock() { beginBlock({ kind: 3, isScript: true, breakLabel: -1, continueLabel: -1 }); } function beginLoopBlock(continueLabel) { var breakLabel = defineLabel(); beginBlock({ kind: 3, isScript: false, breakLabel: breakLabel, continueLabel: continueLabel, }); return breakLabel; } function endLoopBlock() { ts.Debug.assert(peekBlockKind() === 3); var block = endBlock(); var breakLabel = block.breakLabel; if (!block.isScript) { markLabel(breakLabel); } } function beginScriptSwitchBlock() { beginBlock({ kind: 2, isScript: true, breakLabel: -1 }); } function beginSwitchBlock() { var breakLabel = defineLabel(); beginBlock({ kind: 2, isScript: false, breakLabel: breakLabel, }); return breakLabel; } function endSwitchBlock() { ts.Debug.assert(peekBlockKind() === 2); var block = endBlock(); var breakLabel = block.breakLabel; if (!block.isScript) { markLabel(breakLabel); } } function beginScriptLabeledBlock(labelText) { beginBlock({ kind: 4, isScript: true, labelText: labelText, breakLabel: -1 }); } function beginLabeledBlock(labelText) { var breakLabel = defineLabel(); beginBlock({ kind: 4, isScript: false, labelText: labelText, breakLabel: breakLabel }); } function endLabeledBlock() { ts.Debug.assert(peekBlockKind() === 4); var block = endBlock(); if (!block.isScript) { markLabel(block.breakLabel); } } function supportsUnlabeledBreak(block) { return block.kind === 2 || block.kind === 3; } function supportsLabeledBreakOrContinue(block) { return block.kind === 4; } function supportsUnlabeledContinue(block) { return block.kind === 3; } function hasImmediateContainingLabeledBlock(labelText, start) { for (var j = start; j >= 0; j--) { var containingBlock = blockStack[j]; if (supportsLabeledBreakOrContinue(containingBlock)) { if (containingBlock.labelText === labelText) { return true; } } else { break; } } return false; } function findBreakTarget(labelText) { if (blockStack) { if (labelText) { for (var i = blockStack.length - 1; i >= 0; i--) { var block = blockStack[i]; if (supportsLabeledBreakOrContinue(block) && block.labelText === labelText) { return block.breakLabel; } else if (supportsUnlabeledBreak(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) { return block.breakLabel; } } } else { for (var i = blockStack.length - 1; i >= 0; i--) { var block = blockStack[i]; if (supportsUnlabeledBreak(block)) { return block.breakLabel; } } } } return 0; } function findContinueTarget(labelText) { if (blockStack) { if (labelText) { for (var i = blockStack.length - 1; i >= 0; i--) { var block = blockStack[i]; if (supportsUnlabeledContinue(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) { return block.continueLabel; } } } else { for (var i = blockStack.length - 1; i >= 0; i--) { var block = blockStack[i]; if (supportsUnlabeledContinue(block)) { return block.continueLabel; } } } } return 0; } function createLabel(label) { if (label !== undefined && label > 0) { if (labelExpressions === undefined) { labelExpressions = []; } var expression = ts.createLiteral(-1); if (labelExpressions[label] === undefined) { labelExpressions[label] = [expression]; } else { labelExpressions[label].push(expression); } return expression; } return ts.createOmittedExpression(); } function createInstruction(instruction) { var literal = ts.createLiteral(instruction); ts.addSyntheticTrailingComment(literal, 3, getInstructionName(instruction)); return literal; } function createInlineBreak(label, location) { ts.Debug.assertLessThan(0, label, "Invalid label"); return ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ createInstruction(3), createLabel(label) ])), location); } function createInlineReturn(expression, location) { return ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression ? [createInstruction(2), expression] : [createInstruction(2)])), location); } function createGeneratorResume(location) { return ts.setTextRange(ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, []), location); } function emitNop() { emitWorker(0); } function emitStatement(node) { if (node) { emitWorker(1, [node]); } else { emitNop(); } } function emitAssignment(left, right, location) { emitWorker(2, [left, right], location); } function emitBreak(label, location) { emitWorker(3, [label], location); } function emitBreakWhenTrue(label, condition, location) { emitWorker(4, [label, condition], location); } function emitBreakWhenFalse(label, condition, location) { emitWorker(5, [label, condition], location); } function emitYieldStar(expression, location) { emitWorker(7, [expression], location); } function emitYield(expression, location) { emitWorker(6, [expression], location); } function emitReturn(expression, location) { emitWorker(8, [expression], location); } function emitThrow(expression, location) { emitWorker(9, [expression], location); } function emitEndfinally() { emitWorker(10); } function emitWorker(code, args, location) { if (operations === undefined) { operations = []; operationArguments = []; operationLocations = []; } if (labelOffsets === undefined) { markLabel(defineLabel()); } var operationIndex = operations.length; operations[operationIndex] = code; operationArguments[operationIndex] = args; operationLocations[operationIndex] = location; } function build() { blockIndex = 0; labelNumber = 0; labelNumbers = undefined; lastOperationWasAbrupt = false; lastOperationWasCompletion = false; clauses = undefined; statements = undefined; exceptionBlockStack = undefined; currentExceptionBlock = undefined; withBlockStack = undefined; var buildResult = buildStatements(); 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)); } function buildStatements() { if (operations) { for (var operationIndex = 0; operationIndex < operations.length; operationIndex++) { writeOperation(operationIndex); } flushFinalLabel(operations.length); } else { flushFinalLabel(0); } if (clauses) { var labelExpression = ts.createPropertyAccess(state, "label"); var switchStatement = ts.createSwitch(labelExpression, ts.createCaseBlock(clauses)); return [ts.startOnNewLine(switchStatement)]; } if (statements) { return statements; } return []; } function flushLabel() { if (!statements) { return; } appendLabel(!lastOperationWasAbrupt); lastOperationWasAbrupt = false; lastOperationWasCompletion = false; labelNumber++; } function flushFinalLabel(operationIndex) { if (isFinalLabelReachable(operationIndex)) { tryEnterLabel(operationIndex); withBlockStack = undefined; writeReturn(undefined, undefined); } if (statements && clauses) { appendLabel(false); } updateLabelExpressions(); } function isFinalLabelReachable(operationIndex) { if (!lastOperationWasCompletion) { return true; } if (!labelOffsets || !labelExpressions) { return false; } for (var label = 0; label < labelOffsets.length; label++) { if (labelOffsets[label] === operationIndex && labelExpressions[label]) { return true; } } return false; } function appendLabel(markLabelEnd) { if (!clauses) { clauses = []; } if (statements) { if (withBlockStack) { for (var i = withBlockStack.length - 1; i >= 0; i--) { var withBlock = withBlockStack[i]; statements = [ts.createWith(withBlock.expression, ts.createBlock(statements))]; } } if (currentExceptionBlock) { 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"), undefined, [ ts.createArrayLiteral([ createLabel(startLabel), createLabel(catchLabel), createLabel(finallyLabel), createLabel(endLabel) ]) ]))); currentExceptionBlock = undefined; } if (markLabelEnd) { statements.push(ts.createStatement(ts.createAssignment(ts.createPropertyAccess(state, "label"), ts.createLiteral(labelNumber + 1)))); } } clauses.push(ts.createCaseClause(ts.createLiteral(labelNumber), statements || [])); statements = undefined; } function tryEnterLabel(operationIndex) { if (!labelOffsets) { return; } for (var label = 0; label < labelOffsets.length; label++) { if (labelOffsets[label] === operationIndex) { flushLabel(); if (labelNumbers === undefined) { labelNumbers = []; } if (labelNumbers[labelNumber] === undefined) { labelNumbers[labelNumber] = [label]; } else { labelNumbers[labelNumber].push(label); } } } } function updateLabelExpressions() { if (labelExpressions !== undefined && labelNumbers !== undefined) { for (var labelNumber_1 = 0; labelNumber_1 < labelNumbers.length; labelNumber_1++) { var labels = labelNumbers[labelNumber_1]; if (labels !== undefined) { for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) { var label = labels_1[_i]; var expressions = labelExpressions[label]; if (expressions !== undefined) { for (var _a = 0, expressions_1 = expressions; _a < expressions_1.length; _a++) { var expression = expressions_1[_a]; expression.text = String(labelNumber_1); } } } } } } } 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: if (blockAction === 0) { if (!exceptionBlockStack) { exceptionBlockStack = []; } if (!statements) { statements = []; } exceptionBlockStack.push(currentExceptionBlock); currentExceptionBlock = block; } else if (blockAction === 1) { currentExceptionBlock = exceptionBlockStack.pop(); } break; case 1: if (blockAction === 0) { if (!withBlockStack) { withBlockStack = []; } withBlockStack.push(block); } else if (blockAction === 1) { withBlockStack.pop(); } break; } } } } function writeOperation(operationIndex) { tryEnterLabel(operationIndex); tryEnterOrLeaveBlock(operationIndex); if (lastOperationWasAbrupt) { return; } lastOperationWasAbrupt = false; lastOperationWasCompletion = false; var opcode = operations[operationIndex]; if (opcode === 0) { return; } else if (opcode === 10) { return writeEndfinally(); } var args = operationArguments[operationIndex]; if (opcode === 1) { return writeStatement(args[0]); } var location = operationLocations[operationIndex]; switch (opcode) { case 2: return writeAssign(args[0], args[1], location); case 3: return writeBreak(args[0], location); case 4: return writeBreakWhenTrue(args[0], args[1], location); case 5: return writeBreakWhenFalse(args[0], args[1], location); case 6: return writeYield(args[0], location); case 7: return writeYieldStar(args[0], location); case 8: return writeReturn(args[0], location); case 9: return writeThrow(args[0], location); } } function writeStatement(statement) { if (statement) { if (!statements) { statements = [statement]; } else { statements.push(statement); } } } function writeAssign(left, right, operationLocation) { writeStatement(ts.setTextRange(ts.createStatement(ts.createAssignment(left, right)), operationLocation)); } function writeThrow(expression, operationLocation) { lastOperationWasAbrupt = true; lastOperationWasCompletion = true; writeStatement(ts.setTextRange(ts.createThrow(expression), operationLocation)); } function writeReturn(expression, operationLocation) { lastOperationWasAbrupt = true; lastOperationWasCompletion = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression ? [createInstruction(2), expression] : [createInstruction(2)])), operationLocation), 384)); } function writeBreak(label, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ createInstruction(3), createLabel(label) ])), operationLocation), 384)); } function writeBreakWhenTrue(label, condition, operationLocation) { writeStatement(ts.setEmitFlags(ts.createIf(condition, ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ createInstruction(3), createLabel(label) ])), operationLocation), 384)), 1)); } function writeBreakWhenFalse(label, condition, operationLocation) { writeStatement(ts.setEmitFlags(ts.createIf(ts.createLogicalNot(condition), ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ createInstruction(3), createLabel(label) ])), operationLocation), 384)), 1)); } function writeYield(expression, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression ? [createInstruction(4), expression] : [createInstruction(4)])), operationLocation), 384)); } function writeYieldStar(expression, operationLocation) { lastOperationWasAbrupt = true; writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([ createInstruction(5), expression ])), operationLocation), 384)); } function writeEndfinally() { lastOperationWasAbrupt = true; writeStatement(ts.createReturn(ts.createArrayLiteral([ createInstruction(7) ]))); } } ts.transformGenerators = transformGenerators; function createGeneratorHelper(context, body) { context.requestEmitHelper(generatorHelper); return ts.createCall(ts.getHelperName("__generator"), undefined, [ts.createThis(), body]); } var generatorHelper = { name: "typescript:generator", scoped: false, priority: 6, text: "\n var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, 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 = {})); var ts; (function (ts) { function transformModule(context) { function getTransformModuleDelegate(moduleKind) { switch (moduleKind) { case ts.ModuleKind.AMD: return transformAMDModule; case ts.ModuleKind.UMD: return transformUMDModule; default: return transformCommonJSModule; } } var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var compilerOptions = context.getCompilerOptions(); var resolver = context.getEmitResolver(); var host = context.getEmitHost(); var languageVersion = ts.getEmitScriptTarget(compilerOptions); var moduleKind = ts.getEmitModuleKind(compilerOptions); var previousOnSubstituteNode = context.onSubstituteNode; var previousOnEmitNode = context.onEmitNode; context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; 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); function transformSourceFile(node) { 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; var transformModule = getTransformModuleDelegate(moduleKind); var updated = transformModule(node); currentSourceFile = undefined; currentModuleInfo = undefined; needUMDDynamicImportHelper = false; return ts.aggregateTransformFlags(updated); } function shouldEmitUnderscoreUnderscoreESModule() { if (!currentModuleInfo.exportEquals && ts.isExternalModule(currentSourceFile)) { return true; } return false; } function transformCommonJSModule(node) { startLexicalEnvironment(); var statements = []; var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile)); var statementOffset = ts.addPrologue(statements, node.statements, ensureUseStrict, sourceElementVisitor); if (shouldEmitUnderscoreUnderscoreESModule()) { ts.append(statements, createUnderscoreUnderscoreESModule()); } ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement)); ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset)); addExportEqualsIfNeeded(statements, false); ts.prependStatements(statements, endLexicalEnvironment()); var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements)); if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) { ts.addEmitHelper(updated, exportStarHelper); } ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } function transformAMDModule(node) { var define = ts.createIdentifier("define"); var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions); 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, undefined, (moduleName ? [moduleName] : []).concat([ ts.createArrayLiteral([ ts.createLiteral("require"), ts.createLiteral("exports") ].concat(aliasedModuleNames, unaliasedModuleNames)), ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ ts.createParameter(undefined, undefined, undefined, "require"), ts.createParameter(undefined, undefined, undefined, "exports") ].concat(importAliasNames), undefined, transformAsynchronousModuleBody(node)) ]))) ]), node.statements)); ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } function transformUMDModule(node) { 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(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(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) ]), 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"), undefined, (moduleName ? [moduleName] : []).concat([ ts.createArrayLiteral([ ts.createLiteral("require"), ts.createLiteral("exports") ].concat(aliasedModuleNames, unaliasedModuleNames)), ts.createIdentifier("factory") ]))) ]))) ], true), undefined)); var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([ 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)) ])) ]), node.statements)); ts.addEmitHelpers(updated, context.readEmitHelpers()); return updated; } function collectAsynchronousDependencies(node, includeNonAmdDependencies) { var aliasedModuleNames = []; var unaliasedModuleNames = []; var importAliasNames = []; 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(undefined, undefined, undefined, amdDependency.name)); } else { unaliasedModuleNames.push(ts.createLiteral(amdDependency.path)); } } for (var _b = 0, _c = currentModuleInfo.externalImports; _b < _c.length; _b++) { var importNode = _c[_b]; var externalModuleName = ts.getExternalModuleNameLiteral(importNode, currentSourceFile, host, resolver, compilerOptions); var importAliasName = ts.getLocalNameForExternalImport(importNode, currentSourceFile); if (externalModuleName) { if (includeNonAmdDependencies && importAliasName) { ts.setEmitFlags(importAliasName, 4); aliasedModuleNames.push(externalModuleName); importAliasNames.push(ts.createParameter(undefined, undefined, undefined, importAliasName)); } else { unaliasedModuleNames.push(externalModuleName); } } } return { aliasedModuleNames: aliasedModuleNames, unaliasedModuleNames: unaliasedModuleNames, importAliasNames: importAliasNames }; } function getAMDImportExpressionForImport(node) { if (ts.isImportEqualsDeclaration(node) || ts.isExportDeclaration(node) || !ts.getExternalModuleNameLiteral(node, currentSourceFile, host, resolver, compilerOptions)) { return undefined; } var name = ts.getLocalNameForExternalImport(node, currentSourceFile); var expr = getHelperExpressionForImport(node, name); if (expr === name) { return undefined; } return ts.createStatement(ts.createAssignment(name, expr)); } function transformAsynchronousModuleBody(node) { startLexicalEnvironment(); var statements = []; var statementOffset = ts.addPrologue(statements, node.statements, !compilerOptions.noImplicitUseStrict, sourceElementVisitor); if (shouldEmitUnderscoreUnderscoreESModule()) { ts.append(statements, createUnderscoreUnderscoreESModule()); } 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)); addExportEqualsIfNeeded(statements, true); ts.prependStatements(statements, endLexicalEnvironment()); var body = ts.createBlock(statements, true); if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) { ts.addEmitHelper(body, exportStarHelper); } if (needUMDDynamicImportHelper) { ts.addEmitHelper(body, dynamicImportUMDHelper); } return body; } function addExportEqualsIfNeeded(statements, emitAsReturn) { if (currentModuleInfo.exportEquals) { var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor); if (expressionResult) { if (emitAsReturn) { var statement = ts.createReturn(expressionResult); ts.setTextRange(statement, currentModuleInfo.exportEquals); 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); statements.push(statement); } } } } function sourceElementVisitor(node) { switch (node.kind) { case 244: return visitImportDeclaration(node); case 243: return visitImportEqualsDeclaration(node); case 250: return visitExportDeclaration(node); case 249: return visitExportAssignment(node); case 214: return visitVariableStatement(node); case 234: return visitFunctionDeclaration(node); case 235: return visitClassDeclaration(node); case 304: return visitMergeDeclarationMarker(node); case 305: return visitEndOfDeclarationMarker(node); default: return ts.visitEachChild(node, moduleExpressionElementVisitor, context); } } function moduleExpressionElementVisitor(node) { if (!(node.transformFlags & 67108864) && !(node.transformFlags & 2048)) { return node; } if (ts.isImportCall(node)) { return visitImportCallExpression(node); } else if (node.transformFlags & 1024 && ts.isBinaryExpression(node)) { return visitDestructuringAssignment(node); } else { return ts.visitEachChild(node, moduleExpressionElementVisitor, context); } } function destructuringNeedsFlattening(node) { if (ts.isObjectLiteralExpression(node)) { for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var elem = _a[_i]; switch (elem.kind) { case 270: if (destructuringNeedsFlattening(elem.initializer)) { return true; } break; case 271: if (destructuringNeedsFlattening(elem.name)) { return true; } break; case 272: if (destructuringNeedsFlattening(elem.expression)) { return true; } break; case 154: case 156: case 157: return false; default: ts.Debug.assertNever(elem, "Unhandled object member kind"); } } } else if (ts.isArrayLiteralExpression(node)) { for (var _b = 0, _c = node.elements; _b < _c.length; _b++) { var elem = _c[_b]; if (ts.isSpreadElement(elem)) { if (destructuringNeedsFlattening(elem.expression)) { return true; } } else if (destructuringNeedsFlattening(elem)) { return true; } } } else if (ts.isIdentifier(node)) { return ts.length(getExports(node)) > (ts.isExportName(node) ? 1 : 0); } return false; } function visitDestructuringAssignment(node) { if (destructuringNeedsFlattening(node.left)) { 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); switch (compilerOptions.module) { case ts.ModuleKind.AMD: return createImportCallExpressionAMD(argument, containsLexicalThis); case ts.ModuleKind.UMD: return createImportCallExpressionUMD(argument, containsLexicalThis); case ts.ModuleKind.CommonJS: default: return createImportCallExpressionCommonJS(argument, containsLexicalThis); } } function createImportCallExpressionUMD(arg, containsLexicalThis) { 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); 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(ts.createIdentifier("__syncRequire"), createImportCallExpressionCommonJS(temp, containsLexicalThis), createImportCallExpressionAMD(temp, containsLexicalThis))); } } function createImportCallExpressionAMD(arg, containsLexicalThis) { var resolve = ts.createUniqueName("resolve"); var reject = ts.createUniqueName("reject"); var parameters = [ ts.createParameter(undefined, undefined, undefined, resolve), ts.createParameter(undefined, undefined, undefined, reject) ]; var body = ts.createBlock([ ts.createStatement(ts.createCall(ts.createIdentifier("require"), undefined, [ts.createArrayLiteral([arg || ts.createOmittedExpression()]), resolve, reject])) ]); var func; if (languageVersion >= 2) { func = ts.createArrowFunction(undefined, undefined, parameters, undefined, undefined, body); } else { func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, parameters, undefined, body); if (containsLexicalThis) { ts.setEmitFlags(func, 8); } } var promise = ts.createNew(ts.createIdentifier("Promise"), undefined, [func]); if (compilerOptions.esModuleInterop) { context.requestEmitHelper(importStarHelper); return ts.createCall(ts.createPropertyAccess(promise, ts.createIdentifier("then")), undefined, [ts.getHelperName("__importStar")]); } return promise; } function createImportCallExpressionCommonJS(arg, containsLexicalThis) { 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"), undefined, [requireCall]); } var func; if (languageVersion >= 2) { func = ts.createArrowFunction(undefined, undefined, [], undefined, undefined, requireCall); } else { func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, ts.createBlock([ts.createReturn(requireCall)])); if (containsLexicalThis) { ts.setEmitFlags(func, 8); } } return ts.createCall(ts.createPropertyAccess(promiseResolveCall, "then"), undefined, [func]); } function getHelperExpressionForImport(node, innerExpr) { if (!compilerOptions.esModuleInterop || ts.getEmitFlags(node) & 67108864) { return innerExpr; } if (ts.getImportNeedsImportStarHelper(node)) { context.requestEmitHelper(importStarHelper); return ts.createCall(ts.getHelperName("__importStar"), undefined, [innerExpr]); } if (ts.getImportNeedsImportDefaultHelper(node)) { context.requestEmitHelper(importDefaultHelper); return ts.createCall(ts.getHelperName("__importDefault"), undefined, [innerExpr]); } return innerExpr; } function visitImportDeclaration(node) { var statements; var namespaceDeclaration = ts.getNamespaceDeclarationNode(node); if (moduleKind !== ts.ModuleKind.AMD) { if (!node.importClause) { return ts.setTextRange(ts.createStatement(createRequireCall(node)), node); } else { var variables = []; if (namespaceDeclaration && !ts.isDefaultImport(node)) { variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, getHelperExpressionForImport(node, createRequireCall(node)))); } else { 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), undefined, ts.getGeneratedNameForNode(node))); } } statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(variables, languageVersion >= 2 ? 2 : 0)), node)); } } else if (namespaceDeclaration && ts.isDefaultImport(node)) { 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)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node); } else { statements = appendExportsOfImportDeclaration(statements, node); } return ts.singleOrMany(statements); } 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"), undefined, args); } 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)) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(node.name, createRequireCall(node))), node)); } else { 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)) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(ts.getExportName(node), ts.getLocalName(node))), node)); } } if (hasAssociatedEndOfDeclarationMarker(node)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node); } else { statements = appendExportsOfImportEqualsDeclaration(statements, node); } return ts.singleOrMany(statements); } function visitExportDeclaration(node) { if (!node.moduleSpecifier) { return undefined; } var generatedName = ts.getGeneratedNameForNode(node); if (node.exportClause) { var statements = []; if (moduleKind !== ts.ModuleKind.AMD) { 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]; var exportedValue = ts.createPropertyAccess(generatedName, specifier.propertyName || specifier.name); statements.push(ts.setTextRange(ts.createStatement(createExportExpression(ts.getExportName(specifier), exportedValue)), specifier)); } return ts.singleOrMany(statements); } else { return ts.setTextRange(ts.createStatement(createExportStarHelper(context, moduleKind !== ts.ModuleKind.AMD ? createRequireCall(node) : generatedName)), node); } } function visitExportAssignment(node) { if (node.isExportEquals) { return undefined; } var statements; var original = node.original; if (original && hasAssociatedEndOfDeclarationMarker(original)) { var id = ts.getOriginalNodeId(node); 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), node, true); } return ts.singleOrMany(statements); } function visitFunctionDeclaration(node) { var statements; 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)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } else { statements = appendExportsOfHoistedDeclaration(statements, node); } return ts.singleOrMany(statements); } function visitClassDeclaration(node) { var statements; 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)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } else { statements = appendExportsOfHoistedDeclaration(statements, node); } return ts.singleOrMany(statements); } function visitVariableStatement(node) { var statements; var variables; var expressions; if (ts.hasModifier(node, 1)) { var modifiers = void 0; 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)) { if (!modifiers) { modifiers = ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier); } variables = ts.append(variables, variable); } else if (variable.initializer) { expressions = ts.append(expressions, transformInitializedVariable(variable)); } } if (variables) { statements = ts.append(statements, ts.updateVariableStatement(node, modifiers, ts.updateVariableDeclarationList(node.declarationList, variables))); } if (expressions) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.inlineExpressions(expressions)), node)); } } else { statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context)); } if (hasAssociatedEndOfDeclarationMarker(node)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node); } else { statements = appendExportsOfVariableStatement(statements, node); } return ts.singleOrMany(statements); } function createAllExportExpressions(name, value, location) { var exportedNames = getExports(name); if (exportedNames) { 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]; ts.setEmitFlags(expression, 4); expression = createExportExpression(exportName, expression, location); } return expression; } return ts.createAssignment(name, value); } function transformInitializedVariable(node) { if (ts.isBindingPattern(node.name)) { 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), node.name), ts.visitNode(node.initializer, moduleExpressionElementVisitor)); } } function visitMergeDeclarationMarker(node) { if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original); } return node; } function hasAssociatedEndOfDeclarationMarker(node) { return (ts.getEmitFlags(node) & 4194304) !== 0; } function visitEndOfDeclarationMarker(node) { var id = ts.getOriginalNodeId(node); var statements = deferredExports[id]; if (statements) { delete deferredExports[id]; return ts.append(statements, node); } return node; } function appendExportsOfImportDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } var importClause = decl.importClause; if (!importClause) { return statements; } if (importClause.name) { statements = appendExportsOfDeclaration(statements, importClause); } var namedBindings = importClause.namedBindings; if (namedBindings) { switch (namedBindings.kind) { case 246: statements = appendExportsOfDeclaration(statements, namedBindings); break; case 247: for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) { var importBinding = _a[_i]; statements = appendExportsOfDeclaration(statements, importBinding); } break; } } return statements; } function appendExportsOfImportEqualsDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } return appendExportsOfDeclaration(statements, decl); } function appendExportsOfVariableStatement(statements, node) { if (currentModuleInfo.exportEquals) { return statements; } for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; statements = appendExportsOfBindingElement(statements, decl); } return statements; } function appendExportsOfBindingElement(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } if (ts.isBindingPattern(decl.name)) { for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { statements = appendExportsOfBindingElement(statements, element); } } } else if (!ts.isGeneratedIdentifier(decl.name)) { statements = appendExportsOfDeclaration(statements, decl); } return statements; } function appendExportsOfHoistedDeclaration(statements, decl) { if (currentModuleInfo.exportEquals) { return statements; } 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; } 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, exportSpecifier.name); } } return statements; } 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) { statement = ts.createStatement(createExportExpression(ts.createIdentifier("__esModule"), ts.createLiteral(true))); } else { 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(true)) ]) ])); } ts.setEmitFlags(statement, 1048576); return 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); } return statement; } function createExportExpression(name, value, location) { return ts.setTextRange(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(name)), value), location); } function modifierVisitor(node) { switch (node.kind) { case 84: case 79: return undefined; } return node; } function onEmitNode(hint, node, emitCallback) { if (node.kind === 274) { currentSourceFile = node; currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)]; noSubstitution = []; previousOnEmitNode(hint, node, emitCallback); currentSourceFile = undefined; currentModuleInfo = undefined; noSubstitution = undefined; } else { previousOnEmitNode(hint, node, emitCallback); } } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (node.id && noSubstitution[node.id]) { return node; } if (hint === 1) { return substituteExpression(node); } else if (ts.isShorthandPropertyAssignment(node)) { return substituteShorthandPropertyAssignment(node); } return node; } function substituteShorthandPropertyAssignment(node) { var name = node.name; var exportedOrImportedName = substituteExpressionIdentifier(name); if (exportedOrImportedName !== name) { if (node.objectAssignmentInitializer) { var initializer = ts.createAssignment(exportedOrImportedName, node.objectAssignmentInitializer); return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node); } return ts.setTextRange(ts.createPropertyAssignment(name, exportedOrImportedName), node); } return node; } function substituteExpression(node) { switch (node.kind) { case 71: return substituteExpressionIdentifier(node); case 200: return substituteBinaryExpression(node); case 199: case 198: return substituteUnaryExpression(node); } return node; } function substituteExpressionIdentifier(node) { if (ts.getEmitFlags(node) & 4096) { var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile); if (externalHelpersModuleName) { return ts.createPropertyAccess(externalHelpersModuleName, node); } return node; } if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) { var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node)); if (exportContainer && exportContainer.kind === 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")), 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)), node); } } } return node; } function substituteBinaryExpression(node) { if (ts.isAssignmentOperator(node.operatorToken.kind) && ts.isIdentifier(node.left) && !ts.isGeneratedIdentifier(node.left) && !ts.isLocalName(node.left) && !ts.isDeclarationNameOfEnumOrNamespace(node.left)) { var exportedNames = getExports(node.left); if (exportedNames) { var expression = node; for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) { var exportName = exportedNames_2[_i]; noSubstitution[ts.getNodeId(expression)] = true; expression = createExportExpression(exportName, expression, node); } return expression; } } return node; } function substituteUnaryExpression(node) { 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 ? 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]; noSubstitution[ts.getNodeId(expression)] = true; expression = createExportExpression(exportName, expression); } return expression; } } return node; } function getExports(name) { if (!ts.isGeneratedIdentifier(name)) { var valueDeclaration = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); if (valueDeclaration) { return currentModuleInfo && currentModuleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]; } } } } ts.transformModule = transformModule; var exportStarHelper = { name: "typescript:export-star", scoped: true, text: "\n function __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n }" }; function createExportStarHelper(context, module) { var compilerOptions = context.getCompilerOptions(); return compilerOptions.importHelpers ? ts.createCall(ts.getHelperName("__exportStar"), undefined, [module, ts.createIdentifier("exports")]) : ts.createCall(ts.createIdentifier("__export"), undefined, [module]); } var dynamicImportUMDHelper = { name: "typescript:dynamicimport-sync-require", scoped: true, text: "\n var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";" }; 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};" }; 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 = {})); var ts; (function (ts) { function transformSystemModule(context) { var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration; var compilerOptions = context.getCompilerOptions(); var resolver = context.getEmitResolver(); var host = context.getEmitHost(); var previousOnSubstituteNode = context.onSubstituteNode; var previousOnEmitNode = context.onEmitNode; context.onSubstituteNode = onSubstituteNode; context.onEmitNode = onEmitNode; 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; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864)) { return node; } var id = ts.getOriginalNodeId(node); currentSourceFile = node; enclosingBlockScopedContainer = node; moduleInfo = moduleInfoMap[id] = ts.collectExternalModuleInfo(node, resolver, compilerOptions); exportFunction = ts.createUniqueName("exports"); exportFunctionsMap[id] = exportFunction; contextObject = ts.createUniqueName("context"); var dependencyGroups = collectDependencyGroups(moduleInfo.externalImports); var moduleBodyBlock = createSystemModuleBody(node, dependencyGroups); 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"), undefined, moduleName ? [moduleName, dependencies, moduleBodyFunction] : [dependencies, moduleBodyFunction])) ]), node.statements)), 1024); if (!(compilerOptions.outFile || compilerOptions.out)) { ts.moveEmitHelpers(updated, moduleBodyBlock, function (helper) { return !helper.scoped; }); } if (noSubstitution) { noSubstitutionMap[id] = noSubstitution; noSubstitution = undefined; } currentSourceFile = undefined; moduleInfo = undefined; exportFunction = undefined; contextObject = undefined; hoistedStatements = undefined; enclosingBlockScopedContainer = undefined; return ts.aggregateTransformFlags(updated); } function collectDependencyGroups(externalImports) { var groupIndices = ts.createMap(); var dependencyGroups = []; for (var _i = 0, externalImports_1 = externalImports; _i < externalImports_1.length; _i++) { var externalImport = externalImports_1[_i]; var externalModuleName = ts.getExternalModuleNameLiteral(externalImport, currentSourceFile, host, resolver, compilerOptions); if (externalModuleName) { var text = externalModuleName.text; var groupIndex = groupIndices.get(text); if (groupIndex !== undefined) { dependencyGroups[groupIndex].externalImports.push(externalImport); } else { groupIndices.set(text, dependencyGroups.length); dependencyGroups.push({ name: externalModuleName, externalImports: [externalImport] }); } } } return dependencyGroups; } function createSystemModuleBody(node, dependencyGroups) { var statements = []; startLexicalEnvironment(); var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile)); var statementOffset = ts.addPrologue(statements, node.statements, ensureUseStrict, sourceElementVisitor); statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ ts.createVariableDeclaration("__moduleName", undefined, ts.createLogicalAnd(contextObject, ts.createPropertyAccess(contextObject, "id"))) ]))); ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement); var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset); ts.addRange(statements, hoistedStatements); ts.prependStatements(statements, endLexicalEnvironment()); var exportStarFunction = addExportStarIfNeeded(statements); var moduleObject = ts.createObjectLiteral([ ts.createPropertyAssignment("setters", createSettersArray(exportStarFunction, dependencyGroups)), 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, true); } function addExportStarIfNeeded(statements) { if (!moduleInfo.hasExportStarsToExportValues) { return; } if (!moduleInfo.exportedNames && moduleInfo.exportSpecifiers.size === 0) { var hasExportDeclarationWithExportClause = false; for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) { var externalImport = _a[_i]; if (externalImport.kind === 250 && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } } if (!hasExportDeclarationWithExportClause) { var exportStarFunction_1 = createExportStarFunction(undefined); statements.push(exportStarFunction_1); return exportStarFunction_1.name; } } var exportedNames = []; if (moduleInfo.exportedNames) { for (var _b = 0, _c = moduleInfo.exportedNames; _b < _c.length; _b++) { var exportedLocalName = _c[_b]; if (exportedLocalName.escapedText === "default") { continue; } 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) { continue; } if (!externalImport.exportClause) { continue; } for (var _f = 0, _g = externalImport.exportClause.elements; _f < _g.length; _f++) { var element = _g[_f]; exportedNames.push(ts.createPropertyAssignment(ts.createLiteral(ts.idText(element.name || element.propertyName)), ts.createTrue())); } } var exportedNamesStorageRef = ts.createUniqueName("exportedNames"); 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; } function createExportStarFunction(localNames) { var exportStarFunction = ts.createUniqueName("exportStar"); var m = ts.createIdentifier("m"); var n = ts.createIdentifier("n"); 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"), undefined, [n]))); } 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, undefined) ]), m, ts.createBlock([ ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 1) ])), ts.createStatement(ts.createCall(exportFunction, undefined, [exports])) ], true)); } function createSettersArray(exportStarFunction, dependencyGroups) { var setters = []; for (var _i = 0, dependencyGroups_1 = dependencyGroups; _i < dependencyGroups_1.length; _i++) { var group_1 = dependencyGroups_1[_i]; 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); switch (entry.kind) { case 244: if (!entry.importClause) { break; } case 243: ts.Debug.assert(importVariableName !== undefined); statements.push(ts.createStatement(ts.createAssignment(importVariableName, parameterName))); break; case 250: ts.Debug.assert(importVariableName !== undefined); if (entry.exportClause) { 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, undefined, [ts.createObjectLiteral(properties, true)]))); } else { statements.push(ts.createStatement(ts.createCall(exportStarFunction, undefined, [parameterName]))); } break; } } setters.push(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, ts.createBlock(statements, true))); } return ts.createArrayLiteral(setters, true); } function sourceElementVisitor(node) { switch (node.kind) { case 244: return visitImportDeclaration(node); case 243: return visitImportEqualsDeclaration(node); case 250: return undefined; case 249: return visitExportAssignment(node); default: return nestedElementVisitor(node); } } function visitImportDeclaration(node) { var statements; if (node.importClause) { hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile)); } if (hasAssociatedEndOfDeclarationMarker(node)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node); } else { statements = appendExportsOfImportDeclaration(statements, node); } return ts.singleOrMany(statements); } 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)); if (hasAssociatedEndOfDeclarationMarker(node)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node); } else { statements = appendExportsOfImportEqualsDeclaration(statements, node); } return ts.singleOrMany(statements); } function visitExportAssignment(node) { if (node.isExportEquals) { return undefined; } var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression); var original = node.original; if (original && hasAssociatedEndOfDeclarationMarker(original)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), expression, true); } else { return createExportStatement(ts.createIdentifier("default"), expression, true); } } function visitFunctionDeclaration(node) { 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)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } else { hoistedStatements = appendExportsOfHoistedDeclaration(hoistedStatements, node); } return undefined; } function visitClassDeclaration(node) { var statements; var name = ts.getLocalName(node); hoistVariableDeclaration(name); 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)) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node); } else { statements = appendExportsOfHoistedDeclaration(statements, node); } return ts.singleOrMany(statements); } function visitVariableStatement(node) { if (!shouldHoistVariableDeclarationList(node.declarationList)) { return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement); } var expressions; 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]; if (variable.initializer) { expressions = ts.append(expressions, transformInitializedVariable(variable, isExportedDeclaration && !isMarkedDeclaration)); } else { hoistBindingElement(variable); } } var statements; if (expressions) { statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.inlineExpressions(expressions)), node)); } if (isMarkedDeclaration) { var id = ts.getOriginalNodeId(node); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node, isExportedDeclaration); } else { statements = appendExportsOfVariableStatement(statements, node, false); } return ts.singleOrMany(statements); } function hoistBindingElement(node) { if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { hoistBindingElement(element); } } } else { hoistVariableDeclaration(ts.getSynthesizedClone(node.name)); } } function shouldHoistVariableDeclarationList(node) { return (ts.getEmitFlags(node) & 2097152) === 0 && (enclosingBlockScopedContainer.kind === 274 || (ts.getOriginalNode(node).flags & 3) === 0); } function transformInitializedVariable(node, isExportedDeclaration) { var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment; return ts.isBindingPattern(node.name) ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, false, createAssignment) : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name; } function createExportedVariableAssignment(name, value, location) { return createVariableAssignment(name, value, location, true); } function createNonExportedVariableAssignment(name, value, location) { return createVariableAssignment(name, value, location, false); } 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)); } function visitMergeDeclarationMarker(node) { if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 214) { var id = ts.getOriginalNodeId(node); var isExportedDeclaration = ts.hasModifier(node.original, 1); deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration); } return node; } function hasAssociatedEndOfDeclarationMarker(node) { return (ts.getEmitFlags(node) & 4194304) !== 0; } function visitEndOfDeclarationMarker(node) { var id = ts.getOriginalNodeId(node); var statements = deferredExports[id]; if (statements) { delete deferredExports[id]; return ts.append(statements, node); } else { var original = ts.getOriginalNode(node); if (ts.isModuleOrEnumDeclaration(original)) { return ts.append(appendExportsOfDeclaration(statements, original), node); } } return node; } function appendExportsOfImportDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; } var importClause = decl.importClause; if (!importClause) { return statements; } if (importClause.name) { statements = appendExportsOfDeclaration(statements, importClause); } var namedBindings = importClause.namedBindings; if (namedBindings) { switch (namedBindings.kind) { case 246: statements = appendExportsOfDeclaration(statements, namedBindings); break; case 247: for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) { var importBinding = _a[_i]; statements = appendExportsOfDeclaration(statements, importBinding); } break; } } return statements; } function appendExportsOfImportEqualsDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; } return appendExportsOfDeclaration(statements, decl); } function appendExportsOfVariableStatement(statements, node, exportSelf) { if (moduleInfo.exportEquals) { return statements; } for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (decl.initializer || exportSelf) { statements = appendExportsOfBindingElement(statements, decl, exportSelf); } } return statements; } function appendExportsOfBindingElement(statements, decl, exportSelf) { if (moduleInfo.exportEquals) { return statements; } if (ts.isBindingPattern(decl.name)) { for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (!ts.isOmittedExpression(element)) { statements = appendExportsOfBindingElement(statements, element, exportSelf); } } } else if (!ts.isGeneratedIdentifier(decl.name)) { var excludeName = void 0; if (exportSelf) { statements = appendExportStatement(statements, decl.name, ts.getLocalName(decl)); excludeName = ts.idText(decl.name); } statements = appendExportsOfDeclaration(statements, decl, excludeName); } return statements; } function appendExportsOfHoistedDeclaration(statements, decl) { if (moduleInfo.exportEquals) { return statements; } var excludeName; 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); } if (decl.name) { statements = appendExportsOfDeclaration(statements, decl, excludeName); } return statements; } function appendExportsOfDeclaration(statements, decl, excludeName) { if (moduleInfo.exportEquals) { return statements; } var name = ts.getDeclarationName(decl); var exportSpecifiers = moduleInfo.exportSpecifiers.get(ts.idText(name)); if (exportSpecifiers) { for (var _i = 0, exportSpecifiers_2 = exportSpecifiers; _i < exportSpecifiers_2.length; _i++) { var exportSpecifier = exportSpecifiers_2[_i]; if (exportSpecifier.name.escapedText !== excludeName) { statements = appendExportStatement(statements, exportSpecifier.name, name); } } } return statements; } function appendExportStatement(statements, exportName, expression, allowComments) { statements = ts.append(statements, createExportStatement(exportName, expression, allowComments)); return statements; } function createExportStatement(name, value, allowComments) { var statement = ts.createStatement(createExportExpression(name, value)); ts.startOnNewLine(statement); if (!allowComments) { ts.setEmitFlags(statement, 1536); } return statement; } function createExportExpression(name, value) { var exportName = ts.isIdentifier(name) ? ts.createLiteral(name) : name; ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536); return ts.setCommentRange(ts.createCall(exportFunction, undefined, [exportName, value]), value); } function nestedElementVisitor(node) { switch (node.kind) { case 214: return visitVariableStatement(node); case 234: return visitFunctionDeclaration(node); case 235: return visitClassDeclaration(node); case 220: return visitForStatement(node); case 221: return visitForInStatement(node); case 222: return visitForOfStatement(node); case 218: return visitDoStatement(node); case 219: return visitWhileStatement(node); case 228: return visitLabeledStatement(node); case 226: return visitWithStatement(node); case 227: return visitSwitchStatement(node); case 241: return visitCaseBlock(node); case 266: return visitCaseClause(node); case 267: return visitDefaultClause(node); case 230: return visitTryStatement(node); case 269: return visitCatchClause(node); case 213: return visitBlock(node); case 304: return visitMergeDeclarationMarker(node); case 305: return visitEndOfDeclarationMarker(node); default: return destructuringAndImportCallVisitor(node); } } function visitForStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.updateFor(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement)); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function visitForInStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.updateForIn(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function visitForOfStatement(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.updateForOf(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function shouldHoistForInitializer(node) { return ts.isVariableDeclarationList(node) && shouldHoistVariableDeclarationList(node); } 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, false)); if (!variable.initializer) { hoistBindingElement(variable); } } return expressions ? ts.inlineExpressions(expressions) : ts.createOmittedExpression(); } else { return ts.visitEachChild(node, nestedElementVisitor, context); } } function visitDoStatement(node) { return ts.updateDo(node, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression)); } function visitWhileStatement(node) { return ts.updateWhile(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } function visitLabeledStatement(node) { return ts.updateLabel(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } function visitWithStatement(node) { return ts.updateWith(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock)); } function visitSwitchStatement(node) { return ts.updateSwitch(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock)); } function visitCaseBlock(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause)); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function visitCaseClause(node) { return ts.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement)); } function visitDefaultClause(node) { return ts.visitEachChild(node, nestedElementVisitor, context); } function visitTryStatement(node) { return ts.visitEachChild(node, nestedElementVisitor, context); } function visitCatchClause(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock)); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function visitBlock(node) { var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; enclosingBlockScopedContainer = node; node = ts.visitEachChild(node, nestedElementVisitor, context); enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; return node; } function destructuringAndImportCallVisitor(node) { if (node.transformFlags & 1024 && node.kind === 200) { return visitDestructuringAssignment(node); } else if (ts.isImportCall(node)) { return visitImportCallExpression(node); } else if ((node.transformFlags & 2048) || (node.transformFlags & 67108864)) { return ts.visitEachChild(node, destructuringAndImportCallVisitor, context); } else { return node; } } function visitImportCallExpression(node) { return ts.createCall(ts.createPropertyAccess(contextObject, ts.createIdentifier("import")), undefined, ts.some(node.arguments) ? [ts.visitNode(node.arguments[0], destructuringAndImportCallVisitor)] : []); } function visitDestructuringAssignment(node) { if (hasExportedReferenceInDestructuringTarget(node.left)) { return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, true); } return ts.visitEachChild(node, destructuringAndImportCallVisitor, context); } function hasExportedReferenceInDestructuringTarget(node) { if (ts.isAssignmentExpression(node, true)) { return hasExportedReferenceInDestructuringTarget(node.left); } else if (ts.isSpreadElement(node)) { return hasExportedReferenceInDestructuringTarget(node.expression); } else if (ts.isObjectLiteralExpression(node)) { return ts.some(node.properties, hasExportedReferenceInDestructuringTarget); } else if (ts.isArrayLiteralExpression(node)) { return ts.some(node.elements, hasExportedReferenceInDestructuringTarget); } else if (ts.isShorthandPropertyAssignment(node)) { return hasExportedReferenceInDestructuringTarget(node.name); } else if (ts.isPropertyAssignment(node)) { return hasExportedReferenceInDestructuringTarget(node.initializer); } else if (ts.isIdentifier(node)) { var container = resolver.getReferencedExportContainer(node); return container !== undefined && container.kind === 274; } else { return false; } } function modifierVisitor(node) { switch (node.kind) { case 84: case 79: return undefined; } return node; } function onEmitNode(hint, node, emitCallback) { if (node.kind === 274) { var id = ts.getOriginalNodeId(node); currentSourceFile = node; moduleInfo = moduleInfoMap[id]; exportFunction = exportFunctionsMap[id]; noSubstitution = noSubstitutionMap[id]; if (noSubstitution) { delete noSubstitutionMap[id]; } previousOnEmitNode(hint, node, emitCallback); currentSourceFile = undefined; moduleInfo = undefined; exportFunction = undefined; noSubstitution = undefined; } else { previousOnEmitNode(hint, node, emitCallback); } } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (isSubstitutionPrevented(node)) { return node; } if (hint === 1) { return substituteExpression(node); } else if (hint === 4) { return substituteUnspecified(node); } return node; } function substituteUnspecified(node) { switch (node.kind) { case 271: return substituteShorthandPropertyAssignment(node); } return node; } 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"))), 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))), node); } } } return node; } function substituteExpression(node) { switch (node.kind) { case 71: return substituteExpressionIdentifier(node); case 200: return substituteBinaryExpression(node); case 198: case 199: return substituteUnaryExpression(node); } return node; } function substituteExpressionIdentifier(node) { if (ts.getEmitFlags(node) & 4096) { var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile); if (externalHelpersModuleName) { return ts.createPropertyAccess(externalHelpersModuleName, node); } return node; } 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")), node); } else if (ts.isImportSpecifier(importDeclaration)) { return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name)), node); } } } return node; } function substituteBinaryExpression(node) { if (ts.isAssignmentOperator(node.operatorToken.kind) && ts.isIdentifier(node.left) && !ts.isGeneratedIdentifier(node.left) && !ts.isLocalName(node.left) && !ts.isDeclarationNameOfEnumOrNamespace(node.left)) { var exportedNames = getExports(node.left); if (exportedNames) { var expression = node; for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) { var exportName = exportedNames_4[_i]; expression = createExportExpression(exportName, preventSubstitution(expression)); } return expression; } } return node; } function substituteUnaryExpression(node) { 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 ? 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) { expression = node.operator === 43 ? ts.createSubtract(preventSubstitution(expression), ts.createLiteral(1)) : ts.createAdd(preventSubstitution(expression), ts.createLiteral(1)); } return expression; } } return node; } function getExports(name) { var exportedNames; if (!ts.isGeneratedIdentifier(name)) { var valueDeclaration = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); if (valueDeclaration) { 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)]); } } return exportedNames; } function preventSubstitution(node) { if (noSubstitution === undefined) noSubstitution = []; noSubstitution[ts.getNodeId(node)] = true; return node; } function isSubstitutionPrevented(node) { return noSubstitution && node.id && noSubstitution[node.id]; } } ts.transformSystemModule = transformSystemModule; })(ts || (ts = {})); var ts; (function (ts) { function transformES2015Module(context) { var compilerOptions = context.getCompilerOptions(); var previousOnEmitNode = context.onEmitNode; var previousOnSubstituteNode = context.onSubstituteNode; context.onEmitNode = onEmitNode; context.onSubstituteNode = onSubstituteNode; context.enableEmitNotification(274); context.enableSubstitution(71); var currentSourceFile; return ts.chainBundle(transformSourceFile); function transformSourceFile(node) { if (node.isDeclarationFile) { return node; } if (ts.isExternalModule(node) || compilerOptions.isolatedModules) { var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions); if (externalHelpersModuleName) { var statements = []; var statementOffset = ts.addPrologue(statements, node.statements); 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)); } else { return ts.visitEachChild(node, visitor, context); } } return node; } function visitor(node) { switch (node.kind) { case 243: return undefined; case 249: return visitExportAssignment(node); } return node; } function visitExportAssignment(node) { return node.isExportEquals ? undefined : node; } function onEmitNode(hint, node, emitCallback) { if (ts.isSourceFile(node)) { currentSourceFile = node; previousOnEmitNode(hint, node, emitCallback); currentSourceFile = undefined; } else { previousOnEmitNode(hint, node, emitCallback); } } function onSubstituteNode(hint, node) { node = previousOnSubstituteNode(hint, node); if (ts.isIdentifier(node) && hint === 1) { return substituteExpressionIdentifier(node); } return node; } function substituteExpressionIdentifier(node) { if (ts.getEmitFlags(node) & 4096) { var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile); if (externalHelpersModuleName) { return ts.createPropertyAccess(externalHelpersModuleName, node); } } return node; } } ts.transformES2015Module = transformES2015Module; })(ts || (ts = {})); var ts; (function (ts) { function canProduceDiagnostics(node) { return ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node) || ts.isPropertySignature(node) || ts.isBindingElement(node) || ts.isSetAccessor(node) || ts.isGetAccessor(node) || ts.isConstructSignatureDeclaration(node) || ts.isCallSignatureDeclaration(node) || ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isFunctionDeclaration(node) || ts.isParameter(node) || ts.isTypeParameterDeclaration(node) || ts.isExpressionWithTypeArguments(node) || ts.isImportEqualsDeclaration(node) || ts.isTypeAliasDeclaration(node) || ts.isConstructorDeclaration(node) || ts.isIndexSignatureDeclaration(node); } ts.canProduceDiagnostics = canProduceDiagnostics; function createGetSymbolAccessibilityDiagnosticForNodeName(node) { if (ts.isSetAccessor(node) || ts.isGetAccessor(node)) { return getAccessorNameVisibilityError; } else if (ts.isMethodSignature(node) || ts.isMethodDeclaration(node)) { return getMethodNameVisibilityError; } else { return createGetSymbolAccessibilityDiagnosticForNode(node); } function getAccessorNameVisibilityError(symbolAccessibilityResult) { var diagnosticMessage = getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult); return diagnosticMessage !== undefined ? { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: node.name } : undefined; } function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { if (ts.hasModifier(node, 32)) { return symbolAccessibilityResult.errorModuleName ? 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) { return symbolAccessibilityResult.errorModuleName ? 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 { 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; } } function getMethodNameVisibilityError(symbolAccessibilityResult) { var diagnosticMessage = getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult); return diagnosticMessage !== undefined ? { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: node.name } : undefined; } function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { if (ts.hasModifier(node, 32)) { return symbolAccessibilityResult.errorModuleName ? 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) { return symbolAccessibilityResult.errorModuleName ? 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; } else { return symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Method_0_of_exported_interface_has_or_is_using_private_name_1; } } } ts.createGetSymbolAccessibilityDiagnosticForNodeName = createGetSymbolAccessibilityDiagnosticForNodeName; function createGetSymbolAccessibilityDiagnosticForNode(node) { if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node) || ts.isPropertySignature(node) || ts.isBindingElement(node) || ts.isConstructorDeclaration(node)) { return getVariableDeclarationTypeVisibilityError; } else if (ts.isSetAccessor(node) || ts.isGetAccessor(node)) { return getAccessorDeclarationTypeVisibilityError; } else if (ts.isConstructSignatureDeclaration(node) || ts.isCallSignatureDeclaration(node) || ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isFunctionDeclaration(node) || ts.isIndexSignatureDeclaration(node)) { return getReturnTypeVisibilityError; } else if (ts.isParameter(node)) { if (ts.isParameterPropertyDeclaration(node) && ts.hasModifier(node.parent, 8)) { return getVariableDeclarationTypeVisibilityError; } return getParameterDeclarationTypeVisibilityError; } else if (ts.isTypeParameterDeclaration(node)) { return getTypeParameterConstraintVisibilityError; } else if (ts.isExpressionWithTypeArguments(node)) { return getHeritageClauseVisibilityError; } else if (ts.isImportEqualsDeclaration(node)) { return getImportEntityNameVisibilityError; } else if (ts.isTypeAliasDeclaration(node)) { return getTypeAliasDeclarationVisibilityError; } else { 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 || node.kind === 182) { return symbolAccessibilityResult.errorModuleName ? 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; } 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 ? 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 || node.kind === 149) { return symbolAccessibilityResult.errorModuleName ? 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 { 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; } } } function getVariableDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult); return diagnosticMessage !== undefined ? { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: node.name } : undefined; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; 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; } else { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? ts.Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1; } } else { if (ts.hasModifier(node, 32)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? 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 ? 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; } } return { diagnosticMessage: diagnosticMessage, errorNode: node.name, typeName: node.name }; } function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { 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: 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: 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: case 153: if (ts.hasModifier(node, 32)) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? 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) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? 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 { 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: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? 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; break; default: return ts.Debug.fail("This is unknown kind for signature: " + node.kind); } return { diagnosticMessage: diagnosticMessage, errorNode: node.name || node }; } function getParameterDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult); return diagnosticMessage !== undefined ? { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: node.name } : undefined; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { case 155: return symbolAccessibilityResult.errorModuleName ? 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: 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: 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: 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: case 153: if (ts.hasModifier(node.parent, 32)) { return symbolAccessibilityResult.errorModuleName ? 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) { return symbolAccessibilityResult.errorModuleName ? 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 { 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: case 163: return symbolAccessibilityResult.errorModuleName ? 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; default: return ts.Debug.fail("Unknown parent for parameter: " + ts.SyntaxKind[node.parent.kind]); } } function getTypeParameterConstraintVisibilityError() { var diagnosticMessage; switch (node.parent.kind) { case 235: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; case 236: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; case 159: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; case 158: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; 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) { 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: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; case 237: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1; break; default: return ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind); } return { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: node.name }; } function getHeritageClauseVisibilityError() { var diagnosticMessage; 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 { diagnosticMessage = ts.Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; } return { diagnosticMessage: diagnosticMessage, errorNode: node, typeName: ts.getNameOfDeclaration(node.parent.parent) }; } function getImportEntityNameVisibilityError() { return { diagnosticMessage: ts.Diagnostics.Import_declaration_0_is_using_private_name_1, errorNode: node, typeName: node.name }; } function getTypeAliasDeclarationVisibilityError() { return { diagnosticMessage: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1, errorNode: node.type, typeName: node.name }; } } ts.createGetSymbolAccessibilityDiagnosticForNode = createGetSymbolAccessibilityDiagnosticForNode; })(ts || (ts = {})); var ts; (function (ts) { function getDeclarationDiagnostics(host, resolver, file) { if (file && ts.isSourceFileJavaScript(file)) { return []; } var compilerOptions = host.getCompilerOptions(); 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 | 2048 | 4096 | 8 | 524288 | 4; function transformDeclarations(context) { var throwDiagnostic = function () { return ts.Debug.fail("Diagnostic emitted without context"); }; var getSymbolAccessibilityDiagnostic = throwDiagnostic; var needsDeclare = true; var isBundledEmit = false; var resultHasExternalModuleIndicator = false; var needsScopeFixMarker = false; var resultHasScopeMarker = false; var enclosingDeclaration; var necessaryTypeRefernces; var lateMarkedStatements; var lateStatementReplacementMap; var suppressNewDiagnosticContexts; var host = context.getEmitHost(); var symbolTracker = { trackSymbol: trackSymbol, reportInaccessibleThisError: reportInaccessibleThisError, reportInaccessibleUniqueSymbolError: reportInaccessibleUniqueSymbolError, reportPrivateInBaseOfClassExpression: reportPrivateInBaseOfClassExpression, moduleResolverHost: host, trackReferencedAmbientModule: trackReferencedAmbientModule, }; var errorNameNode; var currentSourceFile; var refs; var resolver = context.getEmitResolver(); var options = context.getCompilerOptions(); var newLine = ts.getNewLineCharacter(options); var noResolve = options.noResolve, stripInternal = options.stripInternal; return transformRoot; function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { if (!typeReferenceDirectives) { return; } necessaryTypeRefernces = necessaryTypeRefernces || ts.createMap(); for (var _i = 0, typeReferenceDirectives_2 = typeReferenceDirectives; _i < typeReferenceDirectives_2.length; _i++) { var ref = typeReferenceDirectives_2[_i]; necessaryTypeRefernces.set(ref, true); } } function trackReferencedAmbientModule(node) { var container = ts.getSourceFileOfNode(node); refs.set("" + ts.getOriginalNodeId(container), container); } function handleSymbolAccessibilityError(symbolAccessibilityResult) { if (symbolAccessibilityResult.accessibility === 0) { if (symbolAccessibilityResult && symbolAccessibilityResult.aliasesToMakeVisible) { if (!lateMarkedStatements) { lateMarkedStatements = symbolAccessibilityResult.aliasesToMakeVisible; } else { for (var _i = 0, _a = symbolAccessibilityResult.aliasesToMakeVisible; _i < _a.length; _i++) { var ref = _a[_i]; ts.pushIfUnique(lateMarkedStatements, ref); } } } } else { var errorInfo = getSymbolAccessibilityDiagnostic(symbolAccessibilityResult); if (errorInfo) { if (errorInfo.typeName) { context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, ts.getTextOfNode(errorInfo.typeName), symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName)); } else { context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName)); } } } } function trackSymbol(symbol, enclosingDeclaration, meaning) { if (symbol.flags & 262144) return; handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true)); recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportPrivateInBaseOfClassExpression(propertyName) { if (errorNameNode) { context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName)); } } function reportInaccessibleUniqueSymbolError() { if (errorNameNode) { context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol")); } } function reportInaccessibleThisError() { if (errorNameNode) { context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this")); } } function transformRoot(node) { if (node.kind === 274 && (node.isDeclarationFile || ts.isSourceFileJavaScript(node))) { return node; } 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; hasNoDefaultLib_1 = hasNoDefaultLib_1 || sourceFile.hasNoDefaultLib; currentSourceFile = sourceFile; enclosingDeclaration = sourceFile; lateMarkedStatements = undefined; suppressNewDiagnosticContexts = false; lateStatementReplacementMap = ts.createMap(); getSymbolAccessibilityDiagnostic = throwDiagnostic; needsScopeFixMarker = false; resultHasScopeMarker = false; collectReferences(sourceFile, refs_1); if (ts.isExternalModule(sourceFile)) { resultHasExternalModuleIndicator = false; needsDeclare = false; var statements_5 = ts.visitNodes(sourceFile.statements, visitDeclarationStatements); 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), true, [], [], false, []); }), ts.mapDefined(node.prepends, function (prepend) { if (prepend.kind === 277) { return ts.createUnparsedSourceFile(prepend.declarationText, prepend.declarationMapPath, prepend.declarationMapText); } })); bundle.syntheticFileReferences = []; bundle.syntheticTypeReferences = getFileReferencesForUsedTypeReferences(); bundle.hasNoDefaultLib = hasNoDefaultLib_1; 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; } needsDeclare = true; needsScopeFixMarker = false; resultHasScopeMarker = false; enclosingDeclaration = node; currentSourceFile = node; getSymbolAccessibilityDiagnostic = throwDiagnostic; isBundledEmit = false; resultHasExternalModuleIndicator = false; suppressNewDiagnosticContexts = false; lateMarkedStatements = undefined; lateStatementReplacementMap = ts.createMap(); necessaryTypeRefernces = undefined; refs = collectReferences(currentSourceFile, ts.createMap()); var references = []; 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(undefined, undefined, ts.createNamedExports([]), undefined)])), combinedStatements); } 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) { if (emittedImports) { for (var _i = 0, emittedImports_1 = emittedImports; _i < emittedImports_1.length; _i++) { var importStatement = emittedImports_1[_i]; if (ts.isImportEqualsDeclaration(importStatement) && ts.isExternalModuleReference(importStatement.moduleReference)) { var expr = importStatement.moduleReference.expression; if (ts.isStringLiteralLike(expr) && expr.text === typeName) { return undefined; } } else if (ts.isImportDeclaration(importStatement) && ts.isStringLiteral(importStatement.moduleSpecifier) && importStatement.moduleSpecifier.text === typeName) { return undefined; } } } return { fileName: typeName, pos: -1, end: -1 }; } function mapReferencesIntoArray(references, outputFilePath) { return function (file) { var declFileName; if (file.isDeclarationFile) { declFileName = file.fileName; } else { if (isBundledEmit && ts.contains(node.sourceFiles, file)) 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, false); if (ts.startsWith(fileName, "./") && ts.hasExtension(fileName)) { fileName = fileName.substring(2); } references.push({ pos: -1, end: -1, fileName: fileName }); } }; } } function collectReferences(sourceFile, ret) { if (noResolve || ts.isSourceFileJavaScript(sourceFile)) return ret; ts.forEach(sourceFile.referencedFiles, function (f) { var elem = ts.tryResolveScriptReference(host, sourceFile, f); if (elem) { ret.set("" + ts.getOriginalNodeId(elem), elem); } }); return ret; } function filterBindingPatternInitializers(name) { if (name.kind === 71) { return name; } else { if (name.kind === 181) { return ts.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement)); } else { return ts.updateObjectBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement)); } } function visitBindingElement(elem) { if (elem.kind === 206) { return elem; } return ts.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined); } } function ensureParameter(p, modifierMask) { var oldDiag; if (!suppressNewDiagnosticContexts) { oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(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)); } function ensureNoInitializer(node) { if (shouldPrintWithInitializer(node)) { return resolver.createLiteralConstValue(ts.getParseTreeNode(node)); } return undefined; } function ensureType(node, type, ignorePrivate) { if (!ignorePrivate && ts.hasModifier(node, 8)) { return; } if (shouldPrintWithInitializer(node)) { return; } 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); } if (node.kind === 157) { return ts.createKeywordTypeNode(119); } errorNameNode = node.name; var oldDiag; if (!suppressNewDiagnosticContexts) { oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node); } if (node.kind === 232 || node.kind === 182) { return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker)); } 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)); } return cleanup(resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker)); function cleanup(returnValue) { errorNameNode = undefined; if (!suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = oldDiag; } return returnValue || ts.createKeywordTypeNode(119); } } function isDeclarationAndNotVisible(node) { node = ts.getParseTreeNode(node); switch (node.kind) { case 234: case 239: case 236: case 235: case 237: case 238: return !resolver.isDeclarationVisible(node); case 232: return !getBindingNameVisible(node); case 243: case 244: case 250: case 249: return false; } return false; } function getBindingNameVisible(elem) { if (ts.isOmittedExpression(elem)) { return false; } if (ts.isBindingPattern(elem.name)) { return ts.some(elem.name.elements, getBindingNameVisible); } else { return resolver.isDeclarationVisible(elem); } } function updateParamsList(node, params, modifierMask) { if (ts.hasModifier(node, 8)) { return undefined; } var newParams = ts.map(params, function (p) { return ensureParameter(p, modifierMask); }); if (!newParams) { return undefined; } return ts.createNodeArray(newParams, params.hasTrailingComma); } function ensureTypeParams(node, params) { return ts.hasModifier(node, 8) ? undefined : ts.visitNodes(params, visitDeclarationSubtree); } function isEnclosingDeclaration(node) { return ts.isSourceFile(node) || ts.isTypeAliasDeclaration(node) || ts.isModuleDeclaration(node) || ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isFunctionLike(node) || ts.isIndexSignatureDeclaration(node) || ts.isMappedTypeNode(node); } function checkEntityNameVisibility(entityName, enclosingDeclaration) { var visibilityResult = resolver.isEntityNameVisible(entityName, enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); } function preserveJsDoc(updated, original) { if (ts.hasJSDocNodes(updated) && ts.hasJSDocNodes(original)) { updated.jsDoc = original.jsDoc; } return ts.setCommentRange(updated, ts.getCommentRange(original)); } function rewriteModuleSpecifier(parent, input) { if (!input) 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); } } return input; } function transformImportEqualsDeclaration(decl) { if (!resolver.isDeclarationVisible(decl)) return; if (decl.moduleReference.kind === 254) { var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl); return ts.updateImportEqualsDeclaration(decl, undefined, decl.modifiers, decl.name, ts.updateExternalModuleReference(decl.moduleReference, rewriteModuleSpecifier(decl, specifier))); } else { var oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(decl); checkEntityNameVisibility(decl.moduleReference, enclosingDeclaration); getSymbolAccessibilityDiagnostic = oldDiag; return decl; } } function transformImportDeclaration(decl) { if (!decl.importClause) { return ts.updateImportDeclaration(decl, undefined, decl.modifiers, decl.importClause, rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } var visibleDefaultBinding = decl.importClause && decl.importClause.name && resolver.isDeclarationVisible(decl.importClause) ? decl.importClause.name : undefined; if (!decl.importClause.namedBindings) { return visibleDefaultBinding && ts.updateImportDeclaration(decl, undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } 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; } 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, undefined, decl.modifiers, ts.updateImportClause(decl.importClause, visibleDefaultBinding, bindingList && bindingList.length ? ts.updateNamedImports(decl.importClause.namedBindings, bindingList) : undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier)); } } function transformAndReplaceLatePaintedStatements(statements) { 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, true); lateStatementReplacementMap.set("" + ts.getOriginalNodeId(i), result); } return ts.visitNodes(statements, visitLateVisibilityMarkedStatements); function visitLateVisibilityMarkedStatements(statement) { if (ts.isLateVisibilityPaintedStatement(statement)) { var key = "" + ts.getOriginalNodeId(statement); if (lateStatementReplacementMap.has(key)) { var result = lateStatementReplacementMap.get(key); lateStatementReplacementMap.delete(key); if (result && ts.isSourceFile(statement.parent)) { if (ts.isArray(result) ? ts.some(result, needsScopeMarker) : needsScopeMarker(result)) { needsScopeFixMarker = true; } if (ts.isArray(result) ? ts.some(result, isExternalModuleIndicator) : isExternalModuleIndicator(result)) { resultHasExternalModuleIndicator = true; } } return result; } } return statement; } } function isExternalModuleIndicator(result) { 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) && !ts.isAmbientModule(result); } function visitDeclarationSubtree(input) { if (shouldStripInternal(input)) return; if (ts.isDeclaration(input)) { if (isDeclarationAndNotVisible(input)) return; if (ts.hasDynamicName(input) && !resolver.isLateBound(ts.getParseTreeNode(input))) { return; } } if (ts.isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; if (ts.isSemicolonClassElement(input)) return; var previousEnclosingDeclaration; if (isEnclosingDeclaration(input)) { previousEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = input; } var oldDiag = getSymbolAccessibilityDiagnostic; if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) { if (ts.hasModifier(input, 8)) { if (input.symbol && input.symbol.declarations && input.symbol.declarations[0] !== input) return; return cleanup(ts.createProperty(undefined, ensureModifiers(input), input.name, undefined, undefined, undefined)); } } var canProdiceDiagnostic = ts.canProduceDiagnostics(input); if (canProdiceDiagnostic && !suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(input); } if (ts.isTypeQueryNode(input)) { checkEntityNameVisibility(input.exprName, enclosingDeclaration); } var oldWithinObjectLiteralType = suppressNewDiagnosticContexts; var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 166 || input.kind === 177) && input.parent.kind !== 237); if (shouldEnterSuppressNewDiagnosticsContextContext) { suppressNewDiagnosticContexts = true; } if (isProcessedComponent(input)) { switch (input.kind) { 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: { checkEntityNameVisibility(input.typeName, enclosingDeclaration); var node = ts.visitEachChild(input, visitDeclarationSubtree, context); return cleanup(ts.updateTypeReferenceNode(node, node.typeName, ts.parenthesizeTypeParameters(node.typeArguments))); } case 159: return cleanup(ts.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type))); 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: { 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: { var newNode = ensureAccessor(input); return cleanup(newNode); } case 157: { var newNode = ensureAccessor(input); return cleanup(newNode); } 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: { return cleanup(ts.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type))); } case 160: { return cleanup(ts.updateIndexSignature(input, undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || ts.createKeywordTypeNode(119))); } case 232: { if (ts.isBindingPattern(input.name)) { return recreateBindingPattern(input.name); } shouldEnterSuppressNewDiagnosticsContextContext = true; suppressNewDiagnosticContexts = true; return cleanup(ts.updateVariableDeclaration(input, input.name, ensureType(input, input.type), ensureNoInitializer(input))); } case 148: { if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) { return cleanup(ts.updateTypeParameterDeclaration(input, input.name, undefined, undefined)); } return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context)); } case 171: { var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree); var extendsType = ts.visitNode(input.extendsType, visitDeclarationSubtree); var oldEnclosingDecl = enclosingDeclaration; enclosingDeclaration = input.trueType; var trueType = ts.visitNode(input.trueType, visitDeclarationSubtree); enclosingDeclaration = oldEnclosingDecl; var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree); return cleanup(ts.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType)); } case 163: { return cleanup(ts.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree))); } case 164: { return cleanup(ts.updateConstructorTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree))); } 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)); } default: ts.Debug.assertNever(input, "Attempted to process unhandled node kind: " + ts.SyntaxKind[input.kind]); } } return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context)); function cleanup(returnValue) { if (returnValue && canProdiceDiagnostic && ts.hasDynamicName(input)) { checkName(input); } if (isEnclosingDeclaration(input)) { enclosingDeclaration = previousEnclosingDeclaration; } if (canProdiceDiagnostic && !suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = oldDiag; } if (shouldEnterSuppressNewDiagnosticsContextContext) { suppressNewDiagnosticContexts = oldWithinObjectLiteralType; } if (returnValue === input) { return returnValue; } return returnValue && ts.setOriginalNode(preserveJsDoc(returnValue, input), input); } } function isPrivateMethodTypeParameter(node) { return node.parent.kind === 154 && ts.hasModifier(node.parent, 8); } function visitDeclarationStatements(input) { if (!isPreservedDeclarationStatement(input)) { return; } if (shouldStripInternal(input)) return; switch (input.kind) { case 250: { if (ts.isSourceFile(input.parent)) { resultHasExternalModuleIndicator = true; resultHasScopeMarker = true; } return ts.updateExportDeclaration(input, undefined, input.modifiers, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier)); } case 249: { if (ts.isSourceFile(input.parent)) { resultHasExternalModuleIndicator = true; resultHasScopeMarker = true; } if (input.expression.kind === 71) { return input; } else { var newId = ts.createOptimisticUniqueName("_default"); getSymbolAccessibilityDiagnostic = function () { return ({ 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), 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); lateStatementReplacementMap.set("" + ts.getOriginalNodeId(input), result); return input; } function transformTopLevelDeclaration(input, isPrivate) { if (shouldStripInternal(input)) return; switch (input.kind) { case 243: { return transformImportEqualsDeclaration(input); } case 244: { return transformImportDeclaration(input); } } if (ts.isDeclaration(input) && isDeclarationAndNotVisible(input)) return; if (ts.isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; var previousEnclosingDeclaration; if (isEnclosingDeclaration(input)) { previousEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = input; } var canProdiceDiagnostic = ts.canProduceDiagnostics(input); var oldDiag = getSymbolAccessibilityDiagnostic; if (canProdiceDiagnostic) { getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(input); } var previousNeedsDeclare = needsDeclare; switch (input.kind) { 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: { 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: { needsDeclare = false; var inner = input.body; 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, 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); var id = "" + ts.getOriginalNodeId(inner); var body = lateStatementReplacementMap.get(id); lateStatementReplacementMap.delete(id); return cleanup(ts.updateModuleDeclaration(input, undefined, mods, input.name, body)); } } case 235: { var modifiers = ts.createNodeArray(ensureModifiers(input, isPrivate)); var typeParameters = ensureTypeParams(input, input.typeParameters); var ctor = ts.getFirstConstructorWithBody(input); var parameterProperties = void 0; if (ctor) { var oldDiag_1 = getSymbolAccessibilityDiagnostic; parameterProperties = ts.compact(ts.flatMap(ctor.parameters, function (param) { if (!ts.hasModifier(param, 92)) return; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(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 { return walkBindingPattern(param.name); } function walkBindingPattern(pattern) { var elems; for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { var elem = _a[_i]; if (ts.isOmittedExpression(elem)) continue; if (ts.isBindingPattern(elem.name)) { elems = ts.concatenate(elems, walkBindingPattern(elem.name)); } elems = elems || []; elems.push(ts.createProperty(undefined, ensureModifiers(param), elem.name, undefined, ensureType(elem, undefined), undefined)); } return elems; } })); getSymbolAccessibilityDiagnostic = oldDiag_1; } 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) { 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), 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) { 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; })), visitDeclarationSubtree)); })); return [statement, cleanup(ts.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; } else { var heritageClauses = transformHeritageClauses(input.heritageClauses); return cleanup(ts.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members)); } } case 214: { return cleanup(transformVariableStatement(input, isPrivate)); } 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; var constValue = resolver.getConstantValue(m); return preserveJsDoc(ts.updateEnumMember(m, m.name, constValue !== undefined ? ts.createLiteral(constValue) : undefined), m); })))); } } return ts.Debug.assertNever(input, "Unhandled top-level node in declaration emit: " + ts.SyntaxKind[input.kind]); function cleanup(node) { if (isEnclosingDeclaration(input)) { enclosingDeclaration = previousEnclosingDeclaration; } if (canProdiceDiagnostic) { getSymbolAccessibilityDiagnostic = oldDiag; } if (input.kind === 239) { needsDeclare = previousNeedsDeclare; } if (node === input) { return node; } return node && ts.setOriginalNode(preserveJsDoc(node, input), input); } } function transformVariableStatement(input, privateDeclaration) { if (!ts.forEach(input.declarationList.declarations, getBindingNameVisible)) return; var nodes = ts.visitNodes(input.declarationList.declarations, visitDeclarationSubtree); if (!ts.length(nodes)) return; return ts.updateVariableStatement(input, ts.createNodeArray(ensureModifiers(input, privateDeclaration)), ts.updateVariableDeclarationList(input.declarationList, nodes)); } function recreateBindingPattern(d) { return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); })); } function recreateBindingElement(e) { if (e.kind === 206) { return; } if (e.name) { if (!getBindingNameVisible(e)) return; if (ts.isBindingPattern(e.name)) { return recreateBindingPattern(e.name); } else { return ts.createVariableDeclaration(e.name, ensureType(e, undefined), undefined); } } } function checkName(node) { var oldDiag; if (!suppressNewDiagnosticContexts) { oldDiag = getSymbolAccessibilityDiagnostic; getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNodeName(node); } errorNameNode = node.name; ts.Debug.assert(resolver.isLateBound(ts.getParseTreeNode(node))); var decl = node; var entityName = decl.name.expression; checkEntityNameVisibility(entityName, enclosingDeclaration); if (!suppressNewDiagnosticContexts) { getSymbolAccessibilityDiagnostic = oldDiag; } errorNameNode = undefined; } function hasInternalAnnotation(range) { var comment = currentSourceFile.text.substring(range.pos, range.end); return ts.stringContains(comment, "@internal"); } function shouldStripInternal(node) { if (stripInternal && node) { var leadingCommentRanges = ts.getLeadingCommentRangesOfNode(ts.getParseTreeNode(node), currentSourceFile); if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) { return true; } } return false; } function ensureModifiers(node, privateDeclaration) { var currentFlags = ts.getModifierFlags(node); var newFlags = ensureModifierFlags(node, privateDeclaration); if (currentFlags === newFlags) { return node.modifiers; } return ts.createModifiersFromModifierFlags(newFlags); } function ensureModifierFlags(node, privateDeclaration) { 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) | 512 | 2); additions = 0; } return maskModifierFlags(node, mask, additions); } function ensureAccessor(node) { var accessors = resolver.getAllAccessorDeclarations(node); if (node.kind !== accessors.firstAccessor.kind) { return; } var accessorType = getTypeAnnotationFromAccessor(node); if (!accessorType && accessors.secondAccessor) { accessorType = getTypeAnnotationFromAccessor(accessors.secondAccessor); getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(accessors.secondAccessor); } 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) { var text = currentSourceFile.text.slice(range.pos + 2, range.end - 2); var lines = text.split(/\r\n?|\n/g); if (lines.length > 1) { var lastLines = lines.slice(1); var indentation_1 = ts.guessIndentation(lastLines); text = [lines[0]].concat(ts.map(lastLines, function (l) { return l.slice(indentation_1); })).join(newLine); } ts.addSyntheticLeadingComment(prop, range.kind, text, range.hasTrailingNewLine); } }; for (var _i = 0, leadingsSyntheticCommentRanges_1 = leadingsSyntheticCommentRanges; _i < leadingsSyntheticCommentRanges_1.length; _i++) { var range = leadingsSyntheticCommentRanges_1[_i]; _loop_10(range); } } return prop; } 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 && t.expression.kind === 95); })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; })); } } ts.transformDeclarations = transformDeclarations; function isAlwaysType(node) { if (node.kind === 236) { return true; } return false; } function maskModifiers(node, modifierMask, modifierAdditions) { return ts.createModifiersFromModifierFlags(maskModifierFlags(node, modifierMask, modifierAdditions)); } function maskModifierFlags(node, modifierMask, modifierAdditions) { if (modifierMask === void 0) { modifierMask = 3071 ^ 4; } if (modifierAdditions === void 0) { modifierAdditions = 0; } var flags = (ts.getModifierFlags(node) & modifierMask) | modifierAdditions; if (flags & 512 && flags & 2) { flags ^= 2; } return flags; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { return accessor.kind === 156 ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type : undefined; } } function canHaveLiteralInitializer(node) { switch (node.kind) { case 232: case 152: case 151: case 149: return true; } return false; } function isPreservedDeclarationStatement(node) { switch (node.kind) { 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: 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 = {})); var ts; (function (ts) { function getModuleTransformer(moduleKind) { switch (moduleKind) { case ts.ModuleKind.ESNext: case ts.ModuleKind.ES2015: return ts.transformES2015Module; case ts.ModuleKind.System: return ts.transformSystemModule; default: 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); var moduleKind = ts.getEmitModuleKind(compilerOptions); var transformers = []; ts.addRange(transformers, customTransformers && customTransformers.before); transformers.push(ts.transformTypeScript); if (jsx === 2) { transformers.push(ts.transformJsx); } if (languageVersion < 6) { transformers.push(ts.transformESNext); } if (languageVersion < 4) { transformers.push(ts.transformES2017); } if (languageVersion < 3) { transformers.push(ts.transformES2016); } if (languageVersion < 2) { transformers.push(ts.transformES2015); transformers.push(ts.transformGenerators); } transformers.push(getModuleTransformer(moduleKind)); if (languageVersion < 1) { transformers.push(ts.transformES5); } ts.addRange(transformers, customTransformers && customTransformers.after); return transformers; } ts.getTransformers = getTransformers; function transformNodes(resolver, host, options, nodes, transformers, allowDtsFiles) { var enabledSyntaxKindFeatures = new Array(306); var lexicalEnvironmentVariableDeclarations; var lexicalEnvironmentFunctionDeclarations; var lexicalEnvironmentVariableDeclarationsStack = []; var lexicalEnvironmentFunctionDeclarationsStack = []; var lexicalEnvironmentStackOffset = 0; var lexicalEnvironmentSuspended = false; var emitHelpers; var onSubstituteNode = function (_, node) { return node; }; var onEmitNode = function (hint, node, callback) { return callback(hint, node); }; var state = 0; var diagnostics = []; var context = { getCompilerOptions: function () { return options; }, getEmitResolver: function () { return resolver; }, getEmitHost: function () { return host; }, startLexicalEnvironment: startLexicalEnvironment, suspendLexicalEnvironment: suspendLexicalEnvironment, resumeLexicalEnvironment: resumeLexicalEnvironment, endLexicalEnvironment: endLexicalEnvironment, hoistVariableDeclaration: hoistVariableDeclaration, hoistFunctionDeclaration: hoistFunctionDeclaration, requestEmitHelper: requestEmitHelper, readEmitHelpers: readEmitHelpers, enableSubstitution: enableSubstitution, enableEmitNotification: enableEmitNotification, isSubstitutionEnabled: isSubstitutionEnabled, isEmitNotificationEnabled: isEmitNotificationEnabled, get onSubstituteNode() { return onSubstituteNode; }, set onSubstituteNode(value) { 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, "Cannot modify transformation hooks after initialization has completed."); ts.Debug.assert(value !== undefined, "Value must not be 'undefined'"); onEmitNode = value; }, addDiagnostic: function (diag) { diagnostics.push(diag); } }; 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"); var transformation = ts.chain.apply(void 0, transformers)(context); state = 1; var transformed = ts.map(nodes, allowDtsFiles ? transformation : transformRoot); state = 2; ts.performance.mark("afterTransform"); ts.performance.measure("transformTime", "beforeTransform", "afterTransform"); return { transformed: transformed, substituteNode: substituteNode, emitNodeWithNotification: emitNodeWithNotification, dispose: dispose, diagnostics: diagnostics }; function transformRoot(node) { return node && (!ts.isSourceFile(node) || !node.isDeclarationFile) ? transformation(node) : node; } function enableSubstitution(kind) { ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); enabledSyntaxKindFeatures[kind] |= 1; } function isSubstitutionEnabled(node) { return (enabledSyntaxKindFeatures[node.kind] & 1) !== 0 && (ts.getEmitFlags(node) & 4) === 0; } function substituteNode(hint, node) { ts.Debug.assert(state < 3, "Cannot substitute a node after the result is disposed."); return node && isSubstitutionEnabled(node) && onSubstituteNode(hint, node) || node; } function enableEmitNotification(kind) { ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed."); enabledSyntaxKindFeatures[kind] |= 2; } function isEmitNotificationEnabled(node) { return (enabledSyntaxKindFeatures[node.kind] & 2) !== 0 || (ts.getEmitFlags(node) & 2) !== 0; } function emitNodeWithNotification(hint, node, emitCallback) { ts.Debug.assert(state < 3, "Cannot invoke TransformationResult callbacks after the result is disposed."); if (node) { if (isEmitNotificationEnabled(node)) { onEmitNode(hint, node, emitCallback); } else { emitCallback(hint, node); } } } function hoistVariableDeclaration(name) { 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]; } else { lexicalEnvironmentVariableDeclarations.push(decl); } } function hoistFunctionDeclaration(func) { 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]; } else { lexicalEnvironmentFunctionDeclarations.push(func); } } function startLexicalEnvironment() { 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."); lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentVariableDeclarations; lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFunctionDeclarations; lexicalEnvironmentStackOffset++; lexicalEnvironmentVariableDeclarations = undefined; lexicalEnvironmentFunctionDeclarations = undefined; } function suspendLexicalEnvironment() { 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; } function resumeLexicalEnvironment() { 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; } function endLexicalEnvironment() { 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) { if (lexicalEnvironmentFunctionDeclarations) { statements = lexicalEnvironmentFunctionDeclarations.slice(); } if (lexicalEnvironmentVariableDeclarations) { var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations)); if (!statements) { statements = [statement]; } else { statements.push(statement); } } } lexicalEnvironmentStackOffset--; lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset]; lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset]; if (lexicalEnvironmentStackOffset === 0) { lexicalEnvironmentVariableDeclarationsStack = []; lexicalEnvironmentFunctionDeclarationsStack = []; } return statements; } function requestEmitHelper(helper) { 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, "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) { for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { var node = nodes_5[_i]; ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node))); } lexicalEnvironmentVariableDeclarations = undefined; lexicalEnvironmentVariableDeclarationsStack = undefined; lexicalEnvironmentFunctionDeclarations = undefined; lexicalEnvironmentFunctionDeclarationsStack = undefined; onSubstituteNode = undefined; onEmitNode = undefined; emitHelpers = undefined; state = 3; } } } ts.transformNodes = transformNodes; })(ts || (ts = {})); var ts; (function (ts) { var defaultLastEncodedSourceMapSpan = { emittedLine: 0, emittedColumn: 0, sourceLine: 0, sourceColumn: 0, sourceIndex: 0 }; function createSourceMapWriter(host, writer, compilerOptions) { if (compilerOptions === void 0) { compilerOptions = host.getCompilerOptions(); } var extendedDiagnostics = compilerOptions.extendedDiagnostics; var currentSource; var currentSourceText; var sourceMapDir; var sourceMapSourceIndex; var lastRecordedSourceMapSpan; var lastEncodedSourceMapSpan; var lastEncodedNameIndex; var sourceMapData; var sourceMapDataList; var disabled = !(compilerOptions.sourceMap || compilerOptions.inlineSourceMap); return { initialize: initialize, reset: reset, setSourceFile: setSourceFile, emitPos: emitPos, emitNodeWithSourceMap: emitNodeWithSourceMap, emitTokenWithSourceMap: emitTokenWithSourceMap, getText: getText, getSourceMappingURL: getSourceMappingURL, }; function skipSourceTrivia(pos) { return currentSource.skipTrivia ? currentSource.skipTrivia(pos) : ts.skipTrivia(currentSourceText, pos); } function initialize(filePath, sourceMapFilePath, sourceFileOrBundle, outputSourceMapDataList) { if (disabled || ts.fileExtensionIs(filePath, ".json")) { return; } if (sourceMapData) { reset(); } sourceMapDataList = outputSourceMapDataList; currentSource = undefined; currentSourceText = undefined; sourceMapSourceIndex = -1; lastRecordedSourceMapSpan = undefined; lastEncodedSourceMapSpan = defaultLastEncodedSourceMapSpan; lastEncodedNameIndex = 0; sourceMapData = { sourceMapFilePath: sourceMapFilePath, jsSourceMappingURL: !compilerOptions.inlineSourceMap ? ts.getBaseFileName(ts.normalizeSlashes(sourceMapFilePath)) : undefined, sourceMapFile: ts.getBaseFileName(ts.normalizeSlashes(filePath)), sourceMapSourceRoot: compilerOptions.sourceRoot || "", sourceMapSources: [], inputSourceFileNames: [], sourceMapNames: [], sourceMapMappings: "", sourceMapSourcesContent: compilerOptions.inlineSources ? [] : undefined, sourceMapDecodedMappings: [] }; sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); 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) { sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFileOrBundle, host, sourceMapDir)); } if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir); 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); } } else { sourceMapDir = ts.getDirectoryPath(ts.normalizePath(filePath)); } } function reset() { if (disabled) { return; } if (sourceMapDataList) { sourceMapDataList.push(sourceMapData); } currentSource = undefined; sourceMapDir = undefined; sourceMapSourceIndex = undefined; lastRecordedSourceMapSpan = undefined; lastEncodedSourceMapSpan = undefined; lastEncodedNameIndex = undefined; sourceMapData = undefined; sourceMapDataList = undefined; } function captureSection() { return { version: 3, file: sourceMapData.sourceMapFile, sourceRoot: sourceMapData.sourceMapSourceRoot, sources: sourceMapData.sourceMapSources, names: sourceMapData.sourceMapNames, mappings: sourceMapData.sourceMapMappings, sourcesContent: sourceMapData.sourceMapSourcesContent, }; } function encodeLastRecordedSourceMapSpan() { if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { return; } ts.Debug.assert(lastRecordedSourceMapSpan.emittedColumn >= 0, "lastEncodedSourceMapSpan.emittedColumn was negative"); ts.Debug.assert(lastRecordedSourceMapSpan.sourceIndex >= 0, "lastEncodedSourceMapSpan.sourceIndex was negative"); ts.Debug.assert(lastRecordedSourceMapSpan.sourceLine >= 0, "lastEncodedSourceMapSpan.sourceLine was negative"); ts.Debug.assert(lastRecordedSourceMapSpan.sourceColumn >= 0, "lastEncodedSourceMapSpan.sourceColumn was negative"); var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn; if (lastEncodedSourceMapSpan.emittedLine === lastRecordedSourceMapSpan.emittedLine) { if (sourceMapData.sourceMapMappings) { sourceMapData.sourceMapMappings += ","; } } else { for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) { sourceMapData.sourceMapMappings += ";"; } prevEncodedEmittedColumn = 0; } sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn); sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex); sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine); sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn); 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); lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex; } lastEncodedSourceMapSpan = lastRecordedSourceMapSpan; sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan); } function emitPos(pos) { if (disabled || ts.positionIsSynthesized(pos) || isJsonSourceMapSource(currentSource)) { return; } if (extendedDiagnostics) { ts.performance.mark("beforeSourcemap"); } var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSource, pos); var emittedLine = writer.getLine(); var emittedColumn = writer.getColumn(); if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine !== emittedLine || lastRecordedSourceMapSpan.emittedColumn !== emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) { encodeLastRecordedSourceMapSpan(); lastRecordedSourceMapSpan = { emittedLine: emittedLine, emittedColumn: emittedColumn, sourceLine: sourceLinePos.line, sourceColumn: sourceLinePos.character, sourceIndex: sourceMapSourceIndex }; } else { lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; } if (extendedDiagnostics) { ts.performance.mark("afterSourcemap"); ts.performance.measure("Source Map", "beforeSourcemap", "afterSourcemap"); } } function isPossiblySourceMap(x) { return typeof x === "object" && !!x.mappings && typeof x.mappings === "string" && !!x.sources; } function emitNodeWithSourceMap(hint, node, emitCallback) { if (disabled || ts.isInJsonFile(node)) { return emitCallback(hint, node); } if (node) { if (ts.isUnparsedSource(node) && node.sourceMapText !== undefined) { var text = node.sourceMapText; var parsed = void 0; try { parsed = JSON.parse(text); } catch (_a) { } if (!parsed || !isPossiblySourceMap(parsed)) { return emitCallback(hint, node); } var offsetLine_1 = writer.getLine(); var firstLineColumnOffset_1 = writer.getColumn(); var originalMap_1 = parsed; ts.sourcemaps.calculateDecodedMappings(originalMap_1, function (raw) { var rawPath = originalMap_1.sources[raw.sourceIndex]; var relativePath = originalMap_1.sourceRoot ? ts.combinePaths(originalMap_1.sourceRoot, rawPath) : rawPath; var combinedPath = ts.combinePaths(ts.getDirectoryPath(node.sourceMapPath), relativePath); var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; var resolvedPath = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, combinedPath, host.getCurrentDirectory(), host.getCanonicalFileName, true); var absolutePath = ts.getNormalizedAbsolutePath(resolvedPath, sourcesDirectoryPath); setupSourceEntry(absolutePath, originalMap_1.sourcesContent ? originalMap_1.sourcesContent[raw.sourceIndex] : null); var newIndex = sourceMapData.sourceMapSources.indexOf(resolvedPath); encodeLastRecordedSourceMapSpan(); lastRecordedSourceMapSpan = __assign({}, raw, { emittedLine: raw.emittedLine + offsetLine_1, emittedColumn: raw.emittedLine === 0 ? (raw.emittedColumn + firstLineColumnOffset_1) : raw.emittedColumn, sourceIndex: newIndex }); }); return emitCallback(hint, node); } var emitNode = node.emitNode; 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; var oldSource = currentSource; if (source === oldSource) source = undefined; if (source) setSourceFile(source); if (node.kind !== 301 && (emitFlags & 16) === 0 && pos >= 0) { emitPos(skipSourceTrivia(pos)); } if (source) setSourceFile(oldSource); if (emitFlags & 64) { disabled = true; emitCallback(hint, node); disabled = false; } else { emitCallback(hint, node); } if (source) setSourceFile(source); if (node.kind !== 301 && (emitFlags & 32) === 0 && end >= 0) { emitPos(end); } if (source) setSourceFile(oldSource); } } 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; var range = emitNode && emitNode.tokenSourceMapRanges && emitNode.tokenSourceMapRanges[token]; tokenPos = skipSourceTrivia(range ? range.pos : tokenPos); if ((emitFlags & 128) === 0 && tokenPos >= 0) { emitPos(tokenPos); } tokenPos = emitCallback(token, writer, tokenPos); if (range) tokenPos = range.end; if ((emitFlags & 256) === 0 && tokenPos >= 0) { emitPos(tokenPos); } return tokenPos; } function isJsonSourceMapSource(sourceFile) { return ts.fileExtensionIs(sourceFile.fileName, ".json"); } function setSourceFile(sourceFile) { if (disabled) { return; } currentSource = sourceFile; currentSourceText = currentSource.text; if (isJsonSourceMapSource(sourceFile)) { return; } setupSourceEntry(sourceFile.fileName, sourceFile.text); } function setupSourceEntry(fileName, content) { var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true); sourceMapSourceIndex = sourceMapData.sourceMapSources.indexOf(source); if (sourceMapSourceIndex === -1) { sourceMapSourceIndex = sourceMapData.sourceMapSources.length; sourceMapData.sourceMapSources.push(source); sourceMapData.inputSourceFileNames.push(fileName); if (compilerOptions.inlineSources) { sourceMapData.sourceMapSourcesContent.push(content); } } } function getText() { if (disabled || isJsonSourceMapSource(currentSource)) { return undefined; } encodeLastRecordedSourceMapSpan(); return JSON.stringify(captureSection()); } function getSourceMappingURL() { if (disabled || isJsonSourceMapSource(currentSource)) { return undefined; } if (compilerOptions.inlineSourceMap) { var base64SourceMapText = ts.base64encode(ts.sys, getText()); return sourceMapData.jsSourceMappingURL = "data:application/json;base64," + base64SourceMapText; } else { return sourceMapData.jsSourceMappingURL; } } } ts.createSourceMapWriter = createSourceMapWriter; var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function base64FormatEncode(inValue) { if (inValue < 64) { return base64Chars.charAt(inValue); } throw TypeError(inValue + ": not a 64 based value"); } function base64VLQFormatEncode(inValue) { if (inValue < 0) { inValue = ((-inValue) << 1) + 1; } else { inValue = inValue << 1; } var encodedStr = ""; do { var currentDigit = inValue & 31; inValue = inValue >> 5; if (inValue > 0) { currentDigit = currentDigit | 32; } encodedStr = encodedStr + base64FormatEncode(currentDigit); } while (inValue > 0); return encodedStr; } })(ts || (ts = {})); var ts; (function (ts) { function createCommentWriter(printerOptions, emitPos) { var extendedDiagnostics = printerOptions.extendedDiagnostics; var newLine = ts.getNewLineCharacter(printerOptions); var writer; var containerPos = -1; var containerEnd = -1; var declarationListContainerEnd = -1; var currentSourceFile; var currentText; var currentLineMap; var detachedCommentsInfo; var hasWrittenComment = false; var disabled = !!printerOptions.removeComments; return { reset: reset, setWriter: setWriter, setSourceFile: setSourceFile, emitNodeWithComments: emitNodeWithComments, emitBodyWithDetachedComments: emitBodyWithDetachedComments, emitTrailingCommentsOfPosition: emitTrailingCommentsOfPosition, emitLeadingCommentsOfPosition: emitLeadingCommentsOfPosition, }; function emitNodeWithComments(hint, node, emitCallback) { if (disabled) { emitCallback(hint, node); return; } if (node) { hasWrittenComment = false; var emitNode = node.emitNode; 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)) { emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback); } else { if (extendedDiagnostics) { ts.performance.mark("preEmitNodeWithComment"); } var isEmittedNode = node.kind !== 301; 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); } var savedContainerPos = containerPos; var savedContainerEnd = containerEnd; var savedDeclarationListContainerEnd = declarationListContainerEnd; if (!skipLeadingComments) { containerPos = pos; } if (!skipTrailingComments) { containerEnd = end; if (node.kind === 233) { declarationListContainerEnd = end; } } if (extendedDiagnostics) { ts.performance.measure("commentTime", "preEmitNodeWithComment"); } emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback); if (extendedDiagnostics) { ts.performance.mark("postEmitNodeWithComment"); } containerPos = savedContainerPos; containerEnd = savedContainerEnd; declarationListContainerEnd = savedDeclarationListContainerEnd; if (!skipTrailingComments && isEmittedNode) { emitTrailingComments(end); } if (extendedDiagnostics) { ts.performance.measure("commentTime", "postEmitNodeWithComment"); } } } } function emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback) { var leadingComments = emitNode && emitNode.leadingComments; if (ts.some(leadingComments)) { if (extendedDiagnostics) { ts.performance.mark("preEmitNodeWithSynthesizedComments"); } ts.forEach(leadingComments, emitLeadingSynthesizedComment); if (extendedDiagnostics) { ts.performance.measure("commentTime", "preEmitNodeWithSynthesizedComments"); } } emitNodeWithNestedComments(hint, node, emitFlags, emitCallback); var trailingComments = emitNode && emitNode.trailingComments; if (ts.some(trailingComments)) { if (extendedDiagnostics) { ts.performance.mark("postEmitNodeWithSynthesizedComments"); } ts.forEach(trailingComments, emitTrailingSynthesizedComment); if (extendedDiagnostics) { ts.performance.measure("commentTime", "postEmitNodeWithSynthesizedComments"); } } } function emitLeadingSynthesizedComment(comment) { if (comment.kind === 2) { writer.writeLine(); } writeSynthesizedComment(comment); if (comment.hasTrailingNewLine || comment.kind === 2) { writer.writeLine(); } else { writer.write(" "); } } function emitTrailingSynthesizedComment(comment) { if (!writer.isAtStartOfLine()) { writer.write(" "); } writeSynthesizedComment(comment); if (comment.hasTrailingNewLine) { writer.writeLine(); } } function writeSynthesizedComment(comment) { var text = formatSynthesizedComment(comment); 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 ? "/*" + comment.text + "*/" : "//" + comment.text; } function emitNodeWithNestedComments(hint, node, emitFlags, emitCallback) { if (emitFlags & 2048) { disabled = true; emitCallback(hint, node); disabled = false; } else { emitCallback(hint, node); } } function emitBodyWithDetachedComments(node, detachedRange, emitCallback) { if (extendedDiagnostics) { ts.performance.mark("preEmitBodyWithDetachedComments"); } var pos = detachedRange.pos, end = detachedRange.end; var emitFlags = ts.getEmitFlags(node); 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 && !disabled) { disabled = true; emitCallback(node); disabled = false; } else { emitCallback(node); } if (extendedDiagnostics) { ts.performance.mark("beginEmitBodyWithDetachedCommetns"); } if (!skipTrailingComments) { emitLeadingComments(detachedRange.end, true); if (hasWrittenComment && !writer.isAtStartOfLine()) { writer.writeLine(); } } if (extendedDiagnostics) { ts.performance.measure("commentTime", "beginEmitBodyWithDetachedCommetns"); } } function emitLeadingComments(pos, isEmittedNode) { hasWrittenComment = false; if (isEmittedNode) { forEachLeadingCommentToEmit(pos, emitLeadingComment); } else if (pos === 0) { forEachLeadingCommentToEmit(pos, emitTripleSlashLeadingComment); } } function emitTripleSlashLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) { if (isTripleSlashComment(commentPos, commentEnd)) { emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos); } } function shouldWriteComment(text, pos) { if (printerOptions.onlyPrintJsDocStyle) { return (ts.isJSDocLikeText(text, pos) || ts.isPinnedComment(text, pos)); } return true; } function emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) { if (!shouldWriteComment(currentText, commentPos)) return; if (!hasWrittenComment) { ts.emitNewLineBeforeLeadingCommentOfPosition(currentLineMap, writer, rangePos, commentPos); hasWrittenComment = true; } if (emitPos) emitPos(commentPos); ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine); if (emitPos) emitPos(commentEnd); if (hasTrailingNewLine) { writer.writeLine(); } else if (kind === 3) { writer.write(" "); } } function emitLeadingCommentsOfPosition(pos) { if (disabled || pos === -1) { return; } emitLeadingComments(pos, true); } function emitTrailingComments(pos) { forEachTrailingCommentToEmit(pos, emitTrailingComment); } function emitTrailingComment(commentPos, commentEnd, _kind, hasTrailingNewLine) { if (!shouldWriteComment(currentText, commentPos)) return; if (!writer.isAtStartOfLine()) { writer.write(" "); } if (emitPos) emitPos(commentPos); ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine); if (emitPos) emitPos(commentEnd); if (hasTrailingNewLine) { writer.writeLine(); } } function emitTrailingCommentsOfPosition(pos, prefixSpace) { if (disabled) { return; } if (extendedDiagnostics) { ts.performance.mark("beforeEmitTrailingCommentsOfPosition"); } forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : emitTrailingCommentOfPosition); if (extendedDiagnostics) { ts.performance.measure("commentTime", "beforeEmitTrailingCommentsOfPosition"); } } function emitTrailingCommentOfPosition(commentPos, commentEnd, _kind, hasTrailingNewLine) { if (emitPos) emitPos(commentPos); ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine); if (emitPos) emitPos(commentEnd); if (hasTrailingNewLine) { writer.writeLine(); } else { writer.write(" "); } } function forEachLeadingCommentToEmit(pos, cb) { if (containerPos === -1 || pos !== containerPos) { if (hasDetachedComments(pos)) { forEachLeadingCommentWithoutDetachedComments(cb); } else { ts.forEachLeadingCommentRange(currentText, pos, cb, pos); } } } function forEachTrailingCommentToEmit(end, cb) { if (containerEnd === -1 || (end !== containerEnd && end !== declarationListContainerEnd)) { ts.forEachTrailingCommentRange(currentText, end, cb); } } function reset() { currentSourceFile = undefined; currentText = undefined; currentLineMap = undefined; detachedCommentsInfo = undefined; } function setWriter(output) { writer = output; } function setSourceFile(sourceFile) { currentSourceFile = sourceFile; currentText = currentSourceFile.text; currentLineMap = ts.getLineStarts(currentSourceFile); detachedCommentsInfo = undefined; } function hasDetachedComments(pos) { return detachedCommentsInfo !== undefined && ts.last(detachedCommentsInfo).nodePos === pos; } function forEachLeadingCommentWithoutDetachedComments(cb) { var pos = ts.last(detachedCommentsInfo).detachedCommentEndPos; if (detachedCommentsInfo.length - 1) { detachedCommentsInfo.pop(); } else { detachedCommentsInfo = undefined; } ts.forEachLeadingCommentRange(currentText, pos, cb, pos); } function emitDetachedCommentsAndUpdateCommentsInfo(range) { var currentDetachedCommentInfo = ts.emitDetachedComments(currentText, currentLineMap, writer, writeComment, range, newLine, disabled); if (currentDetachedCommentInfo) { if (detachedCommentsInfo) { detachedCommentsInfo.push(currentDetachedCommentInfo); } else { detachedCommentsInfo = [currentDetachedCommentInfo]; } } } function writeComment(text, lineMap, writer, commentPos, commentEnd, newLine) { if (!shouldWriteComment(currentText, commentPos)) return; if (emitPos) emitPos(commentPos); ts.writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine); if (emitPos) emitPos(commentEnd); } function isTripleSlashComment(commentPos, commentEnd) { return ts.isRecognizedTripleSlashComment(currentText, commentPos, commentEnd); } } ts.createCommentWriter = createCommentWriter; })(ts || (ts = {})); var ts; (function (ts) { var infoExtension = ".tsbundleinfo"; var brackets = createBracketsMap(); function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, emitOnlyDtsFiles) { if (emitOnlyDtsFiles === void 0) { emitOnlyDtsFiles = false; } var sourceFiles = ts.isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : ts.getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile); var options = host.getCompilerOptions(); if (options.outFile || options.out) { if (sourceFiles.length) { var bundle = ts.createBundle(sourceFiles, host.getPrependNodes()); var result = action(getOutputPathsFor(bundle, host, emitOnlyDtsFiles), bundle); if (result) { return result; } } } else { for (var _a = 0, sourceFiles_1 = sourceFiles; _a < sourceFiles_1.length; _a++) { var sourceFile = sourceFiles_1[_a]; var result = action(getOutputPathsFor(sourceFile, host, emitOnlyDtsFiles), sourceFile); if (result) { return result; } } } } ts.forEachEmittedFile = forEachEmittedFile; function getOutputPathsFor(sourceFile, host, forceDtsPaths) { var options = host.getCompilerOptions(); 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" : 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 }; } else { var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, getOutputExtension(sourceFile, options)); var sourceMapFilePath = ts.isJsonSourceFile(sourceFile) ? undefined : getSourceMapFilePath(jsFilePath, options); var isJs = ts.isSourceFileJavaScript(sourceFile); var declarationFilePath = ((forceDtsPaths || options.declaration) && !isJs) ? ts.getDeclarationEmitOutputFilePath(sourceFile, host) : undefined; var declarationMapPath = ts.getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined; return { jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath, declarationMapPath: declarationMapPath, bundleInfoPath: undefined }; } } ts.getOutputPathsFor = getOutputPathsFor; function getSourceMapFilePath(jsFilePath, options) { return (options.sourceMap && !options.inlineSourceMap) ? jsFilePath + ".map" : undefined; } function createDefaultBundleInfo() { return { originalOffset: -1, totalLength: -1 }; } function getOutputExtension(sourceFile, options) { if (ts.isJsonSourceFile(sourceFile)) { return ".json"; } if (options.jsx === 1) { if (ts.isSourceFileJavaScript(sourceFile)) { if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) { return ".jsx"; } } else if (sourceFile.languageVariant === 1) { return ".jsx"; } } return ".js"; } ts.getOutputExtension = getOutputExtension; function emitFiles(resolver, host, targetSourceFile, emitOnlyDtsFiles, transformers, declarationTransformers) { var compilerOptions = host.getCompilerOptions(); var sourceMapDataList = (compilerOptions.sourceMap || compilerOptions.inlineSourceMap || ts.getAreDeclarationMapsEnabled(compilerOptions)) ? [] : undefined; var emittedFilesList = compilerOptions.listEmittedFiles ? [] : undefined; var emitterDiagnostics = ts.createDiagnosticCollection(); var newLine = host.getNewLine(); var writer = ts.createTextWriter(newLine); var sourceMap = ts.createSourceMapWriter(host, writer); var declarationSourceMap = ts.createSourceMapWriter(host, writer, { sourceMap: compilerOptions.declarationMap, sourceRoot: compilerOptions.sourceRoot, mapRoot: compilerOptions.mapRoot, extendedDiagnostics: compilerOptions.extendedDiagnostics, }); var bundleInfo = createDefaultBundleInfo(); var emitSkipped = false; ts.performance.mark("beforePrint"); forEachEmittedFile(host, emitSourceFileOrBundle, ts.getSourceFilesToEmit(host, targetSourceFile), emitOnlyDtsFiles); ts.performance.measure("printTime", "beforePrint"); return { emitSkipped: emitSkipped, diagnostics: emitterDiagnostics.getDiagnostics(), emittedFiles: emittedFilesList, sourceMaps: sourceMapDataList, }; function emitSourceFileOrBundle(_a, sourceFileOrBundle) { var jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath, declarationMapPath = _a.declarationMapPath, bundleInfoPath = _a.bundleInfoPath; emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath, bundleInfoPath); emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath); if (!emitSkipped && emittedFilesList) { if (!emitOnlyDtsFiles) { emittedFilesList.push(jsFilePath); } if (sourceMapFilePath) { emittedFilesList.push(sourceMapFilePath); } if (declarationFilePath) { emittedFilesList.push(declarationFilePath); } if (bundleInfoPath) { emittedFilesList.push(bundleInfoPath); } } } function emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath, bundleInfoPath) { if (host.isEmitBlocked(jsFilePath) || compilerOptions.noEmit || compilerOptions.emitDeclarationOnly) { emitSkipped = true; return; } if (emitOnlyDtsFiles) { return; } var transform = ts.transformNodes(resolver, host, compilerOptions, [sourceFileOrBundle], transformers, false); var printer = createPrinter(__assign({}, compilerOptions, { noEmitHelpers: compilerOptions.noEmitHelpers }), { hasGlobalName: resolver.hasGlobalName, onEmitNode: transform.emitNodeWithNotification, substituteNode: transform.substituteNode, onEmitSourceMapOfNode: sourceMap.emitNodeWithSourceMap, onEmitSourceMapOfToken: sourceMap.emitTokenWithSourceMap, onEmitSourceMapOfPosition: sourceMap.emitPos, 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); transform.dispose(); } function emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath) { if (!(declarationFilePath && !ts.isInJavaScriptFile(sourceFileOrBundle))) { return; } var sourceFiles = ts.isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles; 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), false); if (ts.length(declarationTransform.diagnostics)) { for (var _a = 0, _b = declarationTransform.diagnostics; _a < _b.length; _a++) { var diagnostic = _b[_a]; emitterDiagnostics.add(diagnostic); } } var declarationPrinter = createPrinter(__assign({}, compilerOptions, { onlyPrintJsDocStyle: true, noEmitHelpers: true }), { hasGlobalName: resolver.hasGlobalName, onEmitSourceMapOfNode: declarationSourceMap.emitNodeWithSourceMap, onEmitSourceMapOfToken: declarationSourceMap.emitTokenWithSourceMap, onEmitSourceMapOfPosition: declarationSourceMap.emitPos, onSetSourceFile: setSourceFileForDeclarationSourceMaps, onEmitNode: declarationTransform.emitNodeWithNotification, substituteNode: declarationTransform.substituteNode, }); var declBlocked = (!!declarationTransform.diagnostics && !!declarationTransform.diagnostics.length) || !!host.isEmitBlocked(declarationFilePath) || !!compilerOptions.noEmit; 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], undefined, declarationPrinter, declarationSourceMap); } declarationTransform.dispose(); } function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, bundleInfoPath, printer, mapRecorder) { 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) { printer.writeBundle(bundle, writer, bundleInfo); } else { printer.writeFile(sourceFile, writer); } writer.writeLine(); var sourceMappingURL = mapRecorder.getSourceMappingURL(); if (sourceMappingURL) { writer.write("//# " + "sourceMappingURL" + "=" + sourceMappingURL); } if (sourceMapFilePath) { ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, mapRecorder.getText(), false, sourceFiles); } ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), !!compilerOptions.emitBOM, sourceFiles); if (bundleInfoPath) { bundleInfo.totalLength = writer.getTextPos(); ts.writeFile(host, emitterDiagnostics, bundleInfoPath, JSON.stringify(bundleInfo, undefined, 2), false); } mapRecorder.reset(); writer.clear(); bundleInfo = createDefaultBundleInfo(); } function setSourceFile(node) { sourceMap.setSourceFile(node); } function setSourceFileForDeclarationSourceMaps(node) { declarationSourceMap.setSourceFile(node); } } 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 = {}; } var hasGlobalName = handlers.hasGlobalName, onEmitSourceMapOfNode = handlers.onEmitSourceMapOfNode, onEmitSourceMapOfToken = handlers.onEmitSourceMapOfToken, onEmitSourceMapOfPosition = handlers.onEmitSourceMapOfPosition, onEmitNode = handlers.onEmitNode, onSetSourceFile = handlers.onSetSourceFile, substituteNode = handlers.substituteNode, onBeforeEmitNodeArray = handlers.onBeforeEmitNodeArray, onAfterEmitNodeArray = handlers.onAfterEmitNodeArray, onBeforeEmitToken = handlers.onBeforeEmitToken, onAfterEmitToken = handlers.onAfterEmitToken; var newLine = ts.getNewLineCharacter(printerOptions); var comments = ts.createCommentWriter(printerOptions, onEmitSourceMapOfPosition); var emitNodeWithComments = comments.emitNodeWithComments, emitBodyWithDetachedComments = comments.emitBodyWithDetachedComments, emitTrailingCommentsOfPosition = comments.emitTrailingCommentsOfPosition, emitLeadingCommentsOfPosition = comments.emitLeadingCommentsOfPosition; var currentSourceFile; var nodeIdToGeneratedName; var autoGeneratedIdToGeneratedName; var generatedNames; var tempFlagsStack; var tempFlags; var reservedNamesStack; var reservedNames; var writer; var ownWriter; var write = writeBase; var commitPendingSemicolon = ts.noop; var writeSemicolon = writeSemicolonInternal; var pendingSemicolon = false; if (printerOptions.omitTrailingSemicolon) { commitPendingSemicolon = commitPendingSemicolonInternal; writeSemicolon = deferWriteSemicolon; } var syntheticParent = { pos: -1, end: -1 }; var moduleKind = ts.getEmitModuleKind(printerOptions); var bundledHelpers = ts.createMap(); var isOwnFileEmit; reset(); return { printNode: printNode, printList: printList, printFile: printFile, printBundle: printBundle, writeNode: writeNode, writeList: writeList, writeFile: writeFile, writeBundle: writeBundle }; function printNode(hint, node, sourceFile) { switch (hint) { case 0: ts.Debug.assert(ts.isSourceFile(node), "Expected a SourceFile node."); break; case 2: ts.Debug.assert(ts.isIdentifier(node), "Expected an Identifier node."); break; case 1: ts.Debug.assert(ts.isExpression(node), "Expected an Expression node."); break; } switch (node.kind) { case 274: return printFile(node); case 275: return printBundle(node); case 276: return printUnparsedSource(node); } writeNode(hint, node, sourceFile, beginPrint()); return endPrint(); } function printList(format, nodes, sourceFile) { writeList(format, nodes, sourceFile, beginPrint()); return endPrint(); } function printBundle(bundle) { writeBundle(bundle, beginPrint()); return endPrint(); } function printFile(sourceFile) { writeFile(sourceFile, beginPrint()); return endPrint(); } function printUnparsedSource(unparsed) { writeUnparsedSource(unparsed, beginPrint()); return endPrint(); } function writeNode(hint, node, sourceFile, output) { var previousWriter = writer; setWriter(output); print(hint, node, sourceFile); reset(); writer = previousWriter; } function writeList(format, nodes, sourceFile, output) { var previousWriter = writer; setWriter(output); if (sourceFile) { setSourceFile(sourceFile); } emitList(syntheticParent, nodes, format); reset(); writer = previousWriter; } function writeBundle(bundle, output, bundleInfo) { isOwnFileEmit = false; var previousWriter = writer; setWriter(output); emitShebangIfNeeded(bundle); emitPrologueDirectivesIfNeeded(bundle); emitHelpers(bundle); emitSyntheticTripleSlashReferencesIfNeeded(bundle); for (var _a = 0, _b = bundle.prepends; _a < _b.length; _a++) { var prepend = _b[_a]; print(4, prepend, undefined); writeLine(); } if (bundleInfo) { bundleInfo.originalOffset = writer.getTextPos(); } for (var _c = 0, _d = bundle.sourceFiles; _c < _d.length; _c++) { var sourceFile = _d[_c]; print(0, sourceFile, sourceFile); } reset(); writer = previousWriter; } function writeUnparsedSource(unparsed, output) { var previousWriter = writer; setWriter(output); print(4, unparsed, undefined); reset(); writer = previousWriter; } function writeFile(sourceFile, output) { isOwnFileEmit = true; var previousWriter = writer; setWriter(output); emitShebangIfNeeded(sourceFile); emitPrologueDirectivesIfNeeded(sourceFile); print(0, sourceFile, sourceFile); reset(); writer = previousWriter; } function beginPrint() { return ownWriter || (ownWriter = ts.createTextWriter(newLine)); } function endPrint() { var text = ownWriter.getText(); ownWriter.clear(); return text; } function print(hint, node, sourceFile) { if (sourceFile) { setSourceFile(sourceFile); } var pipelinePhase = getPipelinePhase(0, hint); pipelinePhase(hint, node); } function setSourceFile(sourceFile) { currentSourceFile = sourceFile; comments.setSourceFile(sourceFile); if (onSetSourceFile) { onSetSourceFile(sourceFile); } } function setWriter(output) { writer = output; comments.setWriter(output); } function reset() { nodeIdToGeneratedName = []; autoGeneratedIdToGeneratedName = []; generatedNames = ts.createMap(); tempFlagsStack = []; tempFlags = 0; reservedNamesStack = []; comments.reset(); setWriter(undefined); } function emit(node) { if (!node) return; var pipelinePhase = getPipelinePhase(0, 4); pipelinePhase(4, node); } function emitIdentifierName(node) { if (!node) return; var pipelinePhase = getPipelinePhase(0, 2); pipelinePhase(2, node); } function emitExpression(node) { if (!node) return; var pipelinePhase = getPipelinePhase(0, 1); pipelinePhase(1, node); } function getPipelinePhase(phase, hint) { switch (phase) { case 0: if (onEmitNode) { return pipelineEmitWithNotification; } case 1: if (emitNodeWithComments && hint !== 0) { return pipelineEmitWithComments; } return pipelineEmitWithoutComments; case 2: if (onEmitSourceMapOfNode && hint !== 0 && hint !== 2) { return pipelineEmitWithSourceMap; } case 3: return pipelineEmitWithHint; default: return ts.Debug.assertNever(phase, "Unexpected value for PipelinePhase: " + phase); } } function getNextPipelinePhase(currentPhase, hint) { return getPipelinePhase(currentPhase + 1, hint); } function pipelineEmitWithNotification(hint, node) { ts.Debug.assertDefined(onEmitNode)(hint, node, getNextPipelinePhase(0, hint)); } function pipelineEmitWithComments(hint, node) { ts.Debug.assertDefined(emitNodeWithComments); ts.Debug.assert(hint !== 0); emitNodeWithComments(hint, trySubstituteNode(hint, node), getNextPipelinePhase(1, hint)); } function pipelineEmitWithoutComments(hint, node) { var pipelinePhase = getNextPipelinePhase(1, hint); pipelinePhase(hint, trySubstituteNode(hint, node)); } function pipelineEmitWithSourceMap(hint, node) { ts.Debug.assert(hint !== 0 && hint !== 2); ts.Debug.assertDefined(onEmitSourceMapOfNode)(hint, node, pipelineEmitWithHint); } function pipelineEmitWithHint(hint, node) { if (hint === 0) return emitSourceFile(ts.cast(node, ts.isSourceFile)); if (hint === 2) return emitIdentifier(ts.cast(node, ts.isIdentifier)); if (hint === 3) return emitMappedTypeParameter(ts.cast(node, ts.isTypeParameterDeclaration)); if (hint === 4) { if (ts.isKeyword(node.kind)) return writeTokenNode(node, writeKeyword); switch (node.kind) { case 14: case 15: case 16: return emitLiteral(node); case 276: return emitUnparsedSource(node); case 71: return emitIdentifier(node); case 146: return emitQualifiedName(node); case 147: return emitComputedPropertyName(node); case 148: return emitTypeParameter(node); case 149: return emitParameter(node); case 150: return emitDecorator(node); case 151: return emitPropertySignature(node); case 152: return emitPropertyDeclaration(node); case 153: return emitMethodSignature(node); case 154: return emitMethodDeclaration(node); case 155: return emitConstructor(node); case 156: case 157: return emitAccessorDeclaration(node); case 158: return emitCallSignature(node); case 159: return emitConstructSignature(node); case 160: return emitIndexSignature(node); case 161: return emitTypePredicate(node); case 162: return emitTypeReference(node); case 163: return emitFunctionType(node); case 284: return emitJSDocFunctionType(node); case 164: return emitConstructorType(node); case 165: return emitTypeQuery(node); case 166: return emitTypeLiteral(node); case 167: return emitArrayType(node); case 168: return emitTupleType(node); case 169: return emitUnionType(node); case 170: return emitIntersectionType(node); case 171: return emitConditionalType(node); case 172: return emitInferType(node); case 173: return emitParenthesizedType(node); case 207: return emitExpressionWithTypeArguments(node); case 174: return emitThisType(); case 175: return emitTypeOperator(node); case 176: return emitIndexedAccessType(node); case 177: return emitMappedType(node); case 178: return emitLiteralType(node); case 179: return emitImportTypeNode(node); case 279: write("*"); return; case 280: write("?"); return; case 281: return emitJSDocNullableType(node); case 282: return emitJSDocNonNullableType(node); case 283: return emitJSDocOptionalType(node); case 285: return emitJSDocVariadicType(node); case 180: return emitObjectBindingPattern(node); case 181: return emitArrayBindingPattern(node); case 182: return emitBindingElement(node); case 211: return emitTemplateSpan(node); case 212: return emitSemicolonClassElement(); case 213: return emitBlock(node); case 214: return emitVariableStatement(node); case 215: return emitEmptyStatement(); case 216: return emitExpressionStatement(node); case 217: return emitIfStatement(node); case 218: return emitDoStatement(node); case 219: return emitWhileStatement(node); case 220: return emitForStatement(node); case 221: return emitForInStatement(node); case 222: return emitForOfStatement(node); case 223: return emitContinueStatement(node); case 224: return emitBreakStatement(node); case 225: return emitReturnStatement(node); case 226: return emitWithStatement(node); case 227: return emitSwitchStatement(node); case 228: return emitLabeledStatement(node); case 229: return emitThrowStatement(node); case 230: return emitTryStatement(node); case 231: return emitDebuggerStatement(node); case 232: return emitVariableDeclaration(node); case 233: return emitVariableDeclarationList(node); case 234: return emitFunctionDeclaration(node); case 235: return emitClassDeclaration(node); case 236: return emitInterfaceDeclaration(node); case 237: return emitTypeAliasDeclaration(node); case 238: return emitEnumDeclaration(node); case 239: return emitModuleDeclaration(node); case 240: return emitModuleBlock(node); case 241: return emitCaseBlock(node); case 242: return emitNamespaceExportDeclaration(node); case 243: return emitImportEqualsDeclaration(node); case 244: return emitImportDeclaration(node); case 245: return emitImportClause(node); case 246: return emitNamespaceImport(node); case 247: return emitNamedImports(node); case 248: return emitImportSpecifier(node); case 249: return emitExportAssignment(node); case 250: return emitExportDeclaration(node); case 251: return emitNamedExports(node); case 252: return emitExportSpecifier(node); case 253: return; case 254: return emitExternalModuleReference(node); case 10: return emitJsxText(node); case 257: case 260: return emitJsxOpeningElementOrFragment(node); case 258: case 261: return emitJsxClosingElementOrFragment(node); case 262: return emitJsxAttribute(node); case 263: return emitJsxAttributes(node); case 264: return emitJsxSpreadAttribute(node); case 265: return emitJsxExpression(node); case 266: return emitCaseClause(node); case 267: return emitDefaultClause(node); case 268: return emitHeritageClause(node); case 269: return emitCatchClause(node); case 270: return emitPropertyAssignment(node); case 271: return emitShorthandPropertyAssignment(node); case 272: return emitSpreadAssignment(node); case 273: return emitEnumMember(node); } if (ts.isExpression(node)) { hint = 1; node = trySubstituteNode(1, node); } else if (ts.isToken(node)) { return writeTokenNode(node, writePunctuation); } } if (hint === 1) { switch (node.kind) { case 8: return emitNumericLiteral(node); case 9: case 12: case 13: return emitLiteral(node); case 71: return emitIdentifier(node); case 86: case 95: case 97: case 101: case 99: case 91: writeTokenNode(node, writeKeyword); return; case 183: return emitArrayLiteralExpression(node); case 184: return emitObjectLiteralExpression(node); case 185: return emitPropertyAccessExpression(node); case 186: return emitElementAccessExpression(node); case 187: return emitCallExpression(node); case 188: return emitNewExpression(node); case 189: return emitTaggedTemplateExpression(node); case 190: return emitTypeAssertionExpression(node); case 191: return emitParenthesizedExpression(node); case 192: return emitFunctionExpression(node); case 193: return emitArrowFunction(node); case 194: return emitDeleteExpression(node); case 195: return emitTypeOfExpression(node); case 196: return emitVoidExpression(node); case 197: return emitAwaitExpression(node); case 198: return emitPrefixUnaryExpression(node); case 199: return emitPostfixUnaryExpression(node); case 200: return emitBinaryExpression(node); case 201: return emitConditionalExpression(node); case 202: return emitTemplateExpression(node); case 203: return emitYieldExpression(node); case 204: return emitSpreadExpression(node); case 205: return emitClassExpression(node); case 206: return; case 208: return emitAsExpression(node); case 209: return emitNonNullExpression(node); case 210: return emitMetaProperty(node); case 255: return emitJsxElement(node); case 256: return emitJsxSelfClosingElement(node); case 259: return emitJsxFragment(node); case 302: return emitPartiallyEmittedExpression(node); case 303: return emitCommaList(node); } } } function emitMappedTypeParameter(node) { emit(node.name); writeSpace(); writeKeyword("in"); writeSpace(); emit(node.constraint); } function trySubstituteNode(hint, node) { return node && substituteNode && substituteNode(hint, node) || node; } function emitHelpers(node) { var helpersEmitted = false; var bundle = node.kind === 275 ? node : undefined; if (bundle && moduleKind === ts.ModuleKind.None) { return; } var numNodes = bundle ? bundle.sourceFiles.length : 1; for (var i = 0; i < numNodes; i++) { var currentNode = bundle ? bundle.sourceFiles[i] : node; var sourceFile = ts.isSourceFile(currentNode) ? currentNode : currentSourceFile; var shouldSkip = printerOptions.noEmitHelpers || ts.getExternalHelpersModuleName(sourceFile) !== undefined; var shouldBundle = ts.isSourceFile(currentNode) && !isOwnFileEmit; var helpers = ts.getEmitHelpers(currentNode); if (helpers) { for (var _a = 0, _b = ts.stableSort(helpers, ts.compareEmitHelpers); _a < _b.length; _a++) { var helper = _b[_a]; if (!helper.scoped) { if (shouldSkip) continue; if (shouldBundle) { if (bundledHelpers.get(helper.name)) { continue; } bundledHelpers.set(helper.name, true); } } else if (bundle) { continue; } if (typeof helper.text === "string") { writeLines(helper.text); } else { writeLines(helper.text(makeFileLevelOptmiisticUniqueName)); } helpersEmitted = true; } } } return helpersEmitted; } function emitNumericLiteral(node) { emitLiteral(node); } function emitLiteral(node) { var text = getLiteralTextOfNode(node); if ((printerOptions.sourceMap || printerOptions.inlineSourceMap) && (node.kind === 9 || ts.isTemplateLiteralKind(node.kind))) { writeLiteral(text); } else { writeStringLiteral(text); } } function emitUnparsedSource(unparsed) { writer.rawWrite(unparsed.text); } function emitIdentifier(node) { var writeText = node.symbol ? writeSymbol : write; writeText(getTextOfNode(node, false), node.symbol); emitList(node, node.typeArguments, 26896); } function emitQualifiedName(node) { emitEntityName(node.left); writePunctuation("."); emit(node.right); } function emitEntityName(node) { if (node.kind === 71) { emitExpression(node); } else { emit(node); } } function emitComputedPropertyName(node) { writePunctuation("["); emitExpression(node.expression); writePunctuation("]"); } function emitTypeParameter(node) { emit(node.name); if (node.constraint) { writeSpace(); writeKeyword("extends"); writeSpace(); emit(node.constraint); } if (node.default) { writeSpace(); writeOperator("="); writeSpace(); emit(node.default); } } function emitParameter(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emit(node.dotDotDotToken); emitNodeWithWriter(node.name, writeParameter); emit(node.questionToken); if (node.parent && node.parent.kind === 284 && !node.name) { emit(node.type); } else { emitTypeAnnotation(node.type); } 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); } function emitPropertySignature(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emitNodeWithWriter(node.name, writeProperty); emit(node.questionToken); emitTypeAnnotation(node.type); writeSemicolon(); } function emitPropertyDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emit(node.name); emit(node.questionToken); emit(node.exclamationToken); emitTypeAnnotation(node.type); emitInitializer(node.initializer, node.type ? node.type.end : node.questionToken ? node.questionToken.end : node.name.end, node); writeSemicolon(); } function emitMethodSignature(node) { pushNameGenerationScope(node); emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emit(node.name); emit(node.questionToken); emitTypeParameters(node, node.typeParameters); emitParameters(node, node.parameters); emitTypeAnnotation(node.type); writeSemicolon(); popNameGenerationScope(node); } function emitMethodDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emit(node.asteriskToken); emit(node.name); emit(node.questionToken); emitSignatureAndBody(node, emitSignatureHead); } function emitConstructor(node) { emitModifiers(node, node.modifiers); writeKeyword("constructor"); emitSignatureAndBody(node, emitSignatureHead); } function emitAccessorDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword(node.kind === 156 ? "get" : "set"); writeSpace(); emit(node.name); emitSignatureAndBody(node, emitSignatureHead); } function emitCallSignature(node) { pushNameGenerationScope(node); emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emitTypeParameters(node, node.typeParameters); emitParameters(node, node.parameters); emitTypeAnnotation(node.type); writeSemicolon(); popNameGenerationScope(node); } function emitConstructSignature(node) { pushNameGenerationScope(node); emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword("new"); writeSpace(); emitTypeParameters(node, node.typeParameters); emitParameters(node, node.parameters); emitTypeAnnotation(node.type); writeSemicolon(); popNameGenerationScope(node); } function emitIndexSignature(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emitParametersForIndexSignature(node, node.parameters); emitTypeAnnotation(node.type); writeSemicolon(); } function emitSemicolonClassElement() { writeSemicolon(); } function emitTypePredicate(node) { emit(node.parameterName); writeSpace(); writeKeyword("is"); writeSpace(); emit(node.type); } function emitTypeReference(node) { emit(node.typeName); emitTypeArguments(node, node.typeArguments); } function emitFunctionType(node) { pushNameGenerationScope(node); emitTypeParameters(node, node.typeParameters); emitParametersForArrow(node, node.parameters); writeSpace(); writePunctuation("=>"); writeSpace(); emit(node.type); popNameGenerationScope(node); } function emitJSDocFunctionType(node) { write("function"); emitParameters(node, node.parameters); write(":"); emit(node.type); } function emitJSDocNullableType(node) { write("?"); emit(node.type); } function emitJSDocNonNullableType(node) { write("!"); emit(node.type); } function emitJSDocOptionalType(node) { emit(node.type); write("="); } function emitConstructorType(node) { pushNameGenerationScope(node); writeKeyword("new"); writeSpace(); emitTypeParameters(node, node.typeParameters); emitParameters(node, node.parameters); writeSpace(); writePunctuation("=>"); writeSpace(); emit(node.type); popNameGenerationScope(node); } function emitTypeQuery(node) { writeKeyword("typeof"); writeSpace(); emit(node.exprName); } function emitTypeLiteral(node) { writePunctuation("{"); var flags = ts.getEmitFlags(node) & 1 ? 384 : 16449; emitList(node, node.members, flags | 262144); writePunctuation("}"); } function emitArrayType(node) { emit(node.elementType); writePunctuation("["); writePunctuation("]"); } function emitJSDocVariadicType(node) { write("..."); emit(node.type); } function emitTupleType(node) { writePunctuation("["); emitList(node, node.elementTypes, 272); writePunctuation("]"); } function emitUnionType(node) { emitList(node, node.types, 260); } function emitIntersectionType(node) { emitList(node, node.types, 264); } function emitConditionalType(node) { emit(node.checkType); writeSpace(); writeKeyword("extends"); writeSpace(); emit(node.extendsType); writeSpace(); writePunctuation("?"); writeSpace(); emit(node.trueType); writeSpace(); writePunctuation(":"); writeSpace(); emit(node.falseType); } function emitInferType(node) { writeKeyword("infer"); writeSpace(); emit(node.typeParameter); } function emitParenthesizedType(node) { writePunctuation("("); emit(node.type); writePunctuation(")"); } function emitThisType() { writeKeyword("this"); } function emitTypeOperator(node) { writeTokenText(node.operator, writeKeyword); writeSpace(); emit(node.type); } function emitIndexedAccessType(node) { emit(node.objectType); writePunctuation("["); emit(node.indexType); writePunctuation("]"); } function emitMappedType(node) { var emitFlags = ts.getEmitFlags(node); writePunctuation("{"); if (emitFlags & 1) { writeSpace(); } else { writeLine(); increaseIndent(); } if (node.readonlyToken) { emit(node.readonlyToken); if (node.readonlyToken.kind !== 132) { writeKeyword("readonly"); } writeSpace(); } writePunctuation("["); var pipelinePhase = getPipelinePhase(0, 3); pipelinePhase(3, node.typeParameter); writePunctuation("]"); if (node.questionToken) { emit(node.questionToken); if (node.questionToken.kind !== 55) { writePunctuation("?"); } } writePunctuation(":"); writeSpace(); emit(node.type); writeSemicolon(); if (emitFlags & 1) { writeSpace(); } else { writeLine(); decreaseIndent(); } writePunctuation("}"); } function emitLiteralType(node) { emitExpression(node.literal); } function emitImportTypeNode(node) { if (node.isTypeOf) { writeKeyword("typeof"); writeSpace(); } writeKeyword("import"); writePunctuation("("); emit(node.argument); writePunctuation(")"); if (node.qualifier) { writePunctuation("."); emit(node.qualifier); } emitTypeArguments(node, node.typeArguments); } function emitObjectBindingPattern(node) { writePunctuation("{"); emitList(node, node.elements, 262576); writePunctuation("}"); } function emitArrayBindingPattern(node) { writePunctuation("["); emitList(node, node.elements, 262448); writePunctuation("]"); } function emitBindingElement(node) { emit(node.dotDotDotToken); if (node.propertyName) { emit(node.propertyName); writePunctuation(":"); writeSpace(); } emit(node.name); emitInitializer(node.initializer, node.name.end, node); } function emitArrayLiteralExpression(node) { var elements = node.elements; 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; if (indentedFlag) { increaseIndent(); } 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(); } } function emitPropertyAccessExpression(node) { var indentBeforeDot = false; var indentAfterDot = false; 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.pos = dotRangeStart; dotToken.end = dotRangeEnd; indentBeforeDot = needsIndentation(node, node.expression, dotToken); indentAfterDot = needsIndentation(node, dotToken, node.name); } emitExpression(node.expression); increaseIndentIf(indentBeforeDot); var shouldEmitDotDot = !indentBeforeDot && needsDotDotForPropertyAccess(node.expression); if (shouldEmitDotDot) { writePunctuation("."); } emitTokenWithComment(23, node.expression.end, writePunctuation, node); increaseIndentIf(indentAfterDot); emit(node.name); decreaseIndentIf(indentBeforeDot, indentAfterDot); } function needsDotDotForPropertyAccess(expression) { expression = ts.skipPartiallyEmittedExpressions(expression); if (ts.isNumericLiteral(expression)) { var text = getLiteralTextOfNode(expression); return !expression.numericLiteralFlags && !ts.stringContains(text, ts.tokenToString(23)); } else if (ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) { var constantValue = ts.getConstantValue(expression); return typeof constantValue === "number" && isFinite(constantValue) && Math.floor(constantValue) === constantValue && printerOptions.removeComments; } } function emitElementAccessExpression(node) { emitExpression(node.expression); emitTokenWithComment(21, node.expression.end, writePunctuation, node); emitExpression(node.argumentExpression); emitTokenWithComment(22, node.argumentExpression.end, writePunctuation, node); } function emitCallExpression(node) { emitExpression(node.expression); emitTypeArguments(node, node.typeArguments); emitExpressionList(node, node.arguments, 1296); } function emitNewExpression(node) { emitTokenWithComment(94, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); emitTypeArguments(node, node.typeArguments); emitExpressionList(node, node.arguments, 9488); } function emitTaggedTemplateExpression(node) { emitExpression(node.tag); emitTypeArguments(node, node.typeArguments); writeSpace(); emitExpression(node.template); } function emitTypeAssertionExpression(node) { writePunctuation("<"); emit(node.type); writePunctuation(">"); emitExpression(node.expression); } function emitParenthesizedExpression(node) { var openParenPos = emitTokenWithComment(19, node.pos, writePunctuation, node); emitExpression(node.expression); emitTokenWithComment(20, node.expression ? node.expression.end : openParenPos, writePunctuation, node); } function emitFunctionExpression(node) { generateNameIfNeeded(node.name); emitFunctionDeclarationOrExpression(node); } function emitArrowFunction(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); emitSignatureAndBody(node, emitArrowFunctionHead); } function emitArrowFunctionHead(node) { emitTypeParameters(node, node.typeParameters); emitParametersForArrow(node, node.parameters); emitTypeAnnotation(node.type); writeSpace(); emit(node.equalsGreaterThanToken); } function emitDeleteExpression(node) { emitTokenWithComment(80, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitTypeOfExpression(node) { emitTokenWithComment(103, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitVoidExpression(node) { emitTokenWithComment(105, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitAwaitExpression(node) { emitTokenWithComment(121, node.pos, writeKeyword, node); writeSpace(); emitExpression(node.expression); } function emitPrefixUnaryExpression(node) { writeTokenText(node.operator, writeOperator); if (shouldEmitWhitespaceBeforeOperand(node)) { writeSpace(); } emitExpression(node.operand); } function shouldEmitWhitespaceBeforeOperand(node) { var operand = node.operand; 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; 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, true); increaseIndentIf(indentAfterOperator, " "); emitExpression(node.right); decreaseIndentIf(indentBeforeOperator, indentAfterOperator); } function emitConditionalExpression(node) { var indentBeforeQuestion = needsIndentation(node, node.condition, node.questionToken); var indentAfterQuestion = needsIndentation(node, node.questionToken, node.whenTrue); var indentBeforeColon = needsIndentation(node, node.whenTrue, node.colonToken); var indentAfterColon = needsIndentation(node, node.colonToken, node.whenFalse); emitExpression(node.condition); increaseIndentIf(indentBeforeQuestion, " "); emit(node.questionToken); increaseIndentIf(indentAfterQuestion, " "); emitExpression(node.whenTrue); decreaseIndentIf(indentBeforeQuestion, indentAfterQuestion); increaseIndentIf(indentBeforeColon, " "); emit(node.colonToken); increaseIndentIf(indentAfterColon, " "); emitExpression(node.whenFalse); decreaseIndentIf(indentBeforeColon, indentAfterColon); } function emitTemplateExpression(node) { emit(node.head); emitList(node, node.templateSpans, 131072); } function emitYieldExpression(node) { emitTokenWithComment(116, node.pos, writeKeyword, node); emit(node.asteriskToken); emitExpressionWithLeadingSpace(node.expression); } function emitSpreadExpression(node) { writePunctuation("..."); emitExpression(node.expression); } function emitClassExpression(node) { generateNameIfNeeded(node.name); emitClassDeclarationOrExpression(node); } function emitExpressionWithTypeArguments(node) { emitExpression(node.expression); emitTypeArguments(node, node.typeArguments); } function emitAsExpression(node) { emitExpression(node.expression); if (node.type) { writeSpace(); writeKeyword("as"); writeSpace(); emit(node.type); } } function emitNonNullExpression(node) { emitExpression(node.expression); writeOperator("!"); } function emitMetaProperty(node) { writeToken(node.keywordToken, node.pos, writePunctuation); writePunctuation("."); emit(node.name); } function emitTemplateSpan(node) { emitExpression(node.expression); emit(node.literal); } function emitBlock(node) { emitBlockStatements(node, !node.multiLine && isEmptyBlock(node)); } function emitBlockStatements(node, forceSingleLine) { emitTokenWithComment(17, node.pos, writePunctuation, node); var format = forceSingleLine || ts.getEmitFlags(node) & 1 ? 384 : 65; emitList(node, node.statements, format); emitTokenWithComment(18, node.statements.end, writePunctuation, node, !!(format & 1)); } function emitVariableStatement(node) { emitModifiers(node, node.modifiers); emit(node.declarationList); writeSemicolon(); } function emitEmptyStatement() { writeSemicolon(); } function emitExpressionStatement(node) { emitExpression(node.expression); if (!ts.isJsonSourceFile(currentSourceFile)) { writeSemicolon(); } } function emitIfStatement(node) { var openParenPos = emitTokenWithComment(90, node.pos, writeKeyword, node); writeSpace(); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.thenStatement); if (node.elseStatement) { writeLineOrSpace(node); emitTokenWithComment(82, node.thenStatement.end, writeKeyword, node); if (node.elseStatement.kind === 217) { writeSpace(); emit(node.elseStatement); } else { emitEmbeddedStatement(node, node.elseStatement); } } } function emitWhileClause(node, startPos) { var openParenPos = emitTokenWithComment(106, startPos, writeKeyword, node); writeSpace(); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); } function emitDoStatement(node) { emitTokenWithComment(81, node.pos, writeKeyword, node); emitEmbeddedStatement(node, node.statement); if (ts.isBlock(node.statement)) { writeSpace(); } else { writeLineOrSpace(node); } emitWhileClause(node, node.statement.end); writePunctuation(";"); } function emitWhileStatement(node) { emitWhileClause(node, node.pos); emitEmbeddedStatement(node, node.statement); } function emitForStatement(node) { var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); var pos = emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); pos = emitTokenWithComment(25, node.initializer ? node.initializer.end : pos, writeSemicolon, node); emitExpressionWithLeadingSpace(node.condition); pos = emitTokenWithComment(25, node.condition ? node.condition.end : pos, writeSemicolon, node); emitExpressionWithLeadingSpace(node.incrementor); emitTokenWithComment(20, node.incrementor ? node.incrementor.end : pos, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForInStatement(node) { var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); writeSpace(); emitTokenWithComment(92, node.initializer.end, writeKeyword, node); writeSpace(); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForOfStatement(node) { var openParenPos = emitTokenWithComment(88, node.pos, writeKeyword, node); writeSpace(); emitWithTrailingSpace(node.awaitModifier); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitForBinding(node.initializer); writeSpace(); emitTokenWithComment(145, node.initializer.end, writeKeyword, node); writeSpace(); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitForBinding(node) { if (node !== undefined) { if (node.kind === 233) { emit(node); } else { emitExpression(node); } } } function emitContinueStatement(node) { emitTokenWithComment(77, node.pos, writeKeyword, node); emitWithLeadingSpace(node.label); writeSemicolon(); } function emitBreakStatement(node) { emitTokenWithComment(72, node.pos, writeKeyword, node); emitWithLeadingSpace(node.label); writeSemicolon(); } function emitTokenWithComment(token, pos, writer, contextNode, indentLeading) { var node = ts.getParseTreeNode(contextNode); var isSimilarNode = node && node.kind === contextNode.kind; var startPos = pos; if (isSimilarNode) { pos = ts.skipTrivia(currentSourceFile.text, pos); } if (emitLeadingCommentsOfPosition && isSimilarNode && contextNode.pos !== startPos) { var needsIndent = indentLeading && !ts.positionsAreOnSameLine(startPos, pos, currentSourceFile); if (needsIndent) { increaseIndent(); } emitLeadingCommentsOfPosition(startPos); if (needsIndent) { decreaseIndent(); } } pos = writeTokenText(token, writer, pos); if (emitTrailingCommentsOfPosition && isSimilarNode && contextNode.end !== pos) { emitTrailingCommentsOfPosition(pos, true); } return pos; } function emitReturnStatement(node) { emitTokenWithComment(96, node.pos, writeKeyword, node); emitExpressionWithLeadingSpace(node.expression); writeSemicolon(); } function emitWithStatement(node) { var openParenPos = emitTokenWithComment(107, node.pos, writeKeyword, node); writeSpace(); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); emitEmbeddedStatement(node, node.statement); } function emitSwitchStatement(node) { var openParenPos = emitTokenWithComment(98, node.pos, writeKeyword, node); writeSpace(); emitTokenWithComment(19, openParenPos, writePunctuation, node); emitExpression(node.expression); emitTokenWithComment(20, node.expression.end, writePunctuation, node); writeSpace(); emit(node.caseBlock); } function emitLabeledStatement(node) { emit(node.label); emitTokenWithComment(56, node.label.end, writePunctuation, node); writeSpace(); emit(node.statement); } function emitThrowStatement(node) { emitTokenWithComment(100, node.pos, writeKeyword, node); emitExpressionWithLeadingSpace(node.expression); writeSemicolon(); } function emitTryStatement(node) { emitTokenWithComment(102, node.pos, writeKeyword, node); writeSpace(); emit(node.tryBlock); if (node.catchClause) { writeLineOrSpace(node); emit(node.catchClause); } if (node.finallyBlock) { writeLineOrSpace(node); emitTokenWithComment(87, (node.catchClause || node.tryBlock).end, writeKeyword, node); writeSpace(); emit(node.finallyBlock); } } function emitDebuggerStatement(node) { writeToken(78, node.pos, writeKeyword); writeSemicolon(); } function emitVariableDeclaration(node) { emit(node.name); emitTypeAnnotation(node.type); emitInitializer(node.initializer, node.type ? node.type.end : node.name.end, node); } function emitVariableDeclarationList(node) { writeKeyword(ts.isLet(node) ? "let" : ts.isConst(node) ? "const" : "var"); writeSpace(); emitList(node, node.declarations, 272); } function emitFunctionDeclaration(node) { emitFunctionDeclarationOrExpression(node); } function emitFunctionDeclarationOrExpression(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword("function"); emit(node.asteriskToken); writeSpace(); emitIdentifierName(node.name); emitSignatureAndBody(node, emitSignatureHead); } function emitBlockCallback(_hint, body) { emitBlockFunctionBody(body); } function emitSignatureAndBody(node, emitSignatureHead) { var body = node.body; if (body) { if (ts.isBlock(body)) { var indentedFlag = ts.getEmitFlags(node) & 65536; if (indentedFlag) { increaseIndent(); } pushNameGenerationScope(node); ts.forEach(node.parameters, generateNames); generateNames(node.body); emitSignatureHead(node); if (onEmitNode) { onEmitNode(4, body, emitBlockCallback); } else { emitBlockFunctionBody(body); } popNameGenerationScope(node); if (indentedFlag) { decreaseIndent(); } } else { emitSignatureHead(node); writeSpace(); emitExpression(body); } } else { emitSignatureHead(node); writeSemicolon(); } } function emitSignatureHead(node) { emitTypeParameters(node, node.typeParameters); emitParameters(node, node.parameters); emitTypeAnnotation(node.type); } function shouldEmitBlockFunctionBodyOnSingleLine(body) { if (ts.getEmitFlags(body) & 1) { return true; } if (body.multiLine) { return false; } if (!ts.nodeIsSynthesized(body) && !ts.rangeIsOnSingleLine(body, currentSourceFile)) { return false; } 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)) { return false; } previousStatement = statement; } return true; } function emitBlockFunctionBody(body) { writeSpace(); writePunctuation("{"); increaseIndent(); var emitBlockFunctionBody = shouldEmitBlockFunctionBodyOnSingleLine(body) ? emitBlockFunctionBodyOnSingleLine : emitBlockFunctionBodyWorker; if (emitBodyWithDetachedComments) { emitBodyWithDetachedComments(body, body.statements, emitBlockFunctionBody); } else { emitBlockFunctionBody(body); } decreaseIndent(); writeToken(18, body.statements.end, writePunctuation, body); } function emitBlockFunctionBodyOnSingleLine(body) { emitBlockFunctionBodyWorker(body, true); } function emitBlockFunctionBodyWorker(body, emitBlockFunctionBodyOnSingleLine) { 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); increaseIndent(); } else { emitList(body, body.statements, 1, statementOffset); } } function emitClassDeclaration(node) { emitClassDeclarationOrExpression(node); } function emitClassDeclarationOrExpression(node) { ts.forEach(node.members, generateMemberNames); emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword("class"); if (node.name) { writeSpace(); emitIdentifierName(node.name); } var indentedFlag = ts.getEmitFlags(node) & 65536; if (indentedFlag) { increaseIndent(); } emitTypeParameters(node, node.typeParameters); emitList(node, node.heritageClauses, 0); writeSpace(); writePunctuation("{"); emitList(node, node.members, 65); writePunctuation("}"); if (indentedFlag) { decreaseIndent(); } } function emitInterfaceDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword("interface"); writeSpace(); emit(node.name); emitTypeParameters(node, node.typeParameters); emitList(node, node.heritageClauses, 256); writeSpace(); writePunctuation("{"); emitList(node, node.members, 65); writePunctuation("}"); } function emitTypeAliasDeclaration(node) { emitDecorators(node, node.decorators); emitModifiers(node, node.modifiers); writeKeyword("type"); writeSpace(); emit(node.name); emitTypeParameters(node, node.typeParameters); writeSpace(); writePunctuation("="); writeSpace(); emit(node.type); writeSemicolon(); } function emitEnumDeclaration(node) { emitModifiers(node, node.modifiers); writeKeyword("enum"); writeSpace(); emit(node.name); writeSpace(); writePunctuation("{"); emitList(node, node.members, 81); writePunctuation("}"); } function emitModuleDeclaration(node) { emitModifiers(node, node.modifiers); 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) { writePunctuation("."); emit(body.name); body = body.body; } writeSpace(); emit(body); } function emitModuleBlock(node) { pushNameGenerationScope(node); ts.forEach(node.statements, generateNames); emitBlockStatements(node, isEmptyBlock(node)); popNameGenerationScope(node); } function emitCaseBlock(node) { 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, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); writeSpace(); emit(node.name); writeSpace(); emitTokenWithComment(58, node.name.end, writePunctuation, node); writeSpace(); emitModuleReference(node.moduleReference); writeSemicolon(); } function emitModuleReference(node) { if (node.kind === 71) { emitExpression(node); } else { emit(node); } } function emitImportDeclaration(node) { emitModifiers(node, node.modifiers); emitTokenWithComment(91, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); writeSpace(); if (node.importClause) { emit(node.importClause); writeSpace(); emitTokenWithComment(143, node.importClause.end, writeKeyword, node); writeSpace(); } emitExpression(node.moduleSpecifier); writeSemicolon(); } function emitImportClause(node) { emit(node.name); if (node.name && node.namedBindings) { emitTokenWithComment(26, node.name.end, writePunctuation, node); writeSpace(); } emit(node.namedBindings); } function emitNamespaceImport(node) { var asPos = emitTokenWithComment(39, node.pos, writePunctuation, node); writeSpace(); emitTokenWithComment(118, asPos, writeKeyword, node); writeSpace(); emit(node.name); } function emitNamedImports(node) { emitNamedImportsOrExports(node); } function emitImportSpecifier(node) { emitImportOrExportSpecifier(node); } function emitExportAssignment(node) { var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); if (node.isExportEquals) { emitTokenWithComment(58, nextPos, writeOperator, node); } else { emitTokenWithComment(79, nextPos, writeKeyword, node); } writeSpace(); emitExpression(node.expression); writeSemicolon(); } function emitExportDeclaration(node) { var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); if (node.exportClause) { emit(node.exportClause); } else { nextPos = emitTokenWithComment(39, nextPos, writePunctuation, node); } if (node.moduleSpecifier) { writeSpace(); var fromPos = node.exportClause ? node.exportClause.end : nextPos; emitTokenWithComment(143, fromPos, writeKeyword, node); writeSpace(); emitExpression(node.moduleSpecifier); } writeSemicolon(); } function emitNamespaceExportDeclaration(node) { var nextPos = emitTokenWithComment(84, node.pos, writeKeyword, node); writeSpace(); nextPos = emitTokenWithComment(118, nextPos, writeKeyword, node); writeSpace(); nextPos = emitTokenWithComment(130, nextPos, writeKeyword, node); writeSpace(); emit(node.name); writeSemicolon(); } function emitNamedExports(node) { emitNamedImportsOrExports(node); } function emitExportSpecifier(node) { emitImportOrExportSpecifier(node); } function emitNamedImportsOrExports(node) { writePunctuation("{"); emitList(node, node.elements, 262576); writePunctuation("}"); } function emitImportOrExportSpecifier(node) { if (node.propertyName) { emit(node.propertyName); writeSpace(); emitTokenWithComment(118, node.propertyName.end, writeKeyword, node); writeSpace(); } emit(node.name); } function emitExternalModuleReference(node) { writeKeyword("require"); writePunctuation("("); emitExpression(node.expression); writePunctuation(")"); } function emitJsxElement(node) { emit(node.openingElement); emitList(node, node.children, 131072); emit(node.closingElement); } function emitJsxSelfClosingElement(node) { writePunctuation("<"); emitJsxTagName(node.tagName); writeSpace(); emit(node.attributes); writePunctuation("/>"); } function emitJsxFragment(node) { emit(node.openingFragment); emitList(node, node.children, 131072); emit(node.closingFragment); } function emitJsxOpeningElementOrFragment(node) { writePunctuation("<"); if (ts.isJsxOpeningElement(node)) { emitJsxTagName(node.tagName); if (node.attributes.properties && node.attributes.properties.length > 0) { writeSpace(); } emit(node.attributes); } writePunctuation(">"); } function emitJsxText(node) { commitPendingSemicolon(); writer.writeLiteral(getTextOfNode(node, true)); } function emitJsxClosingElementOrFragment(node) { writePunctuation(""); } function emitJsxAttributes(node) { emitList(node, node.properties, 131328); } function emitJsxAttribute(node) { emit(node.name); emitNodeWithPrefix("=", writePunctuation, node.initializer, emit); } function emitJsxSpreadAttribute(node) { writePunctuation("{..."); emitExpression(node.expression); writePunctuation("}"); } function emitJsxExpression(node) { if (node.expression) { writePunctuation("{"); emit(node.dotDotDotToken); emitExpression(node.expression); writePunctuation("}"); } } function emitJsxTagName(node) { if (node.kind === 71) { emitExpression(node); } else { emit(node); } } function emitCaseClause(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, node.pos, writeKeyword, node); emitCaseOrDefaultClauseRest(node, node.statements, pos); } function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) { var emitAsSingleStatement = statements.length === 1 && (ts.nodeIsSynthesized(parentNode) || ts.nodeIsSynthesized(statements[0]) || ts.rangeStartPositionsAreOnSameLine(parentNode, statements[0], currentSourceFile)); var format = 81985; if (emitAsSingleStatement) { writeToken(56, colonPos, writePunctuation, parentNode); writeSpace(); format &= ~(1 | 64); } else { emitTokenWithComment(56, colonPos, writePunctuation, parentNode); } emitList(parentNode, statements, format); } function emitHeritageClause(node) { writeSpace(); writeTokenText(node.token, writeKeyword); writeSpace(); emitList(node, node.types, 272); } function emitCatchClause(node) { var openParenPos = emitTokenWithComment(74, node.pos, writeKeyword, node); writeSpace(); if (node.variableDeclaration) { emitTokenWithComment(19, openParenPos, writePunctuation, node); emit(node.variableDeclaration); emitTokenWithComment(20, node.variableDeclaration.end, writePunctuation, node); writeSpace(); } emit(node.block); } function emitPropertyAssignment(node) { emit(node.name); writePunctuation(":"); writeSpace(); var initializer = node.initializer; if (emitTrailingCommentsOfPosition && (ts.getEmitFlags(initializer) & 512) === 0) { var commentRange = ts.getCommentRange(initializer); emitTrailingCommentsOfPosition(commentRange.pos); } emitExpression(initializer); } function emitShorthandPropertyAssignment(node) { emit(node.name); if (node.objectAssignmentInitializer) { writeSpace(); writePunctuation("="); writeSpace(); emitExpression(node.objectAssignmentInitializer); } } function emitSpreadAssignment(node) { if (node.expression) { writePunctuation("..."); emitExpression(node.expression); } } function emitEnumMember(node) { emit(node.name); emitInitializer(node.initializer, node.name.end, node); } function emitSourceFile(node) { writeLine(); var statements = node.statements; if (emitBodyWithDetachedComments) { var shouldEmitDetachedComment = statements.length === 0 || !ts.isPrologueDirective(statements[0]) || ts.nodeIsSynthesized(statements[0]); if (shouldEmitDetachedComment) { emitBodyWithDetachedComments(node, statements, emitSourceFileWorker); return; } } emitSourceFileWorker(node); } function emitSyntheticTripleSlashReferencesIfNeeded(node) { emitTripleSlashDirectives(!!node.hasNoDefaultLib, node.syntheticFileReferences || [], node.syntheticTypeReferences || []); } function emitTripleSlashDirectivesIfNeeded(node) { if (node.isDeclarationFile) emitTripleSlashDirectives(node.hasNoDefaultLib, node.referencedFiles, node.typeReferenceDirectives); } function emitTripleSlashDirectives(hasNoDefaultLib, files, types) { if (hasNoDefaultLib) { write("/// "); writeLine(); } if (currentSourceFile && currentSourceFile.moduleName) { write("/// "); writeLine(); } if (currentSourceFile && currentSourceFile.amdDependencies) { for (var _a = 0, _b = currentSourceFile.amdDependencies; _a < _b.length; _a++) { var dep = _b[_a]; if (dep.name) { write("/// "); } else { write("/// "); } writeLine(); } } for (var _c = 0, files_1 = files; _c < files_1.length; _c++) { var directive = files_1[_c]; write("/// "); writeLine(); } for (var _d = 0, types_17 = types; _d < types_17.length; _d++) { var directive = types_17[_d]; write("/// "); writeLine(); } } function emitSourceFileWorker(node) { var statements = node.statements; pushNameGenerationScope(node); ts.forEach(node.statements, generateNames); emitHelpers(node); var index = ts.findIndex(statements, function (statement) { return !ts.isPrologueDirective(statement); }); emitTripleSlashDirectivesIfNeeded(node); emitList(node, statements, 1, index === -1 ? statements.length : index); popNameGenerationScope(node); } function emitPartiallyEmittedExpression(node) { emitExpression(node.expression); } function emitCommaList(node) { emitExpressionList(node, node.elements, 272); } function emitPrologueDirectives(statements, startWithNewLine, seenPrologueDirectives) { for (var i = 0; i < statements.length; i++) { var statement = statements[i]; if (ts.isPrologueDirective(statement)) { var shouldEmitPrologueDirective = seenPrologueDirectives ? !seenPrologueDirectives.has(statement.expression.text) : true; if (shouldEmitPrologueDirective) { if (startWithNewLine || i > 0) { writeLine(); } emit(statement); if (seenPrologueDirectives) { seenPrologueDirectives.set(statement.expression.text, true); } } } else { return i; } } return statements.length; } function emitPrologueDirectivesIfNeeded(sourceFileOrBundle) { if (ts.isSourceFile(sourceFileOrBundle)) { setSourceFile(sourceFileOrBundle); emitPrologueDirectives(sourceFileOrBundle.statements); } else { var seenPrologueDirectives = ts.createMap(); for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) { var sourceFile = _b[_a]; setSourceFile(sourceFile); emitPrologueDirectives(sourceFile.statements, true, seenPrologueDirectives); } } } function emitShebangIfNeeded(sourceFileOrBundle) { if (ts.isSourceFile(sourceFileOrBundle)) { var shebang = ts.getShebang(sourceFileOrBundle.text); if (shebang) { write(shebang); writeLine(); return true; } } else { for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) { var sourceFile = _b[_a]; if (emitShebangIfNeeded(sourceFile)) { break; } } } } function emitNodeWithWriter(node, writer) { if (!node) return; var savedWrite = write; write = writer; emit(node); write = savedWrite; } function emitModifiers(node, modifiers) { if (modifiers && modifiers.length) { emitList(node, modifiers, 131328); writeSpace(); } } function emitTypeAnnotation(node) { if (node) { writePunctuation(":"); writeSpace(); emit(node); } } function emitInitializer(node, equalCommentStartPos, container) { if (node) { writeSpace(); emitTokenWithComment(58, equalCommentStartPos, writeOperator, container); writeSpace(); emitExpression(node); } } function emitNodeWithPrefix(prefix, prefixWriter, node, emit) { if (node) { prefixWriter(prefix); emit(node); } } function emitWithLeadingSpace(node) { if (node) { writeSpace(); emit(node); } } function emitExpressionWithLeadingSpace(node) { if (node) { writeSpace(); emitExpression(node); } } function emitWithTrailingSpace(node) { if (node) { emit(node); writeSpace(); } } function emitEmbeddedStatement(parent, node) { if (ts.isBlock(node) || ts.getEmitFlags(parent) & 1) { writeSpace(); emit(node); } else { writeLine(); increaseIndent(); emit(node); decreaseIndent(); } } function emitDecorators(parentNode, decorators) { emitList(parentNode, decorators, 24577); } function emitTypeArguments(parentNode, typeArguments) { emitList(parentNode, typeArguments, 26896); } function emitTypeParameters(parentNode, typeParameters) { if (ts.isFunctionLike(parentNode) && parentNode.typeArguments) { return emitTypeArguments(parentNode, parentNode.typeArguments); } emitList(parentNode, typeParameters, 26896); } function emitParameters(parentNode, parameters) { emitList(parentNode, parameters, 1296); } function canEmitSimpleArrowHead(parentNode, parameters) { var parameter = ts.singleOrUndefined(parameters); return parameter && 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 & ~1024); } else { emitParameters(parentNode, parameters); } } function emitParametersForIndexSignature(parentNode, parameters) { 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); } function writeDelimiter(format) { switch (format & 28) { case 0: break; case 16: writePunctuation(","); break; case 4: writeSpace(); writePunctuation("|"); break; case 8: writeSpace(); writePunctuation("&"); break; } } function emitNodeList(emit, parentNode, children, format, start, count) { if (start === void 0) { start = 0; } if (count === void 0) { count = children ? children.length - start : 0; } var isUndefined = children === undefined; if (isUndefined && format & 8192) { return; } var isEmpty = children === undefined || start >= children.length || count === 0; if (isEmpty && format & 16384) { if (onBeforeEmitNodeArray) { onBeforeEmitNodeArray(children); } if (onAfterEmitNodeArray) { onAfterEmitNodeArray(children); } return; } if (format & 7680) { writePunctuation(getOpeningBracket(format)); if (isEmpty && !isUndefined) { emitTrailingCommentsOfPosition(children.pos, true); } } if (onBeforeEmitNodeArray) { onBeforeEmitNodeArray(children); } if (isEmpty) { if (format & 1) { writeLine(); } else if (format & 128 && !(format & 262144)) { writeSpace(); } } else { var mayEmitInterveningComments = (format & 131072) === 0; var shouldEmitInterveningComments = mayEmitInterveningComments; if (shouldWriteLeadingLineTerminator(parentNode, children, format)) { writeLine(); shouldEmitInterveningComments = false; } else if (format & 128) { writeSpace(); } if (format & 64) { increaseIndent(); } var previousSibling = void 0; var shouldDecreaseIndentAfterEmit = false; for (var i = 0; i < count; i++) { var child = children[start + i]; if (previousSibling) { if (format & 28 && previousSibling.end !== parentNode.end) { emitLeadingCommentsOfPosition(previousSibling.end); } writeDelimiter(format); if (shouldWriteSeparatingLineTerminator(previousSibling, child, format)) { if ((format & (3 | 64)) === 0) { increaseIndent(); shouldDecreaseIndentAfterEmit = true; } writeLine(); shouldEmitInterveningComments = false; } else if (previousSibling && format & 256) { writeSpace(); } } if (shouldEmitInterveningComments) { if (emitTrailingCommentsOfPosition) { var commentRange = ts.getCommentRange(child); emitTrailingCommentsOfPosition(commentRange.pos); } } else { shouldEmitInterveningComments = mayEmitInterveningComments; } emit(child); if (shouldDecreaseIndentAfterEmit) { decreaseIndent(); shouldDecreaseIndentAfterEmit = false; } previousSibling = child; } var hasTrailingComma = (format & 32) && children.hasTrailingComma; if (format & 16 && hasTrailingComma) { writePunctuation(","); } if (previousSibling && format & 28 && previousSibling.end !== parentNode.end && !(ts.getEmitFlags(previousSibling) & 1024)) { emitLeadingCommentsOfPosition(previousSibling.end); } if (format & 64) { decreaseIndent(); } if (shouldWriteClosingLineTerminator(parentNode, children, format)) { writeLine(); } else if (format & 128) { writeSpace(); } } if (onAfterEmitNodeArray) { onAfterEmitNodeArray(children); } if (format & 7680) { if (isEmpty && !isUndefined) { emitLeadingCommentsOfPosition(children.end); } writePunctuation(getClosingBracket(format)); } } function commitPendingSemicolonInternal() { if (pendingSemicolon) { writeSemicolonInternal(); pendingSemicolon = false; } } function writeLiteral(s) { commitPendingSemicolon(); writer.writeLiteral(s); } function writeStringLiteral(s) { commitPendingSemicolon(); writer.writeStringLiteral(s); } function writeBase(s) { commitPendingSemicolon(); writer.write(s); } function writeSymbol(s, sym) { commitPendingSemicolon(); writer.writeSymbol(s, sym); } function writePunctuation(s) { commitPendingSemicolon(); writer.writePunctuation(s); } function deferWriteSemicolon() { pendingSemicolon = true; } function writeSemicolonInternal() { writer.writePunctuation(";"); } function writeKeyword(s) { commitPendingSemicolon(); writer.writeKeyword(s); } function writeOperator(s) { commitPendingSemicolon(); writer.writeOperator(s); } function writeParameter(s) { commitPendingSemicolon(); writer.writeParameter(s); } function writeSpace() { commitPendingSemicolon(); writer.writeSpace(" "); } function writeProperty(s) { commitPendingSemicolon(); writer.writeProperty(s); } function writeLine() { commitPendingSemicolon(); writer.writeLine(); } function increaseIndent() { commitPendingSemicolon(); writer.increaseIndent(); } function decreaseIndent() { commitPendingSemicolon(); writer.decreaseIndent(); } function writeToken(token, pos, writer, contextNode) { return onEmitSourceMapOfToken ? onEmitSourceMapOfToken(contextNode, token, writer, pos, writeTokenText) : writeTokenText(token, writer, pos); } function writeTokenNode(node, writer) { if (onBeforeEmitToken) { onBeforeEmitToken(node); } writer(ts.tokenToString(node.kind)); if (onAfterEmitToken) { onAfterEmitToken(node); } } function writeTokenText(token, writer, pos) { var tokenString = ts.tokenToString(token); writer(tokenString); return pos < 0 ? pos : pos + tokenString.length; } function writeLineOrSpace(node) { if (ts.getEmitFlags(node) & 1) { writeSpace(); } else { writeLine(); } } function writeLines(text) { var lines = text.split(/\r\n?|\n/g); var indentation = ts.guessIndentation(lines); for (var _a = 0, lines_2 = lines; _a < lines_2.length; _a++) { var lineText = lines_2[_a]; var line = indentation ? lineText.slice(indentation) : lineText; if (line.length) { writeLine(); write(line); writeLine(); } } } function increaseIndentIf(value, valueToWriteWhenNotIndenting) { if (value) { increaseIndent(); writeLine(); } else if (valueToWriteWhenNotIndenting) { write(valueToWriteWhenNotIndenting); } } function decreaseIndentIf(value1, value2) { if (value1) { decreaseIndent(); } if (value2) { decreaseIndent(); } } function shouldWriteLeadingLineTerminator(parentNode, children, format) { if (format & 1) { return true; } if (format & 2) { if (format & 32768) { return true; } var firstChild = children[0]; if (firstChild === undefined) { return !ts.rangeIsOnSingleLine(parentNode, currentSourceFile); } else if (ts.positionIsSynthesized(parentNode.pos) || ts.nodeIsSynthesized(firstChild)) { return synthesizedNodeStartsOnNewLine(firstChild, format); } else { return !ts.rangeStartPositionsAreOnSameLine(parentNode, firstChild, currentSourceFile); } } else { return false; } } function shouldWriteSeparatingLineTerminator(previousNode, nextNode, format) { if (format & 1) { return true; } else if (format & 2) { if (previousNode === undefined || nextNode === undefined) { return false; } else if (ts.nodeIsSynthesized(previousNode) || ts.nodeIsSynthesized(nextNode)) { return synthesizedNodeStartsOnNewLine(previousNode, format) || synthesizedNodeStartsOnNewLine(nextNode, format); } else { return !ts.rangeEndIsOnSameLineAsRangeStart(previousNode, nextNode, currentSourceFile); } } else { return ts.getStartsOnNewLine(nextNode); } } function shouldWriteClosingLineTerminator(parentNode, children, format) { if (format & 1) { return (format & 65536) === 0; } else if (format & 2) { if (format & 32768) { return true; } var lastChild = ts.lastOrUndefined(children); if (lastChild === undefined) { return !ts.rangeIsOnSingleLine(parentNode, currentSourceFile); } else if (ts.positionIsSynthesized(parentNode.pos) || ts.nodeIsSynthesized(lastChild)) { return synthesizedNodeStartsOnNewLine(lastChild, format); } else { return !ts.rangeEndPositionsAreOnSameLine(parentNode, lastChild, currentSourceFile); } } else { return false; } } function synthesizedNodeStartsOnNewLine(node, format) { if (ts.nodeIsSynthesized(node)) { var startsOnNewLine = ts.getStartsOnNewLine(node); if (startsOnNewLine === undefined) { return (format & 32768) !== 0; } return startsOnNewLine; } return (format & 32768) !== 0; } function needsIndentation(parent, node1, node2) { parent = skipSynthesizedParentheses(parent); node1 = skipSynthesizedParentheses(node1); node2 = skipSynthesizedParentheses(node2); if (ts.getStartsOnNewLine(node2)) { return true; } return !ts.nodeIsSynthesized(parent) && !ts.nodeIsSynthesized(node1) && !ts.nodeIsSynthesized(node2) && !ts.rangeEndIsOnSameLineAsRangeStart(node1, node2, currentSourceFile); } function isEmptyBlock(block) { return block.statements.length === 0 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile); } function skipSynthesizedParentheses(node) { while (node.kind === 191 && ts.nodeIsSynthesized(node)) { node = node.expression; } return node; } function getTextOfNode(node, includeTrivia) { if (ts.isGeneratedIdentifier(node)) { return generateName(node); } 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 && node.textSourceNode) { return getTextOfNode(node.textSourceNode, includeTrivia); } else if (ts.isLiteralExpression(node) && (ts.nodeIsSynthesized(node) || !node.parent)) { return node.text; } return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node, includeTrivia); } function getLiteralTextOfNode(node) { if (node.kind === 9 && node.textSourceNode) { var textSourceNode = node.textSourceNode; if (ts.isIdentifier(textSourceNode)) { return ts.getEmitFlags(node) & 16777216 ? "\"" + ts.escapeString(getTextOfNode(textSourceNode)) + "\"" : "\"" + ts.escapeNonAsciiString(getTextOfNode(textSourceNode)) + "\""; } else { return getLiteralTextOfNode(textSourceNode); } } return ts.getLiteralText(node, currentSourceFile); } function pushNameGenerationScope(node) { if (node && ts.getEmitFlags(node) & 524288) { return; } tempFlagsStack.push(tempFlags); tempFlags = 0; reservedNamesStack.push(reservedNames); } function popNameGenerationScope(node) { if (node && ts.getEmitFlags(node) & 524288) { return; } tempFlags = tempFlagsStack.pop(); reservedNames = reservedNamesStack.pop(); } function reserveNameInNestedScopes(name) { if (!reservedNames || reservedNames === ts.lastOrUndefined(reservedNamesStack)) { reservedNames = ts.createMap(); } reservedNames.set(name, true); } function generateNames(node) { if (!node) return; switch (node.kind) { case 213: ts.forEach(node.statements, generateNames); break; case 228: case 226: case 218: case 219: generateNames(node.statement); break; case 217: generateNames(node.thenStatement); generateNames(node.elseStatement); break; case 220: case 222: case 221: generateNames(node.initializer); generateNames(node.statement); break; case 227: generateNames(node.caseBlock); break; case 241: ts.forEach(node.clauses, generateNames); break; case 266: case 267: ts.forEach(node.statements, generateNames); break; case 230: generateNames(node.tryBlock); generateNames(node.catchClause); generateNames(node.finallyBlock); break; case 269: generateNames(node.variableDeclaration); generateNames(node.block); break; case 214: generateNames(node.declarationList); break; case 233: ts.forEach(node.declarations, generateNames); break; case 232: case 149: case 182: case 235: generateNameIfNeeded(node.name); break; case 234: generateNameIfNeeded(node.name); if (ts.getEmitFlags(node) & 524288) { ts.forEach(node.parameters, generateNames); generateNames(node.body); } break; case 180: case 181: ts.forEach(node.elements, generateNames); break; case 244: generateNames(node.importClause); break; case 245: generateNameIfNeeded(node.name); generateNames(node.namedBindings); break; case 246: generateNameIfNeeded(node.name); break; case 247: ts.forEach(node.elements, generateNames); break; case 248: generateNameIfNeeded(node.propertyName || node.name); break; } } function generateMemberNames(node) { if (!node) return; switch (node.kind) { case 270: case 271: case 152: case 154: case 156: case 157: generateNameIfNeeded(node.name); break; } } function generateNameIfNeeded(name) { if (name) { if (ts.isGeneratedIdentifier(name)) { generateName(name); } else if (ts.isBindingPattern(name)) { generateNames(name); } } } function generateName(name) { if ((name.autoGenerateFlags & 7) === 4) { return generateNameCached(getNodeForGeneratedName(name), name.autoGenerateFlags); } else { var autoGenerateId = name.autoGenerateId; return autoGeneratedIdToGeneratedName[autoGenerateId] || (autoGeneratedIdToGeneratedName[autoGenerateId] = makeName(name)); } } function generateNameCached(node, flags) { var nodeId = ts.getNodeId(node); return nodeIdToGeneratedName[nodeId] || (nodeIdToGeneratedName[nodeId] = generateNameForNode(node, flags)); } function isUniqueName(name) { return isFileLevelUniqueName(name) && !generatedNames.has(name) && !(reservedNames && reservedNames.has(name)); } function isFileLevelUniqueName(name) { return currentSourceFile ? ts.isFileLevelUniqueName(currentSourceFile, name, hasGlobalName) : true; } 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)); if (local && local.flags & (67216319 | 1048576 | 2097152)) { return false; } } } return true; } function makeTempVariableName(flags, reservedInNestedScopes) { if (flags && !(tempFlags & flags)) { var name = flags === 268435456 ? "_i" : "_n"; if (isUniqueName(name)) { tempFlags |= flags; if (reservedInNestedScopes) { reserveNameInNestedScopes(name); } return name; } } while (true) { var count = tempFlags & 268435455; tempFlags++; if (count !== 8 && count !== 13) { var name = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); if (isUniqueName(name)) { if (reservedInNestedScopes) { reserveNameInNestedScopes(name); } return name; } } } } function makeUniqueName(baseName, checkFn, optimistic, scoped) { if (checkFn === void 0) { checkFn = isUniqueName; } if (optimistic) { if (checkFn(baseName)) { if (scoped) { reserveNameInNestedScopes(baseName); } else { generatedNames.set(baseName, true); } return baseName; } } if (baseName.charCodeAt(baseName.length - 1) !== 95) { baseName += "_"; } var i = 1; while (true) { var generatedName = baseName + i; if (checkFn(generatedName)) { if (scoped) { reserveNameInNestedScopes(generatedName); } else { generatedNames.set(generatedName, true); } return generatedName; } i++; } } function makeFileLevelOptmiisticUniqueName(name) { return makeUniqueName(name, isFileLevelUniqueName, true); } function generateNameForModuleOrEnum(node) { var name = getTextOfNode(node.name); return isUniqueLocalName(name, node) ? name : makeUniqueName(name); } function generateNameForImportOrExportDeclaration(node) { var expr = ts.getExternalModuleName(node); var baseName = ts.isStringLiteral(expr) ? ts.makeIdentifierFromModuleName(expr.text) : "module"; return makeUniqueName(baseName); } function generateNameForExportDefault() { return makeUniqueName("default"); } function generateNameForClassExpression() { return makeUniqueName("class"); } function generateNameForMethodOrAccessor(node) { if (ts.isIdentifier(node.name)) { return generateNameCached(node.name); } return makeTempVariableName(0); } function generateNameForNode(node, flags) { switch (node.kind) { case 71: return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16), !!(flags & 8)); case 239: case 238: return generateNameForModuleOrEnum(node); case 244: case 250: return generateNameForImportOrExportDeclaration(node); case 234: case 235: case 249: return generateNameForExportDefault(); case 205: return generateNameForClassExpression(); case 154: case 156: case 157: return generateNameForMethodOrAccessor(node); default: return makeTempVariableName(0); } } function makeName(name) { 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."); } function getNodeForGeneratedName(name) { var autoGenerateId = name.autoGenerateId; var node = name; var original = node.original; while (original) { node = original; if (ts.isIdentifier(node) && !!(node.autoGenerateFlags & 4) && node.autoGenerateId !== autoGenerateId) { break; } original = node.original; } return node; } } ts.createPrinter = createPrinter; function createBracketsMap() { var brackets = []; brackets[512] = ["{", "}"]; brackets[1024] = ["(", ")"]; brackets[2048] = ["<", ">"]; brackets[4096] = ["[", "]"]; return brackets; } function getOpeningBracket(format) { return brackets[format & 7680][0]; } function getClosingBracket(format) { return brackets[format & 7680][1]; } var TempFlags; (function (TempFlags) { TempFlags[TempFlags["Auto"] = 0] = "Auto"; TempFlags[TempFlags["CountMask"] = 268435455] = "CountMask"; TempFlags[TempFlags["_i"] = 268435456] = "_i"; })(TempFlags || (TempFlags = {})); })(ts || (ts = {})); var ts; (function (ts) { function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames) { if (!host.getDirectories || !host.readDirectory) { return undefined; } var cachedReadDirectoryResult = ts.createMap(); var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); return { useCaseSensitiveFileNames: useCaseSensitiveFileNames, fileExists: fileExists, readFile: function (path, encoding) { return host.readFile(path, encoding); }, directoryExists: host.directoryExists && directoryExists, getDirectories: getDirectories, readDirectory: readDirectory, createDirectory: host.createDirectory && createDirectory, writeFile: host.writeFile && writeFile, addOrDeleteFileOrDirectory: addOrDeleteFileOrDirectory, addOrDeleteFile: addOrDeleteFile, clearCache: clearCache }; function toPath(fileName) { return ts.toPath(fileName, currentDirectory, getCanonicalFileName); } function getCachedFileSystemEntries(rootDirPath) { return cachedReadDirectoryResult.get(ts.ensureTrailingDirectorySeparator(rootDirPath)); } function getCachedFileSystemEntriesForBaseDir(path) { return getCachedFileSystemEntries(ts.getDirectoryPath(path)); } function getBaseNameOfFileName(fileName) { return ts.getBaseFileName(ts.normalizePath(fileName)); } function createCachedFileSystemEntries(rootDir, rootDirPath) { var resultFromHost = { files: ts.map(host.readDirectory(rootDir, undefined, undefined, ["*.*"]), getBaseNameOfFileName) || [], directories: host.getDirectories(rootDir) || [] }; cachedReadDirectoryResult.set(ts.ensureTrailingDirectorySeparator(rootDirPath), resultFromHost); return resultFromHost; } function tryReadDirectory(rootDir, rootDirPath) { rootDirPath = ts.ensureTrailingDirectorySeparator(rootDirPath); var cachedResult = getCachedFileSystemEntries(rootDirPath); if (cachedResult) { return cachedResult; } try { return createCachedFileSystemEntries(rootDir, rootDirPath); } catch (_e) { ts.Debug.assert(!cachedReadDirectoryResult.has(ts.ensureTrailingDirectorySeparator(rootDirPath))); return undefined; } } function fileNameEqual(name1, name2) { return getCanonicalFileName(name1) === getCanonicalFileName(name2); } function hasEntry(entries, name) { return ts.some(entries, function (file) { return fileNameEqual(file, name); }); } function updateFileSystemEntry(entries, baseName, isValid) { if (hasEntry(entries, baseName)) { if (!isValid) { return ts.filterMutate(entries, function (entry) { return !fileNameEqual(entry, baseName); }); } } else if (isValid) { return entries.push(baseName); } } function writeFile(fileName, data, writeByteOrderMark) { var path = toPath(fileName); var result = getCachedFileSystemEntriesForBaseDir(path); if (result) { updateFilesOfFileSystemEntry(result, getBaseNameOfFileName(fileName), true); } return host.writeFile(fileName, data, writeByteOrderMark); } function fileExists(fileName) { var path = toPath(fileName); var result = getCachedFileSystemEntriesForBaseDir(path); return result && hasEntry(result.files, getBaseNameOfFileName(fileName)) || host.fileExists(fileName); } function directoryExists(dirPath) { var path = toPath(dirPath); return cachedReadDirectoryResult.has(ts.ensureTrailingDirectorySeparator(path)) || host.directoryExists(dirPath); } function createDirectory(dirPath) { var path = toPath(dirPath); var result = getCachedFileSystemEntriesForBaseDir(path); var baseFileName = getBaseNameOfFileName(dirPath); if (result) { updateFileSystemEntry(result.directories, baseFileName, true); } host.createDirectory(dirPath); } function getDirectories(rootDir) { var rootDirPath = toPath(rootDir); var result = tryReadDirectory(rootDir, rootDirPath); if (result) { return result.directories.slice(); } return host.getDirectories(rootDir); } function readDirectory(rootDir, extensions, excludes, includes, depth) { var rootDirPath = toPath(rootDir); var result = tryReadDirectory(rootDir, rootDirPath); if (result) { return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries); } return host.readDirectory(rootDir, extensions, excludes, includes, depth); function getFileSystemEntries(dir) { var path = toPath(dir); if (path === rootDirPath) { return result; } return tryReadDirectory(dir, path) || ts.emptyFileSystemEntries; } } function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) { var existingResult = getCachedFileSystemEntries(fileOrDirectoryPath); if (existingResult) { clearCache(); return undefined; } var parentResult = getCachedFileSystemEntriesForBaseDir(fileOrDirectoryPath); if (!parentResult) { return undefined; } if (!host.directoryExists) { clearCache(); return undefined; } var baseName = getBaseNameOfFileName(fileOrDirectory); var fsQueryResult = { fileExists: host.fileExists(fileOrDirectoryPath), directoryExists: host.directoryExists(fileOrDirectoryPath) }; if (fsQueryResult.directoryExists || hasEntry(parentResult.directories, baseName)) { clearCache(); } else { updateFilesOfFileSystemEntry(parentResult, baseName, fsQueryResult.fileExists); } return fsQueryResult; } function addOrDeleteFile(fileName, filePath, eventKind) { if (eventKind === ts.FileWatcherEventKind.Changed) { return; } var parentResult = getCachedFileSystemEntriesForBaseDir(filePath); if (parentResult) { updateFilesOfFileSystemEntry(parentResult, getBaseNameOfFileName(fileName), eventKind === ts.FileWatcherEventKind.Created); } } function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists) { updateFileSystemEntry(parentResult.files, baseName, fileExists); } function clearCache() { cachedReadDirectoryResult.clear(); } } ts.createCachedDirectoryStructureHost = createCachedDirectoryStructureHost; var ConfigFileProgramReloadLevel; (function (ConfigFileProgramReloadLevel) { ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["None"] = 0] = "None"; ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Partial"] = 1] = "Partial"; ConfigFileProgramReloadLevel[ConfigFileProgramReloadLevel["Full"] = 2] = "Full"; })(ConfigFileProgramReloadLevel = ts.ConfigFileProgramReloadLevel || (ts.ConfigFileProgramReloadLevel = {})); function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) { var missingFilePaths = program.getMissingFilePaths(); var newMissingFilePathMap = ts.arrayToSet(missingFilePaths); ts.mutateMap(missingFileWatches, newMissingFilePathMap, { createNewValue: createMissingFileWatch, onDeleteValue: ts.closeFileWatcher }); } ts.updateMissingFilePathsWatch = updateMissingFilePathsWatch; function updateWatchingWildcardDirectories(existingWatchedForWildcards, wildcardDirectories, watchDirectory) { ts.mutateMap(existingWatchedForWildcards, wildcardDirectories, { createNewValue: createWildcardDirectoryWatcher, onDeleteValue: closeFileWatcherOf, onExistingValue: updateWildcardDirectoryWatcher }); function createWildcardDirectoryWatcher(directory, flags) { return { watcher: watchDirectory(directory, flags), flags: flags }; } function updateWildcardDirectoryWatcher(existingWatcher, flags, directory) { if (existingWatcher.flags === flags) { return; } existingWatcher.watcher.close(); existingWatchedForWildcards.set(directory, createWildcardDirectoryWatcher(directory, flags)); } } ts.updateWatchingWildcardDirectories = updateWatchingWildcardDirectories; function isEmittedFileOfProgram(program, file) { if (!program) { return false; } return program.isEmittedFile(file); } ts.isEmittedFileOfProgram = isEmittedFileOfProgram; var WatchLogLevel; (function (WatchLogLevel) { WatchLogLevel[WatchLogLevel["None"] = 0] = "None"; WatchLogLevel[WatchLogLevel["TriggerOnly"] = 1] = "TriggerOnly"; WatchLogLevel[WatchLogLevel["Verbose"] = 2] = "Verbose"; })(WatchLogLevel = ts.WatchLogLevel || (ts.WatchLogLevel = {})); function getWatchFactory(watchLogLevel, log, getDetailWatchInfo) { return getWatchFactoryWith(watchLogLevel, log, getDetailWatchInfo, watchFile, watchDirectory); } ts.getWatchFactory = getWatchFactory; function getWatchFactoryWith(watchLogLevel, log, getDetailWatchInfo, watchFile, watchDirectory) { var createFileWatcher = getCreateFileWatcher(watchLogLevel, watchFile); var createFilePathWatcher = watchLogLevel === WatchLogLevel.None ? watchFilePath : createFileWatcher; var createDirectoryWatcher = getCreateFileWatcher(watchLogLevel, watchDirectory); return { watchFile: function (host, file, callback, pollingInterval, detailInfo1, detailInfo2) { 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, undefined, detailInfo1, detailInfo2, watchDirectory, log, "DirectoryWatcher", getDetailWatchInfo); } }; function watchFilePath(host, file, callback, pollingInterval, path) { return watchFile(host, file, function (fileName, eventKind) { return callback(fileName, eventKind, path); }, pollingInterval); } } function watchFile(host, file, callback, pollingInterval) { return host.watchFile(file, callback, pollingInterval); } function watchDirectory(host, directory, callback, flags) { return host.watchDirectory(directory, callback, (flags & 1) !== 0); } function getCreateFileWatcher(watchLogLevel, addWatch) { switch (watchLogLevel) { case WatchLogLevel.None: return addWatch; case WatchLogLevel.TriggerOnly: return createFileWatcherWithTriggerLogging; case WatchLogLevel.Verbose: return createFileWatcherWithLogging; } } function createFileWatcherWithLogging(host, file, cb, flags, passThrough, detailInfo1, detailInfo2, addWatch, log, watchCaption, getDetailWatchInfo) { log(watchCaption + ":: Added:: " + getWatchInfo(file, flags, detailInfo1, detailInfo2, getDetailWatchInfo)); var watcher = createFileWatcherWithTriggerLogging(host, file, cb, flags, passThrough, detailInfo1, detailInfo2, addWatch, log, watchCaption, getDetailWatchInfo); return { close: function () { log(watchCaption + ":: Close:: " + getWatchInfo(file, flags, detailInfo1, detailInfo2, getDetailWatchInfo)); watcher.close(); } }; } function createFileWatcherWithTriggerLogging(host, file, cb, flags, passThrough, detailInfo1, detailInfo2, addWatch, log, watchCaption, getDetailWatchInfo) { return addWatch(host, file, function (fileName, cbOptional) { var triggerredInfo = watchCaption + ":: Triggered with " + fileName + (cbOptional !== undefined ? cbOptional : "") + ":: " + getWatchInfo(file, flags, detailInfo1, detailInfo2, getDetailWatchInfo); log(triggerredInfo); var start = ts.timestamp(); cb(fileName, cbOptional, passThrough); var elapsed = ts.timestamp() - start; log("Elapsed:: " + elapsed + "ms " + triggerredInfo); }, flags); } function getWatchInfo(file, flags, detailInfo1, detailInfo2, getDetailWatchInfo) { return "WatchInfo: " + file + " " + flags + " " + (getDetailWatchInfo ? getDetailWatchInfo(detailInfo1, detailInfo2) : detailInfo1); } function closeFileWatcherOf(objWithWatcher) { objWithWatcher.watcher.close(); } ts.closeFileWatcherOf = closeFileWatcherOf; })(ts || (ts = {})); var ts; (function (ts) { var ignoreDiagnosticCommentRegEx = /(^\s*$)|(^\s*\/\/\/?\s*(@ts-ignore)?)/; function findConfigFile(searchPath, fileExists, configName) { if (configName === void 0) { configName = "tsconfig.json"; } return ts.forEachAncestorDirectory(searchPath, function (ancestor) { var fileName = ts.combinePaths(ancestor, configName); return fileExists(fileName) ? fileName : undefined; }); } ts.findConfigFile = findConfigFile; function resolveTripleslashReference(moduleName, containingFile) { var basePath = ts.getDirectoryPath(containingFile); var referencedFileName = ts.isRootedDiskPath(moduleName) ? moduleName : ts.combinePaths(basePath, moduleName); return ts.normalizePath(referencedFileName); } ts.resolveTripleslashReference = resolveTripleslashReference; function computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName) { var commonPathComponents; var failed = ts.forEach(fileNames, function (sourceFile) { var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile, currentDirectory); sourcePathComponents.pop(); if (!commonPathComponents) { commonPathComponents = sourcePathComponents; return; } var n = Math.min(commonPathComponents.length, sourcePathComponents.length); for (var i = 0; i < n; i++) { if (getCanonicalFileName(commonPathComponents[i]) !== getCanonicalFileName(sourcePathComponents[i])) { if (i === 0) { return true; } commonPathComponents.length = i; break; } } if (sourcePathComponents.length < commonPathComponents.length) { commonPathComponents.length = sourcePathComponents.length; } }); if (failed) { return ""; } if (!commonPathComponents) { return currentDirectory; } return ts.getPathFromPathComponents(commonPathComponents); } ts.computeCommonSourceDirectoryOfFilenames = computeCommonSourceDirectoryOfFilenames; function createCompilerHost(options, setParentNodes) { var existingDirectories = ts.createMap(); function getCanonicalFileName(fileName) { return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } function getSourceFile(fileName, languageVersion, onError) { var text; try { ts.performance.mark("beforeIORead"); text = ts.sys.readFile(fileName, options.charset); ts.performance.mark("afterIORead"); ts.performance.measure("I/O Read", "beforeIORead", "afterIORead"); } catch (e) { if (onError) { onError(e.message); } text = ""; } return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined; } function directoryExists(directoryPath) { if (existingDirectories.has(directoryPath)) { return true; } if (ts.sys.directoryExists(directoryPath)) { existingDirectories.set(directoryPath, true); return true; } return false; } function ensureDirectoriesExist(directoryPath) { if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) { var parentDirectory = ts.getDirectoryPath(directoryPath); ensureDirectoriesExist(parentDirectory); ts.sys.createDirectory(directoryPath); } } var outputFingerprints; function writeFileIfUpdated(fileName, data, writeByteOrderMark) { if (!outputFingerprints) { outputFingerprints = ts.createMap(); } var hash = ts.sys.createHash(data); var mtimeBefore = ts.sys.getModifiedTime(fileName); if (mtimeBefore) { var fingerprint = outputFingerprints.get(fileName); if (fingerprint && fingerprint.byteOrderMark === writeByteOrderMark && fingerprint.hash === hash && fingerprint.mtime.getTime() === mtimeBefore.getTime()) { return; } } ts.sys.writeFile(fileName, data, writeByteOrderMark); var mtimeAfter = ts.sys.getModifiedTime(fileName); outputFingerprints.set(fileName, { hash: hash, byteOrderMark: writeByteOrderMark, mtime: mtimeAfter }); } function writeFile(fileName, data, writeByteOrderMark, onError) { try { ts.performance.mark("beforeIOWrite"); ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName))); if (ts.isWatchSet(options) && ts.sys.createHash && ts.sys.getModifiedTime) { writeFileIfUpdated(fileName, data, writeByteOrderMark); } else { ts.sys.writeFile(fileName, data, writeByteOrderMark); } ts.performance.mark("afterIOWrite"); ts.performance.measure("I/O Write", "beforeIOWrite", "afterIOWrite"); } catch (e) { if (onError) { onError(e.message); } } } function getDefaultLibLocation() { return ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())); } var newLine = ts.getNewLineCharacter(options); var realpath = ts.sys.realpath && (function (path) { return ts.sys.realpath(path); }); return { getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, writeFile: writeFile, getCurrentDirectory: ts.memoize(function () { return ts.sys.getCurrentDirectory(); }), useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; }, getCanonicalFileName: getCanonicalFileName, getNewLine: function () { return newLine; }, fileExists: function (fileName) { return ts.sys.fileExists(fileName); }, readFile: function (fileName) { return ts.sys.readFile(fileName); }, trace: function (s) { return ts.sys.write(s + newLine); }, directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); }, getEnvironmentVariable: function (name) { return ts.sys.getEnvironmentVariable ? ts.sys.getEnvironmentVariable(name) : ""; }, getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath, readDirectory: function (path, extensions, include, exclude, depth) { return ts.sys.readDirectory(path, extensions, include, exclude, depth); }, getModifiedTime: ts.sys.getModifiedTime && (function (path) { return ts.sys.getModifiedTime(path); }), setModifiedTime: ts.sys.setModifiedTime && (function (path, date) { return ts.sys.setModifiedTime(path, date); }), deleteFile: ts.sys.deleteFile && (function (path) { return ts.sys.deleteFile(path); }) }; } ts.createCompilerHost = createCompilerHost; function getPreEmitDiagnostics(program, sourceFile, cancellationToken) { var diagnostics = program.getConfigFileParsingDiagnostics().concat(program.getOptionsDiagnostics(cancellationToken), program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken)); if (program.getCompilerOptions().declaration) { ts.addRange(diagnostics, program.getDeclarationDiagnostics(sourceFile, cancellationToken)); } return ts.sortAndDeduplicateDiagnostics(diagnostics); } ts.getPreEmitDiagnostics = getPreEmitDiagnostics; function formatDiagnostics(diagnostics, host) { var output = ""; for (var _i = 0, diagnostics_1 = diagnostics; _i < diagnostics_1.length; _i++) { var diagnostic = diagnostics_1[_i]; output += formatDiagnostic(diagnostic, host); } return output; } ts.formatDiagnostics = formatDiagnostics; 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; 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; } return errorMessage; } ts.formatDiagnostic = formatDiagnostic; var ForegroundColorEscapeSequences; (function (ForegroundColorEscapeSequences) { ForegroundColorEscapeSequences["Grey"] = "\u001B[90m"; ForegroundColorEscapeSequences["Red"] = "\u001B[91m"; ForegroundColorEscapeSequences["Yellow"] = "\u001B[93m"; ForegroundColorEscapeSequences["Blue"] = "\u001B[94m"; ForegroundColorEscapeSequences["Cyan"] = "\u001B[96m"; })(ForegroundColorEscapeSequences = ts.ForegroundColorEscapeSequences || (ts.ForegroundColorEscapeSequences = {})); var gutterStyleSequence = "\u001b[30;47m"; var gutterSeparator = " "; var resetEscapeSequence = "\u001b[0m"; var ellipsis = "..."; var halfIndent = " "; var indent = " "; function getCategoryFormat(category) { switch (category) { case ts.DiagnosticCategory.Error: return ForegroundColorEscapeSequences.Red; case ts.DiagnosticCategory.Warning: return ForegroundColorEscapeSequences.Yellow; case ts.DiagnosticCategory.Suggestion: return ts.Debug.fail("Should never get an Info diagnostic on the command line."); case ts.DiagnosticCategory.Message: return ForegroundColorEscapeSequences.Blue; } } function formatColorAndReset(text, formatStyle) { return formatStyle + text + resetEscapeSequence; } ts.formatColorAndReset = formatColorAndReset; function padLeft(s, length) { while (s.length < length) { s = " " + s; } return s; } function formatCodeSpan(file, start, length, indent, squiggleColor, host) { var _a = ts.getLineAndCharacterOfPosition(file, start), firstLine = _a.line, firstLineChar = _a.character; var _b = ts.getLineAndCharacterOfPosition(file, start + length), lastLine = _b.line, lastLineChar = _b.character; var lastLineInFile = ts.getLineAndCharacterOfPosition(file, file.text.length).line; var hasMoreThanFiveLines = (lastLine - firstLine) >= 4; var gutterWidth = (lastLine + 1 + "").length; if (hasMoreThanFiveLines) { gutterWidth = Math.max(ellipsis.length, gutterWidth); } var context = ""; for (var i = firstLine; i <= lastLine; i++) { context += host.getNewLine(); if (hasMoreThanFiveLines && firstLine + 1 < i && i < lastLine - 1) { context += indent + formatColorAndReset(padLeft(ellipsis, gutterWidth), gutterStyleSequence) + gutterSeparator + host.getNewLine(); i = lastLine - 1; } 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, ""); lineContent = lineContent.replace("\t", " "); context += indent + formatColorAndReset(padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator; context += lineContent + host.getNewLine(); context += indent + formatColorAndReset(padLeft("", gutterWidth), gutterStyleSequence) + gutterSeparator; context += squiggleColor; if (i === firstLine) { var lastCharForLine = i === lastLine ? lastLineChar : undefined; context += lineContent.slice(0, firstLineChar).replace(/\S/g, " "); context += lineContent.slice(firstLineChar, lastCharForLine).replace(/./g, "~"); } else if (i === lastLine) { context += lineContent.slice(0, lastLineChar).replace(/./g, "~"); } else { context += lineContent.replace(/./g, "~"); } context += resetEscapeSequence; } return context; } function formatLocation(file, start, host) { var _a = ts.getLineAndCharacterOfPosition(file, start), firstLine = _a.line, firstLineChar = _a.character; var relativeFileName = host ? ts.convertToRelativePath(file.fileName, host.getCurrentDirectory(), function (fileName) { return host.getCanonicalFileName(fileName); }) : file.fileName; var output = ""; output += formatColorAndReset(relativeFileName, ForegroundColorEscapeSequences.Cyan); output += ":"; output += formatColorAndReset("" + (firstLine + 1), ForegroundColorEscapeSequences.Yellow); output += ":"; output += formatColorAndReset("" + (firstLineChar + 1), ForegroundColorEscapeSequences.Yellow); return output; } function formatDiagnosticsWithColorAndContext(diagnostics, host) { var output = ""; for (var _i = 0, diagnostics_2 = diagnostics; _i < diagnostics_2.length; _i++) { var diagnostic = diagnostics_2[_i]; if (diagnostic.file) { var file = diagnostic.file, start = diagnostic.start; output += formatLocation(file, start, host); output += " - "; } output += formatColorAndReset(ts.diagnosticCategoryName(diagnostic), getCategoryFormat(diagnostic.category)); output += formatColorAndReset(" TS" + diagnostic.code + ": ", ForegroundColorEscapeSequences.Grey); output += flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine()); if (diagnostic.file) { output += host.getNewLine(); output += formatCodeSpan(diagnostic.file, diagnostic.start, diagnostic.length, "", getCategoryFormat(diagnostic.category), host); if (diagnostic.relatedInformation) { output += host.getNewLine(); for (var _a = 0, _b = diagnostic.relatedInformation; _a < _b.length; _a++) { var _c = _b[_a], file = _c.file, start = _c.start, length_4 = _c.length, messageText = _c.messageText; if (file) { output += host.getNewLine(); output += halfIndent + formatLocation(file, start, host); output += formatCodeSpan(file, start, length_4, indent, ForegroundColorEscapeSequences.Cyan, host); } output += host.getNewLine(); output += indent + flattenDiagnosticMessageText(messageText, host.getNewLine()); } } } output += host.getNewLine(); } return output; } ts.formatDiagnosticsWithColorAndContext = formatDiagnosticsWithColorAndContext; function flattenDiagnosticMessageText(messageText, newLine) { if (ts.isString(messageText)) { return messageText; } else { var diagnosticChain = messageText; var result = ""; var indent_1 = 0; while (diagnosticChain) { if (indent_1) { result += newLine; for (var i = 0; i < indent_1; i++) { result += " "; } } result += diagnosticChain.messageText; indent_1++; diagnosticChain = diagnosticChain.next; } return result; } } ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText; function loadWithLocalCache(names, containingFile, loader) { if (names.length === 0) { return []; } var resolutions = []; var cache = ts.createMap(); for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { var name = names_1[_i]; var result = void 0; if (cache.has(name)) { result = cache.get(name); } else { cache.set(name, result = loader(name, containingFile)); } resolutions.push(result); } return resolutions; } function isProgramUptoDate(program, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames) { if (!program || hasChangedAutomaticTypeDirectiveNames) { return false; } if (program.getRootFileNames().length !== rootFileNames.length) { return false; } if (program.getSourceFiles().some(sourceFileNotUptoDate)) { return false; } if (program.getMissingFilePaths().some(fileExists)) { return false; } var currentOptions = program.getCompilerOptions(); if (!ts.compareDataObjects(currentOptions, newOptions)) { return false; } if (currentOptions.configFile && newOptions.configFile) { return currentOptions.configFile.text === newOptions.configFile.text; } return true; function sourceFileNotUptoDate(sourceFile) { return sourceFile.version !== getSourceVersion(sourceFile.path) || hasInvalidatedResolution(sourceFile.path); } } ts.isProgramUptoDate = isProgramUptoDate; function getConfigFileParsingDiagnostics(configFileParseResult) { return configFileParseResult.options.configFile ? configFileParseResult.options.configFile.parseDiagnostics.concat(configFileParseResult.errors) : configFileParseResult.errors; } ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics; function shouldProgramCreateNewSourceFiles(program, newOptions) { var oldOptions = program && program.getCompilerOptions(); return oldOptions && (oldOptions.target !== newOptions.target || oldOptions.module !== newOptions.module || oldOptions.moduleResolution !== newOptions.moduleResolution || oldOptions.noResolve !== newOptions.noResolve || oldOptions.jsx !== newOptions.jsx || oldOptions.allowJs !== newOptions.allowJs || oldOptions.disableSizeLimit !== newOptions.disableSizeLimit || oldOptions.baseUrl !== newOptions.baseUrl || !ts.equalOwnProperties(oldOptions.paths, newOptions.paths)); } function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) { return { rootNames: rootNames, options: options, host: host, oldProgram: oldProgram, configFileParsingDiagnostics: configFileParsingDiagnostics }; } function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) { 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; var processingDefaultLibFiles; var processingOtherFiles; var files; var commonSourceDirectory; var diagnosticsProducingTypeChecker; var noDiagnosticsTypeChecker; var classifiableNames; var modifiedFilePaths; var cachedSemanticDiagnosticsForFile = {}; var cachedDeclarationDiagnosticsForFile = {}; var resolvedTypeReferenceDirectives = ts.createMap(); var fileProcessingDiagnostics = ts.createDiagnosticCollection(); var maxNodeModuleJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 0; var currentNodeModulesDepth = 0; var modulesWithElidedImports = ts.createMap(); var sourceFilesFoundSearchingNodeModules = ts.createMap(); ts.performance.mark("beforeProgram"); var host = createProgramOptions.host || createCompilerHost(options); var configParsingHost = parseConfigHostFromCompilerHost(host); var skipDefaultLib = options.noLib; var getDefaultLibraryFileName = ts.memoize(function () { return host.getDefaultLibFileName(options); }); var defaultLibraryPath = host.getDefaultLibLocation ? host.getDefaultLibLocation() : ts.getDirectoryPath(getDefaultLibraryFileName()); var programDiagnostics = ts.createDiagnosticCollection(); var currentDirectory = host.getCurrentDirectory(); var supportedExtensions = ts.getSupportedExtensions(options); var hasEmitBlockingDiagnostics = ts.createMap(); var _compilerOptionsObjectLiteralSyntax; var _referencesArrayLiteralSyntax; var moduleResolutionCache; var resolveModuleNamesWorker; 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) { if (!resolved || resolved.extension !== undefined) { return resolved; } var withExtension = ts.clone(resolved); withExtension.extension = ts.extensionFromPath(resolved.resolvedFileName); return withExtension; }); }; } 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; }; resolveModuleNamesWorker = function (moduleNames, containingFile) { return loadWithLocalCache(ts.Debug.assertEachDefined(moduleNames), containingFile, loader_1); }; } var resolveTypeReferenceDirectiveNamesWorker; if (host.resolveTypeReferenceDirectives) { 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; }; resolveTypeReferenceDirectiveNamesWorker = function (typeReferenceDirectiveNames, containingFile) { return loadWithLocalCache(ts.Debug.assertEachDefined(typeReferenceDirectiveNames), containingFile, loader_2); }; } var packageIdToSourceFile = ts.createMap(); var sourceFileToPackageName = ts.createMap(); var redirectTargetsSet = ts.createMap(); var filesByName = ts.createMap(); var missingFilePaths; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createMap() : undefined; var resolvedProjectReferences = projectReferences ? [] : undefined; var projectReferenceRedirects = ts.createMap(); var shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options); var structuralIsReused = tryReuseStructureFromOldProgram(); if (structuralIsReused !== 2) { processingDefaultLibFiles = []; processingOtherFiles = []; if (projectReferences) { for (var _i = 0, projectReferences_1 = projectReferences; _i < projectReferences_1.length; _i++) { var ref = projectReferences_1[_i]; var parsedRef = parseProjectReferenceConfigFile(ref); resolvedProjectReferences.push(parsedRef); if (parsedRef) { if (parsedRef.commandLine.options.outFile) { var dtsOutfile = ts.changeExtension(parsedRef.commandLine.options.outFile, ".d.ts"); processSourceFile(dtsOutfile, false, false, undefined); } addProjectReferenceRedirects(parsedRef.commandLine, projectReferenceRedirects); } } } ts.forEach(rootNames, function (name) { return processRootFile(name, false, false); }); var typeReferences = ts.getAutomaticTypeDirectiveNames(options, host); if (typeReferences.length) { var containingDirectory = options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : host.getCurrentDirectory(); var containingFilename = ts.combinePaths(containingDirectory, "__inferred type names__.ts"); var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } } if (!skipDefaultLib) { var defaultLibraryFileName = getDefaultLibraryFileName(); if (!options.lib && defaultLibraryFileName) { processRootFile(defaultLibraryFileName, true, false); } else { ts.forEach(options.lib, function (libFileName) { processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), true, false); }); } } missingFilePaths = ts.arrayFrom(filesByName.keys(), function (p) { return p; }).filter(function (p) { return !filesByName.get(p); }); files = ts.stableSort(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); processingDefaultLibFiles = undefined; processingOtherFiles = undefined; } ts.Debug.assert(!!missingFilePaths); if (oldProgram && host.onReleaseOldSourceFile) { var oldSourceFiles = oldProgram.getSourceFiles(); for (var _a = 0, oldSourceFiles_1 = oldSourceFiles; _a < oldSourceFiles_1.length; _a++) { var oldSourceFile = oldSourceFiles_1[_a]; if (!getSourceFile(oldSourceFile.path) || shouldCreateNewSourceFile) { host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions()); } } } oldProgram = undefined; program = { getRootFileNames: function () { return rootNames; }, getSourceFile: getSourceFile, getSourceFileByPath: getSourceFileByPath, getSourceFiles: function () { return files; }, getMissingFilePaths: function () { return missingFilePaths; }, getCompilerOptions: function () { return options; }, getSyntacticDiagnostics: getSyntacticDiagnostics, getOptionsDiagnostics: getOptionsDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getSemanticDiagnostics: getSemanticDiagnostics, getSuggestionDiagnostics: getSuggestionDiagnostics, getDeclarationDiagnostics: getDeclarationDiagnostics, getTypeChecker: getTypeChecker, getClassifiableNames: getClassifiableNames, getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker, getCommonSourceDirectory: getCommonSourceDirectory, emit: emit, getCurrentDirectory: function () { return currentDirectory; }, getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); }, getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); }, getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }, getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }, getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; }, isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary, isSourceFileDefaultLibrary: isSourceFileDefaultLibrary, dropDiagnosticsProducingTypeChecker: dropDiagnosticsProducingTypeChecker, getSourceFileFromReference: getSourceFileFromReference, getLibFileFromReference: getLibFileFromReference, sourceFileToPackageName: sourceFileToPackageName, redirectTargetsSet: redirectTargetsSet, isEmittedFile: isEmittedFile, getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics, getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache, getProjectReferences: getProjectReferences }; verifyCompilerOptions(); ts.performance.mark("afterProgram"); ts.performance.measure("Program", "beforeProgram", "afterProgram"); return program; function compareDefaultLibFiles(a, b) { return ts.compareValues(getDefaultLibFilePriority(a), getDefaultLibFilePriority(b)); } function getDefaultLibFilePriority(a) { 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; var name = ts.removeSuffix(ts.removePrefix(basename, "lib."), ".d.ts"); var index = ts.libs.indexOf(name); if (index !== -1) return index + 1; } return ts.libs.length + 2; } function getResolvedModuleWithFailedLookupLocationsFromCache(moduleName, containingFile) { return moduleResolutionCache && ts.resolveModuleNameFromCache(moduleName, containingFile, moduleResolutionCache); } function toPath(fileName) { return ts.toPath(fileName, currentDirectory, getCanonicalFileName); } function getCommonSourceDirectory() { if (commonSourceDirectory === undefined) { var emittedFiles = ts.filter(files, function (file) { return ts.sourceFileMayBeEmitted(file, options, isSourceFileFromExternalLibrary); }); if (options.rootDir && checkSourceFilesBelongToPath(emittedFiles, options.rootDir)) { commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, currentDirectory); } else if (options.composite) { commonSourceDirectory = ts.getDirectoryPath(ts.normalizeSlashes(options.configFilePath)); checkSourceFilesBelongToPath(emittedFiles, commonSourceDirectory); } else { commonSourceDirectory = computeCommonSourceDirectory(emittedFiles); } if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) { commonSourceDirectory += ts.directorySeparator; } } return commonSourceDirectory; } function getClassifiableNames() { if (!classifiableNames) { getTypeChecker(); classifiableNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { var sourceFile = files_2[_i]; ts.copyEntries(sourceFile.classifiableNames, classifiableNames); } } return classifiableNames; } function resolveModuleNamesReusingOldState(moduleNames, containingFile, file, oldProgramState) { if (structuralIsReused === 0 && !file.ambientModuleNames.length) { return resolveModuleNamesWorker(moduleNames, containingFile); } var oldSourceFile = oldProgramState.program && oldProgramState.program.getSourceFile(containingFile); if (oldSourceFile !== file && file.resolvedModules) { var result_4 = []; for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) { var moduleName = moduleNames_1[_i]; var resolvedModule = file.resolvedModules.get(moduleName); result_4.push(resolvedModule); } return result_4; } var unknownModuleNames; var result; var reusedNames; var predictedToResolveToAmbientModuleMarker = {}; for (var i = 0; i < moduleNames.length; i++) { var moduleName = moduleNames[i]; if (file === oldSourceFile && !hasInvalidatedResolution(oldSourceFile.path)) { var oldResolvedModule = oldSourceFile && oldSourceFile.resolvedModules.get(moduleName); if (oldResolvedModule) { if (ts.isTraceEnabled(options, host)) { ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, containingFile); } (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule; (reusedNames || (reusedNames = [])).push(moduleName); continue; } } var resolvesToAmbientModuleInNonModifiedFile = false; if (ts.contains(file.ambientModuleNames, moduleName)) { resolvesToAmbientModuleInNonModifiedFile = true; if (ts.isTraceEnabled(options, host)) { ts.trace(host, ts.Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, moduleName, containingFile); } } else { resolvesToAmbientModuleInNonModifiedFile = moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, oldProgramState); } if (resolvesToAmbientModuleInNonModifiedFile) { (result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker; } else { (unknownModuleNames || (unknownModuleNames = [])).push(moduleName); } } var resolutions = unknownModuleNames && unknownModuleNames.length ? resolveModuleNamesWorker(unknownModuleNames, containingFile, reusedNames) : ts.emptyArray; if (!result) { ts.Debug.assert(resolutions.length === moduleNames.length); return resolutions; } var j = 0; for (var i = 0; i < result.length; i++) { if (result[i]) { if (result[i] === predictedToResolveToAmbientModuleMarker) { result[i] = undefined; } } else { result[i] = resolutions[j]; j++; } } ts.Debug.assert(j === resolutions.length); return result; function moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, oldProgramState) { var resolutionToFile = ts.getResolvedModule(oldProgramState.oldSourceFile, moduleName); var resolvedFile = resolutionToFile && oldProgramState.program && oldProgramState.program.getSourceFile(resolutionToFile.resolvedFileName); if (resolutionToFile && resolvedFile && !resolvedFile.externalModuleIndicator) { return false; } var ambientModule = oldProgramState.program && oldProgramState.program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(moduleName); if (!(ambientModule && ambientModule.declarations)) { return false; } var firstUnmodifiedFile = ts.forEach(ambientModule.declarations, function (d) { var f = ts.getSourceFileOfNode(d); return !ts.contains(oldProgramState.modifiedFilePaths, f.path) && f; }); if (!firstUnmodifiedFile) { return false; } if (ts.isTraceEnabled(options, host)) { ts.trace(host, ts.Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified, moduleName, firstUnmodifiedFile.fileName); } return true; } } function tryReuseStructureFromOldProgram() { if (!oldProgram) { return 0; } var oldOptions = oldProgram.getCompilerOptions(); if (ts.changesAffectModuleResolution(oldOptions, options)) { return oldProgram.structureIsReused = 0; } ts.Debug.assert(!(oldProgram.structureIsReused & (2 | 1))); var oldRootNames = oldProgram.getRootFileNames(); if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) { return oldProgram.structureIsReused = 0; } if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) { return oldProgram.structureIsReused = 0; } var oldRefs = oldProgram.getProjectReferences(); if (projectReferences) { if (!oldRefs) { 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) { return oldProgram.structureIsReused = 0; } } else { if (parseProjectReferenceConfigFile(projectReferences[i]) !== undefined) { return oldProgram.structureIsReused = 0; } } } } else { if (oldRefs) { return oldProgram.structureIsReused = 0; } } var newSourceFiles = []; var filePaths = []; var modifiedSourceFiles = []; oldProgram.structureIsReused = 2; if (oldProgram.getMissingFilePaths().some(function (missingFilePath) { return host.fileExists(missingFilePath); })) { 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, undefined, shouldCreateNewSourceFile) : host.getSourceFile(oldSourceFile.fileName, options.target, undefined, shouldCreateNewSourceFile); if (!newSourceFile) { 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) { if (newSourceFile !== oldSourceFile.redirectInfo.unredirected) { return oldProgram.structureIsReused = 0; } fileChanged = false; newSourceFile = oldSourceFile; } else if (oldProgram.redirectTargetsSet.has(oldSourceFile.path)) { if (newSourceFile !== oldSourceFile) { return oldProgram.structureIsReused = 0; } fileChanged = false; } else { fileChanged = newSourceFile !== oldSourceFile; } newSourceFile.path = oldSourceFile.path; filePaths.push(newSourceFile.path); var packageName = oldProgram.sourceFileToPackageName.get(oldSourceFile.path); if (packageName !== undefined) { var prevKind = seenPackageNames.get(packageName); var newKind = fileChanged ? 1 : 0; if ((prevKind !== undefined && newKind === 1) || prevKind === 1) { return oldProgram.structureIsReused = 0; } seenPackageNames.set(packageName, newKind); } if (fileChanged) { if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) { return oldProgram.structureIsReused = 0; } if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) { oldProgram.structureIsReused = 1; } if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) { oldProgram.structureIsReused = 1; } collectExternalModuleReferences(newSourceFile); if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) { oldProgram.structureIsReused = 1; } if (!ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) { oldProgram.structureIsReused = 1; } if ((oldSourceFile.flags & 1572864) !== (newSourceFile.flags & 1572864)) { oldProgram.structureIsReused = 1; } if (!ts.arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) { oldProgram.structureIsReused = 1; } modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile }); } else if (hasInvalidatedResolution(oldSourceFile.path)) { oldProgram.structureIsReused = 1; modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile }); } newSourceFiles.push(newSourceFile); } if (oldProgram.structureIsReused !== 2) { return oldProgram.structureIsReused; } modifiedFilePaths = modifiedSourceFiles.map(function (f) { return f.newFile.path; }); 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); if (resolveModuleNamesWorker) { var moduleNames = getModuleNames(newSourceFile); var oldProgramState = { program: oldProgram, oldSourceFile: oldSourceFile, modifiedFilePaths: modifiedFilePaths }; var resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFilePath, newSourceFile, oldProgramState); var resolutionsChanged = ts.hasChangesInResolutions(moduleNames, resolutions, oldSourceFile.resolvedModules, ts.moduleResolutionIsEqualTo); if (resolutionsChanged) { oldProgram.structureIsReused = 1; newSourceFile.resolvedModules = ts.zipToMap(moduleNames, resolutions); } else { newSourceFile.resolvedModules = oldSourceFile.resolvedModules; } } if (resolveTypeReferenceDirectiveNamesWorker) { var typesReferenceDirectives = ts.map(newSourceFile.typeReferenceDirectives, function (x) { return x.fileName; }); var resolutions = resolveTypeReferenceDirectiveNamesWorker(typesReferenceDirectives, newSourceFilePath); var resolutionsChanged = ts.hasChangesInResolutions(typesReferenceDirectives, resolutions, oldSourceFile.resolvedTypeReferenceDirectiveNames, ts.typeDirectiveIsEqualTo); if (resolutionsChanged) { oldProgram.structureIsReused = 1; newSourceFile.resolvedTypeReferenceDirectiveNames = ts.zipToMap(typesReferenceDirectives, resolutions); } else { newSourceFile.resolvedTypeReferenceDirectiveNames = oldSourceFile.resolvedTypeReferenceDirectiveNames; } } } if (oldProgram.structureIsReused !== 2) { return oldProgram.structureIsReused; } if (host.hasChangedAutomaticTypeDirectiveNames) { return oldProgram.structureIsReused = 1; } missingFilePaths = oldProgram.getMissingFilePaths(); for (var i = 0; i < newSourceFiles.length; i++) { filesByName.set(filePaths[i], newSourceFiles[i]); if (oldProgram.isSourceFileFromExternalLibrary(oldProgram.getSourceFileByPath(filePaths[i]))) { sourceFilesFoundSearchingNodeModules.set(filePaths[i], true); } } files = newSourceFiles; fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics(); for (var _c = 0, modifiedSourceFiles_2 = modifiedSourceFiles; _c < modifiedSourceFiles_2.length; _c++) { var modifiedFile = modifiedSourceFiles_2[_c]; fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile.newFile); } resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); resolvedProjectReferences = oldProgram.getProjectReferences(); sourceFileToPackageName = oldProgram.sourceFileToPackageName; redirectTargetsSet = oldProgram.redirectTargetsSet; return oldProgram.structureIsReused = 2; } function getEmitHost(writeFileCallback) { return __assign({ getPrependNodes: getPrependNodes, getCanonicalFileName: getCanonicalFileName, getCommonSourceDirectory: program.getCommonSourceDirectory, getCompilerOptions: program.getCompilerOptions, getCurrentDirectory: function () { return currentDirectory; }, getNewLine: function () { return host.getNewLine(); }, getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked, readFile: function (f) { return host.readFile(f); }, fileExists: function (f) { return host.fileExists(f); } }, (host.directoryExists ? { directoryExists: function (f) { return host.directoryExists(f); } } : {})); } function getProjectReferences() { if (!resolvedProjectReferences) return; return resolvedProjectReferences; } function getPrependNodes() { if (!projectReferences) { return ts.emptyArray; } var nodes = []; for (var i = 0; i < projectReferences.length; i++) { var ref = projectReferences[i]; var resolvedRefOpts = resolvedProjectReferences[i].commandLine; if (ref.prepend && resolvedRefOpts && resolvedRefOpts.options) { 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 jsMapPath = resolvedRefOpts.options.outFile + ".map"; var jsMap = host.readFile(jsMapPath); var dts = host.readFile(dtsFilename) || "/* Input file " + dtsFilename + " was missing */\r\n"; var dtsMapPath = dtsFilename + ".map"; var dtsMap = host.readFile(dtsMapPath); var node = ts.createInputFiles(js, dts, jsMap && jsMapPath, jsMap, dtsMap && dtsMapPath, dtsMap); nodes.push(node); } } return nodes; } function isSourceFileFromExternalLibrary(file) { return !!sourceFilesFoundSearchingNodeModules.get(file.path); } function isSourceFileDefaultLibrary(file) { if (file.hasNoDefaultLib) { return true; } if (!options.noLib) { return false; } var equalityComparer = host.useCaseSensitiveFileNames() ? ts.equateStringsCaseSensitive : ts.equateStringsCaseInsensitive; if (!options.lib) { return equalityComparer(file.fileName, getDefaultLibraryFileName()); } else { return ts.some(options.lib, function (libFileName) { return equalityComparer(file.fileName, ts.combinePaths(defaultLibraryPath, libFileName)); }); } } function getDiagnosticsProducingTypeChecker() { return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true)); } function dropDiagnosticsProducingTypeChecker() { diagnosticsProducingTypeChecker = undefined; } function getTypeChecker() { 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); }); } function isEmitBlocked(emitFileName) { return hasEmitBlockingDiagnostics.has(toPath(emitFileName)); } function emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, customTransformers) { var declarationDiagnostics = []; if (!emitOnlyDtsFiles) { if (options.noEmit) { return { diagnostics: declarationDiagnostics, sourceMaps: undefined, emittedFiles: undefined, emitSkipped: true }; } 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(undefined, cancellationToken); } if (diagnostics.length > 0 || declarationDiagnostics.length > 0) { return { diagnostics: ts.concatenate(diagnostics, declarationDiagnostics), sourceMaps: undefined, emittedFiles: undefined, emitSkipped: true }; } } } 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, emitOnlyDtsFiles, transformers, customTransformers && customTransformers.afterDeclarations); ts.performance.mark("afterEmit"); ts.performance.measure("Emit", "beforeEmit", "afterEmit"); return emitResult; } function getSourceFile(fileName) { return getSourceFileByPath(toPath(fileName)); } function getSourceFileByPath(path) { return filesByName.get(path); } function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { if (sourceFile) { return getDiagnostics(sourceFile, cancellationToken); } return ts.sortAndDeduplicateDiagnostics(ts.flatMap(program.getSourceFiles(), function (sourceFile) { if (cancellationToken) { cancellationToken.throwIfCancellationRequested(); } return getDiagnostics(sourceFile, cancellationToken); })); } function getSyntacticDiagnostics(sourceFile, cancellationToken) { return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken); } function getSemanticDiagnostics(sourceFile, cancellationToken) { return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile, cancellationToken); } function getDeclarationDiagnostics(sourceFile, cancellationToken) { var options = program.getCompilerOptions(); if (!sourceFile || options.out || options.outFile) { return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); } else { return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); } } function getSyntacticDiagnosticsForFile(sourceFile) { if (ts.isSourceFileJavaScript(sourceFile)) { if (!sourceFile.additionalSyntacticDiagnostics) { sourceFile.additionalSyntacticDiagnostics = getJavaScriptSyntacticDiagnosticsForFile(sourceFile); } return ts.concatenate(sourceFile.additionalSyntacticDiagnostics, sourceFile.parseDiagnostics); } return sourceFile.parseDiagnostics; } function runWithCancellationToken(func) { try { return func(); } catch (e) { if (e instanceof ts.OperationCanceledException) { noDiagnosticsTypeChecker = undefined; diagnosticsProducingTypeChecker = undefined; } throw e; } } function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) { return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedSemanticDiagnosticsForFile, getSemanticDiagnosticsForFileNoCache); } function getSemanticDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(function () { 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); 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); var programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName); var diagnostics; for (var _i = 0, _a = [bindDiagnostics, checkDiagnostics, fileProcessingDiagnosticsInFile, programDiagnosticsInFile, isCheckJs ? sourceFile.jsDocDiagnostics : undefined]; _i < _a.length; _i++) { var diags = _a[_i]; if (diags) { for (var _b = 0, diags_1 = diags; _b < diags_1.length; _b++) { var diag = diags_1[_b]; if (shouldReportDiagnostic(diag)) { diagnostics = ts.append(diagnostics, diag); } } } } return diagnostics; }); } function getSuggestionDiagnostics(sourceFile, cancellationToken) { return runWithCancellationToken(function () { return getDiagnosticsProducingTypeChecker().getSuggestionDiagnostics(sourceFile, cancellationToken); }); } function shouldReportDiagnostic(diagnostic) { var file = diagnostic.file, start = diagnostic.start; if (file) { var lineStarts = ts.getLineStarts(file); 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) { return true; } if (result[3]) { return false; } line--; } } return true; } function getJavaScriptSyntacticDiagnosticsForFile(sourceFile) { return runWithCancellationToken(function () { var diagnostics = []; var parent = sourceFile; walk(sourceFile); return diagnostics; function walk(node) { switch (parent.kind) { case 149: case 152: if (parent.questionToken === node) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?")); return; } 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: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return; case 249: if (node.isExportEquals) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return; } break; case 268: var heritageClause = node; if (heritageClause.token === 108) { diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return; } break; case 236: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return; case 239: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return; case 237: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return; case 238: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return; case 209: diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.non_null_assertions_can_only_be_used_in_a_ts_file)); return; case 208: diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return; case 190: ts.Debug.fail(); } var prevParent = parent; parent = node; ts.forEachChild(node, walk, walkArray); parent = prevParent; } function walkArray(nodes) { if (parent.decorators === nodes && !options.experimentalDecorators) { 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: 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; } case 214: if (nodes === parent.modifiers) { return checkModifiers(nodes, parent.kind === 214); } break; case 152: if (nodes === parent.modifiers) { for (var _i = 0, _a = nodes; _i < _a.length; _i++) { var modifier = _a[_i]; 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: if (nodes === parent.modifiers) { diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.parameter_modifiers_can_only_be_used_in_a_ts_file)); return; } break; 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; } break; } for (var _b = 0, nodes_6 = nodes; _b < nodes_6.length; _b++) { var node = nodes_6[_b]; walk(node); } } function checkModifiers(modifiers, isConstValid) { for (var _i = 0, modifiers_1 = modifiers; _i < modifiers_1.length; _i++) { var modifier = modifiers_1[_i]; switch (modifier.kind) { case 76: if (isConstValid) { continue; } 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; case 115: case 84: case 79: } } } function createDiagnosticForNodeArray(nodes, message, arg0, arg1, arg2) { var start = nodes.pos; return ts.createFileDiagnostic(sourceFile, start, nodes.end - start, message, arg0, arg1, arg2); } function createDiagnosticForNode(node, message, arg0, arg1, arg2) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2); } }); } function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) { return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedDeclarationDiagnosticsForFile, getDeclarationDiagnosticsForFileNoCache); } function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) { return runWithCancellationToken(function () { var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken); return ts.getDeclarationDiagnostics(getEmitHost(ts.noop), resolver, sourceFile); }); } function getAndCacheDiagnostics(sourceFile, cancellationToken, cache, getDiagnostics) { var cachedResult = sourceFile ? cache.perFile && cache.perFile.get(sourceFile.path) : cache.allDiagnostics; if (cachedResult) { return cachedResult; } var result = getDiagnostics(sourceFile, cancellationToken) || ts.emptyArray; if (sourceFile) { if (!cache.perFile) { cache.perFile = ts.createMap(); } cache.perFile.set(sourceFile.path, result); } else { cache.allDiagnostics = result; } return result; } function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) { return sourceFile.isDeclarationFile ? [] : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); } function getOptionsDiagnostics() { return ts.sortAndDeduplicateDiagnostics(ts.concatenate(fileProcessingDiagnostics.getGlobalDiagnostics(), ts.concatenate(programDiagnostics.getGlobalDiagnostics(), options.configFile ? programDiagnostics.getDiagnostics(options.configFile.fileName) : []))); } function getGlobalDiagnostics() { return ts.sortAndDeduplicateDiagnostics(getDiagnosticsProducingTypeChecker().getGlobalDiagnostics().slice()); } function getConfigFileParsingDiagnostics() { return configFileParsingDiagnostics || ts.emptyArray; } function processRootFile(fileName, isDefaultLib, ignoreNoDefaultLib) { processSourceFile(ts.normalizePath(fileName), isDefaultLib, ignoreNoDefaultLib, undefined); } function fileReferenceIsEqualTo(a, b) { return a.fileName === b.fileName; } function moduleNameIsEqualTo(a, b) { return a.kind === 71 ? b.kind === 71 && a.escapedText === b.escapedText : b.kind === 9 && a.text === b.text; } function collectExternalModuleReferences(file) { if (file.imports) { return; } var isJavaScriptFile = ts.isSourceFileJavaScript(file); var isExternalModuleFile = ts.isExternalModule(file); var imports; var moduleAugmentations; var ambientModules; if (options.importHelpers && (options.isolatedModules || isExternalModuleFile) && !file.isDeclarationFile) { var externalHelpersModuleReference = ts.createLiteral(ts.externalHelpersModuleNameText); 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, false); if ((file.flags & 524288) || isJavaScriptFile) { collectDynamicImportOrRequireCalls(node); } } if ((file.flags & 524288) || isJavaScriptFile) { collectDynamicImportOrRequireCalls(file.endOfFileToken); } file.imports = imports || ts.emptyArray; file.moduleAugmentations = moduleAugmentations || ts.emptyArray; file.ambientModuleNames = ambientModules || ts.emptyArray; return; function collectModuleReferences(node, inAmbientModule) { if (ts.isAnyImportOrReExport(node)) { var moduleNameExpr = ts.getExternalModuleName(node); 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) || file.isDeclarationFile)) { var nameText = ts.getTextOfIdentifierOrLiteral(node.name); if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(nameText))) { (moduleAugmentations || (moduleAugmentations = [])).push(node.name); } else if (!inAmbientModule) { if (file.isDeclarationFile) { (ambientModules || (ambientModules = [])).push(nameText); } var body = node.body; if (body) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var statement = _a[_i]; collectModuleReferences(statement, true); } } } } } } function collectDynamicImportOrRequireCalls(node) { if (ts.isRequireCall(node, true)) { imports = ts.append(imports, node.arguments[0]); } else if (ts.isImportCall(node) && node.arguments.length === 1 && ts.isStringLiteralLike(node.arguments[0])) { imports = ts.append(imports, node.arguments[0]); } else if (ts.isLiteralImportTypeNode(node)) { imports = ts.append(imports, node.argument.literal); } collectDynamicImportOrRequireCallsForEachChild(node); if (ts.hasJSDocNodes(node)) { ts.forEach(node.jsDoc, collectDynamicImportOrRequireCallsForEachChild); } } function collectDynamicImportOrRequireCallsForEachChild(node) { ts.forEachChild(node, collectDynamicImportOrRequireCalls); } } function getLibFileFromReference(ref) { var libName = ref.fileName.toLocaleLowerCase(); var libFileName = ts.libMap.get(libName); if (libFileName) { return getSourceFile(ts.combinePaths(defaultLibraryPath, libFileName)); } } function getSourceFileFromReference(referencingFile, ref) { return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), function (fileName) { return filesByName.get(toPath(fileName)); }); } function getSourceFileFromReferenceWorker(fileName, getSourceFile, fail, refFile) { if (ts.hasExtension(fileName)) { if (!options.allowNonTsExtensions && !ts.forEach(supportedExtensions, function (extension) { return ts.fileExtensionIs(host.getCanonicalFileName(fileName), extension); })) { if (fail) fail(ts.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1, fileName, "'" + supportedExtensions.join("', '") + "'"); return undefined; } var sourceFile = getSourceFile(fileName); if (fail) { if (!sourceFile) { var redirect = getProjectReferenceRedirect(fileName); if (redirect) { fail(ts.Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect, fileName); } else { fail(ts.Diagnostics.File_0_not_found, fileName); } } else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) { fail(ts.Diagnostics.A_file_cannot_have_a_reference_to_itself); } } return sourceFile; } else { var sourceFileNoExtension = options.allowNonTsExtensions && getSourceFile(fileName); if (sourceFileNoExtension) return sourceFileNoExtension; if (fail && options.allowNonTsExtensions) { fail(ts.Diagnostics.File_0_not_found, fileName); return undefined; } var sourceFileWithAddedExtension = ts.forEach(supportedExtensions, function (extension) { return getSourceFile(fileName + extension); }); if (fail && !sourceFileWithAddedExtension) fail(ts.Diagnostics.File_0_not_found, fileName + ".ts"); return sourceFileWithAddedExtension; } } function processSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, packageId, refFile, refPos, refEnd) { 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]; } fileProcessingDiagnostics.add(refFile !== undefined && refEnd !== undefined && refPos !== undefined ? ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, diagnostic].concat(args)) : ts.createCompilerDiagnostic.apply(void 0, [diagnostic].concat(args))); }, refFile); } function reportFileNamesDifferOnlyInCasingError(fileName, existingFileName, refFile, refPos, refEnd) { if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, existingFileName)); } else { fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, existingFileName)); } } function createRedirectSourceFile(redirectTarget, unredirected, fileName, path) { var redirect = Object.create(redirectTarget); redirect.fileName = fileName; redirect.path = path; redirect.redirectInfo = { redirectTarget: redirectTarget, unredirected: unredirected }; Object.defineProperties(redirect, { id: { get: function () { return this.redirectInfo.redirectTarget.id; }, set: function (value) { this.redirectInfo.redirectTarget.id = value; }, }, symbol: { get: function () { return this.redirectInfo.redirectTarget.symbol; }, set: function (value) { this.redirectInfo.redirectTarget.symbol = value; }, }, }); return redirect; } function findSourceFile(fileName, path, isDefaultLib, ignoreNoDefaultLib, refFile, refPos, refEnd, packageId) { if (filesByName.has(path)) { var file_1 = filesByName.get(path); if (file_1 && options.forceConsistentCasingInFileNames && ts.getNormalizedAbsolutePath(file_1.fileName, currentDirectory) !== ts.getNormalizedAbsolutePath(fileName, currentDirectory)) { reportFileNamesDifferOnlyInCasingError(fileName, file_1.fileName, refFile, refPos, refEnd); } if (file_1 && sourceFilesFoundSearchingNodeModules.get(file_1.path) && currentNodeModulesDepth === 0) { sourceFilesFoundSearchingNodeModules.set(file_1.path, false); if (!options.noResolve) { processReferencedFiles(file_1, isDefaultLib); processTypeReferenceDirectives(file_1); } processLibReferenceDirectives(file_1); modulesWithElidedImports.set(file_1.path, false); processImportedModules(file_1); } else if (file_1 && modulesWithElidedImports.get(file_1.path)) { if (currentNodeModulesDepth < maxNodeModuleJsDepth) { modulesWithElidedImports.set(file_1.path, false); processImportedModules(file_1); } } return file_1; } var redirectedPath; if (refFile) { var redirect = getProjectReferenceRedirect(fileName); if (redirect) { (refFile.redirectedReferences || (refFile.redirectedReferences = [])).push(fileName); fileName = redirect; redirectedPath = toPath(redirect); } } 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)); } else { fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } }, shouldCreateNewSourceFile); if (packageId) { var packageIdKey = ts.packageIdToString(packageId); var fileFromPackageId = packageIdToSourceFile.get(packageIdKey); if (fileFromPackageId) { var dupFile = createRedirectSourceFile(fileFromPackageId, file, fileName, path); redirectTargetsSet.set(fileFromPackageId.path, true); filesByName.set(path, dupFile); sourceFileToPackageName.set(path, packageId.name); processingOtherFiles.push(dupFile); return dupFile; } else if (file) { packageIdToSourceFile.set(packageIdKey, file); sourceFileToPackageName.set(path, packageId.name); } } filesByName.set(path, file); if (redirectedPath) { filesByName.set(redirectedPath, file); } if (file) { sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0); file.path = path; file.resolvedPath = toPath(fileName); if (host.useCaseSensitiveFileNames()) { var pathLowerCase = path.toLowerCase(); var existingFile = filesByNameIgnoreCase.get(pathLowerCase); if (existingFile) { reportFileNamesDifferOnlyInCasingError(fileName, existingFile.fileName, refFile, refPos, refEnd); } else { filesByNameIgnoreCase.set(pathLowerCase, file); } } skipDefaultLib = skipDefaultLib || (file.hasNoDefaultLib && !ignoreNoDefaultLib); if (!options.noResolve) { processReferencedFiles(file, isDefaultLib); processTypeReferenceDirectives(file); } processLibReferenceDirectives(file); processImportedModules(file); if (isDefaultLib) { processingDefaultLibFiles.push(file); } else { processingOtherFiles.push(file); } } return file; } function getProjectReferenceRedirect(fileName) { var path = toPath(fileName); var normalized = ts.getNormalizedAbsolutePath(fileName, path); var result; projectReferenceRedirects.forEach(function (v, k) { if (result !== undefined) { return undefined; } if (normalized.indexOf(k) === 0) { result = ts.changeExtension(fileName.replace(k, v), ".d.ts"); } }); return result; } function processReferencedFiles(file, isDefaultLib) { ts.forEach(file.referencedFiles, function (ref) { var referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName); processSourceFile(referencedFileName, isDefaultLib, false, undefined, file, ref.pos, ref.end); }); } function processTypeReferenceDirectives(file) { var typeDirectives = ts.map(file.typeReferenceDirectives, function (ref) { return ref.fileName.toLocaleLowerCase(); }); if (!typeDirectives) { return; } var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeDirectives, file.fileName); for (var i = 0; i < typeDirectives.length; i++) { var ref = file.typeReferenceDirectives[i]; var resolvedTypeReferenceDirective = resolutions[i]; 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) { var previousResolution = resolvedTypeReferenceDirectives.get(typeReferenceDirective); if (previousResolution && previousResolution.primary) { return; } var saveResolution = true; if (resolvedTypeReferenceDirective) { if (resolvedTypeReferenceDirective.primary) { processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd); } else { if (previousResolution) { if (resolvedTypeReferenceDirective.resolvedFileName !== previousResolution.resolvedFileName) { var otherFileText = host.readFile(resolvedTypeReferenceDirective.resolvedFileName); if (otherFileText !== getSourceFile(previousResolution.resolvedFileName).text) { 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)); } } saveResolution = false; } else { 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)); } if (saveResolution) { resolvedTypeReferenceDirectives.set(typeReferenceDirective, resolvedTypeReferenceDirective); } } function processLibReferenceDirectives(file) { ts.forEach(file.libReferenceDirectives, function (libReference) { var libName = libReference.fileName.toLocaleLowerCase(); var libFileName = ts.libMap.get(libName); if (libFileName) { processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), true, true); } else { var unqualifiedLibName = ts.removeSuffix(ts.removePrefix(libName, "lib."), ".d.ts"); var suggestion = ts.getSpellingSuggestion(unqualifiedLibName, ts.libs, ts.identity); var message = suggestion ? ts.Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_lib_definition_for_0; fileProcessingDiagnostics.add(createDiagnostic(file, libReference.pos, libReference.end, message, libName, suggestion)); } }); } function createDiagnostic(refFile, refPos, refEnd, message) { var args = []; for (var _i = 4; _i < arguments.length; _i++) { args[_i - 4] = arguments[_i]; } if (refFile === undefined || refPos === undefined || refEnd === undefined) { return ts.createCompilerDiagnostic.apply(void 0, [message].concat(args)); } else { return ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, message].concat(args)); } } function getCanonicalFileName(fileName) { return host.getCanonicalFileName(fileName); } function processImportedModules(file) { collectExternalModuleReferences(file); if (file.imports.length || file.moduleAugmentations.length) { 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); ts.Debug.assert(resolutions.length === moduleNames.length); for (var i = 0; i < moduleNames.length; i++) { var resolution = resolutions[i]; ts.setResolvedModule(file, moduleNames[i], resolution); if (!resolution) { continue; } var isFromNodeModulesSearch = resolution.isExternalLibraryImport; var isJsFile = !ts.resolutionExtensionIsTypeScriptOrJson(resolution.extension); var isJsFileFromNodeModules = isFromNodeModulesSearch && isJsFile; var resolvedFileName = resolution.resolvedFileName; if (isFromNodeModulesSearch) { currentNodeModulesDepth++; } var elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModuleJsDepth; 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)); 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, false, false, file, pos, file.imports[i].end, resolution.packageId); } if (isFromNodeModulesSearch) { currentNodeModulesDepth--; } } } else { file.resolvedModules = undefined; } } function computeCommonSourceDirectory(sourceFiles) { var fileNames = []; for (var _i = 0, sourceFiles_2 = sourceFiles; _i < sourceFiles_2.length; _i++) { var file = sourceFiles_2[_i]; if (!file.isDeclarationFile) { fileNames.push(file.fileName); } } return computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName); } function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) { var allFilesBelongToPath = true; if (sourceFiles) { var absoluteRootDirectoryPath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(rootDirectory, currentDirectory)); for (var _i = 0, sourceFiles_3 = sourceFiles; _i < sourceFiles_3.length; _i++) { var sourceFile = sourceFiles_3[_i]; if (!sourceFile.isDeclarationFile) { var absoluteSourceFilePath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory)); if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, sourceFile.fileName, options.rootDir)); allFilesBelongToPath = false; } } } } return allFilesBelongToPath; } function parseProjectReferenceConfigFile(ref) { var refPath = resolveProjectReferencePath(host, ref); var basePath = ts.getNormalizedAbsolutePath(ts.getDirectoryPath(refPath), host.getCurrentDirectory()); var sourceFile = host.getSourceFile(refPath, 100); if (sourceFile === undefined) { return undefined; } 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)); target.set(rootDir, getDeclarationOutputDirectory(referencedProject)); } function getDeclarationOutputDirectory(proj) { return proj.options.declarationDir || proj.options.outDir || ts.getDirectoryPath(proj.options.configFilePath); } function verifyCompilerOptions() { if (options.strictPropertyInitialization && !options.strictNullChecks) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks"); } if (options.isolatedModules) { if (options.declaration) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declaration", "isolatedModules"); } if (options.noEmitOnError) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmitOnError", "isolatedModules"); } if (options.out) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules"); } if (options.outFile) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "outFile", "isolatedModules"); } } if (options.inlineSourceMap) { if (options.sourceMap) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceMap", "inlineSourceMap"); } if (options.mapRoot) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "mapRoot", "inlineSourceMap"); } } if (options.paths && options.baseUrl === undefined) { createDiagnosticForOptionName(ts.Diagnostics.Option_paths_cannot_be_used_without_specifying_baseUrl_option, "paths"); } if (options.composite) { if (options.declaration === false) { createDiagnosticForOptionName(ts.Diagnostics.Composite_projects_may_not_disable_declaration_emit, "declaration"); } } if (projectReferences) { for (var i = 0; i < projectReferences.length; i++) { var ref = projectReferences[i]; var resolvedRefOpts = resolvedProjectReferences[i] && resolvedProjectReferences[i].commandLine.options; if (resolvedRefOpts === undefined) { createDiagnosticForReference(i, ts.Diagnostics.File_0_does_not_exist, ref.path); continue; } if (!resolvedRefOpts.composite) { createDiagnosticForReference(i, ts.Diagnostics.Referenced_project_0_must_have_setting_composite_Colon_true, ref.path); } if (ref.prepend) { if (resolvedRefOpts.outFile) { if (!host.fileExists(resolvedRefOpts.outFile)) { createDiagnosticForReference(i, ts.Diagnostics.Output_file_0_from_project_1_does_not_exist, resolvedRefOpts.outFile, ref.path); } } else { createDiagnosticForReference(i, ts.Diagnostics.Cannot_prepend_project_0_because_it_does_not_have_outFile_set, ref.path); } } } } 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(); }); var _loop_11 = function (file) { if (normalizedRootNames.every(function (r) { return r !== file; })) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_is_not_in_project_file_list_Projects_must_list_all_files_or_use_an_include_pattern, file)); } }; for (var _i = 0, sourceFiles_4 = sourceFiles; _i < sourceFiles_4.length; _i++) { var file = sourceFiles_4[_i]; _loop_11(file); } } if (options.paths) { for (var key in options.paths) { if (!ts.hasProperty(options.paths, key)) { continue; } if (!ts.hasZeroOrOneAsteriskCharacter(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(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]; var typeOfSubst = typeof subst; if (typeOfSubst === "string") { if (!ts.hasZeroOrOneAsteriskCharacter(subst)) { createDiagnosticForOptionPathKeyValue(key, i, ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key); } } else { createDiagnosticForOptionPathKeyValue(key, i, ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst); } } } else { createDiagnosticForOptionPaths(false, key, ts.Diagnostics.Substitutions_for_pattern_0_should_be_an_array, key); } } } if (!options.sourceMap && !options.inlineSourceMap) { if (options.inlineSources) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "inlineSources"); } if (options.sourceRoot) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "sourceRoot"); } } if (options.out && options.outFile) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "outFile"); } if (options.mapRoot && !(options.sourceMap || options.declarationMap)) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "mapRoot", "sourceMap", "declarationMap"); } if (options.declarationDir) { if (!options.declaration) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "declarationDir", "declaration"); } if (options.out || options.outFile) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declarationDir", options.out ? "out" : "outFile"); } } if (options.declarationMap && !options.declaration) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "declarationMap", "declaration"); } if (options.lib && options.noLib) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "lib", "noLib"); } 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; 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) { 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; }); if (firstNonExternalModuleSourceFile) { var span = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile); 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 && 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)); } 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"); } else if (options.module === undefined && firstNonAmbientExternalModuleSourceFile) { var span = ts.getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, options.out ? "out" : "outFile")); } } if (options.resolveJsonModule) { if (ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeJs) { createDiagnosticForOptionName(ts.Diagnostics.Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy, "resolveJsonModule"); } } if (options.outDir || options.sourceRoot || options.mapRoot) { var dir = getCommonSourceDirectory(); 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"); } } if (!options.noEmit && options.allowJs && options.declaration) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", "declaration"); } if (options.checkJs && !options.allowJs) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "checkJs", "allowJs")); } if (options.emitDeclarationOnly) { if (!options.declaration) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDeclarationOnly", "declaration"); } if (options.noEmit) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "emitDeclarationOnly", "noEmit"); } } if (options.emitDecoratorMetadata && !options.experimentalDecorators) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"); } if (options.jsxFactory) { if (options.reactNamespace) { createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "reactNamespace", "jsxFactory"); } if (!ts.parseIsolatedEntityName(options.jsxFactory, languageVersion)) { createOptionValueDiagnostic("jsxFactory", ts.Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name, options.jsxFactory); } } 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 (!options.noEmit && !options.suppressOutputPathCheck) { var emitHost = getEmitHost(); var emitFilesSeen_1 = ts.createMap(); ts.forEachEmittedFile(emitHost, function (emitFileNames) { if (!options.emitDeclarationOnly) { verifyEmitFilePath(emitFileNames.jsFilePath, emitFilesSeen_1); } verifyEmitFilePath(emitFileNames.declarationFilePath, emitFilesSeen_1); }); } function verifyEmitFilePath(emitFileName, emitFilesSeen) { if (emitFileName) { var emitFilePath = toPath(emitFileName); if (filesByName.has(emitFilePath)) { var chain_2; if (!options.configFilePath) { 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; if (emitFilesSeen.has(emitFileKey)) { blockEmittingOfFile(emitFileName, ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files, emitFileName)); } else { emitFilesSeen.set(emitFileKey, true); } } } } function createDiagnosticForOptionPathKeyValue(key, valueIndex, message, arg0, arg1, arg2) { var needCompilerDiagnostic = true; var pathsSyntax = getOptionPathsSyntax(); for (var _i = 0, pathsSyntax_1 = pathsSyntax; _i < pathsSyntax_1.length; _i++) { var pathProp = pathsSyntax_1[_i]; if (ts.isObjectLiteralExpression(pathProp.initializer)) { for (var _a = 0, _b = ts.getPropertyAssignment(pathProp.initializer, key); _a < _b.length; _a++) { var keyProps = _b[_a]; var initializer = keyProps.initializer; if (ts.isArrayLiteralExpression(initializer) && initializer.elements.length > valueIndex) { programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, initializer.elements[valueIndex], message, arg0, arg1, arg2)); needCompilerDiagnostic = false; } } } } if (needCompilerDiagnostic) { programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0, arg1, arg2)); } } function createDiagnosticForOptionPaths(onKey, key, message, arg0) { var needCompilerDiagnostic = true; var pathsSyntax = getOptionPathsSyntax(); 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, undefined, message, arg0)) { needCompilerDiagnostic = false; } } if (needCompilerDiagnostic) { programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0)); } } function getOptionsSyntaxByName(name) { var compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax(); if (compilerOptionsObjectLiteralSyntax) { return ts.getPropertyAssignment(compilerOptionsObjectLiteralSyntax, name); } return undefined; } function getOptionPathsSyntax() { return getOptionsSyntaxByName("paths") || ts.emptyArray; } function createDiagnosticForOptionName(message, option1, option2, option3) { createDiagnosticForOption(true, option1, option2, message, option1, option2, option3); } function createOptionValueDiagnostic(option1, message, arg0) { createDiagnosticForOption(false, option1, undefined, message, arg0); } function createDiagnosticForReference(index, message, arg0, arg1) { var referencesSyntax = getProjectReferencesSyntax(); if (referencesSyntax) { if (createOptionDiagnosticInArrayLiteralSyntax(referencesSyntax, index, message, arg0, arg1)) { return; } } programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0, arg1)); } function createDiagnosticForOption(onKey, option1, option2, message, arg0, arg1, arg2) { var compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax(); var needCompilerDiagnostic = !compilerOptionsObjectLiteralSyntax || !createOptionDiagnosticInObjectLiteralSyntax(compilerOptionsObjectLiteralSyntax, onKey, option1, option2, message, arg0, arg1, arg2); if (needCompilerDiagnostic) { programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0, arg1, arg2)); } } function getProjectReferencesSyntax() { if (_referencesArrayLiteralSyntax === undefined) { _referencesArrayLiteralSyntax = null; if (options.configFile) { 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)) { _referencesArrayLiteralSyntax = prop.initializer; break; } } } } return _referencesArrayLiteralSyntax; } function getCompilerOptionsObjectLiteralSyntax() { if (_compilerOptionsObjectLiteralSyntax === undefined) { _compilerOptionsObjectLiteralSyntax = null; var jsonObjectLiteral = ts.getTsConfigObjectLiteralExpression(options.configFile); if (jsonObjectLiteral) { for (var _i = 0, _a = ts.getPropertyAssignment(jsonObjectLiteral, "compilerOptions"); _i < _a.length; _i++) { var prop = _a[_i]; if (ts.isObjectLiteralExpression(prop.initializer)) { _compilerOptionsObjectLiteralSyntax = prop.initializer; break; } } } } return _compilerOptionsObjectLiteralSyntax; } function createOptionDiagnosticInObjectLiteralSyntax(objectLiteral, onKey, key1, key2, message, arg0, arg1, arg2) { var props = ts.getPropertyAssignment(objectLiteral, key1, key2); for (var _i = 0, props_2 = props; _i < props_2.length; _i++) { var prop = props_2[_i]; programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, arg0, arg1, arg2)); } return !!props.length; } function createOptionDiagnosticInArrayLiteralSyntax(arrayLiteral, index, message, arg0, arg1, arg2) { if (arrayLiteral.elements.length <= index) { return false; } programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, arrayLiteral.elements[index], message, arg0, arg1, arg2)); return false; } function blockEmittingOfFile(emitFileName, diag) { hasEmitBlockingDiagnostics.set(toPath(emitFileName), true); programDiagnostics.add(diag); } function isEmittedFile(file) { if (options.noEmit) { return false; } var filePath = toPath(file); if (getSourceFileByPath(filePath)) { return false; } var out = options.outFile || options.out; if (out) { return isSameFile(filePath, out) || isSameFile(filePath, ts.removeFileExtension(out) + ".d.ts"); } if (options.declarationDir && ts.containsPath(options.declarationDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames())) { return true; } if (options.outDir) { return ts.containsPath(options.outDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames()); } if (ts.fileExtensionIsOneOf(filePath, ts.supportedJavascriptExtensions) || ts.fileExtensionIs(filePath, ".d.ts")) { var filePathWithoutExtension = ts.removeFileExtension(filePath); return !!getSourceFileByPath((filePathWithoutExtension + ".ts")) || !!getSourceFileByPath((filePathWithoutExtension + ".tsx")); } return false; } function isSameFile(file1, file2) { return ts.comparePaths(file1, file2, currentDirectory, !host.useCaseSensitiveFileNames()) === 0; } } ts.createProgram = createProgram; function parseConfigHostFromCompilerHost(host) { return { fileExists: function (f) { return host.fileExists(f); }, readDirectory: function (root, extensions, includes, depth) { return host.readDirectory ? host.readDirectory(root, extensions, includes, depth) : []; }, readFile: function (f) { return host.readFile(f); }, useCaseSensitiveFileNames: host.useCaseSensitiveFileNames(), getCurrentDirectory: function () { return host.getCurrentDirectory(); }, onUnRecoverableConfigFileDiagnostic: function () { return undefined; } }; } ts.parseConfigHostFromCompilerHost = parseConfigHostFromCompilerHost; function resolveProjectReferencePath(host, ref) { if (!host.fileExists(ref.path)) { return ts.combinePaths(ref.path, "tsconfig.json"); } return ref.path; } ts.resolveProjectReferencePath = resolveProjectReferencePath; function getResolutionDiagnostic(options, _a) { var extension = _a.extension; switch (extension) { case ".ts": case ".d.ts": case ".json": return undefined; case ".tsx": return needJsx(); case ".jsx": return needJsx() || needAllowJs(); case ".js": return needAllowJs(); } function needJsx() { return options.jsx ? undefined : ts.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set; } function needAllowJs() { return options.allowJs || !ts.getStrictOptionValue(options, "noImplicitAny") ? undefined : ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type; } } ts.getResolutionDiagnostic = getResolutionDiagnostic; function getModuleNames(_a) { var imports = _a.imports, moduleAugmentations = _a.moduleAugmentations; 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) { res.push(aug.text); } } return res; } })(ts || (ts = {})); var ts; (function (ts) { function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers) { var outputFiles = []; var emitResult = program.emit(sourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers); return { outputFiles: outputFiles, emitSkipped: emitResult.emitSkipped }; function writeFile(fileName, text, writeByteOrderMark) { outputFiles.push({ name: fileName, writeByteOrderMark: writeByteOrderMark, text: text }); } } ts.getFileEmitOutput = getFileEmitOutput; })(ts || (ts = {})); (function (ts) { var BuilderState; (function (BuilderState) { function getReferencedFiles(program, sourceFile, getCanonicalFileName) { var referencedFiles; if (sourceFile.imports && sourceFile.imports.length > 0) { var checker = program.getTypeChecker(); for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) { var importName = _a[_i]; var symbol = checker.getSymbolAtLocation(importName); if (symbol && symbol.declarations && symbol.declarations[0]) { var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]); if (declarationSourceFile) { addReferencedFile(declarationSourceFile.path); } } } } var sourceFileDirectory = ts.getDirectoryPath(sourceFile.path); if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) { for (var _b = 0, _c = sourceFile.referencedFiles; _b < _c.length; _b++) { var referencedFile = _c[_b]; var referencedPath = ts.toPath(referencedFile.fileName, sourceFileDirectory, getCanonicalFileName); addReferencedFile(referencedPath); } } if (sourceFile.resolvedTypeReferenceDirectiveNames) { sourceFile.resolvedTypeReferenceDirectiveNames.forEach(function (resolvedTypeReferenceDirective) { if (!resolvedTypeReferenceDirective) { return; } var fileName = resolvedTypeReferenceDirective.resolvedFileName; var typeFilePath = ts.toPath(fileName, sourceFileDirectory, getCanonicalFileName); addReferencedFile(typeFilePath); }); } return referencedFiles; function addReferencedFile(referencedPath) { if (!referencedFiles) { referencedFiles = ts.createMap(); } referencedFiles.set(referencedPath, true); } } function canReuseOldState(newReferencedMap, oldState) { return oldState && !oldState.referencedMap === !newReferencedMap; } BuilderState.canReuseOldState = canReuseOldState; 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); for (var _i = 0, _a = newProgram.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; var version_1 = sourceFile.version; var oldInfo = useOldState ? oldState.fileInfos.get(sourceFile.path) : undefined; if (referencedMap) { var newReferences = getReferencedFiles(newProgram, sourceFile, getCanonicalFileName); if (newReferences) { referencedMap.set(sourceFile.path, newReferences); } } fileInfos.set(sourceFile.path, { version: version_1, signature: oldInfo && oldInfo.signature }); } return { fileInfos: fileInfos, referencedMap: referencedMap, hasCalledUpdateShapeSignature: hasCalledUpdateShapeSignature, allFilesExcludingDefaultLibraryFile: undefined, allFileNames: undefined }; } BuilderState.create = create; function getFilesAffectedBy(state, programOfThisState, path, cancellationToken, computeHash, cacheToUpdateSignature) { var signatureCache = cacheToUpdateSignature || ts.createMap(); var sourceFile = programOfThisState.getSourceFileByPath(path); if (!sourceFile) { return ts.emptyArray; } if (!updateShapeSignature(state, programOfThisState, sourceFile, signatureCache, cancellationToken, computeHash)) { return [sourceFile]; } var result = (state.referencedMap ? getFilesAffectedByUpdatedShapeWhenModuleEmit : getFilesAffectedByUpdatedShapeWhenNonModuleEmit)(state, programOfThisState, sourceFile, signatureCache, cancellationToken, computeHash); if (!cacheToUpdateSignature) { updateSignaturesFromCache(state, signatureCache); } return result; } BuilderState.getFilesAffectedBy = getFilesAffectedBy; function updateSignaturesFromCache(state, signatureCache) { signatureCache.forEach(function (signature, path) { state.fileInfos.get(path).signature = signature; state.hasCalledUpdateShapeSignature.set(path, true); }); } BuilderState.updateSignaturesFromCache = updateSignaturesFromCache; function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash) { ts.Debug.assert(!!sourceFile); if (state.hasCalledUpdateShapeSignature.has(sourceFile.path) || cacheToUpdateSignature.has(sourceFile.path)) { return false; } var info = state.fileInfos.get(sourceFile.path); if (!info) return ts.Debug.fail(); var prevSignature = info.signature; var latestSignature; if (sourceFile.isDeclarationFile) { latestSignature = sourceFile.version; } else { var emitOutput = ts.getFileEmitOutput(programOfThisState, sourceFile, true, cancellationToken); if (emitOutput.outputFiles && emitOutput.outputFiles.length > 0) { latestSignature = computeHash(emitOutput.outputFiles[0].text); } else { latestSignature = prevSignature; } } cacheToUpdateSignature.set(sourceFile.path, latestSignature); return !prevSignature || latestSignature !== prevSignature; } function getAllDependencies(state, programOfThisState, sourceFile) { var _a; var compilerOptions = programOfThisState.getCompilerOptions(); if (compilerOptions.outFile || compilerOptions.out) { return getAllFileNames(state, programOfThisState); } if (!state.referencedMap || (!ts.isExternalModule(sourceFile) && !containsOnlyAmbientModules(sourceFile))) { return getAllFileNames(state, programOfThisState); } var seenMap = ts.createMap(); var queue = [sourceFile.path]; while (queue.length) { var path = queue.pop(); if (!seenMap.has(path)) { seenMap.set(path, true); var references = state.referencedMap.get(path); if (references) { var iterator = references.keys(); for (var _b = iterator.next(), value = _b.value, done = _b.done; !done; _a = iterator.next(), value = _a.value, done = _a.done, _a) { queue.push(value); } } } } return ts.arrayFrom(ts.mapDefinedIterator(seenMap.keys(), function (path) { var file = programOfThisState.getSourceFileByPath(path); return file ? file.fileName : path; })); } BuilderState.getAllDependencies = getAllDependencies; function getAllFileNames(state, programOfThisState) { if (!state.allFileNames) { var sourceFiles = programOfThisState.getSourceFiles(); state.allFileNames = sourceFiles === ts.emptyArray ? ts.emptyArray : sourceFiles.map(function (file) { return file.fileName; }); } return state.allFileNames; } 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; })); } function containsOnlyAmbientModules(sourceFile) { for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; if (!ts.isModuleWithStringLiteralName(statement)) { return false; } } return true; } function getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, firstSourceFile) { if (state.allFilesExcludingDefaultLibraryFile) { return state.allFilesExcludingDefaultLibraryFile; } var result; addSourceFile(firstSourceFile); for (var _i = 0, _a = programOfThisState.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; if (sourceFile !== firstSourceFile) { addSourceFile(sourceFile); } } state.allFilesExcludingDefaultLibraryFile = result || ts.emptyArray; return state.allFilesExcludingDefaultLibraryFile; function addSourceFile(sourceFile) { if (!programOfThisState.isSourceFileDefaultLibrary(sourceFile)) { (result || (result = [])).push(sourceFile); } } } function getFilesAffectedByUpdatedShapeWhenNonModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape) { var compilerOptions = programOfThisState.getCompilerOptions(); if (compilerOptions && (compilerOptions.out || compilerOptions.outFile)) { return [sourceFileWithUpdatedShape]; } return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); } function getFilesAffectedByUpdatedShapeWhenModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape, cacheToUpdateSignature, cancellationToken, computeHash) { if (!ts.isExternalModule(sourceFileWithUpdatedShape) && !containsOnlyAmbientModules(sourceFileWithUpdatedShape)) { return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); } var compilerOptions = programOfThisState.getCompilerOptions(); if (compilerOptions && (compilerOptions.isolatedModules || compilerOptions.out || compilerOptions.outFile)) { return [sourceFileWithUpdatedShape]; } var seenFileNamesMap = ts.createMap(); seenFileNamesMap.set(sourceFileWithUpdatedShape.path, sourceFileWithUpdatedShape); var queue = getReferencedByPaths(state, sourceFileWithUpdatedShape.path); while (queue.length > 0) { var currentPath = queue.pop(); if (!seenFileNamesMap.has(currentPath)) { var currentSourceFile = programOfThisState.getSourceFileByPath(currentPath); seenFileNamesMap.set(currentPath, currentSourceFile); if (currentSourceFile && updateShapeSignature(state, programOfThisState, currentSourceFile, cacheToUpdateSignature, cancellationToken, computeHash)) { queue.push.apply(queue, getReferencedByPaths(state, currentPath)); } } } return ts.arrayFrom(ts.mapDefinedIterator(seenFileNamesMap.values(), function (value) { return value; })); } })(BuilderState = ts.BuilderState || (ts.BuilderState = {})); })(ts || (ts = {})); var ts; (function (ts) { function hasSameKeys(map1, map2) { return map1 === map2 || map1 !== undefined && map2 !== undefined && map1.size === map2.size && !ts.forEachKey(map1, function (key) { return !map2.has(key); }); } function createBuilderProgramState(newProgram, getCanonicalFileName, oldState) { var state = ts.BuilderState.create(newProgram, getCanonicalFileName, oldState); state.program = newProgram; var compilerOptions = newProgram.getCompilerOptions(); if (!compilerOptions.outFile && !compilerOptions.out) { state.semanticDiagnosticsPerFile = ts.createMap(); } state.changedFilesSet = ts.createMap(); var useOldState = ts.BuilderState.canReuseOldState(state.referencedMap, oldState); var canCopySemanticDiagnostics = useOldState && oldState.semanticDiagnosticsPerFile && !!state.semanticDiagnosticsPerFile; if (useOldState) { 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"); } ts.copyEntries(oldState.changedFilesSet, state.changedFilesSet); } var referencedMap = state.referencedMap; var oldReferencedMap = useOldState ? oldState.referencedMap : undefined; state.fileInfos.forEach(function (info, sourceFilePath) { var oldInfo; var newReferences; if (!useOldState || !(oldInfo = oldState.fileInfos.get(sourceFilePath)) || oldInfo.version !== info.version || !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) || newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) { state.changedFilesSet.set(sourceFilePath, true); } else if (canCopySemanticDiagnostics) { var diagnostics = oldState.semanticDiagnosticsPerFile.get(sourceFilePath); if (diagnostics) { state.semanticDiagnosticsPerFile.set(sourceFilePath, diagnostics); } } }); return state; } function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) { ts.Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.path)); } function getNextAffectedFile(state, cancellationToken, computeHash) { while (true) { var affectedFiles = state.affectedFiles; if (affectedFiles) { var seenAffectedFiles = state.seenAffectedFiles, semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile; var affectedFilesIndex = state.affectedFilesIndex; while (affectedFilesIndex < affectedFiles.length) { var affectedFile = affectedFiles[affectedFilesIndex]; if (!seenAffectedFiles.has(affectedFile.path)) { state.affectedFilesIndex = affectedFilesIndex; semanticDiagnosticsPerFile.delete(affectedFile.path); return affectedFile; } seenAffectedFiles.set(affectedFile.path, true); affectedFilesIndex++; } state.changedFilesSet.delete(state.currentChangedFilePath); state.currentChangedFilePath = undefined; ts.BuilderState.updateSignaturesFromCache(state, state.currentAffectedFilesSignatures); state.currentAffectedFilesSignatures.clear(); state.affectedFiles = undefined; } var nextKey = state.changedFilesSet.keys().next(); if (nextKey.done) { return undefined; } var compilerOptions = state.program.getCompilerOptions(); if (compilerOptions.outFile || compilerOptions.out) { ts.Debug.assert(!state.semanticDiagnosticsPerFile); return state.program; } state.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures || ts.createMap(); state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, state.program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures); state.currentChangedFilePath = nextKey.value; state.semanticDiagnosticsPerFile.delete(nextKey.value); state.affectedFilesIndex = 0; state.seenAffectedFiles = state.seenAffectedFiles || ts.createMap(); } } function doneWithAffectedFile(state, affected) { if (affected === state.program) { state.changedFilesSet.clear(); } else { state.seenAffectedFiles.set(affected.path, true); state.affectedFilesIndex++; } } function toAffectedFileResult(state, result, affected) { doneWithAffectedFile(state, affected); return { result: result, affected: affected }; } function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken) { var path = sourceFile.path; var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path); if (cachedDiagnostics) { return cachedDiagnostics; } var diagnostics = state.program.getSemanticDiagnostics(sourceFile, cancellationToken); state.semanticDiagnosticsPerFile.set(path, diagnostics); return diagnostics; } var BuilderProgramKind; (function (BuilderProgramKind) { BuilderProgramKind[BuilderProgramKind["SemanticDiagnosticsBuilderProgram"] = 0] = "SemanticDiagnosticsBuilderProgram"; BuilderProgramKind[BuilderProgramKind["EmitAndSemanticDiagnosticsBuilderProgram"] = 1] = "EmitAndSemanticDiagnosticsBuilderProgram"; })(BuilderProgramKind = ts.BuilderProgramKind || (ts.BuilderProgramKind = {})); function getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics) { var host; var newProgram; var oldProgram; if (newProgramOrRootNames === undefined) { ts.Debug.assert(hostOrOptions === undefined); host = oldProgramOrHost; oldProgram = configFileParsingDiagnosticsOrOldProgram; ts.Debug.assert(!!oldProgram); newProgram = oldProgram.getProgram(); } else if (ts.isArray(newProgramOrRootNames)) { oldProgram = configFileParsingDiagnosticsOrOldProgram; newProgram = ts.createProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, oldProgram && oldProgram.getProgram(), configFileParsingDiagnostics); host = oldProgramOrHost; } else { newProgram = newProgramOrRootNames; host = hostOrOptions; oldProgram = oldProgramOrHost; configFileParsingDiagnostics = configFileParsingDiagnosticsOrOldProgram; } return { host: host, newProgram: newProgram, oldProgram: oldProgram, configFileParsingDiagnostics: configFileParsingDiagnostics || ts.emptyArray }; } ts.getBuilderCreationParameters = getBuilderCreationParameters; function createBuilderProgram(kind, _a) { var newProgram = _a.newProgram, host = _a.host, oldProgram = _a.oldProgram, configFileParsingDiagnostics = _a.configFileParsingDiagnostics; var oldState = oldProgram && oldProgram.getState(); if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { newProgram = undefined; oldState = undefined; return oldProgram; } var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames()); var computeHash = host.createHash || ts.identity; var state = createBuilderProgramState(newProgram, getCanonicalFileName, oldState); newProgram = undefined; oldProgram = undefined; oldState = undefined; var result = { getState: function () { return state; }, getProgram: function () { return state.program; }, getCompilerOptions: function () { return state.program.getCompilerOptions(); }, getSourceFile: function (fileName) { return state.program.getSourceFile(fileName); }, getSourceFiles: function () { return state.program.getSourceFiles(); }, getOptionsDiagnostics: function (cancellationToken) { return state.program.getOptionsDiagnostics(cancellationToken); }, getGlobalDiagnostics: function (cancellationToken) { return state.program.getGlobalDiagnostics(cancellationToken); }, getConfigFileParsingDiagnostics: function () { return configFileParsingDiagnostics || state.program.getConfigFileParsingDiagnostics(); }, getSyntacticDiagnostics: function (sourceFile, cancellationToken) { return state.program.getSyntacticDiagnostics(sourceFile, cancellationToken); }, getSemanticDiagnostics: getSemanticDiagnostics, emit: emit, getAllDependencies: function (sourceFile) { return ts.BuilderState.getAllDependencies(state, state.program, sourceFile); }, getCurrentDirectory: function () { return state.program.getCurrentDirectory(); } }; if (kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram) { result.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile; } else if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) { result.emitNextAffectedFile = emitNextAffectedFile; } else { ts.notImplemented(); } return result; function emitNextAffectedFile(writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) { var affected = getNextAffectedFile(state, cancellationToken, computeHash); if (!affected) { return undefined; } return toAffectedFileResult(state, state.program.emit(affected === state.program ? undefined : affected, writeFile || host.writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers), affected); } function emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) { if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) { assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile); if (!targetSourceFile) { var sourceMaps = []; var emitSkipped = false; var diagnostics = void 0; var emittedFiles = []; var affectedEmitResult = void 0; while (affectedEmitResult = emitNextAffectedFile(writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers)) { emitSkipped = emitSkipped || affectedEmitResult.result.emitSkipped; diagnostics = ts.addRange(diagnostics, affectedEmitResult.result.diagnostics); emittedFiles = ts.addRange(emittedFiles, affectedEmitResult.result.emittedFiles); sourceMaps = ts.addRange(sourceMaps, affectedEmitResult.result.sourceMaps); } return { emitSkipped: emitSkipped, diagnostics: diagnostics || ts.emptyArray, emittedFiles: emittedFiles, sourceMaps: sourceMaps }; } } return state.program.emit(targetSourceFile, writeFile || host.writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers); } function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) { while (true) { var affected = getNextAffectedFile(state, cancellationToken, computeHash); if (!affected) { return undefined; } else if (affected === state.program) { return toAffectedFileResult(state, state.program.getSemanticDiagnostics(undefined, cancellationToken), affected); } if (ignoreSourceFile && ignoreSourceFile(affected)) { doneWithAffectedFile(state, affected); continue; } return toAffectedFileResult(state, getSemanticDiagnosticsOfFile(state, affected, cancellationToken), affected); } } function getSemanticDiagnostics(sourceFile, cancellationToken) { assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); var compilerOptions = state.program.getCompilerOptions(); if (compilerOptions.outFile || compilerOptions.out) { ts.Debug.assert(!state.semanticDiagnosticsPerFile); return state.program.getSemanticDiagnostics(sourceFile, cancellationToken); } if (sourceFile) { return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken); } if (kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram) { var affected = void 0; while (affected = getNextAffectedFile(state, cancellationToken, computeHash)) { doneWithAffectedFile(state, affected); } } var diagnostics; for (var _i = 0, _a = state.program.getSourceFiles(); _i < _a.length; _i++) { var sourceFile_2 = _a[_i]; diagnostics = ts.addRange(diagnostics, getSemanticDiagnosticsOfFile(state, sourceFile_2, cancellationToken)); } return diagnostics || ts.emptyArray; } } ts.createBuilderProgram = createBuilderProgram; })(ts || (ts = {})); (function (ts) { function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics) { return ts.createBuilderProgram(ts.BuilderProgramKind.SemanticDiagnosticsBuilderProgram, ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics)); } ts.createSemanticDiagnosticsBuilderProgram = createSemanticDiagnosticsBuilderProgram; function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics) { return ts.createBuilderProgram(ts.BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram, ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics)); } ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram; function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics) { var program = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics).newProgram; return { getProgram: function () { return program; }, getState: ts.notImplemented, getCompilerOptions: ts.notImplemented, getSourceFile: ts.notImplemented, getSourceFiles: ts.notImplemented, getOptionsDiagnostics: ts.notImplemented, getGlobalDiagnostics: ts.notImplemented, getConfigFileParsingDiagnostics: ts.notImplemented, getSyntacticDiagnostics: ts.notImplemented, getSemanticDiagnostics: ts.notImplemented, emit: ts.notImplemented, getAllDependencies: ts.notImplemented, getCurrentDirectory: ts.notImplemented }; } ts.createAbstractBuilder = createAbstractBuilder; })(ts || (ts = {})); var ts; (function (ts) { ts.maxNumberOfFilesToIterateForInvalidation = 256; function createResolutionCache(resolutionHost, rootDirForResolution, logChangesWhenResolvingModule) { var filesWithChangedSetOfUnresolvedImports; var filesWithInvalidatedResolutions; var filesWithInvalidatedNonRelativeUnresolvedImports; var allFilesHaveInvalidatedResolution = false; var getCurrentDirectory = ts.memoize(function () { return resolutionHost.getCurrentDirectory(); }); var cachedDirectoryStructureHost = resolutionHost.getCachedDirectoryStructureHost(); 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(); 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)); var typeRootsWatches = ts.createMap(); return { startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions, finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions, startCachingPerDirectoryResolution: clearPerDirectoryResolutions, finishCachingPerDirectoryResolution: finishCachingPerDirectoryResolution, resolveModuleNames: resolveModuleNames, getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache, resolveTypeReferenceDirectives: resolveTypeReferenceDirectives, removeResolutionsOfFile: removeResolutionsOfFile, invalidateResolutionOfFile: invalidateResolutionOfFile, setFilesWithInvalidatedNonRelativeUnresolvedImports: setFilesWithInvalidatedNonRelativeUnresolvedImports, createHasInvalidatedResolution: createHasInvalidatedResolution, updateTypeRootsWatch: updateTypeRootsWatch, closeTypeRootsWatch: closeTypeRootsWatch, clear: clear }; function getResolvedModule(resolution) { return resolution.resolvedModule; } function getResolvedTypeReferenceDirective(resolution) { return resolution.resolvedTypeReferenceDirective; } function isInDirectoryPath(dir, file) { if (dir === undefined || file.length <= dir.length) { return false; } return ts.startsWith(file, dir) && file[dir.length] === ts.directorySeparator; } function clear() { ts.clearMap(directoryWatchesOfFailedLookups, ts.closeFileWatcherOf); customFailedLookupPaths.clear(); closeTypeRootsWatch(); resolvedModuleNames.clear(); resolvedTypeReferenceDirectives.clear(); allFilesHaveInvalidatedResolution = false; clearPerDirectoryResolutions(); } function startRecordingFilesWithChangedResolutions() { filesWithChangedSetOfUnresolvedImports = []; } function finishRecordingFilesWithChangedResolutions() { var collected = filesWithChangedSetOfUnresolvedImports; filesWithChangedSetOfUnresolvedImports = undefined; return collected; } function isFileWithInvalidatedNonRelativeUnresolvedImports(path) { if (!filesWithInvalidatedNonRelativeUnresolvedImports) { return false; } var value = filesWithInvalidatedNonRelativeUnresolvedImports.get(path); return !!value && !!value.length; } function createHasInvalidatedResolution(forceAllFilesAsInvalidated) { if (allFilesHaveInvalidatedResolution || forceAllFilesAsInvalidated) { filesWithInvalidatedResolutions = undefined; return ts.returnTrue; } var collected = filesWithInvalidatedResolutions; filesWithInvalidatedResolutions = undefined; return function (path) { return (!!collected && collected.has(path)) || isFileWithInvalidatedNonRelativeUnresolvedImports(path); }; } function clearPerDirectoryResolutions() { perDirectoryResolvedModuleNames.clear(); nonRelaticeModuleNameCache.clear(); perDirectoryResolvedTypeReferenceDirectives.clear(); } function finishCachingPerDirectoryResolution() { allFilesHaveInvalidatedResolution = false; filesWithInvalidatedNonRelativeUnresolvedImports = undefined; directoryWatchesOfFailedLookups.forEach(function (watcher, path) { if (watcher.refCount === 0) { directoryWatchesOfFailedLookups.delete(path); watcher.watcher.close(); } }); clearPerDirectoryResolutions(); } function resolveModuleName(moduleName, containingFile, compilerOptions, host) { var primaryResult = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host, moduleResolutionCache); if (!resolutionHost.getGlobalCache) { return primaryResult; } var globalCache = resolutionHost.getGlobalCache(); if (globalCache !== undefined && !ts.isExternalModuleNameRelative(moduleName) && !(primaryResult.resolvedModule && ts.extensionIsTypeScript(primaryResult.resolvedModule.extension))) { 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) }; } } return primaryResult; } function resolveNamesWithLocalCache(names, containingFile, cache, perDirectoryCache, loader, getResolutionWithResolvedFileName, reusedNames, logChanges) { var path = resolutionHost.toPath(containingFile); var resolutionsInFile = cache.get(path) || cache.set(path, ts.createMap()).get(path); var dirPath = ts.getDirectoryPath(path); var perDirectoryResolution = perDirectoryCache.get(dirPath); if (!perDirectoryResolution) { perDirectoryResolution = ts.createMap(); perDirectoryCache.set(dirPath, perDirectoryResolution); } var resolvedModules = []; var compilerOptions = resolutionHost.getCompilationSettings(); var hasInvalidatedNonRelativeUnresolvedImport = logChanges && isFileWithInvalidatedNonRelativeUnresolvedImports(path); var seenNamesInFile = ts.createMap(); for (var _i = 0, names_2 = names; _i < names_2.length; _i++) { var name = names_2[_i]; var resolution = resolutionsInFile.get(name); if (!seenNamesInFile.has(name) && allFilesHaveInvalidatedResolution || !resolution || resolution.isInvalidated || (hasInvalidatedNonRelativeUnresolvedImport && !ts.isExternalModuleNameRelative(name) && !getResolutionWithResolvedFileName(resolution))) { var existingResolution = resolution; var resolutionInDirectory = perDirectoryResolution.get(name); if (resolutionInDirectory) { resolution = resolutionInDirectory; } else { resolution = loader(name, containingFile, compilerOptions, resolutionHost); perDirectoryResolution.set(name, resolution); } resolutionsInFile.set(name, resolution); watchFailedLookupLocationOfResolution(resolution); if (existingResolution) { stopWatchFailedLookupLocationOfResolution(existingResolution); } if (logChanges && filesWithChangedSetOfUnresolvedImports && !resolutionIsEqualTo(existingResolution, resolution)) { filesWithChangedSetOfUnresolvedImports.push(path); logChanges = false; } } ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated); seenNamesInFile.set(name, true); resolvedModules.push(getResolutionWithResolvedFileName(resolution)); } resolutionsInFile.forEach(function (resolution, name) { if (!seenNamesInFile.has(name) && !ts.contains(reusedNames, name)) { stopWatchFailedLookupLocationOfResolution(resolution); resolutionsInFile.delete(name); } }); return resolvedModules; function resolutionIsEqualTo(oldResolution, newResolution) { if (oldResolution === newResolution) { return true; } if (!oldResolution || !newResolution) { return false; } var oldResult = getResolutionWithResolvedFileName(oldResolution); var newResult = getResolutionWithResolvedFileName(newResolution); if (oldResult === newResult) { return true; } if (!oldResult || !newResult) { return false; } return oldResult.resolvedFileName === newResult.resolvedFileName; } } function resolveTypeReferenceDirectives(typeDirectiveNames, containingFile) { 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); } function getResolvedModuleWithFailedLookupLocationsFromCache(moduleName, containingFile) { var cache = resolvedModuleNames.get(resolutionHost.toPath(containingFile)); return cache && cache.get(moduleName); } function isNodeModulesDirectory(dirPath) { return ts.endsWith(dirPath, "/node_modules"); } function isNodeModulesAtTypesDirectory(dirPath) { return ts.endsWith(dirPath, "/node_modules/@types"); } function canWatchDirectory(dirPath) { var rootLength = ts.getRootLength(dirPath); if (dirPath.length === rootLength) { return false; } var nextDirectorySeparator = dirPath.indexOf(ts.directorySeparator, rootLength); if (nextDirectorySeparator === -1) { return false; } if (dirPath.charCodeAt(0) !== 47 && dirPath.substr(rootLength, nextDirectorySeparator).search(/users/i) === -1) { return true; } for (var searchIndex = nextDirectorySeparator + 1, searchLevels = 2; searchLevels > 0; searchLevels--) { searchIndex = dirPath.indexOf(ts.directorySeparator, searchIndex) + 1; if (searchIndex === 0) { return false; } } return true; } function filterFSRootDirectoriesToWatch(watchPath, dirPath) { if (!canWatchDirectory(dirPath)) { watchPath.ignore = true; } return watchPath; } function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath) { if (isInDirectoryPath(rootPath, failedLookupLocationPath)) { return { dir: rootDir, dirPath: rootPath }; } return getDirectoryToWatchFromFailedLookupLocationDirectory(ts.getDirectoryPath(ts.getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory())), ts.getDirectoryPath(failedLookupLocationPath)); } function getDirectoryToWatchFromFailedLookupLocationDirectory(dir, dirPath) { while (ts.stringContains(dirPath, "/node_modules/")) { dir = ts.getDirectoryPath(dir); dirPath = ts.getDirectoryPath(dirPath); } if (isNodeModulesDirectory(dirPath)) { return filterFSRootDirectoriesToWatch({ dir: dir, dirPath: dirPath }, ts.getDirectoryPath(dirPath)); } var nonRecursive = true; var subDirectoryPath, subDirectory; if (rootPath !== undefined) { while (!isInDirectoryPath(dirPath, rootPath)) { var parentPath = ts.getDirectoryPath(dirPath); if (parentPath === dirPath) { break; } nonRecursive = false; subDirectoryPath = dirPath; subDirectory = dir; dirPath = parentPath; dir = ts.getDirectoryPath(dir); } } return filterFSRootDirectoriesToWatch({ dir: subDirectory || dir, dirPath: subDirectoryPath || dirPath, nonRecursive: nonRecursive }, dirPath); } function isPathWithDefaultFailedLookupExtension(path) { return ts.fileExtensionIsOneOf(path, failedLookupDefaultExtensions); } function watchFailedLookupLocationOfResolution(resolution) { if (!resolution.failedLookupLocations || !resolution.failedLookupLocations.length) { return; } if (resolution.refCount !== undefined) { resolution.refCount++; return; } resolution.refCount = 1; var failedLookupLocations = resolution.failedLookupLocations; var setAtRoot = false; for (var _i = 0, failedLookupLocations_1 = failedLookupLocations; _i < failedLookupLocations_1.length; _i++) { var failedLookupLocation = failedLookupLocations_1[_i]; var failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); var _a = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath), dir = _a.dir, dirPath = _a.dirPath, nonRecursive = _a.nonRecursive, ignore = _a.ignore; if (!ignore) { if (!isPathWithDefaultFailedLookupExtension(failedLookupLocationPath)) { var refCount = customFailedLookupPaths.get(failedLookupLocationPath) || 0; customFailedLookupPaths.set(failedLookupLocationPath, refCount + 1); } if (dirPath === rootPath) { setAtRoot = true; } else { setDirectoryWatcher(dir, dirPath, nonRecursive); } } } if (setAtRoot) { setDirectoryWatcher(rootDir, rootPath); } } function setDirectoryWatcher(dir, dirPath, nonRecursive) { var dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); if (dirWatcher) { ts.Debug.assert(!!nonRecursive === !!dirWatcher.nonRecursive); dirWatcher.refCount++; } else { directoryWatchesOfFailedLookups.set(dirPath, { watcher: createDirectoryWatcher(dir, dirPath, nonRecursive), refCount: 1, nonRecursive: nonRecursive }); } } function stopWatchFailedLookupLocationOfResolution(resolution) { if (!resolution.failedLookupLocations || !resolution.failedLookupLocations.length) { return; } resolution.refCount--; if (resolution.refCount) { return; } var failedLookupLocations = resolution.failedLookupLocations; var removeAtRoot = false; for (var _i = 0, failedLookupLocations_2 = failedLookupLocations; _i < failedLookupLocations_2.length; _i++) { var failedLookupLocation = failedLookupLocations_2[_i]; var failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); var _a = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath), dirPath = _a.dirPath, ignore = _a.ignore; if (!ignore) { var refCount = customFailedLookupPaths.get(failedLookupLocationPath); if (refCount) { if (refCount === 1) { customFailedLookupPaths.delete(failedLookupLocationPath); } else { ts.Debug.assert(refCount > 1); customFailedLookupPaths.set(failedLookupLocationPath, refCount - 1); } } if (dirPath === rootPath) { removeAtRoot = true; } else { removeDirectoryWatcher(dirPath); } } } if (removeAtRoot) { removeDirectoryWatcher(rootPath); } } function removeDirectoryWatcher(dirPath) { var dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); dirWatcher.refCount--; } function createDirectoryWatcher(directory, dirPath, nonRecursive) { return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, function (fileOrDirectory) { var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } if (!allFilesHaveInvalidatedResolution && invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath)) { resolutionHost.onInvalidatedResolution(); } }, nonRecursive ? 0 : 1); } function removeResolutionsOfFileFromCache(cache, filePath) { var resolutions = cache.get(filePath); if (resolutions) { resolutions.forEach(stopWatchFailedLookupLocationOfResolution); cache.delete(filePath); } } function removeResolutionsOfFile(filePath) { removeResolutionsOfFileFromCache(resolvedModuleNames, filePath); removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath); } function invalidateResolutionCache(cache, isInvalidatedResolution, getResolutionWithResolvedFileName) { var seen = ts.createMap(); cache.forEach(function (resolutions, containingFilePath) { var dirPath = ts.getDirectoryPath(containingFilePath); var seenInDir = seen.get(dirPath); if (!seenInDir) { seenInDir = ts.createMap(); seen.set(dirPath, seenInDir); } resolutions.forEach(function (resolution, name) { if (seenInDir.has(name)) { return; } seenInDir.set(name, true); if (!resolution.isInvalidated && isInvalidatedResolution(resolution, getResolutionWithResolvedFileName)) { resolution.isInvalidated = true; (filesWithInvalidatedResolutions || (filesWithInvalidatedResolutions = ts.createMap())).set(containingFilePath, true); } }); }); } function hasReachedResolutionIterationLimit() { var maxSize = resolutionHost.maxNumberOfFilesToIterateForInvalidation || ts.maxNumberOfFilesToIterateForInvalidation; return resolvedModuleNames.size > maxSize || resolvedTypeReferenceDirectives.size > maxSize; } function invalidateResolutions(isInvalidatedResolution) { if (hasReachedResolutionIterationLimit()) { allFilesHaveInvalidatedResolution = true; return; } invalidateResolutionCache(resolvedModuleNames, isInvalidatedResolution, getResolvedModule); invalidateResolutionCache(resolvedTypeReferenceDirectives, isInvalidatedResolution, getResolvedTypeReferenceDirective); } function invalidateResolutionOfFile(filePath) { removeResolutionsOfFile(filePath); invalidateResolutions(function (resolution, getResolutionWithResolvedFileName) { var result = getResolutionWithResolvedFileName(resolution); return !!result && resolutionHost.toPath(result.resolvedFileName) === filePath; }); } function setFilesWithInvalidatedNonRelativeUnresolvedImports(filesMap) { ts.Debug.assert(filesWithInvalidatedNonRelativeUnresolvedImports === filesMap || filesWithInvalidatedNonRelativeUnresolvedImports === undefined); filesWithInvalidatedNonRelativeUnresolvedImports = filesMap; } function invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, isCreatingWatchedDirectory) { var isChangedFailedLookupLocation; if (isCreatingWatchedDirectory) { isChangedFailedLookupLocation = function (location) { return isInDirectoryPath(fileOrDirectoryPath, resolutionHost.toPath(location)); }; } else { var dirOfFileOrDirectory = ts.getDirectoryPath(fileOrDirectoryPath); if (isNodeModulesAtTypesDirectory(fileOrDirectoryPath) || isNodeModulesDirectory(fileOrDirectoryPath) || isNodeModulesAtTypesDirectory(dirOfFileOrDirectory) || isNodeModulesDirectory(dirOfFileOrDirectory)) { isChangedFailedLookupLocation = function (location) { var locationPath = resolutionHost.toPath(location); return locationPath === fileOrDirectoryPath || ts.startsWith(resolutionHost.toPath(location), fileOrDirectoryPath); }; } else { if (!isPathWithDefaultFailedLookupExtension(fileOrDirectoryPath) && !customFailedLookupPaths.has(fileOrDirectoryPath)) { return false; } if (ts.isEmittedFileOfProgram(resolutionHost.getCurrentProgram(), fileOrDirectoryPath)) { return false; } isChangedFailedLookupLocation = function (location) { return resolutionHost.toPath(location) === fileOrDirectoryPath; }; } } var hasChangedFailedLookupLocation = function (resolution) { return ts.some(resolution.failedLookupLocations, isChangedFailedLookupLocation); }; var invalidatedFilesCount = filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size; invalidateResolutions(hasChangedFailedLookupLocation); return allFilesHaveInvalidatedResolution || filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size !== invalidatedFilesCount; } function closeTypeRootsWatch() { ts.clearMap(typeRootsWatches, ts.closeFileWatcher); } function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath) { if (allFilesHaveInvalidatedResolution) { return undefined; } if (isInDirectoryPath(rootPath, typeRootPath)) { return rootPath; } var _a = getDirectoryToWatchFromFailedLookupLocationDirectory(typeRoot, typeRootPath), dirPath = _a.dirPath, ignore = _a.ignore; return !ignore && directoryWatchesOfFailedLookups.has(dirPath) ? dirPath : undefined; } function createTypeRootsWatch(typeRootPath, typeRoot) { return resolutionHost.watchTypeRootsDirectory(typeRoot, function (fileOrDirectory) { var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } resolutionHost.onChangedAutomaticTypeDirectiveNames(); var dirPath = getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath); if (dirPath && invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath)) { resolutionHost.onInvalidatedResolution(); } }, 1); } function updateTypeRootsWatch() { var options = resolutionHost.getCompilationSettings(); if (options.types) { closeTypeRootsWatch(); return; } var typeRoots = ts.getEffectiveTypeRoots(options, { directoryExists: directoryExistsForTypeRootWatch, getCurrentDirectory: getCurrentDirectory }); if (typeRoots) { ts.mutateMap(typeRootsWatches, ts.arrayToMap(typeRoots, function (tr) { return resolutionHost.toPath(tr); }), { createNewValue: createTypeRootsWatch, onDeleteValue: ts.closeFileWatcher }); } else { closeTypeRootsWatch(); } } function directoryExistsForTypeRootWatch(nodeTypesDirectory) { var dir = ts.getDirectoryPath(ts.getDirectoryPath(nodeTypesDirectory)); var dirPath = resolutionHost.toPath(dir); return dirPath === rootPath || canWatchDirectory(dirPath); } } ts.createResolutionCache = createResolutionCache; })(ts || (ts = {})); var ts; (function (ts) { var moduleSpecifiers; (function (moduleSpecifiers) { function getModuleSpecifier(compilerOptions, fromSourceFile, fromSourceFileName, toFileName, host, preferences) { if (preferences === void 0) { preferences = {}; } var info = getInfo(compilerOptions, fromSourceFile, fromSourceFileName, host); return getGlobalModuleSpecifier(toFileName, info, host, compilerOptions) || ts.first(getLocalModuleSpecifiers(toFileName, info, compilerOptions, preferences)); } moduleSpecifiers.getModuleSpecifier = getModuleSpecifier; function getModuleSpecifiers(moduleSymbol, compilerOptions, importingSourceFile, host, files, preferences) { var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol); if (ambient) return [[ambient]]; var info = getInfo(compilerOptions, importingSourceFile, importingSourceFile.path, host); if (!files) { return ts.Debug.fail("Files list must be present to resolve symlinks in specifier resolution"); } var modulePaths = getAllModulePaths(files, ts.getSourceFileOfNode(moduleSymbol.valueDeclaration), info.getCanonicalFileName, host); var global = ts.mapDefined(modulePaths, function (moduleFileName) { return getGlobalModuleSpecifier(moduleFileName, info, host, compilerOptions); }); return global.length ? global.map(function (g) { return [g]; }) : modulePaths.map(function (moduleFileName) { return getLocalModuleSpecifiers(moduleFileName, info, compilerOptions, preferences); }); } moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers; function getInfo(compilerOptions, importingSourceFile, importingSourceFileName, host) { var moduleResolutionKind = ts.getEmitModuleResolutionKind(compilerOptions); var addJsExtension = usesJsExtensionOnImports(importingSourceFile); var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true); var sourceDirectory = ts.getDirectoryPath(importingSourceFileName); return { moduleResolutionKind: moduleResolutionKind, addJsExtension: addJsExtension, getCanonicalFileName: getCanonicalFileName, sourceDirectory: sourceDirectory }; } function getGlobalModuleSpecifier(moduleFileName, _a, host, compilerOptions) { var addJsExtension = _a.addJsExtension, getCanonicalFileName = _a.getCanonicalFileName, sourceDirectory = _a.sourceDirectory; return tryGetModuleNameFromTypeRoots(compilerOptions, host, getCanonicalFileName, moduleFileName, addJsExtension) || tryGetModuleNameAsNodeModule(compilerOptions, moduleFileName, host, getCanonicalFileName, sourceDirectory) || compilerOptions.rootDirs && tryGetModuleNameFromRootDirs(compilerOptions.rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName); } function getLocalModuleSpecifiers(moduleFileName, _a, compilerOptions, preferences) { var moduleResolutionKind = _a.moduleResolutionKind, addJsExtension = _a.addJsExtension, getCanonicalFileName = _a.getCanonicalFileName, sourceDirectory = _a.sourceDirectory; var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; var relativePath = removeExtensionAndIndexPostFix(ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), moduleResolutionKind, addJsExtension); if (!baseUrl || preferences.importModuleSpecifierPreference === "relative") { return [relativePath]; } var relativeToBaseUrl = getRelativePathIfInDirectory(moduleFileName, baseUrl, getCanonicalFileName); if (!relativeToBaseUrl) { return [relativePath]; } var importRelativeToBaseUrl = removeExtensionAndIndexPostFix(relativeToBaseUrl, moduleResolutionKind, addJsExtension); if (paths) { var fromPaths = tryGetModuleNameFromPaths(ts.removeFileExtension(relativeToBaseUrl), importRelativeToBaseUrl, paths); if (fromPaths) { return [fromPaths]; } } if (preferences.importModuleSpecifierPreference === "non-relative") { return [importRelativeToBaseUrl]; } if (preferences.importModuleSpecifierPreference !== undefined) ts.Debug.assertNever(preferences.importModuleSpecifierPreference); if (isPathRelativeToParent(relativeToBaseUrl)) { return [relativePath]; } var pathFromSourceToBaseUrl = ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(sourceDirectory, baseUrl, getCanonicalFileName)); var relativeFirst = getRelativePathNParents(relativePath) < getRelativePathNParents(pathFromSourceToBaseUrl); return relativeFirst ? [relativePath, importRelativeToBaseUrl] : [importRelativeToBaseUrl, relativePath]; } function usesJsExtensionOnImports(_a) { var imports = _a.imports; return ts.firstDefined(imports, function (_a) { var text = _a.text; return ts.pathIsRelative(text) ? ts.fileExtensionIs(text, ".js") : undefined; }) || false; } function discoverProbableSymlinks(files, getCanonicalFileName, host) { var symlinks = ts.mapDefined(files, function (sf) { return sf.resolvedModules && ts.firstDefinedIterator(sf.resolvedModules.values(), function (res) { return res && res.originalPath && res.resolvedFileName !== res.originalPath ? [res.resolvedFileName, res.originalPath] : undefined; }); }); var result = ts.createMap(); if (symlinks) { var currentDirectory = host.getCurrentDirectory ? host.getCurrentDirectory() : ""; for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) { var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1]; var resolvedParts = ts.getPathComponents(ts.toPath(resolvedPath, currentDirectory, getCanonicalFileName)); var originalParts = ts.getPathComponents(ts.toPath(originalPath, currentDirectory, getCanonicalFileName)); while (resolvedParts[resolvedParts.length - 1] === originalParts[originalParts.length - 1]) { resolvedParts.pop(); originalParts.pop(); } result.set(ts.getPathFromPathComponents(originalParts), ts.getPathFromPathComponents(resolvedParts)); } } return result; } function getAllModulePathsUsingIndirectSymlinks(files, target, getCanonicalFileName, host) { var links = discoverProbableSymlinks(files, getCanonicalFileName, host); var paths = ts.arrayFrom(links.keys()); var options; var compareStrings = (!host.useCaseSensitiveFileNames || host.useCaseSensitiveFileNames()) ? ts.compareStringsCaseSensitive : ts.compareStringsCaseInsensitive; for (var _i = 0, paths_2 = paths; _i < paths_2.length; _i++) { var path = paths_2[_i]; var resolved = links.get(path); if (compareStrings(target.slice(0, resolved.length + 1), resolved + "/") === 0) { var relative = ts.getRelativePathFromDirectory(resolved, target, getCanonicalFileName); var option = ts.resolvePath(path, relative); if (!host.fileExists || host.fileExists(option)) { if (!options) options = []; options.push(option); } } } if (options) { options.push(target); return options; } return [target]; } function getAllModulePaths(files, _a, getCanonicalFileName, host) { var fileName = _a.fileName; var symlinks = ts.mapDefined(files, function (sf) { return sf.resolvedModules && ts.firstDefinedIterator(sf.resolvedModules.values(), function (res) { return res && res.resolvedFileName === fileName ? res.originalPath : undefined; }); }); return symlinks.length === 0 ? getAllModulePathsUsingIndirectSymlinks(files, ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory ? host.getCurrentDirectory() : ""), getCanonicalFileName, host) : symlinks; } function getRelativePathNParents(relativePath) { var components = ts.getPathComponents(relativePath); if (components[0] || components.length === 1) return 0; for (var i = 1; i < components.length; i++) { if (components[i] !== "..") return i - 1; } return components.length - 1; } function tryGetModuleNameFromAmbientModule(moduleSymbol) { var decl = moduleSymbol.valueDeclaration; if (ts.isModuleDeclaration(decl) && ts.isStringLiteral(decl.name)) { return decl.name.text; } } function tryGetModuleNameFromPaths(relativeToBaseUrlWithIndex, relativeToBaseUrl, paths) { for (var key in paths) { for (var _i = 0, _a = paths[key]; _i < _a.length; _i++) { var patternText_1 = _a[_i]; var pattern = ts.removeFileExtension(ts.normalizePath(patternText_1)); var indexOfStar = pattern.indexOf("*"); if (indexOfStar === 0 && pattern.length === 1) { continue; } else if (indexOfStar !== -1) { var prefix = pattern.substr(0, indexOfStar); var suffix = pattern.substr(indexOfStar + 1); if (relativeToBaseUrl.length >= prefix.length + suffix.length && ts.startsWith(relativeToBaseUrl, prefix) && ts.endsWith(relativeToBaseUrl, suffix)) { var matchedStar = relativeToBaseUrl.substr(prefix.length, relativeToBaseUrl.length - suffix.length); return key.replace("*", matchedStar); } } else if (pattern === relativeToBaseUrl || pattern === relativeToBaseUrlWithIndex) { return key; } } } } function tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName) { var normalizedTargetPath = getPathRelativeToRootDirs(moduleFileName, rootDirs, getCanonicalFileName); if (normalizedTargetPath === undefined) { return undefined; } var normalizedSourcePath = getPathRelativeToRootDirs(sourceDirectory, rootDirs, getCanonicalFileName); var relativePath = normalizedSourcePath !== undefined ? ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(normalizedSourcePath, normalizedTargetPath, getCanonicalFileName)) : normalizedTargetPath; return ts.removeFileExtension(relativePath); } function tryGetModuleNameFromTypeRoots(options, host, getCanonicalFileName, moduleFileName, addJsExtension) { var roots = ts.getEffectiveTypeRoots(options, host); return ts.firstDefined(roots, function (unNormalizedTypeRoot) { var typeRoot = ts.toPath(unNormalizedTypeRoot, undefined, getCanonicalFileName); if (ts.startsWith(moduleFileName, typeRoot)) { 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) { return undefined; } var parts = getNodeModulePathParts(moduleFileName); if (!parts) { return undefined; } var moduleSpecifier = getDirectoryOrExtensionlessFileName(moduleFileName); if (!ts.startsWith(sourceDirectory, moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex))) return undefined; return ts.getPackageNameFromAtTypesDirectory(moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1)); function getDirectoryOrExtensionlessFileName(path) { var packageRootPath = path.substring(0, parts.packageRootIndex); var packageJsonPath = ts.combinePaths(packageRootPath, "package.json"); if (host.fileExists(packageJsonPath)) { var packageJsonContent = JSON.parse(host.readFile(packageJsonPath)); if (packageJsonContent) { var mainFileRelative = packageJsonContent.typings || packageJsonContent.types || packageJsonContent.main; if (mainFileRelative) { var mainExportFile = ts.toPath(mainFileRelative, packageRootPath, getCanonicalFileName); if (ts.removeFileExtension(mainExportFile) === ts.removeFileExtension(getCanonicalFileName(path))) { return packageRootPath; } } } } var fullModulePathWithoutExtension = ts.removeFileExtension(path); if (getCanonicalFileName(fullModulePathWithoutExtension.substring(parts.fileNameIndex)) === "/index" && !tryGetAnyFileFromPath(host, fullModulePathWithoutExtension.substring(0, parts.fileNameIndex))) { return fullModulePathWithoutExtension.substring(0, parts.fileNameIndex); } return fullModulePathWithoutExtension; } } function tryGetAnyFileFromPath(host, path) { 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)) { return fullPath; } } } function getNodeModulePathParts(fullPath) { 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; while (partEnd >= 0) { partStart = partEnd; partEnd = fullPath.indexOf("/", partStart + 1); switch (state) { case 0: if (fullPath.indexOf("/node_modules/", partStart) === partStart) { topLevelNodeModulesIndex = partStart; topLevelPackageNameIndex = partEnd; state = 1; } break; case 1: case 2: if (state === 1 && fullPath.charAt(partStart + 1) === "@") { state = 2; } else { packageRootIndex = partEnd; state = 3; } break; case 3: if (fullPath.indexOf("/node_modules/", partStart) === partStart) { state = 1; } else { state = 3; } break; } } fileNameIndex = partStart; 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); return isPathRelativeToParent(relativePath) ? undefined : relativePath; }); } function removeExtensionAndIndexPostFix(fileName, moduleResolutionKind, addJsExtension) { var noExtension = ts.removeFileExtension(fileName); return addJsExtension ? noExtension + ".js" : moduleResolutionKind === ts.ModuleResolutionKind.NodeJs ? ts.removeSuffix(noExtension, "/index") : noExtension; } function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) { var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, false); return ts.isRootedDiskPath(relativePath) ? undefined : relativePath; } function isPathRelativeToParent(path) { return ts.startsWith(path, ".."); } })(moduleSpecifiers = ts.moduleSpecifiers || (ts.moduleSpecifiers = {})); })(ts || (ts = {})); 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; function createDiagnosticReporter(system, pretty) { var host = system === ts.sys ? sysFormatDiagnosticsHost : { getCurrentDirectory: function () { return system.getCurrentDirectory(); }, getNewLine: function () { return system.newLine; }, getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames), }; if (!pretty) { return function (diagnostic) { return system.write(ts.formatDiagnostic(diagnostic, host)); }; } var diagnostics = new Array(1); return function (diagnostic) { diagnostics[0] = diagnostic; system.write(ts.formatDiagnosticsWithColorAndContext(diagnostics, host) + host.getNewLine()); diagnostics[0] = undefined; }; } ts.createDiagnosticReporter = createDiagnosticReporter; ts.nonClearingMessageCodes = [ ts.Diagnostics.Found_1_error_Watching_for_file_changes.code, ts.Diagnostics.Found_0_errors_Watching_for_file_changes.code ]; function clearScreenIfNotWatchingForFileChanges(system, diagnostic, options) { if (system.clearScreen && !options.preserveWatchOutput && !options.extendedDiagnostics && !options.diagnostics && !ts.contains(ts.nonClearingMessageCodes, diagnostic.code)) { system.clearScreen(); return true; } return false; } ts.screenStartingMessageCodes = [ ts.Diagnostics.Starting_compilation_in_watch_mode.code, ts.Diagnostics.File_change_detected_Starting_incremental_compilation.code, ]; function getPlainDiagnosticFollowingNewLines(diagnostic, newLine) { return ts.contains(ts.screenStartingMessageCodes, diagnostic.code) ? newLine + newLine : newLine; } function createWatchStatusReporter(system, pretty) { return pretty ? function (diagnostic, newLine, options) { clearScreenIfNotWatchingForFileChanges(system, diagnostic, options); var output = "[" + ts.formatColorAndReset(new Date().toLocaleTimeString(), ts.ForegroundColorEscapeSequences.Grey) + "] "; output += "" + ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine) + (newLine + newLine); system.write(output); } : function (diagnostic, newLine, options) { var output = ""; if (!clearScreenIfNotWatchingForFileChanges(system, diagnostic, options)) { output += newLine; } output += new Date().toLocaleTimeString() + " - "; output += "" + ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine) + getPlainDiagnosticFollowingNewLines(diagnostic, newLine); system.write(output); }; } ts.createWatchStatusReporter = createWatchStatusReporter; 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; return result; } ts.parseConfigFileWithSystem = parseConfigFileWithSystem; function emitFilesAndReportErrors(program, reportDiagnostic, writeFileName, reportSummary) { var diagnostics = program.getConfigFileParsingDiagnostics().slice(); var configFileParsingDiagnosticsLength = diagnostics.length; ts.addRange(diagnostics, program.getSyntacticDiagnostics()); var reportSemanticDiagnostics = false; if (diagnostics.length === configFileParsingDiagnosticsLength) { ts.addRange(diagnostics, program.getOptionsDiagnostics()); ts.addRange(diagnostics, program.getGlobalDiagnostics()); if (diagnostics.length === configFileParsingDiagnosticsLength) { reportSemanticDiagnostics = true; } } var _a = program.emit(), emittedFiles = _a.emittedFiles, emitSkipped = _a.emitSkipped, emitDiagnostics = _a.diagnostics; ts.addRange(diagnostics, emitDiagnostics); if (reportSemanticDiagnostics) { ts.addRange(diagnostics, program.getSemanticDiagnostics()); } ts.sortAndDeduplicateDiagnostics(diagnostics).forEach(reportDiagnostic); if (writeFileName) { var currentDir_1 = program.getCurrentDirectory(); ts.forEach(emittedFiles, function (file) { var filepath = ts.getNormalizedAbsolutePath(file, currentDir_1); writeFileName("TSFILE: " + filepath); }); if (program.getCompilerOptions().listFiles) { ts.forEach(program.getSourceFiles(), function (file) { writeFileName(file.fileName); }); } } if (reportSummary) { reportSummary(diagnostics.filter(function (diagnostic) { return diagnostic.category === ts.DiagnosticCategory.Error; }).length); } if (emitSkipped && diagnostics.length > 0) { return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } else if (diagnostics.length > 0) { return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated; } return ts.ExitStatus.Success; } ts.emitFilesAndReportErrors = emitFilesAndReportErrors; var noopFileWatcher = { close: ts.noop }; function createWatchCompilerHost(system, createProgram, reportDiagnostic, reportWatchStatus) { if (system === void 0) { system = ts.sys; } if (!createProgram) { createProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram; } var host = system; var useCaseSensitiveFileNames = function () { return system.useCaseSensitiveFileNames; }; var writeFileName = function (s) { return system.write(s + system.newLine); }; var onWatchStatusChange = reportWatchStatus || createWatchStatusReporter(system); return { useCaseSensitiveFileNames: useCaseSensitiveFileNames, getNewLine: function () { return system.newLine; }, getCurrentDirectory: function () { return system.getCurrentDirectory(); }, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, fileExists: function (path) { return system.fileExists(path); }, readFile: function (path, encoding) { return system.readFile(path, encoding); }, directoryExists: function (path) { return system.directoryExists(path); }, getDirectories: function (path) { return system.getDirectories(path); }, readDirectory: function (path, extensions, exclude, include, depth) { return system.readDirectory(path, extensions, exclude, include, depth); }, realpath: system.realpath && (function (path) { return system.realpath(path); }), getEnvironmentVariable: system.getEnvironmentVariable && (function (name) { return system.getEnvironmentVariable(name); }), watchFile: system.watchFile ? (function (path, callback, pollingInterval) { return system.watchFile(path, callback, pollingInterval); }) : function () { return noopFileWatcher; }, watchDirectory: system.watchDirectory ? (function (path, callback, recursive) { return system.watchDirectory(path, callback, recursive); }) : function () { return noopFileWatcher; }, setTimeout: system.setTimeout ? (function (callback, ms) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } var _a; return (_a = system.setTimeout).call.apply(_a, [system, callback, ms].concat(args)); }) : ts.noop, clearTimeout: system.clearTimeout ? (function (timeoutId) { return system.clearTimeout(timeoutId); }) : ts.noop, trace: function (s) { return system.write(s); }, onWatchStatusChange: onWatchStatusChange, createDirectory: function (path) { return system.createDirectory(path); }, writeFile: function (path, data, writeByteOrderMark) { return system.writeFile(path, data, writeByteOrderMark); }, onCachedDirectoryStructureHostCreate: function (cacheHost) { return host = cacheHost || system; }, createHash: system.createHash && (function (s) { return system.createHash(s); }), createProgram: createProgram, afterProgramCreate: emitFilesAndReportErrorUsingBuilder }; function getDefaultLibLocation() { return ts.getDirectoryPath(ts.normalizePath(system.getExecutingFilePath())); } function emitFilesAndReportErrorUsingBuilder(builderProgram) { var compilerOptions = builderProgram.getCompilerOptions(); var newLine = ts.getNewLineCharacter(compilerOptions, function () { return system.newLine; }); var reportSummary = function (errorCount) { if (errorCount === 1) { onWatchStatusChange(ts.createCompilerDiagnostic(ts.Diagnostics.Found_1_error_Watching_for_file_changes, errorCount), newLine, compilerOptions); } else { onWatchStatusChange(ts.createCompilerDiagnostic(ts.Diagnostics.Found_0_errors_Watching_for_file_changes, errorCount, errorCount), newLine, compilerOptions); } }; emitFilesAndReportErrors(builderProgram, reportDiagnostic, writeFileName, reportSummary); } } function reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic) { reportDiagnostic(diagnostic); system.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); } function createWatchCompilerHostOfConfigFile(configFileName, optionsToExtend, system, createProgram, reportDiagnostic, reportWatchStatus) { var diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); var host = createWatchCompilerHost(system, createProgram, diagnosticReporter, reportWatchStatus); host.onUnRecoverableConfigFileDiagnostic = function (diagnostic) { return reportUnrecoverableDiagnostic(system, diagnosticReporter, diagnostic); }; host.configFileName = configFileName; host.optionsToExtend = optionsToExtend; return host; } ts.createWatchCompilerHostOfConfigFile = createWatchCompilerHostOfConfigFile; function createWatchCompilerHostOfFilesAndCompilerOptions(rootFiles, options, system, createProgram, reportDiagnostic, reportWatchStatus) { var host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus); host.rootFiles = rootFiles; host.options = options; return host; } ts.createWatchCompilerHostOfFilesAndCompilerOptions = createWatchCompilerHostOfFilesAndCompilerOptions; })(ts || (ts = {})); (function (ts) { function createWatchCompilerHost(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus) { if (ts.isArray(rootFilesOrConfigFileName)) { return ts.createWatchCompilerHostOfFilesAndCompilerOptions(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus); } else { return ts.createWatchCompilerHostOfConfigFile(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus); } } ts.createWatchCompilerHost = createWatchCompilerHost; var initialVersion = 1; function createWatchProgram(host) { var builderProgram; 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; }; var readFile = function (path, encoding) { return host.readFile(path, encoding); }; var configFileName = host.configFileName, _a = host.optionsToExtend, optionsToExtendForConfigFile = _a === void 0 ? {} : _a, createProgram = host.createProgram; var rootFileNames = host.rootFiles, compilerOptions = host.options; var configFileSpecs; var configFileParsingDiagnostics; var hasChangedConfigFileParsingErrors = false; var cachedDirectoryStructureHost = configFileName === undefined ? undefined : ts.createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames); if (cachedDirectoryStructureHost && host.onCachedDirectoryStructureHostCreate) { host.onCachedDirectoryStructureHostCreate(cachedDirectoryStructureHost); } var directoryStructureHost = cachedDirectoryStructureHost || host; var parseConfigFileHost = { useCaseSensitiveFileNames: useCaseSensitiveFileNames, readDirectory: function (path, extensions, exclude, include, depth) { return directoryStructureHost.readDirectory(path, extensions, exclude, include, depth); }, fileExists: function (path) { return host.fileExists(path); }, readFile: readFile, getCurrentDirectory: getCurrentDirectory, onUnRecoverableConfigFileDiagnostic: host.onUnRecoverableConfigFileDiagnostic }; var newLine = updateNewLine(); reportWatchDiagnostic(ts.Diagnostics.Starting_compilation_in_watch_mode); if (configFileName) { newLine = ts.getNewLineCharacter(optionsToExtendForConfigFile, function () { return host.getNewLine(); }); if (host.configFileParsingResult) { setConfigFileParsingResult(host.configFileParsingResult); } else { ts.Debug.assert(!rootFileNames); parseConfigFile(); } newLine = updateNewLine(); } 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; 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); if (configFileName) { watchFile(host, configFileName, scheduleProgramReload, ts.PollingInterval.High, "Config file"); } var compilerHost = { getSourceFile: function (fileName, languageVersion, onError, shouldCreateNewSourceFile) { return getVersionedSourceFileByPath(fileName, toPath(fileName), languageVersion, onError, shouldCreateNewSourceFile); }, getSourceFileByPath: getVersionedSourceFileByPath, getDefaultLibLocation: host.getDefaultLibLocation && (function () { return host.getDefaultLibLocation(); }), getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); }, writeFile: writeFile, getCurrentDirectory: getCurrentDirectory, useCaseSensitiveFileNames: function () { return useCaseSensitiveFileNames; }, getCanonicalFileName: getCanonicalFileName, getNewLine: function () { return newLine; }, fileExists: fileExists, readFile: readFile, trace: trace, directoryExists: directoryStructureHost.directoryExists && (function (path) { return directoryStructureHost.directoryExists(path); }), getDirectories: (directoryStructureHost.getDirectories && (function (path) { return directoryStructureHost.getDirectories(path); })), realpath: host.realpath && (function (s) { return host.realpath(s); }), getEnvironmentVariable: host.getEnvironmentVariable ? (function (name) { return host.getEnvironmentVariable(name); }) : (function () { return ""; }), onReleaseOldSourceFile: onReleaseOldSourceFile, createHash: host.createHash && (function (data) { return host.createHash(data); }), toPath: toPath, getCompilationSettings: function () { return compilerOptions; }, watchDirectoryOfFailedLookupLocation: function (dir, cb, flags) { return watchDirectory(host, dir, cb, flags, "Failed Lookup Locations"); }, watchTypeRootsDirectory: function (dir, cb, flags) { return watchDirectory(host, dir, cb, flags, "Type roots"); }, getCachedDirectoryStructureHost: function () { return cachedDirectoryStructureHost; }, onInvalidatedResolution: scheduleProgramUpdate, onChangedAutomaticTypeDirectiveNames: function () { hasChangedAutomaticTypeDirectiveNames = true; scheduleProgramUpdate(); }, maxNumberOfFilesToIterateForInvalidation: host.maxNumberOfFilesToIterateForInvalidation, getCurrentProgram: getCurrentProgram, writeLog: writeLog }; var resolutionCache = ts.createResolutionCache(compilerHost, configFileName ? ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFileName, currentDirectory)) : 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); }); compilerHost.resolveTypeReferenceDirectives = host.resolveTypeReferenceDirectives ? (function (typeDirectiveNames, containingFile) { return host.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile); }) : (function (typeDirectiveNames, containingFile) { return resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile); }); var userProvidedResolution = !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives; synchronizeProgram(); watchConfigFileWildCardDirectories(); return configFileName ? { getCurrentProgram: getCurrentBuilderProgram, getProgram: synchronizeProgram } : { getCurrentProgram: getCurrentBuilderProgram, getProgram: synchronizeProgram, updateRootFileNames: updateRootFileNames }; function getCurrentBuilderProgram() { return builderProgram; } function getCurrentProgram() { return builderProgram && builderProgram.getProgram(); } function synchronizeProgram() { writeLog("Synchronizing program"); var program = getCurrentProgram(); if (hasChangedCompilerOptions) { newLine = updateNewLine(); if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) { resolutionCache.clear(); } } var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution); if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames)) { if (hasChangedConfigFileParsingErrors) { builderProgram = createProgram(undefined, undefined, compilerHost, builderProgram, configFileParsingDiagnostics); hasChangedConfigFileParsingErrors = false; } } else { createNewProgram(program, hasInvalidatedResolution); } if (host.afterProgramCreate) { host.afterProgramCreate(builderProgram); } return builderProgram; } function createNewProgram(program, hasInvalidatedResolution) { if (watchLogLevel !== ts.WatchLogLevel.None) { writeLog("CreatingProgramWith::"); writeLog(" roots: " + JSON.stringify(rootFileNames)); writeLog(" options: " + JSON.stringify(compilerOptions)); } var needsUpdateInTypeRootWatch = hasChangedCompilerOptions || !program; hasChangedCompilerOptions = false; hasChangedConfigFileParsingErrors = false; resolutionCache.startCachingPerDirectoryResolution(); compilerHost.hasInvalidatedResolution = hasInvalidatedResolution; compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames; builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics); resolutionCache.finishCachingPerDirectoryResolution(); ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = ts.createMap()), watchMissingFilePath); if (needsUpdateInTypeRootWatch) { resolutionCache.updateTypeRootsWatch(); } if (missingFilePathsRequestedForRelease) { for (var _i = 0, missingFilePathsRequestedForRelease_1 = missingFilePathsRequestedForRelease; _i < missingFilePathsRequestedForRelease_1.length; _i++) { var missingFilePath = missingFilePathsRequestedForRelease_1[_i]; if (!missingFilesMap.has(missingFilePath)) { sourceFilesCache.delete(missingFilePath); } } missingFilePathsRequestedForRelease = undefined; } } function updateRootFileNames(files) { ts.Debug.assert(!configFileName, "Cannot update root file names with config file watch mode"); rootFileNames = files; scheduleProgramUpdate(); } function updateNewLine() { return ts.getNewLineCharacter(compilerOptions || optionsToExtendForConfigFile, function () { return host.getNewLine(); }); } function toPath(fileName) { return ts.toPath(fileName, currentDirectory, getCanonicalFileName); } function isFileMissingOnHost(hostSourceFile) { return typeof hostSourceFile === "number"; } function isFilePresentOnHost(hostSourceFile) { return !!hostSourceFile.sourceFile; } function fileExists(fileName) { var path = toPath(fileName); if (isFileMissingOnHost(sourceFilesCache.get(path))) { return true; } return directoryStructureHost.fileExists(fileName); } function getVersionedSourceFileByPath(fileName, path, languageVersion, onError, shouldCreateNewSourceFile) { var hostSourceFile = sourceFilesCache.get(path); if (isFileMissingOnHost(hostSourceFile)) { return undefined; } if (!hostSourceFile || shouldCreateNewSourceFile || !isFilePresentOnHost(hostSourceFile) || hostSourceFile.version.toString() !== hostSourceFile.sourceFile.version) { var sourceFile = getNewSourceFile(); if (hostSourceFile) { if (shouldCreateNewSourceFile) { hostSourceFile.version++; } if (sourceFile) { hostSourceFile.sourceFile = sourceFile; sourceFile.version = hostSourceFile.version.toString(); if (!hostSourceFile.fileWatcher) { hostSourceFile.fileWatcher = watchFilePath(host, fileName, onSourceFileChange, ts.PollingInterval.Low, path, "Source file"); } } else { if (isFilePresentOnHost(hostSourceFile)) { hostSourceFile.fileWatcher.close(); } sourceFilesCache.set(path, hostSourceFile.version); } } else { if (sourceFile) { sourceFile.version = initialVersion.toString(); var fileWatcher = watchFilePath(host, fileName, onSourceFileChange, ts.PollingInterval.Low, path, "Source file"); sourceFilesCache.set(path, { sourceFile: sourceFile, version: initialVersion, fileWatcher: fileWatcher }); } else { sourceFilesCache.set(path, initialVersion); } } return sourceFile; } return hostSourceFile.sourceFile; function getNewSourceFile() { var text; try { ts.performance.mark("beforeIORead"); text = host.readFile(fileName, compilerOptions.charset); ts.performance.mark("afterIORead"); ts.performance.measure("I/O Read", "beforeIORead", "afterIORead"); } catch (e) { if (onError) { onError(e.message); } } return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined; } } function nextSourceFileVersion(path) { var hostSourceFile = sourceFilesCache.get(path); if (hostSourceFile !== undefined) { if (isFileMissingOnHost(hostSourceFile)) { sourceFilesCache.set(path, { version: Number(hostSourceFile) + 1 }); } else { hostSourceFile.version++; } } } function getSourceVersion(path) { var hostSourceFile = sourceFilesCache.get(path); return !hostSourceFile || isFileMissingOnHost(hostSourceFile) ? undefined : hostSourceFile.version.toString(); } function onReleaseOldSourceFile(oldSourceFile, _oldOptions) { var hostSourceFileInfo = sourceFilesCache.get(oldSourceFile.path); if (hostSourceFileInfo) { if (isFileMissingOnHost(hostSourceFileInfo)) { (missingFilePathsRequestedForRelease || (missingFilePathsRequestedForRelease = [])).push(oldSourceFile.path); } else if (hostSourceFileInfo.sourceFile === oldSourceFile) { if (hostSourceFileInfo.fileWatcher) { hostSourceFileInfo.fileWatcher.close(); } sourceFilesCache.delete(oldSourceFile.path); resolutionCache.removeResolutionsOfFile(oldSourceFile.path); } } } function reportWatchDiagnostic(message) { if (host.onWatchStatusChange) { host.onWatchStatusChange(ts.createCompilerDiagnostic(message), newLine, compilerOptions || optionsToExtendForConfigFile); } } function scheduleProgramUpdate() { if (!host.setTimeout || !host.clearTimeout) { return; } if (timerToUpdateProgram) { host.clearTimeout(timerToUpdateProgram); } writeLog("Scheduling update"); timerToUpdateProgram = host.setTimeout(updateProgram, 250); } function scheduleProgramReload() { ts.Debug.assert(!!configFileName); reloadLevel = ts.ConfigFileProgramReloadLevel.Full; scheduleProgramUpdate(); } function updateProgram() { timerToUpdateProgram = undefined; reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation); switch (reloadLevel) { case ts.ConfigFileProgramReloadLevel.Partial: return reloadFileNamesFromConfigFile(); case ts.ConfigFileProgramReloadLevel.Full: return reloadConfigFile(); default: synchronizeProgram(); return; } } function reloadFileNamesFromConfigFile() { writeLog("Reloading new file names and options"); var result = ts.getFileNamesFromConfigSpecs(configFileSpecs, ts.getDirectoryPath(configFileName), compilerOptions, parseConfigFileHost); if (result.fileNames.length) { configFileParsingDiagnostics = ts.filter(configFileParsingDiagnostics, function (error) { return !ts.isErrorNoInputFiles(error); }); hasChangedConfigFileParsingErrors = true; } else if (!configFileSpecs.filesSpecs && !ts.some(configFileParsingDiagnostics, ts.isErrorNoInputFiles)) { configFileParsingDiagnostics = configFileParsingDiagnostics.concat(ts.getErrorForNoInputFiles(configFileSpecs, configFileName)); hasChangedConfigFileParsingErrors = true; } rootFileNames = result.fileNames; synchronizeProgram(); } function reloadConfigFile() { writeLog("Reloading config file: " + configFileName); reloadLevel = ts.ConfigFileProgramReloadLevel.None; if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.clearCache(); } parseConfigFile(); hasChangedCompilerOptions = true; synchronizeProgram(); watchConfigFileWildCardDirectories(); } function parseConfigFile() { setConfigFileParsingResult(ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtendForConfigFile, parseConfigFileHost)); } function setConfigFileParsingResult(configFileParseResult) { rootFileNames = configFileParseResult.fileNames; compilerOptions = configFileParseResult.options; configFileSpecs = configFileParseResult.configFileSpecs; configFileParsingDiagnostics = ts.getConfigFileParsingDiagnostics(configFileParseResult); hasChangedConfigFileParsingErrors = true; } function onSourceFileChange(fileName, eventKind, path) { updateCachedSystemWithFile(fileName, path, eventKind); if (eventKind === ts.FileWatcherEventKind.Deleted && sourceFilesCache.get(path)) { resolutionCache.invalidateResolutionOfFile(path); } nextSourceFileVersion(path); scheduleProgramUpdate(); } function updateCachedSystemWithFile(fileName, path, eventKind) { if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.addOrDeleteFile(fileName, path, eventKind); } } function watchMissingFilePath(missingFilePath) { return watchFilePath(host, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, missingFilePath, "Missing file"); } function onMissingFileChange(fileName, eventKind, missingFilePath) { updateCachedSystemWithFile(fileName, missingFilePath, eventKind); if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) { missingFilesMap.get(missingFilePath).close(); missingFilesMap.delete(missingFilePath); nextSourceFileVersion(missingFilePath); scheduleProgramUpdate(); } } function watchConfigFileWildCardDirectories() { if (configFileSpecs) { ts.updateWatchingWildcardDirectories(watchedWildcardDirectories || (watchedWildcardDirectories = ts.createMap()), ts.createMapFromTemplate(configFileSpecs.wildcardDirectories), watchWildcardDirectory); } else if (watchedWildcardDirectories) { ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); } } function watchWildcardDirectory(directory, flags) { return watchDirectory(host, directory, function (fileOrDirectory) { ts.Debug.assert(!!configFileName); var fileOrDirectoryPath = toPath(fileOrDirectory); if (cachedDirectoryStructureHost) { cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); } nextSourceFileVersion(fileOrDirectoryPath); if (fileOrDirectoryPath !== directory && ts.hasExtension(fileOrDirectoryPath) && !ts.isSupportedSourceFileName(fileOrDirectory, compilerOptions)) { writeLog("Project: " + configFileName + " Detected file add/remove of non supported extension: " + fileOrDirectory); return; } if (reloadLevel !== ts.ConfigFileProgramReloadLevel.Full) { reloadLevel = ts.ConfigFileProgramReloadLevel.Partial; scheduleProgramUpdate(); } }, flags, "Wild card directories"); } function ensureDirectoriesExist(directoryPath) { if (directoryPath.length > ts.getRootLength(directoryPath) && !host.directoryExists(directoryPath)) { var parentDirectory = ts.getDirectoryPath(directoryPath); ensureDirectoriesExist(parentDirectory); host.createDirectory(directoryPath); } } function writeFile(fileName, text, writeByteOrderMark, onError) { try { ts.performance.mark("beforeIOWrite"); ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName))); host.writeFile(fileName, text, writeByteOrderMark); ts.performance.mark("afterIOWrite"); ts.performance.measure("I/O Write", "beforeIOWrite", "afterIOWrite"); } catch (e) { if (onError) { onError(e.message); } } } } ts.createWatchProgram = createWatchProgram; })(ts || (ts = {})); var ts; (function (ts) { var minimumDate = new Date(-8640000000000000); var maximumDate = new Date(8640000000000000); var BuildResultFlags; (function (BuildResultFlags) { BuildResultFlags[BuildResultFlags["None"] = 0] = "None"; BuildResultFlags[BuildResultFlags["Success"] = 1] = "Success"; BuildResultFlags[BuildResultFlags["DeclarationOutputUnchanged"] = 2] = "DeclarationOutputUnchanged"; BuildResultFlags[BuildResultFlags["ConfigFileErrors"] = 4] = "ConfigFileErrors"; BuildResultFlags[BuildResultFlags["SyntaxErrors"] = 8] = "SyntaxErrors"; BuildResultFlags[BuildResultFlags["TypeErrors"] = 16] = "TypeErrors"; BuildResultFlags[BuildResultFlags["DeclarationEmitErrors"] = 32] = "DeclarationEmitErrors"; BuildResultFlags[BuildResultFlags["AnyErrors"] = 60] = "AnyErrors"; })(BuildResultFlags || (BuildResultFlags = {})); var UpToDateStatusType; (function (UpToDateStatusType) { UpToDateStatusType[UpToDateStatusType["Unbuildable"] = 0] = "Unbuildable"; UpToDateStatusType[UpToDateStatusType["UpToDate"] = 1] = "UpToDate"; 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"; UpToDateStatusType[UpToDateStatusType["ContainerOnly"] = 8] = "ContainerOnly"; })(UpToDateStatusType = ts.UpToDateStatusType || (ts.UpToDateStatusType = {})); function createFileMap() { var lookup = ts.createMap(); return { setValue: setValue, getValue: getValue, getValueOrUndefined: getValueOrUndefined, removeKey: removeKey, getKeys: getKeys, hasKey: hasKey }; function getKeys() { return Object.keys(lookup); } function hasKey(fileName) { return lookup.has(ts.normalizePath(fileName)); } function removeKey(fileName) { lookup.delete(ts.normalizePath(fileName)); } function setValue(fileName, value) { lookup.set(ts.normalizePath(fileName), value); } function getValue(fileName) { var f = ts.normalizePath(fileName); if (lookup.has(f)) { return lookup.get(f); } else { throw new Error("No value corresponding to " + fileName + " exists in this map"); } } function getValueOrUndefined(fileName) { var f = ts.normalizePath(fileName); return lookup.get(f); } } function createDependencyMapper() { var childToParents = createFileMap(); var parentToChildren = createFileMap(); var allKeys = createFileMap(); function addReference(childConfigFileName, parentConfigFileName) { addEntry(childToParents, childConfigFileName, parentConfigFileName); addEntry(parentToChildren, parentConfigFileName, childConfigFileName); } function getReferencesTo(parentConfigFileName) { return parentToChildren.getValueOrUndefined(parentConfigFileName) || []; } function getReferencesOf(childConfigFileName) { return childToParents.getValueOrUndefined(childConfigFileName) || []; } function getKeys() { return allKeys.getKeys(); } function addEntry(mapToAddTo, key, element) { key = ts.normalizePath(key); element = ts.normalizePath(element); var arr = mapToAddTo.getValueOrUndefined(key); if (arr === undefined) { mapToAddTo.setValue(key, arr = []); } if (arr.indexOf(element) < 0) { arr.push(element); } allKeys.setValue(key, true); allKeys.setValue(element, true); } return { addReference: addReference, getReferencesTo: getReferencesTo, getReferencesOf: getReferencesOf, getKeys: getKeys }; } function getOutputDeclarationFileName(inputFileName, configFile) { 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"); } function getOutputJavaScriptFileName(inputFileName, configFile) { 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") && configFile.options.jsx === 1) ? ".jsx" : ".js"); } function getOutputFileNames(inputFileName, configFile) { if (configFile.options.outFile) { return ts.emptyArray; } var outputs = []; outputs.push(getOutputJavaScriptFileName(inputFileName, configFile)); if (configFile.options.declaration) { var dts = outputs.push(getOutputDeclarationFileName(inputFileName, configFile)); if (configFile.options.declarationMap) { outputs.push(dts + ".map"); } } return outputs; } function getOutFileOutputs(project) { if (!project.options.outFile) { return ts.Debug.fail("outFile must be set"); } var outputs = []; outputs.push(project.options.outFile); if (project.options.declaration) { var dts = ts.changeExtension(project.options.outFile, ".d.ts"); outputs.push(dts); if (project.options.declarationMap) { outputs.push(dts + ".map"); } } return outputs; } function rootDirOfOptions(opts, configFileName) { return opts.rootDir || ts.getDirectoryPath(configFileName); } function createConfigFileCache(host) { var cache = createFileMap(); var configParseHost = ts.parseConfigHostFromCompilerHost(host); function parseConfigFile(configFilePath) { var sourceFile = host.getSourceFile(configFilePath, 100); if (sourceFile === undefined) { return undefined; } var parsed = ts.parseJsonSourceFileConfigFileContent(sourceFile, configParseHost, ts.getDirectoryPath(configFilePath)); parsed.options.configFilePath = configFilePath; cache.setValue(configFilePath, parsed); return parsed; } function removeKey(configFilePath) { cache.removeKey(configFilePath); } return { parseConfigFile: parseConfigFile, removeKey: removeKey }; } function newer(date1, date2) { return date2 > date1 ? date2 : date1; } function isDeclarationFile(fileName) { return ts.fileExtensionIs(fileName, ".d.ts"); } function createBuildContext(options) { var invalidatedProjects = createFileMap(); var queuedProjects = createFileMap(); var missingRoots = ts.createMap(); return { options: options, projectStatus: createFileMap(), unchangedOutputs: createFileMap(), invalidatedProjects: invalidatedProjects, missingRoots: missingRoots, queuedProjects: queuedProjects }; } ts.createBuildContext = createBuildContext; var buildOpts = [ { name: "verbose", shortName: "v", category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Enable_verbose_logging, type: "boolean" }, { name: "dry", shortName: "d", category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Show_what_would_be_built_or_deleted_if_specified_with_clean, type: "boolean" }, { name: "force", shortName: "f", category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Build_all_projects_including_those_that_appear_to_be_up_to_date, type: "boolean" }, { name: "clean", category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Delete_the_outputs_of_all_projects, type: "boolean" }, { name: "watch", category: ts.Diagnostics.Command_line_Options, description: ts.Diagnostics.Watch_input_files, type: "boolean" } ]; function performBuild(args, compilerHost, buildHost, system) { var verbose = false; var dry = false; var force = false; var clean = false; var watch = false; var projects = []; for (var _i = 0, args_6 = args; _i < args_6.length; _i++) { var arg = args_6[_i]; switch (arg.toLowerCase()) { case "-v": case "--verbose": verbose = true; continue; case "-d": case "--dry": dry = true; continue; case "-f": case "--force": force = true; continue; case "--clean": clean = true; continue; case "--watch": case "-w": watch = true; continue; case "--?": case "-?": case "--help": ts.printHelp(buildOpts, "--build "); return ts.ExitStatus.Success; } addProject(arg); } if (clean && force) { buildHost.error(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "force"); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (clean && verbose) { buildHost.error(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "verbose"); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (clean && watch) { buildHost.error(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "watch"); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (watch && dry) { buildHost.error(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "watch", "dry"); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (projects.length === 0) { addProject("."); } var builder = createSolutionBuilder(compilerHost, buildHost, projects, { dry: dry, force: force, verbose: verbose }, system); if (clean) { return builder.cleanAllProjects(); } if (watch) { builder.startWatching(); return undefined; } return builder.buildAllProjects(); function addProject(projectSpecification) { var fileName = ts.resolvePath(compilerHost.getCurrentDirectory(), projectSpecification); var refPath = ts.resolveProjectReferencePath(compilerHost, { path: fileName }); if (!refPath) { return buildHost.error(ts.Diagnostics.File_0_does_not_exist, projectSpecification); } if (!compilerHost.fileExists(refPath)) { return buildHost.error(ts.Diagnostics.File_0_does_not_exist, fileName); } projects.push(refPath); } } ts.performBuild = performBuild; function createSolutionBuilder(compilerHost, buildHost, rootNames, defaultOptions, system) { if (!compilerHost.getModifiedTime || !compilerHost.setModifiedTime) { throw new Error("Host must support timestamp APIs"); } var configFileCache = createConfigFileCache(compilerHost); var context = createBuildContext(defaultOptions); var existingWatchersForWildcards = ts.createMap(); var upToDateHost = { fileExists: function (fileName) { return compilerHost.fileExists(fileName); }, getModifiedTime: function (fileName) { return compilerHost.getModifiedTime(fileName); }, getUnchangedTime: function (fileName) { return context.unchangedOutputs.getValueOrUndefined(fileName); }, getLastStatus: function (fileName) { return context.projectStatus.getValueOrUndefined(fileName); }, setLastStatus: function (fileName, status) { return context.projectStatus.setValue(fileName, status); }, parseConfigFile: function (configFilePath) { return configFileCache.parseConfigFile(configFilePath); } }; return { buildAllProjects: buildAllProjects, getUpToDateStatus: getUpToDateStatus, getUpToDateStatusOfFile: getUpToDateStatusOfFile, cleanAllProjects: cleanAllProjects, resetBuildContext: resetBuildContext, getBuildGraph: getBuildGraph, invalidateProject: invalidateProject, buildInvalidatedProjects: buildInvalidatedProjects, buildDependentInvalidatedProjects: buildDependentInvalidatedProjects, resolveProjectName: resolveProjectName, startWatching: startWatching }; function startWatching() { if (!system) throw new Error("System host must be provided if using --watch"); if (!system.watchFile || !system.watchDirectory || !system.setTimeout) throw new Error("System host must support watchFile / watchDirectory / setTimeout if using --watch"); var graph = getGlobalDependencyGraph(); if (!graph.buildQueue) { return; } var _loop_12 = function (resolved) { var cfg = configFileCache.parseConfigFile(resolved); if (cfg) { system.watchFile(resolved, function () { configFileCache.removeKey(resolved); invalidateProjectAndScheduleBuilds(resolved); }); if (cfg.configFileSpecs) { ts.updateWatchingWildcardDirectories(existingWatchersForWildcards, ts.createMapFromTemplate(cfg.configFileSpecs.wildcardDirectories), function (dir, flags) { return system.watchDirectory(dir, function () { invalidateProjectAndScheduleBuilds(resolved); }, !!(flags & 1)); }); } for (var _i = 0, _a = cfg.fileNames; _i < _a.length; _i++) { var input = _a[_i]; system.watchFile(input, function () { invalidateProjectAndScheduleBuilds(resolved); }); } } }; for (var _i = 0, _a = graph.buildQueue; _i < _a.length; _i++) { var resolved = _a[_i]; _loop_12(resolved); } function invalidateProjectAndScheduleBuilds(resolved) { invalidateProject(resolved); system.setTimeout(buildInvalidatedProjects, 100); system.setTimeout(buildDependentInvalidatedProjects, 3000); } } function resetBuildContext(opts) { if (opts === void 0) { opts = defaultOptions; } context = createBuildContext(opts); } function getUpToDateStatusOfFile(configFileName) { return getUpToDateStatus(configFileCache.parseConfigFile(configFileName)); } function getBuildGraph(configFileNames) { var resolvedNames = resolveProjectNames(configFileNames); if (resolvedNames === undefined) return undefined; return createDependencyGraph(resolvedNames); } function getGlobalDependencyGraph() { return getBuildGraph(rootNames); } function getUpToDateStatus(project) { return ts.getUpToDateStatus(upToDateHost, project); } function invalidateProject(configFileName) { var resolved = resolveProjectName(configFileName); if (resolved === undefined) { return; } configFileCache.removeKey(resolved); context.invalidatedProjects.setValue(resolved, true); context.projectStatus.removeKey(resolved); var graph = getGlobalDependencyGraph(); if (graph) { queueBuildForDownstreamReferences(resolved); } function queueBuildForDownstreamReferences(root) { var deps = graph.dependencyMap.getReferencesTo(root); for (var _i = 0, deps_1 = deps; _i < deps_1.length; _i++) { var ref = deps_1[_i]; if (!context.queuedProjects.hasKey(ref)) { context.queuedProjects.setValue(ref, true); queueBuildForDownstreamReferences(ref); } } } } function buildInvalidatedProjects() { buildSomeProjects(function (p) { return context.invalidatedProjects.hasKey(p); }); } function buildDependentInvalidatedProjects() { buildSomeProjects(function (p) { return context.queuedProjects.hasKey(p); }); } function buildSomeProjects(predicate) { var resolvedNames = resolveProjectNames(rootNames); if (resolvedNames === undefined) return; var graph = createDependencyGraph(resolvedNames); for (var _i = 0, _a = graph.buildQueue; _i < _a.length; _i++) { var next = _a[_i]; if (!predicate(next)) continue; var resolved = resolveProjectName(next); if (!resolved) continue; var proj = configFileCache.parseConfigFile(resolved); if (!proj) continue; var status = getUpToDateStatus(proj); verboseReportProjectStatus(next, status); if (status.type === UpToDateStatusType.UpstreamBlocked) { if (context.options.verbose) buildHost.verbose(ts.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_has_errors, resolved, status.upstreamProjectName); continue; } buildSingleProject(next); } } function createDependencyGraph(roots) { var temporaryMarks = {}; var permanentMarks = {}; var circularityReportStack = []; var buildOrder = []; var graph = createDependencyMapper(); var hadError = false; for (var _i = 0, roots_1 = roots; _i < roots_1.length; _i++) { var root = roots_1[_i]; visit(root); } if (hadError) { return undefined; } return { buildQueue: buildOrder, dependencyMap: graph }; function visit(projPath, inCircularContext) { if (inCircularContext === void 0) { inCircularContext = false; } if (permanentMarks[projPath]) return; if (temporaryMarks[projPath]) { if (!inCircularContext) { hadError = true; buildHost.error(ts.Diagnostics.Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0, circularityReportStack.join("\r\n")); return; } } temporaryMarks[projPath] = true; circularityReportStack.push(projPath); var parsed = configFileCache.parseConfigFile(projPath); if (parsed === undefined) { hadError = true; return; } if (parsed.projectReferences) { for (var _i = 0, _a = parsed.projectReferences; _i < _a.length; _i++) { var ref = _a[_i]; var resolvedRefPath = resolveProjectName(ref.path); if (resolvedRefPath === undefined) { hadError = true; break; } visit(resolvedRefPath, inCircularContext || ref.circular); graph.addReference(projPath, resolvedRefPath); } } circularityReportStack.pop(); permanentMarks[projPath] = true; buildOrder.push(projPath); } } function buildSingleProject(proj) { if (context.options.dry) { buildHost.message(ts.Diagnostics.A_non_dry_build_would_build_project_0, proj); return BuildResultFlags.Success; } if (context.options.verbose) buildHost.verbose(ts.Diagnostics.Building_project_0, proj); var resultFlags = BuildResultFlags.None; resultFlags |= BuildResultFlags.DeclarationOutputUnchanged; var configFile = configFileCache.parseConfigFile(proj); if (!configFile) { resultFlags |= BuildResultFlags.ConfigFileErrors; context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Config file errors" }); return resultFlags; } if (configFile.fileNames.length === 0) { return BuildResultFlags.None; } var programOptions = { projectReferences: configFile.projectReferences, host: compilerHost, rootNames: configFile.fileNames, options: configFile.options }; var program = ts.createProgram(programOptions); var syntaxDiagnostics = program.getOptionsDiagnostics().concat(program.getSyntacticDiagnostics()); if (syntaxDiagnostics.length) { resultFlags |= BuildResultFlags.SyntaxErrors; for (var _i = 0, syntaxDiagnostics_1 = syntaxDiagnostics; _i < syntaxDiagnostics_1.length; _i++) { var diag = syntaxDiagnostics_1[_i]; buildHost.errorDiagnostic(diag); } context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Syntactic errors" }); return resultFlags; } if (program.getCompilerOptions().declaration) { var declDiagnostics = program.getDeclarationDiagnostics(); if (declDiagnostics.length) { resultFlags |= BuildResultFlags.DeclarationEmitErrors; for (var _a = 0, declDiagnostics_1 = declDiagnostics; _a < declDiagnostics_1.length; _a++) { var diag = declDiagnostics_1[_a]; buildHost.errorDiagnostic(diag); } context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Declaration file errors" }); return resultFlags; } } var semanticDiagnostics = program.getSemanticDiagnostics(); if (semanticDiagnostics.length) { resultFlags |= BuildResultFlags.TypeErrors; for (var _b = 0, semanticDiagnostics_1 = semanticDiagnostics; _b < semanticDiagnostics_1.length; _b++) { var diag = semanticDiagnostics_1[_b]; buildHost.errorDiagnostic(diag); } context.projectStatus.setValue(proj, { type: UpToDateStatusType.Unbuildable, reason: "Semantic errors" }); return resultFlags; } var newestDeclarationFileContentChangedTime = minimumDate; program.emit(undefined, function (fileName, content, writeBom, onError) { var priorChangeTime; if (isDeclarationFile(fileName) && compilerHost.fileExists(fileName)) { if (compilerHost.readFile(fileName) === content) { resultFlags &= ~BuildResultFlags.DeclarationOutputUnchanged; priorChangeTime = compilerHost.getModifiedTime && compilerHost.getModifiedTime(fileName); } } compilerHost.writeFile(fileName, content, writeBom, onError, ts.emptyArray); if (priorChangeTime !== undefined) { newestDeclarationFileContentChangedTime = newer(priorChangeTime, newestDeclarationFileContentChangedTime); context.unchangedOutputs.setValue(fileName, priorChangeTime); } }); context.projectStatus.setValue(proj, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: newestDeclarationFileContentChangedTime }); return resultFlags; } function updateOutputTimestamps(proj) { if (context.options.dry) { return buildHost.message(ts.Diagnostics.A_non_dry_build_would_build_project_0, proj.options.configFilePath); } if (context.options.verbose) buildHost.verbose(ts.Diagnostics.Updating_output_timestamps_of_project_0, proj.options.configFilePath); var now = new Date(); var outputs = getAllProjectOutputs(proj); var priorNewestUpdateTime = minimumDate; for (var _i = 0, outputs_1 = outputs; _i < outputs_1.length; _i++) { var file = outputs_1[_i]; if (isDeclarationFile(file)) { priorNewestUpdateTime = newer(priorNewestUpdateTime, compilerHost.getModifiedTime(file)); } compilerHost.setModifiedTime(file, now); } context.projectStatus.setValue(proj.options.configFilePath, { type: UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: priorNewestUpdateTime }); } function getFilesToClean(configFileNames) { var resolvedNames = resolveProjectNames(configFileNames); if (resolvedNames === undefined) return undefined; var graph = createDependencyGraph(resolvedNames); if (graph === undefined) return undefined; var filesToDelete = []; for (var _i = 0, _a = graph.buildQueue; _i < _a.length; _i++) { var proj = _a[_i]; var parsed = configFileCache.parseConfigFile(proj); if (parsed === undefined) { continue; } var outputs = getAllProjectOutputs(parsed); for (var _b = 0, outputs_2 = outputs; _b < outputs_2.length; _b++) { var output = outputs_2[_b]; if (compilerHost.fileExists(output)) { filesToDelete.push(output); } } } return filesToDelete; } function getAllProjectsInScope() { var resolvedNames = resolveProjectNames(rootNames); if (resolvedNames === undefined) return undefined; var graph = createDependencyGraph(resolvedNames); if (graph === undefined) return undefined; return graph.buildQueue; } function cleanAllProjects() { var resolvedNames = getAllProjectsInScope(); if (resolvedNames === undefined) { buildHost.message(ts.Diagnostics.Skipping_clean_because_not_all_projects_could_be_located); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } var filesToDelete = getFilesToClean(resolvedNames); if (filesToDelete === undefined) { buildHost.message(ts.Diagnostics.Skipping_clean_because_not_all_projects_could_be_located); return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; } if (context.options.dry) { 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; } if (!compilerHost.deleteFile) { throw new Error("Host does not support deleting files"); } for (var _i = 0, filesToDelete_1 = filesToDelete; _i < filesToDelete_1.length; _i++) { var output = filesToDelete_1[_i]; compilerHost.deleteFile(output); } return ts.ExitStatus.Success; } function resolveProjectName(name) { var fullPath = ts.resolvePath(compilerHost.getCurrentDirectory(), name); if (compilerHost.fileExists(fullPath)) { return fullPath; } var fullPathWithTsconfig = ts.combinePaths(fullPath, "tsconfig.json"); if (compilerHost.fileExists(fullPathWithTsconfig)) { return fullPathWithTsconfig; } buildHost.error(ts.Diagnostics.File_0_not_found, relName(fullPath)); return undefined; } function resolveProjectNames(configFileNames) { var resolvedNames = []; for (var _i = 0, configFileNames_1 = configFileNames; _i < configFileNames_1.length; _i++) { var name = configFileNames_1[_i]; var resolved = resolveProjectName(name); if (resolved === undefined) { return undefined; } resolvedNames.push(resolved); } return resolvedNames; } function buildAllProjects() { var graph = getGlobalDependencyGraph(); if (graph === undefined) return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped; var queue = graph.buildQueue; reportBuildQueue(graph); var anyFailed = false; for (var _i = 0, queue_1 = queue; _i < queue_1.length; _i++) { var next = queue_1[_i]; var proj = configFileCache.parseConfigFile(next); if (proj === undefined) { anyFailed = true; break; } var status = getUpToDateStatus(proj); verboseReportProjectStatus(next, status); var projName = proj.options.configFilePath; if (status.type === UpToDateStatusType.UpToDate && !context.options.force) { if (defaultOptions.dry) { buildHost.message(ts.Diagnostics.Project_0_is_up_to_date, projName); } continue; } if (status.type === UpToDateStatusType.UpToDateWithUpstreamTypes && !context.options.force) { updateOutputTimestamps(proj); continue; } if (status.type === UpToDateStatusType.UpstreamBlocked) { if (context.options.verbose) buildHost.verbose(ts.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_has_errors, projName, status.upstreamProjectName); continue; } if (status.type === UpToDateStatusType.ContainerOnly) { continue; } var buildResult = buildSingleProject(next); anyFailed = anyFailed || !!(buildResult & BuildResultFlags.AnyErrors); } return anyFailed ? ts.ExitStatus.DiagnosticsPresent_OutputsSkipped : ts.ExitStatus.Success; } function reportBuildQueue(graph) { if (!context.options.verbose) return; var names = []; for (var _i = 0, _a = graph.buildQueue; _i < _a.length; _i++) { var name = _a[_i]; names.push(name); } if (context.options.verbose) buildHost.verbose(ts.Diagnostics.Projects_in_this_build_Colon_0, names.map(function (s) { return "\r\n * " + relName(s); }).join("")); } function relName(path) { return ts.convertToRelativePath(path, compilerHost.getCurrentDirectory(), function (f) { return compilerHost.getCanonicalFileName(f); }); } function reportVerbose(message) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } buildHost.verbose.apply(buildHost, [message].concat(args)); } function verboseReportProjectStatus(configFileName, status) { if (!context.options.verbose) return; return formatUpToDateStatus(configFileName, status, relName, reportVerbose); } } ts.createSolutionBuilder = createSolutionBuilder; function getUpToDateStatus(host, project) { if (project === undefined) { return { type: UpToDateStatusType.Unbuildable, reason: "File deleted mid-build" }; } if (project === undefined) { return { type: UpToDateStatusType.Unbuildable, reason: "File deleted mid-build" }; } var prior = host.getLastStatus ? host.getLastStatus(project.options.configFilePath) : undefined; if (prior !== undefined) { return prior; } var actual = getUpToDateStatusWorker(host, project); if (host.setLastStatus) { host.setLastStatus(project.options.configFilePath, actual); } return actual; } ts.getUpToDateStatus = getUpToDateStatus; function getUpToDateStatusWorker(host, project) { var newestInputFileName = undefined; var newestInputFileTime = minimumDate; for (var _i = 0, _a = project.fileNames; _i < _a.length; _i++) { var inputFile = _a[_i]; if (!host.fileExists(inputFile)) { return { type: UpToDateStatusType.Unbuildable, reason: inputFile + " does not exist" }; } var inputTime = host.getModifiedTime(inputFile); if (inputTime > newestInputFileTime) { newestInputFileName = inputFile; newestInputFileTime = inputTime; } } var outputs = getAllProjectOutputs(project); if (outputs.length === 0) { return { type: UpToDateStatusType.ContainerOnly }; } var oldestOutputFileName = "(none)"; var oldestOutputFileTime = maximumDate; var newestOutputFileName = "(none)"; var newestOutputFileTime = minimumDate; var missingOutputFileName; var newestDeclarationFileContentChangedTime = minimumDate; var isOutOfDateWithInputs = false; for (var _b = 0, outputs_3 = outputs; _b < outputs_3.length; _b++) { var output = outputs_3[_b]; if (!host.fileExists(output)) { missingOutputFileName = output; break; } var outputTime = host.getModifiedTime(output); if (outputTime < oldestOutputFileTime) { oldestOutputFileTime = outputTime; oldestOutputFileName = output; } if (outputTime < newestInputFileTime) { isOutOfDateWithInputs = true; break; } if (outputTime > newestOutputFileTime) { newestOutputFileTime = outputTime; newestOutputFileName = output; } if (isDeclarationFile(output)) { var unchangedTime = host.getUnchangedTime ? host.getUnchangedTime(output) : undefined; if (unchangedTime !== undefined) { newestDeclarationFileContentChangedTime = newer(unchangedTime, newestDeclarationFileContentChangedTime); } else { newestDeclarationFileContentChangedTime = newer(newestDeclarationFileContentChangedTime, host.getModifiedTime(output)); } } } var pseudoUpToDate = false; var usesPrepend = false; if (project.projectReferences && host.parseConfigFile) { for (var _c = 0, _d = project.projectReferences; _c < _d.length; _c++) { var ref = _d[_c]; usesPrepend = usesPrepend || !!(ref.prepend); var resolvedRef = ts.resolveProjectReferencePath(host, ref); var refStatus = getUpToDateStatus(host, host.parseConfigFile(resolvedRef)); if (refStatus.type === UpToDateStatusType.Unbuildable) { return { type: UpToDateStatusType.UpstreamBlocked, upstreamProjectName: ref.path }; } if (refStatus.type !== UpToDateStatusType.UpToDate) { return { type: UpToDateStatusType.UpstreamOutOfDate, upstreamProjectName: ref.path }; } if (refStatus.newestInputFileTime <= oldestOutputFileTime) { continue; } if (refStatus.newestDeclarationFileContentChangedTime <= oldestOutputFileTime) { pseudoUpToDate = true; continue; } ts.Debug.assert(oldestOutputFileName !== undefined, "Should have an oldest output filename here"); return { type: UpToDateStatusType.OutOfDateWithUpstream, outOfDateOutputFileName: oldestOutputFileName, newerProjectName: ref.path }; } } if (missingOutputFileName !== undefined) { return { type: UpToDateStatusType.OutputMissing, missingOutputFileName: missingOutputFileName }; } if (isOutOfDateWithInputs) { return { type: UpToDateStatusType.OutOfDateWithSelf, outOfDateOutputFileName: oldestOutputFileName, newerInputFileName: newestInputFileName }; } if (usesPrepend) { pseudoUpToDate = false; } return { type: pseudoUpToDate ? UpToDateStatusType.UpToDateWithUpstreamTypes : UpToDateStatusType.UpToDate, newestDeclarationFileContentChangedTime: newestDeclarationFileContentChangedTime, newestInputFileTime: newestInputFileTime, newestOutputFileTime: newestOutputFileTime, newestInputFileName: newestInputFileName, newestOutputFileName: newestOutputFileName, oldestOutputFileName: oldestOutputFileName }; } function getAllProjectOutputs(project) { if (project.options.outFile) { return getOutFileOutputs(project); } else { var outputs = []; for (var _i = 0, _a = project.fileNames; _i < _a.length; _i++) { var inputFile = _a[_i]; outputs.push.apply(outputs, getOutputFileNames(inputFile, project)); } return outputs; } } ts.getAllProjectOutputs = getAllProjectOutputs; function formatUpToDateStatus(configFileName, status, relName, formatMessage) { switch (status.type) { case UpToDateStatusType.OutOfDateWithSelf: return formatMessage(ts.Diagnostics.Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2, relName(configFileName), relName(status.outOfDateOutputFileName), relName(status.newerInputFileName)); case UpToDateStatusType.OutOfDateWithUpstream: return formatMessage(ts.Diagnostics.Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2, relName(configFileName), relName(status.outOfDateOutputFileName), relName(status.newerProjectName)); case UpToDateStatusType.OutputMissing: return formatMessage(ts.Diagnostics.Project_0_is_out_of_date_because_output_file_1_does_not_exist, relName(configFileName), relName(status.missingOutputFileName)); case UpToDateStatusType.UpToDate: if (status.newestInputFileTime !== undefined) { return formatMessage(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)); } break; case UpToDateStatusType.UpToDateWithUpstreamTypes: return formatMessage(ts.Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, relName(configFileName)); case UpToDateStatusType.UpstreamOutOfDate: return formatMessage(ts.Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date, relName(configFileName), relName(status.upstreamProjectName)); case UpToDateStatusType.UpstreamBlocked: return formatMessage(ts.Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors, relName(configFileName), relName(status.upstreamProjectName)); case UpToDateStatusType.Unbuildable: return formatMessage(ts.Diagnostics.Failed_to_parse_file_0_Colon_1, relName(configFileName), status.reason); case UpToDateStatusType.ContainerOnly: break; default: ts.assertTypeIsNever(status); } } ts.formatUpToDateStatus = formatUpToDateStatus; })(ts || (ts = {})); var ts; (function (ts) { var server; (function (server) { server.ActionSet = "action::set"; server.ActionInvalidate = "action::invalidate"; server.ActionPackageInstalled = "action::packageInstalled"; server.EventTypesRegistry = "event::typesRegistry"; server.EventBeginInstallTypes = "event::beginInstallTypes"; server.EventEndInstallTypes = "event::endInstallTypes"; server.EventInitializationFailed = "event::initializationFailed"; var Arguments; (function (Arguments) { Arguments.GlobalCacheLocation = "--globalTypingsCacheLocation"; Arguments.LogFile = "--logFile"; Arguments.EnableTelemetry = "--enableTelemetry"; Arguments.TypingSafeListLocation = "--typingSafeListLocation"; Arguments.TypesMapLocation = "--typesMapLocation"; Arguments.NpmLocation = "--npmLocation"; })(Arguments = server.Arguments || (server.Arguments = {})); function hasArgument(argumentName) { return ts.sys.args.indexOf(argumentName) >= 0; } server.hasArgument = hasArgument; function findArgument(argumentName) { var index = ts.sys.args.indexOf(argumentName); return index >= 0 && index < ts.sys.args.length - 1 ? ts.sys.args[index + 1] : undefined; } server.findArgument = findArgument; function nowString() { var d = new Date(); return d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + "." + d.getMilliseconds(); } server.nowString = nowString; })(server = ts.server || (ts.server = {})); })(ts || (ts = {})); var ts; (function (ts) { var JsTyping; (function (JsTyping) { function isTypingUpToDate(cachedTyping, availableTypingVersions) { var availableVersion = ts.Semver.parse(ts.getProperty(availableTypingVersions, "ts" + ts.versionMajorMinor) || ts.getProperty(availableTypingVersions, "latest")); return !availableVersion.greaterThan(cachedTyping.version); } JsTyping.isTypingUpToDate = isTypingUpToDate; JsTyping.nodeCoreModuleList = [ "assert", "async_hooks", "buffer", "child_process", "cluster", "console", "constants", "crypto", "dgram", "dns", "domain", "events", "fs", "http", "https", "http2", "inspector", "net", "os", "path", "perf_hooks", "process", "punycode", "querystring", "readline", "repl", "stream", "string_decoder", "timers", "tls", "tty", "url", "util", "v8", "vm", "zlib" ]; JsTyping.nodeCoreModules = ts.arrayToSet(JsTyping.nodeCoreModuleList); function loadSafeList(host, safeListPath) { var result = ts.readConfigFile(safeListPath, function (path) { return host.readFile(path); }); return ts.createMapFromTemplate(result.config); } JsTyping.loadSafeList = loadSafeList; function loadTypesMap(host, typesMapPath) { var result = ts.readConfigFile(typesMapPath, function (path) { return host.readFile(path); }); if (result.config) { return ts.createMapFromTemplate(result.config.simpleMap); } return undefined; } JsTyping.loadTypesMap = loadTypesMap; function discoverTypings(host, log, fileNames, projectRootPath, safeList, packageNameToTypingLocation, typeAcquisition, unresolvedImports, typesRegistry) { if (!typeAcquisition || !typeAcquisition.enable) { return { cachedTypingPaths: [], newTypingNames: [], filesToWatch: [] }; } var inferredTypings = ts.createMap(); fileNames = ts.mapDefined(fileNames, function (fileName) { var path = ts.normalizePath(fileName); if (ts.hasJavaScriptFileExtension(path)) { return path; } }); var filesToWatch = []; if (typeAcquisition.include) addInferredTypings(typeAcquisition.include, "Explicitly included types"); var exclude = typeAcquisition.exclude || []; var possibleSearchDirs = ts.arrayToSet(fileNames, ts.getDirectoryPath); possibleSearchDirs.set(projectRootPath, true); possibleSearchDirs.forEach(function (_true, searchDir) { var packageJsonPath = ts.combinePaths(searchDir, "package.json"); getTypingNamesFromJson(packageJsonPath, filesToWatch); var bowerJsonPath = ts.combinePaths(searchDir, "bower.json"); getTypingNamesFromJson(bowerJsonPath, filesToWatch); var bowerComponentsPath = ts.combinePaths(searchDir, "bower_components"); getTypingNamesFromPackagesFolder(bowerComponentsPath, filesToWatch); var nodeModulesPath = ts.combinePaths(searchDir, "node_modules"); getTypingNamesFromPackagesFolder(nodeModulesPath, filesToWatch); }); getTypingNamesFromSourceFileNames(fileNames); if (unresolvedImports) { var module_1 = ts.deduplicate(unresolvedImports.map(function (moduleId) { return JsTyping.nodeCoreModules.has(moduleId) ? "node" : moduleId; }), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive); addInferredTypings(module_1, "Inferred typings from unresolved imports"); } packageNameToTypingLocation.forEach(function (typing, name) { var registryEntry = typesRegistry.get(name); if (inferredTypings.has(name) && inferredTypings.get(name) === undefined && registryEntry !== undefined && isTypingUpToDate(typing, registryEntry)) { inferredTypings.set(name, typing.typingLocation); } }); for (var _i = 0, exclude_1 = exclude; _i < exclude_1.length; _i++) { var excludeTypingName = exclude_1[_i]; var didDelete = inferredTypings.delete(excludeTypingName); if (didDelete && log) log("Typing for " + excludeTypingName + " is in exclude list, will be ignored."); } var newTypingNames = []; var cachedTypingPaths = []; inferredTypings.forEach(function (inferred, typing) { if (inferred !== undefined) { cachedTypingPaths.push(inferred); } else { newTypingNames.push(typing); } }); var result = { cachedTypingPaths: cachedTypingPaths, newTypingNames: newTypingNames, filesToWatch: filesToWatch }; if (log) log("Result: " + JSON.stringify(result)); return result; function addInferredTyping(typingName) { if (!inferredTypings.has(typingName)) { inferredTypings.set(typingName, undefined); } } function addInferredTypings(typingNames, message) { if (log) log(message + ": " + JSON.stringify(typingNames)); ts.forEach(typingNames, addInferredTyping); } function getTypingNamesFromJson(jsonPath, filesToWatch) { if (!host.fileExists(jsonPath)) { return; } filesToWatch.push(jsonPath); var jsonConfig = ts.readConfigFile(jsonPath, function (path) { return host.readFile(path); }).config; var jsonTypingNames = ts.flatMap([jsonConfig.dependencies, jsonConfig.devDependencies, jsonConfig.optionalDependencies, jsonConfig.peerDependencies], ts.getOwnKeys); addInferredTypings(jsonTypingNames, "Typing names in '" + jsonPath + "' dependencies"); } function getTypingNamesFromSourceFileNames(fileNames) { var fromFileNames = ts.mapDefined(fileNames, function (j) { if (!ts.hasJavaScriptFileExtension(j)) return undefined; var inferredTypingName = ts.removeFileExtension(ts.getBaseFileName(j.toLowerCase())); var cleanedTypingName = ts.removeMinAndVersionNumbers(inferredTypingName); return safeList.get(cleanedTypingName); }); if (fromFileNames.length) { addInferredTypings(fromFileNames, "Inferred typings from file names"); } var hasJsxFile = ts.some(fileNames, function (f) { return ts.fileExtensionIs(f, ".jsx"); }); if (hasJsxFile) { if (log) log("Inferred 'react' typings due to presence of '.jsx' extension"); addInferredTyping("react"); } } function getTypingNamesFromPackagesFolder(packagesFolderPath, filesToWatch) { filesToWatch.push(packagesFolderPath); if (!host.directoryExists(packagesFolderPath)) { return; } var fileNames = host.readDirectory(packagesFolderPath, [".json"], undefined, undefined, 2); if (log) log("Searching for typing names in " + packagesFolderPath + "; all files: " + JSON.stringify(fileNames)); var packageNames = []; for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { var fileName = fileNames_1[_i]; var normalizedFileName = ts.normalizePath(fileName); var baseFileName = ts.getBaseFileName(normalizedFileName); if (baseFileName !== "package.json" && baseFileName !== "bower.json") { continue; } var result_5 = ts.readConfigFile(normalizedFileName, function (path) { return host.readFile(path); }); var packageJson = result_5.config; if (baseFileName === "package.json" && packageJson._requiredBy && ts.filter(packageJson._requiredBy, function (r) { return r[0] === "#" || r === "/"; }).length === 0) { continue; } if (!packageJson.name) { continue; } var ownTypes = packageJson.types || packageJson.typings; if (ownTypes) { var absolutePath = ts.getNormalizedAbsolutePath(ownTypes, ts.getDirectoryPath(normalizedFileName)); if (log) log(" Package '" + packageJson.name + "' provides its own types."); inferredTypings.set(packageJson.name, absolutePath); } else { packageNames.push(packageJson.name); } } addInferredTypings(packageNames, " Found package names"); } } JsTyping.discoverTypings = discoverTypings; var PackageNameValidationResult; (function (PackageNameValidationResult) { PackageNameValidationResult[PackageNameValidationResult["Ok"] = 0] = "Ok"; PackageNameValidationResult[PackageNameValidationResult["ScopedPackagesNotSupported"] = 1] = "ScopedPackagesNotSupported"; PackageNameValidationResult[PackageNameValidationResult["EmptyName"] = 2] = "EmptyName"; PackageNameValidationResult[PackageNameValidationResult["NameTooLong"] = 3] = "NameTooLong"; PackageNameValidationResult[PackageNameValidationResult["NameStartsWithDot"] = 4] = "NameStartsWithDot"; PackageNameValidationResult[PackageNameValidationResult["NameStartsWithUnderscore"] = 5] = "NameStartsWithUnderscore"; PackageNameValidationResult[PackageNameValidationResult["NameContainsNonURISafeCharacters"] = 6] = "NameContainsNonURISafeCharacters"; })(PackageNameValidationResult = JsTyping.PackageNameValidationResult || (JsTyping.PackageNameValidationResult = {})); var maxPackageNameLength = 214; function validatePackageName(packageName) { if (!packageName) { return 2; } if (packageName.length > maxPackageNameLength) { return 3; } if (packageName.charCodeAt(0) === 46) { return 4; } if (packageName.charCodeAt(0) === 95) { return 5; } if (/^@[^/]+\/[^/]+$/.test(packageName)) { return 1; } if (encodeURIComponent(packageName) !== packageName) { return 6; } return 0; } JsTyping.validatePackageName = validatePackageName; function renderPackageNameValidationFailure(result, typing) { switch (result) { case 2: return "Package name '" + typing + "' cannot be empty"; case 3: return "Package name '" + typing + "' should be less than " + maxPackageNameLength + " characters"; case 4: return "Package name '" + typing + "' cannot start with '.'"; case 5: return "Package name '" + typing + "' cannot start with '_'"; case 1: return "Package '" + typing + "' is scoped and currently is not supported"; case 6: return "Package name '" + typing + "' contains non URI safe characters"; case 0: return ts.Debug.fail(); default: throw ts.Debug.assertNever(result); } } JsTyping.renderPackageNameValidationFailure = renderPackageNameValidationFailure; })(JsTyping = ts.JsTyping || (ts.JsTyping = {})); })(ts || (ts = {})); var ts; (function (ts) { function stringToInt(str) { var n = parseInt(str, 10); if (isNaN(n)) { throw new Error("Error in parseInt(" + JSON.stringify(str) + ")"); } return n; } var isPrereleaseRegex = /^(.*)-next.\d+/; var prereleaseSemverRegex = /^(\d+)\.(\d+)\.0-next.(\d+)$/; var semverRegex = /^(\d+)\.(\d+)\.(\d+)$/; var Semver = (function () { function Semver(major, minor, patch, isPrerelease) { this.major = major; this.minor = minor; this.patch = patch; this.isPrerelease = isPrerelease; } Semver.parse = function (semver) { var isPrerelease = isPrereleaseRegex.test(semver); var result = Semver.tryParse(semver, isPrerelease); if (!result) { throw new Error("Unexpected semver: " + semver + " (isPrerelease: " + isPrerelease + ")"); } return result; }; Semver.fromRaw = function (_a) { var major = _a.major, minor = _a.minor, patch = _a.patch, isPrerelease = _a.isPrerelease; return new Semver(major, minor, patch, isPrerelease); }; Semver.tryParse = function (semver, isPrerelease) { var rgx = isPrerelease ? prereleaseSemverRegex : semverRegex; var match = rgx.exec(semver); return match ? new Semver(stringToInt(match[1]), stringToInt(match[2]), stringToInt(match[3]), isPrerelease) : undefined; }; Object.defineProperty(Semver.prototype, "versionString", { get: function () { return this.isPrerelease ? this.major + "." + this.minor + ".0-next." + this.patch : this.major + "." + this.minor + "." + this.patch; }, enumerable: true, configurable: true }); Semver.prototype.equals = function (sem) { return this.major === sem.major && this.minor === sem.minor && this.patch === sem.patch && this.isPrerelease === sem.isPrerelease; }; Semver.prototype.greaterThan = function (sem) { return this.major > sem.major || this.major === sem.major && (this.minor > sem.minor || this.minor === sem.minor && (!this.isPrerelease && sem.isPrerelease || this.isPrerelease === sem.isPrerelease && this.patch > sem.patch)); }; return Semver; }()); ts.Semver = Semver; })(ts || (ts = {})); var ts; (function (ts) { var ScriptSnapshot; (function (ScriptSnapshot) { var StringScriptSnapshot = (function () { function StringScriptSnapshot(text) { this.text = text; } StringScriptSnapshot.prototype.getText = function (start, end) { return start === 0 && end === this.text.length ? this.text : this.text.substring(start, end); }; StringScriptSnapshot.prototype.getLength = function () { return this.text.length; }; StringScriptSnapshot.prototype.getChangeRange = function () { return undefined; }; return StringScriptSnapshot; }()); function fromString(text) { return new StringScriptSnapshot(text); } ScriptSnapshot.fromString = fromString; })(ScriptSnapshot = ts.ScriptSnapshot || (ts.ScriptSnapshot = {})); ts.defaultPreferences = {}; var TextChange = (function () { function TextChange() { } return TextChange; }()); ts.TextChange = TextChange; var HighlightSpanKind; (function (HighlightSpanKind) { HighlightSpanKind["none"] = "none"; HighlightSpanKind["definition"] = "definition"; HighlightSpanKind["reference"] = "reference"; HighlightSpanKind["writtenReference"] = "writtenReference"; })(HighlightSpanKind = ts.HighlightSpanKind || (ts.HighlightSpanKind = {})); var IndentStyle; (function (IndentStyle) { IndentStyle[IndentStyle["None"] = 0] = "None"; IndentStyle[IndentStyle["Block"] = 1] = "Block"; IndentStyle[IndentStyle["Smart"] = 2] = "Smart"; })(IndentStyle = ts.IndentStyle || (ts.IndentStyle = {})); var SymbolDisplayPartKind; (function (SymbolDisplayPartKind) { SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName"; SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className"; SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName"; SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName"; SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName"; SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword"; SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak"; SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral"; SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral"; SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName"; SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName"; SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName"; SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator"; SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName"; SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName"; SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation"; SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space"; SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text"; SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName"; SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName"; SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName"; SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral"; })(SymbolDisplayPartKind = ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {})); var OutliningSpanKind; (function (OutliningSpanKind) { OutliningSpanKind["Comment"] = "comment"; OutliningSpanKind["Region"] = "region"; OutliningSpanKind["Code"] = "code"; OutliningSpanKind["Imports"] = "imports"; })(OutliningSpanKind = ts.OutliningSpanKind || (ts.OutliningSpanKind = {})); var OutputFileType; (function (OutputFileType) { OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; })(OutputFileType = ts.OutputFileType || (ts.OutputFileType = {})); var EndOfLineState; (function (EndOfLineState) { EndOfLineState[EndOfLineState["None"] = 0] = "None"; EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; EndOfLineState[EndOfLineState["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; EndOfLineState[EndOfLineState["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; EndOfLineState[EndOfLineState["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; })(EndOfLineState = ts.EndOfLineState || (ts.EndOfLineState = {})); var TokenClass; (function (TokenClass) { TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; TokenClass[TokenClass["Operator"] = 2] = "Operator"; TokenClass[TokenClass["Comment"] = 3] = "Comment"; TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; })(TokenClass = ts.TokenClass || (ts.TokenClass = {})); var ScriptElementKind; (function (ScriptElementKind) { ScriptElementKind["unknown"] = ""; ScriptElementKind["warning"] = "warning"; ScriptElementKind["keyword"] = "keyword"; ScriptElementKind["scriptElement"] = "script"; ScriptElementKind["moduleElement"] = "module"; ScriptElementKind["classElement"] = "class"; ScriptElementKind["localClassElement"] = "local class"; ScriptElementKind["interfaceElement"] = "interface"; ScriptElementKind["typeElement"] = "type"; ScriptElementKind["enumElement"] = "enum"; ScriptElementKind["enumMemberElement"] = "enum member"; ScriptElementKind["variableElement"] = "var"; ScriptElementKind["localVariableElement"] = "local var"; ScriptElementKind["functionElement"] = "function"; ScriptElementKind["localFunctionElement"] = "local function"; ScriptElementKind["memberFunctionElement"] = "method"; ScriptElementKind["memberGetAccessorElement"] = "getter"; ScriptElementKind["memberSetAccessorElement"] = "setter"; ScriptElementKind["memberVariableElement"] = "property"; ScriptElementKind["constructorImplementationElement"] = "constructor"; ScriptElementKind["callSignatureElement"] = "call"; ScriptElementKind["indexSignatureElement"] = "index"; ScriptElementKind["constructSignatureElement"] = "construct"; ScriptElementKind["parameterElement"] = "parameter"; ScriptElementKind["typeParameterElement"] = "type parameter"; ScriptElementKind["primitiveType"] = "primitive type"; ScriptElementKind["label"] = "label"; ScriptElementKind["alias"] = "alias"; ScriptElementKind["constElement"] = "const"; ScriptElementKind["letElement"] = "let"; ScriptElementKind["directory"] = "directory"; ScriptElementKind["externalModuleName"] = "external module name"; ScriptElementKind["jsxAttribute"] = "JSX attribute"; ScriptElementKind["string"] = "string"; })(ScriptElementKind = ts.ScriptElementKind || (ts.ScriptElementKind = {})); var ScriptElementKindModifier; (function (ScriptElementKindModifier) { ScriptElementKindModifier["none"] = ""; ScriptElementKindModifier["publicMemberModifier"] = "public"; ScriptElementKindModifier["privateMemberModifier"] = "private"; ScriptElementKindModifier["protectedMemberModifier"] = "protected"; ScriptElementKindModifier["exportedModifier"] = "export"; ScriptElementKindModifier["ambientModifier"] = "declare"; ScriptElementKindModifier["staticModifier"] = "static"; ScriptElementKindModifier["abstractModifier"] = "abstract"; ScriptElementKindModifier["optionalModifier"] = "optional"; })(ScriptElementKindModifier = ts.ScriptElementKindModifier || (ts.ScriptElementKindModifier = {})); var ClassificationTypeNames; (function (ClassificationTypeNames) { ClassificationTypeNames["comment"] = "comment"; ClassificationTypeNames["identifier"] = "identifier"; ClassificationTypeNames["keyword"] = "keyword"; ClassificationTypeNames["numericLiteral"] = "number"; ClassificationTypeNames["operator"] = "operator"; ClassificationTypeNames["stringLiteral"] = "string"; ClassificationTypeNames["whiteSpace"] = "whitespace"; ClassificationTypeNames["text"] = "text"; ClassificationTypeNames["punctuation"] = "punctuation"; ClassificationTypeNames["className"] = "class name"; ClassificationTypeNames["enumName"] = "enum name"; ClassificationTypeNames["interfaceName"] = "interface name"; ClassificationTypeNames["moduleName"] = "module name"; ClassificationTypeNames["typeParameterName"] = "type parameter name"; ClassificationTypeNames["typeAliasName"] = "type alias name"; ClassificationTypeNames["parameterName"] = "parameter name"; ClassificationTypeNames["docCommentTagName"] = "doc comment tag name"; ClassificationTypeNames["jsxOpenTagName"] = "jsx open tag name"; ClassificationTypeNames["jsxCloseTagName"] = "jsx close tag name"; ClassificationTypeNames["jsxSelfClosingTagName"] = "jsx self closing tag name"; ClassificationTypeNames["jsxAttribute"] = "jsx attribute"; ClassificationTypeNames["jsxText"] = "jsx text"; ClassificationTypeNames["jsxAttributeStringLiteralValue"] = "jsx attribute string literal value"; })(ClassificationTypeNames = ts.ClassificationTypeNames || (ts.ClassificationTypeNames = {})); var ClassificationType; (function (ClassificationType) { ClassificationType[ClassificationType["comment"] = 1] = "comment"; ClassificationType[ClassificationType["identifier"] = 2] = "identifier"; ClassificationType[ClassificationType["keyword"] = 3] = "keyword"; ClassificationType[ClassificationType["numericLiteral"] = 4] = "numericLiteral"; ClassificationType[ClassificationType["operator"] = 5] = "operator"; ClassificationType[ClassificationType["stringLiteral"] = 6] = "stringLiteral"; ClassificationType[ClassificationType["regularExpressionLiteral"] = 7] = "regularExpressionLiteral"; ClassificationType[ClassificationType["whiteSpace"] = 8] = "whiteSpace"; ClassificationType[ClassificationType["text"] = 9] = "text"; ClassificationType[ClassificationType["punctuation"] = 10] = "punctuation"; ClassificationType[ClassificationType["className"] = 11] = "className"; ClassificationType[ClassificationType["enumName"] = 12] = "enumName"; ClassificationType[ClassificationType["interfaceName"] = 13] = "interfaceName"; ClassificationType[ClassificationType["moduleName"] = 14] = "moduleName"; ClassificationType[ClassificationType["typeParameterName"] = 15] = "typeParameterName"; ClassificationType[ClassificationType["typeAliasName"] = 16] = "typeAliasName"; ClassificationType[ClassificationType["parameterName"] = 17] = "parameterName"; ClassificationType[ClassificationType["docCommentTagName"] = 18] = "docCommentTagName"; ClassificationType[ClassificationType["jsxOpenTagName"] = 19] = "jsxOpenTagName"; ClassificationType[ClassificationType["jsxCloseTagName"] = 20] = "jsxCloseTagName"; ClassificationType[ClassificationType["jsxSelfClosingTagName"] = 21] = "jsxSelfClosingTagName"; ClassificationType[ClassificationType["jsxAttribute"] = 22] = "jsxAttribute"; ClassificationType[ClassificationType["jsxText"] = 23] = "jsxText"; ClassificationType[ClassificationType["jsxAttributeStringLiteralValue"] = 24] = "jsxAttributeStringLiteralValue"; })(ClassificationType = ts.ClassificationType || (ts.ClassificationType = {})); })(ts || (ts = {})); var ts; (function (ts) { ts.scanner = ts.createScanner(6, true); var SemanticMeaning; (function (SemanticMeaning) { SemanticMeaning[SemanticMeaning["None"] = 0] = "None"; SemanticMeaning[SemanticMeaning["Value"] = 1] = "Value"; SemanticMeaning[SemanticMeaning["Type"] = 2] = "Type"; SemanticMeaning[SemanticMeaning["Namespace"] = 4] = "Namespace"; SemanticMeaning[SemanticMeaning["All"] = 7] = "All"; })(SemanticMeaning = ts.SemanticMeaning || (ts.SemanticMeaning = {})); function getMeaningFromDeclaration(node) { switch (node.kind) { case 149: case 232: case 182: case 152: case 151: case 270: case 271: case 154: case 153: case 155: case 156: case 157: case 234: case 192: case 193: case 269: case 262: return 1; case 148: case 236: case 237: case 166: return 2; case 298: return node.name === undefined ? 1 | 2 : 2; case 273: case 235: return 1 | 2; case 239: if (ts.isAmbientModule(node)) { return 4 | 1; } else if (ts.getModuleInstanceState(node) === 1) { return 4 | 1; } else { return 4; } case 238: case 247: case 248: case 243: case 244: case 249: case 250: return 7; case 274: return 4 | 1; } return 7; } ts.getMeaningFromDeclaration = getMeaningFromDeclaration; function getMeaningFromLocation(node) { if (node.kind === 274) { return 1; } else if (node.parent.kind === 249) { return 7; } else if (isInRightSideOfInternalImportEqualsDeclaration(node)) { return getMeaningFromRightHandSideOfImportEquals(node); } else if (ts.isDeclarationName(node)) { return getMeaningFromDeclaration(node.parent); } else if (isTypeReference(node)) { return 2; } else if (isNamespaceReference(node)) { return 4; } else if (ts.isTypeParameterDeclaration(node.parent)) { ts.Debug.assert(ts.isJSDocTemplateTag(node.parent.parent)); return 2; } else if (ts.isLiteralTypeNode(node.parent)) { return 2 | 1; } else { return 1; } } ts.getMeaningFromLocation = getMeaningFromLocation; function getMeaningFromRightHandSideOfImportEquals(node) { var name = node.kind === 146 ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined; return name && name.parent.kind === 243 ? 7 : 4; } function isInRightSideOfInternalImportEqualsDeclaration(node) { while (node.parent.kind === 146) { node = node.parent; } return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; } ts.isInRightSideOfInternalImportEqualsDeclaration = isInRightSideOfInternalImportEqualsDeclaration; function isNamespaceReference(node) { return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); } function isQualifiedNameNamespaceReference(node) { var root = node; var isLastClause = true; if (root.parent.kind === 146) { while (root.parent && root.parent.kind === 146) { root = root.parent; } isLastClause = root.right === node; } return root.parent.kind === 162 && !isLastClause; } function isPropertyAccessNamespaceReference(node) { var root = node; var isLastClause = true; if (root.parent.kind === 185) { while (root.parent && root.parent.kind === 185) { root = root.parent; } isLastClause = root.name === node; } if (!isLastClause && root.parent.kind === 207 && root.parent.parent.kind === 268) { var decl = root.parent.parent.parent; return (decl.kind === 235 && root.parent.parent.token === 108) || (decl.kind === 236 && root.parent.parent.token === 85); } return false; } function isTypeReference(node) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { node = node.parent; } switch (node.kind) { case 99: return !ts.isExpressionNode(node); case 174: return true; } switch (node.parent.kind) { case 162: return true; case 179: return !node.parent.isTypeOf; case 207: return !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent); } return false; } function isCallExpressionTarget(node) { return isCallOrNewExpressionTarget(node, 187); } ts.isCallExpressionTarget = isCallExpressionTarget; function isNewExpressionTarget(node) { return isCallOrNewExpressionTarget(node, 188); } ts.isNewExpressionTarget = isNewExpressionTarget; function isCallOrNewExpressionTarget(node, kind) { var target = climbPastPropertyAccess(node); return !!target && !!target.parent && target.parent.kind === kind && target.parent.expression === target; } function climbPastPropertyAccess(node) { return isRightSideOfPropertyAccess(node) ? node.parent : node; } ts.climbPastPropertyAccess = climbPastPropertyAccess; function getTargetLabel(referenceNode, labelName) { while (referenceNode) { if (referenceNode.kind === 228 && referenceNode.label.escapedText === labelName) { return referenceNode.label; } referenceNode = referenceNode.parent; } return undefined; } ts.getTargetLabel = getTargetLabel; function isJumpStatementTarget(node) { return node.kind === 71 && ts.isBreakOrContinueStatement(node.parent) && node.parent.label === node; } ts.isJumpStatementTarget = isJumpStatementTarget; function isLabelOfLabeledStatement(node) { return node.kind === 71 && ts.isLabeledStatement(node.parent) && node.parent.label === node; } ts.isLabelOfLabeledStatement = isLabelOfLabeledStatement; function isLabelName(node) { return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); } ts.isLabelName = isLabelName; function isRightSideOfQualifiedName(node) { return node.parent.kind === 146 && node.parent.right === node; } ts.isRightSideOfQualifiedName = isRightSideOfQualifiedName; function isRightSideOfPropertyAccess(node) { return node && node.parent && node.parent.kind === 185 && node.parent.name === node; } ts.isRightSideOfPropertyAccess = isRightSideOfPropertyAccess; function isNameOfModuleDeclaration(node) { return node.parent.kind === 239 && node.parent.name === node; } ts.isNameOfModuleDeclaration = isNameOfModuleDeclaration; function isNameOfFunctionDeclaration(node) { return node.kind === 71 && ts.isFunctionLike(node.parent) && node.parent.name === node; } ts.isNameOfFunctionDeclaration = isNameOfFunctionDeclaration; function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { switch (node.parent.kind) { case 152: case 151: case 270: case 273: case 154: case 153: case 156: case 157: case 239: return ts.getNameOfDeclaration(node.parent) === node; case 186: return node.parent.argumentExpression === node; case 147: return true; case 178: return node.parent.parent.kind === 176; default: return false; } } ts.isLiteralNameOfPropertyDeclarationOrIndexAccess = isLiteralNameOfPropertyDeclarationOrIndexAccess; function isExpressionOfExternalModuleImportEqualsDeclaration(node) { return ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node; } ts.isExpressionOfExternalModuleImportEqualsDeclaration = isExpressionOfExternalModuleImportEqualsDeclaration; function getContainerNode(node) { if (ts.isJSDocTypeAlias(node)) { node = node.parent.parent; } while (true) { node = node.parent; if (!node) { return undefined; } switch (node.kind) { case 274: case 154: case 153: case 234: case 192: case 156: case 157: case 235: case 236: case 238: case 239: return node; } } } ts.getContainerNode = getContainerNode; function getNodeKind(node) { switch (node.kind) { case 274: return ts.isExternalModule(node) ? "module" : "script"; case 239: return "module"; case 235: case 205: return "class"; case 236: return "interface"; case 237: case 292: case 298: return "type"; case 238: return "enum"; case 232: return getKindOfVariableDeclaration(node); case 182: return getKindOfVariableDeclaration(ts.getRootDeclaration(node)); case 193: case 234: case 192: return "function"; case 156: return "getter"; case 157: return "setter"; case 154: case 153: return "method"; case 152: case 151: return "property"; case 160: return "index"; case 159: return "construct"; case 158: return "call"; case 155: return "constructor"; case 148: return "type parameter"; case 273: return "enum member"; case 149: return ts.hasModifier(node, 92) ? "property" : "parameter"; case 243: case 248: case 245: case 252: case 246: return "alias"; case 200: var kind = ts.getSpecialPropertyAssignmentKind(node); var right = node.right; switch (kind) { case 0: return ""; case 1: case 2: var rightKind = getNodeKind(right); return rightKind === "" ? "const" : rightKind; case 3: return ts.isFunctionExpression(right) ? "method" : "property"; case 4: return "property"; case 5: return ts.isFunctionExpression(right) ? "method" : "property"; case 6: return "local class"; default: { ts.assertTypeIsNever(kind); return ""; } } default: return ""; } function getKindOfVariableDeclaration(v) { return ts.isConst(v) ? "const" : ts.isLet(v) ? "let" : "var"; } } ts.getNodeKind = getNodeKind; function isThis(node) { switch (node.kind) { case 99: return true; case 71: return ts.identifierIsThisKeyword(node) && node.parent.kind === 149; default: return false; } } ts.isThis = isThis; var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*= range.end; } ts.startEndContainsRange = startEndContainsRange; function rangeContainsStartEnd(range, start, end) { return range.pos <= start && range.end >= end; } ts.rangeContainsStartEnd = rangeContainsStartEnd; function rangeOverlapsWithStartEnd(r1, start, end) { return startEndOverlapsWithStartEnd(r1.pos, r1.end, start, end); } ts.rangeOverlapsWithStartEnd = rangeOverlapsWithStartEnd; function startEndOverlapsWithStartEnd(start1, end1, start2, end2) { var start = Math.max(start1, start2); var end = Math.min(end1, end2); return start < end; } ts.startEndOverlapsWithStartEnd = startEndOverlapsWithStartEnd; function positionBelongsToNode(candidate, position, sourceFile) { ts.Debug.assert(candidate.pos <= position); return position < candidate.end || !isCompletedNode(candidate, sourceFile); } ts.positionBelongsToNode = positionBelongsToNode; function isCompletedNode(n, sourceFile) { if (n === undefined || ts.nodeIsMissing(n)) { return false; } switch (n.kind) { case 235: case 236: case 238: case 184: case 180: case 166: case 213: case 240: case 241: case 247: case 251: return nodeEndsWith(n, 18, sourceFile); case 269: return isCompletedNode(n.block, sourceFile); case 188: if (!n.arguments) { return true; } case 187: case 191: case 173: return nodeEndsWith(n, 20, sourceFile); case 163: case 164: return isCompletedNode(n.type, sourceFile); case 155: case 156: case 157: case 234: case 192: case 154: case 153: case 159: case 158: case 193: if (n.body) { return isCompletedNode(n.body, sourceFile); } if (n.type) { return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 20, sourceFile); case 239: return !!n.body && isCompletedNode(n.body, sourceFile); case 217: if (n.elseStatement) { return isCompletedNode(n.elseStatement, sourceFile); } return isCompletedNode(n.thenStatement, sourceFile); case 216: return isCompletedNode(n.expression, sourceFile) || hasChildOfKind(n, 25, sourceFile); case 183: case 181: case 186: case 147: case 168: return nodeEndsWith(n, 22, sourceFile); case 160: if (n.type) { return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 22, sourceFile); case 266: case 267: return false; case 220: case 221: case 222: case 219: return isCompletedNode(n.statement, sourceFile); case 218: return hasChildOfKind(n, 106, sourceFile) ? nodeEndsWith(n, 20, sourceFile) : isCompletedNode(n.statement, sourceFile); case 165: return isCompletedNode(n.exprName, sourceFile); case 195: case 194: case 196: case 203: case 204: var unaryWordExpression = n; return isCompletedNode(unaryWordExpression.expression, sourceFile); case 189: return isCompletedNode(n.template, sourceFile); case 202: var lastSpan = ts.lastOrUndefined(n.templateSpans); return isCompletedNode(lastSpan, sourceFile); case 211: return ts.nodeIsPresent(n.literal); case 250: case 244: return ts.nodeIsPresent(n.moduleSpecifier); case 198: return isCompletedNode(n.operand, sourceFile); case 200: return isCompletedNode(n.right, sourceFile); case 201: return isCompletedNode(n.whenFalse, sourceFile); default: return true; } } function nodeEndsWith(n, expectedLastToken, sourceFile) { var children = n.getChildren(sourceFile); if (children.length) { var lastChild = ts.last(children); if (lastChild.kind === expectedLastToken) { return true; } else if (lastChild.kind === 25 && children.length !== 1) { return children[children.length - 2].kind === expectedLastToken; } } return false; } function findListItemInfo(node) { var list = findContainingList(node); if (!list) { return undefined; } var children = list.getChildren(); var listItemIndex = ts.indexOfNode(children, node); return { listItemIndex: listItemIndex, list: list }; } ts.findListItemInfo = findListItemInfo; function hasChildOfKind(n, kind, sourceFile) { return !!findChildOfKind(n, kind, sourceFile); } ts.hasChildOfKind = hasChildOfKind; function findChildOfKind(n, kind, sourceFile) { return ts.find(n.getChildren(sourceFile), function (c) { return c.kind === kind; }); } ts.findChildOfKind = findChildOfKind; function findContainingList(node) { var syntaxList = ts.find(node.parent.getChildren(), function (c) { return ts.isSyntaxList(c) && rangeContainsRange(c, node); }); ts.Debug.assert(!syntaxList || ts.contains(syntaxList.getChildren(), node)); return syntaxList; } ts.findContainingList = findContainingList; function getTouchingPropertyName(sourceFile, position) { return getTouchingToken(sourceFile, position, true, function (n) { return ts.isPropertyNameLiteral(n) || ts.isKeyword(n.kind); }); } ts.getTouchingPropertyName = getTouchingPropertyName; function getTouchingToken(sourceFile, position, includeJsDocComment, includePrecedingTokenAtEndPosition) { return getTokenAtPositionWorker(sourceFile, position, false, includePrecedingTokenAtEndPosition, false, includeJsDocComment); } ts.getTouchingToken = getTouchingToken; function getTokenAtPosition(sourceFile, position, includeJsDocComment, includeEndPosition) { if (includeEndPosition === void 0) { includeEndPosition = false; } return getTokenAtPositionWorker(sourceFile, position, true, undefined, includeEndPosition, includeJsDocComment); } ts.getTokenAtPosition = getTokenAtPosition; function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includePrecedingTokenAtEndPosition, includeEndPosition, includeJsDocComment) { var current = sourceFile; outer: while (true) { if (ts.isToken(current)) { return current; } for (var _i = 0, _a = current.getChildren(); _i < _a.length; _i++) { var child = _a[_i]; if (!includeJsDocComment && ts.isJSDocNode(child)) { continue; } var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile, includeJsDocComment); if (start > position) { break; } var end = child.getEnd(); if (position < end || (position === end && (child.kind === 1 || includeEndPosition))) { current = child; continue outer; } else if (includePrecedingTokenAtEndPosition && end === position) { var previousToken = findPrecedingToken(position, sourceFile, child); if (previousToken && includePrecedingTokenAtEndPosition(previousToken)) { return previousToken; } } } return current; } } function findTokenOnLeftOfPosition(file, position) { var tokenAtPosition = getTokenAtPosition(file, position, false); if (ts.isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { return tokenAtPosition; } return findPrecedingToken(position, file); } ts.findTokenOnLeftOfPosition = findTokenOnLeftOfPosition; function findNextToken(previousToken, parent, sourceFile) { return find(parent); function find(n) { if (ts.isToken(n) && n.pos === previousToken.end) { return n; } var children = n.getChildren(); for (var _i = 0, children_3 = children; _i < children_3.length; _i++) { var child = children_3[_i]; var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) || (child.pos === previousToken.end); if (shouldDiveInChildNode && nodeHasTokens(child, sourceFile)) { return find(child); } } return undefined; } } ts.findNextToken = findNextToken; function findPrecedingToken(position, sourceFile, startNode, includeJsDoc) { var result = find(startNode || sourceFile); ts.Debug.assert(!(result && isWhiteSpaceOnlyJsxText(result))); return result; function find(n) { if (isNonWhitespaceToken(n)) { return n; } var children = n.getChildren(sourceFile); for (var i = 0; i < children.length; i++) { var child = children[i]; if (position < child.end) { var start = child.getStart(sourceFile, includeJsDoc); var lookInPreviousChild = (start >= position) || !nodeHasTokens(child, sourceFile) || isWhiteSpaceOnlyJsxText(child); if (lookInPreviousChild) { var candidate = findRightmostChildNodeWithTokens(children, i, sourceFile); return candidate && findRightmostToken(candidate, sourceFile); } else { return find(child); } } } ts.Debug.assert(startNode !== undefined || n.kind === 274 || ts.isJSDocCommentContainingNode(n)); if (children.length) { var candidate = findRightmostChildNodeWithTokens(children, children.length, sourceFile); return candidate && findRightmostToken(candidate, sourceFile); } } } ts.findPrecedingToken = findPrecedingToken; function isNonWhitespaceToken(n) { return ts.isToken(n) && !isWhiteSpaceOnlyJsxText(n); } function findRightmostToken(n, sourceFile) { if (isNonWhitespaceToken(n)) { return n; } var children = n.getChildren(sourceFile); var candidate = findRightmostChildNodeWithTokens(children, children.length, sourceFile); return candidate && findRightmostToken(candidate, sourceFile); } function findRightmostChildNodeWithTokens(children, exclusiveStartPosition, sourceFile) { for (var i = exclusiveStartPosition - 1; i >= 0; i--) { var child = children[i]; if (isWhiteSpaceOnlyJsxText(child)) { ts.Debug.assert(i > 0, "`JsxText` tokens should not be the first child of `JsxElement | JsxSelfClosingElement`"); } else if (nodeHasTokens(children[i], sourceFile)) { return children[i]; } } } function isInString(sourceFile, position, previousToken) { if (previousToken === void 0) { previousToken = findPrecedingToken(position, sourceFile); } if (previousToken && ts.isStringTextContainingNode(previousToken)) { var start = previousToken.getStart(sourceFile); var end = previousToken.getEnd(); if (start < position && position < end) { return true; } if (position === end) { return !!previousToken.isUnterminated; } } return false; } ts.isInString = isInString; function isInsideJsxElementOrAttribute(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position, false); if (!token) { return false; } if (token.kind === 10) { return true; } if (token.kind === 27 && token.parent.kind === 10) { return true; } if (token.kind === 27 && token.parent.kind === 265) { return true; } if (token && token.kind === 18 && token.parent.kind === 265) { return true; } if (token.kind === 27 && token.parent.kind === 258) { return true; } return false; } ts.isInsideJsxElementOrAttribute = isInsideJsxElementOrAttribute; function isWhiteSpaceOnlyJsxText(node) { return ts.isJsxText(node) && node.containsOnlyWhiteSpaces; } function isInTemplateString(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position, false); return ts.isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); } ts.isInTemplateString = isInTemplateString; function findPrecedingMatchingToken(token, matchingTokenKind, sourceFile) { var tokenKind = token.kind; var remainingMatchingTokens = 0; while (true) { var preceding = findPrecedingToken(token.getFullStart(), sourceFile); if (!preceding) { return undefined; } token = preceding; if (token.kind === matchingTokenKind) { if (remainingMatchingTokens === 0) { return token; } remainingMatchingTokens--; } else if (token.kind === tokenKind) { remainingMatchingTokens++; } } } ts.findPrecedingMatchingToken = findPrecedingMatchingToken; function isPossiblyTypeArgumentPosition(tokenIn, sourceFile) { var token = tokenIn; var remainingLessThanTokens = 0; var nTypeArguments = 0; while (token) { switch (token.kind) { case 27: token = findPrecedingToken(token.getFullStart(), sourceFile); if (!token || !ts.isIdentifier(token)) return undefined; if (!remainingLessThanTokens) { return { called: token, nTypeArguments: nTypeArguments }; } remainingLessThanTokens--; break; case 47: remainingLessThanTokens = +3; break; case 46: remainingLessThanTokens = +2; break; case 29: remainingLessThanTokens++; break; case 18: token = findPrecedingMatchingToken(token, 17, sourceFile); if (!token) return undefined; break; case 20: token = findPrecedingMatchingToken(token, 19, sourceFile); if (!token) return undefined; break; case 22: token = findPrecedingMatchingToken(token, 21, sourceFile); if (!token) return undefined; break; case 26: nTypeArguments++; break; case 36: case 71: case 9: case 8: case 101: case 86: case 103: case 85: case 128: case 23: case 49: case 55: case 56: break; default: if (ts.isTypeNode(token)) { break; } return undefined; } token = findPrecedingToken(token.getFullStart(), sourceFile); } return undefined; } ts.isPossiblyTypeArgumentPosition = isPossiblyTypeArgumentPosition; function isInComment(sourceFile, position, tokenAtPosition, predicate) { return !!ts.formatting.getRangeOfEnclosingComment(sourceFile, position, false, undefined, tokenAtPosition, predicate); } ts.isInComment = isInComment; function hasDocComment(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position, false); var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); return ts.forEach(commentRanges, jsDocPrefix); function jsDocPrefix(c) { var text = sourceFile.text; return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; } } ts.hasDocComment = hasDocComment; function nodeHasTokens(n, sourceFile) { return n.getWidth(sourceFile) !== 0; } function getNodeModifiers(node) { var flags = ts.getCombinedModifierFlags(node); var result = []; if (flags & 8) result.push("private"); if (flags & 16) result.push("protected"); if (flags & 4) result.push("public"); if (flags & 32) result.push("static"); if (flags & 128) result.push("abstract"); if (flags & 1) result.push("export"); if (node.flags & 4194304) result.push("declare"); return result.length > 0 ? result.join(",") : ""; } ts.getNodeModifiers = getNodeModifiers; function getTypeArgumentOrTypeParameterList(node) { if (node.kind === 162 || node.kind === 187) { return node.typeArguments; } if (ts.isFunctionLike(node) || node.kind === 235 || node.kind === 236) { return node.typeParameters; } return undefined; } ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; function isComment(kind) { return kind === 2 || kind === 3; } ts.isComment = isComment; function isStringOrRegularExpressionOrTemplateLiteral(kind) { if (kind === 9 || kind === 12 || ts.isTemplateLiteralKind(kind)) { return true; } return false; } ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral; function isPunctuation(kind) { return 17 <= kind && kind <= 70; } ts.isPunctuation = isPunctuation; function isInsideTemplateLiteral(node, position, sourceFile) { return ts.isTemplateLiteralKind(node.kind) && (node.getStart(sourceFile) < position && position < node.end) || (!!node.isUnterminated && position === node.end); } ts.isInsideTemplateLiteral = isInsideTemplateLiteral; function isAccessibilityModifier(kind) { switch (kind) { case 114: case 112: case 113: return true; } return false; } ts.isAccessibilityModifier = isAccessibilityModifier; function cloneCompilerOptions(options) { var result = ts.clone(options); ts.setConfigFileInOptions(result, options && options.configFile); return result; } ts.cloneCompilerOptions = cloneCompilerOptions; function isArrayLiteralOrObjectLiteralDestructuringPattern(node) { if (node.kind === 183 || node.kind === 184) { if (node.parent.kind === 200 && node.parent.left === node && node.parent.operatorToken.kind === 58) { return true; } if (node.parent.kind === 222 && node.parent.initializer === node) { return true; } if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 270 ? node.parent.parent : node.parent)) { return true; } } return false; } ts.isArrayLiteralOrObjectLiteralDestructuringPattern = isArrayLiteralOrObjectLiteralDestructuringPattern; function isInReferenceComment(sourceFile, position) { return isInComment(sourceFile, position, undefined, function (c) { var commentText = sourceFile.text.substring(c.pos, c.end); return tripleSlashDirectivePrefixRegex.test(commentText); }); } ts.isInReferenceComment = isInReferenceComment; function isInNonReferenceComment(sourceFile, position) { return isInComment(sourceFile, position, undefined, function (c) { var commentText = sourceFile.text.substring(c.pos, c.end); return !tripleSlashDirectivePrefixRegex.test(commentText); }); } ts.isInNonReferenceComment = isInNonReferenceComment; function createTextSpanFromNode(node, sourceFile) { return ts.createTextSpanFromBounds(node.getStart(sourceFile), node.getEnd()); } ts.createTextSpanFromNode = createTextSpanFromNode; function createTextSpanFromRange(range) { return ts.createTextSpanFromBounds(range.pos, range.end); } ts.createTextSpanFromRange = createTextSpanFromRange; function createTextRangeFromSpan(span) { return ts.createTextRange(span.start, span.start + span.length); } ts.createTextRangeFromSpan = createTextRangeFromSpan; function createTextChangeFromStartLength(start, length, newText) { return createTextChange(ts.createTextSpan(start, length), newText); } ts.createTextChangeFromStartLength = createTextChangeFromStartLength; function createTextChange(span, newText) { return { span: span, newText: newText }; } ts.createTextChange = createTextChange; ts.typeKeywords = [ 119, 122, 128, 131, 95, 134, 135, 137, 138, 105, 140, 141, 142, ]; function isTypeKeyword(kind) { return ts.contains(ts.typeKeywords, kind); } ts.isTypeKeyword = isTypeKeyword; function isExternalModuleSymbol(moduleSymbol) { ts.Debug.assert(!!(moduleSymbol.flags & 1536)); return moduleSymbol.name.charCodeAt(0) === 34; } ts.isExternalModuleSymbol = isExternalModuleSymbol; function nodeSeenTracker() { var seen = []; return function (node) { var id = ts.getNodeId(node); return !seen[id] && (seen[id] = true); }; } ts.nodeSeenTracker = nodeSeenTracker; function getSnapshotText(snap) { return snap.getText(0, snap.getLength()); } ts.getSnapshotText = getSnapshotText; function repeatString(str, count) { var result = ""; for (var i = 0; i < count; i++) { result += str; } return result; } ts.repeatString = repeatString; function skipConstraint(type) { return type.isTypeParameter() ? type.getConstraint() : type; } ts.skipConstraint = skipConstraint; function getNameFromPropertyName(name) { return name.kind === 147 ? ts.isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined : ts.getTextOfIdentifierOrLiteral(name); } ts.getNameFromPropertyName = getNameFromPropertyName; function programContainsEs6Modules(program) { return program.getSourceFiles().some(function (s) { return !s.isDeclarationFile && !program.isSourceFileFromExternalLibrary(s) && !!s.externalModuleIndicator; }); } ts.programContainsEs6Modules = programContainsEs6Modules; function compilerOptionsIndicateEs6Modules(compilerOptions) { return !!compilerOptions.module || compilerOptions.target >= 2 || !!compilerOptions.noEmit; } ts.compilerOptionsIndicateEs6Modules = compilerOptionsIndicateEs6Modules; function hostUsesCaseSensitiveFileNames(host) { return host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : false; } ts.hostUsesCaseSensitiveFileNames = hostUsesCaseSensitiveFileNames; function hostGetCanonicalFileName(host) { return ts.createGetCanonicalFileName(hostUsesCaseSensitiveFileNames(host)); } ts.hostGetCanonicalFileName = hostGetCanonicalFileName; function makeImportIfNecessary(defaultImport, namedImports, moduleSpecifier, quotePreference) { return defaultImport || namedImports && namedImports.length ? makeImport(defaultImport, namedImports, moduleSpecifier, quotePreference) : undefined; } ts.makeImportIfNecessary = makeImportIfNecessary; function makeImport(defaultImport, namedImports, moduleSpecifier, quotePreference) { return ts.createImportDeclaration(undefined, undefined, defaultImport || namedImports ? ts.createImportClause(defaultImport, namedImports && namedImports.length ? ts.createNamedImports(namedImports) : undefined) : undefined, typeof moduleSpecifier === "string" ? makeStringLiteral(moduleSpecifier, quotePreference) : moduleSpecifier); } ts.makeImport = makeImport; function makeStringLiteral(text, quotePreference) { return ts.createLiteral(text, quotePreference === 0); } ts.makeStringLiteral = makeStringLiteral; var QuotePreference; (function (QuotePreference) { QuotePreference[QuotePreference["Single"] = 0] = "Single"; QuotePreference[QuotePreference["Double"] = 1] = "Double"; })(QuotePreference = ts.QuotePreference || (ts.QuotePreference = {})); function getQuotePreference(sourceFile, preferences) { if (preferences.quotePreference) { return preferences.quotePreference === "single" ? 0 : 1; } else { var firstModuleSpecifier = ts.firstOrUndefined(sourceFile.imports); return !!firstModuleSpecifier && !ts.isStringDoubleQuoted(firstModuleSpecifier, sourceFile) ? 0 : 1; } } ts.getQuotePreference = getQuotePreference; function symbolNameNoDefault(symbol) { var escaped = symbolEscapedNameNoDefault(symbol); return escaped === undefined ? undefined : ts.unescapeLeadingUnderscores(escaped); } ts.symbolNameNoDefault = symbolNameNoDefault; function symbolEscapedNameNoDefault(symbol) { if (symbol.escapedName !== "default") { return symbol.escapedName; } return ts.firstDefined(symbol.declarations, function (decl) { var name = ts.getNameOfDeclaration(decl); return name && name.kind === 71 ? name.escapedText : undefined; }); } ts.symbolEscapedNameNoDefault = symbolEscapedNameNoDefault; function getPropertySymbolFromBindingElement(checker, bindingElement) { var typeOfPattern = checker.getTypeAtLocation(bindingElement.parent); var propSymbol = typeOfPattern && checker.getPropertyOfType(typeOfPattern, bindingElement.name.text); if (propSymbol && propSymbol.flags & 98304) { ts.Debug.assert(!!(propSymbol.flags & 33554432)); return propSymbol.target; } return propSymbol; } ts.getPropertySymbolFromBindingElement = getPropertySymbolFromBindingElement; function getPropertySymbolsFromBaseTypes(symbol, propertyName, checker, cb) { var seen = ts.createMap(); return recur(symbol); function recur(symbol) { if (!(symbol.flags & (32 | 64)) || !ts.addToSeen(seen, ts.getSymbolId(symbol))) return; return ts.firstDefined(symbol.declarations, function (declaration) { return ts.firstDefined(ts.getAllSuperTypeNodes(declaration), function (typeReference) { var type = checker.getTypeAtLocation(typeReference); var propertySymbol = type && type.symbol && checker.getPropertyOfType(type, propertyName); return type && propertySymbol && (ts.firstDefined(checker.getRootSymbols(propertySymbol), cb) || recur(type.symbol)); }); }); } } ts.getPropertySymbolsFromBaseTypes = getPropertySymbolsFromBaseTypes; function isMemberSymbolInBaseType(memberSymbol, checker) { return getPropertySymbolsFromBaseTypes(memberSymbol.parent, memberSymbol.name, checker, function (_) { return true; }) || false; } ts.isMemberSymbolInBaseType = isMemberSymbolInBaseType; var NodeSet = (function () { function NodeSet() { this.map = ts.createMap(); } NodeSet.prototype.add = function (node) { this.map.set(String(ts.getNodeId(node)), node); }; NodeSet.prototype.has = function (node) { return this.map.has(String(ts.getNodeId(node))); }; NodeSet.prototype.forEach = function (cb) { this.map.forEach(cb); }; NodeSet.prototype.some = function (pred) { return ts.forEachEntry(this.map, pred) || false; }; return NodeSet; }()); ts.NodeSet = NodeSet; function getParentNodeInSpan(node, file, span) { if (!node) return undefined; while (node.parent) { if (ts.isSourceFile(node.parent) || !spanContainsNode(span, node.parent, file)) { return node; } node = node.parent; } } ts.getParentNodeInSpan = getParentNodeInSpan; function spanContainsNode(span, node, file) { return ts.textSpanContainsPosition(span, node.getStart(file)) && node.getEnd() <= ts.textSpanEnd(span); } function insertImport(changes, sourceFile, importDecl) { var lastImportDeclaration = ts.findLast(sourceFile.statements, ts.isAnyImportSyntax); if (lastImportDeclaration) { changes.insertNodeAfter(sourceFile, lastImportDeclaration, importDecl); } else { changes.insertNodeAtTopOfFile(sourceFile, importDecl, true); } } ts.insertImport = insertImport; })(ts || (ts = {})); (function (ts) { function isFirstDeclarationOfSymbolParameter(symbol) { return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 149; } ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; var displayPartWriter = getDisplayPartWriter(); function getDisplayPartWriter() { var displayParts; var lineStart; var indent; resetWriter(); var unknownWrite = function (text) { return writeKind(text, ts.SymbolDisplayPartKind.text); }; return { displayParts: function () { return displayParts; }, writeKeyword: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.keyword); }, writeOperator: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.operator); }, writePunctuation: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.punctuation); }, writeSpace: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.space); }, writeStringLiteral: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.stringLiteral); }, writeParameter: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.parameterName); }, writeProperty: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.propertyName); }, writeLiteral: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.stringLiteral); }, writeSymbol: writeSymbol, writeLine: writeLine, write: unknownWrite, writeTextOfNode: unknownWrite, getText: function () { return ""; }, getTextPos: function () { return 0; }, getColumn: function () { return 0; }, getLine: function () { return 0; }, isAtStartOfLine: function () { return false; }, rawWrite: ts.notImplemented, getIndent: function () { return indent; }, increaseIndent: function () { indent++; }, decreaseIndent: function () { indent--; }, clear: resetWriter, trackSymbol: ts.noop, reportInaccessibleThisError: ts.noop, reportInaccessibleUniqueSymbolError: ts.noop, reportPrivateInBaseOfClassExpression: ts.noop, }; function writeIndent() { if (lineStart) { var indentString = ts.getIndentString(indent); if (indentString) { displayParts.push(displayPart(indentString, ts.SymbolDisplayPartKind.space)); } lineStart = false; } } function writeKind(text, kind) { writeIndent(); displayParts.push(displayPart(text, kind)); } function writeSymbol(text, symbol) { writeIndent(); displayParts.push(symbolPart(text, symbol)); } function writeLine() { displayParts.push(lineBreakPart()); lineStart = true; } function resetWriter() { displayParts = []; lineStart = true; indent = 0; } } function symbolPart(text, symbol) { return displayPart(text, displayPartKind(symbol)); function displayPartKind(symbol) { var flags = symbol.flags; if (flags & 3) { return isFirstDeclarationOfSymbolParameter(symbol) ? ts.SymbolDisplayPartKind.parameterName : ts.SymbolDisplayPartKind.localName; } else if (flags & 4) { return ts.SymbolDisplayPartKind.propertyName; } else if (flags & 32768) { return ts.SymbolDisplayPartKind.propertyName; } else if (flags & 65536) { return ts.SymbolDisplayPartKind.propertyName; } else if (flags & 8) { return ts.SymbolDisplayPartKind.enumMemberName; } else if (flags & 16) { return ts.SymbolDisplayPartKind.functionName; } else if (flags & 32) { return ts.SymbolDisplayPartKind.className; } else if (flags & 64) { return ts.SymbolDisplayPartKind.interfaceName; } else if (flags & 384) { return ts.SymbolDisplayPartKind.enumName; } else if (flags & 1536) { return ts.SymbolDisplayPartKind.moduleName; } else if (flags & 8192) { return ts.SymbolDisplayPartKind.methodName; } else if (flags & 262144) { return ts.SymbolDisplayPartKind.typeParameterName; } else if (flags & 524288) { return ts.SymbolDisplayPartKind.aliasName; } else if (flags & 2097152) { return ts.SymbolDisplayPartKind.aliasName; } return ts.SymbolDisplayPartKind.text; } } ts.symbolPart = symbolPart; function displayPart(text, kind) { return { text: text, kind: ts.SymbolDisplayPartKind[kind] }; } ts.displayPart = displayPart; function spacePart() { return displayPart(" ", ts.SymbolDisplayPartKind.space); } ts.spacePart = spacePart; function keywordPart(kind) { return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.keyword); } ts.keywordPart = keywordPart; function punctuationPart(kind) { return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.punctuation); } ts.punctuationPart = punctuationPart; function operatorPart(kind) { return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.operator); } ts.operatorPart = operatorPart; function textOrKeywordPart(text) { var kind = ts.stringToToken(text); return kind === undefined ? textPart(text) : keywordPart(kind); } ts.textOrKeywordPart = textOrKeywordPart; function textPart(text) { return displayPart(text, ts.SymbolDisplayPartKind.text); } ts.textPart = textPart; var carriageReturnLineFeed = "\r\n"; function getNewLineOrDefaultFromHost(host, formatSettings) { return (formatSettings && formatSettings.newLineCharacter) || (host.getNewLine && host.getNewLine()) || carriageReturnLineFeed; } ts.getNewLineOrDefaultFromHost = getNewLineOrDefaultFromHost; function lineBreakPart() { return displayPart("\n", ts.SymbolDisplayPartKind.lineBreak); } ts.lineBreakPart = lineBreakPart; function mapToDisplayParts(writeDisplayParts) { try { writeDisplayParts(displayPartWriter); return displayPartWriter.displayParts(); } finally { displayPartWriter.clear(); } } ts.mapToDisplayParts = mapToDisplayParts; function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags) { if (flags === void 0) { flags = 0; } return mapToDisplayParts(function (writer) { typechecker.writeType(type, enclosingDeclaration, flags | 1024 | 16384, writer); }); } ts.typeToDisplayParts = typeToDisplayParts; function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags) { if (flags === void 0) { flags = 0; } return mapToDisplayParts(function (writer) { typeChecker.writeSymbol(symbol, enclosingDeclaration, meaning, flags | 8, writer); }); } ts.symbolToDisplayParts = symbolToDisplayParts; function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags) { if (flags === void 0) { flags = 0; } flags |= 16384 | 1024 | 32 | 8192; return mapToDisplayParts(function (writer) { typechecker.writeSignature(signature, enclosingDeclaration, flags, undefined, writer); }); } ts.signatureToDisplayParts = signatureToDisplayParts; function isImportOrExportSpecifierName(location) { return !!location.parent && (location.parent.kind === 248 || location.parent.kind === 252) && location.parent.propertyName === location; } ts.isImportOrExportSpecifierName = isImportOrExportSpecifierName; function stripQuotes(name) { var length = name.length; if (length >= 2 && name.charCodeAt(0) === name.charCodeAt(length - 1) && startsWithQuote(name)) { return name.substring(1, length - 1); } return name; } ts.stripQuotes = stripQuotes; function startsWithQuote(name) { return ts.isSingleOrDoubleQuote(name.charCodeAt(0)); } ts.startsWithQuote = startsWithQuote; function scriptKindIs(fileName, host) { var scriptKinds = []; for (var _i = 2; _i < arguments.length; _i++) { scriptKinds[_i - 2] = arguments[_i]; } var scriptKind = getScriptKind(fileName, host); return ts.some(scriptKinds, function (k) { return k === scriptKind; }); } ts.scriptKindIs = scriptKindIs; function getScriptKind(fileName, host) { return ts.ensureScriptKind(fileName, host && host.getScriptKind && host.getScriptKind(fileName)); } ts.getScriptKind = getScriptKind; function getUniqueSymbolId(symbol, checker) { return ts.getSymbolId(ts.skipAlias(symbol, checker)); } ts.getUniqueSymbolId = getUniqueSymbolId; function getFirstNonSpaceCharacterPosition(text, position) { while (ts.isWhiteSpaceLike(text.charCodeAt(position))) { position += 1; } return position; } ts.getFirstNonSpaceCharacterPosition = getFirstNonSpaceCharacterPosition; function getSynthesizedDeepClone(node, includeTrivia) { if (includeTrivia === void 0) { includeTrivia = true; } var clone = node && getSynthesizedDeepCloneWorker(node); if (clone && !includeTrivia) suppressLeadingAndTrailingTrivia(clone); return clone; } ts.getSynthesizedDeepClone = getSynthesizedDeepClone; function getSynthesizedDeepCloneWorker(node) { var visited = ts.visitEachChild(node, getSynthesizedDeepClone, ts.nullTransformationContext); if (visited === node) { var clone_7 = ts.getSynthesizedClone(node); if (ts.isStringLiteral(clone_7)) { clone_7.textSourceNode = node; } else if (ts.isNumericLiteral(clone_7)) { clone_7.numericLiteralFlags = node.numericLiteralFlags; } return ts.setTextRange(clone_7, node); } visited.parent = undefined; return visited; } function getSynthesizedDeepClones(nodes, includeTrivia) { if (includeTrivia === void 0) { includeTrivia = true; } return nodes && ts.createNodeArray(nodes.map(function (n) { return getSynthesizedDeepClone(n, includeTrivia); }), nodes.hasTrailingComma); } ts.getSynthesizedDeepClones = getSynthesizedDeepClones; function suppressLeadingAndTrailingTrivia(node) { suppressLeadingTrivia(node); suppressTrailingTrivia(node); } ts.suppressLeadingAndTrailingTrivia = suppressLeadingAndTrailingTrivia; function suppressLeadingTrivia(node) { addEmitFlagsRecursively(node, 512, getFirstChild); } ts.suppressLeadingTrivia = suppressLeadingTrivia; function suppressTrailingTrivia(node) { addEmitFlagsRecursively(node, 1024, ts.getLastChild); } ts.suppressTrailingTrivia = suppressTrailingTrivia; function addEmitFlagsRecursively(node, flag, getChild) { ts.addEmitFlags(node, flag); var child = getChild(node); if (child) addEmitFlagsRecursively(child, flag, getChild); } function getFirstChild(node) { return node.forEachChild(function (child) { return child; }); } function getUniqueName(baseName, sourceFile) { var nameText = baseName; for (var i = 1; !ts.isFileLevelUniqueName(sourceFile, nameText); i++) { nameText = baseName + "_" + i; } return nameText; } ts.getUniqueName = getUniqueName; function getRenameLocation(edits, renameFilename, name, preferLastLocation) { var delta = 0; var lastPos = -1; for (var _i = 0, edits_1 = edits; _i < edits_1.length; _i++) { var _a = edits_1[_i], fileName = _a.fileName, textChanges_2 = _a.textChanges; ts.Debug.assert(fileName === renameFilename); for (var _b = 0, textChanges_1 = textChanges_2; _b < textChanges_1.length; _b++) { var change = textChanges_1[_b]; var span = change.span, newText = change.newText; var index = indexInTextChange(newText, name); if (index !== -1) { lastPos = span.start + delta + index; if (!preferLastLocation) { return lastPos; } } delta += newText.length - span.length; } } ts.Debug.assert(preferLastLocation); ts.Debug.assert(lastPos >= 0); return lastPos; } ts.getRenameLocation = getRenameLocation; function copyComments(sourceNode, targetNode, sourceFile, commentKind, hasTrailingNewLine) { ts.forEachLeadingCommentRange(sourceFile.text, sourceNode.pos, function (pos, end, kind, htnl) { if (kind === 3) { pos += 2; end -= 2; } else { pos += 2; } ts.addSyntheticLeadingComment(targetNode, commentKind || kind, sourceFile.text.slice(pos, end), hasTrailingNewLine !== undefined ? hasTrailingNewLine : htnl); }); } ts.copyComments = copyComments; function indexInTextChange(change, name) { if (ts.startsWith(change, name)) return 0; var idx = change.indexOf(" " + name); if (idx === -1) idx = change.indexOf("." + name); if (idx === -1) idx = change.indexOf('"' + name); return idx === -1 ? -1 : idx + 1; } })(ts || (ts = {})); var ts; (function (ts) { function createClassifier() { var scanner = ts.createScanner(6, false); function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) { return convertClassificationsToResult(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text); } function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) { var token = 0; var lastNonTriviaToken = 0; var templateStack = []; var _a = getPrefixFromLexState(lexState), prefix = _a.prefix, pushTemplate = _a.pushTemplate; text = prefix + text; var offset = prefix.length; if (pushTemplate) { templateStack.push(14); } scanner.setText(text); var endOfLineState = 0; var spans = []; var angleBracketStack = 0; do { token = scanner.scan(); if (!ts.isTrivia(token)) { handleToken(); lastNonTriviaToken = token; } var end = scanner.getTextPos(); pushEncodedClassification(scanner.getTokenPos(), end, offset, classFromKind(token), spans); if (end >= text.length) { var end_1 = getNewEndOfLineState(scanner, token, ts.lastOrUndefined(templateStack)); if (end_1 !== undefined) { endOfLineState = end_1; } } } while (token !== 1); function handleToken() { switch (token) { case 41: case 63: if (!noRegexTable[lastNonTriviaToken] && scanner.reScanSlashToken() === 12) { token = 12; } break; case 27: if (lastNonTriviaToken === 71) { angleBracketStack++; } break; case 29: if (angleBracketStack > 0) { angleBracketStack--; } break; case 119: case 137: case 134: case 122: case 138: if (angleBracketStack > 0 && !syntacticClassifierAbsent) { token = 71; } break; case 14: templateStack.push(token); break; case 17: if (templateStack.length > 0) { templateStack.push(token); } break; case 18: if (templateStack.length > 0) { var lastTemplateStackToken = ts.lastOrUndefined(templateStack); if (lastTemplateStackToken === 14) { token = scanner.reScanTemplateToken(); if (token === 16) { templateStack.pop(); } else { ts.Debug.assertEqual(token, 15, "Should have been a template middle."); } } else { ts.Debug.assertEqual(lastTemplateStackToken, 17, "Should have been an open brace"); templateStack.pop(); } } break; default: if (!ts.isKeyword(token)) { break; } if (lastNonTriviaToken === 23) { token = 71; } else if (ts.isKeyword(lastNonTriviaToken) && ts.isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { token = 71; } } } return { endOfLineState: endOfLineState, spans: spans }; } return { getClassificationsForLine: getClassificationsForLine, getEncodedLexicalClassifications: getEncodedLexicalClassifications }; } ts.createClassifier = createClassifier; var noRegexTable = ts.arrayToNumericMap([ 71, 9, 8, 12, 99, 43, 44, 20, 22, 18, 101, 86, ], function (token) { return token; }, function () { return true; }); function getNewEndOfLineState(scanner, token, lastOnTemplateStack) { switch (token) { case 9: { if (!scanner.isUnterminated()) return undefined; var tokenText = scanner.getTokenText(); var lastCharIndex = tokenText.length - 1; var numBackslashes = 0; while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92) { numBackslashes++; } if ((numBackslashes & 1) === 0) return undefined; return tokenText.charCodeAt(0) === 34 ? 3 : 2; } case 3: return scanner.isUnterminated() ? 1 : undefined; default: if (ts.isTemplateLiteralKind(token)) { if (!scanner.isUnterminated()) { return undefined; } switch (token) { case 16: return 5; case 13: return 4; default: return ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token); } } return lastOnTemplateStack === 14 ? 6 : undefined; } } function pushEncodedClassification(start, end, offset, classification, result) { if (classification === 8) { return; } if (start === 0 && offset > 0) { start += offset; } var length = end - start; if (length > 0) { result.push(start - offset, length, classification); } } function convertClassificationsToResult(classifications, text) { var entries = []; var dense = classifications.spans; var lastEnd = 0; for (var i = 0; i < dense.length; i += 3) { var start = dense[i]; var length_5 = dense[i + 1]; var type = dense[i + 2]; if (lastEnd >= 0) { var whitespaceLength_1 = start - lastEnd; if (whitespaceLength_1 > 0) { entries.push({ length: whitespaceLength_1, classification: ts.TokenClass.Whitespace }); } } entries.push({ length: length_5, classification: convertClassification(type) }); lastEnd = start + length_5; } var whitespaceLength = text.length - lastEnd; if (whitespaceLength > 0) { entries.push({ length: whitespaceLength, classification: ts.TokenClass.Whitespace }); } return { entries: entries, finalLexState: classifications.endOfLineState }; } function convertClassification(type) { switch (type) { case 1: return ts.TokenClass.Comment; case 3: return ts.TokenClass.Keyword; case 4: return ts.TokenClass.NumberLiteral; case 5: return ts.TokenClass.Operator; case 6: return ts.TokenClass.StringLiteral; case 8: return ts.TokenClass.Whitespace; case 10: return ts.TokenClass.Punctuation; case 2: case 11: case 12: case 13: case 14: case 15: case 16: case 9: case 17: return ts.TokenClass.Identifier; default: return undefined; } } function canFollow(keyword1, keyword2) { if (!ts.isAccessibilityModifier(keyword1)) { return true; } switch (keyword2) { case 125: case 136: case 123: case 115: return true; default: return false; } } function getPrefixFromLexState(lexState) { switch (lexState) { case 3: return { prefix: "\"\\\n" }; case 2: return { prefix: "'\\\n" }; case 1: return { prefix: "/*\n" }; case 4: return { prefix: "`\n" }; case 5: return { prefix: "}\n", pushTemplate: true }; case 6: return { prefix: "", pushTemplate: true }; case 0: return { prefix: "" }; default: return ts.Debug.assertNever(lexState); } } function isBinaryExpressionOperatorToken(token) { switch (token) { case 39: case 41: case 42: case 37: case 38: case 45: case 46: case 47: case 27: case 29: case 30: case 31: case 93: case 92: case 118: case 32: case 33: case 34: case 35: case 48: case 50: case 49: case 53: case 54: case 69: case 68: case 70: case 65: case 66: case 67: case 59: case 60: case 61: case 63: case 64: case 58: case 26: return true; default: return false; } } function isPrefixUnaryExpressionOperatorToken(token) { switch (token) { case 37: case 38: case 52: case 51: case 43: case 44: return true; default: return false; } } function classFromKind(token) { if (ts.isKeyword(token)) { return 3; } else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { return 5; } else if (token >= 17 && token <= 70) { return 10; } switch (token) { case 8: return 4; case 9: return 6; case 12: return 7; case 7: case 3: case 2: return 1; case 5: case 4: return 8; case 71: default: if (ts.isTemplateLiteralKind(token)) { return 6; } return 2; } } function getSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span) { return convertClassificationsToSpans(getEncodedSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span)); } ts.getSemanticClassifications = getSemanticClassifications; function checkForClassificationCancellation(cancellationToken, kind) { switch (kind) { case 239: case 235: case 236: case 234: cancellationToken.throwIfCancellationRequested(); } } function getEncodedSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span) { var spans = []; sourceFile.forEachChild(function cb(node) { if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) { return; } checkForClassificationCancellation(cancellationToken, node.kind); if (ts.isIdentifier(node) && !ts.nodeIsMissing(node) && classifiableNames.has(node.escapedText)) { var symbol = typeChecker.getSymbolAtLocation(node); var type = symbol && classifySymbol(symbol, ts.getMeaningFromLocation(node), typeChecker); if (type) { pushClassification(node.getStart(sourceFile), node.getEnd(), type); } } node.forEachChild(cb); }); return { spans: spans, endOfLineState: 0 }; function pushClassification(start, end, type) { spans.push(start); spans.push(end - start); spans.push(type); } } ts.getEncodedSemanticClassifications = getEncodedSemanticClassifications; function classifySymbol(symbol, meaningAtPosition, checker) { var flags = symbol.getFlags(); if ((flags & 2885600) === 0) { return undefined; } else if (flags & 32) { return 11; } else if (flags & 384) { return 12; } else if (flags & 524288) { return 16; } else if (flags & 1536) { return meaningAtPosition & 4 || meaningAtPosition & 1 && hasValueSideModule(symbol) ? 14 : undefined; } else if (flags & 2097152) { return classifySymbol(checker.getAliasedSymbol(symbol), meaningAtPosition, checker); } else if (meaningAtPosition & 2) { return flags & 64 ? 13 : flags & 262144 ? 15 : undefined; } else { return undefined; } } function hasValueSideModule(symbol) { return ts.some(symbol.declarations, function (declaration) { return ts.isModuleDeclaration(declaration) && ts.getModuleInstanceState(declaration) === 1; }); } function getClassificationTypeName(type) { switch (type) { case 1: return "comment"; case 2: return "identifier"; case 3: return "keyword"; case 4: return "number"; case 5: return "operator"; case 6: return "string"; case 8: return "whitespace"; case 9: return "text"; case 10: return "punctuation"; case 11: return "class name"; case 12: return "enum name"; case 13: return "interface name"; case 14: return "module name"; case 15: return "type parameter name"; case 16: return "type alias name"; case 17: return "parameter name"; case 18: return "doc comment tag name"; case 19: return "jsx open tag name"; case 20: return "jsx close tag name"; case 21: return "jsx self closing tag name"; case 22: return "jsx attribute"; case 23: return "jsx text"; case 24: return "jsx attribute string literal value"; default: return undefined; } } function convertClassificationsToSpans(classifications) { ts.Debug.assert(classifications.spans.length % 3 === 0); var dense = classifications.spans; var result = []; for (var i = 0; i < dense.length; i += 3) { result.push({ textSpan: ts.createTextSpan(dense[i], dense[i + 1]), classificationType: getClassificationTypeName(dense[i + 2]) }); } return result; } function getSyntacticClassifications(cancellationToken, sourceFile, span) { return convertClassificationsToSpans(getEncodedSyntacticClassifications(cancellationToken, sourceFile, span)); } ts.getSyntacticClassifications = getSyntacticClassifications; function getEncodedSyntacticClassifications(cancellationToken, sourceFile, span) { var spanStart = span.start; var spanLength = span.length; var triviaScanner = ts.createScanner(6, false, sourceFile.languageVariant, sourceFile.text); var mergeConflictScanner = ts.createScanner(6, false, sourceFile.languageVariant, sourceFile.text); var result = []; processElement(sourceFile); return { spans: result, endOfLineState: 0 }; function pushClassification(start, length, type) { result.push(start); result.push(length); result.push(type); } function classifyLeadingTriviaAndGetTokenStart(token) { triviaScanner.setTextPos(token.pos); while (true) { var start = triviaScanner.getTextPos(); if (!ts.couldStartTrivia(sourceFile.text, start)) { return start; } var kind = triviaScanner.scan(); var end = triviaScanner.getTextPos(); var width = end - start; if (!ts.isTrivia(kind)) { return start; } switch (kind) { case 4: case 5: continue; case 2: case 3: classifyComment(token, kind, start, width); triviaScanner.setTextPos(end); continue; case 7: var text = sourceFile.text; var ch = text.charCodeAt(start); if (ch === 60 || ch === 62) { pushClassification(start, width, 1); continue; } ts.Debug.assert(ch === 124 || ch === 61); classifyDisabledMergeCode(text, start, end); break; case 6: break; default: ts.Debug.assertNever(kind); } } } function classifyComment(token, kind, start, width) { if (kind === 3) { var docCommentAndDiagnostics = ts.parseIsolatedJSDocComment(sourceFile.text, start, width); if (docCommentAndDiagnostics && docCommentAndDiagnostics.jsDoc) { docCommentAndDiagnostics.jsDoc.parent = token; classifyJSDocComment(docCommentAndDiagnostics.jsDoc); return; } } pushCommentRange(start, width); } function pushCommentRange(start, width) { pushClassification(start, width, 1); } function classifyJSDocComment(docComment) { var pos = docComment.pos; if (docComment.tags) { for (var _i = 0, _a = docComment.tags; _i < _a.length; _i++) { var tag = _a[_i]; if (tag.pos !== pos) { pushCommentRange(pos, tag.pos - pos); } pushClassification(tag.atToken.pos, tag.atToken.end - tag.atToken.pos, 10); pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18); pos = tag.tagName.end; switch (tag.kind) { case 293: processJSDocParameterTag(tag); break; case 297: processJSDocTemplateTag(tag); pos = tag.end; break; case 296: processElement(tag.typeExpression); pos = tag.end; break; case 294: processElement(tag.typeExpression); pos = tag.end; break; } } } if (pos !== docComment.end) { pushCommentRange(pos, docComment.end - pos); } return; function processJSDocParameterTag(tag) { if (tag.isNameFirst) { pushCommentRange(pos, tag.name.pos - pos); pushClassification(tag.name.pos, tag.name.end - tag.name.pos, 17); pos = tag.name.end; } if (tag.typeExpression) { pushCommentRange(pos, tag.typeExpression.pos - pos); processElement(tag.typeExpression); pos = tag.typeExpression.end; } if (!tag.isNameFirst) { pushCommentRange(pos, tag.name.pos - pos); pushClassification(tag.name.pos, tag.name.end - tag.name.pos, 17); pos = tag.name.end; } } } function processJSDocTemplateTag(tag) { for (var _i = 0, _a = tag.getChildren(); _i < _a.length; _i++) { var child = _a[_i]; processElement(child); } } function classifyDisabledMergeCode(text, start, end) { var i; for (i = start; i < end; i++) { if (ts.isLineBreak(text.charCodeAt(i))) { break; } } pushClassification(start, i - start, 1); mergeConflictScanner.setTextPos(i); while (mergeConflictScanner.getTextPos() < end) { classifyDisabledCodeToken(); } } function classifyDisabledCodeToken() { var start = mergeConflictScanner.getTextPos(); var tokenKind = mergeConflictScanner.scan(); var end = mergeConflictScanner.getTextPos(); var type = classifyTokenType(tokenKind); if (type) { pushClassification(start, end - start, type); } } function tryClassifyNode(node) { if (ts.isJSDoc(node)) { return true; } if (ts.nodeIsMissing(node)) { return true; } var classifiedElementName = tryClassifyJsxElementName(node); if (!ts.isToken(node) && node.kind !== 10 && classifiedElementName === undefined) { return false; } var tokenStart = node.kind === 10 ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); var tokenWidth = node.end - tokenStart; ts.Debug.assert(tokenWidth >= 0); if (tokenWidth > 0) { var type = classifiedElementName || classifyTokenType(node.kind, node); if (type) { pushClassification(tokenStart, tokenWidth, type); } } return true; } function tryClassifyJsxElementName(token) { switch (token.parent && token.parent.kind) { case 257: if (token.parent.tagName === token) { return 19; } break; case 258: if (token.parent.tagName === token) { return 20; } break; case 256: if (token.parent.tagName === token) { return 21; } break; case 262: if (token.parent.name === token) { return 22; } break; } return undefined; } function classifyTokenType(tokenKind, token) { if (ts.isKeyword(tokenKind)) { return 3; } if (tokenKind === 27 || tokenKind === 29) { if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) { return 10; } } if (ts.isPunctuation(tokenKind)) { if (token) { var parent = token.parent; if (tokenKind === 58) { if (parent.kind === 232 || parent.kind === 152 || parent.kind === 149 || parent.kind === 262) { return 5; } } if (parent.kind === 200 || parent.kind === 198 || parent.kind === 199 || parent.kind === 201) { return 5; } } return 10; } else if (tokenKind === 8) { return 4; } else if (tokenKind === 9) { return token.parent.kind === 262 ? 24 : 6; } else if (tokenKind === 12) { return 6; } else if (ts.isTemplateLiteralKind(tokenKind)) { return 6; } else if (tokenKind === 10) { return 23; } else if (tokenKind === 71) { if (token) { switch (token.parent.kind) { case 235: if (token.parent.name === token) { return 11; } return; case 148: if (token.parent.name === token) { return 15; } return; case 236: if (token.parent.name === token) { return 13; } return; case 238: if (token.parent.name === token) { return 12; } return; case 239: if (token.parent.name === token) { return 14; } return; case 149: if (token.parent.name === token) { return ts.isThisIdentifier(token) ? 3 : 17; } return; } } return 2; } } function processElement(element) { if (!element) { return; } if (ts.decodedTextSpanIntersectsWith(spanStart, spanLength, element.pos, element.getFullWidth())) { checkForClassificationCancellation(cancellationToken, element.kind); for (var _i = 0, _a = element.getChildren(sourceFile); _i < _a.length; _i++) { var child = _a[_i]; if (!tryClassifyNode(child)) { processElement(child); } } } } } ts.getEncodedSyntacticClassifications = getEncodedSyntacticClassifications; })(ts || (ts = {})); var ts; (function (ts) { var Completions; (function (Completions) { var PathCompletions; (function (PathCompletions) { function nameAndKind(name, kind) { return { name: name, kind: kind }; } function addReplacementSpans(text, textStart, names) { var span = getDirectoryFragmentTextSpan(text, textStart); return names.map(function (_a) { var name = _a.name, kind = _a.kind; return ({ name: name, kind: kind, span: span }); }); } function getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker) { return addReplacementSpans(node.text, node.getStart(sourceFile) + 1, getStringLiteralCompletionsFromModuleNamesWorker(node, compilerOptions, host, typeChecker)); } PathCompletions.getStringLiteralCompletionsFromModuleNames = getStringLiteralCompletionsFromModuleNames; function getStringLiteralCompletionsFromModuleNamesWorker(node, compilerOptions, host, typeChecker) { var literalValue = ts.normalizeSlashes(node.text); var scriptPath = node.getSourceFile().path; var scriptDirectory = ts.getDirectoryPath(scriptPath); if (isPathRelativeToScript(literalValue) || ts.isRootedDiskPath(literalValue)) { var extensions = getSupportedExtensionsForModuleResolution(compilerOptions); if (compilerOptions.rootDirs) { return getCompletionEntriesForDirectoryFragmentWithRootDirs(compilerOptions.rootDirs, literalValue, scriptDirectory, extensions, false, compilerOptions, host, scriptPath); } else { return getCompletionEntriesForDirectoryFragment(literalValue, scriptDirectory, extensions, false, host, scriptPath); } } else { return getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, compilerOptions, host, typeChecker); } } function getSupportedExtensionsForModuleResolution(compilerOptions) { var extensions = ts.getSupportedExtensions(compilerOptions); return compilerOptions.resolveJsonModule && ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeJs ? extensions.concat(".json") : extensions; } function getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptPath, ignoreCase) { rootDirs = rootDirs.map(function (rootDirectory) { return ts.normalizePath(ts.isRootedDiskPath(rootDirectory) ? rootDirectory : ts.combinePaths(basePath, rootDirectory)); }); var relativeDirectory = ts.firstDefined(rootDirs, function (rootDirectory) { return ts.containsPath(rootDirectory, scriptPath, basePath, ignoreCase) ? scriptPath.substr(rootDirectory.length) : undefined; }); return ts.deduplicate(rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); }), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive); } function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptPath, extensions, includeExtensions, compilerOptions, host, exclude) { var basePath = compilerOptions.project || host.getCurrentDirectory(); var ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames()); var baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptPath, ignoreCase); var result = []; for (var _i = 0, baseDirectories_1 = baseDirectories; _i < baseDirectories_1.length; _i++) { var baseDirectory = baseDirectories_1[_i]; getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensions, includeExtensions, host, exclude, result); } return result; } function getCompletionEntriesForDirectoryFragment(fragment, scriptPath, extensions, includeExtensions, host, exclude, result) { if (result === void 0) { result = []; } if (fragment === undefined) { fragment = ""; } fragment = ts.normalizeSlashes(fragment); if (!ts.hasTrailingDirectorySeparator(fragment)) { fragment = ts.getDirectoryPath(fragment); } if (fragment === "") { fragment = "." + ts.directorySeparator; } fragment = ts.ensureTrailingDirectorySeparator(fragment); var absolutePath = ts.resolvePath(scriptPath, fragment); var baseDirectory = ts.hasTrailingDirectorySeparator(absolutePath) ? absolutePath : ts.getDirectoryPath(absolutePath); var ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames()); if (tryDirectoryExists(host, baseDirectory)) { var files = tryReadDirectory(host, baseDirectory, extensions, undefined, ["./*"]); if (files) { var foundFiles = ts.createMap(); for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { var filePath = files_3[_i]; filePath = ts.normalizePath(filePath); if (exclude && ts.comparePaths(filePath, exclude, scriptPath, ignoreCase) === 0) { continue; } var foundFileName = includeExtensions || ts.fileExtensionIs(filePath, ".json") ? ts.getBaseFileName(filePath) : ts.removeFileExtension(ts.getBaseFileName(filePath)); if (!foundFiles.has(foundFileName)) { foundFiles.set(foundFileName, true); } } ts.forEachKey(foundFiles, function (foundFile) { result.push(nameAndKind(foundFile, "script")); }); } var directories = tryGetDirectories(host, baseDirectory); if (directories) { for (var _a = 0, directories_1 = directories; _a < directories_1.length; _a++) { var directory = directories_1[_a]; var directoryName = ts.getBaseFileName(ts.normalizePath(directory)); if (directoryName !== "@types") { result.push(nameAndKind(directoryName, "directory")); } } } } return result; } function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, compilerOptions, host, typeChecker) { var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths; var result = []; var fileExtensions = getSupportedExtensionsForModuleResolution(compilerOptions); if (baseUrl) { var projectDir = compilerOptions.project || host.getCurrentDirectory(); var absolute = ts.isRootedDiskPath(baseUrl) ? baseUrl : ts.combinePaths(projectDir, baseUrl); getCompletionEntriesForDirectoryFragment(fragment, ts.normalizePath(absolute), fileExtensions, false, host, undefined, result); for (var path in paths) { var patterns = paths[path]; if (paths.hasOwnProperty(path) && patterns) { var _loop_13 = function (name, kind) { if (!result.some(function (entry) { return entry.name === name; })) { result.push(nameAndKind(name, kind)); } }; for (var _i = 0, _a = getCompletionsForPathMapping(path, patterns, fragment, baseUrl, fileExtensions, host); _i < _a.length; _i++) { var _b = _a[_i], name = _b.name, kind = _b.kind; _loop_13(name, kind); } } } } var fragmentDirectory = containsSlash(fragment) ? ts.hasTrailingDirectorySeparator(fragment) ? fragment : ts.getDirectoryPath(fragment) : undefined; for (var _c = 0, _d = getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker); _c < _d.length; _c++) { var ambientName = _d[_c]; result.push(nameAndKind(ambientName, "external module name")); } getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, result); if (ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeJs) { var foundGlobal = false; if (fragmentDirectory === undefined) { var _loop_14 = function (moduleName) { if (!result.some(function (entry) { return entry.name === moduleName; })) { foundGlobal = true; result.push(nameAndKind(moduleName, "external module name")); } }; for (var _e = 0, _f = enumerateNodeModulesVisibleToScript(host, scriptPath); _e < _f.length; _e++) { var moduleName = _f[_e]; _loop_14(moduleName); } } if (!foundGlobal) { ts.forEachAncestorDirectory(scriptPath, function (ancestor) { var nodeModules = ts.combinePaths(ancestor, "node_modules"); if (tryDirectoryExists(host, nodeModules)) { getCompletionEntriesForDirectoryFragment(fragment, nodeModules, fileExtensions, false, host, undefined, result); } }); } } return result; } function getCompletionsForPathMapping(path, patterns, fragment, baseUrl, fileExtensions, host) { if (!ts.endsWith(path, "*")) { return !ts.stringContains(path, "*") && ts.startsWith(path, fragment) ? [{ name: path, kind: "directory" }] : ts.emptyArray; } var pathPrefix = path.slice(0, path.length - 1); if (!ts.startsWith(fragment, pathPrefix)) { return [{ name: pathPrefix, kind: "directory" }]; } var remainingFragment = fragment.slice(pathPrefix.length); return ts.flatMap(patterns, function (pattern) { return getModulesForPathsPattern(remainingFragment, baseUrl, pattern, fileExtensions, host); }); } function getModulesForPathsPattern(fragment, baseUrl, pattern, fileExtensions, host) { if (!host.readDirectory) { return undefined; } var parsed = ts.hasZeroOrOneAsteriskCharacter(pattern) ? ts.tryParsePattern(pattern) : undefined; if (!parsed) { return undefined; } var normalizedPrefix = ts.resolvePath(parsed.prefix); var normalizedPrefixDirectory = ts.hasTrailingDirectorySeparator(parsed.prefix) ? normalizedPrefix : ts.getDirectoryPath(normalizedPrefix); var normalizedPrefixBase = ts.hasTrailingDirectorySeparator(parsed.prefix) ? "" : ts.getBaseFileName(normalizedPrefix); var fragmentHasPath = containsSlash(fragment); var fragmentDirectory = fragmentHasPath ? ts.hasTrailingDirectorySeparator(fragment) ? fragment : ts.getDirectoryPath(fragment) : undefined; var expandedPrefixDirectory = fragmentHasPath ? ts.combinePaths(normalizedPrefixDirectory, normalizedPrefixBase + fragmentDirectory) : normalizedPrefixDirectory; var normalizedSuffix = ts.normalizePath(parsed.suffix); var baseDirectory = ts.normalizePath(ts.combinePaths(baseUrl, expandedPrefixDirectory)); var completePrefix = fragmentHasPath ? baseDirectory : ts.ensureTrailingDirectorySeparator(baseDirectory) + normalizedPrefixBase; var includeGlob = normalizedSuffix ? "**/*" : "./*"; var matches = tryReadDirectory(host, baseDirectory, fileExtensions, undefined, [includeGlob]).map(function (name) { return ({ name: name, kind: "script" }); }); var directories = tryGetDirectories(host, baseDirectory).map(function (d) { return ts.combinePaths(baseDirectory, d); }).map(function (name) { return ({ name: name, kind: "directory" }); }); return ts.mapDefined(ts.concatenate(matches, directories), function (_a) { var name = _a.name, kind = _a.kind; var normalizedMatch = ts.normalizePath(name); var inner = withoutStartAndEnd(normalizedMatch, completePrefix, normalizedSuffix); return inner !== undefined ? { name: removeLeadingDirectorySeparator(ts.removeFileExtension(inner)), kind: kind } : undefined; }); } function withoutStartAndEnd(s, start, end) { return ts.startsWith(s, start) && ts.endsWith(s, end) ? s.slice(start.length, s.length - end.length) : undefined; } function removeLeadingDirectorySeparator(path) { return path[0] === ts.directorySeparator ? path.slice(1) : path; } function getAmbientModuleCompletions(fragment, fragmentDirectory, checker) { var ambientModules = checker.getAmbientModules().map(function (sym) { return ts.stripQuotes(sym.name); }); var nonRelativeModuleNames = ambientModules.filter(function (moduleName) { return ts.startsWith(moduleName, fragment); }); if (fragmentDirectory !== undefined) { var moduleNameWithSeparator_1 = ts.ensureTrailingDirectorySeparator(fragmentDirectory); return nonRelativeModuleNames.map(function (nonRelativeModuleName) { return ts.removePrefix(nonRelativeModuleName, moduleNameWithSeparator_1); }); } return nonRelativeModuleNames; } function getTripleSlashReferenceCompletion(sourceFile, position, compilerOptions, host) { var token = ts.getTokenAtPosition(sourceFile, position, false); var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); var range = commentRanges && ts.find(commentRanges, function (commentRange) { return position >= commentRange.pos && position <= commentRange.end; }); if (!range) { return undefined; } var text = sourceFile.text.slice(range.pos, position); var match = tripleSlashDirectiveFragmentRegex.exec(text); if (!match) { return undefined; } var prefix = match[1], kind = match[2], toComplete = match[3]; var scriptPath = ts.getDirectoryPath(sourceFile.path); var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, ts.getSupportedExtensions(compilerOptions), true, host, sourceFile.path) : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath) : undefined; return names && addReplacementSpans(toComplete, range.pos + prefix.length, names); } PathCompletions.getTripleSlashReferenceCompletion = getTripleSlashReferenceCompletion; function getCompletionEntriesFromTypings(host, options, scriptPath, result) { if (result === void 0) { result = []; } var seen = ts.createMap(); if (options.types) { for (var _i = 0, _a = options.types; _i < _a.length; _i++) { var typesName = _a[_i]; var moduleName = ts.getUnmangledNameForScopedPackage(typesName); pushResult(moduleName); } } else if (host.getDirectories) { var typeRoots = void 0; try { typeRoots = ts.getEffectiveTypeRoots(options, host); } catch (_b) { } if (typeRoots) { for (var _c = 0, typeRoots_2 = typeRoots; _c < typeRoots_2.length; _c++) { var root = typeRoots_2[_c]; getCompletionEntriesFromDirectories(root); } } for (var _d = 0, _e = findPackageJsons(scriptPath, host); _d < _e.length; _d++) { var packageJson = _e[_d]; var typesDir = ts.combinePaths(ts.getDirectoryPath(packageJson), "node_modules/@types"); getCompletionEntriesFromDirectories(typesDir); } } return result; function getCompletionEntriesFromDirectories(directory) { ts.Debug.assert(!!host.getDirectories); if (tryDirectoryExists(host, directory)) { var directories = tryGetDirectories(host, directory); if (directories) { for (var _i = 0, directories_2 = directories; _i < directories_2.length; _i++) { var typeDirectory = directories_2[_i]; typeDirectory = ts.normalizePath(typeDirectory); var directoryName = ts.getBaseFileName(typeDirectory); var moduleName = ts.getUnmangledNameForScopedPackage(directoryName); pushResult(moduleName); } } } } function pushResult(moduleName) { if (!seen.has(moduleName)) { result.push(nameAndKind(moduleName, "external module name")); seen.set(moduleName, true); } } } function findPackageJsons(directory, host) { var paths = []; ts.forEachAncestorDirectory(directory, function (ancestor) { var currentConfigPath = ts.findConfigFile(ancestor, function (f) { return tryFileExists(host, f); }, "package.json"); if (!currentConfigPath) { return true; } paths.push(currentConfigPath); }); return paths; } function enumerateNodeModulesVisibleToScript(host, scriptPath) { if (!host.readFile || !host.fileExists) return ts.emptyArray; var result = []; for (var _i = 0, _a = findPackageJsons(scriptPath, host); _i < _a.length; _i++) { var packageJson = _a[_i]; var contents = ts.readJson(packageJson, host); for (var _b = 0, nodeModulesDependencyKeys_1 = nodeModulesDependencyKeys; _b < nodeModulesDependencyKeys_1.length; _b++) { var key = nodeModulesDependencyKeys_1[_b]; var dependencies = contents[key]; if (!dependencies) continue; for (var dep in dependencies) { if (dependencies.hasOwnProperty(dep) && !ts.startsWith(dep, "@types/")) { result.push(dep); } } } } return result; } function getDirectoryFragmentTextSpan(text, textStart) { var index = Math.max(text.lastIndexOf(ts.directorySeparator), text.lastIndexOf("\\")); var offset = index !== -1 ? index + 1 : 0; var length = text.length - offset; return length === 0 || ts.isIdentifierText(text.substr(offset, length), 6) ? undefined : ts.createTextSpan(textStart + offset, length); } function isPathRelativeToScript(path) { if (path && path.length >= 2 && path.charCodeAt(0) === 46) { var slashIndex = path.length >= 3 && path.charCodeAt(1) === 46 ? 2 : 1; var slashCharCode = path.charCodeAt(slashIndex); return slashCharCode === 47 || slashCharCode === 92; } return false; } var tripleSlashDirectiveFragmentRegex = /^(\/\/\/\s* candidate.parameters.length) return; var type = checker.getParameterType(candidate, argumentInfo.argumentIndex); isNewIdentifier = isNewIdentifier || !!(type.flags & 4); return getStringLiteralTypes(type, uniques); }); return { kind: 2, types: types, isNewIdentifier: isNewIdentifier }; } function stringLiteralCompletionsFromProperties(type) { return type && { kind: 1, symbols: type.getApparentProperties(), hasIndexSignature: hasIndexSignature(type) }; } function getStringLiteralTypes(type, uniques) { if (uniques === void 0) { uniques = ts.createMap(); } if (!type) return ts.emptyArray; type = ts.skipConstraint(type); return type.isUnion() ? ts.flatMap(type.types, function (t) { return getStringLiteralTypes(t, uniques); }) : type.isStringLiteral() && !(type.flags & 512) && ts.addToSeen(uniques, type.value) ? [type] : ts.emptyArray; } function getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId) { var compilerOptions = program.getCompilerOptions(); var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, { includeCompletionsForModuleExports: true, includeCompletionsWithInsertText: true }, entryId); if (!completionData) { return { type: "none" }; } if (completionData.kind !== 0) { return { type: "request", request: completionData }; } var symbols = completionData.symbols, literals = completionData.literals, location = completionData.location, completionKind = completionData.completionKind, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, previousToken = completionData.previousToken, isJsxInitializer = completionData.isJsxInitializer; var literal = ts.find(literals, function (l) { return completionNameForLiteral(l) === entryId.name; }); if (literal !== undefined) return { type: "literal", literal: literal }; return ts.firstDefined(symbols, function (symbol) { var origin = symbolToOriginInfoMap[ts.getSymbolId(symbol)]; var info = getCompletionEntryDisplayNameForSymbol(symbol, compilerOptions.target, origin, completionKind); return info && info.name === entryId.name && getSourceFromOrigin(origin) === entryId.source ? { type: "symbol", symbol: symbol, location: location, symbolToOriginInfoMap: symbolToOriginInfoMap, previousToken: previousToken, isJsxInitializer: isJsxInitializer } : undefined; }) || { type: "none" }; } function getSymbolName(symbol, origin, target) { return origin && origin.type === "export" && origin.isDefaultExport && symbol.escapedName === "default" ? ts.firstDefined(symbol.declarations, function (d) { return ts.isExportAssignment(d) && ts.isIdentifier(d.expression) ? d.expression.text : undefined; }) || ts.codefix.moduleSymbolToValidIdentifier(origin.moduleSymbol, target) : symbol.name; } function getCompletionEntryDetails(program, log, sourceFile, position, entryId, host, formatContext, getCanonicalFileName, preferences, cancellationToken) { var typeChecker = program.getTypeChecker(); var compilerOptions = program.getCompilerOptions(); var name = entryId.name; var contextToken = ts.findPrecedingToken(position, sourceFile); if (ts.isInString(sourceFile, position, contextToken)) { var stringLiteralCompletions = !contextToken || !ts.isStringLiteralLike(contextToken) ? undefined : getStringLiteralCompletionEntries(sourceFile, contextToken, position, typeChecker, compilerOptions, host); return stringLiteralCompletions && stringLiteralCompletionDetails(name, contextToken, stringLiteralCompletions, sourceFile, typeChecker, cancellationToken); } var symbolCompletion = getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId); switch (symbolCompletion.type) { case "request": { var request = symbolCompletion.request; switch (request.kind) { case 1: return ts.JsDoc.getJSDocTagNameCompletionDetails(name); case 2: return ts.JsDoc.getJSDocTagCompletionDetails(name); case 3: return ts.JsDoc.getJSDocParameterNameCompletionDetails(name); default: return ts.Debug.assertNever(request); } } case "symbol": { var symbol = symbolCompletion.symbol, location = symbolCompletion.location, symbolToOriginInfoMap = symbolCompletion.symbolToOriginInfoMap, previousToken = symbolCompletion.previousToken; var _a = getCompletionEntryCodeActionsAndSourceDisplay(symbolToOriginInfoMap, symbol, program, typeChecker, host, compilerOptions, sourceFile, previousToken, formatContext, getCanonicalFileName, program.getSourceFiles(), preferences), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay; return createCompletionDetailsForSymbol(symbol, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); } case "literal": { var literal = symbolCompletion.literal; return createSimpleDetails(completionNameForLiteral(literal), "string", typeof literal === "string" ? ts.SymbolDisplayPartKind.stringLiteral : ts.SymbolDisplayPartKind.numericLiteral); } case "none": return allKeywordsCompletions().some(function (c) { return c.name === name; }) ? createSimpleDetails(name, "keyword", ts.SymbolDisplayPartKind.keyword) : undefined; default: ts.Debug.assertNever(symbolCompletion); } } Completions.getCompletionEntryDetails = getCompletionEntryDetails; function createSimpleDetails(name, kind, kind2) { return createCompletionDetails(name, "", kind, [ts.displayPart(name, kind2)]); } function createCompletionDetailsForSymbol(symbol, checker, sourceFile, location, cancellationToken, codeActions, sourceDisplay) { var _a = checker.runWithCancellationToken(cancellationToken, function (checker) { return ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(checker, symbol, sourceFile, location, location, 7); }), displayParts = _a.displayParts, documentation = _a.documentation, symbolKind = _a.symbolKind, tags = _a.tags; return createCompletionDetails(symbol.name, ts.SymbolDisplay.getSymbolModifiers(symbol), symbolKind, displayParts, documentation, tags, codeActions, sourceDisplay); } function stringLiteralCompletionDetails(name, location, completion, sourceFile, checker, cancellationToken) { switch (completion.kind) { case 0: { var match = ts.find(completion.paths, function (p) { return p.name === name; }); return match && createCompletionDetails(name, "", match.kind, [ts.textPart(name)]); } case 1: { var match = ts.find(completion.symbols, function (s) { return s.name === name; }); return match && createCompletionDetailsForSymbol(match, checker, sourceFile, location, cancellationToken); } case 2: return ts.find(completion.types, function (t) { return t.value === name; }) ? createCompletionDetails(name, "", "type", [ts.textPart(name)]) : undefined; default: return ts.Debug.assertNever(completion); } } function createCompletionDetails(name, kindModifiers, kind, displayParts, documentation, tags, codeActions, source) { return { name: name, kindModifiers: kindModifiers, kind: kind, displayParts: displayParts, documentation: documentation, tags: tags, codeActions: codeActions, source: source }; } function getCompletionEntryCodeActionsAndSourceDisplay(symbolToOriginInfoMap, symbol, program, checker, host, compilerOptions, sourceFile, previousToken, formatContext, getCanonicalFileName, allSourceFiles, preferences) { var symbolOriginInfo = symbolToOriginInfoMap[ts.getSymbolId(symbol)]; if (!symbolOriginInfo || symbolOriginInfo.type !== "export") { return { codeActions: undefined, sourceDisplay: undefined }; } var moduleSymbol = symbolOriginInfo.moduleSymbol; var exportedSymbol = checker.getMergedSymbol(ts.skipAlias(symbol.exportSymbol || symbol, checker)); var _a = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, getSymbolName(symbol, symbolOriginInfo, compilerOptions.target), host, program, checker, compilerOptions, allSourceFiles, formatContext, getCanonicalFileName, previousToken, preferences), moduleSpecifier = _a.moduleSpecifier, codeAction = _a.codeAction; return { sourceDisplay: [ts.textPart(moduleSpecifier)], codeActions: [codeAction] }; } function getCompletionEntrySymbol(program, log, sourceFile, position, entryId) { var completion = getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId); return completion.type === "symbol" ? completion.symbol : undefined; } Completions.getCompletionEntrySymbol = getCompletionEntrySymbol; var CompletionDataKind; (function (CompletionDataKind) { CompletionDataKind[CompletionDataKind["Data"] = 0] = "Data"; CompletionDataKind[CompletionDataKind["JsDocTagName"] = 1] = "JsDocTagName"; CompletionDataKind[CompletionDataKind["JsDocTag"] = 2] = "JsDocTag"; CompletionDataKind[CompletionDataKind["JsDocParameterName"] = 3] = "JsDocParameterName"; })(CompletionDataKind || (CompletionDataKind = {})); var CompletionKind; (function (CompletionKind) { CompletionKind[CompletionKind["ObjectPropertyDeclaration"] = 0] = "ObjectPropertyDeclaration"; CompletionKind[CompletionKind["Global"] = 1] = "Global"; CompletionKind[CompletionKind["PropertyAccess"] = 2] = "PropertyAccess"; CompletionKind[CompletionKind["MemberLike"] = 3] = "MemberLike"; CompletionKind[CompletionKind["String"] = 4] = "String"; CompletionKind[CompletionKind["None"] = 5] = "None"; })(CompletionKind || (CompletionKind = {})); function getRecommendedCompletion(previousToken, contextualType, checker) { return ts.firstDefined(contextualType && (contextualType.isUnion() ? contextualType.types : [contextualType]), function (type) { var symbol = type && type.symbol; return symbol && (symbol.flags & (8 | 384 | 32) && !ts.isAbstractConstructorSymbol(symbol)) ? getFirstSymbolInChain(symbol, previousToken, checker) : undefined; }); } function getContextualType(previousToken, position, sourceFile, checker) { var parent = previousToken.parent; switch (previousToken.kind) { case 71: return getContextualTypeFromParent(previousToken, checker); case 58: switch (parent.kind) { case 232: return checker.getContextualType(parent.initializer); case 200: return checker.getTypeAtLocation(parent.left); case 262: return checker.getContextualTypeForJsxAttribute(parent); default: return undefined; } case 94: return checker.getContextualType(parent); case 73: return getSwitchedType(ts.cast(parent, ts.isCaseClause), checker); case 17: return ts.isJsxExpression(parent) && parent.parent.kind !== 255 ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined; default: var argInfo = ts.SignatureHelp.getArgumentInfoForCompletions(previousToken, position, sourceFile); return argInfo ? checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, argInfo.argumentIndex + (previousToken.kind === 26 ? 1 : 0)) : isEqualityOperatorKind(previousToken.kind) && ts.isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind) ? checker.getTypeAtLocation(parent.left) : checker.getContextualType(previousToken); } } function getContextualTypeFromParent(node, checker) { var parent = node.parent; switch (parent.kind) { case 188: return checker.getContextualType(parent); case 200: { var _a = parent, left = _a.left, operatorToken = _a.operatorToken, right = _a.right; return isEqualityOperatorKind(operatorToken.kind) ? checker.getTypeAtLocation(node === right ? left : right) : checker.getContextualType(node); } case 266: return parent.expression === node ? getSwitchedType(parent, checker) : undefined; default: return checker.getContextualType(node); } } function getSwitchedType(caseClause, checker) { return checker.getTypeAtLocation(caseClause.parent.parent.expression); } function getFirstSymbolInChain(symbol, enclosingDeclaration, checker) { var chain = checker.getAccessibleSymbolChain(symbol, enclosingDeclaration, 67108863, false); if (chain) return ts.first(chain); return symbol.parent && (isModuleSymbol(symbol.parent) ? symbol : getFirstSymbolInChain(symbol.parent, enclosingDeclaration, checker)); } function isModuleSymbol(symbol) { return symbol.declarations.some(function (d) { return d.kind === 274; }); } function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId) { var typeChecker = program.getTypeChecker(); var start = ts.timestamp(); var currentToken = ts.getTokenAtPosition(sourceFile, position, false); log("getCompletionData: Get current token: " + (ts.timestamp() - start)); start = ts.timestamp(); var insideComment = ts.isInComment(sourceFile, position, currentToken); log("getCompletionData: Is inside comment: " + (ts.timestamp() - start)); var insideJsDocTagTypeExpression = false; var isInSnippetScope = false; if (insideComment) { if (ts.hasDocComment(sourceFile, position)) { if (sourceFile.text.charCodeAt(position - 1) === 64) { return { kind: 1 }; } else { var lineStart = ts.getLineStartPositionForPosition(position, sourceFile); if (!(sourceFile.text.substring(lineStart, position).match(/[^\*|\s|(/\*\*)]/))) { return { kind: 2 }; } } } var tag = getJsDocTagAtPosition(currentToken, position); if (tag) { if (tag.tagName.pos <= position && position <= tag.tagName.end) { return { kind: 1 }; } if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 278) { currentToken = ts.getTokenAtPosition(sourceFile, position, true); if (!currentToken || (!ts.isDeclarationName(currentToken) && (currentToken.parent.kind !== 299 || currentToken.parent.name !== currentToken))) { insideJsDocTagTypeExpression = isCurrentlyEditingNode(tag.typeExpression); } } if (ts.isJSDocParameterTag(tag) && (ts.nodeIsMissing(tag.name) || tag.name.pos <= position && position <= tag.name.end)) { return { kind: 3, tag: tag }; } } if (!insideJsDocTagTypeExpression) { log("Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment."); return undefined; } } start = ts.timestamp(); var previousToken = ts.findPrecedingToken(position, sourceFile, undefined, insideJsDocTagTypeExpression); log("getCompletionData: Get previous token 1: " + (ts.timestamp() - start)); var contextToken = previousToken; if (contextToken && position <= contextToken.end && (ts.isIdentifier(contextToken) || ts.isKeyword(contextToken.kind))) { var start_4 = ts.timestamp(); contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile, undefined, insideJsDocTagTypeExpression); log("getCompletionData: Get previous token 2: " + (ts.timestamp() - start_4)); } var node = currentToken; var propertyAccessToConvert; var isRightOfDot = false; var isRightOfOpenTag = false; var isStartingCloseTag = false; var isJsxInitializer = false; var location = ts.getTouchingPropertyName(sourceFile, position); if (contextToken) { if (isCompletionListBlocker(contextToken)) { log("Returning an empty list because completion was requested in an invalid position."); return undefined; } var parent = contextToken.parent; if (contextToken.kind === 23) { isRightOfDot = true; switch (parent.kind) { case 185: propertyAccessToConvert = parent; node = propertyAccessToConvert.expression; break; case 146: node = parent.left; break; case 179: case 210: node = parent; break; default: return undefined; } } else if (sourceFile.languageVariant === 1) { if (parent && parent.kind === 185) { contextToken = parent; parent = parent.parent; } if (currentToken.parent === location) { switch (currentToken.kind) { case 29: if (currentToken.parent.kind === 255 || currentToken.parent.kind === 257) { location = currentToken; } break; case 41: if (currentToken.parent.kind === 256) { location = currentToken; } break; } } switch (parent.kind) { case 258: if (contextToken.kind === 41) { isStartingCloseTag = true; location = contextToken; } break; case 200: if (!(parent.left.flags & 32768)) { break; } case 256: case 255: case 257: if (contextToken.kind === 27) { isRightOfOpenTag = true; location = contextToken; } break; case 262: switch (previousToken.kind) { case 58: isJsxInitializer = true; break; case 71: if (parent !== previousToken.parent && !parent.initializer) { isJsxInitializer = previousToken; } } break; } } } var semanticStart = ts.timestamp(); var completionKind = 5; var isNewIdentifierLocation = false; var keywordFilters = 0; var symbols = []; var symbolToOriginInfoMap = []; if (isRightOfDot) { getTypeScriptMemberSymbols(); } else if (isRightOfOpenTag) { var tagSymbols = ts.Debug.assertEachDefined(typeChecker.getJsxIntrinsicTagNamesAt(location), "getJsxIntrinsicTagNames() should all be defined"); tryGetGlobalSymbols(); symbols = tagSymbols.concat(symbols); completionKind = 3; } else if (isStartingCloseTag) { var tagName = contextToken.parent.parent.openingElement.tagName; var tagSymbol = typeChecker.getSymbolAtLocation(tagName); if (tagSymbol) { symbols = [tagSymbol]; } completionKind = 3; } else { if (!tryGetGlobalSymbols()) { return undefined; } } log("getCompletionData: Semantic work: " + (ts.timestamp() - semanticStart)); var contextualType = previousToken && getContextualType(previousToken, position, sourceFile, typeChecker); var literals = ts.mapDefined(contextualType && (contextualType.isUnion() ? contextualType.types : [contextualType]), function (t) { return t.isLiteral() ? t.value : undefined; }); var recommendedCompletion = previousToken && contextualType && getRecommendedCompletion(previousToken, contextualType, typeChecker); return { kind: 0, symbols: symbols, completionKind: completionKind, isInSnippetScope: isInSnippetScope, propertyAccessToConvert: propertyAccessToConvert, isNewIdentifierLocation: isNewIdentifierLocation, location: location, keywordFilters: keywordFilters, literals: literals, symbolToOriginInfoMap: symbolToOriginInfoMap, recommendedCompletion: recommendedCompletion, previousToken: previousToken, isJsxInitializer: isJsxInitializer }; function isTagWithTypeExpression(tag) { switch (tag.kind) { case 293: case 299: case 294: case 296: case 298: return true; default: return false; } } function getTypeScriptMemberSymbols() { completionKind = 2; var isImportType = ts.isLiteralImportTypeNode(node); var isTypeLocation = insideJsDocTagTypeExpression || (isImportType && !node.isTypeOf) || ts.isPartOfTypeNode(node.parent); var isRhsOfImportDeclaration = ts.isInRightSideOfInternalImportEqualsDeclaration(node); var allowTypeOrValue = isRhsOfImportDeclaration || (!isTypeLocation && ts.isPossiblyTypeArgumentPosition(contextToken, sourceFile)); if (ts.isEntityName(node) || isImportType) { var symbol = typeChecker.getSymbolAtLocation(node); if (symbol) { symbol = ts.skipAlias(symbol, typeChecker); if (symbol.flags & (1536 | 384)) { var exportedSymbols = ts.Debug.assertEachDefined(typeChecker.getExportsOfModule(symbol), "getExportsOfModule() should all be defined"); var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : (node.parent), symbol.name); }; var isValidTypeAccess_1 = function (symbol) { return symbolCanBeReferencedAtTypeLocation(symbol); }; var isValidAccess = allowTypeOrValue ? function (symbol) { return isValidTypeAccess_1(symbol) || isValidValueAccess_1(symbol); } : isTypeLocation ? isValidTypeAccess_1 : isValidValueAccess_1; for (var _i = 0, exportedSymbols_1 = exportedSymbols; _i < exportedSymbols_1.length; _i++) { var symbol_2 = exportedSymbols_1[_i]; if (isValidAccess(symbol_2)) { symbols.push(symbol_2); } } if (!isTypeLocation && symbol.declarations.some(function (d) { return d.kind !== 274 && d.kind !== 239 && d.kind !== 238; })) { addTypeProperties(typeChecker.getTypeOfSymbolAtLocation(symbol, node)); } return; } } } if (ts.isMetaProperty(node) && (node.keywordToken === 94 || node.keywordToken === 91)) { var completion = (node.keywordToken === 94) ? "target" : "meta"; symbols.push(typeChecker.createSymbol(4, ts.escapeLeadingUnderscores(completion))); return; } if (!isTypeLocation) { addTypeProperties(typeChecker.getTypeAtLocation(node)); } } function addTypeProperties(type) { isNewIdentifierLocation = !!type.getStringIndexType(); if (isUncheckedFile) { symbols.push.apply(symbols, getPropertiesForCompletion(type, typeChecker, true)); } else { for (var _i = 0, _a = type.getApparentProperties(); _i < _a.length; _i++) { var symbol = _a[_i]; if (typeChecker.isValidPropertyAccessForCompletions(node.kind === 179 ? node : node.parent, type, symbol)) { addPropertySymbol(symbol); } } } } function addPropertySymbol(symbol) { var symbolSymbol = ts.firstDefined(symbol.declarations, function (decl) { var name = ts.getNameOfDeclaration(decl); var leftName = name.kind === 147 ? getLeftMostName(name.expression) : undefined; return leftName && typeChecker.getSymbolAtLocation(leftName); }); if (symbolSymbol) { symbols.push(symbolSymbol); symbolToOriginInfoMap[ts.getSymbolId(symbolSymbol)] = { type: "symbol-member" }; } else { symbols.push(symbol); } } function getLeftMostName(e) { return ts.isIdentifier(e) ? e : ts.isPropertyAccessExpression(e) ? getLeftMostName(e.expression) : undefined; } function tryGetGlobalSymbols() { var result = tryGetObjectLikeCompletionSymbols() || tryGetImportOrExportClauseCompletionSymbols() || tryGetConstructorCompletion() || tryGetClassLikeCompletionSymbols() || tryGetJsxCompletionSymbols() || (getGlobalCompletions(), 1); return result === 1; } function tryGetConstructorCompletion() { if (!tryGetConstructorLikeCompletionContainer(contextToken)) return 0; completionKind = 5; isNewIdentifierLocation = true; keywordFilters = 3; return 1; } function tryGetJsxCompletionSymbols() { var jsxContainer = tryGetContainingJsxElement(contextToken); var attrsType = jsxContainer && typeChecker.getAllAttributesTypeFromJsxOpeningLikeElement(jsxContainer); if (!attrsType) return 0; symbols = filterJsxAttributes(typeChecker.getPropertiesOfType(attrsType), jsxContainer.attributes.properties); completionKind = 3; isNewIdentifierLocation = false; return 1; } function getGlobalCompletions() { if (tryGetFunctionLikeBodyCompletionContainer(contextToken)) { keywordFilters = 4; } completionKind = 1; isNewIdentifierLocation = isNewIdentifierDefinitionLocation(contextToken); if (previousToken !== contextToken) { ts.Debug.assert(!!previousToken, "Expected 'contextToken' to be defined when different from 'previousToken'."); } var adjustedPosition = previousToken !== contextToken ? previousToken.getStart() : position; var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile; isInSnippetScope = isSnippetScope(scopeNode); var symbolMeanings = 67901928 | 67216319 | 1920 | 2097152; symbols = ts.Debug.assertEachDefined(typeChecker.getSymbolsInScope(scopeNode, symbolMeanings), "getSymbolsInScope() should all be defined"); if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 274) { var thisType = typeChecker.tryGetThisTypeAt(scopeNode); if (thisType) { for (var _i = 0, _a = getPropertiesForCompletion(thisType, typeChecker, true); _i < _a.length; _i++) { var symbol = _a[_i]; symbolToOriginInfoMap[ts.getSymbolId(symbol)] = { type: "this-type" }; symbols.push(symbol); } } } if (shouldOfferImportCompletions()) { getSymbolsFromOtherSourceFileExports(symbols, previousToken && ts.isIdentifier(previousToken) ? previousToken.text : "", program.getCompilerOptions().target); } filterGlobalCompletion(symbols); } function shouldOfferImportCompletions() { if (!preferences.includeCompletionsForModuleExports) return false; if (sourceFile.externalModuleIndicator) return true; if (sourceFile.commonJsModuleIndicator) return false; if (ts.programContainsEs6Modules(program)) return true; if (isUncheckedFile) return false; return ts.compilerOptionsIndicateEs6Modules(program.getCompilerOptions()); } function isSnippetScope(scopeNode) { switch (scopeNode.kind) { case 274: case 202: case 265: case 213: return true; default: return ts.isStatement(scopeNode); } } function filterGlobalCompletion(symbols) { var isTypeOnlyCompletion = insideJsDocTagTypeExpression || !isContextTokenValueLocation(contextToken) && (ts.isPartOfTypeNode(location) || isContextTokenTypeLocation(contextToken)); var allowTypes = isTypeOnlyCompletion || !isContextTokenValueLocation(contextToken) && ts.isPossiblyTypeArgumentPosition(contextToken, sourceFile); if (isTypeOnlyCompletion) keywordFilters = 5; ts.filterMutate(symbols, function (symbol) { if (!ts.isSourceFile(location)) { if (ts.isExportAssignment(location.parent)) { return true; } symbol = ts.skipAlias(symbol, typeChecker); if (ts.isInRightSideOfInternalImportEqualsDeclaration(location)) { return !!(symbol.flags & 1920); } if (allowTypes) { var symbolAllowedAsType = symbolCanBeReferencedAtTypeLocation(symbol); if (symbolAllowedAsType || isTypeOnlyCompletion) { return symbolAllowedAsType; } } } return !!(ts.getCombinedLocalAndExportSymbolFlags(symbol) & 67216319); }); } function isContextTokenValueLocation(contextToken) { return contextToken && contextToken.kind === 103 && (contextToken.parent.kind === 165 || ts.isTypeOfExpression(contextToken.parent)); } function isContextTokenTypeLocation(contextToken) { if (contextToken) { var parentKind = contextToken.parent.kind; switch (contextToken.kind) { case 56: return parentKind === 152 || parentKind === 151 || parentKind === 149 || parentKind === 232 || ts.isFunctionLikeKind(parentKind); case 58: return parentKind === 237; case 118: return parentKind === 208; } } return false; } function symbolCanBeReferencedAtTypeLocation(symbol) { symbol = symbol.exportSymbol || symbol; symbol = ts.skipAlias(symbol, typeChecker); if (symbol.flags & 67901928) { return true; } if (symbol.flags & 1536) { var exportedSymbols = typeChecker.getExportsOfModule(symbol); return exportedSymbols.some(symbolCanBeReferencedAtTypeLocation); } return false; } function getSymbolsFromOtherSourceFileExports(symbols, tokenText, target) { var tokenTextLowerCase = tokenText.toLowerCase(); var seenResolvedModules = ts.createMap(); ts.codefix.forEachExternalModuleToImportFrom(typeChecker, sourceFile, program.getSourceFiles(), function (moduleSymbol) { if (detailsEntryId && detailsEntryId.source && ts.stripQuotes(moduleSymbol.name) !== detailsEntryId.source) { return; } var resolvedModuleSymbol = typeChecker.resolveExternalModuleSymbol(moduleSymbol); if (!ts.addToSeen(seenResolvedModules, ts.getSymbolId(resolvedModuleSymbol))) { return; } for (var _i = 0, _a = typeChecker.getExportsOfModule(moduleSymbol); _i < _a.length; _i++) { var symbol = _a[_i]; if (typeChecker.getMergedSymbol(symbol.parent) !== resolvedModuleSymbol || ts.some(symbol.declarations, function (d) { return ts.isExportSpecifier(d) && !!d.parent.parent.moduleSpecifier; })) { continue; } var isDefaultExport = symbol.name === "default"; if (isDefaultExport) { symbol = ts.getLocalSymbolForExportDefault(symbol) || symbol; } var origin = { type: "export", moduleSymbol: moduleSymbol, isDefaultExport: isDefaultExport }; if (detailsEntryId || stringContainsCharactersInOrder(getSymbolName(symbol, origin, target).toLowerCase(), tokenTextLowerCase)) { symbols.push(symbol); symbolToOriginInfoMap[ts.getSymbolId(symbol)] = origin; } } }); } function stringContainsCharactersInOrder(str, characters) { if (characters.length === 0) { return true; } var characterIndex = 0; for (var strIndex = 0; strIndex < str.length; strIndex++) { if (str.charCodeAt(strIndex) === characters.charCodeAt(characterIndex)) { characterIndex++; if (characterIndex === characters.length) { return true; } } } return false; } function getScopeNode(initialToken, position, sourceFile) { var scope = initialToken; while (scope && !ts.positionBelongsToNode(scope, position, sourceFile)) { scope = scope.parent; } return scope; } function isCompletionListBlocker(contextToken) { var start = ts.timestamp(); var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) || isSolelyIdentifierDefinitionLocation(contextToken) || isDotOfNumericLiteral(contextToken) || isInJsxText(contextToken); log("getCompletionsAtPosition: isCompletionListBlocker: " + (ts.timestamp() - start)); return result; } function isInJsxText(contextToken) { if (contextToken.kind === 10) { return true; } if (contextToken.kind === 29 && contextToken.parent) { if (contextToken.parent.kind === 257) { return true; } if (contextToken.parent.kind === 258 || contextToken.parent.kind === 256) { return !!contextToken.parent.parent && contextToken.parent.parent.kind === 255; } } return false; } function isNewIdentifierDefinitionLocation(previousToken) { if (previousToken) { var containingNodeKind = previousToken.parent.kind; switch (previousToken.kind) { case 26: return containingNodeKind === 187 || containingNodeKind === 155 || containingNodeKind === 188 || containingNodeKind === 183 || containingNodeKind === 200 || containingNodeKind === 163; case 19: return containingNodeKind === 187 || containingNodeKind === 155 || containingNodeKind === 188 || containingNodeKind === 191 || containingNodeKind === 173; case 21: return containingNodeKind === 183 || containingNodeKind === 160 || containingNodeKind === 147; case 129: case 130: return true; case 23: return containingNodeKind === 239; case 17: return containingNodeKind === 235; case 58: return containingNodeKind === 232 || containingNodeKind === 200; case 14: return containingNodeKind === 202; case 15: return containingNodeKind === 211; case 114: case 112: case 113: return containingNodeKind === 152; } switch (keywordForNode(previousToken)) { case 114: case 113: case 112: return true; } } return false; } function isInStringOrRegularExpressionOrTemplateLiteral(contextToken) { return (ts.isRegularExpressionLiteral(contextToken) || ts.isStringTextContainingNode(contextToken)) && (ts.rangeContainsPositionExclusive(ts.createTextRangeFromSpan(ts.createTextSpanFromNode(contextToken)), position) || position === contextToken.end && (!!contextToken.isUnterminated || ts.isRegularExpressionLiteral(contextToken))); } function tryGetObjectLikeCompletionSymbols() { var objectLikeContainer = tryGetObjectLikeCompletionContainer(contextToken); if (!objectLikeContainer) return 0; completionKind = 0; var typeMembers; var existingMembers; if (objectLikeContainer.kind === 184) { var typeForObject = typeChecker.getContextualType(objectLikeContainer); if (!typeForObject) return 2; isNewIdentifierLocation = hasIndexSignature(typeForObject); typeMembers = getPropertiesForCompletion(typeForObject, typeChecker, false); existingMembers = objectLikeContainer.properties; } else { ts.Debug.assert(objectLikeContainer.kind === 180); isNewIdentifierLocation = false; var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent); if (!ts.isVariableLike(rootDeclaration)) return ts.Debug.fail("Root declaration is not variable-like."); var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 222; if (!canGetType && rootDeclaration.kind === 149) { if (ts.isExpression(rootDeclaration.parent)) { canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); } else if (rootDeclaration.parent.kind === 154 || rootDeclaration.parent.kind === 157) { canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); } } if (canGetType) { var typeForObject = typeChecker.getTypeAtLocation(objectLikeContainer); if (!typeForObject) return 2; typeMembers = typeChecker.getPropertiesOfType(typeForObject).filter(function (symbol) { return !(ts.getDeclarationModifierFlagsFromSymbol(symbol) & 24); }); existingMembers = objectLikeContainer.elements; } } if (typeMembers && typeMembers.length > 0) { symbols = filterObjectMembersList(typeMembers, ts.Debug.assertDefined(existingMembers)); } return 1; } function tryGetImportOrExportClauseCompletionSymbols() { var namedImportsOrExports = contextToken && (contextToken.kind === 17 || contextToken.kind === 26) ? ts.tryCast(contextToken.parent, ts.isNamedImportsOrExports) : undefined; if (!namedImportsOrExports) return 0; var moduleSpecifier = (namedImportsOrExports.kind === 247 ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier; var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); if (!moduleSpecifierSymbol) return 2; completionKind = 3; isNewIdentifierLocation = false; var exports = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol); var existing = ts.arrayToSet(namedImportsOrExports.elements, function (n) { return isCurrentlyEditingNode(n) ? undefined : (n.propertyName || n.name).escapedText; }); symbols = exports.filter(function (e) { return e.escapedName !== "default" && !existing.get(e.escapedName); }); return 1; } function tryGetClassLikeCompletionSymbols() { var decl = tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location); if (!decl) return 0; completionKind = 3; isNewIdentifierLocation = true; keywordFilters = ts.isClassLike(decl) ? 1 : 2; if (!ts.isClassLike(decl)) return 1; var classElement = contextToken.parent; var classElementModifierFlags = ts.isClassElement(classElement) ? ts.getModifierFlags(classElement) : 0; if (contextToken.kind === 71 && !isCurrentlyEditingNode(contextToken)) { switch (contextToken.getText()) { case "private": classElementModifierFlags = classElementModifierFlags | 8; break; case "static": classElementModifierFlags = classElementModifierFlags | 32; break; } } if (!(classElementModifierFlags & 8)) { var baseSymbols = ts.flatMap(ts.getAllSuperTypeNodes(decl), function (baseTypeNode) { var type = typeChecker.getTypeAtLocation(baseTypeNode); return typeChecker.getPropertiesOfType(classElementModifierFlags & 32 ? typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl) : type); }); symbols = filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags); } return 1; } function tryGetObjectLikeCompletionContainer(contextToken) { if (contextToken) { switch (contextToken.kind) { case 17: case 26: var parent = contextToken.parent; if (ts.isObjectLiteralExpression(parent) || ts.isObjectBindingPattern(parent)) { return parent; } break; } } return undefined; } function isConstructorParameterCompletion(node) { return !!node.parent && ts.isParameter(node.parent) && ts.isConstructorDeclaration(node.parent.parent) && (ts.isParameterPropertyModifier(node.kind) || ts.isDeclarationName(node)); } function tryGetConstructorLikeCompletionContainer(contextToken) { if (contextToken) { var parent = contextToken.parent; switch (contextToken.kind) { case 19: case 26: return ts.isConstructorDeclaration(contextToken.parent) ? contextToken.parent : undefined; default: if (isConstructorParameterCompletion(contextToken)) { return parent.parent; } } } return undefined; } function tryGetFunctionLikeBodyCompletionContainer(contextToken) { if (contextToken) { var prev_1; var container = ts.findAncestor(contextToken.parent, function (node) { if (ts.isClassLike(node)) { return "quit"; } if (ts.isFunctionLikeDeclaration(node) && prev_1 === node.body) { return true; } prev_1 = node; return false; }); return container && container; } } function tryGetContainingJsxElement(contextToken) { if (contextToken) { var parent = contextToken.parent; switch (contextToken.kind) { case 28: case 41: case 71: case 185: case 263: case 262: case 264: if (parent && (parent.kind === 256 || parent.kind === 257)) { return parent; } else if (parent.kind === 262) { return parent.parent.parent; } break; case 9: if (parent && ((parent.kind === 262) || (parent.kind === 264))) { return parent.parent.parent; } break; case 18: if (parent && parent.kind === 265 && parent.parent && parent.parent.kind === 262) { return parent.parent.parent.parent; } if (parent && parent.kind === 264) { return parent.parent.parent; } break; } } return undefined; } function isSolelyIdentifierDefinitionLocation(contextToken) { var parent = contextToken.parent; var containingNodeKind = parent.kind; switch (contextToken.kind) { case 26: return containingNodeKind === 232 || containingNodeKind === 233 || containingNodeKind === 214 || containingNodeKind === 238 || isFunctionLikeButNotConstructor(containingNodeKind) || containingNodeKind === 236 || containingNodeKind === 181 || containingNodeKind === 237 || (ts.isClassLike(parent) && !!parent.typeParameters && parent.typeParameters.end >= contextToken.pos); case 23: return containingNodeKind === 181; case 56: return containingNodeKind === 182; case 21: return containingNodeKind === 181; case 19: return containingNodeKind === 269 || isFunctionLikeButNotConstructor(containingNodeKind); case 17: return containingNodeKind === 238; case 27: return containingNodeKind === 235 || containingNodeKind === 205 || containingNodeKind === 236 || containingNodeKind === 237 || ts.isFunctionLikeKind(containingNodeKind); case 115: return containingNodeKind === 152 && !ts.isClassLike(parent.parent); case 24: return containingNodeKind === 149 || (!!parent.parent && parent.parent.kind === 181); case 114: case 112: case 113: return containingNodeKind === 149 && !ts.isConstructorDeclaration(parent.parent); case 118: return containingNodeKind === 248 || containingNodeKind === 252 || containingNodeKind === 246; case 125: case 136: if (isFromObjectTypeDeclaration(contextToken)) { return false; } case 75: case 83: case 109: case 89: case 104: case 91: case 110: case 76: case 116: case 139: return true; } if (isClassMemberCompletionKeyword(keywordForNode(contextToken)) && isFromObjectTypeDeclaration(contextToken)) { return false; } if (isConstructorParameterCompletion(contextToken)) { if (!ts.isIdentifier(contextToken) || ts.isParameterPropertyModifier(keywordForNode(contextToken)) || isCurrentlyEditingNode(contextToken)) { return false; } } switch (keywordForNode(contextToken)) { case 117: case 120: case 75: case 76: case 124: case 83: case 89: case 109: case 110: case 112: case 113: case 114: case 115: case 104: case 116: return true; } return ts.isDeclarationName(contextToken) && !ts.isJsxAttribute(contextToken.parent) && !(ts.isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end)); } function isFunctionLikeButNotConstructor(kind) { return ts.isFunctionLikeKind(kind) && kind !== 155; } function isDotOfNumericLiteral(contextToken) { if (contextToken.kind === 8) { var text = contextToken.getFullText(); return text.charAt(text.length - 1) === "."; } return false; } function filterObjectMembersList(contextualMemberSymbols, existingMembers) { if (existingMembers.length === 0) { return contextualMemberSymbols; } var existingMemberNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) { var m = existingMembers_1[_i]; if (m.kind !== 270 && m.kind !== 271 && m.kind !== 182 && m.kind !== 154 && m.kind !== 156 && m.kind !== 157) { continue; } if (isCurrentlyEditingNode(m)) { continue; } var existingName = void 0; if (ts.isBindingElement(m) && m.propertyName) { if (m.propertyName.kind === 71) { existingName = m.propertyName.escapedText; } } else { var name = ts.getNameOfDeclaration(m); existingName = ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined; } existingMemberNames.set(existingName, true); } return contextualMemberSymbols.filter(function (m) { return !existingMemberNames.get(m.escapedName); }); } function filterClassMembersList(baseSymbols, existingMembers, currentClassElementModifierFlags) { var existingMemberNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, existingMembers_2 = existingMembers; _i < existingMembers_2.length; _i++) { var m = existingMembers_2[_i]; if (m.kind !== 152 && m.kind !== 154 && m.kind !== 156 && m.kind !== 157) { continue; } if (isCurrentlyEditingNode(m)) { continue; } if (ts.hasModifier(m, 8)) { continue; } if (ts.hasModifier(m, 32) !== !!(currentClassElementModifierFlags & 32)) { continue; } var existingName = ts.getPropertyNameForPropertyNameNode(m.name); if (existingName) { existingMemberNames.set(existingName, true); } } return baseSymbols.filter(function (propertySymbol) { return !existingMemberNames.has(propertySymbol.escapedName) && !!propertySymbol.declarations && !(ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & 8); }); } function filterJsxAttributes(symbols, attributes) { var seenNames = ts.createUnderscoreEscapedMap(); for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) { var attr = attributes_1[_i]; if (isCurrentlyEditingNode(attr)) { continue; } if (attr.kind === 262) { seenNames.set(attr.name.escapedText, true); } } return symbols.filter(function (a) { return !seenNames.get(a.escapedName); }); } function isCurrentlyEditingNode(node) { return node.getStart(sourceFile) <= position && position <= node.getEnd(); } } function getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind) { var name = getSymbolName(symbol, origin, target); if (name === undefined || symbol.flags & 1536 && ts.startsWithQuote(name) || ts.isKnownSymbol(symbol)) { return undefined; } var validIdentiferResult = { name: name, needsConvertPropertyAccess: false }; if (ts.isIdentifierText(name, target)) return validIdentiferResult; switch (kind) { case 3: return undefined; case 0: return { name: JSON.stringify(name), needsConvertPropertyAccess: false }; case 2: case 1: return name.charCodeAt(0) === 32 ? undefined : { name: name, needsConvertPropertyAccess: true }; case 5: case 4: return validIdentiferResult; default: ts.Debug.assertNever(kind); } } var _keywordCompletions = []; var allKeywordsCompletions = ts.memoize(function () { var res = []; for (var i = 72; i <= 145; i++) { res.push({ name: ts.tokenToString(i), kind: "keyword", kindModifiers: "", sortText: "0" }); } return res; }); function getKeywordCompletions(keywordFilter) { return _keywordCompletions[keywordFilter] || (_keywordCompletions[keywordFilter] = allKeywordsCompletions().filter(function (entry) { var kind = ts.stringToToken(entry.name); switch (keywordFilter) { case 0: return kind !== 140; case 1: return isClassMemberCompletionKeyword(kind); case 2: return isInterfaceOrTypeLiteralCompletionKeyword(kind); case 3: return ts.isParameterPropertyModifier(kind); case 4: return !isClassMemberCompletionKeyword(kind); case 5: return ts.isTypeKeyword(kind); default: return ts.Debug.assertNever(keywordFilter); } })); } function isInterfaceOrTypeLiteralCompletionKeyword(kind) { return kind === 132; } function isClassMemberCompletionKeyword(kind) { switch (kind) { case 117: case 123: case 125: case 136: case 120: return true; default: return ts.isClassMemberModifier(kind); } } function keywordForNode(node) { return ts.isIdentifier(node) ? node.originalKeywordKind || 0 : node.kind; } function isEqualityOperatorKind(kind) { switch (kind) { case 34: case 32: case 35: case 33: return true; default: return false; } } function getJsDocTagAtPosition(node, position) { var jsDoc = getJsDocHavingNode(node).jsDoc; if (!jsDoc) return undefined; for (var _i = 0, jsDoc_1 = jsDoc; _i < jsDoc_1.length; _i++) { var _a = jsDoc_1[_i], pos = _a.pos, end = _a.end, tags = _a.tags; if (!tags || position < pos || position > end) continue; for (var i = tags.length - 1; i >= 0; i--) { var tag = tags[i]; if (position >= tag.pos) { return tag; } } } } function getJsDocHavingNode(node) { if (!ts.isToken(node)) return node; switch (node.kind) { case 104: case 110: case 76: return node.parent.parent; default: return node.parent; } } function getPropertiesForCompletion(type, checker, isForAccess) { if (!(type.isUnion())) { return ts.Debug.assertEachDefined(type.getApparentProperties(), "getApparentProperties() should all be defined"); } var filteredTypes = isForAccess ? type.types : type.types.filter(function (memberType) { return !(memberType.flags & 32764 || checker.isArrayLikeType(memberType) || ts.typeHasCallOrConstructSignatures(memberType, checker)); }); return ts.Debug.assertEachDefined(checker.getAllPossiblePropertiesOfTypes(filteredTypes), "getAllPossiblePropertiesOfTypes() should all be defined"); } function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location) { switch (location.kind) { case 300: return ts.tryCast(location.parent, ts.isObjectTypeDeclaration); case 1: var cls = ts.tryCast(ts.lastOrUndefined(ts.cast(location.parent, ts.isSourceFile).statements), ts.isObjectTypeDeclaration); if (cls && !ts.findChildOfKind(cls, 18, sourceFile)) { return cls; } } if (!contextToken) return undefined; switch (contextToken.kind) { case 25: case 18: return isFromObjectTypeDeclaration(location) && location.parent.name === location ? location.parent.parent : ts.tryCast(location, ts.isObjectTypeDeclaration); case 17: case 26: return ts.tryCast(contextToken.parent, ts.isObjectTypeDeclaration); default: if (!isFromObjectTypeDeclaration(contextToken)) return undefined; var isValidKeyword = ts.isClassLike(contextToken.parent.parent) ? isClassMemberCompletionKeyword : isInterfaceOrTypeLiteralCompletionKeyword; return (isValidKeyword(contextToken.kind) || ts.isIdentifier(contextToken) && isValidKeyword(ts.stringToToken(contextToken.text))) ? contextToken.parent.parent : undefined; } } function isFromObjectTypeDeclaration(node) { return node.parent && ts.isClassOrTypeElement(node.parent) && ts.isObjectTypeDeclaration(node.parent.parent); } function hasIndexSignature(type) { return !!type.getStringIndexType() || !!type.getNumberIndexType(); } function isValidTrigger(sourceFile, triggerCharacter, contextToken, position) { switch (triggerCharacter) { case ".": case "@": return true; case '"': case "'": case "`": return isStringLiteralOrTemplate(contextToken) && position === contextToken.getStart(sourceFile) + 1; case "<": return contextToken.kind === 27 && contextToken.parent.kind !== 200; case "/": return ts.isStringLiteralLike(contextToken) ? !!ts.tryGetImportFromModuleSpecifier(contextToken) : contextToken.kind === 41 && ts.isJsxClosingElement(contextToken.parent); default: return ts.Debug.assertNever(triggerCharacter); } } function isStringLiteralOrTemplate(node) { switch (node.kind) { case 9: case 13: case 202: case 189: return true; default: return false; } } })(Completions = ts.Completions || (ts.Completions = {})); })(ts || (ts = {})); var ts; (function (ts) { var DocumentHighlights; (function (DocumentHighlights) { function getDocumentHighlights(program, cancellationToken, sourceFile, position, sourceFilesToSearch) { var node = ts.getTouchingPropertyName(sourceFile, position); if (node.parent && (ts.isJsxOpeningElement(node.parent) && node.parent.tagName === node || ts.isJsxClosingElement(node.parent))) { var _a = node.parent.parent, openingElement = _a.openingElement, closingElement = _a.closingElement; var highlightSpans = [openingElement, closingElement].map(function (_a) { var tagName = _a.tagName; return getHighlightSpanForNode(tagName, sourceFile); }); return [{ fileName: sourceFile.fileName, highlightSpans: highlightSpans }]; } return getSemanticDocumentHighlights(position, node, program, cancellationToken, sourceFilesToSearch) || getSyntacticDocumentHighlights(node, sourceFile); } DocumentHighlights.getDocumentHighlights = getDocumentHighlights; function getHighlightSpanForNode(node, sourceFile) { return { fileName: sourceFile.fileName, textSpan: ts.createTextSpanFromNode(node, sourceFile), kind: "none" }; } function getSemanticDocumentHighlights(position, node, program, cancellationToken, sourceFilesToSearch) { var sourceFilesSet = ts.arrayToSet(sourceFilesToSearch, function (f) { return f.fileName; }); var referenceEntries = ts.FindAllReferences.getReferenceEntriesForNode(position, node, program, sourceFilesToSearch, cancellationToken, undefined, sourceFilesSet); if (!referenceEntries) return undefined; var map = ts.arrayToMultiMap(referenceEntries.map(ts.FindAllReferences.toHighlightSpan), function (e) { return e.fileName; }, function (e) { return e.span; }); return ts.arrayFrom(map.entries(), function (_a) { var fileName = _a[0], highlightSpans = _a[1]; if (!sourceFilesSet.has(fileName)) { ts.Debug.assert(program.redirectTargetsSet.has(fileName)); var redirectTarget_1 = program.getSourceFile(fileName); var redirect = ts.find(sourceFilesToSearch, function (f) { return !!f.redirectInfo && f.redirectInfo.redirectTarget === redirectTarget_1; }); fileName = redirect.fileName; ts.Debug.assert(sourceFilesSet.has(fileName)); } return { fileName: fileName, highlightSpans: highlightSpans }; }); } function getSyntacticDocumentHighlights(node, sourceFile) { var highlightSpans = getHighlightSpans(node, sourceFile); return highlightSpans && [{ fileName: sourceFile.fileName, highlightSpans: highlightSpans }]; } function getHighlightSpans(node, sourceFile) { switch (node.kind) { case 90: case 82: return ts.isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : undefined; case 96: return useParent(node.parent, ts.isReturnStatement, getReturnOccurrences); case 100: return useParent(node.parent, ts.isThrowStatement, getThrowOccurrences); case 102: case 74: case 87: var tryStatement = node.kind === 74 ? node.parent.parent : node.parent; return useParent(tryStatement, ts.isTryStatement, getTryCatchFinallyOccurrences); case 98: return useParent(node.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences); case 73: case 79: return useParent(node.parent.parent.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences); case 72: case 77: return useParent(node.parent, ts.isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences); case 88: case 106: case 81: return useParent(node.parent, function (n) { return ts.isIterationStatement(n, true); }, getLoopBreakContinueOccurrences); case 123: return getFromAllDeclarations(ts.isConstructorDeclaration, [123]); case 125: case 136: return getFromAllDeclarations(ts.isAccessor, [125, 136]); case 121: return useParent(node.parent, ts.isAwaitExpression, getAsyncAndAwaitOccurrences); case 120: return highlightSpans(getAsyncAndAwaitOccurrences(node)); case 116: return highlightSpans(getYieldOccurrences(node)); default: return ts.isModifierKind(node.kind) && (ts.isDeclaration(node.parent) || ts.isVariableStatement(node.parent)) ? highlightSpans(getModifierOccurrences(node.kind, node.parent)) : undefined; } function getFromAllDeclarations(nodeTest, keywords) { return useParent(node.parent, nodeTest, function (decl) { return ts.mapDefined(decl.symbol.declarations, function (d) { return nodeTest(d) ? ts.find(d.getChildren(sourceFile), function (c) { return ts.contains(keywords, c.kind); }) : undefined; }); }); } function useParent(node, nodeTest, getNodes) { return nodeTest(node) ? highlightSpans(getNodes(node, sourceFile)) : undefined; } function highlightSpans(nodes) { return nodes && nodes.map(function (node) { return getHighlightSpanForNode(node, sourceFile); }); } } function aggregateOwnedThrowStatements(node) { if (ts.isThrowStatement(node)) { return [node]; } else if (ts.isTryStatement(node)) { return ts.concatenate(node.catchClause ? aggregateOwnedThrowStatements(node.catchClause) : node.tryBlock && aggregateOwnedThrowStatements(node.tryBlock), node.finallyBlock && aggregateOwnedThrowStatements(node.finallyBlock)); } return ts.isFunctionLike(node) ? undefined : flatMapChildren(node, aggregateOwnedThrowStatements); } function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { var parent = child.parent; if (ts.isFunctionBlock(parent) || parent.kind === 274) { return parent; } if (ts.isTryStatement(parent) && parent.tryBlock === child && parent.catchClause) { return child; } child = parent; } return undefined; } function aggregateAllBreakAndContinueStatements(node) { return ts.isBreakOrContinueStatement(node) ? [node] : ts.isFunctionLike(node) ? undefined : flatMapChildren(node, aggregateAllBreakAndContinueStatements); } function flatMapChildren(node, cb) { var result = []; node.forEachChild(function (child) { var value = cb(child); if (value !== undefined) { result.push.apply(result, ts.toArray(value)); } }); return result; } function ownsBreakOrContinueStatement(owner, statement) { var actualOwner = getBreakOrContinueOwner(statement); return !!actualOwner && actualOwner === owner; } function getBreakOrContinueOwner(statement) { return ts.findAncestor(statement, function (node) { switch (node.kind) { case 227: if (statement.kind === 223) { return false; } case 220: case 221: case 222: case 219: case 218: return !statement.label || isLabeledBy(node, statement.label.escapedText); default: return ts.isFunctionLike(node) && "quit"; } }); } function getModifierOccurrences(modifier, declaration) { var modifierFlag = ts.modifierToFlag(modifier); return ts.mapDefined(getNodesToSearchForModifier(declaration, modifierFlag), function (node) { if (ts.getModifierFlags(node) & modifierFlag) { var mod = ts.find(node.modifiers, function (m) { return m.kind === modifier; }); ts.Debug.assert(!!mod); return mod; } }); } function getNodesToSearchForModifier(declaration, modifierFlag) { var container = declaration.parent; switch (container.kind) { case 240: case 274: case 213: case 266: case 267: if (modifierFlag & 128 && ts.isClassDeclaration(declaration)) { return declaration.members.concat([declaration]); } else { return container.statements; } case 155: case 154: case 234: return container.parameters.concat((ts.isClassLike(container.parent) ? container.parent.members : [])); case 235: case 205: var nodes = container.members; if (modifierFlag & 28) { var constructor = ts.find(container.members, ts.isConstructorDeclaration); if (constructor) { return nodes.concat(constructor.parameters); } } else if (modifierFlag & 128) { return nodes.concat([container]); } return nodes; default: ts.Debug.assertNever(container, "Invalid container kind."); } } function pushKeywordIf(keywordList, token) { var expected = []; for (var _i = 2; _i < arguments.length; _i++) { expected[_i - 2] = arguments[_i]; } if (token && ts.contains(expected, token.kind)) { keywordList.push(token); return true; } return false; } function getLoopBreakContinueOccurrences(loopNode) { var keywords = []; if (pushKeywordIf(keywords, loopNode.getFirstToken(), 88, 106, 81)) { if (loopNode.kind === 218) { var loopTokens = loopNode.getChildren(); for (var i = loopTokens.length - 1; i >= 0; i--) { if (pushKeywordIf(keywords, loopTokens[i], 106)) { break; } } } } ts.forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), function (statement) { if (ownsBreakOrContinueStatement(loopNode, statement)) { pushKeywordIf(keywords, statement.getFirstToken(), 72, 77); } }); return keywords; } function getBreakOrContinueStatementOccurrences(breakOrContinueStatement) { var owner = getBreakOrContinueOwner(breakOrContinueStatement); if (owner) { switch (owner.kind) { case 220: case 221: case 222: case 218: case 219: return getLoopBreakContinueOccurrences(owner); case 227: return getSwitchCaseDefaultOccurrences(owner); } } return undefined; } function getSwitchCaseDefaultOccurrences(switchStatement) { var keywords = []; pushKeywordIf(keywords, switchStatement.getFirstToken(), 98); ts.forEach(switchStatement.caseBlock.clauses, function (clause) { pushKeywordIf(keywords, clause.getFirstToken(), 73, 79); ts.forEach(aggregateAllBreakAndContinueStatements(clause), function (statement) { if (ownsBreakOrContinueStatement(switchStatement, statement)) { pushKeywordIf(keywords, statement.getFirstToken(), 72); } }); }); return keywords; } function getTryCatchFinallyOccurrences(tryStatement, sourceFile) { var keywords = []; pushKeywordIf(keywords, tryStatement.getFirstToken(), 102); if (tryStatement.catchClause) { pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 74); } if (tryStatement.finallyBlock) { var finallyKeyword = ts.findChildOfKind(tryStatement, 87, sourceFile); pushKeywordIf(keywords, finallyKeyword, 87); } return keywords; } function getThrowOccurrences(throwStatement, sourceFile) { var owner = getThrowStatementOwner(throwStatement); if (!owner) { return undefined; } var keywords = []; ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) { keywords.push(ts.findChildOfKind(throwStatement, 100, sourceFile)); }); if (ts.isFunctionBlock(owner)) { ts.forEachReturnStatement(owner, function (returnStatement) { keywords.push(ts.findChildOfKind(returnStatement, 96, sourceFile)); }); } return keywords; } function getReturnOccurrences(returnStatement, sourceFile) { var func = ts.getContainingFunction(returnStatement); if (!func) { return undefined; } var keywords = []; ts.forEachReturnStatement(ts.cast(func.body, ts.isBlock), function (returnStatement) { keywords.push(ts.findChildOfKind(returnStatement, 96, sourceFile)); }); ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) { keywords.push(ts.findChildOfKind(throwStatement, 100, sourceFile)); }); return keywords; } function getAsyncAndAwaitOccurrences(node) { var func = ts.getContainingFunction(node); if (!func) { return undefined; } var keywords = []; if (func.modifiers) { func.modifiers.forEach(function (modifier) { pushKeywordIf(keywords, modifier, 120); }); } ts.forEachChild(func, function (child) { traverseWithoutCrossingFunction(child, function (node) { if (ts.isAwaitExpression(node)) { pushKeywordIf(keywords, node.getFirstToken(), 121); } }); }); return keywords; } function getYieldOccurrences(node) { var func = ts.getContainingFunction(node); if (!func) { return undefined; } var keywords = []; ts.forEachChild(func, function (child) { traverseWithoutCrossingFunction(child, function (node) { if (ts.isYieldExpression(node)) { pushKeywordIf(keywords, node.getFirstToken(), 116); } }); }); return keywords; } function traverseWithoutCrossingFunction(node, cb) { cb(node); if (!ts.isFunctionLike(node) && !ts.isClassLike(node) && !ts.isInterfaceDeclaration(node) && !ts.isModuleDeclaration(node) && !ts.isTypeAliasDeclaration(node) && !ts.isTypeNode(node)) { ts.forEachChild(node, function (child) { return traverseWithoutCrossingFunction(child, cb); }); } } function getIfElseOccurrences(ifStatement, sourceFile) { var keywords = getIfElseKeywords(ifStatement, sourceFile); var result = []; for (var i = 0; i < keywords.length; i++) { if (keywords[i].kind === 82 && i < keywords.length - 1) { var elseKeyword = keywords[i]; var ifKeyword = keywords[i + 1]; var shouldCombineElseAndIf = true; for (var j = ifKeyword.getStart(sourceFile) - 1; j >= elseKeyword.end; j--) { if (!ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombineElseAndIf = false; break; } } if (shouldCombineElseAndIf) { result.push({ fileName: sourceFile.fileName, textSpan: ts.createTextSpanFromBounds(elseKeyword.getStart(), ifKeyword.end), kind: "reference" }); i++; continue; } } result.push(getHighlightSpanForNode(keywords[i], sourceFile)); } return result; } function getIfElseKeywords(ifStatement, sourceFile) { var keywords = []; while (ts.isIfStatement(ifStatement.parent) && ifStatement.parent.elseStatement === ifStatement) { ifStatement = ifStatement.parent; } while (true) { var children = ifStatement.getChildren(sourceFile); pushKeywordIf(keywords, children[0], 90); for (var i = children.length - 1; i >= 0; i--) { if (pushKeywordIf(keywords, children[i], 82)) { break; } } if (!ifStatement.elseStatement || !ts.isIfStatement(ifStatement.elseStatement)) { break; } ifStatement = ifStatement.elseStatement; } return keywords; } function isLabeledBy(node, labelName) { return !!ts.findAncestor(node.parent, function (owner) { return !ts.isLabeledStatement(owner) ? "quit" : owner.label.escapedText === labelName; }); } })(DocumentHighlights = ts.DocumentHighlights || (ts.DocumentHighlights = {})); })(ts || (ts = {})); var ts; (function (ts) { function createDocumentRegistry(useCaseSensitiveFileNames, currentDirectory) { return createDocumentRegistryInternal(useCaseSensitiveFileNames, currentDirectory); } ts.createDocumentRegistry = createDocumentRegistry; function createDocumentRegistryInternal(useCaseSensitiveFileNames, currentDirectory, externalCache) { if (currentDirectory === void 0) { currentDirectory = ""; } var buckets = ts.createMap(); var getCanonicalFileName = ts.createGetCanonicalFileName(!!useCaseSensitiveFileNames); function getKeyForCompilationSettings(settings) { return "_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + JSON.stringify(settings.typeRoots) + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths); } function getBucketForCompilationSettings(key, createIfMissing) { var bucket = buckets.get(key); if (!bucket && createIfMissing) { buckets.set(key, bucket = ts.createMap()); } return bucket; } function reportStats() { var bucketInfoArray = ts.arrayFrom(buckets.keys()).filter(function (name) { return name && name.charAt(0) === "_"; }).map(function (name) { var entries = buckets.get(name); var sourceFiles = []; entries.forEach(function (entry, name) { sourceFiles.push({ name: name, refCount: entry.languageServiceRefCount }); }); sourceFiles.sort(function (x, y) { return y.refCount - x.refCount; }); return { bucket: name, sourceFiles: sourceFiles }; }); return JSON.stringify(bucketInfoArray, undefined, 2); } function acquireDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var key = getKeyForCompilationSettings(compilationSettings); return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); } function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, true, scriptKind); } function updateDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var key = getKeyForCompilationSettings(compilationSettings); return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); } function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, false, scriptKind); } function acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, acquiring, scriptKind) { var bucket = getBucketForCompilationSettings(key, true); var entry = bucket.get(path); var scriptTarget = scriptKind === 6 ? 100 : compilationSettings.target; if (!entry && externalCache) { var sourceFile = externalCache.getDocument(key, path); if (sourceFile) { ts.Debug.assert(acquiring); entry = { sourceFile: sourceFile, languageServiceRefCount: 0 }; bucket.set(path, entry); } } if (!entry) { var sourceFile = ts.createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, false, scriptKind); if (externalCache) { externalCache.setDocument(key, path, sourceFile); } entry = { sourceFile: sourceFile, languageServiceRefCount: 1, }; bucket.set(path, entry); } else { if (entry.sourceFile.version !== version) { entry.sourceFile = ts.updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version, scriptSnapshot.getChangeRange(entry.sourceFile.scriptSnapshot)); if (externalCache) { externalCache.setDocument(key, path, entry.sourceFile); } } if (acquiring) { entry.languageServiceRefCount++; } } ts.Debug.assert(entry.languageServiceRefCount !== 0); return entry.sourceFile; } function releaseDocument(fileName, compilationSettings) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var key = getKeyForCompilationSettings(compilationSettings); return releaseDocumentWithKey(path, key); } function releaseDocumentWithKey(path, key) { var bucket = getBucketForCompilationSettings(key, false); ts.Debug.assert(bucket !== undefined); var entry = bucket.get(path); entry.languageServiceRefCount--; ts.Debug.assert(entry.languageServiceRefCount >= 0); if (entry.languageServiceRefCount === 0) { bucket.delete(path); } } function getLanguageServiceRefCounts(path) { return ts.arrayFrom(buckets.entries(), function (_a) { var key = _a[0], bucket = _a[1]; var entry = bucket.get(path); return [key, entry && entry.languageServiceRefCount]; }); } return { acquireDocument: acquireDocument, acquireDocumentWithKey: acquireDocumentWithKey, updateDocument: updateDocument, updateDocumentWithKey: updateDocumentWithKey, releaseDocument: releaseDocument, releaseDocumentWithKey: releaseDocumentWithKey, getLanguageServiceRefCounts: getLanguageServiceRefCounts, reportStats: reportStats, getKeyForCompilationSettings: getKeyForCompilationSettings }; } ts.createDocumentRegistryInternal = createDocumentRegistryInternal; })(ts || (ts = {})); var ts; (function (ts) { var FindAllReferences; (function (FindAllReferences) { function createImportTracker(sourceFiles, sourceFilesSet, checker, cancellationToken) { var allDirectImports = getDirectImportsMap(sourceFiles, checker, cancellationToken); return function (exportSymbol, exportInfo, isForRename) { var _a = getImportersForExport(sourceFiles, sourceFilesSet, allDirectImports, exportInfo, checker, cancellationToken), directImports = _a.directImports, indirectUsers = _a.indirectUsers; return __assign({ indirectUsers: indirectUsers }, getSearchesFromDirectImports(directImports, exportSymbol, exportInfo.exportKind, checker, isForRename)); }; } FindAllReferences.createImportTracker = createImportTracker; var ExportKind; (function (ExportKind) { ExportKind[ExportKind["Named"] = 0] = "Named"; ExportKind[ExportKind["Default"] = 1] = "Default"; ExportKind[ExportKind["ExportEquals"] = 2] = "ExportEquals"; })(ExportKind = FindAllReferences.ExportKind || (FindAllReferences.ExportKind = {})); var ImportExport; (function (ImportExport) { ImportExport[ImportExport["Import"] = 0] = "Import"; ImportExport[ImportExport["Export"] = 1] = "Export"; })(ImportExport = FindAllReferences.ImportExport || (FindAllReferences.ImportExport = {})); function getImportersForExport(sourceFiles, sourceFilesSet, allDirectImports, _a, checker, cancellationToken) { var exportingModuleSymbol = _a.exportingModuleSymbol, exportKind = _a.exportKind; var markSeenDirectImport = ts.nodeSeenTracker(); var markSeenIndirectUser = ts.nodeSeenTracker(); var directImports = []; var isAvailableThroughGlobal = !!exportingModuleSymbol.globalExports; var indirectUserDeclarations = isAvailableThroughGlobal ? undefined : []; handleDirectImports(exportingModuleSymbol); return { directImports: directImports, indirectUsers: getIndirectUsers() }; function getIndirectUsers() { if (isAvailableThroughGlobal) { return sourceFiles; } for (var _i = 0, _a = exportingModuleSymbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (ts.isExternalModuleAugmentation(decl) && sourceFilesSet.has(decl.getSourceFile().fileName)) { addIndirectUser(decl); } } return indirectUserDeclarations.map(ts.getSourceFileOfNode); } function handleDirectImports(exportingModuleSymbol) { var theseDirectImports = getDirectImports(exportingModuleSymbol); if (theseDirectImports) { for (var _i = 0, theseDirectImports_1 = theseDirectImports; _i < theseDirectImports_1.length; _i++) { var direct = theseDirectImports_1[_i]; if (!markSeenDirectImport(direct)) { continue; } cancellationToken.throwIfCancellationRequested(); switch (direct.kind) { case 187: if (!isAvailableThroughGlobal) { var parent = direct.parent; if (exportKind === 2 && parent.kind === 232) { var name = parent.name; if (name.kind === 71) { directImports.push(name); break; } } addIndirectUser(direct.getSourceFile()); } break; case 71: break; case 243: handleNamespaceImport(direct, direct.name, ts.hasModifier(direct, 1), false); break; case 244: directImports.push(direct); var namedBindings = direct.importClause && direct.importClause.namedBindings; if (namedBindings && namedBindings.kind === 246) { handleNamespaceImport(direct, namedBindings.name, false, true); } else if (!isAvailableThroughGlobal && ts.isDefaultImport(direct)) { addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); } break; case 250: if (!direct.exportClause) { handleDirectImports(getContainingModuleSymbol(direct, checker)); } else { directImports.push(direct); } break; case 179: directImports.push(direct); break; default: ts.Debug.assertNever(direct, "Unexpected import kind: " + ts.Debug.showSyntaxKind(direct)); } } } } function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) { if (exportKind === 2) { if (!alreadyAddedDirect) directImports.push(importDeclaration); } else if (!isAvailableThroughGlobal) { var sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration); ts.Debug.assert(sourceFileLike.kind === 274 || sourceFileLike.kind === 239); if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) { addIndirectUsers(sourceFileLike); } else { addIndirectUser(sourceFileLike); } } } function addIndirectUser(sourceFileLike) { ts.Debug.assert(!isAvailableThroughGlobal); var isNew = markSeenIndirectUser(sourceFileLike); if (isNew) { indirectUserDeclarations.push(sourceFileLike); } return isNew; } function addIndirectUsers(sourceFileLike) { if (!addIndirectUser(sourceFileLike)) { return; } var moduleSymbol = checker.getMergedSymbol(sourceFileLike.symbol); ts.Debug.assert(!!(moduleSymbol.flags & 1536)); var directImports = getDirectImports(moduleSymbol); if (directImports) { for (var _i = 0, directImports_1 = directImports; _i < directImports_1.length; _i++) { var directImport = directImports_1[_i]; addIndirectUsers(getSourceFileLikeForImportDeclaration(directImport)); } } } function getDirectImports(moduleSymbol) { return allDirectImports.get(ts.getSymbolId(moduleSymbol).toString()); } } function getSearchesFromDirectImports(directImports, exportSymbol, exportKind, checker, isForRename) { var importSearches = []; var singleReferences = []; function addSearch(location, symbol) { importSearches.push([location, symbol]); } if (directImports) { for (var _i = 0, directImports_2 = directImports; _i < directImports_2.length; _i++) { var decl = directImports_2[_i]; handleImport(decl); } } return { importSearches: importSearches, singleReferences: singleReferences }; function handleImport(decl) { if (decl.kind === 243) { if (isExternalModuleImportEquals(decl)) { handleNamespaceImportLike(decl.name); } return; } if (decl.kind === 71) { handleNamespaceImportLike(decl); return; } if (decl.kind === 179) { if (decl.qualifier) { if (ts.isIdentifier(decl.qualifier) && decl.qualifier.escapedText === ts.symbolName(exportSymbol)) { singleReferences.push(decl.qualifier); } } else if (exportKind === 2) { singleReferences.push(decl.argument.literal); } return; } if (decl.moduleSpecifier.kind !== 9) { return; } if (decl.kind === 250) { searchForNamedImport(decl.exportClause); return; } var _a = decl.importClause || { name: undefined, namedBindings: undefined }, name = _a.name, namedBindings = _a.namedBindings; if (namedBindings) { switch (namedBindings.kind) { case 246: handleNamespaceImportLike(namedBindings.name); break; case 247: if (exportKind === 0 || exportKind === 1) { searchForNamedImport(namedBindings); } break; default: ts.Debug.assertNever(namedBindings); } } if (name && (exportKind === 1 || exportKind === 2) && (!isForRename || name.escapedText === ts.symbolEscapedNameNoDefault(exportSymbol))) { var defaultImportAlias = checker.getSymbolAtLocation(name); addSearch(name, defaultImportAlias); } } function handleNamespaceImportLike(importName) { if (exportKind === 2 && (!isForRename || isNameMatch(importName.escapedText))) { addSearch(importName, checker.getSymbolAtLocation(importName)); } } function searchForNamedImport(namedBindings) { if (!namedBindings) { return; } for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) { var element = _a[_i]; var name = element.name, propertyName = element.propertyName; if (!isNameMatch((propertyName || name).escapedText)) { continue; } if (propertyName) { singleReferences.push(propertyName); if (!isForRename || name.escapedText === exportSymbol.escapedName) { addSearch(name, checker.getSymbolAtLocation(name)); } } else { var localSymbol = element.kind === 252 && element.propertyName ? checker.getExportSpecifierLocalTargetSymbol(element) : checker.getSymbolAtLocation(name); addSearch(name, localSymbol); } } } function isNameMatch(name) { return name === exportSymbol.escapedName || exportKind !== 0 && name === "default"; } } function findNamespaceReExports(sourceFileLike, name, checker) { var namespaceImportSymbol = checker.getSymbolAtLocation(name); return !!forEachPossibleImportOrExportStatement(sourceFileLike, function (statement) { if (!ts.isExportDeclaration(statement)) return; var exportClause = statement.exportClause, moduleSpecifier = statement.moduleSpecifier; return !moduleSpecifier && exportClause && exportClause.elements.some(function (element) { return checker.getExportSpecifierLocalTargetSymbol(element) === namespaceImportSymbol; }); }); } function findModuleReferences(program, sourceFiles, searchModuleSymbol) { var refs = []; var checker = program.getTypeChecker(); for (var _i = 0, sourceFiles_5 = sourceFiles; _i < sourceFiles_5.length; _i++) { var referencingFile = sourceFiles_5[_i]; var searchSourceFile = searchModuleSymbol.valueDeclaration; if (searchSourceFile.kind === 274) { for (var _a = 0, _b = referencingFile.referencedFiles; _a < _b.length; _a++) { var ref = _b[_a]; if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) { refs.push({ kind: "reference", referencingFile: referencingFile, ref: ref }); } } for (var _c = 0, _d = referencingFile.typeReferenceDirectives; _c < _d.length; _c++) { var ref = _d[_c]; var referenced = program.getResolvedTypeReferenceDirectives().get(ref.fileName); if (referenced !== undefined && referenced.resolvedFileName === searchSourceFile.fileName) { refs.push({ kind: "reference", referencingFile: referencingFile, ref: ref }); } } } forEachImport(referencingFile, function (_importDecl, moduleSpecifier) { var moduleSymbol = checker.getSymbolAtLocation(moduleSpecifier); if (moduleSymbol === searchModuleSymbol) { refs.push({ kind: "import", literal: moduleSpecifier }); } }); } return refs; } FindAllReferences.findModuleReferences = findModuleReferences; function getDirectImportsMap(sourceFiles, checker, cancellationToken) { var map = ts.createMap(); for (var _i = 0, sourceFiles_6 = sourceFiles; _i < sourceFiles_6.length; _i++) { var sourceFile = sourceFiles_6[_i]; cancellationToken.throwIfCancellationRequested(); forEachImport(sourceFile, function (importDecl, moduleSpecifier) { var moduleSymbol = checker.getSymbolAtLocation(moduleSpecifier); if (moduleSymbol) { var id = ts.getSymbolId(moduleSymbol).toString(); var imports = map.get(id); if (!imports) { map.set(id, imports = []); } imports.push(importDecl); } }); } return map; } function forEachPossibleImportOrExportStatement(sourceFileLike, action) { return ts.forEach(sourceFileLike.kind === 274 ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) { return action(statement) || (isAmbientModuleDeclaration(statement) && ts.forEach(statement.body && statement.body.statements, action)); }); } function forEachImport(sourceFile, action) { if (sourceFile.externalModuleIndicator || sourceFile.imports !== undefined) { for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) { var i = _a[_i]; action(ts.importFromModuleSpecifier(i), i); } } else { forEachPossibleImportOrExportStatement(sourceFile, function (statement) { switch (statement.kind) { case 250: case 244: { var decl = statement; if (decl.moduleSpecifier && ts.isStringLiteral(decl.moduleSpecifier)) { action(decl, decl.moduleSpecifier); } break; } case 243: { var decl = statement; if (isExternalModuleImportEquals(decl)) { action(decl, decl.moduleReference.expression); } break; } } }); } } function getImportOrExportSymbol(node, symbol, checker, comingFromExport) { return comingFromExport ? getExport() : getExport() || getImport(); function getExport() { var parent = node.parent; var grandParent = parent.parent; if (symbol.exportSymbol) { if (parent.kind === 185) { return symbol.declarations.some(function (d) { return d === parent; }) && ts.isBinaryExpression(grandParent) ? getSpecialPropertyExport(grandParent, false) : undefined; } else { return exportInfo(symbol.exportSymbol, getExportKindForDeclaration(parent)); } } else { var exportNode = getExportNode(parent, node); if (exportNode && ts.hasModifier(exportNode, 1)) { if (ts.isImportEqualsDeclaration(exportNode) && exportNode.moduleReference === node) { if (comingFromExport) { return undefined; } var lhsSymbol = checker.getSymbolAtLocation(exportNode.name); return { kind: 0, symbol: lhsSymbol, isNamedImport: false }; } else { return exportInfo(symbol, getExportKindForDeclaration(exportNode)); } } else if (ts.isExportAssignment(parent)) { return getExportAssignmentExport(parent); } else if (ts.isExportAssignment(grandParent)) { return getExportAssignmentExport(grandParent); } else if (ts.isBinaryExpression(parent)) { return getSpecialPropertyExport(parent, true); } else if (ts.isBinaryExpression(grandParent)) { return getSpecialPropertyExport(grandParent, true); } else if (ts.isJSDocTypedefTag(parent)) { return exportInfo(symbol, 0); } } function getExportAssignmentExport(ex) { var exportingModuleSymbol = ts.Debug.assertDefined(ex.symbol.parent, "Expected export symbol to have a parent"); var exportKind = ex.isExportEquals ? 2 : 1; return { kind: 1, symbol: symbol, exportInfo: { exportingModuleSymbol: exportingModuleSymbol, exportKind: exportKind } }; } function getSpecialPropertyExport(node, useLhsSymbol) { var kind; switch (ts.getSpecialPropertyAssignmentKind(node)) { case 1: kind = 0; break; case 2: kind = 2; break; default: return undefined; } var sym = useLhsSymbol ? checker.getSymbolAtLocation(ts.cast(node.left, ts.isPropertyAccessExpression).name) : symbol; if (sym && !(checker.getMergedSymbol(sym.parent).flags & 1536)) { ts.Debug.fail("Special property assignment kind does not have a module as its parent. Assignment is " + ts.Debug.showSymbol(sym) + ", parent is " + ts.Debug.showSymbol(sym.parent)); } return sym && exportInfo(sym, kind); } } function getImport() { var isImport = isNodeImport(node); if (!isImport) return undefined; var importedSymbol = checker.getImmediateAliasedSymbol(symbol); if (!importedSymbol) return undefined; importedSymbol = skipExportSpecifierSymbol(importedSymbol, checker); if (importedSymbol.escapedName === "export=") { importedSymbol = getExportEqualsLocalSymbol(importedSymbol, checker); } var importedName = ts.symbolEscapedNameNoDefault(importedSymbol); if (importedName === undefined || importedName === "default" || importedName === symbol.escapedName) { return __assign({ kind: 0, symbol: importedSymbol }, isImport); } } function exportInfo(symbol, kind) { var exportInfo = getExportInfo(symbol, kind, checker); return exportInfo && { kind: 1, symbol: symbol, exportInfo: exportInfo }; } function getExportKindForDeclaration(node) { return ts.hasModifier(node, 512) ? 1 : 0; } } FindAllReferences.getImportOrExportSymbol = getImportOrExportSymbol; function getExportEqualsLocalSymbol(importedSymbol, checker) { if (importedSymbol.flags & 2097152) { return ts.Debug.assertDefined(checker.getImmediateAliasedSymbol(importedSymbol)); } var decl = importedSymbol.valueDeclaration; if (ts.isExportAssignment(decl)) { return ts.Debug.assertDefined(decl.expression.symbol); } else if (ts.isBinaryExpression(decl)) { return ts.Debug.assertDefined(decl.right.symbol); } else if (ts.isSourceFile(decl)) { return ts.Debug.assertDefined(decl.symbol); } return ts.Debug.fail(); } function getExportNode(parent, node) { if (parent.kind === 232) { var p = parent; return p.name !== node ? undefined : p.parent.kind === 269 ? undefined : p.parent.parent.kind === 214 ? p.parent.parent : undefined; } else { return parent; } } function isNodeImport(node) { var parent = node.parent; switch (parent.kind) { case 243: return parent.name === node && isExternalModuleImportEquals(parent) ? { isNamedImport: false } : undefined; case 248: return parent.propertyName ? undefined : { isNamedImport: true }; case 245: case 246: ts.Debug.assert(parent.name === node); return { isNamedImport: false }; default: return undefined; } } function getExportInfo(exportSymbol, exportKind, checker) { var moduleSymbol = exportSymbol.parent; if (!moduleSymbol) return undefined; var exportingModuleSymbol = checker.getMergedSymbol(moduleSymbol); return ts.isExternalModuleSymbol(exportingModuleSymbol) ? { exportingModuleSymbol: exportingModuleSymbol, exportKind: exportKind } : undefined; } FindAllReferences.getExportInfo = getExportInfo; function skipExportSpecifierSymbol(symbol, checker) { if (symbol.declarations) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (ts.isExportSpecifier(declaration) && !declaration.propertyName && !declaration.parent.parent.moduleSpecifier) { return checker.getExportSpecifierLocalTargetSymbol(declaration); } } } return symbol; } function getContainingModuleSymbol(importer, checker) { return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol); } function getSourceFileLikeForImportDeclaration(node) { if (node.kind === 187) { return node.getSourceFile(); } var parent = node.parent; if (parent.kind === 274) { return parent; } ts.Debug.assert(parent.kind === 240); return ts.cast(parent.parent, isAmbientModuleDeclaration); } function isAmbientModuleDeclaration(node) { return node.kind === 239 && node.name.kind === 9; } function isExternalModuleImportEquals(eq) { return eq.moduleReference.kind === 254 && eq.moduleReference.expression.kind === 9; } })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {})); })(ts || (ts = {})); var ts; (function (ts) { var FindAllReferences; (function (FindAllReferences) { function nodeEntry(node, isInString) { return { type: "node", node: node.name || node, isInString: isInString }; } FindAllReferences.nodeEntry = nodeEntry; function findReferencedSymbols(program, cancellationToken, sourceFiles, sourceFile, position) { var node = ts.getTouchingPropertyName(sourceFile, position); var referencedSymbols = FindAllReferences.Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken); var checker = program.getTypeChecker(); return !referencedSymbols || !referencedSymbols.length ? undefined : ts.mapDefined(referencedSymbols, function (_a) { var definition = _a.definition, references = _a.references; return definition && { definition: checker.runWithCancellationToken(cancellationToken, function (checker) { return definitionToReferencedSymbolDefinitionInfo(definition, checker, node); }), references: references.map(toReferenceEntry) }; }); } FindAllReferences.findReferencedSymbols = findReferencedSymbols; function getImplementationsAtPosition(program, cancellationToken, sourceFiles, sourceFile, position) { var node = ts.getTouchingPropertyName(sourceFile, position); var referenceEntries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position); var checker = program.getTypeChecker(); return ts.map(referenceEntries, function (entry) { return toImplementationLocation(entry, checker); }); } FindAllReferences.getImplementationsAtPosition = getImplementationsAtPosition; function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) { if (node.kind === 274) { return undefined; } var checker = program.getTypeChecker(); if (node.parent.kind === 271) { var result_6 = []; FindAllReferences.Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_6.push(nodeEntry(node)); }); return result_6; } else if (node.kind === 97 || ts.isSuperProperty(node.parent)) { var symbol = checker.getSymbolAtLocation(node); return symbol.valueDeclaration && [nodeEntry(symbol.valueDeclaration)]; } else { return getReferenceEntriesForNode(position, node, program, sourceFiles, cancellationToken, { implementations: true }); } } function findReferencedEntries(program, cancellationToken, sourceFiles, sourceFile, position, options) { var node = ts.getTouchingPropertyName(sourceFile, position); return ts.map(flattenEntries(FindAllReferences.Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options)), toReferenceEntry); } FindAllReferences.findReferencedEntries = findReferencedEntries; function getReferenceEntriesForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet) { if (options === void 0) { options = {}; } if (sourceFilesSet === void 0) { sourceFilesSet = ts.arrayToSet(sourceFiles, function (f) { return f.fileName; }); } return flattenEntries(FindAllReferences.Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet)); } FindAllReferences.getReferenceEntriesForNode = getReferenceEntriesForNode; function flattenEntries(referenceSymbols) { return referenceSymbols && ts.flatMap(referenceSymbols, function (r) { return r.references; }); } function definitionToReferencedSymbolDefinitionInfo(def, checker, originalNode) { var info = (function () { switch (def.type) { case "symbol": { var symbol = def.symbol; var _a = getDefinitionKindAndDisplayParts(symbol, checker, originalNode), displayParts_1 = _a.displayParts, kind_1 = _a.kind; var name_3 = displayParts_1.map(function (p) { return p.text; }).join(""); return { node: symbol.declarations ? ts.getNameOfDeclaration(ts.first(symbol.declarations)) || ts.first(symbol.declarations) : originalNode, name: name_3, kind: kind_1, displayParts: displayParts_1 }; } case "label": { var node_3 = def.node; return { node: node_3, name: node_3.text, kind: "label", displayParts: [ts.displayPart(node_3.text, ts.SymbolDisplayPartKind.text)] }; } case "keyword": { var node_4 = def.node; var name_4 = ts.tokenToString(node_4.kind); return { node: node_4, name: name_4, kind: "keyword", displayParts: [{ text: name_4, kind: "keyword" }] }; } case "this": { var node_5 = def.node; var symbol = checker.getSymbolAtLocation(node_5); var displayParts_2 = symbol && ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(checker, symbol, node_5.getSourceFile(), ts.getContainerNode(node_5), node_5).displayParts || [ts.textPart("this")]; return { node: node_5, name: "this", kind: "var", displayParts: displayParts_2 }; } case "string": { var node_6 = def.node; return { node: node_6, name: node_6.text, kind: "var", displayParts: [ts.displayPart(ts.getTextOfNode(node_6), ts.SymbolDisplayPartKind.stringLiteral)] }; } default: return ts.Debug.assertNever(def); } })(); var node = info.node, name = info.name, kind = info.kind, displayParts = info.displayParts; var sourceFile = node.getSourceFile(); return { containerKind: "", containerName: "", fileName: sourceFile.fileName, kind: kind, name: name, textSpan: getTextSpan(ts.isComputedPropertyName(node) ? node.expression : node, sourceFile), displayParts: displayParts }; } function getDefinitionKindAndDisplayParts(symbol, checker, node) { var meaning = FindAllReferences.Core.getIntersectingMeaningFromDeclarations(node, symbol); var enclosingDeclaration = ts.firstOrUndefined(symbol.declarations) || node; var _a = ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(checker, symbol, enclosingDeclaration.getSourceFile(), enclosingDeclaration, enclosingDeclaration, meaning), displayParts = _a.displayParts, symbolKind = _a.symbolKind; return { displayParts: displayParts, kind: symbolKind }; } function toReferenceEntry(entry) { if (entry.type === "span") { return { textSpan: entry.textSpan, fileName: entry.fileName, isWriteAccess: false, isDefinition: false }; } var node = entry.node, isInString = entry.isInString; var sourceFile = node.getSourceFile(); return { fileName: sourceFile.fileName, textSpan: getTextSpan(node, sourceFile), isWriteAccess: isWriteAccessForReference(node), isDefinition: node.kind === 79 || ts.isAnyDeclarationName(node) || ts.isLiteralComputedPropertyDeclarationName(node), isInString: isInString, }; } function toImplementationLocation(entry, checker) { if (entry.type === "node") { var node = entry.node; var sourceFile = node.getSourceFile(); return __assign({ textSpan: getTextSpan(node, sourceFile), fileName: sourceFile.fileName }, implementationKindDisplayParts(node, checker)); } else { var textSpan = entry.textSpan, fileName = entry.fileName; return { textSpan: textSpan, fileName: fileName, kind: "", displayParts: [] }; } } function implementationKindDisplayParts(node, checker) { var symbol = checker.getSymbolAtLocation(ts.isDeclaration(node) && node.name ? node.name : node); if (symbol) { return getDefinitionKindAndDisplayParts(symbol, checker, node); } else if (node.kind === 184) { return { kind: "interface", displayParts: [ts.punctuationPart(19), ts.textPart("object literal"), ts.punctuationPart(20)] }; } else if (node.kind === 205) { return { kind: "local class", displayParts: [ts.punctuationPart(19), ts.textPart("anonymous local class"), ts.punctuationPart(20)] }; } else { return { kind: ts.getNodeKind(node), displayParts: [] }; } } function toHighlightSpan(entry) { if (entry.type === "span") { var fileName = entry.fileName, textSpan = entry.textSpan; return { fileName: fileName, span: { textSpan: textSpan, kind: "reference" } }; } var node = entry.node, isInString = entry.isInString; var sourceFile = node.getSourceFile(); var writeAccess = isWriteAccessForReference(node); var span = { textSpan: getTextSpan(node, sourceFile), kind: writeAccess ? "writtenReference" : "reference", isInString: isInString }; return { fileName: sourceFile.fileName, span: span }; } FindAllReferences.toHighlightSpan = toHighlightSpan; function getTextSpan(node, sourceFile) { var start = node.getStart(sourceFile); var end = node.getEnd(); if (node.kind === 9) { start += 1; end -= 1; } return ts.createTextSpanFromBounds(start, end); } function isWriteAccessForReference(node) { return node.kind === 79 || ts.isAnyDeclarationName(node) || ts.isWriteAccess(node); } })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {})); })(ts || (ts = {})); (function (ts) { var FindAllReferences; (function (FindAllReferences) { var Core; (function (Core) { function getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet) { if (options === void 0) { options = {}; } if (sourceFilesSet === void 0) { sourceFilesSet = ts.arrayToSet(sourceFiles, function (f) { return f.fileName; }); } if (ts.isSourceFile(node)) { var reference = ts.GoToDefinition.getReferenceAtPosition(node, position, program); return reference && getReferencedSymbolsForModule(program, program.getTypeChecker().getMergedSymbol(reference.file.symbol), false, sourceFiles, sourceFilesSet); } if (!options.implementations) { var special = getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken); if (special) { return special; } } var checker = program.getTypeChecker(); var symbol = checker.getSymbolAtLocation(node); if (!symbol) { return !options.implementations && ts.isStringLiteral(node) ? getReferencesForStringLiteral(node, sourceFiles, cancellationToken) : undefined; } var moduleReferences = ts.emptyArray; var moduleSourceFile = isModuleSymbol(symbol); var referencedNode = node; if (moduleSourceFile) { var exportEquals = symbol.exports.get("export="); moduleReferences = getReferencedSymbolsForModule(program, symbol, !!exportEquals, sourceFiles, sourceFilesSet); if (!exportEquals || !sourceFilesSet.has(moduleSourceFile.fileName)) return moduleReferences; symbol = ts.skipAlias(exportEquals, checker); referencedNode = undefined; } return ts.concatenate(moduleReferences, getReferencedSymbolsForSymbol(symbol, referencedNode, sourceFiles, sourceFilesSet, checker, cancellationToken, options)); } Core.getReferencedSymbolsForNode = getReferencedSymbolsForNode; function isModuleSymbol(symbol) { return symbol.flags & 1536 ? ts.find(symbol.declarations, ts.isSourceFile) : undefined; } function getReferencedSymbolsForModule(program, symbol, excludeImportTypeOfExportEquals, sourceFiles, sourceFilesSet) { ts.Debug.assert(!!symbol.valueDeclaration); var references = ts.mapDefined(FindAllReferences.findModuleReferences(program, sourceFiles, symbol), function (reference) { if (reference.kind === "import") { var parent = reference.literal.parent; if (ts.isLiteralTypeNode(parent)) { var importType = ts.cast(parent.parent, ts.isImportTypeNode); if (excludeImportTypeOfExportEquals && !importType.qualifier) { return undefined; } } return { type: "node", node: reference.literal }; } else { return { type: "span", fileName: reference.referencingFile.fileName, textSpan: ts.createTextSpanFromRange(reference.ref), }; } }); for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; switch (decl.kind) { case 274: break; case 239: if (sourceFilesSet.has(decl.getSourceFile().fileName)) { references.push({ type: "node", node: decl.name }); } break; default: ts.Debug.fail("Expected a module symbol to be declared by a SourceFile or ModuleDeclaration."); } } return references.length ? [{ definition: { type: "symbol", symbol: symbol }, references: references }] : ts.emptyArray; } function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) { if (ts.isTypeKeyword(node.kind)) { return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken); } if (ts.isJumpStatementTarget(node)) { var labelDefinition = ts.getTargetLabel(node.parent, node.text); return labelDefinition && getLabelReferencesInNode(labelDefinition.parent, labelDefinition); } else if (ts.isLabelOfLabeledStatement(node)) { return getLabelReferencesInNode(node.parent, node); } if (ts.isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles, cancellationToken); } if (node.kind === 97) { return getReferencesForSuperKeyword(node); } return undefined; } function getReferencedSymbolsForSymbol(symbol, node, sourceFiles, sourceFilesSet, checker, cancellationToken, options) { symbol = node && skipPastExportOrImportSpecifierOrUnion(symbol, node, checker) || symbol; var searchMeaning = node ? getIntersectingMeaningFromDeclarations(node, symbol) : 7; var result = []; var state = new State(sourceFiles, sourceFilesSet, node ? getSpecialSearchKind(node) : 0, checker, cancellationToken, searchMeaning, options, result); if (node && node.kind === 79) { addReference(node, symbol, state); searchForImportsOfExport(node, symbol, { exportingModuleSymbol: ts.Debug.assertDefined(symbol.parent, "Expected export symbol to have a parent"), exportKind: 1 }, state); } else { var search = state.createSearch(node, symbol, undefined, { allSearchSymbols: node ? populateSearchSymbolSet(symbol, node, checker, !!options.implementations) : [symbol] }); var scope = getSymbolScope(symbol); if (scope) { getReferencesInContainer(scope, scope.getSourceFile(), search, state, !(ts.isSourceFile(scope) && !ts.contains(sourceFiles, scope))); } else { for (var _i = 0, _a = state.sourceFiles; _i < _a.length; _i++) { var sourceFile = _a[_i]; state.cancellationToken.throwIfCancellationRequested(); searchForName(sourceFile, search, state); } } } return result; } function getSpecialSearchKind(node) { switch (node.kind) { case 123: return 1; case 71: if (ts.isClassLike(node.parent)) { ts.Debug.assert(node.parent.name === node); return 2; } default: return 0; } } function skipPastExportOrImportSpecifierOrUnion(symbol, node, checker) { var parent = node.parent; if (ts.isExportSpecifier(parent)) { return getLocalSymbolForExportSpecifier(node, symbol, parent, checker); } if (ts.isImportSpecifier(parent) && parent.propertyName === node) { return checker.getImmediateAliasedSymbol(symbol); } return ts.firstDefined(symbol.declarations, function (decl) { if (!decl.parent) { ts.Debug.fail("Unexpected symbol at " + ts.Debug.showSyntaxKind(node) + ": " + ts.Debug.showSymbol(symbol)); } return ts.isTypeLiteralNode(decl.parent) && ts.isUnionTypeNode(decl.parent.parent) ? checker.getPropertyOfType(checker.getTypeFromTypeNode(decl.parent.parent), symbol.name) : undefined; }); } var SpecialSearchKind; (function (SpecialSearchKind) { SpecialSearchKind[SpecialSearchKind["None"] = 0] = "None"; SpecialSearchKind[SpecialSearchKind["Constructor"] = 1] = "Constructor"; SpecialSearchKind[SpecialSearchKind["Class"] = 2] = "Class"; })(SpecialSearchKind || (SpecialSearchKind = {})); var State = (function () { function State(sourceFiles, sourceFilesSet, specialSearchKind, checker, cancellationToken, searchMeaning, options, result) { this.sourceFiles = sourceFiles; this.sourceFilesSet = sourceFilesSet; this.specialSearchKind = specialSearchKind; this.checker = checker; this.cancellationToken = cancellationToken; this.searchMeaning = searchMeaning; this.options = options; this.result = result; this.inheritsFromCache = ts.createMap(); this.markSeenContainingTypeReference = ts.nodeSeenTracker(); this.markSeenReExportRHS = ts.nodeSeenTracker(); this.symbolIdToReferences = []; this.sourceFileToSeenSymbols = []; } State.prototype.includesSourceFile = function (sourceFile) { return this.sourceFilesSet.has(sourceFile.fileName); }; State.prototype.getImportSearches = function (exportSymbol, exportInfo) { if (!this.importTracker) this.importTracker = FindAllReferences.createImportTracker(this.sourceFiles, this.sourceFilesSet, this.checker, this.cancellationToken); return this.importTracker(exportSymbol, exportInfo, !!this.options.isForRename); }; State.prototype.createSearch = function (location, symbol, comingFrom, searchOptions) { if (searchOptions === void 0) { searchOptions = {}; } var _a = searchOptions.text, text = _a === void 0 ? ts.stripQuotes(ts.unescapeLeadingUnderscores((ts.getLocalSymbolForExportDefault(symbol) || symbol).escapedName)) : _a, _b = searchOptions.allSearchSymbols, allSearchSymbols = _b === void 0 ? [symbol] : _b; var escapedText = ts.escapeLeadingUnderscores(text); var parents = this.options.implementations && location ? getParentSymbolsOfPropertyAccess(location, symbol, this.checker) : undefined; return { symbol: symbol, comingFrom: comingFrom, text: text, escapedText: escapedText, parents: parents, allSearchSymbols: allSearchSymbols, includes: function (sym) { return ts.contains(allSearchSymbols, sym); } }; }; State.prototype.referenceAdder = function (searchSymbol) { var symbolId = ts.getSymbolId(searchSymbol); var references = this.symbolIdToReferences[symbolId]; if (!references) { references = this.symbolIdToReferences[symbolId] = []; this.result.push({ definition: { type: "symbol", symbol: searchSymbol }, references: references }); } return function (node) { return references.push(FindAllReferences.nodeEntry(node)); }; }; State.prototype.addStringOrCommentReference = function (fileName, textSpan) { this.result.push({ definition: undefined, references: [{ type: "span", fileName: fileName, textSpan: textSpan }] }); }; State.prototype.markSearchedSymbols = function (sourceFile, symbols) { var sourceId = ts.getNodeId(sourceFile); var seenSymbols = this.sourceFileToSeenSymbols[sourceId] || (this.sourceFileToSeenSymbols[sourceId] = ts.createMap()); var anyNewSymbols = false; for (var _i = 0, symbols_4 = symbols; _i < symbols_4.length; _i++) { var sym = symbols_4[_i]; anyNewSymbols = ts.addToSeen(seenSymbols, ts.getSymbolId(sym)) || anyNewSymbols; } return anyNewSymbols; }; return State; }()); function searchForImportsOfExport(exportLocation, exportSymbol, exportInfo, state) { var _a = state.getImportSearches(exportSymbol, exportInfo), importSearches = _a.importSearches, singleReferences = _a.singleReferences, indirectUsers = _a.indirectUsers; if (singleReferences.length) { var addRef = state.referenceAdder(exportSymbol); for (var _i = 0, singleReferences_1 = singleReferences; _i < singleReferences_1.length; _i++) { var singleRef = singleReferences_1[_i]; if (shouldAddSingleReference(singleRef, state)) addRef(singleRef); } } for (var _b = 0, importSearches_1 = importSearches; _b < importSearches_1.length; _b++) { var _c = importSearches_1[_b], importLocation = _c[0], importSymbol = _c[1]; getReferencesInSourceFile(importLocation.getSourceFile(), state.createSearch(importLocation, importSymbol, 1), state); } if (indirectUsers.length) { var indirectSearch = void 0; switch (exportInfo.exportKind) { case 0: indirectSearch = state.createSearch(exportLocation, exportSymbol, 1); break; case 1: indirectSearch = state.options.isForRename ? undefined : state.createSearch(exportLocation, exportSymbol, 1, { text: "default" }); break; case 2: break; } if (indirectSearch) { for (var _d = 0, indirectUsers_1 = indirectUsers; _d < indirectUsers_1.length; _d++) { var indirectUser = indirectUsers_1[_d]; searchForName(indirectUser, indirectSearch, state); } } } } function shouldAddSingleReference(singleRef, state) { if (!hasMatchingMeaning(singleRef, state)) return false; if (!state.options.isForRename) return true; if (!ts.isIdentifier(singleRef)) return false; return !((ts.isExportSpecifier(singleRef.parent) || ts.isImportSpecifier(singleRef.parent)) && singleRef.escapedText === "default"); } function searchForImportedSymbol(symbol, state) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; var exportingFile = declaration.getSourceFile(); getReferencesInSourceFile(exportingFile, state.createSearch(declaration, symbol, 0), state, state.includesSourceFile(exportingFile)); } } function searchForName(sourceFile, search, state) { if (ts.getNameTable(sourceFile).get(search.escapedText) !== undefined) { getReferencesInSourceFile(sourceFile, search, state); } } function getPropertySymbolOfDestructuringAssignment(location, checker) { return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) ? checker.getPropertySymbolOfDestructuringAssignment(location) : undefined; } function getObjectBindingElementWithoutPropertyName(symbol) { var bindingElement = ts.getDeclarationOfKind(symbol, 182); if (bindingElement && bindingElement.parent.kind === 180 && ts.isIdentifier(bindingElement.name) && !bindingElement.propertyName) { return bindingElement; } } function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker) { var bindingElement = getObjectBindingElementWithoutPropertyName(symbol); return bindingElement && ts.getPropertySymbolFromBindingElement(checker, bindingElement); } function getSymbolScope(symbol) { var declarations = symbol.declarations, flags = symbol.flags, parent = symbol.parent, valueDeclaration = symbol.valueDeclaration; if (valueDeclaration && (valueDeclaration.kind === 192 || valueDeclaration.kind === 205)) { return valueDeclaration; } if (!declarations) { return undefined; } if (flags & (4 | 8192)) { var privateDeclaration = ts.find(declarations, function (d) { return ts.hasModifier(d, 8); }); if (privateDeclaration) { return ts.getAncestor(privateDeclaration, 235); } return undefined; } if (getObjectBindingElementWithoutPropertyName(symbol)) { return undefined; } var exposedByParent = parent && !(symbol.flags & 262144); if (exposedByParent && !((parent.flags & 1536) && ts.isExternalModuleSymbol(parent) && !parent.globalExports)) { return undefined; } var scope; for (var _i = 0, declarations_10 = declarations; _i < declarations_10.length; _i++) { var declaration = declarations_10[_i]; var container = ts.getContainerNode(declaration); if (scope && scope !== container) { return undefined; } if (!container || container.kind === 274 && !ts.isExternalOrCommonJsModule(container)) { return undefined; } scope = container; } return exposedByParent ? scope.getSourceFile() : scope; } function isSymbolReferencedInFile(definition, checker, sourceFile) { return eachSymbolReferenceInFile(definition, checker, sourceFile, function () { return true; }) || false; } Core.isSymbolReferencedInFile = isSymbolReferencedInFile; function eachSymbolReferenceInFile(definition, checker, sourceFile, cb) { var symbol = checker.getSymbolAtLocation(definition); if (!symbol) return undefined; for (var _i = 0, _a = getPossibleSymbolReferenceNodes(sourceFile, symbol.name); _i < _a.length; _i++) { var token = _a[_i]; if (!ts.isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText) continue; var referenceSymbol = checker.getSymbolAtLocation(token); if (referenceSymbol === symbol || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol || ts.isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) { var res = cb(token); if (res) return res; } } } Core.eachSymbolReferenceInFile = eachSymbolReferenceInFile; function getPossibleSymbolReferenceNodes(sourceFile, symbolName, container) { if (container === void 0) { container = sourceFile; } return getPossibleSymbolReferencePositions(sourceFile, symbolName, container).map(function (pos) { return ts.getTouchingPropertyName(sourceFile, pos); }); } function getPossibleSymbolReferencePositions(sourceFile, symbolName, container) { if (container === void 0) { container = sourceFile; } var positions = []; if (!symbolName || !symbolName.length) { return positions; } var text = sourceFile.text; var sourceLength = text.length; var symbolNameLength = symbolName.length; var position = text.indexOf(symbolName, container.pos); while (position >= 0) { if (position > container.end) break; var endPosition = position + symbolNameLength; if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 6)) && (endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 6))) { positions.push(position); } position = text.indexOf(symbolName, position + symbolNameLength + 1); } return positions; } function getLabelReferencesInNode(container, targetLabel) { var sourceFile = container.getSourceFile(); var labelName = targetLabel.text; var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, labelName, container), function (node) { return node === targetLabel || (ts.isJumpStatementTarget(node) && ts.getTargetLabel(node, labelName) === targetLabel) ? FindAllReferences.nodeEntry(node) : undefined; }); return [{ definition: { type: "label", node: targetLabel }, references: references }]; } function isValidReferencePosition(node, searchSymbolName) { switch (node.kind) { case 71: return node.text.length === searchSymbolName.length; case 9: { var str = node; return (ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(str) || ts.isNameOfModuleDeclaration(node) || ts.isExpressionOfExternalModuleImportEqualsDeclaration(node)) && str.text.length === searchSymbolName.length; } case 8: return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length; case 79: return "default".length === searchSymbolName.length; default: return false; } } function getAllReferencesForKeyword(sourceFiles, keywordKind, cancellationToken) { var references = ts.flatMap(sourceFiles, function (sourceFile) { cancellationToken.throwIfCancellationRequested(); return ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, ts.tokenToString(keywordKind), sourceFile), function (referenceLocation) { return referenceLocation.kind === keywordKind ? FindAllReferences.nodeEntry(referenceLocation) : undefined; }); }); return references.length ? [{ definition: { type: "keyword", node: references[0].node }, references: references }] : undefined; } function getReferencesInSourceFile(sourceFile, search, state, addReferencesHere) { if (addReferencesHere === void 0) { addReferencesHere = true; } state.cancellationToken.throwIfCancellationRequested(); return getReferencesInContainer(sourceFile, sourceFile, search, state, addReferencesHere); } function getReferencesInContainer(container, sourceFile, search, state, addReferencesHere) { if (!state.markSearchedSymbols(sourceFile, search.allSearchSymbols)) { return; } for (var _i = 0, _a = getPossibleSymbolReferencePositions(sourceFile, search.text, container); _i < _a.length; _i++) { var position = _a[_i]; getReferencesAtLocation(sourceFile, position, search, state, addReferencesHere); } } function hasMatchingMeaning(referenceLocation, state) { return !!(ts.getMeaningFromLocation(referenceLocation) & state.searchMeaning); } function getReferencesAtLocation(sourceFile, position, search, state, addReferencesHere) { var referenceLocation = ts.getTouchingPropertyName(sourceFile, position); if (!isValidReferencePosition(referenceLocation, search.text)) { if (!state.options.implementations && (state.options.findInStrings && ts.isInString(sourceFile, position) || state.options.findInComments && ts.isInNonReferenceComment(sourceFile, position))) { state.addStringOrCommentReference(sourceFile.fileName, ts.createTextSpan(position, search.text.length)); } return; } if (!hasMatchingMeaning(referenceLocation, state)) return; var referenceSymbol = state.checker.getSymbolAtLocation(referenceLocation); if (!referenceSymbol) { return; } var parent = referenceLocation.parent; if (ts.isImportSpecifier(parent) && parent.propertyName === referenceLocation) { return; } if (ts.isExportSpecifier(parent)) { ts.Debug.assert(referenceLocation.kind === 71); getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent, search, state, addReferencesHere); return; } var relatedSymbol = getRelatedSymbol(search, referenceSymbol, referenceLocation, state); if (!relatedSymbol) { getReferenceForShorthandProperty(referenceSymbol, search, state); return; } switch (state.specialSearchKind) { case 0: if (addReferencesHere) addReference(referenceLocation, relatedSymbol, state); break; case 1: addConstructorReferences(referenceLocation, sourceFile, search, state); break; case 2: addClassStaticThisReferences(referenceLocation, search, state); break; default: ts.Debug.assertNever(state.specialSearchKind); } getImportOrExportReferences(referenceLocation, referenceSymbol, search, state); } function getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, search, state, addReferencesHere) { var parent = exportSpecifier.parent, propertyName = exportSpecifier.propertyName, name = exportSpecifier.name; var exportDeclaration = parent.parent; var localSymbol = getLocalSymbolForExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, state.checker); if (!search.includes(localSymbol)) { return; } if (!propertyName) { if (!(state.options.isForRename && name.escapedText === "default")) { addRef(); } } else if (referenceLocation === propertyName) { if (!exportDeclaration.moduleSpecifier) { addRef(); } if (addReferencesHere && !state.options.isForRename && state.markSeenReExportRHS(name)) { addReference(name, referenceSymbol, state); } } else { if (state.markSeenReExportRHS(referenceLocation)) { addRef(); } } if (!(referenceLocation === propertyName && state.options.isForRename)) { var exportKind = referenceLocation.originalKeywordKind === 79 ? 1 : 0; var exportInfo = FindAllReferences.getExportInfo(referenceSymbol, exportKind, state.checker); if (!exportInfo) return ts.Debug.fail(); searchForImportsOfExport(referenceLocation, referenceSymbol, exportInfo, state); } if (search.comingFrom !== 1 && exportDeclaration.moduleSpecifier && !propertyName) { var imported = state.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); if (imported) searchForImportedSymbol(imported, state); } function addRef() { if (addReferencesHere) addReference(referenceLocation, localSymbol, state); } } function getLocalSymbolForExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, checker) { return isExportSpecifierAlias(referenceLocation, exportSpecifier) && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier) || referenceSymbol; } function isExportSpecifierAlias(referenceLocation, exportSpecifier) { var parent = exportSpecifier.parent, propertyName = exportSpecifier.propertyName, name = exportSpecifier.name; ts.Debug.assert(propertyName === referenceLocation || name === referenceLocation); if (propertyName) { return propertyName === referenceLocation; } else { return !parent.parent.moduleSpecifier; } } function getImportOrExportReferences(referenceLocation, referenceSymbol, search, state) { var importOrExport = FindAllReferences.getImportOrExportSymbol(referenceLocation, referenceSymbol, state.checker, search.comingFrom === 1); if (!importOrExport) return; var symbol = importOrExport.symbol; if (importOrExport.kind === 0) { if (!state.options.isForRename || importOrExport.isNamedImport) { searchForImportedSymbol(symbol, state); } } else { searchForImportsOfExport(referenceLocation, symbol, importOrExport.exportInfo, state); } } function getReferenceForShorthandProperty(_a, search, state) { var flags = _a.flags, valueDeclaration = _a.valueDeclaration; var shorthandValueSymbol = state.checker.getShorthandAssignmentValueSymbol(valueDeclaration); if (!(flags & 33554432) && search.includes(shorthandValueSymbol)) { addReference(ts.getNameOfDeclaration(valueDeclaration), shorthandValueSymbol, state); } } function addReference(referenceLocation, relatedSymbol, state) { var addRef = state.referenceAdder(relatedSymbol); if (state.options.implementations) { addImplementationReferences(referenceLocation, addRef, state); } else { addRef(referenceLocation); } } function addConstructorReferences(referenceLocation, sourceFile, search, state) { if (ts.isNewExpressionTarget(referenceLocation)) { addReference(referenceLocation, search.symbol, state); } var pusher = function () { return state.referenceAdder(search.symbol); }; if (ts.isClassLike(referenceLocation.parent)) { ts.Debug.assert(referenceLocation.kind === 79 || referenceLocation.parent.name === referenceLocation); findOwnConstructorReferences(search.symbol, sourceFile, pusher()); } else { var classExtending = tryGetClassByExtendingIdentifier(referenceLocation); if (classExtending) { findSuperConstructorAccesses(classExtending, pusher()); } } } function addClassStaticThisReferences(referenceLocation, search, state) { addReference(referenceLocation, search.symbol, state); var classLike = referenceLocation.parent; if (state.options.isForRename || !ts.isClassLike(classLike)) return; ts.Debug.assert(classLike.name === referenceLocation); var addRef = state.referenceAdder(search.symbol); for (var _i = 0, _a = classLike.members; _i < _a.length; _i++) { var member = _a[_i]; if (!(ts.isMethodOrAccessor(member) && ts.hasModifier(member, 32))) { continue; } if (member.body) { member.body.forEachChild(function cb(node) { if (node.kind === 99) { addRef(node); } else if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) { node.forEachChild(cb); } }); } } } function findOwnConstructorReferences(classSymbol, sourceFile, addNode) { for (var _i = 0, _a = classSymbol.members.get("__constructor").declarations; _i < _a.length; _i++) { var decl = _a[_i]; var ctrKeyword = ts.findChildOfKind(decl, 123, sourceFile); ts.Debug.assert(decl.kind === 155 && !!ctrKeyword); addNode(ctrKeyword); } classSymbol.exports.forEach(function (member) { var decl = member.valueDeclaration; if (decl && decl.kind === 154) { var body = decl.body; if (body) { forEachDescendantOfKind(body, 99, function (thisKeyword) { if (ts.isNewExpressionTarget(thisKeyword)) { addNode(thisKeyword); } }); } } }); } function findSuperConstructorAccesses(cls, addNode) { var ctr = cls.symbol.members.get("__constructor"); if (!ctr) { return; } for (var _i = 0, _a = ctr.declarations; _i < _a.length; _i++) { var decl = _a[_i]; ts.Debug.assert(decl.kind === 155); var body = decl.body; if (body) { forEachDescendantOfKind(body, 97, function (node) { if (ts.isCallExpressionTarget(node)) { addNode(node); } }); } } } function addImplementationReferences(refNode, addReference, state) { if (ts.isDeclarationName(refNode) && isImplementation(refNode.parent)) { addReference(refNode); return; } if (refNode.kind !== 71) { return; } if (refNode.parent.kind === 271) { getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference); } var containingClass = getContainingClassIfInHeritageClause(refNode); if (containingClass) { addReference(containingClass); return; } var typeNode = ts.findAncestor(refNode, function (a) { return !ts.isQualifiedName(a.parent) && !ts.isTypeNode(a.parent) && !ts.isTypeElement(a.parent); }); var typeHavingNode = typeNode.parent; if (ts.hasType(typeHavingNode) && typeHavingNode.type === typeNode && state.markSeenContainingTypeReference(typeHavingNode)) { if (ts.hasInitializer(typeHavingNode)) { addIfImplementation(typeHavingNode.initializer); } else if (ts.isFunctionLike(typeHavingNode) && typeHavingNode.body) { var body = typeHavingNode.body; if (body.kind === 213) { ts.forEachReturnStatement(body, function (returnStatement) { if (returnStatement.expression) addIfImplementation(returnStatement.expression); }); } else { addIfImplementation(body); } } else if (ts.isAssertionExpression(typeHavingNode)) { addIfImplementation(typeHavingNode.expression); } } function addIfImplementation(e) { if (isImplementationExpression(e)) addReference(e); } } function getContainingClassIfInHeritageClause(node) { return ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) ? getContainingClassIfInHeritageClause(node.parent) : ts.isExpressionWithTypeArguments(node) ? ts.tryCast(node.parent.parent, ts.isClassLike) : undefined; } function isImplementationExpression(node) { switch (node.kind) { case 191: return isImplementationExpression(node.expression); case 193: case 192: case 184: case 205: case 183: return true; default: return false; } } function explicitlyInheritsFrom(symbol, parent, cachedResults, checker) { if (symbol === parent) { return true; } var key = ts.getSymbolId(symbol) + "," + ts.getSymbolId(parent); var cached = cachedResults.get(key); if (cached !== undefined) { return cached; } cachedResults.set(key, false); var inherits = symbol.declarations.some(function (declaration) { return ts.getAllSuperTypeNodes(declaration).some(function (typeReference) { var type = checker.getTypeAtLocation(typeReference); return !!type && !!type.symbol && explicitlyInheritsFrom(type.symbol, parent, cachedResults, checker); }); }); cachedResults.set(key, inherits); return inherits; } function getReferencesForSuperKeyword(superKeyword) { var searchSpaceNode = ts.getSuperContainer(superKeyword, false); if (!searchSpaceNode) { return undefined; } var staticFlag = 32; switch (searchSpaceNode.kind) { case 152: case 151: case 154: case 153: case 155: case 156: case 157: staticFlag &= ts.getModifierFlags(searchSpaceNode); searchSpaceNode = searchSpaceNode.parent; break; default: return undefined; } var sourceFile = searchSpaceNode.getSourceFile(); var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), function (node) { if (node.kind !== 97) { return; } var container = ts.getSuperContainer(node, false); return container && (32 & ts.getModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? FindAllReferences.nodeEntry(node) : undefined; }); return [{ definition: { type: "symbol", symbol: searchSpaceNode.symbol }, references: references }]; } function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) { var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false); var staticFlag = 32; switch (searchSpaceNode.kind) { case 154: case 153: if (ts.isObjectLiteralMethod(searchSpaceNode)) { break; } case 152: case 151: case 155: case 156: case 157: staticFlag &= ts.getModifierFlags(searchSpaceNode); searchSpaceNode = searchSpaceNode.parent; break; case 274: if (ts.isExternalModule(searchSpaceNode)) { return undefined; } case 234: case 192: break; default: return undefined; } var references = ts.flatMap(searchSpaceNode.kind === 274 ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) { cancellationToken.throwIfCancellationRequested(); return getPossibleSymbolReferenceNodes(sourceFile, "this", ts.isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter(function (node) { if (!ts.isThis(node)) { return false; } var container = ts.getThisContainer(node, false); switch (searchSpaceNode.kind) { case 192: case 234: return searchSpaceNode.symbol === container.symbol; case 154: case 153: return ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol; case 205: case 235: return container.parent && searchSpaceNode.symbol === container.parent.symbol && (ts.getModifierFlags(container) & 32) === staticFlag; case 274: return container.kind === 274 && !ts.isExternalModule(container); } }); }).map(function (n) { return FindAllReferences.nodeEntry(n); }); return [{ definition: { type: "this", node: thisOrSuperKeyword }, references: references }]; } function getReferencesForStringLiteral(node, sourceFiles, cancellationToken) { var references = ts.flatMap(sourceFiles, function (sourceFile) { cancellationToken.throwIfCancellationRequested(); return ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, node.text), function (ref) { return ts.isStringLiteral(ref) && ref.text === node.text ? FindAllReferences.nodeEntry(ref, true) : undefined; }); }); return [{ definition: { type: "string", node: node }, references: references }]; } function populateSearchSymbolSet(symbol, location, checker, implementations) { var result = []; forEachRelatedSymbol(symbol, location, checker, function (sym, root, base) { result.push(base || root || sym); }, function () { return !implementations; }); return result; } function forEachRelatedSymbol(symbol, location, checker, cbSymbol, allowBaseTypes) { var containingObjectLiteralElement = ts.getContainingObjectLiteralElement(location); if (containingObjectLiteralElement) { var res_1 = ts.firstDefined(getPropertySymbolsFromContextualType(containingObjectLiteralElement, checker), fromRoot); if (res_1) return res_1; var propertySymbol = getPropertySymbolOfDestructuringAssignment(location, checker); var res1 = propertySymbol && cbSymbol(propertySymbol); if (res1) return res1; var shorthandValueSymbol = checker.getShorthandAssignmentValueSymbol(location.parent); var res2 = shorthandValueSymbol && cbSymbol(shorthandValueSymbol); if (res2) return res2; } var res = fromRoot(symbol); if (res) return res; if (symbol.valueDeclaration && ts.isParameterPropertyDeclaration(symbol.valueDeclaration)) { var paramProps = checker.getSymbolsOfParameterPropertyDeclaration(ts.cast(symbol.valueDeclaration, ts.isParameter), symbol.name); ts.Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1) && !!(paramProps[1].flags & 4)); return fromRoot(symbol.flags & 1 ? paramProps[1] : paramProps[0]); } var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker); return bindingElementPropertySymbol && fromRoot(bindingElementPropertySymbol); function fromRoot(sym) { return ts.firstDefined(checker.getRootSymbols(sym), function (rootSymbol) { return cbSymbol(sym, rootSymbol) || (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64) && allowBaseTypes(rootSymbol) ? ts.getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.name, checker, function (base) { return cbSymbol(sym, rootSymbol, base); }) : undefined); }); } } function getRelatedSymbol(search, referenceSymbol, referenceLocation, state) { var checker = state.checker; return forEachRelatedSymbol(referenceSymbol, referenceLocation, checker, function (sym, rootSymbol, baseSymbol) { return search.includes(baseSymbol || rootSymbol || sym) ? rootSymbol && !(ts.getCheckFlags(sym) & 6) ? rootSymbol : sym : undefined; }, function (rootSymbol) { return !(search.parents && !search.parents.some(function (parent) { return explicitlyInheritsFrom(rootSymbol.parent, parent, state.inheritsFromCache, checker); })); }); } function getPropertySymbolsFromContextualType(node, checker) { var contextualType = checker.getContextualType(node.parent); var name = ts.getNameFromPropertyName(node.name); var symbol = contextualType && name && contextualType.getProperty(name); return symbol ? [symbol] : contextualType && contextualType.isUnion() ? ts.mapDefined(contextualType.types, function (t) { return t.getProperty(name); }) : ts.emptyArray; } function getIntersectingMeaningFromDeclarations(node, symbol) { var meaning = ts.getMeaningFromLocation(node); var declarations = symbol.declarations; if (declarations) { var lastIterationMeaning = void 0; do { lastIterationMeaning = meaning; for (var _i = 0, declarations_11 = declarations; _i < declarations_11.length; _i++) { var declaration = declarations_11[_i]; var declarationMeaning = ts.getMeaningFromDeclaration(declaration); if (declarationMeaning & meaning) { meaning |= declarationMeaning; } } } while (meaning !== lastIterationMeaning); } return meaning; } Core.getIntersectingMeaningFromDeclarations = getIntersectingMeaningFromDeclarations; function isImplementation(node) { return !!(node.flags & 4194304) || (ts.isVariableLike(node) ? ts.hasInitializer(node) : ts.isFunctionLikeDeclaration(node) ? !!node.body : ts.isClassLike(node) || ts.isModuleOrEnumDeclaration(node)); } function getReferenceEntriesForShorthandPropertyAssignment(node, checker, addReference) { var refSymbol = checker.getSymbolAtLocation(node); var shorthandSymbol = checker.getShorthandAssignmentValueSymbol(refSymbol.valueDeclaration); if (shorthandSymbol) { for (var _i = 0, _a = shorthandSymbol.getDeclarations(); _i < _a.length; _i++) { var declaration = _a[_i]; if (ts.getMeaningFromDeclaration(declaration) & 1) { addReference(declaration); } } } } Core.getReferenceEntriesForShorthandPropertyAssignment = getReferenceEntriesForShorthandPropertyAssignment; function forEachDescendantOfKind(node, kind, action) { ts.forEachChild(node, function (child) { if (child.kind === kind) { action(child); } forEachDescendantOfKind(child, kind, action); }); } function tryGetClassByExtendingIdentifier(node) { return ts.tryGetClassExtendingExpressionWithTypeArguments(ts.climbPastPropertyAccess(node).parent); } function getParentSymbolsOfPropertyAccess(location, symbol, checker) { var propertyAccessExpression = ts.isRightSideOfPropertyAccess(location) ? location.parent : undefined; var lhsType = propertyAccessExpression && checker.getTypeAtLocation(propertyAccessExpression.expression); var res = ts.mapDefined(lhsType && (lhsType.isUnionOrIntersection() ? lhsType.types : lhsType.symbol === symbol.parent ? undefined : [lhsType]), function (t) { return t.symbol && t.symbol.flags & (32 | 64) ? t.symbol : undefined; }); return res.length === 0 ? undefined : res; } })(Core = FindAllReferences.Core || (FindAllReferences.Core = {})); })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {})); })(ts || (ts = {})); var ts; (function (ts) { function getEditsForFileRename(program, oldFileOrDirPath, newFileOrDirPath, host, formatContext, preferences) { var useCaseSensitiveFileNames = ts.hostUsesCaseSensitiveFileNames(host); var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); var oldToNew = getPathUpdater(oldFileOrDirPath, newFileOrDirPath, getCanonicalFileName); var newToOld = getPathUpdater(newFileOrDirPath, oldFileOrDirPath, getCanonicalFileName); return ts.textChanges.ChangeTracker.with({ host: host, formatContext: formatContext }, function (changeTracker) { updateTsconfigFiles(program, changeTracker, oldToNew, newFileOrDirPath, host.getCurrentDirectory(), useCaseSensitiveFileNames); updateImports(program, changeTracker, oldToNew, newToOld, host, getCanonicalFileName, preferences); }); } ts.getEditsForFileRename = getEditsForFileRename; function getPathUpdater(oldFileOrDirPath, newFileOrDirPath, getCanonicalFileName) { var canonicalOldPath = getCanonicalFileName(oldFileOrDirPath); return function (path) { var canonicalPath = getCanonicalFileName(path); if (canonicalPath === canonicalOldPath) return newFileOrDirPath; var suffix = ts.tryRemoveDirectoryPrefix(canonicalPath, canonicalOldPath); return suffix === undefined ? undefined : newFileOrDirPath + "/" + suffix; }; } function updateTsconfigFiles(program, changeTracker, oldToNew, newFileOrDirPath, currentDirectory, useCaseSensitiveFileNames) { var configFile = program.getCompilerOptions().configFile; if (!configFile) return; var configDir = ts.getDirectoryPath(configFile.fileName); var jsonObjectLiteral = ts.getTsConfigObjectLiteralExpression(configFile); if (!jsonObjectLiteral) return; forEachProperty(jsonObjectLiteral, function (property, propertyName) { switch (propertyName) { case "files": case "include": case "exclude": { var foundExactMatch = updatePaths(property); if (!foundExactMatch && propertyName === "include" && ts.isArrayLiteralExpression(property.initializer)) { var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; }); var matchers = ts.getFileMatcherPatterns(configDir, [], includes, useCaseSensitiveFileNames, currentDirectory); if (!ts.getRegexFromPattern(ts.Debug.assertDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) { changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.createStringLiteral(relativePath(newFileOrDirPath))); } } break; } case "compilerOptions": forEachProperty(property.initializer, function (property, propertyName) { var option = ts.getOptionFromName(propertyName); if (option && (option.isFilePath || option.type === "list" && option.element.isFilePath)) { updatePaths(property); } else if (propertyName === "paths") { forEachProperty(property.initializer, function (pathsProperty) { if (!ts.isArrayLiteralExpression(pathsProperty.initializer)) return; for (var _i = 0, _a = pathsProperty.initializer.elements; _i < _a.length; _i++) { var e = _a[_i]; tryUpdateString(e); } }); } }); break; } }); function updatePaths(property) { var elements = ts.isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer]; var foundExactMatch = false; for (var _i = 0, elements_5 = elements; _i < elements_5.length; _i++) { var element = elements_5[_i]; foundExactMatch = tryUpdateString(element) || foundExactMatch; } return foundExactMatch; } function tryUpdateString(element) { if (!ts.isStringLiteral(element)) return false; var elementFileName = combinePathsSafe(configDir, element.text); var updated = oldToNew(elementFileName); if (updated !== undefined) { changeTracker.replaceRangeWithText(configFile, createStringRange(element, configFile), relativePath(updated)); return true; } return false; } function relativePath(path) { return ts.getRelativePathFromDirectory(configDir, path, !useCaseSensitiveFileNames); } } function updateImports(program, changeTracker, oldToNew, newToOld, host, getCanonicalFileName, preferences) { var _loop_15 = function (sourceFile) { var newFromOld = oldToNew(sourceFile.fileName); var newImportFromPath = newFromOld !== undefined ? newFromOld : sourceFile.fileName; var newImportFromDirectory = ts.getDirectoryPath(newImportFromPath); var oldFromNew = newToOld(sourceFile.fileName); var oldImportFromPath = oldFromNew || sourceFile.fileName; var oldImportFromDirectory = ts.getDirectoryPath(oldImportFromPath); var importingSourceFileMoved = newFromOld !== undefined || oldFromNew !== undefined; updateImportsWorker(sourceFile, changeTracker, function (referenceText) { if (!ts.pathIsRelative(referenceText)) return undefined; var oldAbsolute = combinePathsSafe(oldImportFromDirectory, referenceText); var newAbsolute = oldToNew(oldAbsolute); return newAbsolute === undefined ? undefined : ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(newImportFromDirectory, newAbsolute, getCanonicalFileName)); }, function (importLiteral) { var toImport = oldFromNew !== undefined ? getSourceFileToImportFromResolved(ts.resolveModuleName(importLiteral.text, oldImportFromPath, program.getCompilerOptions(), host), oldToNew, program) : getSourceFileToImport(importLiteral, sourceFile, program, host, oldToNew); return toImport === undefined || !toImport.updated && !importingSourceFileMoved ? undefined : ts.moduleSpecifiers.getModuleSpecifier(program.getCompilerOptions(), sourceFile, newImportFromPath, toImport.newFileName, host, preferences); }); }; for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; _loop_15(sourceFile); } } function combineNormal(pathA, pathB) { return ts.normalizePath(ts.combinePaths(pathA, pathB)); } function combinePathsSafe(pathA, pathB) { return ts.ensurePathIsNonModuleName(combineNormal(pathA, pathB)); } function getSourceFileToImport(importLiteral, importingSourceFile, program, host, oldToNew) { var symbol = program.getTypeChecker().getSymbolAtLocation(importLiteral); if (symbol) { if (symbol.declarations.some(function (d) { return ts.isAmbientModule(d); })) return undefined; var oldFileName = ts.find(symbol.declarations, ts.isSourceFile).fileName; var newFileName = oldToNew(oldFileName); return newFileName === undefined ? { newFileName: oldFileName, updated: false } : { newFileName: newFileName, updated: true }; } else { var resolved = host.resolveModuleNames ? host.getResolvedModuleWithFailedLookupLocationsFromCache && host.getResolvedModuleWithFailedLookupLocationsFromCache(importLiteral.text, importingSourceFile.fileName) : program.getResolvedModuleWithFailedLookupLocationsFromCache(importLiteral.text, importingSourceFile.fileName); return getSourceFileToImportFromResolved(resolved, oldToNew, program); } } function getSourceFileToImportFromResolved(resolved, oldToNew, program) { return resolved && ((resolved.resolvedModule && getIfInProgram(resolved.resolvedModule.resolvedFileName)) || ts.firstDefined(resolved.failedLookupLocations, getIfInProgram)); function getIfInProgram(oldLocation) { var newLocation = oldToNew(oldLocation); return program.getSourceFile(oldLocation) || newLocation !== undefined && program.getSourceFile(newLocation) ? newLocation !== undefined ? { newFileName: newLocation, updated: true } : { newFileName: oldLocation, updated: false } : undefined; } } function updateImportsWorker(sourceFile, changeTracker, updateRef, updateImport) { for (var _i = 0, _a = sourceFile.referencedFiles; _i < _a.length; _i++) { var ref = _a[_i]; var updated = updateRef(ref.fileName); if (updated !== undefined && updated !== sourceFile.text.slice(ref.pos, ref.end)) changeTracker.replaceRangeWithText(sourceFile, ref, updated); } for (var _b = 0, _c = sourceFile.imports; _b < _c.length; _b++) { var importStringLiteral = _c[_b]; var updated = updateImport(importStringLiteral); if (updated !== undefined && updated !== importStringLiteral.text) changeTracker.replaceRangeWithText(sourceFile, createStringRange(importStringLiteral, sourceFile), updated); } } function createStringRange(node, sourceFile) { return ts.createTextRange(node.getStart(sourceFile) + 1, node.end - 1); } function forEachProperty(objectLiteral, cb) { if (!ts.isObjectLiteralExpression(objectLiteral)) return; for (var _i = 0, _a = objectLiteral.properties; _i < _a.length; _i++) { var property = _a[_i]; if (ts.isPropertyAssignment(property) && ts.isStringLiteral(property.name)) { cb(property, property.name.text); } } } })(ts || (ts = {})); var ts; (function (ts) { var GoToDefinition; (function (GoToDefinition) { function getDefinitionAtPosition(program, sourceFile, position) { var reference = getReferenceAtPosition(sourceFile, position, program); if (reference) { return [getDefinitionInfoForFileReference(reference.fileName, reference.file.fileName)]; } var node = ts.getTouchingPropertyName(sourceFile, position); if (node === sourceFile) { return undefined; } var parent = node.parent; if (ts.isJumpStatementTarget(node)) { var label = ts.getTargetLabel(node.parent, node.text); return label ? [createDefinitionInfoFromName(label, "label", node.text, undefined)] : undefined; } var typeChecker = program.getTypeChecker(); var symbol = getSymbol(node, typeChecker); if (!symbol) { return getDefinitionInfoForIndexSignatures(node, typeChecker); } var calledDeclaration = tryGetSignatureDeclaration(typeChecker, node); if (calledDeclaration) { var sigInfo = createDefinitionFromSignatureDeclaration(typeChecker, calledDeclaration); if (typeChecker.getRootSymbols(symbol).some(function (s) { return symbolMatchesSignature(s, calledDeclaration); }) || symbol.declarations.some(function (d) { return ts.isVariableDeclaration(d) && !!d.initializer && ts.isRequireCall(d.initializer, false); })) { return [sigInfo]; } else { var defs = getDefinitionFromSymbol(typeChecker, symbol, node); return node.kind === 97 ? [sigInfo].concat(defs) : defs.concat([sigInfo]); } } if (node.parent.kind === 271) { var shorthandSymbol_1 = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); return shorthandSymbol_1 ? shorthandSymbol_1.declarations.map(function (decl) { return createDefinitionInfo(decl, typeChecker, shorthandSymbol_1, node); }) : []; } if (ts.isPropertyName(node) && ts.isBindingElement(parent) && ts.isObjectBindingPattern(parent.parent) && (node === (parent.propertyName || parent.name))) { var type = typeChecker.getTypeAtLocation(parent.parent); if (type) { var propSymbols = ts.getPropertySymbolsFromType(type, node); if (propSymbols) { return ts.flatMap(propSymbols, function (propSymbol) { return getDefinitionFromSymbol(typeChecker, propSymbol, node); }); } } } var element = ts.getContainingObjectLiteralElement(node); if (element && typeChecker.getContextualType(element.parent)) { return ts.flatMap(ts.getPropertySymbolsFromContextualType(typeChecker, element), function (propertySymbol) { return getDefinitionFromSymbol(typeChecker, propertySymbol, node); }); } return getDefinitionFromSymbol(typeChecker, symbol, node); } GoToDefinition.getDefinitionAtPosition = getDefinitionAtPosition; function symbolMatchesSignature(s, calledDeclaration) { return s === calledDeclaration.symbol || s === calledDeclaration.symbol.parent || ts.isVariableDeclaration(calledDeclaration.parent) && s === calledDeclaration.parent.symbol; } function getReferenceAtPosition(sourceFile, position, program) { var referencePath = findReferenceInPosition(sourceFile.referencedFiles, position); if (referencePath) { var file = ts.tryResolveScriptReference(program, sourceFile, referencePath); return file && { fileName: referencePath.fileName, file: file }; } var typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); if (typeReferenceDirective) { var reference = program.getResolvedTypeReferenceDirectives().get(typeReferenceDirective.fileName); var file = reference && program.getSourceFile(reference.resolvedFileName); return file && { fileName: typeReferenceDirective.fileName, file: file }; } var libReferenceDirective = findReferenceInPosition(sourceFile.libReferenceDirectives, position); if (libReferenceDirective) { var file = program.getLibFileFromReference(libReferenceDirective); return file && { fileName: libReferenceDirective.fileName, file: file }; } return undefined; } GoToDefinition.getReferenceAtPosition = getReferenceAtPosition; function getTypeDefinitionAtPosition(typeChecker, sourceFile, position) { var node = ts.getTouchingPropertyName(sourceFile, position); if (node === sourceFile) { return undefined; } var symbol = typeChecker.getSymbolAtLocation(node); var type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, node); if (!type) { return undefined; } if (type.isUnion() && !(type.flags & 32)) { return ts.flatMap(type.types, function (t) { return t.symbol && getDefinitionFromSymbol(typeChecker, t.symbol, node); }); } return type.symbol && getDefinitionFromSymbol(typeChecker, type.symbol, node); } GoToDefinition.getTypeDefinitionAtPosition = getTypeDefinitionAtPosition; function getDefinitionAndBoundSpan(program, sourceFile, position) { var definitions = getDefinitionAtPosition(program, sourceFile, position); if (!definitions || definitions.length === 0) { return undefined; } var comment = findReferenceInPosition(sourceFile.referencedFiles, position) || findReferenceInPosition(sourceFile.typeReferenceDirectives, position) || findReferenceInPosition(sourceFile.libReferenceDirectives, position); if (comment) { return { definitions: definitions, textSpan: ts.createTextSpanFromRange(comment) }; } var node = ts.getTouchingPropertyName(sourceFile, position); var textSpan = ts.createTextSpan(node.getStart(), node.getWidth()); return { definitions: definitions, textSpan: textSpan }; } GoToDefinition.getDefinitionAndBoundSpan = getDefinitionAndBoundSpan; function getDefinitionInfoForIndexSignatures(node, checker) { if (!ts.isPropertyAccessExpression(node.parent) || node.parent.name !== node) return; var type = checker.getTypeAtLocation(node.parent.expression); return ts.mapDefined(type.isUnionOrIntersection() ? type.types : [type], function (nonUnionType) { var info = checker.getIndexInfoOfType(nonUnionType, 0); return info && info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration); }); } function getSymbol(node, checker) { var symbol = checker.getSymbolAtLocation(node); if (symbol && symbol.flags & 2097152 && shouldSkipAlias(node, symbol.declarations[0])) { var aliased = checker.getAliasedSymbol(symbol); if (aliased.declarations) { return aliased; } } return symbol; } function shouldSkipAlias(node, declaration) { if (node.kind !== 71) { return false; } if (node.parent === declaration) { return true; } switch (declaration.kind) { case 245: case 243: return true; case 248: return declaration.parent.kind === 247; default: return false; } } function getDefinitionFromSymbol(typeChecker, symbol, node) { return getConstructSignatureDefinition() || getCallSignatureDefinition() || ts.map(symbol.declarations, function (declaration) { return createDefinitionInfo(declaration, typeChecker, symbol, node); }); function getConstructSignatureDefinition() { if (symbol.flags & 32 && (ts.isNewExpressionTarget(node) || node.kind === 123)) { var cls = ts.find(symbol.declarations, ts.isClassLike) || ts.Debug.fail("Expected declaration to have at least one class-like declaration"); return getSignatureDefinition(cls.members, true); } } function getCallSignatureDefinition() { return ts.isCallExpressionTarget(node) || ts.isNewExpressionTarget(node) || ts.isNameOfFunctionDeclaration(node) ? getSignatureDefinition(symbol.declarations, false) : undefined; } function getSignatureDefinition(signatureDeclarations, selectConstructors) { if (!signatureDeclarations) { return undefined; } var declarations = signatureDeclarations.filter(selectConstructors ? ts.isConstructorDeclaration : ts.isFunctionLike); return declarations.length ? [createDefinitionInfo(ts.find(declarations, function (d) { return !!d.body; }) || ts.last(declarations), typeChecker, symbol, node)] : undefined; } } function createDefinitionInfo(declaration, checker, symbol, node) { var symbolName = checker.symbolToString(symbol); var symbolKind = ts.SymbolDisplay.getSymbolKind(checker, symbol, node); var containerName = symbol.parent ? checker.symbolToString(symbol.parent, node) : ""; return createDefinitionInfoFromName(declaration, symbolKind, symbolName, containerName); } function createDefinitionInfoFromName(declaration, symbolKind, symbolName, containerName) { var name = ts.getNameOfDeclaration(declaration) || declaration; var sourceFile = name.getSourceFile(); return { fileName: sourceFile.fileName, textSpan: ts.createTextSpanFromNode(name, sourceFile), kind: symbolKind, name: symbolName, containerKind: undefined, containerName: containerName }; } function createDefinitionFromSignatureDeclaration(typeChecker, decl) { return createDefinitionInfo(decl, typeChecker, decl.symbol, decl); } function findReferenceInPosition(refs, pos) { return ts.find(refs, function (ref) { return ref.pos <= pos && pos <= ref.end; }); } GoToDefinition.findReferenceInPosition = findReferenceInPosition; function getDefinitionInfoForFileReference(name, targetFileName) { return { fileName: targetFileName, textSpan: ts.createTextSpanFromBounds(0, 0), kind: "script", name: name, containerName: undefined, containerKind: undefined, }; } function getAncestorCallLikeExpression(node) { var target = climbPastManyPropertyAccesses(node); var callLike = target.parent; return callLike && ts.isCallLikeExpression(callLike) && ts.getInvokedExpression(callLike) === target ? callLike : undefined; } function climbPastManyPropertyAccesses(node) { return ts.isRightSideOfPropertyAccess(node) ? climbPastManyPropertyAccesses(node.parent) : node; } function tryGetSignatureDeclaration(typeChecker, node) { var callLike = getAncestorCallLikeExpression(node); var signature = callLike && typeChecker.getResolvedSignature(callLike); return ts.tryCast(signature && signature.declaration, function (d) { return ts.isFunctionLike(d) && !ts.isFunctionTypeNode(d); }); } })(GoToDefinition = ts.GoToDefinition || (ts.GoToDefinition = {})); })(ts || (ts = {})); var ts; (function (ts) { var JsDoc; (function (JsDoc) { var jsDocTagNames = [ "augments", "author", "argument", "borrows", "callback", "class", "constant", "constructor", "constructs", "default", "deprecated", "description", "event", "example", "extends", "field", "fileOverview", "function", "ignore", "inheritDoc", "inner", "lends", "link", "memberOf", "method", "name", "namespace", "param", "private", "prop", "property", "public", "requires", "returns", "see", "since", "static", "template", "throws", "type", "typedef", "version" ]; var jsDocTagNameCompletionEntries; var jsDocTagCompletionEntries; function getJsDocCommentsFromDeclarations(declarations) { var documentationComment = []; forEachUnique(declarations, function (declaration) { for (var _i = 0, _a = getCommentHavingNodes(declaration); _i < _a.length; _i++) { var comment = _a[_i].comment; if (comment === undefined) continue; if (documentationComment.length) { documentationComment.push(ts.lineBreakPart()); } documentationComment.push(ts.textPart(comment)); } }); return documentationComment; } JsDoc.getJsDocCommentsFromDeclarations = getJsDocCommentsFromDeclarations; function getCommentHavingNodes(declaration) { switch (declaration.kind) { case 293: case 299: return [declaration]; case 292: case 298: return [declaration, declaration.parent]; default: return ts.getJSDocCommentsAndTags(declaration); } } function getJsDocTagsFromDeclarations(declarations) { var tags = []; forEachUnique(declarations, function (declaration) { for (var _i = 0, _a = ts.getJSDocTags(declaration); _i < _a.length; _i++) { var tag = _a[_i]; tags.push({ name: tag.tagName.text, text: getCommentText(tag) }); } }); return tags; } JsDoc.getJsDocTagsFromDeclarations = getJsDocTagsFromDeclarations; function getCommentText(tag) { var comment = tag.comment; switch (tag.kind) { case 290: return withNode(tag.class); case 297: return withList(tag.typeParameters); case 296: return withNode(tag.typeExpression); case 298: case 292: case 299: case 293: var name = tag.name; return name ? withNode(name) : comment; default: return comment; } function withNode(node) { return addComment(node.getText()); } function withList(list) { return addComment(list.map(function (x) { return x.getText(); }).join(", ")); } function addComment(s) { return comment === undefined ? s : s + " " + comment; } } function forEachUnique(array, callback) { if (array) { for (var i = 0; i < array.length; i++) { if (array.indexOf(array[i]) === i) { var result = callback(array[i], i); if (result) { return result; } } } } return undefined; } function getJSDocTagNameCompletions() { return jsDocTagNameCompletionEntries || (jsDocTagNameCompletionEntries = ts.map(jsDocTagNames, function (tagName) { return { name: tagName, kind: "keyword", kindModifiers: "", sortText: "0", }; })); } JsDoc.getJSDocTagNameCompletions = getJSDocTagNameCompletions; JsDoc.getJSDocTagNameCompletionDetails = getJSDocTagCompletionDetails; function getJSDocTagCompletions() { return jsDocTagCompletionEntries || (jsDocTagCompletionEntries = ts.map(jsDocTagNames, function (tagName) { return { name: "@" + tagName, kind: "keyword", kindModifiers: "", sortText: "0" }; })); } JsDoc.getJSDocTagCompletions = getJSDocTagCompletions; function getJSDocTagCompletionDetails(name) { return { name: name, kind: "", kindModifiers: "", displayParts: [ts.textPart(name)], documentation: ts.emptyArray, tags: ts.emptyArray, codeActions: undefined, }; } JsDoc.getJSDocTagCompletionDetails = getJSDocTagCompletionDetails; function getJSDocParameterNameCompletions(tag) { if (!ts.isIdentifier(tag.name)) { return ts.emptyArray; } var nameThusFar = tag.name.text; var jsdoc = tag.parent; var fn = jsdoc.parent; if (!ts.isFunctionLike(fn)) return []; return ts.mapDefined(fn.parameters, function (param) { if (!ts.isIdentifier(param.name)) return undefined; var name = param.name.text; if (jsdoc.tags.some(function (t) { return t !== tag && ts.isJSDocParameterTag(t) && ts.isIdentifier(t.name) && t.name.escapedText === name; }) || nameThusFar !== undefined && !ts.startsWith(name, nameThusFar)) { return undefined; } return { name: name, kind: "parameter", kindModifiers: "", sortText: "0" }; }); } JsDoc.getJSDocParameterNameCompletions = getJSDocParameterNameCompletions; function getJSDocParameterNameCompletionDetails(name) { return { name: name, kind: "parameter", kindModifiers: "", displayParts: [ts.textPart(name)], documentation: ts.emptyArray, tags: ts.emptyArray, codeActions: undefined, }; } JsDoc.getJSDocParameterNameCompletionDetails = getJSDocParameterNameCompletionDetails; function getDocCommentTemplateAtPosition(newLine, sourceFile, position) { if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position) || ts.hasDocComment(sourceFile, position)) { return undefined; } var tokenAtPos = ts.getTokenAtPosition(sourceFile, position, false); var tokenStart = tokenAtPos.getStart(sourceFile); if (!tokenAtPos || tokenStart < position) { return undefined; } var commentOwnerInfo = getCommentOwnerInfo(tokenAtPos); if (!commentOwnerInfo) { return undefined; } var commentOwner = commentOwnerInfo.commentOwner, parameters = commentOwnerInfo.parameters; if (commentOwner.getStart(sourceFile) < position) { return undefined; } if (!parameters || parameters.length === 0) { var singleLineResult = "/** */"; return { newText: singleLineResult, caretOffset: 3 }; } var posLineAndChar = sourceFile.getLineAndCharacterOfPosition(position); var lineStart = sourceFile.getLineStarts()[posLineAndChar.line]; var indentationStr = sourceFile.text.substr(lineStart, posLineAndChar.character).replace(/\S/i, function () { return " "; }); var preamble = "/**" + newLine + indentationStr + " * "; var result = preamble + newLine + parameterDocComments(parameters, ts.hasJavaScriptFileExtension(sourceFile.fileName), indentationStr, newLine) + indentationStr + " */" + (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } JsDoc.getDocCommentTemplateAtPosition = getDocCommentTemplateAtPosition; function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) { return parameters.map(function (_a, i) { var name = _a.name, dotDotDotToken = _a.dotDotDotToken; var paramName = name.kind === 71 ? name.text : "param" + i; var type = isJavaScriptFile ? (dotDotDotToken ? "{...any} " : "{any} ") : ""; return indentationStr + " * @param " + type + paramName + newLine; }).join(""); } function getCommentOwnerInfo(tokenAtPos) { for (var commentOwner = tokenAtPos; commentOwner; commentOwner = commentOwner.parent) { switch (commentOwner.kind) { case 234: case 154: case 155: case 153: var parameters = commentOwner.parameters; return { commentOwner: commentOwner, parameters: parameters }; case 235: case 236: case 151: case 238: case 273: case 237: return { commentOwner: commentOwner }; case 214: { var varStatement = commentOwner; var varDeclarations = varStatement.declarationList.declarations; var parameters_1 = varDeclarations.length === 1 && varDeclarations[0].initializer ? getParametersFromRightHandSideOfAssignment(varDeclarations[0].initializer) : undefined; return { commentOwner: commentOwner, parameters: parameters_1 }; } case 274: return undefined; case 239: return commentOwner.parent.kind === 239 ? undefined : { commentOwner: commentOwner }; case 200: { var be = commentOwner; if (ts.getSpecialPropertyAssignmentKind(be) === 0) { return undefined; } var parameters_2 = ts.isFunctionLike(be.right) ? be.right.parameters : ts.emptyArray; return { commentOwner: commentOwner, parameters: parameters_2 }; } } } } function getParametersFromRightHandSideOfAssignment(rightHandSide) { while (rightHandSide.kind === 191) { rightHandSide = rightHandSide.expression; } switch (rightHandSide.kind) { case 192: case 193: return rightHandSide.parameters; case 205: { var ctr = ts.find(rightHandSide.members, ts.isConstructorDeclaration); return ctr ? ctr.parameters : ts.emptyArray; } } return ts.emptyArray; } })(JsDoc = ts.JsDoc || (ts.JsDoc = {})); })(ts || (ts = {})); var ts; (function (ts) { var NavigateTo; (function (NavigateTo) { function getNavigateToItems(sourceFiles, checker, cancellationToken, searchValue, maxResultCount, excludeDtsFiles) { var patternMatcher = ts.createPatternMatcher(searchValue); if (!patternMatcher) return ts.emptyArray; var rawItems = []; var _loop_16 = function (sourceFile) { cancellationToken.throwIfCancellationRequested(); if (excludeDtsFiles && ts.fileExtensionIs(sourceFile.fileName, ".d.ts")) { return "continue"; } sourceFile.getNamedDeclarations().forEach(function (declarations, name) { getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, sourceFile.fileName, rawItems); }); }; for (var _i = 0, sourceFiles_7 = sourceFiles; _i < sourceFiles_7.length; _i++) { var sourceFile = sourceFiles_7[_i]; _loop_16(sourceFile); } rawItems.sort(compareNavigateToItems); if (maxResultCount !== undefined) { rawItems = rawItems.slice(0, maxResultCount); } return rawItems.map(createNavigateToItem); } NavigateTo.getNavigateToItems = getNavigateToItems; function getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, fileName, rawItems) { var match = patternMatcher.getMatchForLastSegmentOfPattern(name); if (!match) { return; } for (var _i = 0, declarations_12 = declarations; _i < declarations_12.length; _i++) { var declaration = declarations_12[_i]; if (!shouldKeepItem(declaration, checker)) continue; if (patternMatcher.patternContainsDots) { var fullMatch = patternMatcher.getFullMatch(getContainers(declaration), name); if (fullMatch) { rawItems.push({ name: name, fileName: fileName, matchKind: fullMatch.kind, isCaseSensitive: fullMatch.isCaseSensitive, declaration: declaration }); } } else { rawItems.push({ name: name, fileName: fileName, matchKind: match.kind, isCaseSensitive: match.isCaseSensitive, declaration: declaration }); } } } function shouldKeepItem(declaration, checker) { switch (declaration.kind) { case 245: case 248: case 243: var importer = checker.getSymbolAtLocation(declaration.name); var imported = checker.getAliasedSymbol(importer); return importer.escapedName !== imported.escapedName; default: return true; } } function tryAddSingleDeclarationName(declaration, containers) { var name = ts.getNameOfDeclaration(declaration); if (name && ts.isPropertyNameLiteral(name)) { containers.unshift(ts.getTextOfIdentifierOrLiteral(name)); return true; } else if (name && name.kind === 147) { return tryAddComputedPropertyName(name.expression, containers, true); } else { return false; } } function tryAddComputedPropertyName(expression, containers, includeLastPortion) { if (ts.isPropertyNameLiteral(expression)) { var text = ts.getTextOfIdentifierOrLiteral(expression); if (includeLastPortion) { containers.unshift(text); } return true; } if (ts.isPropertyAccessExpression(expression)) { if (includeLastPortion) { containers.unshift(expression.name.text); } return tryAddComputedPropertyName(expression.expression, containers, true); } return false; } function getContainers(declaration) { var containers = []; var name = ts.getNameOfDeclaration(declaration); if (name.kind === 147 && !tryAddComputedPropertyName(name.expression, containers, false)) { return undefined; } var container = ts.getContainerNode(declaration); while (container) { if (!tryAddSingleDeclarationName(container, containers)) { return undefined; } container = ts.getContainerNode(container); } return containers; } function compareNavigateToItems(i1, i2) { return ts.compareValues(i1.matchKind, i2.matchKind) || ts.compareStringsCaseSensitiveUI(i1.name, i2.name); } function createNavigateToItem(rawItem) { var declaration = rawItem.declaration; var container = ts.getContainerNode(declaration); var containerName = container && ts.getNameOfDeclaration(container); return { name: rawItem.name, kind: ts.getNodeKind(declaration), kindModifiers: ts.getNodeModifiers(declaration), matchKind: ts.PatternMatchKind[rawItem.matchKind], isCaseSensitive: rawItem.isCaseSensitive, fileName: rawItem.fileName, textSpan: ts.createTextSpanFromNode(declaration), containerName: containerName ? containerName.text : "", containerKind: containerName ? ts.getNodeKind(container) : "" }; } })(NavigateTo = ts.NavigateTo || (ts.NavigateTo = {})); })(ts || (ts = {})); var ts; (function (ts) { var NavigationBar; (function (NavigationBar) { var whiteSpaceRegex = /\s+/g; var curCancellationToken; var curSourceFile; var parentsStack = []; var parent; var emptyChildItemArray = []; function getNavigationBarItems(sourceFile, cancellationToken) { curCancellationToken = cancellationToken; curSourceFile = sourceFile; try { return ts.map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); } finally { reset(); } } NavigationBar.getNavigationBarItems = getNavigationBarItems; function getNavigationTree(sourceFile, cancellationToken) { curCancellationToken = cancellationToken; curSourceFile = sourceFile; try { return convertToTree(rootNavigationBarNode(sourceFile)); } finally { reset(); } } NavigationBar.getNavigationTree = getNavigationTree; function reset() { curSourceFile = undefined; curCancellationToken = undefined; parentsStack = []; parent = undefined; emptyChildItemArray = []; } function nodeText(node) { return node.getText(curSourceFile); } function navigationBarNodeKind(n) { return n.node.kind; } function pushChild(parent, child) { if (parent.children) { parent.children.push(child); } else { parent.children = [child]; } } function rootNavigationBarNode(sourceFile) { ts.Debug.assert(!parentsStack.length); var root = { node: sourceFile, name: undefined, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; parent = root; for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; addChildrenRecursively(statement); } endNode(); ts.Debug.assert(!parent && !parentsStack.length); return root; } function addLeafNode(node) { pushChild(parent, emptyNavigationBarNode(node)); } function emptyNavigationBarNode(node) { return { node: node, name: ts.isDeclaration(node) || ts.isExpression(node) ? ts.getNameOfDeclaration(node) : undefined, additionalNodes: undefined, parent: parent, children: undefined, indent: parent.indent + 1 }; } function startNode(node) { var navNode = emptyNavigationBarNode(node); pushChild(parent, navNode); parentsStack.push(parent); parent = navNode; } function endNode() { if (parent.children) { mergeChildren(parent.children); sortChildren(parent.children); } parent = parentsStack.pop(); } function addNodeWithRecursiveChild(node, child) { startNode(node); addChildrenRecursively(child); endNode(); } function addChildrenRecursively(node) { curCancellationToken.throwIfCancellationRequested(); if (!node || ts.isToken(node)) { return; } switch (node.kind) { case 155: var ctr = node; addNodeWithRecursiveChild(ctr, ctr.body); for (var _i = 0, _a = ctr.parameters; _i < _a.length; _i++) { var param = _a[_i]; if (ts.isParameterPropertyDeclaration(param)) { addLeafNode(param); } } break; case 154: case 156: case 157: case 153: if (!ts.hasDynamicName(node)) { addNodeWithRecursiveChild(node, node.body); } break; case 152: case 151: if (!ts.hasDynamicName(node)) { addLeafNode(node); } break; case 245: var importClause = node; if (importClause.name) { addLeafNode(importClause); } var namedBindings = importClause.namedBindings; if (namedBindings) { if (namedBindings.kind === 246) { addLeafNode(namedBindings); } else { for (var _b = 0, _c = namedBindings.elements; _b < _c.length; _b++) { var element = _c[_b]; addLeafNode(element); } } } break; case 182: case 232: var _d = node, name = _d.name, initializer = _d.initializer; if (ts.isBindingPattern(name)) { addChildrenRecursively(name); } else if (initializer && isFunctionOrClassExpression(initializer)) { if (initializer.name) { addChildrenRecursively(initializer); } else { startNode(node); ts.forEachChild(initializer, addChildrenRecursively); endNode(); } } else { addNodeWithRecursiveChild(node, initializer); } break; case 193: case 234: case 192: addNodeWithRecursiveChild(node, node.body); break; case 238: startNode(node); for (var _e = 0, _f = node.members; _e < _f.length; _e++) { var member = _f[_e]; if (!isComputedProperty(member)) { addLeafNode(member); } } endNode(); break; case 235: case 205: case 236: startNode(node); for (var _g = 0, _h = node.members; _g < _h.length; _g++) { var member = _h[_g]; addChildrenRecursively(member); } endNode(); break; case 239: addNodeWithRecursiveChild(node, getInteriorModule(node).body); break; case 252: case 243: case 160: case 158: case 159: case 237: addLeafNode(node); break; case 200: { var special = ts.getSpecialPropertyAssignmentKind(node); switch (special) { case 1: case 2: case 3: case 6: addNodeWithRecursiveChild(node, node.right); break; case 4: case 5: case 0: break; default: ts.Debug.assertNever(special); } } default: if (ts.hasJSDocNodes(node)) { ts.forEach(node.jsDoc, function (jsDoc) { ts.forEach(jsDoc.tags, function (tag) { if (ts.isJSDocTypeAlias(tag)) { addLeafNode(tag); } }); }); } ts.forEachChild(node, addChildrenRecursively); } } function mergeChildren(children) { var nameToItems = ts.createMap(); ts.filterMutate(children, function (child) { var declName = ts.getNameOfDeclaration(child.node); var name = declName && nodeText(declName); if (!name) { return true; } var itemsWithSameName = nameToItems.get(name); if (!itemsWithSameName) { nameToItems.set(name, child); return true; } if (itemsWithSameName instanceof Array) { for (var _i = 0, itemsWithSameName_1 = itemsWithSameName; _i < itemsWithSameName_1.length; _i++) { var itemWithSameName = itemsWithSameName_1[_i]; if (tryMerge(itemWithSameName, child)) { return false; } } itemsWithSameName.push(child); return true; } else { var itemWithSameName = itemsWithSameName; if (tryMerge(itemWithSameName, child)) { return false; } nameToItems.set(name, [itemWithSameName, child]); return true; } }); } function tryMerge(a, b) { if (shouldReallyMerge(a.node, b.node)) { merge(a, b); return true; } return false; } function shouldReallyMerge(a, b) { if (a.kind !== b.kind) { return false; } switch (a.kind) { case 152: case 154: case 156: case 157: return ts.hasModifier(a, 32) === ts.hasModifier(b, 32); case 239: return areSameModule(a, b); default: return true; } } function areSameModule(a, b) { return a.body.kind === b.body.kind && (a.body.kind !== 239 || areSameModule(a.body, b.body)); } function merge(target, source) { var _a; target.additionalNodes = target.additionalNodes || []; target.additionalNodes.push(source.node); if (source.additionalNodes) { (_a = target.additionalNodes).push.apply(_a, source.additionalNodes); } target.children = ts.concatenate(target.children, source.children); if (target.children) { mergeChildren(target.children); sortChildren(target.children); } } function sortChildren(children) { children.sort(compareChildren); } function compareChildren(child1, child2) { return ts.compareStringsCaseSensitiveUI(tryGetName(child1.node), tryGetName(child2.node)) || ts.compareValues(navigationBarNodeKind(child1), navigationBarNodeKind(child2)); } function tryGetName(node) { if (node.kind === 239) { return getModuleName(node); } var declName = ts.getNameOfDeclaration(node); if (declName) { return ts.unescapeLeadingUnderscores(ts.getPropertyNameForPropertyNameNode(declName)); } switch (node.kind) { case 192: case 193: case 205: return getFunctionOrClassName(node); default: return undefined; } } function getItemName(node, name) { if (node.kind === 239) { return getModuleName(node); } if (name) { var text = nodeText(name); if (text.length > 0) { return text; } } switch (node.kind) { case 274: var sourceFile = node; return ts.isExternalModule(sourceFile) ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" : ""; case 193: case 234: case 192: case 235: case 205: if (ts.getModifierFlags(node) & 512) { return "default"; } return getFunctionOrClassName(node); case 155: return "constructor"; case 159: return "new()"; case 158: return "()"; case 160: return "[]"; default: return ""; } } function topLevelItems(root) { var topLevel = []; function recur(item) { if (isTopLevel(item)) { topLevel.push(item); if (item.children) { for (var _i = 0, _a = item.children; _i < _a.length; _i++) { var child = _a[_i]; recur(child); } } } } recur(root); return topLevel; function isTopLevel(item) { switch (navigationBarNodeKind(item)) { case 235: case 205: case 238: case 236: case 239: case 274: case 237: case 298: case 292: return true; case 155: case 154: case 156: case 157: case 232: return hasSomeImportantChild(item); case 193: case 234: case 192: return isTopLevelFunctionDeclaration(item); default: return false; } function isTopLevelFunctionDeclaration(item) { if (!item.node.body) { return false; } switch (navigationBarNodeKind(item.parent)) { case 240: case 274: case 154: case 155: return true; default: return hasSomeImportantChild(item); } } function hasSomeImportantChild(item) { return ts.some(item.children, function (child) { var childKind = navigationBarNodeKind(child); return childKind !== 232 && childKind !== 182; }); } } } function convertToTree(n) { return { text: getItemName(n.node, n.name), kind: ts.getNodeKind(n.node), kindModifiers: getModifiers(n.node), spans: getSpans(n), nameSpan: n.name && getNodeSpan(n.name), childItems: ts.map(n.children, convertToTree) }; } function convertToTopLevelItem(n) { return { text: getItemName(n.node, n.name), kind: ts.getNodeKind(n.node), kindModifiers: getModifiers(n.node), spans: getSpans(n), childItems: ts.map(n.children, convertToChildItem) || emptyChildItemArray, indent: n.indent, bolded: false, grayed: false }; function convertToChildItem(n) { return { text: getItemName(n.node, n.name), kind: ts.getNodeKind(n.node), kindModifiers: ts.getNodeModifiers(n.node), spans: getSpans(n), childItems: emptyChildItemArray, indent: 0, bolded: false, grayed: false }; } } function getSpans(n) { var spans = [getNodeSpan(n.node)]; if (n.additionalNodes) { for (var _i = 0, _a = n.additionalNodes; _i < _a.length; _i++) { var node = _a[_i]; spans.push(getNodeSpan(node)); } } return spans; } function getModuleName(moduleDeclaration) { if (ts.isAmbientModule(moduleDeclaration)) { return ts.getTextOfNode(moduleDeclaration.name); } var result = []; result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)); while (moduleDeclaration.body && moduleDeclaration.body.kind === 239) { moduleDeclaration = moduleDeclaration.body; result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)); } return result.join("."); } function getInteriorModule(decl) { return decl.body.kind === 239 ? getInteriorModule(decl.body) : decl; } function isComputedProperty(member) { return !member.name || member.name.kind === 147; } function getNodeSpan(node) { return node.kind === 274 ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile); } function getModifiers(node) { if (node.parent && node.parent.kind === 232) { node = node.parent; } return ts.getNodeModifiers(node); } function getFunctionOrClassName(node) { if (node.name && ts.getFullWidth(node.name) > 0) { return ts.declarationNameToString(node.name); } else if (node.parent.kind === 232) { return ts.declarationNameToString(node.parent.name); } else if (node.parent.kind === 200 && node.parent.operatorToken.kind === 58) { return nodeText(node.parent.left).replace(whiteSpaceRegex, ""); } else if (node.parent.kind === 270 && node.parent.name) { return nodeText(node.parent.name); } else if (ts.getModifierFlags(node) & 512) { return "default"; } else { return ts.isClassLike(node) ? "" : ""; } } function isFunctionOrClassExpression(node) { switch (node.kind) { case 193: case 192: case 205: return true; default: return false; } } })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); })(ts || (ts = {})); var ts; (function (ts) { var OrganizeImports; (function (OrganizeImports) { function organizeImports(sourceFile, formatContext, host, program, _preferences) { var changeTracker = ts.textChanges.ChangeTracker.fromContext({ host: host, formatContext: formatContext }); var coalesceAndOrganizeImports = function (importGroup) { return coalesceImports(removeUnusedImports(importGroup, sourceFile, program)); }; var topLevelImportDecls = sourceFile.statements.filter(ts.isImportDeclaration); organizeImportsWorker(topLevelImportDecls, coalesceAndOrganizeImports); var topLevelExportDecls = sourceFile.statements.filter(ts.isExportDeclaration); organizeImportsWorker(topLevelExportDecls, coalesceExports); for (var _i = 0, _a = sourceFile.statements.filter(ts.isAmbientModule); _i < _a.length; _i++) { var ambientModule = _a[_i]; var ambientModuleBody = getModuleBlock(ambientModule); var ambientModuleImportDecls = ambientModuleBody.statements.filter(ts.isImportDeclaration); organizeImportsWorker(ambientModuleImportDecls, coalesceAndOrganizeImports); var ambientModuleExportDecls = ambientModuleBody.statements.filter(ts.isExportDeclaration); organizeImportsWorker(ambientModuleExportDecls, coalesceExports); } return changeTracker.getChanges(); function organizeImportsWorker(oldImportDecls, coalesce) { if (ts.length(oldImportDecls) === 0) { return; } ts.suppressLeadingTrivia(oldImportDecls[0]); var oldImportGroups = ts.group(oldImportDecls, function (importDecl) { return getExternalModuleName(importDecl.moduleSpecifier); }); var sortedImportGroups = ts.stableSort(oldImportGroups, function (group1, group2) { return compareModuleSpecifiers(group1[0].moduleSpecifier, group2[0].moduleSpecifier); }); var newImportDecls = ts.flatMap(sortedImportGroups, function (importGroup) { return getExternalModuleName(importGroup[0].moduleSpecifier) ? coalesce(importGroup) : importGroup; }); if (newImportDecls.length === 0) { changeTracker.deleteNode(sourceFile, oldImportDecls[0], { useNonAdjustedStartPosition: true, useNonAdjustedEndPosition: false, }); } else { changeTracker.replaceNodeWithNodes(sourceFile, oldImportDecls[0], newImportDecls, { useNonAdjustedStartPosition: true, useNonAdjustedEndPosition: false, suffix: ts.getNewLineOrDefaultFromHost(host, formatContext.options), }); } for (var i = 1; i < oldImportDecls.length; i++) { changeTracker.deleteNode(sourceFile, oldImportDecls[i]); } } } OrganizeImports.organizeImports = organizeImports; function getModuleBlock(moduleDecl) { var body = moduleDecl.body; return body && !ts.isIdentifier(body) ? (ts.isModuleBlock(body) ? body : getModuleBlock(body)) : undefined; } function removeUnusedImports(oldImports, sourceFile, program) { var typeChecker = program.getTypeChecker(); var jsxNamespace = typeChecker.getJsxNamespace(); var jsxElementsPresent = !!(sourceFile.transformFlags & 4); var usedImports = []; for (var _i = 0, oldImports_1 = oldImports; _i < oldImports_1.length; _i++) { var importDecl = oldImports_1[_i]; var importClause = importDecl.importClause; if (!importClause) { usedImports.push(importDecl); continue; } var name = importClause.name, namedBindings = importClause.namedBindings; if (name && !isDeclarationUsed(name)) { name = undefined; } if (namedBindings) { if (ts.isNamespaceImport(namedBindings)) { if (!isDeclarationUsed(namedBindings.name)) { namedBindings = undefined; } } else { var newElements = namedBindings.elements.filter(function (e) { return isDeclarationUsed(e.name); }); if (newElements.length < namedBindings.elements.length) { namedBindings = newElements.length ? ts.updateNamedImports(namedBindings, newElements) : undefined; } } } if (name || namedBindings) { usedImports.push(updateImportDeclarationAndClause(importDecl, name, namedBindings)); } } return usedImports; function isDeclarationUsed(identifier) { return jsxElementsPresent && (identifier.text === jsxNamespace) || ts.FindAllReferences.Core.isSymbolReferencedInFile(identifier, typeChecker, sourceFile); } } function getExternalModuleName(specifier) { return specifier !== undefined && ts.isStringLiteralLike(specifier) ? specifier.text : undefined; } function coalesceImports(importGroup) { if (importGroup.length === 0) { return importGroup; } var _a = getCategorizedImports(importGroup), importWithoutClause = _a.importWithoutClause, defaultImports = _a.defaultImports, namespaceImports = _a.namespaceImports, namedImports = _a.namedImports; var coalescedImports = []; if (importWithoutClause) { coalescedImports.push(importWithoutClause); } if (defaultImports.length === 1 && namespaceImports.length === 1 && namedImports.length === 0) { var defaultImport = defaultImports[0]; coalescedImports.push(updateImportDeclarationAndClause(defaultImport, defaultImport.importClause.name, namespaceImports[0].importClause.namedBindings)); return coalescedImports; } var sortedNamespaceImports = ts.stableSort(namespaceImports, function (i1, i2) { return compareIdentifiers(i1.importClause.namedBindings.name, i2.importClause.namedBindings.name); }); for (var _i = 0, sortedNamespaceImports_1 = sortedNamespaceImports; _i < sortedNamespaceImports_1.length; _i++) { var namespaceImport = sortedNamespaceImports_1[_i]; coalescedImports.push(updateImportDeclarationAndClause(namespaceImport, undefined, namespaceImport.importClause.namedBindings)); } if (defaultImports.length === 0 && namedImports.length === 0) { return coalescedImports; } var newDefaultImport; var newImportSpecifiers = []; if (defaultImports.length === 1) { newDefaultImport = defaultImports[0].importClause.name; } else { for (var _b = 0, defaultImports_1 = defaultImports; _b < defaultImports_1.length; _b++) { var defaultImport = defaultImports_1[_b]; newImportSpecifiers.push(ts.createImportSpecifier(ts.createIdentifier("default"), defaultImport.importClause.name)); } } newImportSpecifiers.push.apply(newImportSpecifiers, ts.flatMap(namedImports, function (i) { return i.importClause.namedBindings.elements; })); var sortedImportSpecifiers = sortSpecifiers(newImportSpecifiers); var importDecl = defaultImports.length > 0 ? defaultImports[0] : namedImports[0]; var newNamedImports = sortedImportSpecifiers.length === 0 ? newDefaultImport ? undefined : ts.createNamedImports(ts.emptyArray) : namedImports.length === 0 ? ts.createNamedImports(sortedImportSpecifiers) : ts.updateNamedImports(namedImports[0].importClause.namedBindings, sortedImportSpecifiers); coalescedImports.push(updateImportDeclarationAndClause(importDecl, newDefaultImport, newNamedImports)); return coalescedImports; function getCategorizedImports(importGroup) { var importWithoutClause; var defaultImports = []; var namespaceImports = []; var namedImports = []; for (var _i = 0, importGroup_1 = importGroup; _i < importGroup_1.length; _i++) { var importDeclaration = importGroup_1[_i]; if (importDeclaration.importClause === undefined) { importWithoutClause = importWithoutClause || importDeclaration; continue; } var _a = importDeclaration.importClause, name = _a.name, namedBindings = _a.namedBindings; if (name) { defaultImports.push(importDeclaration); } if (namedBindings) { if (ts.isNamespaceImport(namedBindings)) { namespaceImports.push(importDeclaration); } else { namedImports.push(importDeclaration); } } } return { importWithoutClause: importWithoutClause, defaultImports: defaultImports, namespaceImports: namespaceImports, namedImports: namedImports, }; } } OrganizeImports.coalesceImports = coalesceImports; function coalesceExports(exportGroup) { if (exportGroup.length === 0) { return exportGroup; } var _a = getCategorizedExports(exportGroup), exportWithoutClause = _a.exportWithoutClause, namedExports = _a.namedExports; var coalescedExports = []; if (exportWithoutClause) { coalescedExports.push(exportWithoutClause); } if (namedExports.length === 0) { return coalescedExports; } var newExportSpecifiers = []; newExportSpecifiers.push.apply(newExportSpecifiers, ts.flatMap(namedExports, function (i) { return (i.exportClause).elements; })); var sortedExportSpecifiers = sortSpecifiers(newExportSpecifiers); var exportDecl = namedExports[0]; coalescedExports.push(ts.updateExportDeclaration(exportDecl, exportDecl.decorators, exportDecl.modifiers, ts.updateNamedExports(exportDecl.exportClause, sortedExportSpecifiers), exportDecl.moduleSpecifier)); return coalescedExports; function getCategorizedExports(exportGroup) { var exportWithoutClause; var namedExports = []; for (var _i = 0, exportGroup_1 = exportGroup; _i < exportGroup_1.length; _i++) { var exportDeclaration = exportGroup_1[_i]; if (exportDeclaration.exportClause === undefined) { exportWithoutClause = exportWithoutClause || exportDeclaration; } else { namedExports.push(exportDeclaration); } } return { exportWithoutClause: exportWithoutClause, namedExports: namedExports, }; } } OrganizeImports.coalesceExports = coalesceExports; function updateImportDeclarationAndClause(importDeclaration, name, namedBindings) { return ts.updateImportDeclaration(importDeclaration, importDeclaration.decorators, importDeclaration.modifiers, ts.updateImportClause(importDeclaration.importClause, name, namedBindings), importDeclaration.moduleSpecifier); } function sortSpecifiers(specifiers) { return ts.stableSort(specifiers, function (s1, s2) { return compareIdentifiers(s1.propertyName || s1.name, s2.propertyName || s2.name) || compareIdentifiers(s1.name, s2.name); }); } function compareModuleSpecifiers(m1, m2) { var name1 = getExternalModuleName(m1); var name2 = getExternalModuleName(m2); return ts.compareBooleans(name1 === undefined, name2 === undefined) || ts.compareBooleans(ts.isExternalModuleNameRelative(name1), ts.isExternalModuleNameRelative(name2)) || ts.compareStringsCaseInsensitive(name1, name2); } OrganizeImports.compareModuleSpecifiers = compareModuleSpecifiers; function compareIdentifiers(s1, s2) { return ts.compareStringsCaseInsensitive(s1.text, s2.text); } })(OrganizeImports = ts.OrganizeImports || (ts.OrganizeImports = {})); })(ts || (ts = {})); var ts; (function (ts) { var OutliningElementsCollector; (function (OutliningElementsCollector) { function collectElements(sourceFile, cancellationToken) { var res = []; addNodeOutliningSpans(sourceFile, cancellationToken, res); addRegionOutliningSpans(sourceFile, res); return res.sort(function (span1, span2) { return span1.textSpan.start - span2.textSpan.start; }); } OutliningElementsCollector.collectElements = collectElements; function addNodeOutliningSpans(sourceFile, cancellationToken, out) { var depthRemaining = 40; var current = 0; var statements = sourceFile.statements; var n = statements.length; while (current < n) { while (current < n && !ts.isAnyImportSyntax(statements[current])) { visitNonImportNode(statements[current]); current++; } if (current === n) break; var firstImport = current; while (current < n && ts.isAnyImportSyntax(statements[current])) { addOutliningForLeadingCommentsForNode(statements[current], sourceFile, cancellationToken, out); current++; } var lastImport = current - 1; if (lastImport !== firstImport) { out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 91, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports")); } } function visitNonImportNode(n) { if (depthRemaining === 0) return; cancellationToken.throwIfCancellationRequested(); if (ts.isDeclaration(n)) { addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out); } var span = getOutliningSpanForNode(n, sourceFile); if (span) out.push(span); depthRemaining--; if (ts.isIfStatement(n) && n.elseStatement && ts.isIfStatement(n.elseStatement)) { visitNonImportNode(n.expression); visitNonImportNode(n.thenStatement); depthRemaining++; visitNonImportNode(n.elseStatement); depthRemaining--; } else { n.forEachChild(visitNonImportNode); } depthRemaining++; } } function addRegionOutliningSpans(sourceFile, out) { var regions = []; var lineStarts = sourceFile.getLineStarts(); for (var i = 0; i < lineStarts.length; i++) { var currentLineStart = lineStarts[i]; var lineEnd = i + 1 === lineStarts.length ? sourceFile.getEnd() : lineStarts[i + 1] - 1; var lineText = sourceFile.text.substring(currentLineStart, lineEnd); var result = lineText.match(/^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/); if (!result || ts.isInComment(sourceFile, currentLineStart)) { continue; } if (!result[1]) { var span = ts.createTextSpanFromBounds(sourceFile.text.indexOf("//", currentLineStart), lineEnd); regions.push(createOutliningSpan(span, "region", span, false, result[2] || "#region")); } else { var region = regions.pop(); if (region) { region.textSpan.length = lineEnd - region.textSpan.start; region.hintSpan.length = lineEnd - region.textSpan.start; out.push(region); } } } } function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) { var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile); if (!comments) return; var firstSingleLineCommentStart = -1; var lastSingleLineCommentEnd = -1; var singleLineCommentCount = 0; for (var _i = 0, comments_3 = comments; _i < comments_3.length; _i++) { var _a = comments_3[_i], kind = _a.kind, pos = _a.pos, end = _a.end; cancellationToken.throwIfCancellationRequested(); switch (kind) { case 2: if (singleLineCommentCount === 0) { firstSingleLineCommentStart = pos; } lastSingleLineCommentEnd = end; singleLineCommentCount++; break; case 3: combineAndAddMultipleSingleLineComments(); out.push(createOutliningSpanFromBounds(pos, end, "comment")); singleLineCommentCount = 0; break; default: ts.Debug.assertNever(kind); } } combineAndAddMultipleSingleLineComments(); function combineAndAddMultipleSingleLineComments() { if (singleLineCommentCount > 1) { out.push(createOutliningSpanFromBounds(firstSingleLineCommentStart, lastSingleLineCommentEnd, "comment")); } } } function createOutliningSpanFromBounds(pos, end, kind) { return createOutliningSpan(ts.createTextSpanFromBounds(pos, end), kind); } function getOutliningSpanForNode(n, sourceFile) { switch (n.kind) { case 213: if (ts.isFunctionBlock(n)) { return spanForNode(n.parent, n.parent.kind !== 193); } switch (n.parent.kind) { case 218: case 221: case 222: case 220: case 217: case 219: case 226: case 269: return spanForNode(n.parent); case 230: var tryStatement = n.parent; if (tryStatement.tryBlock === n) { return spanForNode(n.parent); } else if (tryStatement.finallyBlock === n) { return spanForNode(ts.findChildOfKind(tryStatement, 87, sourceFile)); } default: return createOutliningSpan(ts.createTextSpanFromNode(n, sourceFile), "code"); } case 240: return spanForNode(n.parent); case 235: case 236: case 238: case 241: return spanForNode(n); case 184: return spanForObjectOrArrayLiteral(n); case 183: return spanForObjectOrArrayLiteral(n, 21); } function spanForObjectOrArrayLiteral(node, open) { if (open === void 0) { open = 17; } return spanForNode(node, false, !ts.isArrayLiteralExpression(node.parent), open); } function spanForNode(hintSpanNode, autoCollapse, useFullStart, open) { if (autoCollapse === void 0) { autoCollapse = false; } if (useFullStart === void 0) { useFullStart = true; } if (open === void 0) { open = 17; } var openToken = ts.findChildOfKind(n, open, sourceFile); var close = open === 17 ? 18 : 22; var closeToken = ts.findChildOfKind(n, close, sourceFile); if (!openToken || !closeToken) { return undefined; } var textSpan = ts.createTextSpanFromBounds(useFullStart ? openToken.getFullStart() : openToken.getStart(sourceFile), closeToken.getEnd()); return createOutliningSpan(textSpan, "code", ts.createTextSpanFromNode(hintSpanNode, sourceFile), autoCollapse); } } function createOutliningSpan(textSpan, kind, hintSpan, autoCollapse, bannerText) { if (hintSpan === void 0) { hintSpan = textSpan; } if (autoCollapse === void 0) { autoCollapse = false; } if (bannerText === void 0) { bannerText = "..."; } return { textSpan: textSpan, kind: kind, hintSpan: hintSpan, bannerText: bannerText, autoCollapse: autoCollapse }; } })(OutliningElementsCollector = ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {})); })(ts || (ts = {})); var ts; (function (ts) { var PatternMatchKind; (function (PatternMatchKind) { PatternMatchKind[PatternMatchKind["exact"] = 0] = "exact"; PatternMatchKind[PatternMatchKind["prefix"] = 1] = "prefix"; PatternMatchKind[PatternMatchKind["substring"] = 2] = "substring"; PatternMatchKind[PatternMatchKind["camelCase"] = 3] = "camelCase"; })(PatternMatchKind = ts.PatternMatchKind || (ts.PatternMatchKind = {})); function createPatternMatch(kind, isCaseSensitive) { return { kind: kind, isCaseSensitive: isCaseSensitive }; } function createPatternMatcher(pattern) { var stringToWordSpans = ts.createMap(); var dotSeparatedSegments = pattern.trim().split(".").map(function (p) { return createSegment(p.trim()); }); if (dotSeparatedSegments.some(function (segment) { return !segment.subWordTextChunks.length; })) return undefined; return { getFullMatch: function (containers, candidate) { return getFullMatch(containers, candidate, dotSeparatedSegments, stringToWordSpans); }, getMatchForLastSegmentOfPattern: function (candidate) { return matchSegment(candidate, ts.last(dotSeparatedSegments), stringToWordSpans); }, patternContainsDots: dotSeparatedSegments.length > 1 }; } ts.createPatternMatcher = createPatternMatcher; function getFullMatch(candidateContainers, candidate, dotSeparatedSegments, stringToWordSpans) { var candidateMatch = matchSegment(candidate, ts.last(dotSeparatedSegments), stringToWordSpans); if (!candidateMatch) { return undefined; } candidateContainers = candidateContainers || []; if (dotSeparatedSegments.length - 1 > candidateContainers.length) { return undefined; } var bestMatch; for (var i = dotSeparatedSegments.length - 2, j = candidateContainers.length - 1; i >= 0; i -= 1, j -= 1) { bestMatch = betterMatch(bestMatch, matchSegment(candidateContainers[j], dotSeparatedSegments[i], stringToWordSpans)); } return bestMatch; } function getWordSpans(word, stringToWordSpans) { var spans = stringToWordSpans.get(word); if (!spans) { stringToWordSpans.set(word, spans = breakIntoWordSpans(word)); } return spans; } function matchTextChunk(candidate, chunk, stringToWordSpans) { var index = indexOfIgnoringCase(candidate, chunk.textLowerCase); if (index === 0) { return createPatternMatch(chunk.text.length === candidate.length ? PatternMatchKind.exact : PatternMatchKind.prefix, ts.startsWith(candidate, chunk.text)); } if (chunk.isLowerCase) { if (index === -1) return undefined; var wordSpans = getWordSpans(candidate, stringToWordSpans); for (var _i = 0, wordSpans_1 = wordSpans; _i < wordSpans_1.length; _i++) { var span = wordSpans_1[_i]; if (partStartsWith(candidate, span, chunk.text, true)) { return createPatternMatch(PatternMatchKind.substring, partStartsWith(candidate, span, chunk.text, false)); } } if (chunk.text.length < candidate.length && isUpperCaseLetter(candidate.charCodeAt(index))) { return createPatternMatch(PatternMatchKind.substring, false); } } else { if (candidate.indexOf(chunk.text) > 0) { return createPatternMatch(PatternMatchKind.substring, true); } if (chunk.characterSpans.length > 0) { var candidateParts = getWordSpans(candidate, stringToWordSpans); var isCaseSensitive = tryCamelCaseMatch(candidate, candidateParts, chunk, false) ? true : tryCamelCaseMatch(candidate, candidateParts, chunk, true) ? false : undefined; if (isCaseSensitive !== undefined) { return createPatternMatch(PatternMatchKind.camelCase, isCaseSensitive); } } } } function matchSegment(candidate, segment, stringToWordSpans) { if (every(segment.totalTextChunk.text, function (ch) { return ch !== 32 && ch !== 42; })) { var match = matchTextChunk(candidate, segment.totalTextChunk, stringToWordSpans); if (match) return match; } var subWordTextChunks = segment.subWordTextChunks; var bestMatch; for (var _i = 0, subWordTextChunks_1 = subWordTextChunks; _i < subWordTextChunks_1.length; _i++) { var subWordTextChunk = subWordTextChunks_1[_i]; bestMatch = betterMatch(bestMatch, matchTextChunk(candidate, subWordTextChunk, stringToWordSpans)); } return bestMatch; } function betterMatch(a, b) { return ts.min(a, b, compareMatches); } function compareMatches(a, b) { return a === undefined ? 1 : b === undefined ? -1 : ts.compareValues(a.kind, b.kind) || ts.compareBooleans(!a.isCaseSensitive, !b.isCaseSensitive); } function partStartsWith(candidate, candidateSpan, pattern, ignoreCase, patternSpan) { if (patternSpan === void 0) { patternSpan = { start: 0, length: pattern.length }; } return patternSpan.length <= candidateSpan.length && everyInRange(0, patternSpan.length, function (i) { return equalChars(pattern.charCodeAt(patternSpan.start + i), candidate.charCodeAt(candidateSpan.start + i), ignoreCase); }); } function equalChars(ch1, ch2, ignoreCase) { return ignoreCase ? toLowerCase(ch1) === toLowerCase(ch2) : ch1 === ch2; } function tryCamelCaseMatch(candidate, candidateParts, chunk, ignoreCase) { var chunkCharacterSpans = chunk.characterSpans; var currentCandidate = 0; var currentChunkSpan = 0; var firstMatch; var contiguous; while (true) { if (currentChunkSpan === chunkCharacterSpans.length) { return true; } else if (currentCandidate === candidateParts.length) { return false; } var candidatePart = candidateParts[currentCandidate]; var gotOneMatchThisCandidate = false; for (; currentChunkSpan < chunkCharacterSpans.length; currentChunkSpan++) { var chunkCharacterSpan = chunkCharacterSpans[currentChunkSpan]; if (gotOneMatchThisCandidate) { if (!isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan - 1].start)) || !isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan].start))) { break; } } if (!partStartsWith(candidate, candidatePart, chunk.text, ignoreCase, chunkCharacterSpan)) { break; } gotOneMatchThisCandidate = true; firstMatch = firstMatch === undefined ? currentCandidate : firstMatch; contiguous = contiguous === undefined ? true : contiguous; candidatePart = ts.createTextSpan(candidatePart.start + chunkCharacterSpan.length, candidatePart.length - chunkCharacterSpan.length); } if (!gotOneMatchThisCandidate && contiguous !== undefined) { contiguous = false; } currentCandidate++; } } function createSegment(text) { return { totalTextChunk: createTextChunk(text), subWordTextChunks: breakPatternIntoTextChunks(text) }; } function isUpperCaseLetter(ch) { if (ch >= 65 && ch <= 90) { return true; } if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 6)) { return false; } var str = String.fromCharCode(ch); return str === str.toUpperCase(); } function isLowerCaseLetter(ch) { if (ch >= 97 && ch <= 122) { return true; } if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 6)) { return false; } var str = String.fromCharCode(ch); return str === str.toLowerCase(); } function indexOfIgnoringCase(str, value) { var n = str.length - value.length; var _loop_17 = function (start) { if (every(value, function (valueChar, i) { return toLowerCase(str.charCodeAt(i + start)) === valueChar; })) { return { value: start }; } }; for (var start = 0; start <= n; start++) { var state_4 = _loop_17(start); if (typeof state_4 === "object") return state_4.value; } return -1; } function toLowerCase(ch) { if (ch >= 65 && ch <= 90) { return 97 + (ch - 65); } if (ch < 127) { return ch; } return String.fromCharCode(ch).toLowerCase().charCodeAt(0); } function isDigit(ch) { return ch >= 48 && ch <= 57; } function isWordChar(ch) { return isUpperCaseLetter(ch) || isLowerCaseLetter(ch) || isDigit(ch) || ch === 95 || ch === 36; } function breakPatternIntoTextChunks(pattern) { var result = []; var wordStart = 0; var wordLength = 0; for (var i = 0; i < pattern.length; i++) { var ch = pattern.charCodeAt(i); if (isWordChar(ch)) { if (wordLength === 0) { wordStart = i; } wordLength++; } else { if (wordLength > 0) { result.push(createTextChunk(pattern.substr(wordStart, wordLength))); wordLength = 0; } } } if (wordLength > 0) { result.push(createTextChunk(pattern.substr(wordStart, wordLength))); } return result; } function createTextChunk(text) { var textLowerCase = text.toLowerCase(); return { text: text, textLowerCase: textLowerCase, isLowerCase: text === textLowerCase, characterSpans: breakIntoCharacterSpans(text) }; } function breakIntoCharacterSpans(identifier) { return breakIntoSpans(identifier, false); } ts.breakIntoCharacterSpans = breakIntoCharacterSpans; function breakIntoWordSpans(identifier) { return breakIntoSpans(identifier, true); } ts.breakIntoWordSpans = breakIntoWordSpans; function breakIntoSpans(identifier, word) { var result = []; var wordStart = 0; for (var i = 1; i < identifier.length; i++) { var lastIsDigit = isDigit(identifier.charCodeAt(i - 1)); var currentIsDigit = isDigit(identifier.charCodeAt(i)); var hasTransitionFromLowerToUpper = transitionFromLowerToUpper(identifier, word, i); var hasTransitionFromUpperToLower = word && transitionFromUpperToLower(identifier, i, wordStart); if (charIsPunctuation(identifier.charCodeAt(i - 1)) || charIsPunctuation(identifier.charCodeAt(i)) || lastIsDigit !== currentIsDigit || hasTransitionFromLowerToUpper || hasTransitionFromUpperToLower) { if (!isAllPunctuation(identifier, wordStart, i)) { result.push(ts.createTextSpan(wordStart, i - wordStart)); } wordStart = i; } } if (!isAllPunctuation(identifier, wordStart, identifier.length)) { result.push(ts.createTextSpan(wordStart, identifier.length - wordStart)); } return result; } function charIsPunctuation(ch) { switch (ch) { case 33: case 34: case 35: case 37: case 38: case 39: case 40: case 41: case 42: case 44: case 45: case 46: case 47: case 58: case 59: case 63: case 64: case 91: case 92: case 93: case 95: case 123: case 125: return true; } return false; } function isAllPunctuation(identifier, start, end) { return every(identifier, function (ch) { return charIsPunctuation(ch) && ch !== 95; }, start, end); } function transitionFromUpperToLower(identifier, index, wordStart) { return index !== wordStart && index + 1 < identifier.length && isUpperCaseLetter(identifier.charCodeAt(index)) && isLowerCaseLetter(identifier.charCodeAt(index + 1)) && every(identifier, isUpperCaseLetter, wordStart, index); } function transitionFromLowerToUpper(identifier, word, index) { var lastIsUpper = isUpperCaseLetter(identifier.charCodeAt(index - 1)); var currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index)); return currentIsUpper && (!word || !lastIsUpper); } function everyInRange(start, end, pred) { for (var i = start; i < end; i++) { if (!pred(i)) { return false; } } return true; } function every(s, pred, start, end) { if (start === void 0) { start = 0; } if (end === void 0) { end = s.length; } return everyInRange(start, end, function (i) { return pred(s.charCodeAt(i), i); }); } })(ts || (ts = {})); var ts; (function (ts) { function preProcessFile(sourceText, readImportFiles, detectJavaScriptImports) { if (readImportFiles === void 0) { readImportFiles = true; } if (detectJavaScriptImports === void 0) { detectJavaScriptImports = false; } var pragmaContext = { languageVersion: 1, pragmas: undefined, checkJsDirective: undefined, referencedFiles: [], typeReferenceDirectives: [], libReferenceDirectives: [], amdDependencies: [], hasNoDefaultLib: undefined, moduleName: undefined }; var importedFiles = []; var ambientExternalModules; var lastToken; var currentToken; var braceNesting = 0; var externalModule = false; function nextToken() { lastToken = currentToken; currentToken = ts.scanner.scan(); if (currentToken === 17) { braceNesting++; } else if (currentToken === 18) { braceNesting--; } return currentToken; } function getFileReference() { var fileName = ts.scanner.getTokenValue(); var pos = ts.scanner.getTokenPos(); return { fileName: fileName, pos: pos, end: pos + fileName.length }; } function recordAmbientExternalModule() { if (!ambientExternalModules) { ambientExternalModules = []; } ambientExternalModules.push({ ref: getFileReference(), depth: braceNesting }); } function recordModuleName() { importedFiles.push(getFileReference()); markAsExternalModuleIfTopLevel(); } function markAsExternalModuleIfTopLevel() { if (braceNesting === 0) { externalModule = true; } } function tryConsumeDeclare() { var token = ts.scanner.getToken(); if (token === 124) { token = nextToken(); if (token === 129) { token = nextToken(); if (token === 9) { recordAmbientExternalModule(); } } return true; } return false; } function tryConsumeImport() { if (lastToken === 23) { return false; } var token = ts.scanner.getToken(); if (token === 91) { token = nextToken(); if (token === 19) { token = nextToken(); if (token === 9) { recordModuleName(); return true; } } else if (token === 9) { recordModuleName(); return true; } else { if (token === 71 || ts.isKeyword(token)) { token = nextToken(); if (token === 143) { token = nextToken(); if (token === 9) { recordModuleName(); return true; } } else if (token === 58) { if (tryConsumeRequireCall(true)) { return true; } } else if (token === 26) { token = nextToken(); } else { return true; } } if (token === 17) { token = nextToken(); while (token !== 18 && token !== 1) { token = nextToken(); } if (token === 18) { token = nextToken(); if (token === 143) { token = nextToken(); if (token === 9) { recordModuleName(); } } } } else if (token === 39) { token = nextToken(); if (token === 118) { token = nextToken(); if (token === 71 || ts.isKeyword(token)) { token = nextToken(); if (token === 143) { token = nextToken(); if (token === 9) { recordModuleName(); } } } } } } return true; } return false; } function tryConsumeExport() { var token = ts.scanner.getToken(); if (token === 84) { markAsExternalModuleIfTopLevel(); token = nextToken(); if (token === 17) { token = nextToken(); while (token !== 18 && token !== 1) { token = nextToken(); } if (token === 18) { token = nextToken(); if (token === 143) { token = nextToken(); if (token === 9) { recordModuleName(); } } } } else if (token === 39) { token = nextToken(); if (token === 143) { token = nextToken(); if (token === 9) { recordModuleName(); } } } else if (token === 91) { token = nextToken(); if (token === 71 || ts.isKeyword(token)) { token = nextToken(); if (token === 58) { if (tryConsumeRequireCall(true)) { return true; } } } } return true; } return false; } function tryConsumeRequireCall(skipCurrentToken) { var token = skipCurrentToken ? nextToken() : ts.scanner.getToken(); if (token === 133) { token = nextToken(); if (token === 19) { token = nextToken(); if (token === 9) { recordModuleName(); } } return true; } return false; } function tryConsumeDefine() { var token = ts.scanner.getToken(); if (token === 71 && ts.scanner.getTokenValue() === "define") { token = nextToken(); if (token !== 19) { return true; } token = nextToken(); if (token === 9) { token = nextToken(); if (token === 26) { token = nextToken(); } else { return true; } } if (token !== 21) { return true; } token = nextToken(); while (token !== 22 && token !== 1) { if (token === 9) { recordModuleName(); } token = nextToken(); } return true; } return false; } function processImports() { ts.scanner.setText(sourceText); nextToken(); while (true) { if (ts.scanner.getToken() === 1) { break; } if (tryConsumeDeclare() || tryConsumeImport() || tryConsumeExport() || (detectJavaScriptImports && (tryConsumeRequireCall(false) || tryConsumeDefine()))) { continue; } else { nextToken(); } } ts.scanner.setText(undefined); } if (readImportFiles) { processImports(); } ts.processCommentPragmas(pragmaContext, sourceText); ts.processPragmasIntoFields(pragmaContext, ts.noop); if (externalModule) { if (ambientExternalModules) { for (var _i = 0, ambientExternalModules_1 = ambientExternalModules; _i < ambientExternalModules_1.length; _i++) { var decl = ambientExternalModules_1[_i]; importedFiles.push(decl.ref); } } return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles: importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: undefined }; } else { var ambientModuleNames = void 0; if (ambientExternalModules) { for (var _a = 0, ambientExternalModules_2 = ambientExternalModules; _a < ambientExternalModules_2.length; _a++) { var decl = ambientExternalModules_2[_a]; if (decl.depth === 0) { if (!ambientModuleNames) { ambientModuleNames = []; } ambientModuleNames.push(decl.ref.fileName); } else { importedFiles.push(decl.ref); } } } return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles: importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: ambientModuleNames }; } } ts.preProcessFile = preProcessFile; })(ts || (ts = {})); var ts; (function (ts) { var Rename; (function (Rename) { function getRenameInfo(typeChecker, defaultLibFileName, getCanonicalFileName, sourceFile, position) { var getCanonicalDefaultLibName = ts.memoize(function () { return getCanonicalFileName(ts.normalizePath(defaultLibFileName)); }); var node = ts.getTouchingPropertyName(sourceFile, position); var renameInfo = node && nodeIsEligibleForRename(node) ? getRenameInfoForNode(node, typeChecker, sourceFile, isDefinedInLibraryFile) : undefined; return renameInfo || getRenameInfoError(ts.Diagnostics.You_cannot_rename_this_element); function isDefinedInLibraryFile(declaration) { if (!defaultLibFileName) { return false; } var sourceFile = declaration.getSourceFile(); var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile.fileName)); return canonicalName === getCanonicalDefaultLibName(); } } Rename.getRenameInfo = getRenameInfo; function getRenameInfoForNode(node, typeChecker, sourceFile, isDefinedInLibraryFile) { var symbol = typeChecker.getSymbolAtLocation(node); if (!symbol) return; var declarations = symbol.declarations; if (!declarations || declarations.length === 0) return; if (declarations.some(isDefinedInLibraryFile)) { return getRenameInfoError(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library); } if (ts.isIdentifier(node) && node.originalKeywordKind === 79 && symbol.parent.flags & 1536) { return undefined; } if (ts.isStringLiteralLike(node) && ts.tryGetImportFromModuleSpecifier(node)) return undefined; var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, node); var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteral(node) && node.parent.kind === 147) ? ts.stripQuotes(ts.getTextOfIdentifierOrLiteral(node)) : undefined; var displayName = specifierName || typeChecker.symbolToString(symbol); var fullDisplayName = specifierName || typeChecker.getFullyQualifiedName(symbol); return getRenameInfoSuccess(displayName, fullDisplayName, kind, ts.SymbolDisplay.getSymbolModifiers(symbol), node, sourceFile); } function getRenameInfoSuccess(displayName, fullDisplayName, kind, kindModifiers, node, sourceFile) { return { canRename: true, kind: kind, displayName: displayName, localizedErrorMessage: undefined, fullDisplayName: fullDisplayName, kindModifiers: kindModifiers, triggerSpan: createTriggerSpanForNode(node, sourceFile) }; } function getRenameInfoError(diagnostic) { return { canRename: false, localizedErrorMessage: ts.getLocaleSpecificMessage(diagnostic), displayName: undefined, fullDisplayName: undefined, kind: undefined, kindModifiers: undefined, triggerSpan: undefined }; } function createTriggerSpanForNode(node, sourceFile) { var start = node.getStart(sourceFile); var width = node.getWidth(sourceFile); if (node.kind === 9) { start += 1; width -= 2; } return ts.createTextSpan(start, width); } function nodeIsEligibleForRename(node) { switch (node.kind) { case 71: case 9: case 99: return true; case 8: return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node); default: return false; } } })(Rename = ts.Rename || (ts.Rename = {})); })(ts || (ts = {})); var ts; (function (ts) { var SignatureHelp; (function (SignatureHelp) { var ArgumentListKind; (function (ArgumentListKind) { ArgumentListKind[ArgumentListKind["TypeArguments"] = 0] = "TypeArguments"; ArgumentListKind[ArgumentListKind["CallArguments"] = 1] = "CallArguments"; ArgumentListKind[ArgumentListKind["TaggedTemplateArguments"] = 2] = "TaggedTemplateArguments"; ArgumentListKind[ArgumentListKind["JSXAttributesArguments"] = 3] = "JSXAttributesArguments"; })(ArgumentListKind || (ArgumentListKind = {})); var InvocationKind; (function (InvocationKind) { InvocationKind[InvocationKind["Call"] = 0] = "Call"; InvocationKind[InvocationKind["TypeArgs"] = 1] = "TypeArgs"; })(InvocationKind || (InvocationKind = {})); function getSignatureHelpItems(program, sourceFile, position, cancellationToken) { var typeChecker = program.getTypeChecker(); var startingToken = ts.findTokenOnLeftOfPosition(sourceFile, position); if (!startingToken) { return undefined; } var argumentInfo = getContainingArgumentInfo(startingToken, position, sourceFile); if (!argumentInfo) return undefined; cancellationToken.throwIfCancellationRequested(); var candidateInfo = getCandidateInfo(argumentInfo, typeChecker); cancellationToken.throwIfCancellationRequested(); if (!candidateInfo) { if (ts.isSourceFileJavaScript(sourceFile)) { return createJavaScriptSignatureHelpItems(argumentInfo, program, cancellationToken); } return undefined; } return typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return createSignatureHelpItems(candidateInfo.candidates, candidateInfo.resolvedSignature, argumentInfo, sourceFile, typeChecker); }); } SignatureHelp.getSignatureHelpItems = getSignatureHelpItems; function getCandidateInfo(argumentInfo, checker) { var invocation = argumentInfo.invocation; if (invocation.kind === 0) { var candidates = []; var resolvedSignature = checker.getResolvedSignature(invocation.node, candidates, argumentInfo.argumentCount); return candidates.length === 0 ? undefined : { candidates: candidates, resolvedSignature: resolvedSignature }; } else { var type = checker.getTypeAtLocation(invocation.called); var signatures = ts.isNewExpression(invocation.called.parent) ? type.getConstructSignatures() : type.getCallSignatures(); var candidates = signatures.filter(function (candidate) { return !!candidate.typeParameters && candidate.typeParameters.length >= argumentInfo.argumentCount; }); return candidates.length === 0 ? undefined : { candidates: candidates, resolvedSignature: ts.first(candidates) }; } } function createJavaScriptSignatureHelpItems(argumentInfo, program, cancellationToken) { var expression = getExpressionFromInvocation(argumentInfo.invocation); var name = ts.isIdentifier(expression) ? expression : ts.isPropertyAccessExpression(expression) ? expression.name : undefined; if (!name || !name.escapedText) { return undefined; } var typeChecker = program.getTypeChecker(); var _loop_18 = function (sourceFile) { var nameToDeclarations = sourceFile.getNamedDeclarations(); var declarations = nameToDeclarations.get(name.text); if (declarations) { var _loop_19 = function (declaration) { var symbol = declaration.symbol; if (symbol) { var type = typeChecker.getTypeOfSymbolAtLocation(symbol, declaration); if (type) { var callSignatures_1 = type.getCallSignatures(); if (callSignatures_1 && callSignatures_1.length) { return { value: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return createSignatureHelpItems(callSignatures_1, callSignatures_1[0], argumentInfo, sourceFile, typeChecker); }) }; } } } }; for (var _i = 0, declarations_13 = declarations; _i < declarations_13.length; _i++) { var declaration = declarations_13[_i]; var state_6 = _loop_19(declaration); if (typeof state_6 === "object") return state_6; } } }; for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; var state_5 = _loop_18(sourceFile); if (typeof state_5 === "object") return state_5.value; } } function getArgumentInfoForCompletions(node, position, sourceFile) { var info = getImmediatelyContainingArgumentInfo(node, position, sourceFile); return !info || info.kind === 0 || info.invocation.kind === 1 ? undefined : { invocation: info.invocation.node, argumentCount: info.argumentCount, argumentIndex: info.argumentIndex }; } SignatureHelp.getArgumentInfoForCompletions = getArgumentInfoForCompletions; function getImmediatelyContainingArgumentInfo(node, position, sourceFile) { var parent = node.parent; if (ts.isCallOrNewExpression(parent)) { var invocation = parent; var list = void 0; var argumentIndex = void 0; if (node.kind === 27 || node.kind === 19) { list = getChildListThatStartsWithOpenerToken(parent, node, sourceFile); ts.Debug.assert(list !== undefined); argumentIndex = 0; } else { list = ts.findContainingList(node); if (!list) return undefined; argumentIndex = getArgumentIndex(list, node); } var kind = parent.typeArguments && parent.typeArguments.pos === list.pos ? 0 : 1; var argumentCount = getArgumentCount(list); if (argumentIndex !== 0) { ts.Debug.assertLessThan(argumentIndex, argumentCount); } var argumentsSpan = getApplicableSpanForArguments(list, sourceFile); return { kind: kind, invocation: { kind: 0, node: invocation }, argumentsSpan: argumentsSpan, argumentIndex: argumentIndex, argumentCount: argumentCount }; } else if (ts.isNoSubstitutionTemplateLiteral(node) && ts.isTaggedTemplateExpression(parent)) { if (ts.isInsideTemplateLiteral(node, position, sourceFile)) { return getArgumentListInfoForTemplate(parent, 0, sourceFile); } } else if (ts.isTemplateHead(node) && parent.parent.kind === 189) { var templateExpression = parent; var tagExpression = templateExpression.parent; ts.Debug.assert(templateExpression.kind === 202); var argumentIndex = ts.isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile); } else if (ts.isTemplateSpan(parent) && ts.isTaggedTemplateExpression(parent.parent.parent)) { var templateSpan = parent; var tagExpression = parent.parent.parent; if (ts.isTemplateTail(node) && !ts.isInsideTemplateLiteral(node, position, sourceFile)) { return undefined; } var spanIndex = templateSpan.parent.templateSpans.indexOf(templateSpan); var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node, position, sourceFile); return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile); } else if (ts.isJsxOpeningLikeElement(parent)) { var attributeSpanStart = parent.attributes.pos; var attributeSpanEnd = ts.skipTrivia(sourceFile.text, parent.attributes.end, false); return { kind: 3, invocation: { kind: 0, node: parent }, argumentsSpan: ts.createTextSpan(attributeSpanStart, attributeSpanEnd - attributeSpanStart), argumentIndex: 0, argumentCount: 1 }; } else { var typeArgInfo = ts.isPossiblyTypeArgumentPosition(node, sourceFile); if (typeArgInfo) { var called = typeArgInfo.called, nTypeArguments = typeArgInfo.nTypeArguments; var invocation = { kind: 1, called: called }; var argumentsSpan = ts.createTextSpanFromBounds(called.getStart(sourceFile), node.end); return { kind: 0, invocation: invocation, argumentsSpan: argumentsSpan, argumentIndex: nTypeArguments, argumentCount: nTypeArguments + 1 }; } } return undefined; } function getArgumentIndex(argumentsList, node) { var argumentIndex = 0; for (var _i = 0, _a = argumentsList.getChildren(); _i < _a.length; _i++) { var child = _a[_i]; if (child === node) { break; } if (child.kind !== 26) { argumentIndex++; } } return argumentIndex; } function getArgumentCount(argumentsList) { var listChildren = argumentsList.getChildren(); var argumentCount = ts.countWhere(listChildren, function (arg) { return arg.kind !== 26; }); if (listChildren.length > 0 && ts.last(listChildren).kind === 26) { argumentCount++; } return argumentCount; } function getArgumentIndexForTemplatePiece(spanIndex, node, position, sourceFile) { ts.Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); if (ts.isTemplateLiteralToken(node)) { if (ts.isInsideTemplateLiteral(node, position, sourceFile)) { return 0; } return spanIndex + 2; } return spanIndex + 1; } function getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile) { var argumentCount = ts.isNoSubstitutionTemplateLiteral(tagExpression.template) ? 1 : tagExpression.template.templateSpans.length + 1; if (argumentIndex !== 0) { ts.Debug.assertLessThan(argumentIndex, argumentCount); } return { kind: 2, invocation: { kind: 0, node: tagExpression }, argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression, sourceFile), argumentIndex: argumentIndex, argumentCount: argumentCount }; } function getApplicableSpanForArguments(argumentsList, sourceFile) { var applicableSpanStart = argumentsList.getFullStart(); var applicableSpanEnd = ts.skipTrivia(sourceFile.text, argumentsList.getEnd(), false); return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getApplicableSpanForTaggedTemplate(taggedTemplate, sourceFile) { var template = taggedTemplate.template; var applicableSpanStart = template.getStart(); var applicableSpanEnd = template.getEnd(); if (template.kind === 202) { var lastSpan = ts.last(template.templateSpans); if (lastSpan.literal.getFullWidth() === 0) { applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, false); } } return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getContainingArgumentInfo(node, position, sourceFile) { var _loop_20 = function (n) { ts.Debug.assert(ts.rangeContainsRange(n.parent, n), "Not a subspan", function () { return "Child: " + ts.Debug.showSyntaxKind(n) + ", parent: " + ts.Debug.showSyntaxKind(n.parent); }); var argumentInfo = getImmediatelyContainingArgumentInfo(n, position, sourceFile); if (argumentInfo) { return { value: argumentInfo }; } }; for (var n = node; !ts.isBlock(n) && !ts.isSourceFile(n); n = n.parent) { var state_7 = _loop_20(n); if (typeof state_7 === "object") return state_7.value; } return undefined; } function getChildListThatStartsWithOpenerToken(parent, openerToken, sourceFile) { var children = parent.getChildren(sourceFile); var indexOfOpenerToken = children.indexOf(openerToken); ts.Debug.assert(indexOfOpenerToken >= 0 && children.length > indexOfOpenerToken + 1); return children[indexOfOpenerToken + 1]; } function getExpressionFromInvocation(invocation) { return invocation.kind === 0 ? ts.getInvokedExpression(invocation.node) : invocation.called; } var signatureHelpNodeBuilderFlags = 8192 | 3112960 | 16384; function createSignatureHelpItems(candidates, resolvedSignature, argumentListInfo, sourceFile, typeChecker) { var argumentCount = argumentListInfo.argumentCount, applicableSpan = argumentListInfo.argumentsSpan, invocation = argumentListInfo.invocation, argumentIndex = argumentListInfo.argumentIndex; var isTypeParameterList = argumentListInfo.kind === 0; var enclosingDeclaration = invocation.kind === 0 ? invocation.node : invocation.called; var callTargetSymbol = typeChecker.getSymbolAtLocation(getExpressionFromInvocation(invocation)); var callTargetDisplayParts = callTargetSymbol && ts.symbolToDisplayParts(typeChecker, callTargetSymbol, undefined, undefined); var printer = ts.createPrinter({ removeComments: true }); var items = candidates.map(function (candidateSignature) { var signatureHelpParameters; var prefixDisplayParts = []; var suffixDisplayParts = []; if (callTargetDisplayParts) { ts.addRange(prefixDisplayParts, callTargetDisplayParts); } var isVariadic; if (isTypeParameterList) { isVariadic = false; prefixDisplayParts.push(ts.punctuationPart(27)); var typeParameters = (candidateSignature.target || candidateSignature).typeParameters; signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : ts.emptyArray; suffixDisplayParts.push(ts.punctuationPart(29)); var parameterParts = ts.mapToDisplayParts(function (writer) { var thisParameter = candidateSignature.thisParameter ? [typeChecker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : []; var params = ts.createNodeArray(thisParameter.concat(candidateSignature.parameters.map(function (param) { return typeChecker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); }))); printer.writeList(1296, params, sourceFile, writer); }); ts.addRange(suffixDisplayParts, parameterParts); } else { isVariadic = candidateSignature.hasRestParameter; var typeParameterParts = ts.mapToDisplayParts(function (writer) { if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) { var args = ts.createNodeArray(candidateSignature.typeParameters.map(function (p) { return typeChecker.typeParameterToDeclaration(p, enclosingDeclaration); })); printer.writeList(26896, args, sourceFile, writer); } }); ts.addRange(prefixDisplayParts, typeParameterParts); prefixDisplayParts.push(ts.punctuationPart(19)); signatureHelpParameters = ts.map(candidateSignature.parameters, createSignatureHelpParameterForParameter); suffixDisplayParts.push(ts.punctuationPart(20)); } var returnTypeParts = ts.mapToDisplayParts(function (writer) { writer.writePunctuation(":"); writer.writeSpace(" "); var predicate = typeChecker.getTypePredicateOfSignature(candidateSignature); if (predicate) { typeChecker.writeTypePredicate(predicate, enclosingDeclaration, undefined, writer); } else { typeChecker.writeType(typeChecker.getReturnTypeOfSignature(candidateSignature), enclosingDeclaration, undefined, writer); } }); ts.addRange(suffixDisplayParts, returnTypeParts); return { isVariadic: isVariadic, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, separatorDisplayParts: [ts.punctuationPart(26), ts.spacePart()], parameters: signatureHelpParameters, documentation: candidateSignature.getDocumentationComment(typeChecker), tags: candidateSignature.getJsDocTags() }; }); if (argumentIndex !== 0) { ts.Debug.assertLessThan(argumentIndex, argumentCount); } var selectedItemIndex = candidates.indexOf(resolvedSignature); ts.Debug.assert(selectedItemIndex !== -1); return { items: items, applicableSpan: applicableSpan, selectedItemIndex: selectedItemIndex, argumentIndex: argumentIndex, argumentCount: argumentCount }; function createSignatureHelpParameterForParameter(parameter) { var displayParts = ts.mapToDisplayParts(function (writer) { var param = typeChecker.symbolToParameterDeclaration(parameter, enclosingDeclaration, signatureHelpNodeBuilderFlags); printer.writeNode(4, param, sourceFile, writer); }); return { name: parameter.name, documentation: parameter.getDocumentationComment(typeChecker), displayParts: displayParts, isOptional: typeChecker.isOptionalParameter(parameter.valueDeclaration) }; } function createSignatureHelpParameterForTypeParameter(typeParameter) { var displayParts = ts.mapToDisplayParts(function (writer) { var param = typeChecker.typeParameterToDeclaration(typeParameter, enclosingDeclaration); printer.writeNode(4, param, sourceFile, writer); }); return { name: typeParameter.symbol.name, documentation: ts.emptyArray, displayParts: displayParts, isOptional: false }; } } })(SignatureHelp = ts.SignatureHelp || (ts.SignatureHelp = {})); })(ts || (ts = {})); var ts; (function (ts) { function computeSuggestionDiagnostics(sourceFile, program, cancellationToken) { program.getSemanticDiagnostics(sourceFile, cancellationToken); var diags = []; if (sourceFile.commonJsModuleIndicator && (ts.programContainsEs6Modules(program) || ts.compilerOptionsIndicateEs6Modules(program.getCompilerOptions())) && containsTopLevelCommonjs(sourceFile)) { diags.push(ts.createDiagnosticForNode(getErrorNodeFromCommonJsIndicator(sourceFile.commonJsModuleIndicator), ts.Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module)); } var isJsFile = ts.isSourceFileJavaScript(sourceFile); check(sourceFile); if (ts.getAllowSyntheticDefaultImports(program.getCompilerOptions())) { for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) { var moduleSpecifier = _a[_i]; var importNode = ts.importFromModuleSpecifier(moduleSpecifier); var name = importNameForConvertToDefaultImport(importNode); if (!name) continue; var module_2 = ts.getResolvedModule(sourceFile, moduleSpecifier.text); var resolvedFile = module_2 && program.getSourceFile(module_2.resolvedFileName); if (resolvedFile && resolvedFile.externalModuleIndicator && ts.isExportAssignment(resolvedFile.externalModuleIndicator) && resolvedFile.externalModuleIndicator.isExportEquals) { diags.push(ts.createDiagnosticForNode(name, ts.Diagnostics.Import_may_be_converted_to_a_default_import)); } } } ts.addRange(diags, sourceFile.bindSuggestionDiagnostics); ts.addRange(diags, program.getSuggestionDiagnostics(sourceFile, cancellationToken)); return diags.sort(function (d1, d2) { return d1.start - d2.start; }); function check(node) { if (isJsFile) { switch (node.kind) { case 192: var decl = ts.getDeclarationOfJSInitializer(node); if (decl) { var symbol_3 = decl.symbol; if (symbol_3 && (symbol_3.exports && symbol_3.exports.size || symbol_3.members && symbol_3.members.size)) { diags.push(ts.createDiagnosticForNode(ts.isVariableDeclaration(node.parent) ? node.parent.name : node, ts.Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration)); break; } } case 234: var symbol = node.symbol; if (symbol.members && (symbol.members.size > 0)) { diags.push(ts.createDiagnosticForNode(ts.isVariableDeclaration(node.parent) ? node.parent.name : node, ts.Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration)); } break; } } else { if (ts.isVariableStatement(node) && node.parent === sourceFile && node.declarationList.flags & 2 && node.declarationList.declarations.length === 1) { var init = node.declarationList.declarations[0].initializer; if (init && ts.isRequireCall(init, true)) { diags.push(ts.createDiagnosticForNode(init, ts.Diagnostics.require_call_may_be_converted_to_an_import)); } } if (ts.codefix.parameterShouldGetTypeFromJSDoc(node)) { diags.push(ts.createDiagnosticForNode(node.name || node, ts.Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types)); } } node.forEachChild(check); } } ts.computeSuggestionDiagnostics = computeSuggestionDiagnostics; function containsTopLevelCommonjs(sourceFile) { return sourceFile.statements.some(function (statement) { switch (statement.kind) { case 214: return statement.declarationList.declarations.some(function (decl) { return ts.isRequireCall(propertyAccessLeftHandSide(decl.initializer), true); }); case 216: { var expression = statement.expression; if (!ts.isBinaryExpression(expression)) return ts.isRequireCall(expression, true); var kind = ts.getSpecialPropertyAssignmentKind(expression); return kind === 1 || kind === 2; } default: return false; } }); } function propertyAccessLeftHandSide(node) { return ts.isPropertyAccessExpression(node) ? propertyAccessLeftHandSide(node.expression) : node; } function importNameForConvertToDefaultImport(node) { switch (node.kind) { case 244: var importClause = node.importClause, moduleSpecifier = node.moduleSpecifier; return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 246 && ts.isStringLiteral(moduleSpecifier) ? importClause.namedBindings.name : undefined; case 243: return node.name; default: return undefined; } } function getErrorNodeFromCommonJsIndicator(commonJsModuleIndicator) { return ts.isBinaryExpression(commonJsModuleIndicator) ? commonJsModuleIndicator.left : commonJsModuleIndicator; } })(ts || (ts = {})); var ts; (function (ts) { var SymbolDisplay; (function (SymbolDisplay) { function getSymbolKind(typeChecker, symbol, location) { var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location); if (result !== "") { return result; } var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol); if (flags & 32) { return ts.getDeclarationOfKind(symbol, 205) ? "local class" : "class"; } if (flags & 384) return "enum"; if (flags & 524288) return "type"; if (flags & 64) return "interface"; if (flags & 262144) return "type parameter"; if (flags & 262144) return "type parameter"; if (flags & 8) return "enum member"; if (flags & 2097152) return "alias"; if (flags & 1536) return "module"; return result; } SymbolDisplay.getSymbolKind = getSymbolKind; function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) { var roots = typeChecker.getRootSymbols(symbol); if (roots.length === 1 && ts.first(roots).flags & 8192 && typeChecker.getTypeOfSymbolAtLocation(symbol, location).getNonNullableType().getCallSignatures().length !== 0) { return "method"; } if (typeChecker.isUndefinedSymbol(symbol)) { return "var"; } if (typeChecker.isArgumentsSymbol(symbol)) { return "local var"; } if (location.kind === 99 && ts.isExpression(location)) { return "parameter"; } var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol); if (flags & 3) { if (ts.isFirstDeclarationOfSymbolParameter(symbol)) { return "parameter"; } else if (symbol.valueDeclaration && ts.isConst(symbol.valueDeclaration)) { return "const"; } else if (ts.forEach(symbol.declarations, ts.isLet)) { return "let"; } return isLocalVariableOrFunction(symbol) ? "local var" : "var"; } if (flags & 16) return isLocalVariableOrFunction(symbol) ? "local function" : "function"; if (flags & 32768) return "getter"; if (flags & 65536) return "setter"; if (flags & 8192) return "method"; if (flags & 16384) return "constructor"; if (flags & 4) { if (flags & 33554432 && symbol.checkFlags & 6) { var unionPropertyKind = ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { var rootSymbolFlags = rootSymbol.getFlags(); if (rootSymbolFlags & (98308 | 3)) { return "property"; } ts.Debug.assert(!!(rootSymbolFlags & (8192 | 16))); }); if (!unionPropertyKind) { var typeOfUnionProperty = typeChecker.getTypeOfSymbolAtLocation(symbol, location); if (typeOfUnionProperty.getCallSignatures().length) { return "method"; } return "property"; } return unionPropertyKind; } switch (location.parent && location.parent.kind) { case 257: case 255: case 256: return location.kind === 71 ? "property" : "JSX attribute"; case 262: return "JSX attribute"; default: return "property"; } } return ""; } function getSymbolModifiers(symbol) { var nodeModifiers = symbol && symbol.declarations && symbol.declarations.length > 0 ? ts.getNodeModifiers(symbol.declarations[0]) : ""; var symbolModifiers = symbol && symbol.flags & 16777216 ? "optional" : ""; return nodeModifiers && symbolModifiers ? nodeModifiers + "," + symbolModifiers : nodeModifiers || symbolModifiers; } SymbolDisplay.getSymbolModifiers = getSymbolModifiers; function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, enclosingDeclaration, location, semanticMeaning, alias) { if (semanticMeaning === void 0) { semanticMeaning = ts.getMeaningFromLocation(location); } var displayParts = []; var documentation; var tags; var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol); var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location); var hasAddedSymbolInfo = false; var isThisExpression = location.kind === 99 && ts.isExpression(location); var type; var printer; var documentationFromAlias; var tagsFromAlias; if (symbolKind !== "" || symbolFlags & 32 || symbolFlags & 2097152) { if (symbolKind === "getter" || symbolKind === "setter") { symbolKind = "property"; } var signature = void 0; type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol.exportSymbol || symbol, location); if (location.parent && location.parent.kind === 185) { var right = location.parent.name; if (right === location || (right && right.getFullWidth() === 0)) { location = location.parent; } } var callExpressionLike = void 0; if (ts.isCallOrNewExpression(location)) { callExpressionLike = location; } else if (ts.isCallExpressionTarget(location) || ts.isNewExpressionTarget(location)) { callExpressionLike = location.parent; } else if (location.parent && ts.isJsxOpeningLikeElement(location.parent) && ts.isFunctionLike(symbol.valueDeclaration)) { callExpressionLike = location.parent; } if (callExpressionLike) { var candidateSignatures = []; signature = typeChecker.getResolvedSignature(callExpressionLike, candidateSignatures); var useConstructSignatures = callExpressionLike.kind === 188 || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 97); var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); if (!ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) { signature = allSignatures.length ? allSignatures[0] : undefined; } if (signature) { if (useConstructSignatures && (symbolFlags & 32)) { symbolKind = "constructor"; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else if (symbolFlags & 2097152) { symbolKind = "alias"; pushSymbolKind(symbolKind); displayParts.push(ts.spacePart()); if (useConstructSignatures) { displayParts.push(ts.keywordPart(94)); displayParts.push(ts.spacePart()); } addFullSymbolName(symbol); } else { addPrefixForAnyFunctionOrVar(symbol, symbolKind); } switch (symbolKind) { case "JSX attribute": case "property": case "var": case "const": case "let": case "parameter": case "local var": displayParts.push(ts.punctuationPart(56)); displayParts.push(ts.spacePart()); if (!(ts.getObjectFlags(type) & 16) && type.symbol) { ts.addRange(displayParts, ts.symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, undefined, 4 | 1)); displayParts.push(ts.lineBreakPart()); } if (useConstructSignatures) { displayParts.push(ts.keywordPart(94)); displayParts.push(ts.spacePart()); } addSignatureDisplayParts(signature, allSignatures, 262144); break; default: addSignatureDisplayParts(signature, allSignatures); } hasAddedSymbolInfo = true; } } else if ((ts.isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304)) || (location.kind === 123 && location.parent.kind === 155)) { var functionDeclaration_1 = location.parent; var locationIsSymbolDeclaration = ts.find(symbol.declarations, function (declaration) { return declaration === (location.kind === 123 ? functionDeclaration_1.parent : functionDeclaration_1); }); if (locationIsSymbolDeclaration) { var allSignatures = functionDeclaration_1.kind === 155 ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); if (!typeChecker.isImplementationOfOverload(functionDeclaration_1)) { signature = typeChecker.getSignatureFromDeclaration(functionDeclaration_1); } else { signature = allSignatures[0]; } if (functionDeclaration_1.kind === 155) { symbolKind = "constructor"; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 158 && !(type.symbol.flags & 2048 || type.symbol.flags & 4096) ? type.symbol : symbol, symbolKind); } addSignatureDisplayParts(signature, allSignatures); hasAddedSymbolInfo = true; } } } if (symbolFlags & 32 && !hasAddedSymbolInfo && !isThisExpression) { addAliasPrefixIfNecessary(); if (ts.getDeclarationOfKind(symbol, 205)) { pushSymbolKind("local class"); } else { displayParts.push(ts.keywordPart(75)); } displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); } if ((symbolFlags & 64) && (semanticMeaning & 2)) { prefixNextMeaning(); displayParts.push(ts.keywordPart(109)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); } if (symbolFlags & 524288) { prefixNextMeaning(); displayParts.push(ts.keywordPart(139)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(58)); displayParts.push(ts.spacePart()); ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608)); } if (symbolFlags & 384) { prefixNextMeaning(); if (ts.forEach(symbol.declarations, ts.isConstEnumDeclaration)) { displayParts.push(ts.keywordPart(76)); displayParts.push(ts.spacePart()); } displayParts.push(ts.keywordPart(83)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } if (symbolFlags & 1536) { prefixNextMeaning(); var declaration = ts.getDeclarationOfKind(symbol, 239); var isNamespace = declaration && declaration.name && declaration.name.kind === 71; displayParts.push(ts.keywordPart(isNamespace ? 130 : 129)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } if ((symbolFlags & 262144) && (semanticMeaning & 2)) { prefixNextMeaning(); displayParts.push(ts.punctuationPart(19)); displayParts.push(ts.textPart("type parameter")); displayParts.push(ts.punctuationPart(20)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); if (symbol.parent) { addInPrefix(); addFullSymbolName(symbol.parent, enclosingDeclaration); writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); } else { var decl = ts.getDeclarationOfKind(symbol, 148); if (decl === undefined) return ts.Debug.fail(); var declaration = decl.parent; if (declaration) { if (ts.isFunctionLikeKind(declaration.kind)) { addInPrefix(); var signature = typeChecker.getSignatureFromDeclaration(declaration); if (declaration.kind === 159) { displayParts.push(ts.keywordPart(94)); displayParts.push(ts.spacePart()); } else if (declaration.kind !== 158 && declaration.name) { addFullSymbolName(declaration.symbol); } ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32)); } else if (declaration.kind === 237) { addInPrefix(); displayParts.push(ts.keywordPart(139)); displayParts.push(ts.spacePart()); addFullSymbolName(declaration.symbol); writeTypeParametersOfSymbol(declaration.symbol, sourceFile); } } } } if (symbolFlags & 8) { symbolKind = "enum member"; addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; if (declaration.kind === 273) { var constantValue = typeChecker.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(58)); displayParts.push(ts.spacePart()); displayParts.push(ts.displayPart(ts.getTextOfConstantValue(constantValue), typeof constantValue === "number" ? ts.SymbolDisplayPartKind.numericLiteral : ts.SymbolDisplayPartKind.stringLiteral)); } } } if (symbolFlags & 2097152) { prefixNextMeaning(); if (!hasAddedSymbolInfo) { var resolvedSymbol = typeChecker.getAliasedSymbol(symbol); if (resolvedSymbol !== symbol && resolvedSymbol.declarations && resolvedSymbol.declarations.length > 0) { var resolvedNode = resolvedSymbol.declarations[0]; var declarationName = ts.getNameOfDeclaration(resolvedNode); if (declarationName) { var isExternalModuleDeclaration = ts.isModuleWithStringLiteralName(resolvedNode) && ts.hasModifier(resolvedNode, 2); var shouldUseAliasName = symbol.name !== "default" && !isExternalModuleDeclaration; var resolvedInfo = getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, resolvedSymbol, ts.getSourceFileOfNode(resolvedNode), resolvedNode, declarationName, semanticMeaning, shouldUseAliasName ? symbol : resolvedSymbol); displayParts.push.apply(displayParts, resolvedInfo.displayParts); displayParts.push(ts.lineBreakPart()); documentationFromAlias = resolvedInfo.documentation; tagsFromAlias = resolvedInfo.tags; } } } switch (symbol.declarations[0].kind) { case 242: displayParts.push(ts.keywordPart(84)); displayParts.push(ts.spacePart()); displayParts.push(ts.keywordPart(130)); break; case 249: displayParts.push(ts.keywordPart(84)); displayParts.push(ts.spacePart()); displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 58 : 79)); break; case 252: displayParts.push(ts.keywordPart(84)); break; default: displayParts.push(ts.keywordPart(91)); } displayParts.push(ts.spacePart()); addFullSymbolName(symbol); ts.forEach(symbol.declarations, function (declaration) { if (declaration.kind === 243) { var importEqualsDeclaration = declaration; if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(58)); displayParts.push(ts.spacePart()); displayParts.push(ts.keywordPart(133)); displayParts.push(ts.punctuationPart(19)); displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), ts.SymbolDisplayPartKind.stringLiteral)); displayParts.push(ts.punctuationPart(20)); } else { var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference); if (internalAliasSymbol) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(58)); displayParts.push(ts.spacePart()); addFullSymbolName(internalAliasSymbol, enclosingDeclaration); } } return true; } }); } if (!hasAddedSymbolInfo) { if (symbolKind !== "") { if (type) { if (isThisExpression) { prefixNextMeaning(); displayParts.push(ts.keywordPart(99)); } else { addPrefixForAnyFunctionOrVar(symbol, symbolKind); } if (symbolKind === "property" || symbolKind === "JSX attribute" || symbolFlags & 3 || symbolKind === "local var" || isThisExpression) { displayParts.push(ts.punctuationPart(56)); displayParts.push(ts.spacePart()); if (type.symbol && type.symbol.flags & 262144) { var typeParameterParts = ts.mapToDisplayParts(function (writer) { var param = typeChecker.typeParameterToDeclaration(type, enclosingDeclaration); getPrinter().writeNode(4, param, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosingDeclaration)), writer); }); ts.addRange(displayParts, typeParameterParts); } else { ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, type, enclosingDeclaration)); } } else if (symbolFlags & 16 || symbolFlags & 8192 || symbolFlags & 16384 || symbolFlags & 131072 || symbolFlags & 98304 || symbolKind === "method") { var allSignatures = type.getNonNullableType().getCallSignatures(); if (allSignatures.length) { addSignatureDisplayParts(allSignatures[0], allSignatures); } } } } else { symbolKind = getSymbolKind(typeChecker, symbol, location); } } if (!documentation) { documentation = symbol.getDocumentationComment(typeChecker); tags = symbol.getJsDocTags(); if (documentation.length === 0 && symbolFlags & 4) { if (symbol.parent && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 274; })) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (!declaration.parent || declaration.parent.kind !== 200) { continue; } var rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right); if (!rhsSymbol) { continue; } documentation = rhsSymbol.getDocumentationComment(typeChecker); tags = rhsSymbol.getJsDocTags(); if (documentation.length > 0) { break; } } } } } if (documentation.length === 0 && documentationFromAlias) { documentation = documentationFromAlias; } if (tags.length === 0 && tagsFromAlias) { tags = tagsFromAlias; } return { displayParts: displayParts, documentation: documentation, symbolKind: symbolKind, tags: tags }; function getPrinter() { if (!printer) { printer = ts.createPrinter({ removeComments: true }); } return printer; } function prefixNextMeaning() { if (displayParts.length) { displayParts.push(ts.lineBreakPart()); } addAliasPrefixIfNecessary(); } function addAliasPrefixIfNecessary() { if (alias) { pushSymbolKind("alias"); displayParts.push(ts.spacePart()); } } function addInPrefix() { displayParts.push(ts.spacePart()); displayParts.push(ts.keywordPart(92)); displayParts.push(ts.spacePart()); } function addFullSymbolName(symbolToDisplay, enclosingDeclaration) { if (alias && symbolToDisplay === symbol) { symbolToDisplay = alias; } var fullSymbolDisplayParts = ts.symbolToDisplayParts(typeChecker, symbolToDisplay, enclosingDeclaration || sourceFile, undefined, 1 | 2 | 4); ts.addRange(displayParts, fullSymbolDisplayParts); if (symbol.flags & 16777216) { displayParts.push(ts.punctuationPart(55)); } } function addPrefixForAnyFunctionOrVar(symbol, symbolKind) { prefixNextMeaning(); if (symbolKind) { pushSymbolKind(symbolKind); if (symbol && !ts.some(symbol.declarations, function (d) { return ts.isArrowFunction(d) || (ts.isFunctionExpression(d) || ts.isClassExpression(d)) && !d.name; })) { displayParts.push(ts.spacePart()); addFullSymbolName(symbol); } } } function pushSymbolKind(symbolKind) { switch (symbolKind) { case "var": case "function": case "let": case "const": case "constructor": displayParts.push(ts.textOrKeywordPart(symbolKind)); return; default: displayParts.push(ts.punctuationPart(19)); displayParts.push(ts.textOrKeywordPart(symbolKind)); displayParts.push(ts.punctuationPart(20)); return; } } function addSignatureDisplayParts(signature, allSignatures, flags) { if (flags === void 0) { flags = 0; } ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, enclosingDeclaration, flags | 32)); if (allSignatures.length > 1) { displayParts.push(ts.spacePart()); displayParts.push(ts.punctuationPart(19)); displayParts.push(ts.operatorPart(37)); displayParts.push(ts.displayPart((allSignatures.length - 1).toString(), ts.SymbolDisplayPartKind.numericLiteral)); displayParts.push(ts.spacePart()); displayParts.push(ts.textPart(allSignatures.length === 2 ? "overload" : "overloads")); displayParts.push(ts.punctuationPart(20)); } documentation = signature.getDocumentationComment(typeChecker); tags = signature.getJsDocTags(); } function writeTypeParametersOfSymbol(symbol, enclosingDeclaration) { var typeParameterParts = ts.mapToDisplayParts(function (writer) { var params = typeChecker.symbolToTypeParameterDeclarations(symbol, enclosingDeclaration); getPrinter().writeList(26896, params, ts.getSourceFileOfNode(ts.getParseTreeNode(enclosingDeclaration)), writer); }); ts.addRange(displayParts, typeParameterParts); } } SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind; function isLocalVariableOrFunction(symbol) { if (symbol.parent) { return false; } return ts.forEach(symbol.declarations, function (declaration) { if (declaration.kind === 192) { return true; } if (declaration.kind !== 232 && declaration.kind !== 234) { return false; } for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) { if (parent.kind === 274 || parent.kind === 240) { return false; } } return true; }); } })(SymbolDisplay = ts.SymbolDisplay || (ts.SymbolDisplay = {})); })(ts || (ts = {})); var ts; (function (ts) { function transpileModule(input, transpileOptions) { var diagnostics = []; var options = transpileOptions.compilerOptions ? fixupCompilerOptions(transpileOptions.compilerOptions, diagnostics) : ts.getDefaultCompilerOptions(); options.isolatedModules = true; options.suppressOutputPathCheck = true; options.allowNonTsExtensions = true; options.noLib = true; options.lib = undefined; options.types = undefined; options.noEmit = undefined; options.noEmitOnError = undefined; options.paths = undefined; options.rootDirs = undefined; options.declaration = undefined; options.declarationDir = undefined; options.out = undefined; options.outFile = undefined; options.noResolve = true; var inputFileName = transpileOptions.fileName || (options.jsx ? "module.tsx" : "module.ts"); var sourceFile = ts.createSourceFile(inputFileName, input, options.target); if (transpileOptions.moduleName) { sourceFile.moduleName = transpileOptions.moduleName; } if (transpileOptions.renamedDependencies) { sourceFile.renamedDependencies = ts.createMapFromTemplate(transpileOptions.renamedDependencies); } var newLine = ts.getNewLineCharacter(options); var outputText; var sourceMapText; var compilerHost = { getSourceFile: function (fileName) { return fileName === ts.normalizePath(inputFileName) ? sourceFile : undefined; }, writeFile: function (name, text) { if (ts.fileExtensionIs(name, ".map")) { ts.Debug.assertEqual(sourceMapText, undefined, "Unexpected multiple source map outputs, file:", name); sourceMapText = text; } else { ts.Debug.assertEqual(outputText, undefined, "Unexpected multiple outputs, file:", name); outputText = text; } }, getDefaultLibFileName: function () { return "lib.d.ts"; }, useCaseSensitiveFileNames: function () { return false; }, getCanonicalFileName: function (fileName) { return fileName; }, getCurrentDirectory: function () { return ""; }, getNewLine: function () { return newLine; }, fileExists: function (fileName) { return fileName === inputFileName; }, readFile: function () { return ""; }, directoryExists: function () { return true; }, getDirectories: function () { return []; } }; var program = ts.createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { ts.addRange(diagnostics, program.getSyntacticDiagnostics(sourceFile)); ts.addRange(diagnostics, program.getOptionsDiagnostics()); } program.emit(undefined, undefined, undefined, undefined, transpileOptions.transformers); if (outputText === undefined) return ts.Debug.fail("Output generation failed"); return { outputText: outputText, diagnostics: diagnostics, sourceMapText: sourceMapText }; } ts.transpileModule = transpileModule; function transpile(input, compilerOptions, fileName, diagnostics, moduleName) { var output = transpileModule(input, { compilerOptions: compilerOptions, fileName: fileName, reportDiagnostics: !!diagnostics, moduleName: moduleName }); ts.addRange(diagnostics, output.diagnostics); return output.outputText; } ts.transpile = transpile; var commandLineOptionsStringToEnum; function fixupCompilerOptions(options, diagnostics) { commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; }); }); options = ts.cloneCompilerOptions(options); var _loop_21 = function (opt) { if (!ts.hasProperty(options, opt.name)) { return "continue"; } var value = options[opt.name]; if (ts.isString(value)) { options[opt.name] = ts.parseCustomTypeOption(opt, value, diagnostics); } else { if (!ts.forEachEntry(opt.type, function (v) { return v === value; })) { diagnostics.push(ts.createCompilerDiagnosticForInvalidCustomType(opt)); } } }; for (var _i = 0, commandLineOptionsStringToEnum_1 = commandLineOptionsStringToEnum; _i < commandLineOptionsStringToEnum_1.length; _i++) { var opt = commandLineOptionsStringToEnum_1[_i]; _loop_21(opt); } return options; } ts.fixupCompilerOptions = fixupCompilerOptions; })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { var FormattingRequestKind; (function (FormattingRequestKind) { FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; FormattingRequestKind[FormattingRequestKind["FormatOnOpeningCurlyBrace"] = 4] = "FormatOnOpeningCurlyBrace"; FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 5] = "FormatOnClosingCurlyBrace"; })(FormattingRequestKind = formatting.FormattingRequestKind || (formatting.FormattingRequestKind = {})); var FormattingContext = (function () { function FormattingContext(sourceFile, formattingRequestKind, options) { this.sourceFile = sourceFile; this.formattingRequestKind = formattingRequestKind; this.options = options; } FormattingContext.prototype.updateContext = function (currentRange, currentTokenParent, nextRange, nextTokenParent, commonParent) { ts.Debug.assert(currentRange !== undefined, "currentTokenSpan is null"); ts.Debug.assert(currentTokenParent !== undefined, "currentTokenParent is null"); ts.Debug.assert(nextRange !== undefined, "nextTokenSpan is null"); ts.Debug.assert(nextTokenParent !== undefined, "nextTokenParent is null"); ts.Debug.assert(commonParent !== undefined, "commonParent is null"); this.currentTokenSpan = currentRange; this.currentTokenParent = currentTokenParent; this.nextTokenSpan = nextRange; this.nextTokenParent = nextTokenParent; this.contextNode = commonParent; this.contextNodeAllOnSameLine = undefined; this.nextNodeAllOnSameLine = undefined; this.tokensAreOnSameLine = undefined; this.contextNodeBlockIsOnOneLine = undefined; this.nextNodeBlockIsOnOneLine = undefined; }; FormattingContext.prototype.ContextNodeAllOnSameLine = function () { if (this.contextNodeAllOnSameLine === undefined) { this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); } return this.contextNodeAllOnSameLine; }; FormattingContext.prototype.NextNodeAllOnSameLine = function () { if (this.nextNodeAllOnSameLine === undefined) { this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); } return this.nextNodeAllOnSameLine; }; FormattingContext.prototype.TokensAreOnSameLine = function () { if (this.tokensAreOnSameLine === undefined) { var startLine = this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line; var endLine = this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line; this.tokensAreOnSameLine = (startLine === endLine); } return this.tokensAreOnSameLine; }; FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { if (this.contextNodeBlockIsOnOneLine === undefined) { this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); } return this.contextNodeBlockIsOnOneLine; }; FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { if (this.nextNodeBlockIsOnOneLine === undefined) { this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); } return this.nextNodeBlockIsOnOneLine; }; FormattingContext.prototype.NodeIsOnOneLine = function (node) { var startLine = this.sourceFile.getLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line; var endLine = this.sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line; return startLine === endLine; }; FormattingContext.prototype.BlockIsOnOneLine = function (node) { var openBrace = ts.findChildOfKind(node, 17, this.sourceFile); var closeBrace = ts.findChildOfKind(node, 18, this.sourceFile); if (openBrace && closeBrace) { var startLine = this.sourceFile.getLineAndCharacterOfPosition(openBrace.getEnd()).line; var endLine = this.sourceFile.getLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line; return startLine === endLine; } return false; }; return FormattingContext; }()); formatting.FormattingContext = FormattingContext; })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { var standardScanner = ts.createScanner(6, false, 0); var jsxScanner = ts.createScanner(6, false, 1); var ScanAction; (function (ScanAction) { ScanAction[ScanAction["Scan"] = 0] = "Scan"; ScanAction[ScanAction["RescanGreaterThanToken"] = 1] = "RescanGreaterThanToken"; ScanAction[ScanAction["RescanSlashToken"] = 2] = "RescanSlashToken"; ScanAction[ScanAction["RescanTemplateToken"] = 3] = "RescanTemplateToken"; ScanAction[ScanAction["RescanJsxIdentifier"] = 4] = "RescanJsxIdentifier"; ScanAction[ScanAction["RescanJsxText"] = 5] = "RescanJsxText"; })(ScanAction || (ScanAction = {})); function getFormattingScanner(text, languageVariant, startPos, endPos, cb) { var scanner = languageVariant === 1 ? jsxScanner : standardScanner; scanner.setText(text); scanner.setTextPos(startPos); var wasNewLine = true; var leadingTrivia; var trailingTrivia; var savedPos; var lastScanAction; var lastTokenInfo; var res = cb({ advance: advance, readTokenInfo: readTokenInfo, isOnToken: isOnToken, getCurrentLeadingTrivia: function () { return leadingTrivia; }, lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, skipToEndOf: skipToEndOf, }); lastTokenInfo = undefined; scanner.setText(undefined); return res; function advance() { lastTokenInfo = undefined; var isStarted = scanner.getStartPos() !== startPos; if (isStarted) { wasNewLine = !!trailingTrivia && ts.last(trailingTrivia).kind === 4; } else { scanner.scan(); } leadingTrivia = undefined; trailingTrivia = undefined; var pos = scanner.getStartPos(); while (pos < endPos) { var t = scanner.getToken(); if (!ts.isTrivia(t)) { break; } scanner.scan(); var item = { pos: pos, end: scanner.getStartPos(), kind: t }; pos = scanner.getStartPos(); leadingTrivia = ts.append(leadingTrivia, item); } savedPos = scanner.getStartPos(); } function shouldRescanGreaterThanToken(node) { switch (node.kind) { case 31: case 66: case 67: case 47: case 46: return true; } return false; } function shouldRescanJsxIdentifier(node) { if (node.parent) { switch (node.parent.kind) { case 262: case 257: case 258: case 256: return ts.isKeyword(node.kind) || node.kind === 71; } } return false; } function shouldRescanJsxText(node) { return node.kind === 10; } function shouldRescanSlashToken(container) { return container.kind === 12; } function shouldRescanTemplateToken(container) { return container.kind === 15 || container.kind === 16; } function startsWithSlashToken(t) { return t === 41 || t === 63; } function readTokenInfo(n) { ts.Debug.assert(isOnToken()); var expectedScanAction = shouldRescanGreaterThanToken(n) ? 1 : shouldRescanSlashToken(n) ? 2 : shouldRescanTemplateToken(n) ? 3 : shouldRescanJsxIdentifier(n) ? 4 : shouldRescanJsxText(n) ? 5 : 0; if (lastTokenInfo && expectedScanAction === lastScanAction) { return fixTokenKind(lastTokenInfo, n); } if (scanner.getStartPos() !== savedPos) { ts.Debug.assert(lastTokenInfo !== undefined); scanner.setTextPos(savedPos); scanner.scan(); } var currentToken = getNextToken(n, expectedScanAction); var token = { pos: scanner.getStartPos(), end: scanner.getTextPos(), kind: currentToken }; if (trailingTrivia) { trailingTrivia = undefined; } while (scanner.getStartPos() < endPos) { currentToken = scanner.scan(); if (!ts.isTrivia(currentToken)) { break; } var trivia = { pos: scanner.getStartPos(), end: scanner.getTextPos(), kind: currentToken }; if (!trailingTrivia) { trailingTrivia = []; } trailingTrivia.push(trivia); if (currentToken === 4) { scanner.scan(); break; } } lastTokenInfo = { leadingTrivia: leadingTrivia, trailingTrivia: trailingTrivia, token: token }; return fixTokenKind(lastTokenInfo, n); } function getNextToken(n, expectedScanAction) { var token = scanner.getToken(); lastScanAction = 0; switch (expectedScanAction) { case 1: if (token === 29) { lastScanAction = 1; var newToken = scanner.reScanGreaterToken(); ts.Debug.assert(n.kind === newToken); return newToken; } break; case 2: if (startsWithSlashToken(token)) { lastScanAction = 2; var newToken = scanner.reScanSlashToken(); ts.Debug.assert(n.kind === newToken); return newToken; } break; case 3: if (token === 18) { lastScanAction = 3; return scanner.reScanTemplateToken(); } break; case 4: lastScanAction = 4; return scanner.scanJsxIdentifier(); case 5: lastScanAction = 5; return scanner.reScanJsxToken(); case 0: break; default: ts.Debug.assertNever(expectedScanAction); } return token; } function isOnToken() { var current = lastTokenInfo ? lastTokenInfo.token.kind : scanner.getToken(); var startPos = lastTokenInfo ? lastTokenInfo.token.pos : scanner.getStartPos(); return startPos < endPos && current !== 1 && !ts.isTrivia(current); } function fixTokenKind(tokenInfo, container) { if (ts.isToken(container) && tokenInfo.token.kind !== container.kind) { tokenInfo.token.kind = container.kind; } return tokenInfo; } function skipToEndOf(node) { scanner.setTextPos(node.end); savedPos = scanner.getStartPos(); lastScanAction = undefined; lastTokenInfo = undefined; wasNewLine = false; leadingTrivia = undefined; trailingTrivia = undefined; } } formatting.getFormattingScanner = getFormattingScanner; })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { formatting.anyContext = ts.emptyArray; var RuleAction; (function (RuleAction) { RuleAction[RuleAction["Ignore"] = 1] = "Ignore"; RuleAction[RuleAction["Space"] = 2] = "Space"; RuleAction[RuleAction["NewLine"] = 4] = "NewLine"; RuleAction[RuleAction["Delete"] = 8] = "Delete"; })(RuleAction = formatting.RuleAction || (formatting.RuleAction = {})); var RuleFlags; (function (RuleFlags) { RuleFlags[RuleFlags["None"] = 0] = "None"; RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; })(RuleFlags = formatting.RuleFlags || (formatting.RuleFlags = {})); })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { function getAllRules() { var allTokens = []; for (var token = 0; token <= 145; token++) { allTokens.push(token); } function anyTokenExcept() { var tokens = []; for (var _i = 0; _i < arguments.length; _i++) { tokens[_i] = arguments[_i]; } return { tokens: allTokens.filter(function (t) { return !tokens.some(function (t2) { return t2 === t; }); }), isSpecific: false }; } var anyToken = { tokens: allTokens, isSpecific: false }; var anyTokenIncludingMultilineComments = tokenRangeFrom(allTokens.concat([3])); var keywords = tokenRangeFromRange(72, 145); var binaryOperators = tokenRangeFromRange(27, 70); var binaryKeywordOperators = [92, 93, 145, 118, 127]; var unaryPrefixOperators = [43, 44, 52, 51]; var unaryPrefixExpressions = [ 8, 71, 19, 21, 17, 99, 94 ]; var unaryPreincrementExpressions = [71, 19, 99, 94]; var unaryPostincrementExpressions = [71, 20, 22, 94]; var unaryPredecrementExpressions = [71, 19, 99, 94]; var unaryPostdecrementExpressions = [71, 20, 22, 94]; var comments = [2, 3]; var typeNames = [71].concat(ts.typeKeywords); var functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments; var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([71, 3, 75, 84, 91]); var controlOpenBraceLeftTokenRange = tokenRangeFrom([20, 3, 81, 102, 87, 82]); var highPriorityCommonRules = [ rule("IgnoreBeforeComment", anyToken, comments, formatting.anyContext, 1), rule("IgnoreAfterLineComment", 2, anyToken, formatting.anyContext, 1), rule("NotSpaceBeforeColon", anyToken, 56, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNotTypeAnnotationContext], 8), rule("SpaceAfterColon", 56, anyToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 2), rule("NoSpaceBeforeQuestionMark", anyToken, 55, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 8), rule("SpaceAfterQuestionMarkInConditionalOperator", 55, anyToken, [isNonJsxSameLineTokenContext, isConditionalOperatorContext], 2), rule("NoSpaceAfterQuestionMark", 55, anyToken, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeDot", anyToken, 23, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterDot", 23, anyToken, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceBetweenImportParenInImportType", 91, 19, [isNonJsxSameLineTokenContext, isImportTypeContext], 8), rule("NoSpaceAfterUnaryPrefixOperator", unaryPrefixOperators, unaryPrefixExpressions, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 8), rule("NoSpaceAfterUnaryPreincrementOperator", 43, unaryPreincrementExpressions, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterUnaryPredecrementOperator", 44, unaryPredecrementExpressions, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeUnaryPostincrementOperator", unaryPostincrementExpressions, 43, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeUnaryPostdecrementOperator", unaryPostdecrementExpressions, 44, [isNonJsxSameLineTokenContext], 8), rule("SpaceAfterPostincrementWhenFollowedByAdd", 43, 37, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterAddWhenFollowedByUnaryPlus", 37, 37, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterAddWhenFollowedByPreincrement", 37, 43, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterPostdecrementWhenFollowedBySubtract", 44, 38, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterSubtractWhenFollowedByUnaryMinus", 38, 38, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterSubtractWhenFollowedByPredecrement", 38, 44, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("NoSpaceAfterCloseBrace", 18, [26, 25], [isNonJsxSameLineTokenContext], 8), rule("NewLineBeforeCloseBraceInBlockContext", anyTokenIncludingMultilineComments, 18, [isMultilineBlockContext], 4), rule("SpaceAfterCloseBrace", 18, anyTokenExcept(20), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 2), rule("SpaceBetweenCloseBraceAndElse", 18, 82, [isNonJsxSameLineTokenContext], 2), rule("SpaceBetweenCloseBraceAndWhile", 18, 106, [isNonJsxSameLineTokenContext], 2), rule("NoSpaceBetweenEmptyBraceBrackets", 17, 18, [isNonJsxSameLineTokenContext, isObjectContext], 8), rule("SpaceAfterConditionalClosingParen", 20, 21, [isControlDeclContext], 2), rule("NoSpaceBetweenFunctionKeywordAndStar", 89, 39, [isFunctionDeclarationOrFunctionExpressionContext], 8), rule("SpaceAfterStarInGeneratorDeclaration", 39, [71, 19], [isFunctionDeclarationOrFunctionExpressionContext], 2), rule("SpaceAfterFunctionInFuncDecl", 89, anyToken, [isFunctionDeclContext], 2), rule("NewLineAfterOpenBraceInBlockContext", 17, anyToken, [isMultilineBlockContext], 4), rule("SpaceAfterGetSetInMember", [125, 136], 71, [isFunctionDeclContext], 2), rule("NoSpaceBetweenYieldKeywordAndStar", 116, 39, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 8), rule("SpaceBetweenYieldOrYieldStarAndOperand", [116, 39], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 2), rule("NoSpaceBetweenReturnAndSemicolon", 96, 25, [isNonJsxSameLineTokenContext], 8), rule("SpaceAfterCertainKeywords", [104, 100, 94, 80, 96, 103, 121], anyToken, [isNonJsxSameLineTokenContext], 2), rule("SpaceAfterLetConstInVariableDeclaration", [110, 76], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 2), rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 19, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 8), rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterVoidOperator", 105, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 2), rule("SpaceBetweenAsyncAndOpenParen", 120, 19, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 2), rule("SpaceBetweenAsyncAndFunctionKeyword", 120, 89, [isNonJsxSameLineTokenContext], 2), rule("NoSpaceBetweenTagAndTemplateString", [71, 20], [13, 14], [isNonJsxSameLineTokenContext], 8), rule("SpaceBeforeJsxAttribute", anyToken, 71, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 2), rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 41, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 2), rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 41, 29, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 58, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterEqualInJsxAttribute", 58, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterModuleImport", [129, 133], 19, [isNonJsxSameLineTokenContext], 8), rule("SpaceAfterCertainTypeScriptKeywords", [ 117, 75, 124, 79, 83, 84, 85, 125, 108, 91, 109, 129, 130, 112, 114, 113, 132, 136, 115, 139, 143, 128, 126, ], anyToken, [isNonJsxSameLineTokenContext], 2), rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [85, 108, 143], [isNonJsxSameLineTokenContext], 2), rule("SpaceAfterModuleName", 9, 17, [isModuleDeclContext], 2), rule("SpaceBeforeArrow", anyToken, 36, [isNonJsxSameLineTokenContext], 2), rule("SpaceAfterArrow", 36, anyToken, [isNonJsxSameLineTokenContext], 2), rule("NoSpaceAfterEllipsis", 24, 71, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterOptionalParameters", 55, [20, 26], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 8), rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 17, 18, [isNonJsxSameLineTokenContext, isObjectTypeContext], 8), rule("NoSpaceBeforeOpenAngularBracket", typeNames, 27, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 8), rule("NoSpaceBetweenCloseParenAndAngularBracket", 20, 27, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 8), rule("NoSpaceAfterOpenAngularBracket", 27, anyToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 8), rule("NoSpaceBeforeCloseAngularBracket", anyToken, 29, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 8), rule("NoSpaceAfterCloseAngularBracket", 29, [19, 21, 29, 26], [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext], 8), rule("SpaceBeforeAt", [20, 71], 57, [isNonJsxSameLineTokenContext], 2), rule("NoSpaceAfterAt", 57, anyToken, [isNonJsxSameLineTokenContext], 8), rule("SpaceAfterDecorator", anyToken, [ 117, 71, 84, 79, 75, 115, 114, 112, 113, 125, 136, 21, 39, ], [isEndOfDecoratorContextOnSameLine], 2), rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 51, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 8), rule("NoSpaceAfterNewKeywordOnConstructorSignature", 94, 19, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 8), ]; var userConfigurableRules = [ rule("SpaceAfterConstructor", 123, 19, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 2), rule("NoSpaceAfterConstructor", 123, 19, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 8), rule("SpaceAfterComma", 26, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket], 2), rule("NoSpaceAfterComma", 26, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 8), rule("SpaceAfterAnonymousFunctionKeyword", 89, 19, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 2), rule("NoSpaceAfterAnonymousFunctionKeyword", 89, 19, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 8), rule("SpaceAfterKeywordInControl", keywords, 19, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 2), rule("NoSpaceAfterKeywordInControl", keywords, 19, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 8), rule("SpaceAfterOpenParen", 19, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 2), rule("SpaceBeforeCloseParen", anyToken, 20, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 2), rule("SpaceBetweenOpenParens", 19, 19, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 2), rule("NoSpaceBetweenParens", 19, 20, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterOpenParen", 19, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeCloseParen", anyToken, 20, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 8), rule("SpaceAfterOpenBracket", 21, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 2), rule("SpaceBeforeCloseBracket", anyToken, 22, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 2), rule("NoSpaceBetweenBrackets", 21, 22, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterOpenBracket", 21, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeCloseBracket", anyToken, 22, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 8), rule("SpaceAfterOpenBrace", 17, anyToken, [isOptionEnabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isBraceWrappedContext], 2), rule("SpaceBeforeCloseBrace", anyToken, 18, [isOptionEnabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isBraceWrappedContext], 2), rule("NoSpaceBetweenEmptyBraceBrackets", 17, 18, [isNonJsxSameLineTokenContext, isObjectContext], 8), rule("NoSpaceAfterOpenBrace", 17, anyToken, [isOptionDisabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeCloseBrace", anyToken, 18, [isOptionDisabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isNonJsxSameLineTokenContext], 8), rule("SpaceAfterTemplateHeadAndMiddle", [14, 15], anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 2), rule("SpaceBeforeTemplateMiddleAndTail", anyToken, [15, 16], [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 2), rule("NoSpaceAfterTemplateHeadAndMiddle", [14, 15], anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeTemplateMiddleAndTail", anyToken, [15, 16], [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 8), rule("SpaceAfterOpenBraceInJsxExpression", 17, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 2), rule("SpaceBeforeCloseBraceInJsxExpression", anyToken, 18, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 2), rule("NoSpaceAfterOpenBraceInJsxExpression", 17, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 8), rule("NoSpaceBeforeCloseBraceInJsxExpression", anyToken, 18, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 8), rule("SpaceAfterSemicolonInFor", 25, anyToken, [isOptionEnabled("insertSpaceAfterSemicolonInForStatements"), isNonJsxSameLineTokenContext, isForContext], 2), rule("NoSpaceAfterSemicolonInFor", 25, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterSemicolonInForStatements"), isNonJsxSameLineTokenContext, isForContext], 8), rule("SpaceBeforeBinaryOperator", anyToken, binaryOperators, [isOptionEnabled("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("SpaceAfterBinaryOperator", binaryOperators, anyToken, [isOptionEnabled("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 2), rule("NoSpaceBeforeBinaryOperator", anyToken, binaryOperators, [isOptionDisabledOrUndefined("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 8), rule("NoSpaceAfterBinaryOperator", binaryOperators, anyToken, [isOptionDisabledOrUndefined("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 8), rule("SpaceBeforeOpenParenInFuncDecl", anyToken, 19, [isOptionEnabled("insertSpaceBeforeFunctionParenthesis"), isNonJsxSameLineTokenContext, isFunctionDeclContext], 2), rule("NoSpaceBeforeOpenParenInFuncDecl", anyToken, 19, [isOptionDisabledOrUndefined("insertSpaceBeforeFunctionParenthesis"), isNonJsxSameLineTokenContext, isFunctionDeclContext], 8), rule("NewLineBeforeOpenBraceInControl", controlOpenBraceLeftTokenRange, 17, [isOptionEnabled("placeOpenBraceOnNewLineForControlBlocks"), isControlDeclContext, isBeforeMultilineBlockContext], 4, 1), rule("NewLineBeforeOpenBraceInFunction", functionOpenBraceLeftTokenRange, 17, [isOptionEnabled("placeOpenBraceOnNewLineForFunctions"), isFunctionDeclContext, isBeforeMultilineBlockContext], 4, 1), rule("NewLineBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 17, [isOptionEnabled("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isBeforeMultilineBlockContext], 4, 1), rule("SpaceAfterTypeAssertion", 29, anyToken, [isOptionEnabled("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], 2), rule("NoSpaceAfterTypeAssertion", 29, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], 8), rule("SpaceBeforeTypeAnnotation", anyToken, 56, [isOptionEnabled("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], 2), rule("NoSpaceBeforeTypeAnnotation", anyToken, 56, [isOptionDisabledOrUndefined("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], 8), ]; var lowPriorityCommonRules = [ rule("NoSpaceBeforeSemicolon", anyToken, 25, [isNonJsxSameLineTokenContext], 8), rule("SpaceBeforeOpenBraceInControl", controlOpenBraceLeftTokenRange, 17, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForControlBlocks"), isControlDeclContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 2, 1), rule("SpaceBeforeOpenBraceInFunction", functionOpenBraceLeftTokenRange, 17, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isFunctionDeclContext, isBeforeBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 2, 1), rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 17, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 2, 1), rule("NoSpaceBeforeComma", anyToken, 26, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceBeforeOpenBracket", anyTokenExcept(120, 73), 21, [isNonJsxSameLineTokenContext], 8), rule("NoSpaceAfterCloseBracket", 22, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 8), rule("SpaceAfterSemicolon", 25, anyToken, [isNonJsxSameLineTokenContext], 2), rule("SpaceBetweenForAndAwaitKeyword", 88, 121, [isNonJsxSameLineTokenContext], 2), rule("SpaceBetweenStatements", [20, 81, 82, 73], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 2), rule("SpaceAfterTryFinally", [102, 87], 17, [isNonJsxSameLineTokenContext], 2), ]; return highPriorityCommonRules.concat(userConfigurableRules, lowPriorityCommonRules); } formatting.getAllRules = getAllRules; function rule(debugName, left, right, context, action, flags) { if (flags === void 0) { flags = 0; } return { leftTokenRange: toTokenRange(left), rightTokenRange: toTokenRange(right), rule: { debugName: debugName, context: context, action: action, flags: flags } }; } function tokenRangeFrom(tokens) { return { tokens: tokens, isSpecific: true }; } function toTokenRange(arg) { return typeof arg === "number" ? tokenRangeFrom([arg]) : ts.isArray(arg) ? tokenRangeFrom(arg) : arg; } function tokenRangeFromRange(from, to, except) { if (except === void 0) { except = []; } var tokens = []; for (var token = from; token <= to; token++) { if (!ts.contains(except, token)) { tokens.push(token); } } return tokenRangeFrom(tokens); } function isOptionEnabled(optionName) { return function (context) { return context.options && context.options.hasOwnProperty(optionName) && !!context.options[optionName]; }; } function isOptionDisabled(optionName) { return function (context) { return context.options && context.options.hasOwnProperty(optionName) && !context.options[optionName]; }; } function isOptionDisabledOrUndefined(optionName) { return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !context.options[optionName]; }; } function isOptionDisabledOrUndefinedOrTokensOnSameLine(optionName) { return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !context.options[optionName] || context.TokensAreOnSameLine(); }; } function isOptionEnabledOrUndefined(optionName) { return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !!context.options[optionName]; }; } function isForContext(context) { return context.contextNode.kind === 220; } function isNotForContext(context) { return !isForContext(context); } function isBinaryOpContext(context) { switch (context.contextNode.kind) { case 200: case 201: case 171: case 208: case 252: case 248: case 161: case 169: case 170: return true; case 182: case 237: case 243: case 232: case 149: case 273: case 152: case 151: return context.currentTokenSpan.kind === 58 || context.nextTokenSpan.kind === 58; case 221: case 148: return context.currentTokenSpan.kind === 92 || context.nextTokenSpan.kind === 92; case 222: return context.currentTokenSpan.kind === 145 || context.nextTokenSpan.kind === 145; } return false; } function isNotBinaryOpContext(context) { return !isBinaryOpContext(context); } function isNotTypeAnnotationContext(context) { return !isTypeAnnotationContext(context); } function isTypeAnnotationContext(context) { var contextKind = context.contextNode.kind; return contextKind === 152 || contextKind === 151 || contextKind === 149 || contextKind === 232 || ts.isFunctionLikeKind(contextKind); } function isConditionalOperatorContext(context) { return context.contextNode.kind === 201 || context.contextNode.kind === 171; } function isSameLineTokenOrBeforeBlockContext(context) { return context.TokensAreOnSameLine() || isBeforeBlockContext(context); } function isBraceWrappedContext(context) { return context.contextNode.kind === 180 || context.contextNode.kind === 177 || isSingleLineBlockContext(context); } function isBeforeMultilineBlockContext(context) { return isBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); } function isMultilineBlockContext(context) { return isBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); } function isSingleLineBlockContext(context) { return isBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); } function isBlockContext(context) { return nodeIsBlockContext(context.contextNode); } function isBeforeBlockContext(context) { return nodeIsBlockContext(context.nextTokenParent); } function nodeIsBlockContext(node) { if (nodeIsTypeScriptDeclWithBlockContext(node)) { return true; } switch (node.kind) { case 213: case 241: case 184: case 240: return true; } return false; } function isFunctionDeclContext(context) { switch (context.contextNode.kind) { case 234: case 154: case 153: case 156: case 157: case 158: case 192: case 155: case 193: case 236: return true; } return false; } function isNotFunctionDeclContext(context) { return !isFunctionDeclContext(context); } function isFunctionDeclarationOrFunctionExpressionContext(context) { return context.contextNode.kind === 234 || context.contextNode.kind === 192; } function isTypeScriptDeclWithBlockContext(context) { return nodeIsTypeScriptDeclWithBlockContext(context.contextNode); } function nodeIsTypeScriptDeclWithBlockContext(node) { switch (node.kind) { case 235: case 205: case 236: case 238: case 166: case 239: case 250: case 251: case 244: case 247: return true; } return false; } function isAfterCodeBlockContext(context) { switch (context.currentTokenParent.kind) { case 235: case 239: case 238: case 269: case 240: case 227: return true; case 213: { var blockParent = context.currentTokenParent.parent; if (!blockParent || blockParent.kind !== 193 && blockParent.kind !== 192) { return true; } } } return false; } function isControlDeclContext(context) { switch (context.contextNode.kind) { case 217: case 227: case 220: case 221: case 222: case 219: case 230: case 218: case 226: case 269: return true; default: return false; } } function isObjectContext(context) { return context.contextNode.kind === 184; } function isFunctionCallContext(context) { return context.contextNode.kind === 187; } function isNewContext(context) { return context.contextNode.kind === 188; } function isFunctionCallOrNewContext(context) { return isFunctionCallContext(context) || isNewContext(context); } function isPreviousTokenNotComma(context) { return context.currentTokenSpan.kind !== 26; } function isNextTokenNotCloseBracket(context) { return context.nextTokenSpan.kind !== 22; } function isArrowFunctionContext(context) { return context.contextNode.kind === 193; } function isImportTypeContext(context) { return context.contextNode.kind === 179; } function isNonJsxSameLineTokenContext(context) { return context.TokensAreOnSameLine() && context.contextNode.kind !== 10; } function isNonJsxElementOrFragmentContext(context) { return context.contextNode.kind !== 255 && context.contextNode.kind !== 259; } function isJsxExpressionContext(context) { return context.contextNode.kind === 265 || context.contextNode.kind === 264; } function isNextTokenParentJsxAttribute(context) { return context.nextTokenParent.kind === 262; } function isJsxAttributeContext(context) { return context.contextNode.kind === 262; } function isJsxSelfClosingElementContext(context) { return context.contextNode.kind === 256; } function isNotBeforeBlockInFunctionDeclarationContext(context) { return !isFunctionDeclContext(context) && !isBeforeBlockContext(context); } function isEndOfDecoratorContextOnSameLine(context) { return context.TokensAreOnSameLine() && !!context.contextNode.decorators && nodeIsInDecoratorContext(context.currentTokenParent) && !nodeIsInDecoratorContext(context.nextTokenParent); } function nodeIsInDecoratorContext(node) { while (ts.isExpressionNode(node)) { node = node.parent; } return node.kind === 150; } function isStartOfVariableDeclarationList(context) { return context.currentTokenParent.kind === 233 && context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; } function isNotFormatOnEnter(context) { return context.formattingRequestKind !== 2; } function isModuleDeclContext(context) { return context.contextNode.kind === 239; } function isObjectTypeContext(context) { return context.contextNode.kind === 166; } function isConstructorSignatureContext(context) { return context.contextNode.kind === 159; } function isTypeArgumentOrParameterOrAssertion(token, parent) { if (token.kind !== 27 && token.kind !== 29) { return false; } switch (parent.kind) { case 162: case 190: case 237: case 235: case 205: case 236: case 234: case 192: case 193: case 154: case 153: case 158: case 159: case 187: case 188: case 207: return true; default: return false; } } function isTypeArgumentOrParameterOrAssertionContext(context) { return isTypeArgumentOrParameterOrAssertion(context.currentTokenSpan, context.currentTokenParent) || isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); } function isTypeAssertionContext(context) { return context.contextNode.kind === 190; } function isVoidOpContext(context) { return context.currentTokenSpan.kind === 105 && context.currentTokenParent.kind === 196; } function isYieldOrYieldStarWithOperand(context) { return context.contextNode.kind === 203 && context.contextNode.expression !== undefined; } function isNonNullAssertionContext(context) { return context.contextNode.kind === 209; } })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { function getFormatContext(options) { return { options: options, getRule: getRulesMap() }; } formatting.getFormatContext = getFormatContext; var rulesMapCache; function getRulesMap() { if (rulesMapCache === undefined) { rulesMapCache = createRulesMap(formatting.getAllRules()); } return rulesMapCache; } function createRulesMap(rules) { var map = buildMap(rules); return function (context) { var bucket = map[getRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind)]; return bucket && ts.find(bucket, function (rule) { return ts.every(rule.context, function (c) { return c(context); }); }); }; } function buildMap(rules) { var map = new Array(mapRowLength * mapRowLength); var rulesBucketConstructionStateList = new Array(map.length); for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) { var rule = rules_1[_i]; var specificRule = rule.leftTokenRange.isSpecific && rule.rightTokenRange.isSpecific; for (var _a = 0, _b = rule.leftTokenRange.tokens; _a < _b.length; _a++) { var left = _b[_a]; for (var _c = 0, _d = rule.rightTokenRange.tokens; _c < _d.length; _c++) { var right = _d[_c]; var index = getRuleBucketIndex(left, right); var rulesBucket = map[index]; if (rulesBucket === undefined) { rulesBucket = map[index] = []; } addRule(rulesBucket, rule.rule, specificRule, rulesBucketConstructionStateList, index); } } } return map; } function getRuleBucketIndex(row, column) { ts.Debug.assert(row <= 145 && column <= 145, "Must compute formatting context from tokens"); return (row * mapRowLength) + column; } var maskBitSize = 5; var mask = 31; var mapRowLength = 145 + 1; var RulesPosition; (function (RulesPosition) { RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; RulesPosition[RulesPosition["IgnoreRulesAny"] = maskBitSize * 1] = "IgnoreRulesAny"; RulesPosition[RulesPosition["ContextRulesSpecific"] = maskBitSize * 2] = "ContextRulesSpecific"; RulesPosition[RulesPosition["ContextRulesAny"] = maskBitSize * 3] = "ContextRulesAny"; RulesPosition[RulesPosition["NoContextRulesSpecific"] = maskBitSize * 4] = "NoContextRulesSpecific"; RulesPosition[RulesPosition["NoContextRulesAny"] = maskBitSize * 5] = "NoContextRulesAny"; })(RulesPosition || (RulesPosition = {})); function addRule(rules, rule, specificTokens, constructionState, rulesBucketIndex) { var position = rule.action === 1 ? specificTokens ? RulesPosition.IgnoreRulesSpecific : RulesPosition.IgnoreRulesAny : rule.context !== formatting.anyContext ? specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny : specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; var state = constructionState[rulesBucketIndex] || 0; rules.splice(getInsertionIndex(state, position), 0, rule); constructionState[rulesBucketIndex] = increaseInsertionIndex(state, position); } function getInsertionIndex(indexBitmap, maskPosition) { var index = 0; for (var pos = 0; pos <= maskPosition; pos += maskBitSize) { index += indexBitmap & mask; indexBitmap >>= maskBitSize; } return index; } function increaseInsertionIndex(indexBitmap, maskPosition) { var value = ((indexBitmap >> maskPosition) & mask) + 1; ts.Debug.assert((value & mask) === value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); return (indexBitmap & ~(mask << maskPosition)) | (value << maskPosition); } })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { var Constants; (function (Constants) { Constants[Constants["Unknown"] = -1] = "Unknown"; })(Constants || (Constants = {})); function formatOnEnter(position, sourceFile, formatContext) { var line = sourceFile.getLineAndCharacterOfPosition(position).line; if (line === 0) { return []; } var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); while (ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } if (ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } var span = { pos: ts.getStartPositionOfLine(line - 1, sourceFile), end: endOfFormatSpan + 1 }; return formatSpan(span, sourceFile, formatContext, 2); } formatting.formatOnEnter = formatOnEnter; function formatOnSemicolon(position, sourceFile, formatContext) { var semicolon = findImmediatelyPrecedingTokenOfKind(position, 25, sourceFile); return formatNodeLines(findOutermostNodeWithinListLevel(semicolon), sourceFile, formatContext, 3); } formatting.formatOnSemicolon = formatOnSemicolon; function formatOnOpeningCurly(position, sourceFile, formatContext) { var openingCurly = findImmediatelyPrecedingTokenOfKind(position, 17, sourceFile); if (!openingCurly) { return []; } var curlyBraceRange = openingCurly.parent; var outermostNode = findOutermostNodeWithinListLevel(curlyBraceRange); var textRange = { pos: ts.getLineStartPositionForPosition(outermostNode.getStart(sourceFile), sourceFile), end: position }; return formatSpan(textRange, sourceFile, formatContext, 4); } formatting.formatOnOpeningCurly = formatOnOpeningCurly; function formatOnClosingCurly(position, sourceFile, formatContext) { var precedingToken = findImmediatelyPrecedingTokenOfKind(position, 18, sourceFile); return formatNodeLines(findOutermostNodeWithinListLevel(precedingToken), sourceFile, formatContext, 5); } formatting.formatOnClosingCurly = formatOnClosingCurly; function formatDocument(sourceFile, formatContext) { var span = { pos: 0, end: sourceFile.text.length }; return formatSpan(span, sourceFile, formatContext, 0); } formatting.formatDocument = formatDocument; function formatSelection(start, end, sourceFile, formatContext) { var span = { pos: ts.getLineStartPositionForPosition(start, sourceFile), end: end, }; return formatSpan(span, sourceFile, formatContext, 1); } formatting.formatSelection = formatSelection; function findImmediatelyPrecedingTokenOfKind(end, expectedTokenKind, sourceFile) { var precedingToken = ts.findPrecedingToken(end, sourceFile); return precedingToken && precedingToken.kind === expectedTokenKind && end === precedingToken.getEnd() ? precedingToken : undefined; } function findOutermostNodeWithinListLevel(node) { var current = node; while (current && current.parent && current.parent.end === node.end && !isListElement(current.parent, current)) { current = current.parent; } return current; } function isListElement(parent, node) { switch (parent.kind) { case 235: case 236: return ts.rangeContainsRange(parent.members, node); case 239: var body = parent.body; return !!body && body.kind === 240 && ts.rangeContainsRange(body.statements, node); case 274: case 213: case 240: return ts.rangeContainsRange(parent.statements, node); case 269: return ts.rangeContainsRange(parent.block.statements, node); } return false; } function findEnclosingNode(range, sourceFile) { return find(sourceFile); function find(n) { var candidate = ts.forEachChild(n, function (c) { return ts.startEndContainsRange(c.getStart(sourceFile), c.end, range) && c; }); if (candidate) { var result = find(candidate); if (result) { return result; } } return n; } } function prepareRangeContainsErrorFunction(errors, originalRange) { if (!errors.length) { return rangeHasNoErrors; } var sorted = errors .filter(function (d) { return ts.rangeOverlapsWithStartEnd(originalRange, d.start, d.start + d.length); }) .sort(function (e1, e2) { return e1.start - e2.start; }); if (!sorted.length) { return rangeHasNoErrors; } var index = 0; return function (r) { while (true) { if (index >= sorted.length) { return false; } var error = sorted[index]; if (r.end <= error.start) { return false; } if (ts.startEndOverlapsWithStartEnd(r.pos, r.end, error.start, error.start + error.length)) { return true; } index++; } }; function rangeHasNoErrors() { return false; } } function getScanStartPosition(enclosingNode, originalRange, sourceFile) { var start = enclosingNode.getStart(sourceFile); if (start === originalRange.pos && enclosingNode.end === originalRange.end) { return start; } var precedingToken = ts.findPrecedingToken(originalRange.pos, sourceFile); if (!precedingToken) { return enclosingNode.pos; } if (precedingToken.end >= originalRange.pos) { return enclosingNode.pos; } return precedingToken.end; } function getOwnOrInheritedDelta(n, options, sourceFile) { var previousLine = -1; var child; while (n) { var line = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)).line; if (previousLine !== -1 && line !== previousLine) { break; } if (formatting.SmartIndenter.shouldIndentChildNode(options, n, child, sourceFile)) { return options.indentSize; } previousLine = line; child = n; n = n.parent; } return 0; } function formatNodeGivenIndentation(node, sourceFileLike, languageVariant, initialIndentation, delta, formatContext) { var range = { pos: 0, end: sourceFileLike.text.length }; return formatting.getFormattingScanner(sourceFileLike.text, languageVariant, range.pos, range.end, function (scanner) { return formatSpanWorker(range, node, initialIndentation, delta, scanner, formatContext, 1, function (_) { return false; }, sourceFileLike); }); } formatting.formatNodeGivenIndentation = formatNodeGivenIndentation; function formatNodeLines(node, sourceFile, formatContext, requestKind) { if (!node) { return []; } var span = { pos: ts.getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile), end: node.end }; return formatSpan(span, sourceFile, formatContext, requestKind); } function formatSpan(originalRange, sourceFile, formatContext, requestKind) { var enclosingNode = findEnclosingNode(originalRange, sourceFile); return formatting.getFormattingScanner(sourceFile.text, sourceFile.languageVariant, getScanStartPosition(enclosingNode, originalRange, sourceFile), originalRange.end, function (scanner) { return formatSpanWorker(originalRange, enclosingNode, formatting.SmartIndenter.getIndentationForNode(enclosingNode, originalRange, sourceFile, formatContext.options), getOwnOrInheritedDelta(enclosingNode, formatContext.options, sourceFile), scanner, formatContext, requestKind, prepareRangeContainsErrorFunction(sourceFile.parseDiagnostics, originalRange), sourceFile); }); } function formatSpanWorker(originalRange, enclosingNode, initialIndentation, delta, formattingScanner, _a, requestKind, rangeContainsError, sourceFile) { var options = _a.options, getRule = _a.getRule; var formattingContext = new formatting.FormattingContext(sourceFile, requestKind, options); var previousRange; var previousParent; var previousRangeStartLine; var lastIndentedLine; var indentationOnLastIndentedLine; var edits = []; formattingScanner.advance(); if (formattingScanner.isOnToken()) { var startLine = sourceFile.getLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line; var undecoratedStartLine = startLine; if (enclosingNode.decorators) { undecoratedStartLine = sourceFile.getLineAndCharacterOfPosition(ts.getNonDecoratorTokenPosOfNode(enclosingNode, sourceFile)).line; } processNode(enclosingNode, enclosingNode, startLine, undecoratedStartLine, initialIndentation, delta); } if (!formattingScanner.isOnToken()) { var leadingTrivia = formattingScanner.getCurrentLeadingTrivia(); if (leadingTrivia) { processTrivia(leadingTrivia, enclosingNode, enclosingNode, undefined); trimTrailingWhitespacesForRemainingRange(); } } return edits; function tryComputeIndentationForListItem(startPos, endPos, parentStartLine, range, inheritedIndentation) { if (ts.rangeOverlapsWithStartEnd(range, startPos, endPos) || ts.rangeContainsStartEnd(range, startPos, endPos)) { if (inheritedIndentation !== -1) { return inheritedIndentation; } } else { var startLine = sourceFile.getLineAndCharacterOfPosition(startPos).line; var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { var baseIndentSize = formatting.SmartIndenter.getBaseIndentation(options); return baseIndentSize > column ? baseIndentSize : column; } } return -1; } function computeIndentation(node, startLine, inheritedIndentation, parent, parentDynamicIndentation, effectiveParentStartLine) { var delta = formatting.SmartIndenter.shouldIndentChildNode(options, node) ? options.indentSize : 0; if (effectiveParentStartLine === startLine) { return { indentation: startLine === lastIndentedLine ? indentationOnLastIndentedLine : parentDynamicIndentation.getIndentation(), delta: Math.min(options.indentSize, parentDynamicIndentation.getDelta(node) + delta) }; } else if (inheritedIndentation === -1) { if (node.kind === 19 && startLine === lastIndentedLine) { return { indentation: indentationOnLastIndentedLine, delta: parentDynamicIndentation.getDelta(node) }; } else if (formatting.SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(parent, node, startLine, sourceFile)) { return { indentation: parentDynamicIndentation.getIndentation(), delta: delta }; } else { return { indentation: parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta(node), delta: delta }; } } else { return { indentation: inheritedIndentation, delta: delta }; } } function getFirstNonDecoratorTokenOfNode(node) { if (node.modifiers && node.modifiers.length) { return node.modifiers[0].kind; } switch (node.kind) { case 235: return 75; case 236: return 109; case 234: return 89; case 238: return 238; case 156: return 125; case 157: return 136; case 154: if (node.asteriskToken) { return 39; } case 152: case 149: return ts.getNameOfDeclaration(node).kind; } } function getDynamicIndentation(node, nodeStartLine, indentation, delta) { return { getIndentationForComment: function (kind, tokenIndentation, container) { switch (kind) { case 18: case 22: case 20: return indentation + getDelta(container); } return tokenIndentation !== -1 ? tokenIndentation : indentation; }, getIndentationForToken: function (line, kind, container) { return shouldAddDelta(line, kind, container) ? indentation + getDelta(container) : indentation; }, getIndentation: function () { return indentation; }, getDelta: getDelta, recomputeIndentation: function (lineAdded) { if (node.parent && formatting.SmartIndenter.shouldIndentChildNode(options, node.parent, node, sourceFile)) { indentation += lineAdded ? options.indentSize : -options.indentSize; delta = formatting.SmartIndenter.shouldIndentChildNode(options, node) ? options.indentSize : 0; } } }; function shouldAddDelta(line, kind, container) { switch (kind) { case 17: case 18: case 19: case 20: case 82: case 106: case 57: return false; case 41: case 29: switch (container.kind) { case 257: case 258: case 256: return false; } break; case 21: case 22: if (container.kind !== 177) { return false; } break; } return nodeStartLine !== line && !(node.decorators && kind === getFirstNonDecoratorTokenOfNode(node)); } function getDelta(child) { return formatting.SmartIndenter.nodeWillIndentChild(options, node, child, sourceFile, true) ? delta : 0; } } function processNode(node, contextNode, nodeStartLine, undecoratedNodeStartLine, indentation, delta) { if (!ts.rangeOverlapsWithStartEnd(originalRange, node.getStart(sourceFile), node.getEnd())) { return; } var nodeDynamicIndentation = getDynamicIndentation(node, nodeStartLine, indentation, delta); var childContextNode = contextNode; ts.forEachChild(node, function (child) { processChildNode(child, -1, node, nodeDynamicIndentation, nodeStartLine, undecoratedNodeStartLine, false); }, function (nodes) { processChildNodes(nodes, node, nodeStartLine, nodeDynamicIndentation); }); while (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(node); if (tokenInfo.token.end > node.end) { break; } consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation, node); } function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { var childStartPos = child.getStart(sourceFile); var childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; var undecoratedChildStartLine = childStartLine; if (child.decorators) { undecoratedChildStartLine = sourceFile.getLineAndCharacterOfPosition(ts.getNonDecoratorTokenPosOfNode(child, sourceFile)).line; } var childIndentationAmount = -1; if (isListItem && ts.rangeContainsRange(originalRange, parent)) { childIndentationAmount = tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation); if (childIndentationAmount !== -1) { inheritedIndentation = childIndentationAmount; } } if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { if (child.end < originalRange.pos) { formattingScanner.skipToEndOf(child); } return inheritedIndentation; } if (child.getFullWidth() === 0) { return inheritedIndentation; } while (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(node); if (tokenInfo.token.end > childStartPos) { break; } consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, node); } if (!formattingScanner.isOnToken()) { return inheritedIndentation; } if (ts.isToken(child) && child.kind !== 10) { var tokenInfo = formattingScanner.readTokenInfo(child); ts.Debug.assert(tokenInfo.token.end === child.end, "Token end is child end"); consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); return inheritedIndentation; } var effectiveParentStartLine = child.kind === 150 ? childStartLine : undecoratedParentStartLine; var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); if (child.kind === 10) { var range = { pos: child.getStart(), end: child.getEnd() }; indentMultilineCommentOrJsxText(range, childIndentation.indentation, true, false); } childContextNode = node; if (isFirstListItem && parent.kind === 183 && inheritedIndentation === -1) { inheritedIndentation = childIndentation.indentation; } return inheritedIndentation; } function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) { ts.Debug.assert(ts.isNodeArray(nodes)); var listStartToken = getOpenTokenForList(parent, nodes); var listEndToken = getCloseTokenForOpenToken(listStartToken); var listDynamicIndentation = parentDynamicIndentation; var startLine = parentStartLine; if (listStartToken !== 0) { while (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); if (tokenInfo.token.end > nodes.pos) { break; } else if (tokenInfo.token.kind === listStartToken) { startLine = sourceFile.getLineAndCharacterOfPosition(tokenInfo.token.pos).line; var indentation_2 = computeIndentation(tokenInfo.token, startLine, -1, parent, parentDynamicIndentation, parentStartLine); listDynamicIndentation = getDynamicIndentation(parent, parentStartLine, indentation_2.indentation, indentation_2.delta); consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation, parent); } else { consumeTokenAndAdvanceScanner(tokenInfo, parent, parentDynamicIndentation, parent); } } } var inheritedIndentation = -1; for (var i = 0; i < nodes.length; i++) { var child = nodes[i]; inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, true, i === 0); } if (listEndToken !== 0) { if (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) { consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation, parent); } } } } function consumeTokenAndAdvanceScanner(currentTokenInfo, parent, dynamicIndentation, container) { ts.Debug.assert(ts.rangeContainsRange(parent, currentTokenInfo.token)); var lastTriviaWasNewLine = formattingScanner.lastTrailingTriviaWasNewLine(); var indentToken = false; if (currentTokenInfo.leadingTrivia) { processTrivia(currentTokenInfo.leadingTrivia, parent, childContextNode, dynamicIndentation); } var lineAction = 0; var isTokenInRange = ts.rangeContainsRange(originalRange, currentTokenInfo.token); var tokenStart = sourceFile.getLineAndCharacterOfPosition(currentTokenInfo.token.pos); if (isTokenInRange) { var rangeHasError = rangeContainsError(currentTokenInfo.token); var savePreviousRange = previousRange; lineAction = processRange(currentTokenInfo.token, tokenStart, parent, childContextNode, dynamicIndentation); if (!rangeHasError) { if (lineAction === 0) { var prevEndLine = savePreviousRange && sourceFile.getLineAndCharacterOfPosition(savePreviousRange.end).line; indentToken = lastTriviaWasNewLine && tokenStart.line !== prevEndLine; } else { indentToken = lineAction === 1; } } } if (currentTokenInfo.trailingTrivia) { processTrivia(currentTokenInfo.trailingTrivia, parent, childContextNode, dynamicIndentation); } if (indentToken) { var tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ? dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : -1; var indentNextTokenOrTrivia = true; if (currentTokenInfo.leadingTrivia) { var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); for (var _i = 0, _a = currentTokenInfo.leadingTrivia; _i < _a.length; _i++) { var triviaItem = _a[_i]; var triviaInRange = ts.rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case 3: if (triviaInRange) { indentMultilineCommentOrJsxText(triviaItem, commentIndentation, !indentNextTokenOrTrivia); } indentNextTokenOrTrivia = false; break; case 2: if (indentNextTokenOrTrivia && triviaInRange) { insertIndentation(triviaItem.pos, commentIndentation, false); } indentNextTokenOrTrivia = false; break; case 4: indentNextTokenOrTrivia = true; break; } } } if (tokenIndentation !== -1 && indentNextTokenOrTrivia) { insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAction === 1); lastIndentedLine = tokenStart.line; indentationOnLastIndentedLine = tokenIndentation; } } formattingScanner.advance(); childContextNode = parent; } } function processTrivia(trivia, parent, contextNode, dynamicIndentation) { for (var _i = 0, trivia_1 = trivia; _i < trivia_1.length; _i++) { var triviaItem = trivia_1[_i]; if (ts.isComment(triviaItem.kind) && ts.rangeContainsRange(originalRange, triviaItem)) { var triviaItemStart = sourceFile.getLineAndCharacterOfPosition(triviaItem.pos); processRange(triviaItem, triviaItemStart, parent, contextNode, dynamicIndentation); } } } function processRange(range, rangeStart, parent, contextNode, dynamicIndentation) { var rangeHasError = rangeContainsError(range); var lineAction = 0; if (!rangeHasError) { if (!previousRange) { var originalStart = sourceFile.getLineAndCharacterOfPosition(originalRange.pos); trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line); } else { lineAction = processPair(range, rangeStart.line, parent, previousRange, previousRangeStartLine, previousParent, contextNode, dynamicIndentation); } } previousRange = range; previousParent = parent; previousRangeStartLine = rangeStart.line; return lineAction; } function processPair(currentItem, currentStartLine, currentParent, previousItem, previousStartLine, previousParent, contextNode, dynamicIndentation) { formattingContext.updateContext(previousItem, previousParent, currentItem, currentParent, contextNode); var rule = getRule(formattingContext); var trimTrailingWhitespaces; var lineAction = 0; if (rule) { lineAction = applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine); switch (lineAction) { case 2: if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(false); } break; case 1: if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(true); } break; default: ts.Debug.assert(lineAction === 0); } trimTrailingWhitespaces = !(rule.action & 8) && rule.flags !== 1; } else { trimTrailingWhitespaces = true; } if (currentStartLine !== previousStartLine && trimTrailingWhitespaces) { trimTrailingWhitespacesForLines(previousStartLine, currentStartLine, previousItem); } return lineAction; } function insertIndentation(pos, indentation, lineAdded) { var indentationString = getIndentationString(indentation, options); if (lineAdded) { recordReplace(pos, 0, indentationString); } else { var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); if (indentation !== characterToColumn(startLinePosition, tokenStart.character) || indentationIsDifferent(indentationString, startLinePosition)) { recordReplace(startLinePosition, tokenStart.character, indentationString); } } } function characterToColumn(startLinePosition, characterInLine) { var column = 0; for (var i = 0; i < characterInLine; i++) { if (sourceFile.text.charCodeAt(startLinePosition + i) === 9) { column += options.tabSize - column % options.tabSize; } else { column++; } } return column; } function indentationIsDifferent(indentationString, startLinePosition) { return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); } function indentMultilineCommentOrJsxText(commentRange, indentation, firstLineIsIndented, indentFinalLine) { if (indentFinalLine === void 0) { indentFinalLine = true; } var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; var endLine = sourceFile.getLineAndCharacterOfPosition(commentRange.end).line; var parts; if (startLine === endLine) { if (!firstLineIsIndented) { insertIndentation(commentRange.pos, indentation, false); } return; } else { parts = []; var startPos = commentRange.pos; for (var line = startLine; line < endLine; line++) { var endOfLine = ts.getEndLinePosition(line, sourceFile); parts.push({ pos: startPos, end: endOfLine }); startPos = ts.getStartPositionOfLine(line + 1, sourceFile); } if (indentFinalLine) { parts.push({ pos: startPos, end: commentRange.end }); } } var startLinePos = ts.getStartPositionOfLine(startLine, sourceFile); var nonWhitespaceColumnInFirstPart = formatting.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(startLinePos, parts[0].pos, sourceFile, options); if (indentation === nonWhitespaceColumnInFirstPart.column) { return; } var startIndex = 0; if (firstLineIsIndented) { startIndex = 1; startLine++; } var delta = indentation - nonWhitespaceColumnInFirstPart.column; for (var i = startIndex; i < parts.length; i++, startLine++) { var startLinePos_1 = ts.getStartPositionOfLine(startLine, sourceFile); var nonWhitespaceCharacterAndColumn = i === 0 ? nonWhitespaceColumnInFirstPart : formatting.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(parts[i].pos, parts[i].end, sourceFile, options); var newIndentation = nonWhitespaceCharacterAndColumn.column + delta; if (newIndentation > 0) { var indentationString = getIndentationString(newIndentation, options); recordReplace(startLinePos_1, nonWhitespaceCharacterAndColumn.character, indentationString); } else { recordDelete(startLinePos_1, nonWhitespaceCharacterAndColumn.character); } } } function trimTrailingWhitespacesForLines(line1, line2, range) { for (var line = line1; line < line2; line++) { var lineStartPosition = ts.getStartPositionOfLine(line, sourceFile); var lineEndPosition = ts.getEndLinePosition(line, sourceFile); if (range && (ts.isComment(range.kind) || ts.isStringOrRegularExpressionOrTemplateLiteral(range.kind)) && range.pos <= lineEndPosition && range.end > lineEndPosition) { continue; } var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } } function getTrailingWhitespaceStartPosition(start, end) { var pos = end; while (pos >= start && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { return pos + 1; } return -1; } function trimTrailingWhitespacesForRemainingRange() { var startPosition = previousRange ? previousRange.end : originalRange.pos; var startLine = sourceFile.getLineAndCharacterOfPosition(startPosition).line; var endLine = sourceFile.getLineAndCharacterOfPosition(originalRange.end).line; trimTrailingWhitespacesForLines(startLine, endLine + 1, previousRange); } function recordDelete(start, len) { if (len) { edits.push(ts.createTextChangeFromStartLength(start, len, "")); } } function recordReplace(start, len, newText) { if (len || newText) { edits.push(ts.createTextChangeFromStartLength(start, len, newText)); } } function applyRuleEdits(rule, previousRange, previousStartLine, currentRange, currentStartLine) { var onLaterLine = currentStartLine !== previousStartLine; switch (rule.action) { case 1: return 0; case 8: if (previousRange.end !== currentRange.pos) { recordDelete(previousRange.end, currentRange.pos - previousRange.end); return onLaterLine ? 2 : 0; } break; case 4: if (rule.flags !== 1 && previousStartLine !== currentStartLine) { return 0; } var lineDelta = currentStartLine - previousStartLine; if (lineDelta !== 1) { recordReplace(previousRange.end, currentRange.pos - previousRange.end, options.newLineCharacter); return onLaterLine ? 0 : 1; } break; case 2: if (rule.flags !== 1 && previousStartLine !== currentStartLine) { return 0; } var posDelta = currentRange.pos - previousRange.end; if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange.end) !== 32) { recordReplace(previousRange.end, currentRange.pos - previousRange.end, " "); return onLaterLine ? 2 : 0; } } return 0; } } var LineAction; (function (LineAction) { LineAction[LineAction["None"] = 0] = "None"; LineAction[LineAction["LineAdded"] = 1] = "LineAdded"; LineAction[LineAction["LineRemoved"] = 2] = "LineRemoved"; })(LineAction || (LineAction = {})); function getRangeOfEnclosingComment(sourceFile, position, onlyMultiLine, precedingToken, tokenAtPosition, predicate) { if (tokenAtPosition === void 0) { tokenAtPosition = ts.getTokenAtPosition(sourceFile, position, false); } var tokenStart = tokenAtPosition.getStart(sourceFile); if (tokenStart <= position && position < tokenAtPosition.getEnd()) { return undefined; } if (precedingToken === undefined) { precedingToken = ts.findPrecedingToken(position, sourceFile); } var trailingRangesOfPreviousToken = precedingToken && ts.getTrailingCommentRanges(sourceFile.text, precedingToken.end); var leadingCommentRangesOfNextToken = ts.getLeadingCommentRangesOfNode(tokenAtPosition, sourceFile); var commentRanges = trailingRangesOfPreviousToken && leadingCommentRangesOfNextToken ? trailingRangesOfPreviousToken.concat(leadingCommentRangesOfNextToken) : trailingRangesOfPreviousToken || leadingCommentRangesOfNextToken; if (commentRanges) { for (var _i = 0, commentRanges_1 = commentRanges; _i < commentRanges_1.length; _i++) { var range = commentRanges_1[_i]; if ((range.pos < position && position < range.end || position === range.end && (range.kind === 2 || position === sourceFile.getFullWidth()))) { return (range.kind === 3 || !onlyMultiLine) && (!predicate || predicate(range)) ? range : undefined; } } } return undefined; } formatting.getRangeOfEnclosingComment = getRangeOfEnclosingComment; function getOpenTokenForList(node, list) { switch (node.kind) { case 155: case 234: case 192: case 154: case 153: case 193: if (node.typeParameters === list) { return 27; } else if (node.parameters === list) { return 19; } break; case 187: case 188: if (node.typeArguments === list) { return 27; } else if (node.arguments === list) { return 19; } break; case 162: if (node.typeArguments === list) { return 27; } } return 0; } function getCloseTokenForOpenToken(kind) { switch (kind) { case 19: return 20; case 27: return 29; } return 0; } var internedSizes; var internedTabsIndentation; var internedSpacesIndentation; function getIndentationString(indentation, options) { var resetInternedStrings = !internedSizes || (internedSizes.tabSize !== options.tabSize || internedSizes.indentSize !== options.indentSize); if (resetInternedStrings) { internedSizes = { tabSize: options.tabSize, indentSize: options.indentSize }; internedTabsIndentation = internedSpacesIndentation = undefined; } if (!options.convertTabsToSpaces) { var tabs = Math.floor(indentation / options.tabSize); var spaces = indentation - tabs * options.tabSize; var tabString = void 0; if (!internedTabsIndentation) { internedTabsIndentation = []; } if (internedTabsIndentation[tabs] === undefined) { internedTabsIndentation[tabs] = tabString = ts.repeatString("\t", tabs); } else { tabString = internedTabsIndentation[tabs]; } return spaces ? tabString + ts.repeatString(" ", spaces) : tabString; } else { var spacesString = void 0; var quotient = Math.floor(indentation / options.indentSize); var remainder = indentation % options.indentSize; if (!internedSpacesIndentation) { internedSpacesIndentation = []; } if (internedSpacesIndentation[quotient] === undefined) { spacesString = ts.repeatString(" ", options.indentSize * quotient); internedSpacesIndentation[quotient] = spacesString; } else { spacesString = internedSpacesIndentation[quotient]; } return remainder ? spacesString + ts.repeatString(" ", remainder) : spacesString; } } formatting.getIndentationString = getIndentationString; })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var formatting; (function (formatting) { var SmartIndenter; (function (SmartIndenter) { var Value; (function (Value) { Value[Value["Unknown"] = -1] = "Unknown"; })(Value || (Value = {})); function getIndentation(position, sourceFile, options, assumeNewLineBeforeCloseBrace) { if (assumeNewLineBeforeCloseBrace === void 0) { assumeNewLineBeforeCloseBrace = false; } if (position > sourceFile.text.length) { return getBaseIndentation(options); } if (options.indentStyle === ts.IndentStyle.None) { return 0; } var precedingToken = ts.findPrecedingToken(position, sourceFile); var enclosingCommentRange = formatting.getRangeOfEnclosingComment(sourceFile, position, true, precedingToken || null); if (enclosingCommentRange) { return getCommentIndent(sourceFile, position, options, enclosingCommentRange); } if (!precedingToken) { return getBaseIndentation(options); } var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && position < precedingToken.end) { return 0; } var lineAtPosition = sourceFile.getLineAndCharacterOfPosition(position).line; if (options.indentStyle === ts.IndentStyle.Block) { return getBlockIndent(sourceFile, position, options); } if (precedingToken.kind === 26 && precedingToken.parent.kind !== 200) { var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation; } } return getSmartIndent(sourceFile, position, precedingToken, lineAtPosition, assumeNewLineBeforeCloseBrace, options); } SmartIndenter.getIndentation = getIndentation; function getCommentIndent(sourceFile, position, options, enclosingCommentRange) { var previousLine = ts.getLineAndCharacterOfPosition(sourceFile, position).line - 1; var commentStartLine = ts.getLineAndCharacterOfPosition(sourceFile, enclosingCommentRange.pos).line; ts.Debug.assert(commentStartLine >= 0); if (previousLine <= commentStartLine) { return findFirstNonWhitespaceColumn(ts.getStartPositionOfLine(commentStartLine, sourceFile), position, sourceFile, options); } var startPostionOfLine = ts.getStartPositionOfLine(previousLine, sourceFile); var _a = findFirstNonWhitespaceCharacterAndColumn(startPostionOfLine, position, sourceFile, options), column = _a.column, character = _a.character; if (column === 0) { return column; } var firstNonWhitespaceCharacterCode = sourceFile.text.charCodeAt(startPostionOfLine + character); return firstNonWhitespaceCharacterCode === 42 ? column - 1 : column; } function getBlockIndent(sourceFile, position, options) { var current = position; while (current > 0) { var char = sourceFile.text.charCodeAt(current); if (!ts.isWhiteSpaceLike(char)) { break; } current--; } var lineStart = ts.getLineStartPositionForPosition(current, sourceFile); return findFirstNonWhitespaceColumn(lineStart, current, sourceFile, options); } function getSmartIndent(sourceFile, position, precedingToken, lineAtPosition, assumeNewLineBeforeCloseBrace, options) { var previous; var current = precedingToken; while (current) { if (ts.positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode(options, current, previous, sourceFile, true)) { var currentStart = getStartLineAndCharacterForNode(current, sourceFile); var nextTokenKind = nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile); var indentationDelta = nextTokenKind !== 0 ? assumeNewLineBeforeCloseBrace && nextTokenKind === 2 ? options.indentSize : 0 : lineAtPosition !== currentStart.line ? options.indentSize : 0; return getIndentationForNodeWorker(current, currentStart, undefined, indentationDelta, sourceFile, true, options); } var actualIndentation = getActualIndentationForListItem(current, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation; } actualIndentation = getLineIndentationWhenExpressionIsInMultiLine(current, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation + options.indentSize; } previous = current; current = current.parent; } return getBaseIndentation(options); } function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, 0, sourceFile, false, options); } SmartIndenter.getIndentationForNode = getIndentationForNode; function getBaseIndentation(options) { return options.baseIndentSize || 0; } SmartIndenter.getBaseIndentation = getBaseIndentation; function getIndentationForNodeWorker(current, currentStart, ignoreActualIndentationRange, indentationDelta, sourceFile, isNextChild, options) { var parent = current.parent; while (parent) { var useActualIndentation = true; if (ignoreActualIndentationRange) { var start = current.getStart(sourceFile); useActualIndentation = start < ignoreActualIndentationRange.pos || start > ignoreActualIndentationRange.end; } if (useActualIndentation) { var actualIndentation = getActualIndentationForListItem(current, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation + indentationDelta; } } var containingListOrParentStart = getContainingListOrParentStart(parent, current, sourceFile); var parentAndChildShareLine = containingListOrParentStart.line === currentStart.line || childStartsOnTheSameLineWithElseInIfStatement(parent, current, currentStart.line, sourceFile); if (useActualIndentation) { var actualIndentation = getActualIndentationForNode(current, parent, currentStart, parentAndChildShareLine, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation + indentationDelta; } actualIndentation = getLineIndentationWhenExpressionIsInMultiLine(current, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation + indentationDelta; } } if (shouldIndentChildNode(options, parent, current, sourceFile, isNextChild) && !parentAndChildShareLine) { indentationDelta += options.indentSize; } var useTrueStart = isArgumentAndStartLineOverlapsExpressionBeingCalled(parent, current, currentStart.line, sourceFile); current = parent; parent = current.parent; currentStart = useTrueStart ? sourceFile.getLineAndCharacterOfPosition(current.getStart(sourceFile)) : containingListOrParentStart; } return indentationDelta + getBaseIndentation(options); } function getContainingListOrParentStart(parent, child, sourceFile) { var containingList = getContainingList(child, sourceFile); var startPos = containingList ? containingList.pos : parent.getStart(sourceFile); return sourceFile.getLineAndCharacterOfPosition(startPos); } function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) { var commaItemInfo = ts.findListItemInfo(commaToken); if (commaItemInfo && commaItemInfo.listItemIndex > 0) { return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options); } else { return -1; } } function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) { var useActualIndentation = (ts.isDeclaration(current) || ts.isStatementButNotDeclaration(current)) && (parent.kind === 274 || !parentAndChildShareLine); if (!useActualIndentation) { return -1; } return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options); } var NextTokenKind; (function (NextTokenKind) { NextTokenKind[NextTokenKind["Unknown"] = 0] = "Unknown"; NextTokenKind[NextTokenKind["OpenBrace"] = 1] = "OpenBrace"; NextTokenKind[NextTokenKind["CloseBrace"] = 2] = "CloseBrace"; })(NextTokenKind || (NextTokenKind = {})); function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) { var nextToken = ts.findNextToken(precedingToken, current, sourceFile); if (!nextToken) { return 0; } if (nextToken.kind === 17) { return 1; } else if (nextToken.kind === 18) { var nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line; return lineAtPosition === nextTokenStartLine ? 2 : 0; } return 0; } function getStartLineAndCharacterForNode(n, sourceFile) { return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); } function isArgumentAndStartLineOverlapsExpressionBeingCalled(parent, child, childStartLine, sourceFile) { if (!(ts.isCallExpression(parent) && ts.contains(parent.arguments, child))) { return false; } var expressionOfCallExpressionEnd = parent.expression.getEnd(); var expressionOfCallExpressionEndLine = ts.getLineAndCharacterOfPosition(sourceFile, expressionOfCallExpressionEnd).line; return expressionOfCallExpressionEndLine === childStartLine; } SmartIndenter.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled; function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { if (parent.kind === 217 && parent.elseStatement === child) { var elseKeyword = ts.findChildOfKind(parent, 82, sourceFile); ts.Debug.assert(elseKeyword !== undefined); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; return elseKeywordStartLine === childStartLine; } return false; } SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement = childStartsOnTheSameLineWithElseInIfStatement; function getListIfStartEndIsInListRange(list, start, end) { return list && ts.rangeContainsStartEnd(list, start, end) ? list : undefined; } function getContainingList(node, sourceFile) { if (node.parent) { var end = node.end; switch (node.parent.kind) { case 162: return getListIfStartEndIsInListRange(node.parent.typeArguments, node.getStart(sourceFile), end); case 184: return node.parent.properties; case 183: return node.parent.elements; case 234: case 192: case 193: case 154: case 153: case 158: case 155: case 164: case 159: { var start = node.getStart(sourceFile); return getListIfStartEndIsInListRange(node.parent.typeParameters, start, end) || getListIfStartEndIsInListRange(node.parent.parameters, start, end); } case 235: return getListIfStartEndIsInListRange(node.parent.typeParameters, node.getStart(sourceFile), end); case 188: case 187: { var start = node.getStart(sourceFile); return getListIfStartEndIsInListRange(node.parent.typeArguments, start, end) || getListIfStartEndIsInListRange(node.parent.arguments, start, end); } case 233: return getListIfStartEndIsInListRange(node.parent.declarations, node.getStart(sourceFile), end); case 247: case 251: return getListIfStartEndIsInListRange(node.parent.elements, node.getStart(sourceFile), end); case 180: case 181: return getListIfStartEndIsInListRange(node.parent.elements, node.getStart(sourceFile), end); } } return undefined; } SmartIndenter.getContainingList = getContainingList; function getActualIndentationForListItem(node, sourceFile, options) { var containingList = getContainingList(node, sourceFile); if (containingList) { var index = containingList.indexOf(node); if (index !== -1) { return deriveActualIndentationFromList(containingList, index, sourceFile, options); } } return -1; } function getLineIndentationWhenExpressionIsInMultiLine(node, sourceFile, options) { if (node.kind === 20) { return -1; } if (node.parent && ts.isCallOrNewExpression(node.parent) && node.parent.expression !== node) { var fullCallOrNewExpression = node.parent.expression; var startingExpression = getStartingExpression(fullCallOrNewExpression); if (fullCallOrNewExpression === startingExpression) { return -1; } var fullCallOrNewExpressionEnd = sourceFile.getLineAndCharacterOfPosition(fullCallOrNewExpression.end); var startingExpressionEnd = sourceFile.getLineAndCharacterOfPosition(startingExpression.end); if (fullCallOrNewExpressionEnd.line === startingExpressionEnd.line) { return -1; } return findColumnForFirstNonWhitespaceCharacterInLine(fullCallOrNewExpressionEnd, sourceFile, options); } return -1; function getStartingExpression(node) { while (true) { switch (node.kind) { case 187: case 188: case 185: case 186: node = node.expression; break; default: return node; } } } } function deriveActualIndentationFromList(list, index, sourceFile, options) { ts.Debug.assert(index >= 0 && index < list.length); var node = list[index]; var lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile); for (var i = index - 1; i >= 0; i--) { if (list[i].kind === 26) { continue; } var prevEndLine = sourceFile.getLineAndCharacterOfPosition(list[i].end).line; if (prevEndLine !== lineAndCharacter.line) { return findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options); } lineAndCharacter = getStartLineAndCharacterForNode(list[i], sourceFile); } return -1; } function findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options) { var lineStart = sourceFile.getPositionOfLineAndCharacter(lineAndCharacter.line, 0); return findFirstNonWhitespaceColumn(lineStart, lineStart + lineAndCharacter.character, sourceFile, options); } function findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options) { var character = 0; var column = 0; for (var pos = startPos; pos < endPos; pos++) { var ch = sourceFile.text.charCodeAt(pos); if (!ts.isWhiteSpaceSingleLine(ch)) { break; } if (ch === 9) { column += options.tabSize + (column % options.tabSize); } else { column++; } character++; } return { column: column, character: character }; } SmartIndenter.findFirstNonWhitespaceCharacterAndColumn = findFirstNonWhitespaceCharacterAndColumn; function findFirstNonWhitespaceColumn(startPos, endPos, sourceFile, options) { return findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options).column; } SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; function nodeWillIndentChild(settings, parent, child, sourceFile, indentByDefault) { var childKind = child ? child.kind : 0; switch (parent.kind) { case 216: case 235: case 205: case 236: case 238: case 237: case 183: case 213: case 240: case 184: case 166: case 177: case 168: case 241: case 267: case 266: case 191: case 185: case 187: case 188: case 214: case 249: case 225: case 201: case 181: case 180: case 257: case 260: case 256: case 265: case 153: case 158: case 159: case 149: case 163: case 164: case 173: case 189: case 197: case 251: case 247: case 252: case 248: case 152: return true; case 232: case 270: if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 184) { return rangeIsOnOneLine(sourceFile, child); } return true; case 218: case 219: case 221: case 222: case 220: case 217: case 234: case 192: case 154: case 193: case 155: case 156: case 157: return childKind !== 213; case 250: return childKind !== 251; case 244: return childKind !== 245 || (!!child.namedBindings && child.namedBindings.kind !== 247); case 255: return childKind !== 258; case 259: return childKind !== 261; case 170: case 169: if (childKind === 166) { return false; } } return indentByDefault; } SmartIndenter.nodeWillIndentChild = nodeWillIndentChild; function isControlFlowEndingStatement(kind, parent) { switch (kind) { case 225: case 229: { if (parent.kind !== 213) { return true; } var grandParent = parent.parent; return !(grandParent && grandParent.kind === 192 || grandParent.kind === 234); } case 223: case 224: return true; default: return false; } } function shouldIndentChildNode(settings, parent, child, sourceFile, isNextChild) { if (isNextChild === void 0) { isNextChild = false; } return nodeWillIndentChild(settings, parent, child, sourceFile, false) && !(isNextChild && child && isControlFlowEndingStatement(child.kind, parent)); } SmartIndenter.shouldIndentChildNode = shouldIndentChildNode; function rangeIsOnOneLine(sourceFile, range) { var rangeStart = ts.skipTrivia(sourceFile.text, range.pos); var startLine = sourceFile.getLineAndCharacterOfPosition(rangeStart).line; var endLine = sourceFile.getLineAndCharacterOfPosition(range.end).line; return startLine === endLine; } })(SmartIndenter = formatting.SmartIndenter || (formatting.SmartIndenter = {})); })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); var ts; (function (ts) { var textChanges; (function (textChanges_3) { function getPos(n) { var result = n.__pos; ts.Debug.assert(typeof result === "number"); return result; } function setPos(n, pos) { ts.Debug.assert(typeof pos === "number"); n.__pos = pos; } function getEnd(n) { var result = n.__end; ts.Debug.assert(typeof result === "number"); return result; } function setEnd(n, end) { ts.Debug.assert(typeof end === "number"); n.__end = end; } var Position; (function (Position) { Position[Position["FullStart"] = 0] = "FullStart"; Position[Position["Start"] = 1] = "Start"; })(Position = textChanges_3.Position || (textChanges_3.Position = {})); function skipWhitespacesAndLineBreaks(text, start) { return ts.skipTrivia(text, start, false, true); } function hasCommentsBeforeLineBreak(text, start) { var i = start; while (i < text.length) { var ch = text.charCodeAt(i); if (ts.isWhiteSpaceSingleLine(ch)) { i++; continue; } return ch === 47; } return false; } textChanges_3.useNonAdjustedPositions = { useNonAdjustedStartPosition: true, useNonAdjustedEndPosition: true, }; var ChangeKind; (function (ChangeKind) { ChangeKind[ChangeKind["Remove"] = 0] = "Remove"; ChangeKind[ChangeKind["ReplaceWithSingleNode"] = 1] = "ReplaceWithSingleNode"; ChangeKind[ChangeKind["ReplaceWithMultipleNodes"] = 2] = "ReplaceWithMultipleNodes"; ChangeKind[ChangeKind["Text"] = 3] = "Text"; })(ChangeKind || (ChangeKind = {})); function getAdjustedRange(sourceFile, startNode, endNode, options) { return { pos: getAdjustedStartPosition(sourceFile, startNode, options, Position.Start), end: getAdjustedEndPosition(sourceFile, endNode, options) }; } function getAdjustedStartPosition(sourceFile, node, options, position) { if (options.useNonAdjustedStartPosition) { return node.getStart(sourceFile); } var fullStart = node.getFullStart(); var start = node.getStart(sourceFile); if (fullStart === start) { return start; } var fullStartLine = ts.getLineStartPositionForPosition(fullStart, sourceFile); var startLine = ts.getLineStartPositionForPosition(start, sourceFile); if (startLine === fullStartLine) { return position === Position.Start ? start : fullStart; } var nextLineStart = fullStart > 0 ? 1 : 0; var adjustedStartPosition = ts.getStartPositionOfLine(ts.getLineOfLocalPosition(sourceFile, fullStartLine) + nextLineStart, sourceFile); adjustedStartPosition = skipWhitespacesAndLineBreaks(sourceFile.text, adjustedStartPosition); return ts.getStartPositionOfLine(ts.getLineOfLocalPosition(sourceFile, adjustedStartPosition), sourceFile); } function getAdjustedEndPosition(sourceFile, node, options) { var end = node.end; if (options.useNonAdjustedEndPosition || ts.isExpression(node)) { return end; } var newEnd = ts.skipTrivia(sourceFile.text, end, true); return newEnd !== end && ts.isLineBreak(sourceFile.text.charCodeAt(newEnd - 1)) ? newEnd : end; } function isSeparator(node, candidate) { return !!candidate && !!node.parent && (candidate.kind === 26 || (candidate.kind === 25 && node.parent.kind === 184)); } function spaces(count) { var s = ""; for (var i = 0; i < count; i++) { s += " "; } return s; } var ChangeTracker = (function () { function ChangeTracker(newLineCharacter, formatContext) { this.newLineCharacter = newLineCharacter; this.formatContext = formatContext; this.changes = []; this.newFiles = []; this.deletedNodesInLists = new ts.NodeSet(); this.classesWithNodesInsertedAtStart = ts.createMap(); } ChangeTracker.fromContext = function (context) { return new ChangeTracker(ts.getNewLineOrDefaultFromHost(context.host, context.formatContext.options), context.formatContext); }; ChangeTracker.with = function (context, cb) { var tracker = ChangeTracker.fromContext(context); cb(tracker); return tracker.getChanges(); }; ChangeTracker.prototype.deleteRange = function (sourceFile, range) { this.changes.push({ kind: ChangeKind.Remove, sourceFile: sourceFile, range: range }); return this; }; ChangeTracker.prototype.deleteNode = function (sourceFile, node, options) { if (options === void 0) { options = {}; } var startPosition = getAdjustedStartPosition(sourceFile, node, options, Position.FullStart); var endPosition = getAdjustedEndPosition(sourceFile, node, options); this.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); return this; }; ChangeTracker.prototype.deleteNodeRange = function (sourceFile, startNode, endNode, options) { if (options === void 0) { options = {}; } var startPosition = getAdjustedStartPosition(sourceFile, startNode, options, Position.FullStart); var endPosition = getAdjustedEndPosition(sourceFile, endNode, options); this.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); return this; }; ChangeTracker.prototype.deleteNodeRangeExcludingEnd = function (sourceFile, startNode, afterEndNode, options) { if (options === void 0) { options = {}; } var startPosition = getAdjustedStartPosition(sourceFile, startNode, options, Position.FullStart); var endPosition = afterEndNode === undefined ? sourceFile.text.length : getAdjustedStartPosition(sourceFile, afterEndNode, options, Position.FullStart); this.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); }; ChangeTracker.prototype.deleteNodeInList = function (sourceFile, node) { var containingList = ts.formatting.SmartIndenter.getContainingList(node, sourceFile); if (!containingList) { ts.Debug.fail("node is not a list element"); return this; } var index = ts.indexOfNode(containingList, node); if (index < 0) { return this; } if (containingList.length === 1) { this.deleteNode(sourceFile, node); return this; } ts.Debug.assert(!this.deletedNodesInLists.has(node), "Deleting a node twice"); this.deletedNodesInLists.add(node); this.deleteRange(sourceFile, { pos: startPositionToDeleteNodeInList(sourceFile, node), end: index === containingList.length - 1 ? getAdjustedEndPosition(sourceFile, node, {}) : startPositionToDeleteNodeInList(sourceFile, containingList[index + 1]), }); return this; }; ChangeTracker.prototype.replaceRange = function (sourceFile, range, newNode, options) { if (options === void 0) { options = {}; } this.changes.push({ kind: ChangeKind.ReplaceWithSingleNode, sourceFile: sourceFile, range: range, options: options, node: newNode }); return this; }; ChangeTracker.prototype.replaceNode = function (sourceFile, oldNode, newNode, options) { if (options === void 0) { options = textChanges_3.useNonAdjustedPositions; } return this.replaceRange(sourceFile, getAdjustedRange(sourceFile, oldNode, oldNode, options), newNode, options); }; ChangeTracker.prototype.replaceNodeRange = function (sourceFile, startNode, endNode, newNode, options) { if (options === void 0) { options = textChanges_3.useNonAdjustedPositions; } this.replaceRange(sourceFile, getAdjustedRange(sourceFile, startNode, endNode, options), newNode, options); }; ChangeTracker.prototype.replaceRangeWithNodes = function (sourceFile, range, newNodes, options) { if (options === void 0) { options = {}; } this.changes.push({ kind: ChangeKind.ReplaceWithMultipleNodes, sourceFile: sourceFile, range: range, options: options, nodes: newNodes }); return this; }; ChangeTracker.prototype.replaceNodeWithNodes = function (sourceFile, oldNode, newNodes, options) { if (options === void 0) { options = textChanges_3.useNonAdjustedPositions; } return this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, oldNode, oldNode, options), newNodes, options); }; ChangeTracker.prototype.replaceNodeRangeWithNodes = function (sourceFile, startNode, endNode, newNodes, options) { if (options === void 0) { options = textChanges_3.useNonAdjustedPositions; } return this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, startNode, endNode, options), newNodes, options); }; ChangeTracker.prototype.nextCommaToken = function (sourceFile, node) { var next = ts.findNextToken(node, node.parent, sourceFile); return next && next.kind === 26 ? next : undefined; }; ChangeTracker.prototype.replacePropertyAssignment = function (sourceFile, oldNode, newNode) { var suffix = this.nextCommaToken(sourceFile, oldNode) ? "" : ("," + this.newLineCharacter); return this.replaceNode(sourceFile, oldNode, newNode, { suffix: suffix }); }; ChangeTracker.prototype.insertNodeAt = function (sourceFile, pos, newNode, options) { if (options === void 0) { options = {}; } this.replaceRange(sourceFile, ts.createTextRange(pos), newNode, options); }; ChangeTracker.prototype.insertNodesAt = function (sourceFile, pos, newNodes, options) { if (options === void 0) { options = {}; } this.changes.push({ kind: ChangeKind.ReplaceWithMultipleNodes, sourceFile: sourceFile, options: options, nodes: newNodes, range: { pos: pos, end: pos } }); }; ChangeTracker.prototype.insertNodeAtTopOfFile = function (sourceFile, newNode, blankLineBetween) { var pos = getInsertionPositionAtSourceFileTop(sourceFile); this.insertNodeAt(sourceFile, pos, newNode, { prefix: pos === 0 ? undefined : this.newLineCharacter, suffix: (ts.isLineBreak(sourceFile.text.charCodeAt(pos)) ? "" : this.newLineCharacter) + (blankLineBetween ? this.newLineCharacter : ""), }); }; ChangeTracker.prototype.insertNodeBefore = function (sourceFile, before, newNode, blankLineBetween) { if (blankLineBetween === void 0) { blankLineBetween = false; } this.insertNodeAt(sourceFile, getAdjustedStartPosition(sourceFile, before, {}, Position.Start), newNode, this.getOptionsForInsertNodeBefore(before, blankLineBetween)); }; ChangeTracker.prototype.insertModifierBefore = function (sourceFile, modifier, before) { var pos = before.getStart(sourceFile); this.replaceRange(sourceFile, { pos: pos, end: pos }, ts.createToken(modifier), { suffix: " " }); }; ChangeTracker.prototype.insertCommentBeforeLine = function (sourceFile, lineNumber, position, commentText) { var lineStartPosition = ts.getStartPositionOfLine(lineNumber, sourceFile); var startPosition = ts.getFirstNonSpaceCharacterPosition(sourceFile.text, lineStartPosition); var insertAtLineStart = isValidLocationToAddComment(sourceFile, startPosition); var token = ts.getTouchingToken(sourceFile, insertAtLineStart ? startPosition : position, false); var indent = sourceFile.text.slice(lineStartPosition, startPosition); var text = (insertAtLineStart ? "" : this.newLineCharacter) + "//" + commentText + this.newLineCharacter + indent; this.insertText(sourceFile, token.getStart(sourceFile), text); }; ChangeTracker.prototype.replaceRangeWithText = function (sourceFile, range, text) { this.changes.push({ kind: ChangeKind.Text, sourceFile: sourceFile, range: range, text: text }); }; ChangeTracker.prototype.insertText = function (sourceFile, pos, text) { this.replaceRangeWithText(sourceFile, ts.createTextRange(pos), text); }; ChangeTracker.prototype.tryInsertTypeAnnotation = function (sourceFile, node, type) { var endNode; if (ts.isFunctionLike(node)) { endNode = ts.findChildOfKind(node, 20, sourceFile); if (!endNode) { if (!ts.isArrowFunction(node)) return; endNode = ts.first(node.parameters); } } else { endNode = node.kind !== 232 && node.questionToken ? node.questionToken : node.name; } this.insertNodeAt(sourceFile, endNode.end, type, { prefix: ": " }); }; ChangeTracker.prototype.insertTypeParameters = function (sourceFile, node, typeParameters) { var start = (ts.findChildOfKind(node, 19, sourceFile) || ts.first(node.parameters)).getStart(sourceFile); this.insertNodesAt(sourceFile, start, typeParameters, { prefix: "<", suffix: ">" }); }; ChangeTracker.prototype.getOptionsForInsertNodeBefore = function (before, doubleNewlines) { if (ts.isStatement(before) || ts.isClassElement(before)) { return { suffix: doubleNewlines ? this.newLineCharacter + this.newLineCharacter : this.newLineCharacter }; } else if (ts.isVariableDeclaration(before)) { return { suffix: ", " }; } else if (ts.isParameter(before)) { return {}; } return ts.Debug.failBadSyntaxKind(before); }; ChangeTracker.prototype.insertNodeAtConstructorStart = function (sourceFile, ctr, newStatement) { var firstStatement = ts.firstOrUndefined(ctr.body.statements); if (!firstStatement || !ctr.body.multiLine) { this.replaceConstructorBody(sourceFile, ctr, [newStatement].concat(ctr.body.statements)); } else { this.insertNodeBefore(sourceFile, firstStatement, newStatement); } }; ChangeTracker.prototype.insertNodeAtConstructorEnd = function (sourceFile, ctr, newStatement) { var lastStatement = ts.lastOrUndefined(ctr.body.statements); if (!lastStatement || !ctr.body.multiLine) { this.replaceConstructorBody(sourceFile, ctr, ctr.body.statements.concat([newStatement])); } else { this.insertNodeAfter(sourceFile, lastStatement, newStatement); } }; ChangeTracker.prototype.replaceConstructorBody = function (sourceFile, ctr, statements) { this.replaceNode(sourceFile, ctr.body, ts.createBlock(statements, true)); }; ChangeTracker.prototype.insertNodeAtEndOfScope = function (sourceFile, scope, newNode) { var pos = getAdjustedStartPosition(sourceFile, scope.getLastToken(), {}, Position.Start); this.replaceRange(sourceFile, { pos: pos, end: pos }, newNode, { prefix: ts.isLineBreak(sourceFile.text.charCodeAt(scope.getLastToken().pos)) ? this.newLineCharacter : this.newLineCharacter + this.newLineCharacter, suffix: this.newLineCharacter }); }; ChangeTracker.prototype.insertNodeAtClassStart = function (sourceFile, cls, newElement) { var clsStart = cls.getStart(sourceFile); var indentation = ts.formatting.SmartIndenter.findFirstNonWhitespaceColumn(ts.getLineStartPositionForPosition(clsStart, sourceFile), clsStart, sourceFile, this.formatContext.options) + this.formatContext.options.indentSize; this.insertNodeAt(sourceFile, cls.members.pos, newElement, __assign({ indentation: indentation }, this.getInsertNodeAtClassStartPrefixSuffix(sourceFile, cls))); }; ChangeTracker.prototype.getInsertNodeAtClassStartPrefixSuffix = function (sourceFile, cls) { if (cls.members.length === 0) { if (ts.addToSeen(this.classesWithNodesInsertedAtStart, ts.getNodeId(cls), cls)) { var shouldSuffix = ts.positionsAreOnSameLine.apply(void 0, getClassBraceEnds(cls, sourceFile).concat([sourceFile])); return { prefix: this.newLineCharacter, suffix: shouldSuffix ? this.newLineCharacter : "" }; } else { return { prefix: "", suffix: this.newLineCharacter }; } } else { return { prefix: this.newLineCharacter, suffix: "" }; } }; ChangeTracker.prototype.insertNodeAfterComma = function (sourceFile, after, newNode) { var endPosition = this.insertNodeAfterWorker(sourceFile, this.nextCommaToken(sourceFile, after) || after, newNode); this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); }; ChangeTracker.prototype.insertNodeAfter = function (sourceFile, after, newNode) { var endPosition = this.insertNodeAfterWorker(sourceFile, after, newNode); this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); }; ChangeTracker.prototype.insertNodesAfter = function (sourceFile, after, newNodes) { var endPosition = this.insertNodeAfterWorker(sourceFile, after, ts.first(newNodes)); this.insertNodesAt(sourceFile, endPosition, newNodes, this.getInsertNodeAfterOptions(sourceFile, after)); }; ChangeTracker.prototype.insertNodeAfterWorker = function (sourceFile, after, newNode) { if (needSemicolonBetween(after, newNode)) { if (sourceFile.text.charCodeAt(after.end - 1) !== 59) { this.replaceRange(sourceFile, ts.createTextRange(after.end), ts.createToken(25)); } } var endPosition = getAdjustedEndPosition(sourceFile, after, {}); return endPosition; }; ChangeTracker.prototype.getInsertNodeAfterOptions = function (sourceFile, after) { var options = this.getInsertNodeAfterOptionsWorker(after); return __assign({}, options, { prefix: after.end === sourceFile.end && ts.isStatement(after) ? (options.prefix ? "\n" + options.prefix : "\n") : options.prefix }); }; ChangeTracker.prototype.getInsertNodeAfterOptionsWorker = function (node) { if (ts.isClassDeclaration(node) || ts.isModuleDeclaration(node)) { return { prefix: this.newLineCharacter, suffix: this.newLineCharacter }; } else if (ts.isStatement(node) || ts.isClassOrTypeElement(node)) { return { suffix: this.newLineCharacter }; } else if (ts.isVariableDeclaration(node) || ts.isStringLiteral(node)) { return { prefix: ", " }; } else if (ts.isPropertyAssignment(node)) { return { suffix: "," + this.newLineCharacter }; } else if (ts.isParameter(node)) { return {}; } return ts.Debug.failBadSyntaxKind(node); }; ChangeTracker.prototype.insertName = function (sourceFile, node, name) { ts.Debug.assert(!node.name); if (node.kind === 193) { var arrow = ts.findChildOfKind(node, 36, sourceFile); var lparen = ts.findChildOfKind(node, 19, sourceFile); if (lparen) { this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.createToken(89), ts.createIdentifier(name)], { joiner: " " }); this.deleteNode(sourceFile, arrow); } else { this.insertText(sourceFile, ts.first(node.parameters).getStart(sourceFile), "function " + name + "("); this.replaceRange(sourceFile, arrow, ts.createToken(20)); } if (node.body.kind !== 213) { this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.createToken(17), ts.createToken(96)], { joiner: " ", suffix: " " }); this.insertNodesAt(sourceFile, node.body.end, [ts.createToken(25), ts.createToken(18)], { joiner: " " }); } } else { var pos = ts.findChildOfKind(node, node.kind === 192 ? 89 : 75, sourceFile).end; this.insertNodeAt(sourceFile, pos, ts.createIdentifier(name), { prefix: " " }); } }; ChangeTracker.prototype.insertExportModifier = function (sourceFile, node) { this.insertText(sourceFile, node.getStart(sourceFile), "export "); }; ChangeTracker.prototype.insertNodeInListAfter = function (sourceFile, after, newNode, containingList) { if (containingList === void 0) { containingList = ts.formatting.SmartIndenter.getContainingList(after, sourceFile); } if (!containingList) { ts.Debug.fail("node is not a list element"); return this; } var index = ts.indexOfNode(containingList, after); if (index < 0) { return this; } var end = after.getEnd(); if (index !== containingList.length - 1) { var nextToken = ts.getTokenAtPosition(sourceFile, after.end, false); if (nextToken && isSeparator(after, nextToken)) { var lineAndCharOfNextElement = ts.getLineAndCharacterOfPosition(sourceFile, skipWhitespacesAndLineBreaks(sourceFile.text, containingList[index + 1].getFullStart())); var lineAndCharOfNextToken = ts.getLineAndCharacterOfPosition(sourceFile, nextToken.end); var prefix = void 0; var startPos = void 0; if (lineAndCharOfNextToken.line === lineAndCharOfNextElement.line) { startPos = nextToken.end; prefix = spaces(lineAndCharOfNextElement.character - lineAndCharOfNextToken.character); } else { startPos = ts.getStartPositionOfLine(lineAndCharOfNextElement.line, sourceFile); } var suffix = "" + ts.tokenToString(nextToken.kind) + sourceFile.text.substring(nextToken.end, containingList[index + 1].getStart(sourceFile)); this.replaceRange(sourceFile, ts.createTextRange(startPos, containingList[index + 1].getStart(sourceFile)), newNode, { prefix: prefix, suffix: suffix }); } } else { var afterStart = after.getStart(sourceFile); var afterStartLinePosition = ts.getLineStartPositionForPosition(afterStart, sourceFile); var separator = void 0; var multilineList = false; if (containingList.length === 1) { separator = 26; } else { var tokenBeforeInsertPosition = ts.findPrecedingToken(after.pos, sourceFile); separator = isSeparator(after, tokenBeforeInsertPosition) ? tokenBeforeInsertPosition.kind : 26; var afterMinusOneStartLinePosition = ts.getLineStartPositionForPosition(containingList[index - 1].getStart(sourceFile), sourceFile); multilineList = afterMinusOneStartLinePosition !== afterStartLinePosition; } if (hasCommentsBeforeLineBreak(sourceFile.text, after.end)) { multilineList = true; } if (multilineList) { this.replaceRange(sourceFile, ts.createTextRange(end), ts.createToken(separator)); var indentation = ts.formatting.SmartIndenter.findFirstNonWhitespaceColumn(afterStartLinePosition, afterStart, sourceFile, this.formatContext.options); var insertPos = ts.skipTrivia(sourceFile.text, end, true, false); if (insertPos !== end && ts.isLineBreak(sourceFile.text.charCodeAt(insertPos - 1))) { insertPos--; } this.replaceRange(sourceFile, ts.createTextRange(insertPos), newNode, { indentation: indentation, prefix: this.newLineCharacter }); } else { this.replaceRange(sourceFile, ts.createTextRange(end), newNode, { prefix: ts.tokenToString(separator) + " " }); } } return this; }; ChangeTracker.prototype.finishClassesWithNodesInsertedAtStart = function () { var _this = this; this.classesWithNodesInsertedAtStart.forEach(function (cls) { var sourceFile = cls.getSourceFile(); var _a = getClassBraceEnds(cls, sourceFile), openBraceEnd = _a[0], closeBraceEnd = _a[1]; if (ts.positionsAreOnSameLine(openBraceEnd, closeBraceEnd, sourceFile) && openBraceEnd !== closeBraceEnd - 1) { _this.deleteRange(sourceFile, ts.createTextRange(openBraceEnd, closeBraceEnd - 1)); } }); }; ChangeTracker.prototype.finishTrailingCommaAfterDeletingNodesInList = function () { var _this = this; this.deletedNodesInLists.forEach(function (node) { var sourceFile = node.getSourceFile(); var list = ts.formatting.SmartIndenter.getContainingList(node, sourceFile); if (node !== ts.last(list)) return; var lastNonDeletedIndex = ts.findLastIndex(list, function (n) { return !_this.deletedNodesInLists.has(n); }, list.length - 2); if (lastNonDeletedIndex !== -1) { _this.deleteRange(sourceFile, { pos: list[lastNonDeletedIndex].end, end: startPositionToDeleteNodeInList(sourceFile, list[lastNonDeletedIndex + 1]) }); } }); }; ChangeTracker.prototype.getChanges = function (validate) { this.finishClassesWithNodesInsertedAtStart(); this.finishTrailingCommaAfterDeletingNodesInList(); var changes = changesToText.getTextChangesFromChanges(this.changes, this.newLineCharacter, this.formatContext, validate); for (var _i = 0, _a = this.newFiles; _i < _a.length; _i++) { var _b = _a[_i], oldFile = _b.oldFile, fileName = _b.fileName, statements = _b.statements; changes.push(changesToText.newFileChanges(oldFile, fileName, statements, this.newLineCharacter, this.formatContext)); } return changes; }; ChangeTracker.prototype.createNewFile = function (oldFile, fileName, statements) { this.newFiles.push({ oldFile: oldFile, fileName: fileName, statements: statements }); }; return ChangeTracker; }()); textChanges_3.ChangeTracker = ChangeTracker; function startPositionToDeleteNodeInList(sourceFile, node) { return ts.skipTrivia(sourceFile.text, getAdjustedStartPosition(sourceFile, node, {}, Position.FullStart), false, true); } function getClassBraceEnds(cls, sourceFile) { return [ts.findChildOfKind(cls, 17, sourceFile).end, ts.findChildOfKind(cls, 18, sourceFile).end]; } var changesToText; (function (changesToText) { function getTextChangesFromChanges(changes, newLineCharacter, formatContext, validate) { return ts.group(changes, function (c) { return c.sourceFile.path; }).map(function (changesInFile) { var sourceFile = changesInFile[0].sourceFile; var normalized = ts.stableSort(changesInFile, function (a, b) { return (a.range.pos - b.range.pos) || (a.range.end - b.range.end); }); var _loop_22 = function (i) { ts.Debug.assert(normalized[i].range.end <= normalized[i + 1].range.pos, "Changes overlap", function () { return JSON.stringify(normalized[i].range) + " and " + JSON.stringify(normalized[i + 1].range); }); }; for (var i = 0; i < normalized.length - 1; i++) { _loop_22(i); } var textChanges = normalized.map(function (c) { return ts.createTextChange(ts.createTextSpanFromRange(c.range), computeNewText(c, sourceFile, newLineCharacter, formatContext, validate)); }); return { fileName: sourceFile.fileName, textChanges: textChanges }; }); } changesToText.getTextChangesFromChanges = getTextChangesFromChanges; function newFileChanges(oldFile, fileName, statements, newLineCharacter, formatContext) { var nonFormattedText = statements.map(function (s) { return getNonformattedText(s, oldFile, newLineCharacter).text; }).join(newLineCharacter); var sourceFile = ts.createSourceFile(fileName, nonFormattedText, 6, true); var changes = ts.formatting.formatDocument(sourceFile, formatContext); var text = applyChanges(nonFormattedText, changes); return { fileName: fileName, textChanges: [ts.createTextChange(ts.createTextSpan(0, 0), text)], isNewFile: true }; } changesToText.newFileChanges = newFileChanges; function computeNewText(change, sourceFile, newLineCharacter, formatContext, validate) { if (change.kind === ChangeKind.Remove) { return ""; } if (change.kind === ChangeKind.Text) { return change.text; } var _a = change.options, options = _a === void 0 ? {} : _a, pos = change.range.pos; var format = function (n) { return getFormattedTextOfNode(n, sourceFile, pos, options, newLineCharacter, formatContext, validate); }; var text = change.kind === ChangeKind.ReplaceWithMultipleNodes ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(change.options.joiner || newLineCharacter) : format(change.node); var noIndent = (options.preserveLeadingWhitespace || options.indentation !== undefined || ts.getLineStartPositionForPosition(pos, sourceFile) === pos) ? text : text.replace(/^\s+/, ""); return (options.prefix || "") + noIndent + (options.suffix || ""); } function getFormattedTextOfNode(nodeIn, sourceFile, pos, _a, newLineCharacter, formatContext, validate) { var indentation = _a.indentation, prefix = _a.prefix, delta = _a.delta; var _b = getNonformattedText(nodeIn, sourceFile, newLineCharacter), node = _b.node, text = _b.text; if (validate) validate(node, text); var formatOptions = formatContext.options; var initialIndentation = indentation !== undefined ? indentation : ts.formatting.SmartIndenter.getIndentation(pos, sourceFile, formatOptions, prefix === newLineCharacter || ts.getLineStartPositionForPosition(pos, sourceFile) === pos); if (delta === undefined) { delta = ts.formatting.SmartIndenter.shouldIndentChildNode(formatContext.options, nodeIn) ? (formatOptions.indentSize || 0) : 0; } var file = { text: text, getLineAndCharacterOfPosition: function (pos) { return ts.getLineAndCharacterOfPosition(this, pos); } }; var changes = ts.formatting.formatNodeGivenIndentation(node, file, sourceFile.languageVariant, initialIndentation, delta, formatContext); return applyChanges(text, changes); } function getNonformattedText(node, sourceFile, newLineCharacter) { var writer = new Writer(newLineCharacter); var newLine = newLineCharacter === "\n" ? 1 : 0; ts.createPrinter({ newLine: newLine }, writer).writeNode(4, node, sourceFile, writer); return { text: writer.getText(), node: assignPositionsToNode(node) }; } })(changesToText || (changesToText = {})); function applyChanges(text, changes) { for (var i = changes.length - 1; i >= 0; i--) { var change = changes[i]; text = "" + text.substring(0, change.span.start) + change.newText + text.substring(ts.textSpanEnd(change.span)); } return text; } textChanges_3.applyChanges = applyChanges; function isTrivia(s) { return ts.skipTrivia(s, 0) === s.length; } function assignPositionsToNode(node) { var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); var newNode = ts.nodeIsSynthesized(visited) ? visited : Object.create(visited); newNode.pos = getPos(node); newNode.end = getEnd(node); return newNode; } function assignPositionsToNodeArray(nodes, visitor, test, start, count) { var visited = ts.visitNodes(nodes, visitor, test, start, count); if (!visited) { return visited; } var nodeArray = visited === nodes ? ts.createNodeArray(visited.slice(0)) : visited; nodeArray.pos = getPos(nodes); nodeArray.end = getEnd(nodes); return nodeArray; } var Writer = (function () { function Writer(newLine) { var _this = this; this.lastNonTriviaPosition = 0; this.writer = ts.createTextWriter(newLine); this.onEmitNode = function (hint, node, printCallback) { if (node) { setPos(node, _this.lastNonTriviaPosition); } printCallback(hint, node); if (node) { setEnd(node, _this.lastNonTriviaPosition); } }; this.onBeforeEmitNodeArray = function (nodes) { if (nodes) { setPos(nodes, _this.lastNonTriviaPosition); } }; this.onAfterEmitNodeArray = function (nodes) { if (nodes) { setEnd(nodes, _this.lastNonTriviaPosition); } }; this.onBeforeEmitToken = function (node) { if (node) { setPos(node, _this.lastNonTriviaPosition); } }; this.onAfterEmitToken = function (node) { if (node) { setEnd(node, _this.lastNonTriviaPosition); } }; } Writer.prototype.setLastNonTriviaPosition = function (s, force) { if (force || !isTrivia(s)) { this.lastNonTriviaPosition = this.writer.getTextPos(); var i = 0; while (ts.isWhiteSpaceLike(s.charCodeAt(s.length - i - 1))) { i++; } this.lastNonTriviaPosition -= i; } }; Writer.prototype.write = function (s) { this.writer.write(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeKeyword = function (s) { this.writer.writeKeyword(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeOperator = function (s) { this.writer.writeOperator(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writePunctuation = function (s) { this.writer.writePunctuation(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeParameter = function (s) { this.writer.writeParameter(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeProperty = function (s) { this.writer.writeProperty(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeSpace = function (s) { this.writer.writeSpace(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeStringLiteral = function (s) { this.writer.writeStringLiteral(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeSymbol = function (s, sym) { this.writer.writeSymbol(s, sym); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeTextOfNode = function (text, node) { this.writer.writeTextOfNode(text, node); }; Writer.prototype.writeLine = function () { this.writer.writeLine(); }; Writer.prototype.increaseIndent = function () { this.writer.increaseIndent(); }; Writer.prototype.decreaseIndent = function () { this.writer.decreaseIndent(); }; Writer.prototype.getText = function () { return this.writer.getText(); }; Writer.prototype.rawWrite = function (s) { this.writer.rawWrite(s); this.setLastNonTriviaPosition(s, false); }; Writer.prototype.writeLiteral = function (s) { this.writer.writeLiteral(s); this.setLastNonTriviaPosition(s, true); }; Writer.prototype.getTextPos = function () { return this.writer.getTextPos(); }; Writer.prototype.getLine = function () { return this.writer.getLine(); }; Writer.prototype.getColumn = function () { return this.writer.getColumn(); }; Writer.prototype.getIndent = function () { return this.writer.getIndent(); }; Writer.prototype.isAtStartOfLine = function () { return this.writer.isAtStartOfLine(); }; Writer.prototype.clear = function () { this.writer.clear(); this.lastNonTriviaPosition = 0; }; return Writer; }()); function getInsertionPositionAtSourceFileTop(_a) { var text = _a.text; var shebang = ts.getShebang(text); var position = 0; if (shebang !== undefined) { position = shebang.length; advancePastLineBreak(); } var ranges = ts.getLeadingCommentRanges(text, position); if (!ranges) return position; if (ranges.length && ranges[0].kind === 3 && ts.isPinnedComment(text, ranges[0].pos)) { position = ranges[0].end; advancePastLineBreak(); ranges = ranges.slice(1); } for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) { var range = ranges_1[_i]; if (range.kind === 2 && ts.isRecognizedTripleSlashComment(text, range.pos, range.end)) { position = range.end; advancePastLineBreak(); continue; } break; } return position; function advancePastLineBreak() { if (position < text.length) { var charCode = text.charCodeAt(position); if (ts.isLineBreak(charCode)) { position++; if (position < text.length && charCode === 13 && text.charCodeAt(position) === 10) { position++; } } } } } function isValidLocationToAddComment(sourceFile, position) { return !ts.isInComment(sourceFile, position) && !ts.isInString(sourceFile, position) && !ts.isInTemplateString(sourceFile, position); } textChanges_3.isValidLocationToAddComment = isValidLocationToAddComment; function needSemicolonBetween(a, b) { return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 147 || ts.isStatementButNotDeclaration(a) && ts.isStatementButNotDeclaration(b); } })(textChanges = ts.textChanges || (ts.textChanges = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var errorCodeToFixes = ts.createMultiMap(); var fixIdToRegistration = ts.createMap(); function diagnosticToString(diag) { return ts.isArray(diag) ? ts.formatStringFromArgs(ts.getLocaleSpecificMessage(diag[0]), diag.slice(1)) : ts.getLocaleSpecificMessage(diag); } function createCodeFixActionNoFixId(fixName, changes, description) { return createCodeFixActionWorker(fixName, diagnosticToString(description), changes, undefined, undefined); } codefix.createCodeFixActionNoFixId = createCodeFixActionNoFixId; function createCodeFixAction(fixName, changes, description, fixId, fixAllDescription, command) { return createCodeFixActionWorker(fixName, diagnosticToString(description), changes, fixId, diagnosticToString(fixAllDescription), command); } codefix.createCodeFixAction = createCodeFixAction; function createCodeFixActionWorker(fixName, description, changes, fixId, fixAllDescription, command) { return { fixName: fixName, description: description, changes: changes, fixId: fixId, fixAllDescription: fixAllDescription, commands: command ? [command] : undefined }; } function registerCodeFix(reg) { for (var _i = 0, _a = reg.errorCodes; _i < _a.length; _i++) { var error = _a[_i]; errorCodeToFixes.add(String(error), reg); } if (reg.fixIds) { for (var _b = 0, _c = reg.fixIds; _b < _c.length; _b++) { var fixId = _c[_b]; ts.Debug.assert(!fixIdToRegistration.has(fixId)); fixIdToRegistration.set(fixId, reg); } } } codefix.registerCodeFix = registerCodeFix; function getSupportedErrorCodes() { return ts.arrayFrom(errorCodeToFixes.keys()); } codefix.getSupportedErrorCodes = getSupportedErrorCodes; function getFixes(context) { return ts.flatMap(errorCodeToFixes.get(String(context.errorCode)) || ts.emptyArray, function (f) { return f.getCodeActions(context); }); } codefix.getFixes = getFixes; function getAllFixes(context) { return fixIdToRegistration.get(ts.cast(context.fixId, ts.isString)).getAllCodeActions(context); } codefix.getAllFixes = getAllFixes; function createCombinedCodeActions(changes, commands) { return { changes: changes, commands: commands }; } function createFileTextChanges(fileName, textChanges) { return { fileName: fileName, textChanges: textChanges }; } codefix.createFileTextChanges = createFileTextChanges; function codeFixAll(context, errorCodes, use) { var commands = []; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return eachDiagnostic(context, errorCodes, function (diag) { return use(t, diag, commands); }); }); return createCombinedCodeActions(changes, commands.length === 0 ? undefined : commands); } codefix.codeFixAll = codeFixAll; function eachDiagnostic(_a, errorCodes, cb) { var program = _a.program, sourceFile = _a.sourceFile, cancellationToken = _a.cancellationToken; for (var _i = 0, _b = program.getSemanticDiagnostics(sourceFile, cancellationToken).concat(ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken)); _i < _b.length; _i++) { var diag = _b[_i]; if (ts.contains(errorCodes, diag.code)) { cb(diag); } } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor_1) { var refactors = ts.createMap(); function registerRefactor(name, refactor) { refactors.set(name, refactor); } refactor_1.registerRefactor = registerRefactor; function getApplicableRefactors(context) { return ts.arrayFrom(ts.flatMapIterator(refactors.values(), function (refactor) { return context.cancellationToken && context.cancellationToken.isCancellationRequested() ? undefined : refactor.getAvailableActions(context); })); } refactor_1.getApplicableRefactors = getApplicableRefactors; function getEditsForRefactor(context, refactorName, actionName) { var refactor = refactors.get(refactorName); return refactor && refactor.getEditsForAction(context, actionName); } refactor_1.getEditsForRefactor = getEditsForRefactor; })(refactor = ts.refactor || (ts.refactor = {})); function getRefactorContextSpan(_a) { var startPosition = _a.startPosition, endPosition = _a.endPosition; return ts.createTextSpanFromBounds(startPosition, endPosition === undefined ? startPosition : endPosition); } ts.getRefactorContextSpan = getRefactorContextSpan; })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "addMissingInvocationForDecorator"; var errorCodes = [ts.Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return makeChange(t, context.sourceFile, context.span.start); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Call_decorator_expression, fixId, ts.Diagnostics.Add_to_all_uncalled_decorators)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return makeChange(changes, diag.file, diag.start); }); }, }); function makeChange(changeTracker, sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); var decorator = ts.findAncestor(token, ts.isDecorator); ts.Debug.assert(!!decorator, "Expected position to be owned by a decorator."); var replacement = ts.createCall(decorator.expression, undefined, undefined); changeTracker.replaceNode(sourceFile, decorator.expression, replacement); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "annotateWithTypeFromJSDoc"; var errorCodes = [ts.Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var decl = getDeclaration(context.sourceFile, context.span.start); if (!decl) return; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, decl); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Annotate_with_type_from_JSDoc, fixId, ts.Diagnostics.Annotate_everything_with_types_from_JSDoc)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var decl = getDeclaration(diag.file, diag.start); if (decl) doChange(changes, diag.file, decl); }); }, }); function getDeclaration(file, pos) { var name = ts.getTokenAtPosition(file, pos, false); return ts.tryCast(ts.isParameter(name.parent) ? name.parent.parent : name.parent, parameterShouldGetTypeFromJSDoc); } function parameterShouldGetTypeFromJSDoc(node) { return isDeclarationWithType(node) && hasUsableJSDoc(node); } codefix.parameterShouldGetTypeFromJSDoc = parameterShouldGetTypeFromJSDoc; function hasUsableJSDoc(decl) { return ts.isFunctionLikeDeclaration(decl) ? decl.parameters.some(hasUsableJSDoc) || (!decl.type && !!ts.getJSDocReturnType(decl)) : !decl.type && !!ts.getJSDocType(decl); } function doChange(changes, sourceFile, decl) { if (ts.isFunctionLikeDeclaration(decl) && (ts.getJSDocReturnType(decl) || decl.parameters.some(function (p) { return !!ts.getJSDocType(p); }))) { if (!decl.typeParameters) { var typeParameters = ts.getJSDocTypeParameterDeclarations(decl); if (typeParameters.length) changes.insertTypeParameters(sourceFile, decl, typeParameters); } var needParens = ts.isArrowFunction(decl) && !ts.findChildOfKind(decl, 19, sourceFile); if (needParens) changes.insertNodeBefore(sourceFile, ts.first(decl.parameters), ts.createToken(19)); for (var _i = 0, _a = decl.parameters; _i < _a.length; _i++) { var param = _a[_i]; if (!param.type) { var paramType = ts.getJSDocType(param); if (paramType) changes.tryInsertTypeAnnotation(sourceFile, param, transformJSDocType(paramType)); } } if (needParens) changes.insertNodeAfter(sourceFile, ts.last(decl.parameters), ts.createToken(20)); if (!decl.type) { var returnType = ts.getJSDocReturnType(decl); if (returnType) changes.tryInsertTypeAnnotation(sourceFile, decl, transformJSDocType(returnType)); } } else { var jsdocType = ts.Debug.assertDefined(ts.getJSDocType(decl)); ts.Debug.assert(!decl.type); changes.tryInsertTypeAnnotation(sourceFile, decl, transformJSDocType(jsdocType)); } } function isDeclarationWithType(node) { return ts.isFunctionLikeDeclaration(node) || node.kind === 232 || node.kind === 151 || node.kind === 152; } function transformJSDocType(node) { switch (node.kind) { case 279: case 280: return ts.createTypeReferenceNode("any", ts.emptyArray); case 283: return transformJSDocOptionalType(node); case 282: return transformJSDocType(node.type); case 281: return transformJSDocNullableType(node); case 285: return transformJSDocVariadicType(node); case 284: return transformJSDocFunctionType(node); case 162: return transformJSDocTypeReference(node); default: var visited = ts.visitEachChild(node, transformJSDocType, undefined); ts.setEmitFlags(visited, 1); return visited; } } function transformJSDocOptionalType(node) { return ts.createUnionTypeNode([ts.visitNode(node.type, transformJSDocType), ts.createTypeReferenceNode("undefined", ts.emptyArray)]); } function transformJSDocNullableType(node) { return ts.createUnionTypeNode([ts.visitNode(node.type, transformJSDocType), ts.createTypeReferenceNode("null", ts.emptyArray)]); } function transformJSDocVariadicType(node) { return ts.createArrayTypeNode(ts.visitNode(node.type, transformJSDocType)); } function transformJSDocFunctionType(node) { return ts.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), node.type); } function transformJSDocParameter(node) { var index = node.parent.parameters.indexOf(node); var isRest = node.type.kind === 285 && index === node.parent.parameters.length - 1; var name = node.name || (isRest ? "rest" : "arg" + index); var dotdotdot = isRest ? ts.createToken(24) : node.dotDotDotToken; return ts.createParameter(node.decorators, node.modifiers, dotdotdot, name, node.questionToken, ts.visitNode(node.type, transformJSDocType), node.initializer); } function transformJSDocTypeReference(node) { var name = node.typeName; var args = node.typeArguments; if (ts.isIdentifier(node.typeName)) { if (ts.isJSDocIndexSignature(node)) { return transformJSDocIndexSignature(node); } var text = node.typeName.text; switch (node.typeName.text) { case "String": case "Boolean": case "Object": case "Number": text = text.toLowerCase(); break; case "array": case "date": case "promise": text = text[0].toUpperCase() + text.slice(1); break; } name = ts.createIdentifier(text); if ((text === "Array" || text === "Promise") && !node.typeArguments) { args = ts.createNodeArray([ts.createTypeReferenceNode("any", ts.emptyArray)]); } else { args = ts.visitNodes(node.typeArguments, transformJSDocType); } } return ts.createTypeReferenceNode(name, args); } function transformJSDocIndexSignature(node) { var index = ts.createParameter(undefined, undefined, undefined, node.typeArguments[0].kind === 134 ? "n" : "s", undefined, ts.createTypeReferenceNode(node.typeArguments[0].kind === 134 ? "number" : "string", []), undefined); var indexSignature = ts.createTypeLiteralNode([ts.createIndexSignature(undefined, undefined, [index], node.typeArguments[1])]); ts.setEmitFlags(indexSignature, 1); return indexSignature; } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "convertFunctionToEs6Class"; var errorCodes = [ts.Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, context.span.start, context.program.getTypeChecker()); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_function_to_an_ES2015_class, fixId, ts.Diagnostics.Convert_all_constructor_functions_to_classes)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, err) { return doChange(changes, err.file, err.start, context.program.getTypeChecker()); }); }, }); function doChange(changes, sourceFile, position, checker) { var deletedNodes = []; var ctorSymbol = checker.getSymbolAtLocation(ts.getTokenAtPosition(sourceFile, position, false)); if (!ctorSymbol || !(ctorSymbol.flags & (16 | 3))) { return undefined; } var ctorDeclaration = ctorSymbol.valueDeclaration; var precedingNode; var newClassDeclaration; switch (ctorDeclaration.kind) { case 234: precedingNode = ctorDeclaration; deleteNode(ctorDeclaration); newClassDeclaration = createClassFromFunctionDeclaration(ctorDeclaration); break; case 232: precedingNode = ctorDeclaration.parent.parent; newClassDeclaration = createClassFromVariableDeclaration(ctorDeclaration); if (ctorDeclaration.parent.declarations.length === 1) { ts.copyComments(precedingNode, newClassDeclaration, sourceFile); deleteNode(precedingNode); } else { deleteNode(ctorDeclaration, true); } break; } if (!newClassDeclaration) { return undefined; } ts.copyComments(ctorDeclaration, newClassDeclaration, sourceFile); changes.insertNodeAfter(sourceFile, precedingNode, newClassDeclaration); for (var _i = 0, deletedNodes_1 = deletedNodes; _i < deletedNodes_1.length; _i++) { var _a = deletedNodes_1[_i], node = _a.node, inList = _a.inList; if (inList) { changes.deleteNodeInList(sourceFile, node); } else { changes.deleteNode(sourceFile, node); } } function deleteNode(node, inList) { if (inList === void 0) { inList = false; } if (!deletedNodes.some(function (n) { return ts.isNodeDescendantOf(node, n.node); })) { deletedNodes.push({ node: node, inList: inList }); } } function createClassElementsFromSymbol(symbol) { var memberElements = []; if (symbol.members) { symbol.members.forEach(function (member) { var memberElement = createClassElement(member, undefined); if (memberElement) { memberElements.push(memberElement); } }); } if (symbol.exports) { symbol.exports.forEach(function (member) { var memberElement = createClassElement(member, [ts.createToken(115)]); if (memberElement) { memberElements.push(memberElement); } }); } return memberElements; function shouldConvertDeclaration(_target, source) { return ts.isFunctionLike(source); } function createClassElement(symbol, modifiers) { if (!(symbol.flags & 8192)) { return; } var memberDeclaration = symbol.valueDeclaration; var assignmentBinaryExpression = memberDeclaration.parent; if (!shouldConvertDeclaration(memberDeclaration, assignmentBinaryExpression.right)) { return; } var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 216 ? assignmentBinaryExpression.parent : assignmentBinaryExpression; deleteNode(nodeToDelete); if (!assignmentBinaryExpression.right) { return ts.createProperty([], modifiers, symbol.name, undefined, undefined, undefined); } switch (assignmentBinaryExpression.right.kind) { case 192: { var functionExpression = assignmentBinaryExpression.right; var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 120)); var method = ts.createMethod(undefined, fullModifiers, undefined, memberDeclaration.name, undefined, undefined, functionExpression.parameters, undefined, functionExpression.body); ts.copyComments(assignmentBinaryExpression, method, sourceFile); return method; } case 193: { var arrowFunction = assignmentBinaryExpression.right; var arrowFunctionBody = arrowFunction.body; var bodyBlock = void 0; if (arrowFunctionBody.kind === 213) { bodyBlock = arrowFunctionBody; } else { bodyBlock = ts.createBlock([ts.createReturn(arrowFunctionBody)]); } var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 120)); var method = ts.createMethod(undefined, fullModifiers, undefined, memberDeclaration.name, undefined, undefined, arrowFunction.parameters, undefined, bodyBlock); ts.copyComments(assignmentBinaryExpression, method, sourceFile); return method; } default: { if (ts.isSourceFileJavaScript(sourceFile)) { return; } var prop = ts.createProperty(undefined, modifiers, memberDeclaration.name, undefined, undefined, assignmentBinaryExpression.right); ts.copyComments(assignmentBinaryExpression.parent, prop, sourceFile); return prop; } } } } function createClassFromVariableDeclaration(node) { var initializer = node.initializer; if (!initializer || initializer.kind !== 192) { return undefined; } if (node.name.kind !== 71) { return undefined; } var memberElements = createClassElementsFromSymbol(node.symbol); if (initializer.body) { memberElements.unshift(ts.createConstructor(undefined, undefined, initializer.parameters, initializer.body)); } var modifiers = getModifierKindFromSource(precedingNode, 84); var cls = ts.createClassDeclaration(undefined, modifiers, node.name, undefined, undefined, memberElements); return cls; } function createClassFromFunctionDeclaration(node) { var memberElements = createClassElementsFromSymbol(ctorSymbol); if (node.body) { memberElements.unshift(ts.createConstructor(undefined, undefined, node.parameters, node.body)); } var modifiers = getModifierKindFromSource(node, 84); var cls = ts.createClassDeclaration(undefined, modifiers, node.name, undefined, undefined, memberElements); return cls; } } function getModifierKindFromSource(source, kind) { return ts.filter(source.modifiers, function (modifier) { return modifier.kind === kind; }); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { codefix.registerCodeFix({ errorCodes: [ts.Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module.code], getCodeActions: function (context) { var sourceFile = context.sourceFile, program = context.program, preferences = context.preferences; var changes = ts.textChanges.ChangeTracker.with(context, function (changes) { var moduleExportsChangedToDefault = convertFileToEs6Module(sourceFile, program.getTypeChecker(), changes, program.getCompilerOptions().target, ts.getQuotePreference(sourceFile, preferences)); if (moduleExportsChangedToDefault) { for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { var importingFile = _a[_i]; fixImportOfModuleExports(importingFile, sourceFile, changes, ts.getQuotePreference(importingFile, preferences)); } } }); return [codefix.createCodeFixActionNoFixId("convertToEs6Module", changes, ts.Diagnostics.Convert_to_ES6_module)]; }, }); function fixImportOfModuleExports(importingFile, exportingFile, changes, quotePreference) { for (var _i = 0, _a = importingFile.imports; _i < _a.length; _i++) { var moduleSpecifier = _a[_i]; var imported = ts.getResolvedModule(importingFile, moduleSpecifier.text); if (!imported || imported.resolvedFileName !== exportingFile.fileName) { continue; } var importNode = ts.importFromModuleSpecifier(moduleSpecifier); switch (importNode.kind) { case 243: changes.replaceNode(importingFile, importNode, ts.makeImport(importNode.name, undefined, moduleSpecifier, quotePreference)); break; case 187: if (ts.isRequireCall(importNode, false)) { changes.replaceNode(importingFile, importNode, ts.createPropertyAccess(ts.getSynthesizedDeepClone(importNode), "default")); } break; } } } function convertFileToEs6Module(sourceFile, checker, changes, target, quotePreference) { var identifiers = { original: collectFreeIdentifiers(sourceFile), additional: ts.createMap() }; var exports = collectExportRenames(sourceFile, checker, identifiers); convertExportsAccesses(sourceFile, exports, changes); var moduleExportsChangedToDefault = false; for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; var moduleExportsChanged = convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, quotePreference); moduleExportsChangedToDefault = moduleExportsChangedToDefault || moduleExportsChanged; } return moduleExportsChangedToDefault; } function collectExportRenames(sourceFile, checker, identifiers) { var res = ts.createMap(); forEachExportReference(sourceFile, function (node) { var _a = node.name, text = _a.text, originalKeywordKind = _a.originalKeywordKind; if (!res.has(text) && (originalKeywordKind !== undefined && ts.isNonContextualKeyword(originalKeywordKind) || checker.resolveName(node.name.text, node, 67216319, true))) { res.set(text, makeUniqueName("_" + text, identifiers)); } }); return res; } function convertExportsAccesses(sourceFile, exports, changes) { forEachExportReference(sourceFile, function (node, isAssignmentLhs) { if (isAssignmentLhs) { return; } var text = node.name.text; changes.replaceNode(sourceFile, node, ts.createIdentifier(exports.get(text) || text)); }); } function forEachExportReference(sourceFile, cb) { sourceFile.forEachChild(function recur(node) { if (ts.isPropertyAccessExpression(node) && ts.isExportsOrModuleExportsOrAlias(sourceFile, node.expression)) { var parent = node.parent; cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 58); } node.forEachChild(recur); }); } function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, quotePreference) { switch (statement.kind) { case 214: convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference); return false; case 216: { var expression = statement.expression; switch (expression.kind) { case 187: { if (ts.isRequireCall(expression, true)) { changes.replaceNode(sourceFile, statement, ts.makeImport(undefined, undefined, expression.arguments[0], quotePreference)); } return false; } case 200: { var operatorToken = expression.operatorToken; return operatorToken.kind === 58 && convertAssignment(sourceFile, checker, expression, changes, exports); } } } default: return false; } } function convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference) { var declarationList = statement.declarationList; var foundImport = false; var newNodes = ts.flatMap(declarationList.declarations, function (decl) { var name = decl.name, initializer = decl.initializer; if (initializer) { if (ts.isExportsOrModuleExportsOrAlias(sourceFile, initializer)) { foundImport = true; return []; } else if (ts.isRequireCall(initializer, true)) { foundImport = true; return convertSingleImport(sourceFile, name, initializer.arguments[0], changes, checker, identifiers, target, quotePreference); } else if (ts.isPropertyAccessExpression(initializer) && ts.isRequireCall(initializer.expression, true)) { foundImport = true; return convertPropertyAccessImport(name, initializer.name.text, initializer.expression.arguments[0], identifiers, quotePreference); } } return ts.createVariableStatement(undefined, ts.createVariableDeclarationList([decl], declarationList.flags)); }); if (foundImport) { changes.replaceNodeWithNodes(sourceFile, statement, newNodes); } } function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) { switch (name.kind) { case 180: case 181: { var tmp = makeUniqueName(propertyName, identifiers); return [ makeSingleImport(tmp, propertyName, moduleSpecifier, quotePreference), makeConst(undefined, name, ts.createIdentifier(tmp)), ]; } case 71: return [makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]; default: return ts.Debug.assertNever(name); } } function convertAssignment(sourceFile, checker, assignment, changes, exports) { var left = assignment.left, right = assignment.right; if (!ts.isPropertyAccessExpression(left)) { return false; } if (ts.isExportsOrModuleExportsOrAlias(sourceFile, left)) { if (ts.isExportsOrModuleExportsOrAlias(sourceFile, right)) { changes.deleteNode(sourceFile, assignment.parent); } else { var replacement = ts.isObjectLiteralExpression(right) ? tryChangeModuleExportsObject(right) : ts.isRequireCall(right, true) ? convertReExportAll(right.arguments[0], checker) : undefined; if (replacement) { changes.replaceNodeWithNodes(sourceFile, assignment.parent, replacement[0]); return replacement[1]; } else { changes.replaceRangeWithText(sourceFile, ts.createTextRange(left.getStart(sourceFile), right.pos), "export default"); return true; } } } else if (ts.isExportsOrModuleExportsOrAlias(sourceFile, left.expression)) { convertNamedExport(sourceFile, assignment, changes, exports); } return false; } function tryChangeModuleExportsObject(object) { var statements = ts.mapAllOrFail(object.properties, function (prop) { switch (prop.kind) { case 156: case 157: case 271: case 272: return undefined; case 270: return !ts.isIdentifier(prop.name) ? undefined : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer); case 154: return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.createToken(84)], prop); default: ts.Debug.assertNever(prop); } }); return statements && [statements, false]; } function convertNamedExport(sourceFile, assignment, changes, exports) { var text = assignment.left.name.text; var rename = exports.get(text); if (rename !== undefined) { var newNodes = [ makeConst(undefined, rename, assignment.right), makeExportDeclaration([ts.createExportSpecifier(rename, text)]), ]; changes.replaceNodeWithNodes(sourceFile, assignment.parent, newNodes); } else { convertExportsPropertyAssignment(assignment, sourceFile, changes); } } function convertReExportAll(reExported, checker) { var moduleSpecifier = reExported.text; var moduleSymbol = checker.getSymbolAtLocation(reExported); var exports = moduleSymbol ? moduleSymbol.exports : ts.emptyUnderscoreEscapedMap; return exports.has("export=") ? [[reExportDefault(moduleSpecifier)], true] : !exports.has("default") ? [[reExportStar(moduleSpecifier)], false] : exports.size > 1 ? [[reExportStar(moduleSpecifier), reExportDefault(moduleSpecifier)], true] : [[reExportDefault(moduleSpecifier)], true]; } function reExportStar(moduleSpecifier) { return makeExportDeclaration(undefined, moduleSpecifier); } function reExportDefault(moduleSpecifier) { return makeExportDeclaration([ts.createExportSpecifier(undefined, "default")], moduleSpecifier); } function convertExportsPropertyAssignment(_a, sourceFile, changes) { var left = _a.left, right = _a.right, parent = _a.parent; var name = left.name.text; if ((ts.isFunctionExpression(right) || ts.isArrowFunction(right) || ts.isClassExpression(right)) && (!right.name || right.name.text === name)) { changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.createToken(84), { suffix: " " }); if (!right.name) changes.insertName(sourceFile, right, name); var semi = ts.findChildOfKind(parent, 25, sourceFile); if (semi) changes.deleteNode(sourceFile, semi, { useNonAdjustedEndPosition: true }); } else { changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 23, sourceFile), [ts.createToken(84), ts.createToken(76)], { joiner: " ", suffix: " " }); } } function convertExportsDotXEquals_replaceNode(name, exported) { var modifiers = [ts.createToken(84)]; switch (exported.kind) { case 192: { var expressionName = exported.name; if (expressionName && expressionName.text !== name) { return exportConst(); } } case 193: return functionExpressionToDeclaration(name, modifiers, exported); case 205: return classExpressionToDeclaration(name, modifiers, exported); default: return exportConst(); } function exportConst() { return makeConst(modifiers, ts.createIdentifier(name), exported); } } function convertSingleImport(file, name, moduleSpecifier, changes, checker, identifiers, target, quotePreference) { switch (name.kind) { case 180: { var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) { return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name) ? undefined : makeImportSpecifier(e.propertyName && e.propertyName.text, e.name.text); }); if (importSpecifiers) { return [ts.makeImport(undefined, importSpecifiers, moduleSpecifier, quotePreference)]; } } case 181: { var tmp = makeUniqueName(codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, target), identifiers); return [ ts.makeImport(ts.createIdentifier(tmp), undefined, moduleSpecifier, quotePreference), makeConst(undefined, ts.getSynthesizedDeepClone(name), ts.createIdentifier(tmp)), ]; } case 71: return convertSingleIdentifierImport(file, name, moduleSpecifier, changes, checker, identifiers, quotePreference); default: return ts.Debug.assertNever(name); } } function convertSingleIdentifierImport(file, name, moduleSpecifier, changes, checker, identifiers, quotePreference) { var nameSymbol = checker.getSymbolAtLocation(name); var namedBindingsNames = ts.createMap(); var needDefaultImport = false; for (var _i = 0, _a = identifiers.original.get(name.text); _i < _a.length; _i++) { var use = _a[_i]; if (checker.getSymbolAtLocation(use) !== nameSymbol || use === name) { continue; } var parent = use.parent; if (ts.isPropertyAccessExpression(parent)) { var expression = parent.expression, propertyName = parent.name.text; ts.Debug.assert(expression === use); var idName = namedBindingsNames.get(propertyName); if (idName === undefined) { idName = makeUniqueName(propertyName, identifiers); namedBindingsNames.set(propertyName, idName); } changes.replaceNode(file, parent, ts.createIdentifier(idName)); } else { needDefaultImport = true; } } var namedBindings = namedBindingsNames.size === 0 ? undefined : ts.arrayFrom(ts.mapIterator(namedBindingsNames.entries(), function (_a) { var propertyName = _a[0], idName = _a[1]; return ts.createImportSpecifier(propertyName === idName ? undefined : ts.createIdentifier(propertyName), ts.createIdentifier(idName)); })); if (!namedBindings) { needDefaultImport = true; } return [ts.makeImport(needDefaultImport ? ts.getSynthesizedDeepClone(name) : undefined, namedBindings, moduleSpecifier, quotePreference)]; } function makeUniqueName(name, identifiers) { while (identifiers.original.has(name) || identifiers.additional.has(name)) { name = "_" + name; } identifiers.additional.set(name, true); return name; } function collectFreeIdentifiers(file) { var map = ts.createMultiMap(); forEachFreeIdentifier(file, function (id) { return map.add(id.text, id); }); return map; } function forEachFreeIdentifier(node, cb) { if (ts.isIdentifier(node) && isFreeIdentifier(node)) cb(node); node.forEachChild(function (child) { return forEachFreeIdentifier(child, cb); }); } function isFreeIdentifier(node) { var parent = node.parent; switch (parent.kind) { case 185: return parent.name !== node; case 182: return parent.propertyName !== node; case 248: return parent.propertyName !== node; default: return true; } } function functionExpressionToDeclaration(name, additionalModifiers, fn) { return ts.createFunctionDeclaration(ts.getSynthesizedDeepClones(fn.decorators), ts.concatenate(additionalModifiers, ts.getSynthesizedDeepClones(fn.modifiers)), ts.getSynthesizedDeepClone(fn.asteriskToken), name, ts.getSynthesizedDeepClones(fn.typeParameters), ts.getSynthesizedDeepClones(fn.parameters), ts.getSynthesizedDeepClone(fn.type), ts.convertToFunctionBody(ts.getSynthesizedDeepClone(fn.body))); } function classExpressionToDeclaration(name, additionalModifiers, cls) { return ts.createClassDeclaration(ts.getSynthesizedDeepClones(cls.decorators), ts.concatenate(additionalModifiers, ts.getSynthesizedDeepClones(cls.modifiers)), name, ts.getSynthesizedDeepClones(cls.typeParameters), ts.getSynthesizedDeepClones(cls.heritageClauses), ts.getSynthesizedDeepClones(cls.members)); } function makeSingleImport(localName, propertyName, moduleSpecifier, quotePreference) { return propertyName === "default" ? ts.makeImport(ts.createIdentifier(localName), undefined, moduleSpecifier, quotePreference) : ts.makeImport(undefined, [makeImportSpecifier(propertyName, localName)], moduleSpecifier, quotePreference); } function makeImportSpecifier(propertyName, name) { return ts.createImportSpecifier(propertyName !== undefined && propertyName !== name ? ts.createIdentifier(propertyName) : undefined, ts.createIdentifier(name)); } function makeConst(modifiers, name, init) { return ts.createVariableStatement(modifiers, ts.createVariableDeclarationList([ts.createVariableDeclaration(name, undefined, init)], 2)); } function makeExportDeclaration(exportSpecifiers, moduleSpecifier) { return ts.createExportDeclaration(undefined, undefined, exportSpecifiers && ts.createNamedExports(exportSpecifiers), moduleSpecifier === undefined ? undefined : ts.createLiteral(moduleSpecifier)); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "correctQualifiedNameToIndexedAccessType"; var errorCodes = [ts.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var qualifiedName = getQualifiedName(context.sourceFile, context.span.start); if (!qualifiedName) return undefined; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, qualifiedName); }); var newText = qualifiedName.left.text + "[\"" + qualifiedName.right.text + "\"]"; return [codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Rewrite_as_the_indexed_access_type_0, newText], fixId, ts.Diagnostics.Rewrite_all_as_indexed_access_types)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var q = getQualifiedName(diag.file, diag.start); if (q) { doChange(changes, diag.file, q); } }); }, }); function getQualifiedName(sourceFile, pos) { var qualifiedName = ts.findAncestor(ts.getTokenAtPosition(sourceFile, pos, true), ts.isQualifiedName); ts.Debug.assert(!!qualifiedName, "Expected position to be owned by a qualified name."); return ts.isIdentifier(qualifiedName.left) ? qualifiedName : undefined; } function doChange(changeTracker, sourceFile, qualifiedName) { var rightText = qualifiedName.right.text; var replacement = ts.createIndexedAccessTypeNode(ts.createTypeReferenceNode(qualifiedName.left, undefined), ts.createLiteralTypeNode(ts.createLiteral(rightText))); changeTracker.replaceNode(sourceFile, qualifiedName, replacement); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var errorCodes = [ts.Diagnostics.Class_0_incorrectly_implements_interface_1.code, ts.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code]; var fixId = "fixClassIncorrectlyImplementsInterface"; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var program = context.program, sourceFile = context.sourceFile, span = context.span; var classDeclaration = getClass(sourceFile, span.start); var checker = program.getTypeChecker(); return ts.mapDefined(ts.getClassImplementsHeritageClauseElements(classDeclaration), function (implementedTypeNode) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addMissingDeclarations(checker, implementedTypeNode, sourceFile, classDeclaration, t, context.preferences); }); return changes.length === 0 ? undefined : codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Implement_interface_0, implementedTypeNode.getText(sourceFile)], fixId, ts.Diagnostics.Implement_all_unimplemented_interfaces); }); }, fixIds: [fixId], getAllCodeActions: function (context) { var seenClassDeclarations = ts.createMap(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var classDeclaration = getClass(diag.file, diag.start); if (ts.addToSeen(seenClassDeclarations, ts.getNodeId(classDeclaration))) { for (var _i = 0, _a = ts.getClassImplementsHeritageClauseElements(classDeclaration); _i < _a.length; _i++) { var implementedTypeNode = _a[_i]; addMissingDeclarations(context.program.getTypeChecker(), implementedTypeNode, diag.file, classDeclaration, changes, context.preferences); } } }); }, }); function getClass(sourceFile, pos) { return ts.Debug.assertDefined(ts.getContainingClass(ts.getTokenAtPosition(sourceFile, pos, false))); } function symbolPointsToNonPrivateMember(symbol) { return !(ts.getModifierFlags(symbol.valueDeclaration) & 8); } function addMissingDeclarations(checker, implementedTypeNode, sourceFile, classDeclaration, changeTracker, preferences) { var maybeHeritageClauseSymbol = getHeritageClauseSymbolTable(classDeclaration, checker); var implementedType = checker.getTypeAtLocation(implementedTypeNode); var implementedTypeSymbols = checker.getPropertiesOfType(implementedType); var nonPrivateAndNotExistedInHeritageClauseMembers = implementedTypeSymbols.filter(ts.and(symbolPointsToNonPrivateMember, function (symbol) { return !maybeHeritageClauseSymbol.has(symbol.escapedName); })); var classType = checker.getTypeAtLocation(classDeclaration); if (!classType.getNumberIndexType()) { createMissingIndexSignatureDeclaration(implementedType, 1); } if (!classType.getStringIndexType()) { createMissingIndexSignatureDeclaration(implementedType, 0); } codefix.createMissingMemberNodes(classDeclaration, nonPrivateAndNotExistedInHeritageClauseMembers, checker, preferences, function (member) { return changeTracker.insertNodeAtClassStart(sourceFile, classDeclaration, member); }); function createMissingIndexSignatureDeclaration(type, kind) { var indexInfoOfKind = checker.getIndexInfoOfType(type, kind); if (indexInfoOfKind) { changeTracker.insertNodeAtClassStart(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, kind, classDeclaration)); } } } function getHeritageClauseSymbolTable(classDeclaration, checker) { var heritageClauseNode = ts.getClassExtendsHeritageClauseElement(classDeclaration); if (!heritageClauseNode) return ts.createSymbolTable(); var heritageClauseType = checker.getTypeAtLocation(heritageClauseNode); var heritageClauseTypeSymbols = checker.getPropertiesOfType(heritageClauseType); return ts.createSymbolTable(heritageClauseTypeSymbols.filter(symbolPointsToNonPrivateMember)); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var ChangeTracker = ts.textChanges.ChangeTracker; codefix.registerCodeFix({ errorCodes: [ ts.Diagnostics.Cannot_find_name_0.code, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code, ts.Diagnostics.Cannot_find_namespace_0.code, ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code, ], getCodeActions: function (context) { return context.errorCode === ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code ? getActionsForUMDImport(context) : getActionsForNonUMDImport(context); }, fixIds: [], getAllCodeActions: ts.notImplemented, }); function createCodeAction(descriptionDiagnostic, diagnosticArgs, changes) { return codefix.createCodeFixActionNoFixId("import", changes, [descriptionDiagnostic].concat(diagnosticArgs)); } function convertToImportCodeFixContext(context, symbolToken, symbolName) { var program = context.program; var checker = program.getTypeChecker(); return { host: context.host, formatContext: context.formatContext, sourceFile: context.sourceFile, program: program, checker: checker, compilerOptions: program.getCompilerOptions(), getCanonicalFileName: ts.createGetCanonicalFileName(ts.hostUsesCaseSensitiveFileNames(context.host)), symbolName: symbolName, symbolToken: symbolToken, preferences: context.preferences, }; } var ImportKind; (function (ImportKind) { ImportKind[ImportKind["Named"] = 0] = "Named"; ImportKind[ImportKind["Default"] = 1] = "Default"; ImportKind[ImportKind["Namespace"] = 2] = "Namespace"; ImportKind[ImportKind["Equals"] = 3] = "Equals"; })(ImportKind || (ImportKind = {})); function getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, symbolName, host, program, checker, compilerOptions, allSourceFiles, formatContext, getCanonicalFileName, symbolToken, preferences) { var exportInfos = getAllReExportingModules(exportedSymbol, moduleSymbol, symbolName, sourceFile, checker, allSourceFiles); ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol; })); var moduleSpecifier = ts.first(getNewImportInfos(program, sourceFile, exportInfos, host, preferences)).moduleSpecifier; var ctx = { host: host, program: program, checker: checker, compilerOptions: compilerOptions, sourceFile: sourceFile, formatContext: formatContext, symbolName: symbolName, getCanonicalFileName: getCanonicalFileName, symbolToken: symbolToken, preferences: preferences }; return { moduleSpecifier: moduleSpecifier, codeAction: ts.first(getCodeActionsForImport(exportInfos, ctx)) }; } codefix.getImportCompletionAction = getImportCompletionAction; function getAllReExportingModules(exportedSymbol, exportingModuleSymbol, symbolName, sourceFile, checker, allSourceFiles) { var result = []; forEachExternalModule(checker, allSourceFiles, function (moduleSymbol, moduleFile) { if (moduleFile && moduleSymbol !== exportingModuleSymbol && ts.startsWith(sourceFile.fileName, ts.getDirectoryPath(moduleFile.fileName))) { return; } for (var _i = 0, _a = checker.getExportsOfModule(moduleSymbol); _i < _a.length; _i++) { var exported = _a[_i]; if ((exported.escapedName === "default" || exported.name === symbolName) && ts.skipAlias(exported, checker) === exportedSymbol) { var isDefaultExport = checker.tryGetMemberInModuleExports("default", moduleSymbol) === exported; result.push({ moduleSymbol: moduleSymbol, importKind: isDefaultExport ? 1 : 0 }); } } }); return result; } function getCodeActionsForImport(exportInfos, context) { var result = []; getCodeActionsForImport_separateExistingAndNew(exportInfos, context, result, result); return result; } function getCodeActionsForImport_separateExistingAndNew(exportInfos, context, useExisting, addNew) { var existingImports = ts.flatMap(exportInfos, function (info) { return getExistingImportDeclarations(info, context.checker, context.sourceFile); }); ts.append(useExisting, tryUseExistingNamespaceImport(existingImports, context, context.symbolToken, context.checker)); var addToExisting = tryAddToExistingImport(existingImports, context); if (addToExisting) { useExisting.push(addToExisting); } else { getCodeActionsForAddImport(exportInfos, context, existingImports, addNew); } } function tryUseExistingNamespaceImport(existingImports, context, symbolToken, checker) { return !symbolToken || !ts.isIdentifier(symbolToken) ? undefined : ts.firstDefined(existingImports, function (_a) { var declaration = _a.declaration; var namespace = getNamespaceImportName(declaration); if (namespace) { var moduleSymbol = namespace && checker.getAliasedSymbol(checker.getSymbolAtLocation(namespace)); if (moduleSymbol && moduleSymbol.exports.has(ts.escapeLeadingUnderscores(context.symbolName))) { return getCodeActionForUseExistingNamespaceImport(namespace.text, context, symbolToken); } } }); } function tryAddToExistingImport(existingImports, context) { return ts.firstDefined(existingImports, function (_a) { var declaration = _a.declaration, importKind = _a.importKind; if (declaration.kind === 244 && declaration.importClause) { var changes = tryUpdateExistingImport(context, declaration.importClause, importKind); if (changes) { var moduleSpecifierWithoutQuotes = ts.stripQuotes(declaration.moduleSpecifier.getText()); return createCodeAction(ts.Diagnostics.Add_0_to_existing_import_declaration_from_1, [context.symbolName, moduleSpecifierWithoutQuotes], changes); } } }); } function getNamespaceImportName(declaration) { if (declaration.kind === 244) { var namedBindings = declaration.importClause && ts.isImportClause(declaration.importClause) && declaration.importClause.namedBindings; return namedBindings && namedBindings.kind === 246 ? namedBindings.name : undefined; } else { return declaration.name; } } function getExistingImportDeclarations(_a, checker, _b) { var moduleSymbol = _a.moduleSymbol, importKind = _a.importKind; var imports = _b.imports; return ts.mapDefined(imports, function (moduleSpecifier) { var i = ts.importFromModuleSpecifier(moduleSpecifier); return (i.kind === 244 || i.kind === 243) && checker.getSymbolAtLocation(moduleSpecifier) === moduleSymbol ? { declaration: i, importKind: importKind } : undefined; }); } function getCodeActionForNewImport(context, _a) { var moduleSpecifier = _a.moduleSpecifier, importKind = _a.importKind; var sourceFile = context.sourceFile, symbolName = context.symbolName, preferences = context.preferences; var moduleSpecifierWithoutQuotes = ts.stripQuotes(moduleSpecifier); var quotedModuleSpecifier = ts.makeStringLiteral(moduleSpecifierWithoutQuotes, ts.getQuotePreference(sourceFile, preferences)); var importDecl = importKind !== 3 ? ts.createImportDeclaration(undefined, undefined, createImportClauseOfKind(importKind, symbolName), quotedModuleSpecifier) : ts.createImportEqualsDeclaration(undefined, undefined, ts.createIdentifier(symbolName), ts.createExternalModuleReference(quotedModuleSpecifier)); var changes = ChangeTracker.with(context, function (t) { return ts.insertImport(t, sourceFile, importDecl); }); return createCodeAction(ts.Diagnostics.Import_0_from_module_1, [symbolName, moduleSpecifierWithoutQuotes], changes); } function createImportClauseOfKind(kind, symbolName) { var id = ts.createIdentifier(symbolName); switch (kind) { case 1: return ts.createImportClause(id, undefined); case 2: return ts.createImportClause(undefined, ts.createNamespaceImport(id)); case 0: return ts.createImportClause(undefined, ts.createNamedImports([ts.createImportSpecifier(undefined, id)])); default: ts.Debug.assertNever(kind); } } function getNewImportInfos(program, sourceFile, moduleSymbols, host, preferences) { var choicesForEachExportingModule = ts.flatMap(moduleSymbols, function (_a) { var moduleSymbol = _a.moduleSymbol, importKind = _a.importKind; var modulePathsGroups = ts.moduleSpecifiers.getModuleSpecifiers(moduleSymbol, program.getCompilerOptions(), sourceFile, host, program.getSourceFiles(), preferences); return modulePathsGroups.map(function (group) { return group.map(function (moduleSpecifier) { return ({ moduleSpecifier: moduleSpecifier, importKind: importKind }); }); }); }); return ts.flatten(choicesForEachExportingModule.sort(function (a, b) { return ts.first(a).moduleSpecifier.length - ts.first(b).moduleSpecifier.length; })); } function getCodeActionsForAddImport(exportInfos, ctx, existingImports, addNew) { var existingDeclaration = ts.firstDefined(existingImports, newImportInfoFromExistingSpecifier); var newImportInfos = existingDeclaration ? [existingDeclaration] : getNewImportInfos(ctx.program, ctx.sourceFile, exportInfos, ctx.host, ctx.preferences); for (var _i = 0, newImportInfos_1 = newImportInfos; _i < newImportInfos_1.length; _i++) { var info = newImportInfos_1[_i]; addNew.push(getCodeActionForNewImport(ctx, info)); } } function newImportInfoFromExistingSpecifier(_a) { var declaration = _a.declaration, importKind = _a.importKind; var expression = declaration.kind === 244 ? declaration.moduleSpecifier : declaration.moduleReference.kind === 254 ? declaration.moduleReference.expression : undefined; return expression && ts.isStringLiteral(expression) ? { moduleSpecifier: expression.text, importKind: importKind } : undefined; } function tryUpdateExistingImport(context, importClause, importKind) { var symbolName = context.symbolName, sourceFile = context.sourceFile; var name = importClause.name; var namedBindings = (importClause.kind !== 243 && importClause).namedBindings; switch (importKind) { case 1: return name ? undefined : ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile, importClause, ts.createImportClause(ts.createIdentifier(symbolName), namedBindings)); }); case 0: { var newImportSpecifier_1 = ts.createImportSpecifier(undefined, ts.createIdentifier(symbolName)); if (namedBindings && namedBindings.kind === 247 && namedBindings.elements.length !== 0) { return ChangeTracker.with(context, function (t) { return t.insertNodeInListAfter(sourceFile, namedBindings.elements[namedBindings.elements.length - 1], newImportSpecifier_1); }); } if (!namedBindings || namedBindings.kind === 247 && namedBindings.elements.length === 0) { return ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile, importClause, ts.createImportClause(name, ts.createNamedImports([newImportSpecifier_1]))); }); } return undefined; } case 2: return namedBindings ? undefined : ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile, importClause, ts.createImportClause(name, ts.createNamespaceImport(ts.createIdentifier(symbolName)))); }); case 3: return undefined; default: ts.Debug.assertNever(importKind); } } function getCodeActionForUseExistingNamespaceImport(namespacePrefix, context, symbolToken) { var symbolName = context.symbolName, sourceFile = context.sourceFile; var changes = ChangeTracker.with(context, function (tracker) { return tracker.replaceNode(sourceFile, symbolToken, ts.createPropertyAccess(ts.createIdentifier(namespacePrefix), symbolToken)); }); return createCodeAction(ts.Diagnostics.Change_0_to_1, [symbolName, namespacePrefix + "." + symbolName], changes); } function getActionsForUMDImport(context) { var token = ts.getTokenAtPosition(context.sourceFile, context.span.start, false); var checker = context.program.getTypeChecker(); var umdSymbol; if (ts.isIdentifier(token)) { umdSymbol = checker.getSymbolAtLocation(token); } if (!ts.isUMDExportSymbol(umdSymbol)) { var parent = token.parent; var isNodeOpeningLikeElement = ts.isJsxOpeningLikeElement(parent); if ((ts.isJsxOpeningLikeElement && parent.tagName === token) || parent.kind === 260) { umdSymbol = checker.resolveName(checker.getJsxNamespace(parent), isNodeOpeningLikeElement ? parent.tagName : parent, 67216319, false); } } if (ts.isUMDExportSymbol(umdSymbol)) { var symbol = checker.getAliasedSymbol(umdSymbol); if (symbol) { return getCodeActionsForImport([{ moduleSymbol: symbol, importKind: getUmdImportKind(context.program.getCompilerOptions()) }], convertToImportCodeFixContext(context, token, umdSymbol.name)); } } return undefined; } function getUmdImportKind(compilerOptions) { if (ts.getAllowSyntheticDefaultImports(compilerOptions)) { return 1; } var moduleKind = ts.getEmitModuleKind(compilerOptions); switch (moduleKind) { case ts.ModuleKind.AMD: case ts.ModuleKind.CommonJS: case ts.ModuleKind.UMD: return 3; case ts.ModuleKind.System: case ts.ModuleKind.ES2015: case ts.ModuleKind.ESNext: case ts.ModuleKind.None: return 2; default: return ts.Debug.assertNever(moduleKind); } } function getActionsForNonUMDImport(context) { var sourceFile = context.sourceFile, span = context.span, program = context.program, cancellationToken = context.cancellationToken; var checker = program.getTypeChecker(); var symbolToken = ts.getTokenAtPosition(sourceFile, span.start, false); var symbolName = ts.isJsxOpeningLikeElement(symbolToken.parent) && symbolToken.parent.tagName === symbolToken && (!ts.isIdentifier(symbolToken) || ts.isIntrinsicJsxName(symbolToken.text) || checker.resolveName(symbolToken.text, symbolToken, 67108863, false)) ? checker.getJsxNamespace() : ts.isIdentifier(symbolToken) ? symbolToken.text : undefined; if (!symbolName) return undefined; ts.Debug.assert(symbolName !== "default"); var addToExistingDeclaration = []; var addNewDeclaration = []; getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, checker, program).forEach(function (exportInfos) { getCodeActionsForImport_separateExistingAndNew(exportInfos, convertToImportCodeFixContext(context, symbolToken, symbolName), addToExistingDeclaration, addNewDeclaration); }); return addToExistingDeclaration.concat(addNewDeclaration); } function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, sourceFile, checker, program) { var originalSymbolToExportInfos = ts.createMultiMap(); function addSymbol(moduleSymbol, exportedSymbol, importKind) { originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { moduleSymbol: moduleSymbol, importKind: importKind }); } forEachExternalModuleToImportFrom(checker, sourceFile, program.getSourceFiles(), function (moduleSymbol) { cancellationToken.throwIfCancellationRequested(); var defaultExport = checker.tryGetMemberInModuleExports("default", moduleSymbol); if (defaultExport) { var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport); if ((localSymbol && localSymbol.escapedName === symbolName || getEscapedNameForExportDefault(defaultExport) === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, program.getCompilerOptions().target) === symbolName) && checkSymbolHasMeaning(localSymbol || defaultExport, currentTokenMeaning)) { addSymbol(moduleSymbol, localSymbol || defaultExport, 1); } } var exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExportsAndProperties(symbolName, moduleSymbol); if (exportSymbolWithIdenticalName && checkSymbolHasMeaning(exportSymbolWithIdenticalName, currentTokenMeaning)) { addSymbol(moduleSymbol, exportSymbolWithIdenticalName, 0); } function getEscapedNameForExportDefault(symbol) { return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) { if (ts.isExportAssignment(declaration)) { if (ts.isIdentifier(declaration.expression)) { return declaration.expression.escapedText; } } else if (ts.isExportSpecifier(declaration)) { ts.Debug.assert(declaration.name.escapedText === "default"); return declaration.propertyName && declaration.propertyName.escapedText; } }); } }); return originalSymbolToExportInfos; } function checkSymbolHasMeaning(_a, meaning) { var declarations = _a.declarations; return ts.some(declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); }); } function forEachExternalModuleToImportFrom(checker, from, allSourceFiles, cb) { forEachExternalModule(checker, allSourceFiles, function (module, sourceFile) { if (sourceFile === undefined || sourceFile !== from && isImportablePath(from.fileName, sourceFile.fileName)) { cb(module); } }); } codefix.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom; function forEachExternalModule(checker, allSourceFiles, cb) { for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) { var ambient = _a[_i]; cb(ambient, undefined); } for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) { var sourceFile = allSourceFiles_1[_b]; if (ts.isExternalOrCommonJsModule(sourceFile)) { cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile); } } } function isImportablePath(fromPath, toPath) { var toNodeModules = ts.forEachAncestorDirectory(toPath, function (ancestor) { return ts.getBaseFileName(ancestor) === "node_modules" ? ancestor : undefined; }); return toNodeModules === undefined || ts.startsWith(fromPath, ts.getDirectoryPath(toNodeModules)); } function moduleSymbolToValidIdentifier(moduleSymbol, target) { return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target); } codefix.moduleSymbolToValidIdentifier = moduleSymbolToValidIdentifier; function moduleSpecifierToValidIdentifier(moduleSpecifier, target) { var baseName = ts.getBaseFileName(ts.removeSuffix(moduleSpecifier, "/index")); var res = ""; var lastCharWasValid = true; var firstCharCode = baseName.charCodeAt(0); if (ts.isIdentifierStart(firstCharCode, target)) { res += String.fromCharCode(firstCharCode); } else { lastCharWasValid = false; } for (var i = 1; i < baseName.length; i++) { var ch = baseName.charCodeAt(i); var isValid = ts.isIdentifierPart(ch, target); if (isValid) { var char = String.fromCharCode(ch); if (!lastCharWasValid) { char = char.toUpperCase(); } res += char; } lastCharWasValid = isValid; } return !ts.isStringANonContextualKeyword(res) ? res || "_" : "_" + res; } codefix.moduleSpecifierToValidIdentifier = moduleSpecifierToValidIdentifier; })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "fixSpelling"; var errorCodes = [ ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_2.code, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile; var info = getInfo(sourceFile, context.span.start, context); if (!info) return undefined; var node = info.node, suggestion = info.suggestion; var target = context.host.getCompilationSettings().target; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, node, suggestion, target); }); return [codefix.createCodeFixAction("spelling", changes, [ts.Diagnostics.Change_spelling_to_0, suggestion], fixId, ts.Diagnostics.Fix_all_detected_spelling_errors)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var info = getInfo(diag.file, diag.start, context); var target = context.host.getCompilationSettings().target; if (info) doChange(changes, context.sourceFile, info.node, info.suggestion, target); }); }, }); function getInfo(sourceFile, pos, context) { var node = ts.getTokenAtPosition(sourceFile, pos, false); var checker = context.program.getTypeChecker(); var suggestion; if (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) { ts.Debug.assert(node.kind === 71); var containingType = checker.getTypeAtLocation(node.parent.expression); suggestion = checker.getSuggestionForNonexistentProperty(node, containingType); } else if (ts.isImportSpecifier(node.parent) && node.parent.name === node) { ts.Debug.assert(node.kind === 71); var importDeclaration = ts.findAncestor(node, ts.isImportDeclaration); var resolvedSourceFile = getResolvedSourceFileFromImportDeclaration(sourceFile, context, importDeclaration); if (resolvedSourceFile && resolvedSourceFile.symbol) { suggestion = checker.getSuggestionForNonexistentModule(node, resolvedSourceFile.symbol); } } else { var meaning = ts.getMeaningFromLocation(node); var name = ts.getTextOfNode(node); ts.Debug.assert(name !== undefined, "name should be defined"); suggestion = checker.getSuggestionForNonexistentSymbol(node, name, convertSemanticMeaningToSymbolFlags(meaning)); } return suggestion === undefined ? undefined : { node: node, suggestion: suggestion }; } function doChange(changes, sourceFile, node, suggestion, target) { if (!ts.isIdentifierText(suggestion, target) && ts.isPropertyAccessExpression(node.parent)) { changes.replaceNode(sourceFile, node.parent, ts.createElementAccess(node.parent.expression, ts.createLiteral(suggestion))); } else { changes.replaceNode(sourceFile, node, ts.createIdentifier(suggestion)); } } function convertSemanticMeaningToSymbolFlags(meaning) { var flags = 0; if (meaning & 4) { flags |= 1920; } if (meaning & 2) { flags |= 67901928; } if (meaning & 1) { flags |= 67216319; } return flags; } function getResolvedSourceFileFromImportDeclaration(sourceFile, context, importDeclaration) { if (!importDeclaration || !ts.isStringLiteralLike(importDeclaration.moduleSpecifier)) return undefined; var resolvedModule = ts.getResolvedModule(sourceFile, importDeclaration.moduleSpecifier.text); if (!resolvedModule) return undefined; return context.program.getSourceFile(resolvedModule.resolvedFileName); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixName = "addMissingMember"; var errorCodes = [ ts.Diagnostics.Property_0_does_not_exist_on_type_1.code, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code, ]; var fixId = "addMissingMember"; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var info = getInfo(context.sourceFile, context.span.start, context.program.getTypeChecker()); if (!info) return undefined; var classDeclaration = info.classDeclaration, classDeclarationSourceFile = info.classDeclarationSourceFile, inJs = info.inJs, makeStatic = info.makeStatic, token = info.token, call = info.call; var methodCodeAction = call && getActionForMethodDeclaration(context, classDeclarationSourceFile, classDeclaration, token, call, makeStatic, inJs, context.preferences); var addMember = inJs ? ts.singleElementArray(getActionsForAddMissingMemberInJavaScriptFile(context, classDeclarationSourceFile, classDeclaration, token.text, makeStatic)) : getActionsForAddMissingMemberInTypeScriptFile(context, classDeclarationSourceFile, classDeclaration, token, makeStatic); return ts.concatenate(ts.singleElementArray(methodCodeAction), addMember); }, fixIds: [fixId], getAllCodeActions: function (context) { var seenNames = ts.createMap(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var program = context.program, preferences = context.preferences; var info = getInfo(diag.file, diag.start, program.getTypeChecker()); if (!info) return; var classDeclaration = info.classDeclaration, classDeclarationSourceFile = info.classDeclarationSourceFile, inJs = info.inJs, makeStatic = info.makeStatic, token = info.token, call = info.call; if (!ts.addToSeen(seenNames, token.text)) { return; } if (call) { addMethodDeclaration(changes, classDeclarationSourceFile, classDeclaration, token, call, makeStatic, inJs, preferences); } else { if (inJs) { addMissingMemberInJs(changes, classDeclarationSourceFile, classDeclaration, token.text, makeStatic); } else { var typeNode = getTypeNode(program.getTypeChecker(), classDeclaration, token); addPropertyDeclaration(changes, classDeclarationSourceFile, classDeclaration, token.text, typeNode, makeStatic); } } }); }, }); function getInfo(tokenSourceFile, tokenPos, checker) { var token = ts.getTokenAtPosition(tokenSourceFile, tokenPos, false); if (!ts.isIdentifier(token)) { return undefined; } var parent = token.parent; if (!ts.isPropertyAccessExpression(parent)) return undefined; var leftExpressionType = ts.skipConstraint(checker.getTypeAtLocation(parent.expression)); var symbol = leftExpressionType.symbol; var classDeclaration = symbol && symbol.declarations && ts.find(symbol.declarations, ts.isClassLike); if (!classDeclaration) return undefined; var makeStatic = leftExpressionType.target !== checker.getDeclaredTypeOfSymbol(symbol); var classDeclarationSourceFile = classDeclaration.getSourceFile(); var inJs = ts.isSourceFileJavaScript(classDeclarationSourceFile); var call = ts.tryCast(parent.parent, ts.isCallExpression); return { token: token, classDeclaration: classDeclaration, makeStatic: makeStatic, classDeclarationSourceFile: classDeclarationSourceFile, inJs: inJs, call: call }; } function getActionsForAddMissingMemberInJavaScriptFile(context, classDeclarationSourceFile, classDeclaration, tokenName, makeStatic) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addMissingMemberInJs(t, classDeclarationSourceFile, classDeclaration, tokenName, makeStatic); }); return changes.length === 0 ? undefined : codefix.createCodeFixAction(fixName, changes, [makeStatic ? ts.Diagnostics.Initialize_static_property_0 : ts.Diagnostics.Initialize_property_0_in_the_constructor, tokenName], fixId, ts.Diagnostics.Add_all_missing_members); } function addMissingMemberInJs(changeTracker, classDeclarationSourceFile, classDeclaration, tokenName, makeStatic) { if (makeStatic) { if (classDeclaration.kind === 205) { return; } var className = classDeclaration.name.getText(); var staticInitialization = initializePropertyToUndefined(ts.createIdentifier(className), tokenName); changeTracker.insertNodeAfter(classDeclarationSourceFile, classDeclaration, staticInitialization); } else { var classConstructor = ts.getFirstConstructorWithBody(classDeclaration); if (!classConstructor) { return; } var propertyInitialization = initializePropertyToUndefined(ts.createThis(), tokenName); changeTracker.insertNodeAtConstructorEnd(classDeclarationSourceFile, classConstructor, propertyInitialization); } } function initializePropertyToUndefined(obj, propertyName) { return ts.createStatement(ts.createAssignment(ts.createPropertyAccess(obj, propertyName), ts.createIdentifier("undefined"))); } function getActionsForAddMissingMemberInTypeScriptFile(context, classDeclarationSourceFile, classDeclaration, token, makeStatic) { var typeNode = getTypeNode(context.program.getTypeChecker(), classDeclaration, token); var addProp = createAddPropertyDeclarationAction(context, classDeclarationSourceFile, classDeclaration, makeStatic, token.text, typeNode); return makeStatic ? [addProp] : [addProp, createAddIndexSignatureAction(context, classDeclarationSourceFile, classDeclaration, token.text, typeNode)]; } function getTypeNode(checker, classDeclaration, token) { var typeNode; if (token.parent.parent.kind === 200) { var binaryExpression = token.parent.parent; var otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left; var widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression))); typeNode = checker.typeToTypeNode(widenedType, classDeclaration); } return typeNode || ts.createKeywordTypeNode(119); } function createAddPropertyDeclarationAction(context, classDeclarationSourceFile, classDeclaration, makeStatic, tokenName, typeNode) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addPropertyDeclaration(t, classDeclarationSourceFile, classDeclaration, tokenName, typeNode, makeStatic); }); return codefix.createCodeFixAction(fixName, changes, [makeStatic ? ts.Diagnostics.Declare_static_property_0 : ts.Diagnostics.Declare_property_0, tokenName], fixId, ts.Diagnostics.Add_all_missing_members); } function addPropertyDeclaration(changeTracker, classDeclarationSourceFile, classDeclaration, tokenName, typeNode, makeStatic) { var property = ts.createProperty(undefined, makeStatic ? [ts.createToken(115)] : undefined, tokenName, undefined, typeNode, undefined); var lastProp = getNodeToInsertPropertyAfter(classDeclaration); if (lastProp) { changeTracker.insertNodeAfter(classDeclarationSourceFile, lastProp, property); } else { changeTracker.insertNodeAtClassStart(classDeclarationSourceFile, classDeclaration, property); } } function getNodeToInsertPropertyAfter(cls) { var res; for (var _i = 0, _a = cls.members; _i < _a.length; _i++) { var member = _a[_i]; if (!ts.isPropertyDeclaration(member)) break; res = member; } return res; } function createAddIndexSignatureAction(context, classDeclarationSourceFile, classDeclaration, tokenName, typeNode) { var stringTypeNode = ts.createKeywordTypeNode(137); var indexingParameter = ts.createParameter(undefined, undefined, undefined, "x", undefined, stringTypeNode, undefined); var indexSignature = ts.createIndexSignature(undefined, undefined, [indexingParameter], typeNode); var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.insertNodeAtClassStart(classDeclarationSourceFile, classDeclaration, indexSignature); }); return codefix.createCodeFixActionNoFixId(fixName, changes, [ts.Diagnostics.Add_index_signature_for_property_0, tokenName]); } function getActionForMethodDeclaration(context, classDeclarationSourceFile, classDeclaration, token, callExpression, makeStatic, inJs, preferences) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addMethodDeclaration(t, classDeclarationSourceFile, classDeclaration, token, callExpression, makeStatic, inJs, preferences); }); return codefix.createCodeFixAction(fixName, changes, [makeStatic ? ts.Diagnostics.Declare_static_method_0 : ts.Diagnostics.Declare_method_0, token.text], fixId, ts.Diagnostics.Add_all_missing_members); } function addMethodDeclaration(changeTracker, classDeclarationSourceFile, classDeclaration, token, callExpression, makeStatic, inJs, preferences) { var methodDeclaration = codefix.createMethodFromCallExpression(callExpression, token.text, inJs, makeStatic, preferences); var containingMethodDeclaration = ts.getAncestor(callExpression, 154); if (containingMethodDeclaration && containingMethodDeclaration.parent === classDeclaration) { changeTracker.insertNodeAfter(classDeclarationSourceFile, containingMethodDeclaration, methodDeclaration); } else { changeTracker.insertNodeAtClassStart(classDeclarationSourceFile, classDeclaration, methodDeclaration); } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "fixCannotFindModule"; var errorCodeCannotFindModule = ts.Diagnostics.Cannot_find_module_0.code; var errorCodes = [ errorCodeCannotFindModule, ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var host = context.host, sourceFile = context.sourceFile, start = context.span.start; var packageName = getTypesPackageNameToInstall(host, sourceFile, start, context.errorCode); return packageName === undefined ? [] : [codefix.createCodeFixAction(fixId, [], [ts.Diagnostics.Install_0, packageName], fixId, ts.Diagnostics.Install_all_missing_types_packages, getCommand(sourceFile.fileName, packageName))]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (_, diag, commands) { var pkg = getTypesPackageNameToInstall(context.host, diag.file, diag.start, diag.code); if (pkg) { commands.push(getCommand(diag.file.fileName, pkg)); } }); }, }); function getCommand(fileName, packageName) { return { type: "install package", file: fileName, packageName: packageName }; } function getTypesPackageNameToInstall(host, sourceFile, pos, diagCode) { var moduleName = ts.cast(ts.getTokenAtPosition(sourceFile, pos, false), ts.isStringLiteral).text; var packageName = ts.getPackageName(moduleName).packageName; return diagCode === errorCodeCannotFindModule ? (ts.JsTyping.nodeCoreModules.has(packageName) ? "@types/node" : undefined) : (host.isKnownTypesPackageName(packageName) ? ts.getTypesPackageName(packageName) : undefined); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var errorCodes = [ ts.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code, ]; var fixId = "fixClassDoesntImplementInheritedAbstractMember"; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var program = context.program, sourceFile = context.sourceFile, span = context.span; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addMissingMembers(getClass(sourceFile, span.start), sourceFile, program.getTypeChecker(), t, context.preferences); }); return changes.length === 0 ? undefined : [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Implement_inherited_abstract_class, fixId, ts.Diagnostics.Implement_all_inherited_abstract_classes)]; }, fixIds: [fixId], getAllCodeActions: function (context) { var seenClassDeclarations = ts.createMap(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var classDeclaration = getClass(diag.file, diag.start); if (ts.addToSeen(seenClassDeclarations, ts.getNodeId(classDeclaration))) { addMissingMembers(classDeclaration, context.sourceFile, context.program.getTypeChecker(), changes, context.preferences); } }); }, }); function getClass(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); return ts.cast(token.parent, ts.isClassLike); } function addMissingMembers(classDeclaration, sourceFile, checker, changeTracker, preferences) { var extendsNode = ts.getClassExtendsHeritageClauseElement(classDeclaration); var instantiatedExtendsType = checker.getTypeAtLocation(extendsNode); var abstractAndNonPrivateExtendsSymbols = checker.getPropertiesOfType(instantiatedExtendsType).filter(symbolPointsToNonPrivateAndAbstractMember); codefix.createMissingMemberNodes(classDeclaration, abstractAndNonPrivateExtendsSymbols, checker, preferences, function (member) { return changeTracker.insertNodeAtClassStart(sourceFile, classDeclaration, member); }); } function symbolPointsToNonPrivateAndAbstractMember(symbol) { var flags = ts.getModifierFlags(ts.first(symbol.getDeclarations())); return !(flags & 8) && !!(flags & 128); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "classSuperMustPrecedeThisAccess"; var errorCodes = [ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, span = context.span; var nodes = getNodes(sourceFile, span.start); if (!nodes) return undefined; var constructor = nodes.constructor, superCall = nodes.superCall; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, constructor, superCall); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Make_super_call_the_first_statement_in_the_constructor, fixId, ts.Diagnostics.Make_all_super_calls_the_first_statement_in_their_constructor)]; }, fixIds: [fixId], getAllCodeActions: function (context) { var sourceFile = context.sourceFile; var seenClasses = ts.createMap(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var nodes = getNodes(diag.file, diag.start); if (!nodes) return; var constructor = nodes.constructor, superCall = nodes.superCall; if (ts.addToSeen(seenClasses, ts.getNodeId(constructor.parent))) { doChange(changes, sourceFile, constructor, superCall); } }); }, }); function doChange(changes, sourceFile, constructor, superCall) { changes.insertNodeAtConstructorStart(sourceFile, constructor, superCall); changes.deleteNode(sourceFile, superCall); } function getNodes(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); if (token.kind !== 99) return undefined; var constructor = ts.getContainingFunction(token); var superCall = findSuperCall(constructor.body); return superCall && !superCall.expression.arguments.some(function (arg) { return ts.isPropertyAccessExpression(arg) && arg.expression === token; }) ? { constructor: constructor, superCall: superCall } : undefined; } function findSuperCall(n) { return ts.isExpressionStatement(n) && ts.isSuperCall(n.expression) ? n : ts.isFunctionLike(n) ? undefined : ts.forEachChild(n, findSuperCall); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "constructorForDerivedNeedSuperCall"; var errorCodes = [ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, span = context.span; var ctr = getNode(sourceFile, span.start); var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, ctr); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Add_missing_super_call, fixId, ts.Diagnostics.Add_all_missing_super_calls)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return doChange(changes, context.sourceFile, getNode(diag.file, diag.start)); }); }, }); function getNode(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); ts.Debug.assert(token.kind === 123); return token.parent; } function doChange(changes, sourceFile, ctr) { var superCall = ts.createStatement(ts.createCall(ts.createSuper(), undefined, ts.emptyArray)); changes.insertNodeAtConstructorStart(sourceFile, ctr, superCall); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "extendsInterfaceBecomesImplements"; var errorCodes = [ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile; var nodes = getNodes(sourceFile, context.span.start); if (!nodes) return undefined; var extendsToken = nodes.extendsToken, heritageClauses = nodes.heritageClauses; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChanges(t, sourceFile, extendsToken, heritageClauses); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Change_extends_to_implements, fixId, ts.Diagnostics.Change_all_extended_interfaces_to_implements)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var nodes = getNodes(diag.file, diag.start); if (nodes) doChanges(changes, diag.file, nodes.extendsToken, nodes.heritageClauses); }); }, }); function getNodes(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); var heritageClauses = ts.getContainingClass(token).heritageClauses; var extendsToken = heritageClauses[0].getFirstToken(); return extendsToken.kind === 85 ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined; } function doChanges(changes, sourceFile, extendsToken, heritageClauses) { changes.replaceNode(sourceFile, extendsToken, ts.createToken(108)); if (heritageClauses.length === 2 && heritageClauses[0].token === 85 && heritageClauses[1].token === 108) { var implementsToken = heritageClauses[1].getFirstToken(); var implementsFullStart = implementsToken.getFullStart(); changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, ts.createToken(26)); var text = sourceFile.text; var end = implementsToken.end; while (end < text.length && ts.isWhiteSpaceSingleLine(text.charCodeAt(end))) { end++; } changes.deleteRange(sourceFile, { pos: implementsToken.getStart(), end: end }); } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "forgottenThisPropertyAccess"; var didYouMeanStaticMemberCode = ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code; var errorCodes = [ ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code, didYouMeanStaticMemberCode, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile; var info = getInfo(sourceFile, context.span.start, context.errorCode); if (!info) { return undefined; } var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, info); }); return [codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Add_0_to_unresolved_variable, info.className || "this"], fixId, ts.Diagnostics.Add_qualifier_to_all_unresolved_variables_matching_a_member_name)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var info = getInfo(diag.file, diag.start, diag.code); if (info) doChange(changes, context.sourceFile, info); }); }, }); function getInfo(sourceFile, pos, diagCode) { var node = ts.getTokenAtPosition(sourceFile, pos, false); if (!ts.isIdentifier(node)) return undefined; return { node: node, className: diagCode === didYouMeanStaticMemberCode ? ts.getContainingClass(node).name.text : undefined }; } function doChange(changes, sourceFile, _a) { var node = _a.node, className = _a.className; ts.suppressLeadingAndTrailingTrivia(node); changes.replaceNode(sourceFile, node, ts.createPropertyAccess(className ? ts.createIdentifier(className) : ts.createThis(), node)); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixName = "unusedIdentifier"; var fixIdPrefix = "unusedIdentifier_prefix"; var fixIdDelete = "unusedIdentifier_delete"; var errorCodes = [ ts.Diagnostics._0_is_declared_but_its_value_is_never_read.code, ts.Diagnostics._0_is_declared_but_never_used.code, ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code, ts.Diagnostics.All_imports_in_import_declaration_are_unused.code, ts.Diagnostics.All_destructured_elements_are_unused.code, ts.Diagnostics.All_variables_are_unused.code, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var errorCode = context.errorCode, sourceFile = context.sourceFile, program = context.program; var checker = program.getTypeChecker(); var startToken = ts.getTokenAtPosition(sourceFile, context.span.start, false); var importDecl = tryGetFullImport(startToken); if (importDecl) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.deleteNode(sourceFile, importDecl); }); return [codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Remove_import_from_0, ts.showModuleSpecifier(importDecl)], fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations)]; } var delDestructure = ts.textChanges.ChangeTracker.with(context, function (t) { return tryDeleteFullDestructure(t, sourceFile, startToken, undefined, checker, false); }); if (delDestructure.length) { return [codefix.createCodeFixAction(fixName, delDestructure, ts.Diagnostics.Remove_destructuring, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations)]; } var delVar = ts.textChanges.ChangeTracker.with(context, function (t) { return tryDeleteFullVariableStatement(t, sourceFile, startToken, undefined); }); if (delVar.length) { return [codefix.createCodeFixAction(fixName, delVar, ts.Diagnostics.Remove_variable_statement, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations)]; } var token = getToken(sourceFile, ts.textSpanEnd(context.span)); var result = []; var deletion = ts.textChanges.ChangeTracker.with(context, function (t) { return tryDeleteDeclaration(t, sourceFile, token, undefined, checker, false); }); if (deletion.length) { result.push(codefix.createCodeFixAction(fixName, deletion, [ts.Diagnostics.Remove_declaration_for_Colon_0, token.getText(sourceFile)], fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations)); } var prefix = ts.textChanges.ChangeTracker.with(context, function (t) { return tryPrefixDeclaration(t, errorCode, sourceFile, token); }); if (prefix.length) { result.push(codefix.createCodeFixAction(fixName, prefix, [ts.Diagnostics.Prefix_0_with_an_underscore, token.getText(sourceFile)], fixIdPrefix, ts.Diagnostics.Prefix_all_unused_declarations_with_where_possible)); } return result; }, fixIds: [fixIdPrefix, fixIdDelete], getAllCodeActions: function (context) { var deleted = new ts.NodeSet(); var sourceFile = context.sourceFile, program = context.program; var checker = program.getTypeChecker(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var startToken = ts.getTokenAtPosition(sourceFile, diag.start, false); var token = ts.findPrecedingToken(ts.textSpanEnd(diag), diag.file); switch (context.fixId) { case fixIdPrefix: if (ts.isIdentifier(token) && canPrefix(token)) { tryPrefixDeclaration(changes, diag.code, sourceFile, token); } break; case fixIdDelete: if (deleted.some(function (d) { return ts.rangeContainsPosition(d, diag.start); })) break; var importDecl = tryGetFullImport(startToken); if (importDecl) { changes.deleteNode(sourceFile, importDecl); } else if (!tryDeleteFullDestructure(changes, sourceFile, startToken, deleted, checker, true) && !tryDeleteFullVariableStatement(changes, sourceFile, startToken, deleted)) { tryDeleteDeclaration(changes, sourceFile, token, deleted, checker, true); } break; default: ts.Debug.fail(JSON.stringify(context.fixId)); } }); }, }); function tryGetFullImport(startToken) { return startToken.kind === 91 ? ts.tryCast(startToken.parent, ts.isImportDeclaration) : undefined; } function tryDeleteFullDestructure(changes, sourceFile, startToken, deletedAncestors, checker, isFixAll) { if (startToken.kind !== 17 || !ts.isObjectBindingPattern(startToken.parent)) return false; var decl = ts.cast(startToken.parent, ts.isObjectBindingPattern).parent; switch (decl.kind) { case 232: tryDeleteVariableDeclaration(changes, sourceFile, decl, deletedAncestors); break; case 149: if (!mayDeleteParameter(decl, checker, isFixAll)) break; if (deletedAncestors) deletedAncestors.add(decl); changes.deleteNodeInList(sourceFile, decl); break; case 182: if (deletedAncestors) deletedAncestors.add(decl); changes.deleteNode(sourceFile, decl); break; default: return ts.Debug.assertNever(decl); } return true; } function tryDeleteFullVariableStatement(changes, sourceFile, startToken, deletedAncestors) { var declarationList = ts.tryCast(startToken.parent, ts.isVariableDeclarationList); if (declarationList && declarationList.getChildren(sourceFile)[0] === startToken) { if (deletedAncestors) deletedAncestors.add(declarationList); changes.deleteNode(sourceFile, declarationList.parent.kind === 214 ? declarationList.parent : declarationList); return true; } return false; } function getToken(sourceFile, pos) { var token = ts.findPrecedingToken(pos, sourceFile, undefined, true); return token.kind === 22 ? ts.findPrecedingToken(pos - 1, sourceFile) : token; } function tryPrefixDeclaration(changes, errorCode, sourceFile, token) { if (errorCode !== ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code && ts.isIdentifier(token) && canPrefix(token)) { changes.replaceNode(sourceFile, token, ts.createIdentifier("_" + token.text)); } } function canPrefix(token) { switch (token.parent.kind) { case 149: return true; case 232: { var varDecl = token.parent; switch (varDecl.parent.parent.kind) { case 222: case 221: return true; } } } return false; } function tryDeleteDeclaration(changes, sourceFile, token, deletedAncestors, checker, isFixAll) { tryDeleteDeclarationWorker(changes, sourceFile, token, deletedAncestors, checker, isFixAll); if (ts.isIdentifier(token)) deleteAssignments(changes, sourceFile, token, checker); } function deleteAssignments(changes, sourceFile, token, checker) { ts.FindAllReferences.Core.eachSymbolReferenceInFile(token, checker, sourceFile, function (ref) { if (ref.parent.kind === 185) ref = ref.parent; if (ref.parent.kind === 200 && ref.parent.parent.kind === 216) { changes.deleteNode(sourceFile, ref.parent.parent); } }); } function tryDeleteDeclarationWorker(changes, sourceFile, token, deletedAncestors, checker, isFixAll) { var parent = token.parent; switch (parent.kind) { case 232: tryDeleteVariableDeclaration(changes, sourceFile, parent, deletedAncestors); break; case 148: var typeParameters = ts.getEffectiveTypeParameterDeclarations(parent.parent); if (typeParameters.length === 1) { var _a = ts.cast(typeParameters, ts.isNodeArray), pos = _a.pos, end = _a.end; var previousToken = ts.getTokenAtPosition(sourceFile, pos - 1, false); var nextToken = ts.getTokenAtPosition(sourceFile, end, false); ts.Debug.assert(previousToken.kind === 27); ts.Debug.assert(nextToken.kind === 29); changes.deleteNodeRange(sourceFile, previousToken, nextToken); } else { changes.deleteNodeInList(sourceFile, parent); } break; case 149: if (!mayDeleteParameter(parent, checker, isFixAll)) break; var oldFunction = parent.parent; if (ts.isArrowFunction(oldFunction) && oldFunction.parameters.length === 1) { var newFunction = ts.updateArrowFunction(oldFunction, oldFunction.modifiers, oldFunction.typeParameters, undefined, oldFunction.type, oldFunction.equalsGreaterThanToken, oldFunction.body); ts.suppressLeadingAndTrailingTrivia(newFunction); changes.replaceNode(sourceFile, oldFunction, newFunction); } else { changes.deleteNodeInList(sourceFile, parent); } break; case 182: { var pattern = parent.parent; var preserveComma = pattern.kind === 181 && parent !== ts.last(pattern.elements); if (preserveComma) { changes.deleteNode(sourceFile, parent); } else { changes.deleteNodeInList(sourceFile, parent); } break; } case 243: var importEquals = ts.getAncestor(token, 243); changes.deleteNode(sourceFile, importEquals); break; case 248: var namedImports = parent.parent; if (namedImports.elements.length === 1) { tryDeleteNamedImportBinding(changes, sourceFile, namedImports); } else { changes.deleteNodeInList(sourceFile, parent); } break; case 245: var importClause = parent; if (!importClause.namedBindings) { changes.deleteNode(sourceFile, ts.getAncestor(importClause, 244)); } else { var start = importClause.name.getStart(sourceFile); var nextToken = ts.getTokenAtPosition(sourceFile, importClause.name.end, false); if (nextToken && nextToken.kind === 26) { var end = ts.skipTrivia(sourceFile.text, nextToken.end, false, true); changes.deleteRange(sourceFile, { pos: start, end: end }); } else { changes.deleteNode(sourceFile, importClause.name); } } break; case 246: tryDeleteNamedImportBinding(changes, sourceFile, parent); break; default: if (ts.isDeclarationName(token)) { if (deletedAncestors) deletedAncestors.add(token.parent); changes.deleteNode(sourceFile, token.parent); } else if (ts.isLiteralComputedPropertyDeclarationName(token)) { if (deletedAncestors) deletedAncestors.add(token.parent.parent); changes.deleteNode(sourceFile, token.parent.parent); } break; } } function tryDeleteNamedImportBinding(changes, sourceFile, namedBindings) { if (namedBindings.parent.name) { var previousToken = ts.getTokenAtPosition(sourceFile, namedBindings.pos - 1, false); if (previousToken && previousToken.kind === 26) { changes.deleteRange(sourceFile, { pos: previousToken.getStart(), end: namedBindings.end }); } } else { var importDecl = ts.getAncestor(namedBindings, 244); changes.deleteNode(sourceFile, importDecl); } } function tryDeleteVariableDeclaration(changes, sourceFile, varDecl, deletedAncestors) { switch (varDecl.parent.parent.kind) { case 220: { var forStatement = varDecl.parent.parent; var forInitializer = forStatement.initializer; if (forInitializer.declarations.length === 1) { if (deletedAncestors) deletedAncestors.add(forInitializer); changes.deleteNode(sourceFile, forInitializer); } else { if (deletedAncestors) deletedAncestors.add(varDecl); changes.deleteNodeInList(sourceFile, varDecl); } break; } case 222: var forOfStatement = varDecl.parent.parent; ts.Debug.assert(forOfStatement.initializer.kind === 233); var forOfInitializer = forOfStatement.initializer; if (deletedAncestors) deletedAncestors.add(forOfInitializer.declarations[0]); changes.replaceNode(sourceFile, forOfInitializer.declarations[0], ts.createObjectLiteral()); break; case 221: case 230: break; default: var variableStatement = varDecl.parent.parent; if (variableStatement.declarationList.declarations.length === 1) { if (deletedAncestors) deletedAncestors.add(variableStatement); changes.deleteNode(sourceFile, variableStatement); } else { if (deletedAncestors) deletedAncestors.add(varDecl); changes.deleteNodeInList(sourceFile, varDecl); } } } function mayDeleteParameter(p, checker, isFixAll) { var parent = p.parent; switch (parent.kind) { case 154: var symbol = checker.getSymbolAtLocation(parent.name); if (ts.isMemberSymbolInBaseType(symbol, checker)) return false; case 155: case 234: case 192: case 193: { var parameters = parent.parameters; var index = parameters.indexOf(p); ts.Debug.assert(index !== -1); return isFixAll ? parameters.slice(index + 1).every(function (p) { return p.name.kind === 71 && !p.symbol.isReferenced; }) : index === parameters.length - 1; } case 157: return false; default: return ts.Debug.failBadSyntaxKind(parent); } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "fixUnreachableCode"; var errorCodes = [ts.Diagnostics.Unreachable_code_detected.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, context.span.start); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Remove_unreachable_code, fixId, ts.Diagnostics.Remove_all_unreachable_code)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return doChange(changes, diag.file, diag.start); }); }, }); function doChange(changes, sourceFile, start) { var token = ts.getTokenAtPosition(sourceFile, start, false); var statement = ts.findAncestor(token, ts.isStatement); ts.Debug.assert(statement.getStart(sourceFile) === token.getStart(sourceFile)); var container = (ts.isBlock(statement.parent) ? statement.parent : statement).parent; switch (container.kind) { case 217: if (container.elseStatement) { if (ts.isBlock(statement.parent)) { changes.deleteNodeRange(sourceFile, ts.first(statement.parent.statements), ts.last(statement.parent.statements)); } else { changes.replaceNode(sourceFile, statement, ts.createBlock(ts.emptyArray)); } break; } case 219: case 220: changes.deleteNode(sourceFile, container); break; default: if (ts.isBlock(statement.parent)) { split(sliceAfter(statement.parent.statements, statement), shouldRemove, function (start, end) { return changes.deleteNodeRange(sourceFile, start, end); }); } else { changes.deleteNode(sourceFile, statement); } } } function shouldRemove(s) { return !ts.isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !(ts.isVariableStatement(s) && !(ts.getCombinedNodeFlags(s) & (1 | 2)) && s.declarationList.declarations.some(function (d) { return !d.initializer; })); } function isPurelyTypeDeclaration(s) { switch (s.kind) { case 236: case 237: return true; case 239: return ts.getModuleInstanceState(s) !== 1; case 238: return ts.hasModifier(s, 2048); default: return false; } } function sliceAfter(arr, value) { var index = arr.indexOf(value); ts.Debug.assert(index !== -1); return arr.slice(index); } function split(arr, pred, cb) { ts.getRangesWhere(arr, pred, function (start, afterEnd) { return cb(arr[start], arr[afterEnd - 1]); }); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "fixUnusedLabel"; var errorCodes = [ts.Diagnostics.Unused_label.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, context.span.start); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Remove_unused_label, fixId, ts.Diagnostics.Remove_all_unused_labels)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return doChange(changes, diag.file, diag.start); }); }, }); function doChange(changes, sourceFile, start) { var token = ts.getTokenAtPosition(sourceFile, start, false); var labeledStatement = ts.cast(token.parent, ts.isLabeledStatement); var pos = token.getStart(sourceFile); var statementPos = labeledStatement.statement.getStart(sourceFile); var end = ts.positionsAreOnSameLine(pos, statementPos, sourceFile) ? statementPos : ts.skipTrivia(sourceFile.text, ts.findChildOfKind(labeledStatement, 56, sourceFile).end, true); changes.deleteRange(sourceFile, { pos: pos, end: end }); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixIdPlain = "fixJSDocTypes_plain"; var fixIdNullable = "fixJSDocTypes_nullable"; var errorCodes = [ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile; var checker = context.program.getTypeChecker(); var info = getInfo(sourceFile, context.span.start, checker); if (!info) return undefined; var typeNode = info.typeNode, type = info.type; var original = typeNode.getText(sourceFile); var actions = [fix(type, fixIdPlain, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)]; if (typeNode.kind === 281) { actions.push(fix(checker.getNullableType(type, 8192), fixIdNullable, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types)); } return actions; function fix(type, fixId, fixAllDescription) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, typeNode, type, checker); }); return codefix.createCodeFixAction("jdocTypes", changes, [ts.Diagnostics.Change_0_to_1, original, checker.typeToString(type)], fixId, fixAllDescription); } }, fixIds: [fixIdPlain, fixIdNullable], getAllCodeActions: function (context) { var fixId = context.fixId, program = context.program, sourceFile = context.sourceFile; var checker = program.getTypeChecker(); return codefix.codeFixAll(context, errorCodes, function (changes, err) { var info = getInfo(err.file, err.start, checker); if (!info) return; var typeNode = info.typeNode, type = info.type; var fixedType = typeNode.kind === 281 && fixId === fixIdNullable ? checker.getNullableType(type, 8192) : type; doChange(changes, sourceFile, typeNode, fixedType, checker); }); } }); function doChange(changes, sourceFile, oldTypeNode, newType, checker) { changes.replaceNode(sourceFile, oldTypeNode, checker.typeToTypeNode(newType, oldTypeNode)); } function getInfo(sourceFile, pos, checker) { var decl = ts.findAncestor(ts.getTokenAtPosition(sourceFile, pos, false), isTypeContainer); var typeNode = decl && decl.type; return typeNode && { typeNode: typeNode, type: checker.getTypeFromTypeNode(typeNode) }; } function isTypeContainer(node) { switch (node.kind) { case 208: case 158: case 159: case 234: case 156: case 160: case 177: case 154: case 153: case 149: case 152: case 151: case 157: case 237: case 190: case 232: return true; default: return false; } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "fixAwaitInSyncFunction"; var errorCodes = [ ts.Diagnostics.await_expression_is_only_allowed_within_an_async_function.code, ts.Diagnostics.A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator.code, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, span = context.span; var nodes = getNodes(sourceFile, span.start); if (!nodes) return undefined; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, nodes); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Add_async_modifier_to_containing_function, fixId, ts.Diagnostics.Add_all_missing_async_modifiers)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var nodes = getNodes(diag.file, diag.start); if (!nodes) return; doChange(changes, context.sourceFile, nodes); }); }, }); function getReturnType(expr) { if (expr.type) { return expr.type; } if (ts.isVariableDeclaration(expr.parent) && expr.parent.type && ts.isFunctionTypeNode(expr.parent.type)) { return expr.parent.type.type; } } function getNodes(sourceFile, start) { var token = ts.getTokenAtPosition(sourceFile, start, false); var containingFunction = ts.getContainingFunction(token); if (!containingFunction) { return; } var insertBefore; switch (containingFunction.kind) { case 154: insertBefore = containingFunction.name; break; case 234: case 192: insertBefore = ts.findChildOfKind(containingFunction, 89, sourceFile); break; case 193: insertBefore = ts.findChildOfKind(containingFunction, 19, sourceFile) || ts.first(containingFunction.parameters); break; default: return; } return insertBefore && { insertBefore: insertBefore, returnType: getReturnType(containingFunction) }; } function doChange(changes, sourceFile, _a) { var insertBefore = _a.insertBefore, returnType = _a.returnType; if (returnType) { var entityName = ts.getEntityNameFromTypeNode(returnType); if (!entityName || entityName.kind !== 71 || entityName.text !== "Promise") { changes.replaceNode(sourceFile, returnType, ts.createTypeReferenceNode("Promise", ts.createNodeArray([returnType]))); } } changes.insertModifierBefore(sourceFile, 120, insertBefore); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixName = "disableJsDiagnostics"; var fixId = "disableJsDiagnostics"; var errorCodes = ts.mapDefined(Object.keys(ts.Diagnostics), function (key) { var diag = ts.Diagnostics[key]; return diag.category === ts.DiagnosticCategory.Error ? diag.code : undefined; }); codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, program = context.program, span = context.span, host = context.host, formatContext = context.formatContext; if (!ts.isInJavaScriptFile(sourceFile) || !ts.isCheckJsEnabledForFile(sourceFile, program.getCompilerOptions())) { return undefined; } var fixes = [ codefix.createCodeFixActionNoFixId(fixName, [codefix.createFileTextChanges(sourceFile.fileName, [ ts.createTextChange(sourceFile.checkJsDirective ? ts.createTextSpanFromBounds(sourceFile.checkJsDirective.pos, sourceFile.checkJsDirective.end) : ts.createTextSpan(0, 0), "// @ts-nocheck" + ts.getNewLineOrDefaultFromHost(host, formatContext.options)), ])], ts.Diagnostics.Disable_checking_for_this_file), ]; if (ts.textChanges.isValidLocationToAddComment(sourceFile, span.start)) { fixes.unshift(codefix.createCodeFixAction(fixName, ts.textChanges.ChangeTracker.with(context, function (t) { return makeChange(t, sourceFile, span.start); }), ts.Diagnostics.Ignore_this_error_message, fixId, ts.Diagnostics.Add_ts_ignore_to_all_error_messages)); } return fixes; }, fixIds: [fixId], getAllCodeActions: function (context) { var seenLines = ts.createMap(); return codefix.codeFixAll(context, errorCodes, function (changes, diag) { if (ts.textChanges.isValidLocationToAddComment(diag.file, diag.start)) { makeChange(changes, diag.file, diag.start, seenLines); } }); }, }); function makeChange(changes, sourceFile, position, seenLines) { var lineNumber = ts.getLineAndCharacterOfPosition(sourceFile, position).line; if (!seenLines || ts.addToSeen(seenLines, lineNumber)) { changes.insertCommentBeforeLine(sourceFile, lineNumber, position, " @ts-ignore"); } } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { function createMissingMemberNodes(classDeclaration, possiblyMissingSymbols, checker, preferences, out) { var classMembers = classDeclaration.symbol.members; for (var _i = 0, possiblyMissingSymbols_1 = possiblyMissingSymbols; _i < possiblyMissingSymbols_1.length; _i++) { var symbol = possiblyMissingSymbols_1[_i]; if (!classMembers.has(symbol.escapedName)) { addNewNodeForMemberSymbol(symbol, classDeclaration, checker, preferences, out); } } } codefix.createMissingMemberNodes = createMissingMemberNodes; function addNewNodeForMemberSymbol(symbol, enclosingDeclaration, checker, preferences, out) { var declarations = symbol.getDeclarations(); if (!(declarations && declarations.length)) { return undefined; } var declaration = declarations[0]; var name = ts.getSynthesizedDeepClone(ts.getNameOfDeclaration(declaration), false); var visibilityModifier = createVisibilityModifier(ts.getModifierFlags(declaration)); var modifiers = visibilityModifier ? ts.createNodeArray([visibilityModifier]) : undefined; var type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration)); var optional = !!(symbol.flags & 16777216); switch (declaration.kind) { case 156: case 157: case 151: case 152: var typeNode = checker.typeToTypeNode(type, enclosingDeclaration); out(ts.createProperty(undefined, modifiers, name, optional ? ts.createToken(55) : undefined, typeNode, undefined)); break; case 153: case 154: var signatures = checker.getSignaturesOfType(type, 0); if (!ts.some(signatures)) { break; } if (declarations.length === 1) { ts.Debug.assert(signatures.length === 1); var signature = signatures[0]; outputMethod(signature, modifiers, name, createStubbedMethodBody(preferences)); break; } for (var _i = 0, signatures_8 = signatures; _i < signatures_8.length; _i++) { var signature = signatures_8[_i]; outputMethod(signature, ts.getSynthesizedDeepClones(modifiers, false), ts.getSynthesizedDeepClone(name, false)); } if (declarations.length > signatures.length) { var signature = checker.getSignatureFromDeclaration(declarations[declarations.length - 1]); outputMethod(signature, modifiers, name, createStubbedMethodBody(preferences)); } else { ts.Debug.assert(declarations.length === signatures.length); out(createMethodImplementingSignatures(signatures, name, optional, modifiers, preferences)); } break; } function outputMethod(signature, modifiers, name, body) { var method = signatureToMethodDeclaration(checker, signature, enclosingDeclaration, modifiers, name, optional, body); if (method) out(method); } } function signatureToMethodDeclaration(checker, signature, enclosingDeclaration, modifiers, name, optional, body) { var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, 154, enclosingDeclaration, 256); if (!signatureDeclaration) { return undefined; } signatureDeclaration.decorators = undefined; signatureDeclaration.modifiers = modifiers; signatureDeclaration.name = name; signatureDeclaration.questionToken = optional ? ts.createToken(55) : undefined; signatureDeclaration.body = body; return signatureDeclaration; } function createMethodFromCallExpression(_a, methodName, inJs, makeStatic, preferences) { var typeArguments = _a.typeArguments, args = _a.arguments, parent = _a.parent; return ts.createMethod(undefined, makeStatic ? [ts.createToken(115)] : undefined, ts.isYieldExpression(parent) ? ts.createToken(39) : undefined, methodName, undefined, inJs ? undefined : ts.map(typeArguments, function (_, i) { return ts.createTypeParameterDeclaration(84 + typeArguments.length - 1 <= 90 ? String.fromCharCode(84 + i) : "T" + i); }), createDummyParameters(args.length, undefined, undefined, inJs), inJs ? undefined : ts.createKeywordTypeNode(119), createStubbedMethodBody(preferences)); } codefix.createMethodFromCallExpression = createMethodFromCallExpression; function createDummyParameters(argCount, names, minArgumentCount, inJs) { var parameters = []; for (var i = 0; i < argCount; i++) { var newParameter = ts.createParameter(undefined, undefined, undefined, names && names[i] || "arg" + i, minArgumentCount !== undefined && i >= minArgumentCount ? ts.createToken(55) : undefined, inJs ? undefined : ts.createKeywordTypeNode(119), undefined); parameters.push(newParameter); } return parameters; } function createMethodImplementingSignatures(signatures, name, optional, modifiers, preferences) { var maxArgsSignature = signatures[0]; var minArgumentCount = signatures[0].minArgumentCount; var someSigHasRestParameter = false; for (var _i = 0, signatures_9 = signatures; _i < signatures_9.length; _i++) { var sig = signatures_9[_i]; minArgumentCount = Math.min(sig.minArgumentCount, minArgumentCount); if (sig.hasRestParameter) { someSigHasRestParameter = true; } if (sig.parameters.length >= maxArgsSignature.parameters.length && (!sig.hasRestParameter || maxArgsSignature.hasRestParameter)) { maxArgsSignature = sig; } } var maxNonRestArgs = maxArgsSignature.parameters.length - (maxArgsSignature.hasRestParameter ? 1 : 0); var maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(function (symbol) { return symbol.name; }); var parameters = createDummyParameters(maxNonRestArgs, maxArgsParameterSymbolNames, minArgumentCount, false); if (someSigHasRestParameter) { var anyArrayType = ts.createArrayTypeNode(ts.createKeywordTypeNode(119)); var restParameter = ts.createParameter(undefined, undefined, ts.createToken(24), maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", maxNonRestArgs >= minArgumentCount ? ts.createToken(55) : undefined, anyArrayType, undefined); parameters.push(restParameter); } return createStubbedMethod(modifiers, name, optional, undefined, parameters, undefined, preferences); } function createStubbedMethod(modifiers, name, optional, typeParameters, parameters, returnType, preferences) { return ts.createMethod(undefined, modifiers, undefined, name, optional ? ts.createToken(55) : undefined, typeParameters, parameters, returnType, createStubbedMethodBody(preferences)); } function createStubbedMethodBody(preferences) { return ts.createBlock([ts.createThrow(ts.createNew(ts.createIdentifier("Error"), undefined, [ts.createLiteral("Method not implemented.", preferences.quotePreference === "single")]))], true); } function createVisibilityModifier(flags) { if (flags & 4) { return ts.createToken(114); } else if (flags & 16) { return ts.createToken(113); } return undefined; } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "inferFromUsage"; var errorCodes = [ ts.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code, ts.Diagnostics.Variable_0_implicitly_has_an_1_type.code, ts.Diagnostics.Parameter_0_implicitly_has_an_1_type.code, ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code, ts.Diagnostics.Member_0_implicitly_has_an_1_type.code, ]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, program = context.program, start = context.span.start, errorCode = context.errorCode, cancellationToken = context.cancellationToken; if (ts.isSourceFileJavaScript(sourceFile)) { return undefined; } var token = ts.getTokenAtPosition(sourceFile, start, false); var declaration; var changes = ts.textChanges.ChangeTracker.with(context, function (changes) { declaration = doChange(changes, sourceFile, token, errorCode, program, cancellationToken, ts.returnTrue); }); return changes.length === 0 ? undefined : [codefix.createCodeFixAction(fixId, changes, [getDiagnostic(errorCode, token), ts.getNameOfDeclaration(declaration).getText(sourceFile)], fixId, ts.Diagnostics.Infer_all_types_from_usage)]; }, fixIds: [fixId], getAllCodeActions: function (context) { var sourceFile = context.sourceFile, program = context.program, cancellationToken = context.cancellationToken; var markSeen = ts.nodeSeenTracker(); return codefix.codeFixAll(context, errorCodes, function (changes, err) { doChange(changes, sourceFile, ts.getTokenAtPosition(err.file, err.start, false), err.code, program, cancellationToken, markSeen); }); }, }); function getDiagnostic(errorCode, token) { switch (errorCode) { case ts.Diagnostics.Parameter_0_implicitly_has_an_1_type.code: return ts.isSetAccessor(ts.getContainingFunction(token)) ? ts.Diagnostics.Infer_type_of_0_from_usage : ts.Diagnostics.Infer_parameter_types_from_usage; case ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: return ts.Diagnostics.Infer_parameter_types_from_usage; default: return ts.Diagnostics.Infer_type_of_0_from_usage; } } function doChange(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen) { if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 71 && token.kind !== 24) { return undefined; } var parent = token.parent; switch (errorCode) { case ts.Diagnostics.Member_0_implicitly_has_an_1_type.code: case ts.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code: if ((ts.isVariableDeclaration(parent) && markSeen(parent)) || ts.isPropertyDeclaration(parent) || ts.isPropertySignature(parent)) { annotateVariableDeclaration(changes, sourceFile, parent, program, cancellationToken); return parent; } return undefined; case ts.Diagnostics.Variable_0_implicitly_has_an_1_type.code: { var symbol = program.getTypeChecker().getSymbolAtLocation(token); if (symbol && symbol.valueDeclaration && ts.isVariableDeclaration(symbol.valueDeclaration) && markSeen(symbol.valueDeclaration)) { annotateVariableDeclaration(changes, sourceFile, symbol.valueDeclaration, program, cancellationToken); return symbol.valueDeclaration; } return undefined; } } var containingFunction = ts.getContainingFunction(token); if (containingFunction === undefined) { return undefined; } switch (errorCode) { case ts.Diagnostics.Parameter_0_implicitly_has_an_1_type.code: if (ts.isSetAccessor(containingFunction)) { annotateSetAccessor(changes, sourceFile, containingFunction, program, cancellationToken); return containingFunction; } case ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: if (markSeen(containingFunction)) { var param = ts.cast(parent, ts.isParameter); annotateParameters(changes, param, containingFunction, sourceFile, program, cancellationToken); return param; } return undefined; case ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code: case ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code: if (ts.isGetAccessor(containingFunction) && ts.isIdentifier(containingFunction.name)) { annotate(changes, sourceFile, containingFunction, inferTypeForVariableFromUsage(containingFunction.name, program, cancellationToken), program); return containingFunction; } return undefined; case ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code: if (ts.isSetAccessor(containingFunction)) { annotateSetAccessor(changes, sourceFile, containingFunction, program, cancellationToken); return containingFunction; } return undefined; default: return ts.Debug.fail(String(errorCode)); } } function annotateVariableDeclaration(changes, sourceFile, declaration, program, cancellationToken) { if (ts.isIdentifier(declaration.name)) { annotate(changes, sourceFile, declaration, inferTypeForVariableFromUsage(declaration.name, program, cancellationToken), program); } } function isApplicableFunctionForInference(declaration) { switch (declaration.kind) { case 234: case 154: case 155: return true; case 192: return !!declaration.name; } return false; } function annotateParameters(changes, parameterDeclaration, containingFunction, sourceFile, program, cancellationToken) { if (!ts.isIdentifier(parameterDeclaration.name) || !isApplicableFunctionForInference(containingFunction)) { return; } var types = inferTypeForParametersFromUsage(containingFunction, sourceFile, program, cancellationToken) || containingFunction.parameters.map(function (p) { return ts.isIdentifier(p.name) ? inferTypeForVariableFromUsage(p.name, program, cancellationToken) : undefined; }); if (!types || containingFunction.parameters.length !== types.length) { return; } ts.zipWith(containingFunction.parameters, types, function (parameter, type) { if (!parameter.type && !parameter.initializer) { annotate(changes, sourceFile, parameter, type, program); } }); } function annotateSetAccessor(changes, sourceFile, setAccessorDeclaration, program, cancellationToken) { var param = ts.firstOrUndefined(setAccessorDeclaration.parameters); if (param && ts.isIdentifier(setAccessorDeclaration.name) && ts.isIdentifier(param.name)) { var type = inferTypeForVariableFromUsage(setAccessorDeclaration.name, program, cancellationToken) || inferTypeForVariableFromUsage(param.name, program, cancellationToken); annotate(changes, sourceFile, param, type, program); } } function annotate(changes, sourceFile, declaration, type, program) { var typeNode = type && getTypeNodeIfAccessible(type, declaration, program.getTypeChecker()); if (typeNode) changes.tryInsertTypeAnnotation(sourceFile, declaration, typeNode); } function getTypeNodeIfAccessible(type, enclosingScope, checker) { var typeIsAccessible = true; var notAccessible = function () { typeIsAccessible = false; }; var res = checker.typeToTypeNode(type, enclosingScope, undefined, { trackSymbol: function (symbol, declaration, meaning) { typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, false).accessibility === 0; }, reportInaccessibleThisError: notAccessible, reportPrivateInBaseOfClassExpression: notAccessible, reportInaccessibleUniqueSymbolError: notAccessible, }); return typeIsAccessible ? res : undefined; } function getReferences(token, program, cancellationToken) { return ts.mapDefined(ts.FindAllReferences.getReferenceEntriesForNode(-1, token, program, program.getSourceFiles(), cancellationToken), function (entry) { return entry.type === "node" ? ts.tryCast(entry.node, ts.isIdentifier) : undefined; }); } function inferTypeForVariableFromUsage(token, program, cancellationToken) { return InferFromReference.inferTypeFromReferences(getReferences(token, program, cancellationToken), program.getTypeChecker(), cancellationToken); } function inferTypeForParametersFromUsage(containingFunction, sourceFile, program, cancellationToken) { switch (containingFunction.kind) { case 155: case 192: case 234: case 154: var isConstructor = containingFunction.kind === 155; var searchToken = isConstructor ? ts.findChildOfKind(containingFunction, 123, sourceFile) : containingFunction.name; if (searchToken) { return InferFromReference.inferTypeForParametersFromReferences(getReferences(searchToken, program, cancellationToken), containingFunction, program.getTypeChecker(), cancellationToken); } } } var InferFromReference; (function (InferFromReference) { function inferTypeFromReferences(references, checker, cancellationToken) { var usageContext = {}; for (var _i = 0, references_1 = references; _i < references_1.length; _i++) { var reference = references_1[_i]; cancellationToken.throwIfCancellationRequested(); inferTypeFromContext(reference, checker, usageContext); } return getTypeFromUsageContext(usageContext, checker); } InferFromReference.inferTypeFromReferences = inferTypeFromReferences; function inferTypeForParametersFromReferences(references, declaration, checker, cancellationToken) { if (references.length === 0) { return undefined; } if (!declaration.parameters) { return undefined; } var usageContext = {}; for (var _i = 0, references_2 = references; _i < references_2.length; _i++) { var reference = references_2[_i]; cancellationToken.throwIfCancellationRequested(); inferTypeFromContext(reference, checker, usageContext); } var isConstructor = declaration.kind === 155; var callContexts = isConstructor ? usageContext.constructContexts : usageContext.callContexts; return callContexts && declaration.parameters.map(function (parameter, parameterIndex) { var types = []; var isRest = ts.isRestParameter(parameter); for (var _i = 0, callContexts_1 = callContexts; _i < callContexts_1.length; _i++) { var callContext = callContexts_1[_i]; if (callContext.argumentTypes.length <= parameterIndex) { continue; } if (isRest) { for (var i = parameterIndex; i < callContext.argumentTypes.length; i++) { types.push(checker.getBaseTypeOfLiteralType(callContext.argumentTypes[i])); } } else { types.push(checker.getBaseTypeOfLiteralType(callContext.argumentTypes[parameterIndex])); } } if (!types.length) { return undefined; } var type = checker.getWidenedType(checker.getUnionType(types, 2)); return isRest ? checker.createArrayType(type) : type; }); } InferFromReference.inferTypeForParametersFromReferences = inferTypeForParametersFromReferences; function inferTypeFromContext(node, checker, usageContext) { while (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { node = node.parent; } switch (node.parent.kind) { case 199: usageContext.isNumber = true; break; case 198: inferTypeFromPrefixUnaryExpressionContext(node.parent, usageContext); break; case 200: inferTypeFromBinaryExpressionContext(node, node.parent, checker, usageContext); break; case 266: case 267: inferTypeFromSwitchStatementLabelContext(node.parent, checker, usageContext); break; case 187: case 188: if (node.parent.expression === node) { inferTypeFromCallExpressionContext(node.parent, checker, usageContext); } else { inferTypeFromContextualType(node, checker, usageContext); } break; case 185: inferTypeFromPropertyAccessExpressionContext(node.parent, checker, usageContext); break; case 186: inferTypeFromPropertyElementExpressionContext(node.parent, node, checker, usageContext); break; case 232: { var _a = node.parent, name = _a.name, initializer = _a.initializer; if (node === name) { if (initializer) { addCandidateType(usageContext, checker.getTypeAtLocation(initializer)); } break; } } default: return inferTypeFromContextualType(node, checker, usageContext); } } function inferTypeFromContextualType(node, checker, usageContext) { if (ts.isExpressionNode(node)) { addCandidateType(usageContext, checker.getContextualType(node)); } } function inferTypeFromPrefixUnaryExpressionContext(node, usageContext) { switch (node.operator) { case 43: case 44: case 38: case 52: usageContext.isNumber = true; break; case 37: usageContext.isNumberOrString = true; break; } } function inferTypeFromBinaryExpressionContext(node, parent, checker, usageContext) { switch (parent.operatorToken.kind) { case 40: case 39: case 41: case 42: case 45: case 46: case 47: case 48: case 49: case 50: case 60: case 62: case 61: case 63: case 64: case 68: case 69: case 70: case 65: case 67: case 66: case 38: case 27: case 30: case 29: case 31: var operandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left); if (operandType.flags & 544) { addCandidateType(usageContext, operandType); } else { usageContext.isNumber = true; } break; case 59: case 37: var otherOperandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left); if (otherOperandType.flags & 544) { addCandidateType(usageContext, otherOperandType); } else if (otherOperandType.flags & 168) { usageContext.isNumber = true; } else if (otherOperandType.flags & 68) { usageContext.isString = true; } else { usageContext.isNumberOrString = true; } break; case 58: case 32: case 34: case 35: case 33: addCandidateType(usageContext, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left)); break; case 92: if (node === parent.left) { usageContext.isString = true; } break; case 54: if (node === parent.left && (node.parent.parent.kind === 232 || ts.isAssignmentExpression(node.parent.parent, true))) { addCandidateType(usageContext, checker.getTypeAtLocation(parent.right)); } break; case 53: case 26: case 93: break; } } function inferTypeFromSwitchStatementLabelContext(parent, checker, usageContext) { addCandidateType(usageContext, checker.getTypeAtLocation(parent.parent.parent.expression)); } function inferTypeFromCallExpressionContext(parent, checker, usageContext) { var callContext = { argumentTypes: [], returnType: {} }; if (parent.arguments) { for (var _i = 0, _a = parent.arguments; _i < _a.length; _i++) { var argument = _a[_i]; callContext.argumentTypes.push(checker.getTypeAtLocation(argument)); } } inferTypeFromContext(parent, checker, callContext.returnType); if (parent.kind === 187) { (usageContext.callContexts || (usageContext.callContexts = [])).push(callContext); } else { (usageContext.constructContexts || (usageContext.constructContexts = [])).push(callContext); } } function inferTypeFromPropertyAccessExpressionContext(parent, checker, usageContext) { var name = ts.escapeLeadingUnderscores(parent.name.text); if (!usageContext.properties) { usageContext.properties = ts.createUnderscoreEscapedMap(); } var propertyUsageContext = usageContext.properties.get(name) || {}; inferTypeFromContext(parent, checker, propertyUsageContext); usageContext.properties.set(name, propertyUsageContext); } function inferTypeFromPropertyElementExpressionContext(parent, node, checker, usageContext) { if (node === parent.argumentExpression) { usageContext.isNumberOrString = true; return; } else { var indexType = checker.getTypeAtLocation(parent); var indexUsageContext = {}; inferTypeFromContext(parent, checker, indexUsageContext); if (indexType.flags & 168) { usageContext.numberIndexContext = indexUsageContext; } else { usageContext.stringIndexContext = indexUsageContext; } } } function getTypeFromUsageContext(usageContext, checker) { if (usageContext.isNumberOrString && !usageContext.isNumber && !usageContext.isString) { return checker.getUnionType([checker.getNumberType(), checker.getStringType()]); } else if (usageContext.isNumber) { return checker.getNumberType(); } else if (usageContext.isString) { return checker.getStringType(); } else if (usageContext.candidateTypes) { return checker.getWidenedType(checker.getUnionType(usageContext.candidateTypes.map(function (t) { return checker.getBaseTypeOfLiteralType(t); }), 2)); } else if (usageContext.properties && hasCallContext(usageContext.properties.get("then"))) { var paramType = getParameterTypeFromCallContexts(0, usageContext.properties.get("then").callContexts, false, checker); var types = paramType.getCallSignatures().map(function (c) { return c.getReturnType(); }); return checker.createPromiseType(types.length ? checker.getUnionType(types, 2) : checker.getAnyType()); } else if (usageContext.properties && hasCallContext(usageContext.properties.get("push"))) { return checker.createArrayType(getParameterTypeFromCallContexts(0, usageContext.properties.get("push").callContexts, false, checker)); } else if (usageContext.properties || usageContext.callContexts || usageContext.constructContexts || usageContext.numberIndexContext || usageContext.stringIndexContext) { var members_6 = ts.createUnderscoreEscapedMap(); var callSignatures = []; var constructSignatures = []; var stringIndexInfo = void 0; var numberIndexInfo = void 0; if (usageContext.properties) { usageContext.properties.forEach(function (context, name) { var symbol = checker.createSymbol(4, name); symbol.type = getTypeFromUsageContext(context, checker) || checker.getAnyType(); members_6.set(name, symbol); }); } if (usageContext.callContexts) { for (var _i = 0, _a = usageContext.callContexts; _i < _a.length; _i++) { var callContext = _a[_i]; callSignatures.push(getSignatureFromCallContext(callContext, checker)); } } if (usageContext.constructContexts) { for (var _b = 0, _c = usageContext.constructContexts; _b < _c.length; _b++) { var constructContext = _c[_b]; constructSignatures.push(getSignatureFromCallContext(constructContext, checker)); } } if (usageContext.numberIndexContext) { numberIndexInfo = checker.createIndexInfo(getTypeFromUsageContext(usageContext.numberIndexContext, checker), false); } if (usageContext.stringIndexContext) { stringIndexInfo = checker.createIndexInfo(getTypeFromUsageContext(usageContext.stringIndexContext, checker), false); } return checker.createAnonymousType(undefined, members_6, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); } else { return undefined; } } function getParameterTypeFromCallContexts(parameterIndex, callContexts, isRestParameter, checker) { var types = []; if (callContexts) { for (var _i = 0, callContexts_2 = callContexts; _i < callContexts_2.length; _i++) { var callContext = callContexts_2[_i]; if (callContext.argumentTypes.length > parameterIndex) { if (isRestParameter) { types = ts.concatenate(types, ts.map(callContext.argumentTypes.slice(parameterIndex), function (a) { return checker.getBaseTypeOfLiteralType(a); })); } else { types.push(checker.getBaseTypeOfLiteralType(callContext.argumentTypes[parameterIndex])); } } } } if (types.length) { var type = checker.getWidenedType(checker.getUnionType(types, 2)); return isRestParameter ? checker.createArrayType(type) : type; } return undefined; } function getSignatureFromCallContext(callContext, checker) { var parameters = []; for (var i = 0; i < callContext.argumentTypes.length; i++) { var symbol = checker.createSymbol(1, ts.escapeLeadingUnderscores("arg" + i)); symbol.type = checker.getWidenedType(checker.getBaseTypeOfLiteralType(callContext.argumentTypes[i])); parameters.push(symbol); } var returnType = getTypeFromUsageContext(callContext.returnType, checker) || checker.getVoidType(); return checker.createSignature(undefined, undefined, undefined, parameters, returnType, undefined, callContext.argumentTypes.length, false, false); } function addCandidateType(context, type) { if (type && !(type.flags & 1) && !(type.flags & 32768)) { (context.candidateTypes || (context.candidateTypes = [])).push(type); } } function hasCallContext(usageContext) { return !!usageContext && !!usageContext.callContexts; } })(InferFromReference || (InferFromReference = {})); })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixName = "invalidImportSyntax"; function getCodeFixesForImportDeclaration(context, node) { var sourceFile = ts.getSourceFileOfNode(node); var namespace = ts.getNamespaceDeclarationNode(node); var opts = context.program.getCompilerOptions(); var variations = []; variations.push(createAction(context, sourceFile, node, ts.makeImport(namespace.name, undefined, node.moduleSpecifier, ts.getQuotePreference(sourceFile, context.preferences)))); if (ts.getEmitModuleKind(opts) === ts.ModuleKind.CommonJS) { variations.push(createAction(context, sourceFile, node, ts.createImportEqualsDeclaration(undefined, undefined, namespace.name, ts.createExternalModuleReference(node.moduleSpecifier)))); } return variations; } function createAction(context, sourceFile, node, replacement) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile, node, replacement); }); return codefix.createCodeFixActionNoFixId(fixName, changes, [ts.Diagnostics.Replace_import_with_0, changes[0].textChanges[0].newText]); } codefix.registerCodeFix({ errorCodes: [ ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures.code, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature.code, ], getCodeActions: getActionsForUsageOfInvalidImport }); function getActionsForUsageOfInvalidImport(context) { var sourceFile = context.sourceFile; var targetKind = ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures.code === context.errorCode ? 187 : 188; var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start, false), function (a) { return a.kind === targetKind && a.getStart() === context.span.start && a.getEnd() === (context.span.start + context.span.length); }); if (!node) { return []; } var expr = node.expression; return getImportCodeFixesForExpression(context, expr); } codefix.registerCodeFix({ errorCodes: [ ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code, ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code, ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code, ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2.code, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2.code, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1.code, ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code, ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code, ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code, ts.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1.code, ], getCodeActions: getActionsForInvalidImportLocation }); function getActionsForInvalidImportLocation(context) { var sourceFile = context.sourceFile; var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start, false), function (a) { return a.getStart() === context.span.start && a.getEnd() === (context.span.start + context.span.length); }); if (!node) { return []; } return getImportCodeFixesForExpression(context, node); } function getImportCodeFixesForExpression(context, expr) { var type = context.program.getTypeChecker().getTypeAtLocation(expr); if (!(type.symbol && type.symbol.originatingImport)) { return []; } var fixes = []; var relatedImport = type.symbol.originatingImport; if (!ts.isImportCall(relatedImport)) { ts.addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport)); } if (ts.isExpression(expr) && !(ts.isNamedDeclaration(expr.parent) && expr.parent.name === expr)) { var sourceFile_3 = context.sourceFile; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_3, expr, ts.createPropertyAccess(expr, "default"), {}); }); fixes.push(codefix.createCodeFixActionNoFixId(fixName, changes, ts.Diagnostics.Use_synthetic_default_member)); } return fixes; } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixName = "strictClassInitialization"; var fixIdAddDefiniteAssignmentAssertions = "addMissingPropertyDefiniteAssignmentAssertions"; var fixIdAddUndefinedType = "addMissingPropertyUndefinedType"; var fixIdAddInitializer = "addMissingPropertyInitializer"; var errorCodes = [ts.Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start); if (!propertyDeclaration) return; var result = [ getActionForAddMissingUndefinedType(context, propertyDeclaration), getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) ]; ts.append(result, getActionForAddMissingInitializer(context, propertyDeclaration)); return result; }, fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var propertyDeclaration = getPropertyDeclaration(diag.file, diag.start); if (!propertyDeclaration) return; switch (context.fixId) { case fixIdAddDefiniteAssignmentAssertions: addDefiniteAssignmentAssertion(changes, diag.file, propertyDeclaration); break; case fixIdAddUndefinedType: addUndefinedType(changes, diag.file, propertyDeclaration); break; case fixIdAddInitializer: var checker = context.program.getTypeChecker(); var initializer = getInitializer(checker, propertyDeclaration); if (!initializer) return; addInitializer(changes, diag.file, propertyDeclaration, initializer); break; default: ts.Debug.fail(JSON.stringify(context.fixId)); } }); }, }); function getPropertyDeclaration(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); return ts.isIdentifier(token) ? ts.cast(token.parent, ts.isPropertyDeclaration) : undefined; } function getActionForAddMissingDefiniteAssignmentAssertion(context, propertyDeclaration) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addDefiniteAssignmentAssertion(t, context.sourceFile, propertyDeclaration); }); return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_definite_assignment_assertion_to_property_0, propertyDeclaration.getText()], fixIdAddDefiniteAssignmentAssertions, ts.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties); } function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) { var property = ts.updateProperty(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, ts.createToken(51), propertyDeclaration.type, propertyDeclaration.initializer); changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property); } function getActionForAddMissingUndefinedType(context, propertyDeclaration) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addUndefinedType(t, context.sourceFile, propertyDeclaration); }); return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties); } function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) { var undefinedTypeNode = ts.createKeywordTypeNode(140); var type = propertyDeclaration.type; var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode]; changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.createUnionTypeNode(types)); } function getActionForAddMissingInitializer(context, propertyDeclaration) { var checker = context.program.getTypeChecker(); var initializer = getInitializer(checker, propertyDeclaration); if (!initializer) return undefined; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addInitializer(t, context.sourceFile, propertyDeclaration, initializer); }); return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_initializer_to_property_0, propertyDeclaration.name.getText()], fixIdAddInitializer, ts.Diagnostics.Add_initializers_to_all_uninitialized_properties); } function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) { var property = ts.updateProperty(propertyDeclaration, propertyDeclaration.decorators, propertyDeclaration.modifiers, propertyDeclaration.name, propertyDeclaration.questionToken, propertyDeclaration.type, initializer); changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property); } function getInitializer(checker, propertyDeclaration) { return getDefaultValueFromType(checker, checker.getTypeFromTypeNode(propertyDeclaration.type)); } function getDefaultValueFromType(checker, type) { if (type.flags & 256) { return type === checker.getFalseType() ? ts.createFalse() : ts.createTrue(); } else if (type.isLiteral()) { return ts.createLiteral(type.value); } else if (type.isUnion()) { return ts.firstDefined(type.types, function (t) { return getDefaultValueFromType(checker, t); }); } else if (type.isClass()) { var classDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol); if (!classDeclaration || ts.hasModifier(classDeclaration, 128)) return undefined; var constructorDeclaration = ts.getFirstConstructorWithBody(classDeclaration); if (constructorDeclaration && constructorDeclaration.parameters.length) return undefined; return ts.createNew(ts.createIdentifier(type.symbol.name), undefined, undefined); } else if (checker.isArrayLikeType(type)) { return ts.createArrayLiteral(); } return undefined; } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "requireInTs"; var errorCodes = [ts.Diagnostics.require_call_may_be_converted_to_an_import.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, context.sourceFile, context.span.start, context.program); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_require_to_import, fixId, ts.Diagnostics.Convert_all_require_to_import)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return doChange(changes, diag.file, diag.start, context.program); }); }, }); function doChange(changes, sourceFile, pos, program) { var _a = getInfo(sourceFile, pos), statement = _a.statement, name = _a.name, required = _a.required; changes.replaceNode(sourceFile, statement, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions()) ? ts.createImportDeclaration(undefined, undefined, ts.createImportClause(name, undefined), required) : ts.createImportEqualsDeclaration(undefined, undefined, name, ts.createExternalModuleReference(required))); } function getInfo(sourceFile, pos) { var parent = ts.getTokenAtPosition(sourceFile, pos, false).parent; if (!ts.isRequireCall(parent, true)) throw ts.Debug.failBadSyntaxKind(parent); var decl = ts.cast(parent.parent, ts.isVariableDeclaration); return { statement: ts.cast(decl.parent.parent, ts.isVariableStatement), name: ts.cast(decl.name, ts.isIdentifier), required: parent.arguments[0] }; } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixId = "useDefaultImport"; var errorCodes = [ts.Diagnostics.Import_may_be_converted_to_a_default_import.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, start = context.span.start; var info = getInfo(sourceFile, start); if (!info) return undefined; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, info, context.preferences); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_to_default_import, fixId, ts.Diagnostics.Convert_all_to_default_imports)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var info = getInfo(diag.file, diag.start); if (info) doChange(changes, diag.file, info, context.preferences); }); }, }); function getInfo(sourceFile, pos) { var name = ts.getTokenAtPosition(sourceFile, pos, false); if (!ts.isIdentifier(name)) return undefined; var parent = name.parent; if (ts.isImportEqualsDeclaration(parent) && ts.isExternalModuleReference(parent.moduleReference)) { return { importNode: parent, name: name, moduleSpecifier: parent.moduleReference.expression }; } else if (ts.isNamespaceImport(parent)) { var importNode = parent.parent.parent; return { importNode: importNode, name: name, moduleSpecifier: importNode.moduleSpecifier }; } } function doChange(changes, sourceFile, info, preferences) { changes.replaceNode(sourceFile, info.importNode, ts.makeImport(info.name, undefined, info.moduleSpecifier, ts.getQuotePreference(sourceFile, preferences))); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixIdAddMissingTypeof = "fixAddModuleReferTypeMissingTypeof"; var fixId = fixIdAddMissingTypeof; var errorCodes = [ts.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, span = context.span; var importType = getImportTypeNode(sourceFile, span.start); var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, importType); }); return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Add_missing_typeof, fixId, ts.Diagnostics.Add_missing_typeof)]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { return doChange(changes, context.sourceFile, getImportTypeNode(diag.file, diag.start)); }); }, }); function getImportTypeNode(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); ts.Debug.assert(token.kind === 91); ts.Debug.assert(token.parent.kind === 179); return token.parent; } function doChange(changes, sourceFile, importType) { var newTypeNode = ts.updateImportTypeNode(importType, importType.argument, importType.qualifier, importType.typeArguments, true); changes.replaceNode(sourceFile, importType, newTypeNode); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var codefix; (function (codefix) { var fixIdAddMissingTypeof = "fixConvertToMappedObjectType"; var fixId = fixIdAddMissingTypeof; var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead.code]; codefix.registerCodeFix({ errorCodes: errorCodes, getCodeActions: function (context) { var sourceFile = context.sourceFile, span = context.span; var info = getInfo(sourceFile, span.start); if (!info) return undefined; var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, info); }); var name = ts.idText(info.container.name); return [codefix.createCodeFixAction(fixId, changes, [ts.Diagnostics.Convert_0_to_mapped_object_type, name], fixId, [ts.Diagnostics.Convert_0_to_mapped_object_type, name])]; }, fixIds: [fixId], getAllCodeActions: function (context) { return codefix.codeFixAll(context, errorCodes, function (changes, diag) { var info = getInfo(diag.file, diag.start); if (info) doChange(changes, diag.file, info); }); } }); function getInfo(sourceFile, pos) { var token = ts.getTokenAtPosition(sourceFile, pos, false); var indexSignature = ts.cast(token.parent.parent, ts.isIndexSignatureDeclaration); if (ts.isClassDeclaration(indexSignature.parent)) return undefined; var container = ts.isInterfaceDeclaration(indexSignature.parent) ? indexSignature.parent : ts.cast(indexSignature.parent.parent, ts.isTypeAliasDeclaration); return { indexSignature: indexSignature, container: container }; } function createTypeAliasFromInterface(declaration, type) { return ts.createTypeAliasDeclaration(declaration.decorators, declaration.modifiers, declaration.name, declaration.typeParameters, type); } function doChange(changes, sourceFile, _a) { var indexSignature = _a.indexSignature, container = _a.container; var members = ts.isInterfaceDeclaration(container) ? container.members : container.type.members; var otherMembers = members.filter(function (member) { return !ts.isIndexSignatureDeclaration(member); }); var parameter = ts.first(indexSignature.parameters); var mappedTypeParameter = ts.createTypeParameterDeclaration(ts.cast(parameter.name, ts.isIdentifier), parameter.type); var mappedIntersectionType = ts.createMappedTypeNode(ts.hasReadonlyModifier(indexSignature) ? ts.createModifier(132) : undefined, mappedTypeParameter, indexSignature.questionToken, indexSignature.type); var intersectionType = ts.createIntersectionTypeNode(ts.getAllSuperTypeNodes(container).concat([ mappedIntersectionType ], (otherMembers.length ? [ts.createTypeLiteralNode(otherMembers)] : ts.emptyArray))); changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType)); } })(codefix = ts.codefix || (ts.codefix = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor) { var generateGetAccessorAndSetAccessor; (function (generateGetAccessorAndSetAccessor) { var refactorName = "Convert import"; var actionNameNamespaceToNamed = "Convert namespace import to named imports"; var actionNameNamedToNamespace = "Convert named imports to namespace import"; refactor.registerRefactor(refactorName, { getAvailableActions: function (context) { var i = getImportToConvert(context); if (!i) return undefined; var description = i.kind === 246 ? ts.Diagnostics.Convert_namespace_import_to_named_imports.message : ts.Diagnostics.Convert_named_imports_to_namespace_import.message; var actionName = i.kind === 246 ? actionNameNamespaceToNamed : actionNameNamedToNamespace; return [{ name: refactorName, description: description, actions: [{ name: actionName, description: description }] }]; }, getEditsForAction: function (context, actionName) { ts.Debug.assert(actionName === actionNameNamespaceToNamed || actionName === actionNameNamedToNamespace); var edits = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(context.file, context.program, t, ts.Debug.assertDefined(getImportToConvert(context))); }); return { edits: edits, renameFilename: undefined, renameLocation: undefined }; } }); function getImportToConvert(context) { var file = context.file; var span = ts.getRefactorContextSpan(context); var token = ts.getTokenAtPosition(file, span.start, false); var importDecl = ts.getParentNodeInSpan(token, file, span); if (!importDecl || !ts.isImportDeclaration(importDecl)) return undefined; var importClause = importDecl.importClause; return importClause && importClause.namedBindings; } function doChange(sourceFile, program, changes, toConvert) { var checker = program.getTypeChecker(); if (toConvert.kind === 246) { doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions())); } else { doChangeNamedToNamespace(sourceFile, checker, changes, toConvert); } } function doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, allowSyntheticDefaultImports) { var usedAsNamespaceOrDefault = false; var nodesToReplace = []; var conflictingNames = ts.createMap(); ts.FindAllReferences.Core.eachSymbolReferenceInFile(toConvert.name, checker, sourceFile, function (id) { if (!ts.isPropertyAccessExpression(id.parent)) { usedAsNamespaceOrDefault = true; } else { var parent = ts.cast(id.parent, ts.isPropertyAccessExpression); var exportName = parent.name.text; if (checker.resolveName(exportName, id, 67108863, true)) { conflictingNames.set(exportName, true); } ts.Debug.assert(parent.expression === id); nodesToReplace.push(parent); } }); var exportNameToImportName = ts.createMap(); for (var _i = 0, nodesToReplace_1 = nodesToReplace; _i < nodesToReplace_1.length; _i++) { var propertyAccess = nodesToReplace_1[_i]; var exportName = propertyAccess.name.text; var importName = exportNameToImportName.get(exportName); if (importName === undefined) { exportNameToImportName.set(exportName, importName = conflictingNames.has(exportName) ? ts.getUniqueName(exportName, sourceFile) : exportName); } changes.replaceNode(sourceFile, propertyAccess, ts.createIdentifier(importName)); } var importSpecifiers = []; exportNameToImportName.forEach(function (name, propertyName) { importSpecifiers.push(ts.createImportSpecifier(name === propertyName ? undefined : ts.createIdentifier(propertyName), ts.createIdentifier(name))); }); var importDecl = toConvert.parent.parent; if (usedAsNamespaceOrDefault && !allowSyntheticDefaultImports) { changes.insertNodeAfter(sourceFile, importDecl, updateImport(importDecl, undefined, importSpecifiers)); } else { changes.replaceNode(sourceFile, importDecl, updateImport(importDecl, usedAsNamespaceOrDefault ? ts.createIdentifier(toConvert.name.text) : undefined, importSpecifiers)); } } function doChangeNamedToNamespace(sourceFile, checker, changes, toConvert) { var importDecl = toConvert.parent.parent; var moduleSpecifier = importDecl.moduleSpecifier; var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 6) : "module"; var namespaceNameConflicts = toConvert.elements.some(function (element) { return ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) { return !!checker.resolveName(preferredName, id, 67108863, true); }) || false; }); var namespaceImportName = namespaceNameConflicts ? ts.getUniqueName(preferredName, sourceFile) : preferredName; var neededNamedImports = []; var _loop_23 = function (element) { var propertyName = (element.propertyName || element.name).text; ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) { var access = ts.createPropertyAccess(ts.createIdentifier(namespaceImportName), propertyName); if (ts.isShorthandPropertyAssignment(id.parent)) { changes.replaceNode(sourceFile, id.parent, ts.createPropertyAssignment(id.text, access)); } else if (ts.isExportSpecifier(id.parent) && !id.parent.propertyName) { if (!neededNamedImports.some(function (n) { return n.name === element.name; })) { neededNamedImports.push(ts.createImportSpecifier(element.propertyName && ts.createIdentifier(element.propertyName.text), ts.createIdentifier(element.name.text))); } } else { changes.replaceNode(sourceFile, id, access); } }); }; for (var _i = 0, _a = toConvert.elements; _i < _a.length; _i++) { var element = _a[_i]; _loop_23(element); } changes.replaceNode(sourceFile, toConvert, ts.createNamespaceImport(ts.createIdentifier(namespaceImportName))); if (neededNamedImports.length) { changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, undefined, neededNamedImports)); } } function updateImport(old, defaultImportName, elements) { return ts.createImportDeclaration(undefined, undefined, ts.createImportClause(defaultImportName, elements && elements.length ? ts.createNamedImports(elements) : undefined), old.moduleSpecifier); } })(generateGetAccessorAndSetAccessor = refactor.generateGetAccessorAndSetAccessor || (refactor.generateGetAccessorAndSetAccessor = {})); })(refactor = ts.refactor || (ts.refactor = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor) { var extractSymbol; (function (extractSymbol) { var refactorName = "Extract Symbol"; refactor.registerRefactor(refactorName, { getAvailableActions: getAvailableActions, getEditsForAction: getEditsForAction }); function getAvailableActions(context) { var rangeToExtract = getRangeToExtract(context.file, ts.getRefactorContextSpan(context)); var targetRange = rangeToExtract.targetRange; if (targetRange === undefined) { return undefined; } var extractions = getPossibleExtractions(targetRange, context); if (extractions === undefined) { return undefined; } var functionActions = []; var usedFunctionNames = ts.createMap(); var constantActions = []; var usedConstantNames = ts.createMap(); var i = 0; for (var _i = 0, extractions_1 = extractions; _i < extractions_1.length; _i++) { var _a = extractions_1[_i], functionExtraction = _a.functionExtraction, constantExtraction = _a.constantExtraction; if (functionExtraction.errors.length === 0) { var description = functionExtraction.description; if (!usedFunctionNames.has(description)) { usedFunctionNames.set(description, true); functionActions.push({ description: description, name: "function_scope_" + i }); } } if (constantExtraction.errors.length === 0) { var description = constantExtraction.description; if (!usedConstantNames.has(description)) { usedConstantNames.set(description, true); constantActions.push({ description: description, name: "constant_scope_" + i }); } } i++; } var infos = []; if (functionActions.length) { infos.push({ name: refactorName, description: ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_function), actions: functionActions }); } if (constantActions.length) { infos.push({ name: refactorName, description: ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_constant), actions: constantActions }); } return infos.length ? infos : undefined; } extractSymbol.getAvailableActions = getAvailableActions; function getEditsForAction(context, actionName) { var rangeToExtract = getRangeToExtract(context.file, ts.getRefactorContextSpan(context)); var targetRange = rangeToExtract.targetRange; var parsedFunctionIndexMatch = /^function_scope_(\d+)$/.exec(actionName); if (parsedFunctionIndexMatch) { var index = +parsedFunctionIndexMatch[1]; ts.Debug.assert(isFinite(index), "Expected to parse a finite number from the function scope index"); return getFunctionExtractionAtIndex(targetRange, context, index); } var parsedConstantIndexMatch = /^constant_scope_(\d+)$/.exec(actionName); if (parsedConstantIndexMatch) { var index = +parsedConstantIndexMatch[1]; ts.Debug.assert(isFinite(index), "Expected to parse a finite number from the constant scope index"); return getConstantExtractionAtIndex(targetRange, context, index); } ts.Debug.fail("Unrecognized action name"); } extractSymbol.getEditsForAction = getEditsForAction; var Messages; (function (Messages) { function createMessage(message) { return { message: message, code: 0, category: ts.DiagnosticCategory.Message, key: message }; } Messages.cannotExtractRange = createMessage("Cannot extract range."); Messages.cannotExtractImport = createMessage("Cannot extract import statement."); Messages.cannotExtractSuper = createMessage("Cannot extract super call."); Messages.cannotExtractEmpty = createMessage("Cannot extract empty range."); Messages.expressionExpected = createMessage("expression expected."); Messages.uselessConstantType = createMessage("No reason to extract constant of type."); Messages.statementOrExpressionExpected = createMessage("Statement or expression expected."); Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements = createMessage("Cannot extract range containing conditional break or continue statements."); Messages.cannotExtractRangeContainingConditionalReturnStatement = createMessage("Cannot extract range containing conditional return statement."); Messages.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange = createMessage("Cannot extract range containing labeled break or continue with target outside of the range."); Messages.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators."); Messages.typeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope."); Messages.functionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope."); Messages.cannotExtractIdentifier = createMessage("Select more than a single identifier."); Messages.cannotExtractExportedEntity = createMessage("Cannot extract exported declaration"); Messages.cannotWriteInExpression = createMessage("Cannot write back side-effects when extracting an expression"); Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor"); Messages.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts"); Messages.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes"); Messages.cannotExtractToOtherFunctionLike = createMessage("Cannot extract method to a function-like scope that is not a function"); Messages.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS"); Messages.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block"); })(Messages = extractSymbol.Messages || (extractSymbol.Messages = {})); var RangeFacts; (function (RangeFacts) { RangeFacts[RangeFacts["None"] = 0] = "None"; RangeFacts[RangeFacts["HasReturn"] = 1] = "HasReturn"; RangeFacts[RangeFacts["IsGenerator"] = 2] = "IsGenerator"; RangeFacts[RangeFacts["IsAsyncFunction"] = 4] = "IsAsyncFunction"; RangeFacts[RangeFacts["UsesThis"] = 8] = "UsesThis"; RangeFacts[RangeFacts["InStaticRegion"] = 16] = "InStaticRegion"; })(RangeFacts || (RangeFacts = {})); function getRangeToExtract(sourceFile, span) { var length = span.length; if (length === 0) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractEmpty)] }; } var start = ts.getParentNodeInSpan(ts.getTokenAtPosition(sourceFile, span.start, false), sourceFile, span); var end = ts.getParentNodeInSpan(ts.findTokenOnLeftOfPosition(sourceFile, ts.textSpanEnd(span)), sourceFile, span); var declarations = []; var rangeFacts = RangeFacts.None; if (!start || !end) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] }; } if (start.parent !== end.parent) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] }; } if (start !== end) { if (!isBlockLike(start.parent)) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] }; } var statements = []; var start2 = start; for (var _i = 0, _a = start2.parent.statements; _i < _a.length; _i++) { var statement = _a[_i]; if (statement === start || statements.length) { var errors_1 = checkNode(statement); if (errors_1) { return { errors: errors_1 }; } statements.push(statement); } if (statement === end) { break; } } if (!statements.length) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] }; } return { targetRange: { range: statements, facts: rangeFacts, declarations: declarations } }; } if (ts.isReturnStatement(start) && !start.expression) { return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] }; } var node = refineNode(start); var errors = checkRootNode(node) || checkNode(node); if (errors) { return { errors: errors }; } return { targetRange: { range: getStatementOrExpressionRange(node), facts: rangeFacts, declarations: declarations } }; function refineNode(node) { if (ts.isReturnStatement(node)) { if (node.expression) { return node.expression; } } else if (ts.isVariableStatement(node)) { var numInitializers = 0; var lastInitializer = void 0; for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (declaration.initializer) { numInitializers++; lastInitializer = declaration.initializer; } } if (numInitializers === 1) { return lastInitializer; } } else if (ts.isVariableDeclaration(node)) { if (node.initializer) { return node.initializer; } } return node; } function checkRootNode(node) { if (ts.isIdentifier(ts.isExpressionStatement(node) ? node.expression : node)) { return [ts.createDiagnosticForNode(node, Messages.cannotExtractIdentifier)]; } return undefined; } function checkForStaticContext(nodeToCheck, containingClass) { var current = nodeToCheck; while (current !== containingClass) { if (current.kind === 152) { if (ts.hasModifier(current, 32)) { rangeFacts |= RangeFacts.InStaticRegion; } break; } else if (current.kind === 149) { var ctorOrMethod = ts.getContainingFunction(current); if (ctorOrMethod.kind === 155) { rangeFacts |= RangeFacts.InStaticRegion; } break; } else if (current.kind === 154) { if (ts.hasModifier(current, 32)) { rangeFacts |= RangeFacts.InStaticRegion; } } current = current.parent; } } function checkNode(nodeToCheck) { var PermittedJumps; (function (PermittedJumps) { PermittedJumps[PermittedJumps["None"] = 0] = "None"; PermittedJumps[PermittedJumps["Break"] = 1] = "Break"; PermittedJumps[PermittedJumps["Continue"] = 2] = "Continue"; PermittedJumps[PermittedJumps["Return"] = 4] = "Return"; })(PermittedJumps || (PermittedJumps = {})); ts.Debug.assert(nodeToCheck.pos <= nodeToCheck.end, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); ts.Debug.assert(!ts.positionIsSynthesized(nodeToCheck.pos), "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); if (!ts.isStatement(nodeToCheck) && !(ts.isExpressionNode(nodeToCheck) && isExtractableExpression(nodeToCheck))) { return [ts.createDiagnosticForNode(nodeToCheck, Messages.statementOrExpressionExpected)]; } if (nodeToCheck.flags & 4194304) { return [ts.createDiagnosticForNode(nodeToCheck, Messages.cannotExtractAmbientBlock)]; } var containingClass = ts.getContainingClass(nodeToCheck); if (containingClass) { checkForStaticContext(nodeToCheck, containingClass); } var errors; var permittedJumps = 4; var seenLabels; visit(nodeToCheck); return errors; function visit(node) { if (errors) { return true; } if (ts.isDeclaration(node)) { var declaringNode = (node.kind === 232) ? node.parent.parent : node; if (ts.hasModifier(declaringNode, 1)) { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractExportedEntity)); return true; } declarations.push(node.symbol); } switch (node.kind) { case 244: (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractImport)); return true; case 97: if (node.parent.kind === 187) { var containingClass_1 = ts.getContainingClass(node); if (containingClass_1.pos < span.start || containingClass_1.end >= (span.start + span.length)) { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractSuper)); return true; } } else { rangeFacts |= RangeFacts.UsesThis; } break; } if (ts.isFunctionLikeDeclaration(node) || ts.isClassLike(node)) { switch (node.kind) { case 234: case 235: if (ts.isSourceFile(node.parent) && node.parent.externalModuleIndicator === undefined) { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.functionWillNotBeVisibleInTheNewScope)); } break; } return false; } var savedPermittedJumps = permittedJumps; switch (node.kind) { case 217: permittedJumps = 0; break; case 230: permittedJumps = 0; break; case 213: if (node.parent && node.parent.kind === 230 && node.parent.finallyBlock === node) { permittedJumps = 4; } break; case 266: permittedJumps |= 1; break; default: if (ts.isIterationStatement(node, false)) { permittedJumps |= 1 | 2; } break; } switch (node.kind) { case 174: case 99: rangeFacts |= RangeFacts.UsesThis; break; case 228: { var label = node.label; (seenLabels || (seenLabels = [])).push(label.escapedText); ts.forEachChild(node, visit); seenLabels.pop(); break; } case 224: case 223: { var label = node.label; if (label) { if (!ts.contains(seenLabels, label.escapedText)) { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange)); } } else { if (!(permittedJumps & (node.kind === 224 ? 1 : 2))) { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements)); } } break; } case 197: rangeFacts |= RangeFacts.IsAsyncFunction; break; case 203: rangeFacts |= RangeFacts.IsGenerator; break; case 225: if (permittedJumps & 4) { rangeFacts |= RangeFacts.HasReturn; } else { (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalReturnStatement)); } break; default: ts.forEachChild(node, visit); break; } permittedJumps = savedPermittedJumps; } } } extractSymbol.getRangeToExtract = getRangeToExtract; function getStatementOrExpressionRange(node) { if (ts.isStatement(node)) { return [node]; } else if (ts.isExpressionNode(node)) { return ts.isExpressionStatement(node.parent) ? [node.parent] : node; } return undefined; } function isScope(node) { return ts.isFunctionLikeDeclaration(node) || ts.isSourceFile(node) || ts.isModuleBlock(node) || ts.isClassLike(node); } function collectEnclosingScopes(range) { var current = isReadonlyArray(range.range) ? ts.first(range.range) : range.range; if (range.facts & RangeFacts.UsesThis) { var containingClass = ts.getContainingClass(current); if (containingClass) { var containingFunction = ts.findAncestor(current, ts.isFunctionLikeDeclaration); return containingFunction ? [containingFunction, containingClass] : [containingClass]; } } var scopes = []; while (true) { current = current.parent; if (current.kind === 149) { current = ts.findAncestor(current, function (parent) { return ts.isFunctionLikeDeclaration(parent); }).parent; } if (isScope(current)) { scopes.push(current); if (current.kind === 274) { return scopes; } } } } function getFunctionExtractionAtIndex(targetRange, context, requestedChangesIndex) { var _a = getPossibleExtractionsWorker(targetRange, context), scopes = _a.scopes, _b = _a.readsAndWrites, target = _b.target, usagesPerScope = _b.usagesPerScope, functionErrorsPerScope = _b.functionErrorsPerScope, exposedVariableDeclarations = _b.exposedVariableDeclarations; ts.Debug.assert(!functionErrorsPerScope[requestedChangesIndex].length, "The extraction went missing? How?"); context.cancellationToken.throwIfCancellationRequested(); return extractFunctionInScope(target, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], exposedVariableDeclarations, targetRange, context); } function getConstantExtractionAtIndex(targetRange, context, requestedChangesIndex) { var _a = getPossibleExtractionsWorker(targetRange, context), scopes = _a.scopes, _b = _a.readsAndWrites, target = _b.target, usagesPerScope = _b.usagesPerScope, constantErrorsPerScope = _b.constantErrorsPerScope, exposedVariableDeclarations = _b.exposedVariableDeclarations; ts.Debug.assert(!constantErrorsPerScope[requestedChangesIndex].length, "The extraction went missing? How?"); ts.Debug.assert(exposedVariableDeclarations.length === 0, "Extract constant accepted a range containing a variable declaration?"); context.cancellationToken.throwIfCancellationRequested(); var expression = ts.isExpression(target) ? target : target.statements[0].expression; return extractConstantInScope(expression, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], targetRange.facts, context); } function getPossibleExtractions(targetRange, context) { var _a = getPossibleExtractionsWorker(targetRange, context), scopes = _a.scopes, _b = _a.readsAndWrites, functionErrorsPerScope = _b.functionErrorsPerScope, constantErrorsPerScope = _b.constantErrorsPerScope; var extractions = scopes.map(function (scope, i) { var functionDescriptionPart = getDescriptionForFunctionInScope(scope); var constantDescriptionPart = getDescriptionForConstantInScope(scope); var scopeDescription = ts.isFunctionLikeDeclaration(scope) ? getDescriptionForFunctionLikeDeclaration(scope) : ts.isClassLike(scope) ? getDescriptionForClassLikeDeclaration(scope) : getDescriptionForModuleLikeDeclaration(scope); var functionDescription; var constantDescription; if (scopeDescription === 1) { functionDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1_scope), [functionDescriptionPart, "global"]); constantDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1_scope), [constantDescriptionPart, "global"]); } else if (scopeDescription === 0) { functionDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1_scope), [functionDescriptionPart, "module"]); constantDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1_scope), [constantDescriptionPart, "module"]); } else { functionDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1), [functionDescriptionPart, scopeDescription]); constantDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_1), [constantDescriptionPart, scopeDescription]); } if (i === 0 && !ts.isClassLike(scope)) { constantDescription = ts.formatStringFromArgs(ts.getLocaleSpecificMessage(ts.Diagnostics.Extract_to_0_in_enclosing_scope), [constantDescriptionPart]); } return { functionExtraction: { description: functionDescription, errors: functionErrorsPerScope[i], }, constantExtraction: { description: constantDescription, errors: constantErrorsPerScope[i], }, }; }); return extractions; } function getPossibleExtractionsWorker(targetRange, context) { var sourceFile = context.file; var scopes = collectEnclosingScopes(targetRange); var enclosingTextRange = getEnclosingTextRange(targetRange, sourceFile); var readsAndWrites = collectReadsAndWrites(targetRange, scopes, enclosingTextRange, sourceFile, context.program.getTypeChecker(), context.cancellationToken); return { scopes: scopes, readsAndWrites: readsAndWrites }; } function getDescriptionForFunctionInScope(scope) { return ts.isFunctionLikeDeclaration(scope) ? "inner function" : ts.isClassLike(scope) ? "method" : "function"; } function getDescriptionForConstantInScope(scope) { return ts.isClassLike(scope) ? "readonly field" : "constant"; } function getDescriptionForFunctionLikeDeclaration(scope) { switch (scope.kind) { case 155: return "constructor"; case 192: case 234: return scope.name ? "function '" + scope.name.text + "'" : "anonymous function"; case 193: return "arrow function"; case 154: return "method '" + scope.name.getText(); case 156: return "'get " + scope.name.getText() + "'"; case 157: return "'set " + scope.name.getText() + "'"; default: throw ts.Debug.assertNever(scope); } } function getDescriptionForClassLikeDeclaration(scope) { return scope.kind === 235 ? scope.name ? "class '" + scope.name.text + "'" : "anonymous class declaration" : scope.name ? "class expression '" + scope.name.text + "'" : "anonymous class expression"; } function getDescriptionForModuleLikeDeclaration(scope) { return scope.kind === 240 ? "namespace '" + scope.parent.name.getText() + "'" : scope.externalModuleIndicator ? 0 : 1; } var SpecialScope; (function (SpecialScope) { SpecialScope[SpecialScope["Module"] = 0] = "Module"; SpecialScope[SpecialScope["Global"] = 1] = "Global"; })(SpecialScope || (SpecialScope = {})); function extractFunctionInScope(node, scope, _a, exposedVariableDeclarations, range, context) { var usagesInScope = _a.usages, typeParameterUsages = _a.typeParameterUsages, substitutions = _a.substitutions; var checker = context.program.getTypeChecker(); var file = scope.getSourceFile(); var functionNameText = ts.getUniqueName(ts.isClassLike(scope) ? "newMethod" : "newFunction", file); var isJS = ts.isInJavaScriptFile(scope); var functionName = ts.createIdentifier(functionNameText); var returnType; var parameters = []; var callArguments = []; var writes; usagesInScope.forEach(function (usage, name) { var typeNode; if (!isJS) { var type = checker.getTypeOfSymbolAtLocation(usage.symbol, usage.node); type = checker.getBaseTypeOfLiteralType(type); typeNode = checker.typeToTypeNode(type, scope, 1); } var paramDecl = ts.createParameter(undefined, undefined, undefined, name, undefined, typeNode); parameters.push(paramDecl); if (usage.usage === 2) { (writes || (writes = [])).push(usage); } callArguments.push(ts.createIdentifier(name)); }); var typeParametersAndDeclarations = ts.arrayFrom(typeParameterUsages.values()).map(function (type) { return ({ type: type, declaration: getFirstDeclaration(type) }); }); var sortedTypeParametersAndDeclarations = typeParametersAndDeclarations.sort(compareTypesByDeclarationOrder); var typeParameters = sortedTypeParametersAndDeclarations.length === 0 ? undefined : sortedTypeParametersAndDeclarations.map(function (t) { return t.declaration; }); var callTypeArguments = typeParameters !== undefined ? typeParameters.map(function (decl) { return ts.createTypeReferenceNode(decl.name, undefined); }) : undefined; if (ts.isExpression(node) && !isJS) { var contextualType = checker.getContextualType(node); returnType = checker.typeToTypeNode(contextualType, scope, 1); } var _b = transformFunctionBody(node, exposedVariableDeclarations, writes, substitutions, !!(range.facts & RangeFacts.HasReturn)), body = _b.body, returnValueProperty = _b.returnValueProperty; ts.suppressLeadingAndTrailingTrivia(body); var newFunction; if (ts.isClassLike(scope)) { var modifiers = isJS ? [] : [ts.createToken(112)]; if (range.facts & RangeFacts.InStaticRegion) { modifiers.push(ts.createToken(115)); } if (range.facts & RangeFacts.IsAsyncFunction) { modifiers.push(ts.createToken(120)); } newFunction = ts.createMethod(undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, typeParameters, parameters, returnType, body); } else { newFunction = ts.createFunctionDeclaration(undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.createToken(120)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, typeParameters, parameters, returnType, body); } var changeTracker = ts.textChanges.ChangeTracker.fromContext(context); var minInsertionPos = (isReadonlyArray(range.range) ? ts.last(range.range) : range.range).end; var nodeToInsertBefore = getNodeToInsertFunctionBefore(minInsertionPos, scope); if (nodeToInsertBefore) { changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newFunction, true); } else { changeTracker.insertNodeAtEndOfScope(context.file, scope, newFunction); } var newNodes = []; var called = getCalledExpression(scope, range, functionNameText); var call = ts.createCall(called, callTypeArguments, callArguments); if (range.facts & RangeFacts.IsGenerator) { call = ts.createYield(ts.createToken(39), call); } if (range.facts & RangeFacts.IsAsyncFunction) { call = ts.createAwait(call); } if (exposedVariableDeclarations.length && !writes) { ts.Debug.assert(!returnValueProperty); ts.Debug.assert(!(range.facts & RangeFacts.HasReturn)); if (exposedVariableDeclarations.length === 1) { var variableDeclaration = exposedVariableDeclarations[0]; newNodes.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(ts.getSynthesizedDeepClone(variableDeclaration.name), ts.getSynthesizedDeepClone(variableDeclaration.type), call)], variableDeclaration.parent.flags))); } else { var bindingElements = []; var typeElements = []; var commonNodeFlags = exposedVariableDeclarations[0].parent.flags; var sawExplicitType = false; for (var _i = 0, exposedVariableDeclarations_1 = exposedVariableDeclarations; _i < exposedVariableDeclarations_1.length; _i++) { var variableDeclaration = exposedVariableDeclarations_1[_i]; bindingElements.push(ts.createBindingElement(undefined, undefined, ts.getSynthesizedDeepClone(variableDeclaration.name))); var variableType = checker.typeToTypeNode(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(variableDeclaration)), scope, 1); typeElements.push(ts.createPropertySignature(undefined, variableDeclaration.symbol.name, undefined, variableType, undefined)); sawExplicitType = sawExplicitType || variableDeclaration.type !== undefined; commonNodeFlags = commonNodeFlags & variableDeclaration.parent.flags; } var typeLiteral = sawExplicitType ? ts.createTypeLiteralNode(typeElements) : undefined; if (typeLiteral) { ts.setEmitFlags(typeLiteral, 1); } newNodes.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(ts.createObjectBindingPattern(bindingElements), typeLiteral, call)], commonNodeFlags))); } } else if (exposedVariableDeclarations.length || writes) { if (exposedVariableDeclarations.length) { for (var _c = 0, exposedVariableDeclarations_2 = exposedVariableDeclarations; _c < exposedVariableDeclarations_2.length; _c++) { var variableDeclaration = exposedVariableDeclarations_2[_c]; var flags = variableDeclaration.parent.flags; if (flags & 2) { flags = (flags & ~2) | 1; } newNodes.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(variableDeclaration.symbol.name, getTypeDeepCloneUnionUndefined(variableDeclaration.type))], flags))); } } if (returnValueProperty) { newNodes.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(returnValueProperty, getTypeDeepCloneUnionUndefined(returnType))], 1))); } var assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); if (returnValueProperty) { assignments.unshift(ts.createShorthandPropertyAssignment(returnValueProperty)); } if (assignments.length === 1) { ts.Debug.assert(!returnValueProperty); newNodes.push(ts.createStatement(ts.createAssignment(assignments[0].name, call))); if (range.facts & RangeFacts.HasReturn) { newNodes.push(ts.createReturn()); } } else { newNodes.push(ts.createStatement(ts.createAssignment(ts.createObjectLiteral(assignments), call))); if (returnValueProperty) { newNodes.push(ts.createReturn(ts.createIdentifier(returnValueProperty))); } } } else { if (range.facts & RangeFacts.HasReturn) { newNodes.push(ts.createReturn(call)); } else if (isReadonlyArray(range.range)) { newNodes.push(ts.createStatement(call)); } else { newNodes.push(call); } } if (isReadonlyArray(range.range)) { changeTracker.replaceNodeRangeWithNodes(context.file, ts.first(range.range), ts.last(range.range), newNodes); } else { changeTracker.replaceNodeWithNodes(context.file, range.range, newNodes); } var edits = changeTracker.getChanges(); var renameRange = isReadonlyArray(range.range) ? ts.first(range.range) : range.range; var renameFilename = renameRange.getSourceFile().fileName; var renameLocation = ts.getRenameLocation(edits, renameFilename, functionNameText, false); return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits }; function getTypeDeepCloneUnionUndefined(typeNode) { if (typeNode === undefined) { return undefined; } var clone = ts.getSynthesizedDeepClone(typeNode); var withoutParens = clone; while (ts.isParenthesizedTypeNode(withoutParens)) { withoutParens = withoutParens.type; } return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 140; }) ? clone : ts.createUnionTypeNode([clone, ts.createKeywordTypeNode(140)]); } } function extractConstantInScope(node, scope, _a, rangeFacts, context) { var substitutions = _a.substitutions; var checker = context.program.getTypeChecker(); var file = scope.getSourceFile(); var localNameText = ts.getUniqueName(ts.isClassLike(scope) ? "newProperty" : "newLocal", file); var isJS = ts.isInJavaScriptFile(scope); var variableType = isJS || !checker.isContextSensitive(node) ? undefined : checker.typeToTypeNode(checker.getContextualType(node), scope, 1); var initializer = transformConstantInitializer(node, substitutions); ts.suppressLeadingAndTrailingTrivia(initializer); var changeTracker = ts.textChanges.ChangeTracker.fromContext(context); if (ts.isClassLike(scope)) { ts.Debug.assert(!isJS); var modifiers = []; modifiers.push(ts.createToken(112)); if (rangeFacts & RangeFacts.InStaticRegion) { modifiers.push(ts.createToken(115)); } modifiers.push(ts.createToken(132)); var newVariable = ts.createProperty(undefined, modifiers, localNameText, undefined, variableType, initializer); var localReference = ts.createPropertyAccess(rangeFacts & RangeFacts.InStaticRegion ? ts.createIdentifier(scope.name.getText()) : ts.createThis(), ts.createIdentifier(localNameText)); var maxInsertionPos = node.pos; var nodeToInsertBefore = getNodeToInsertPropertyBefore(maxInsertionPos, scope); changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariable, true); changeTracker.replaceNode(context.file, node, localReference); } else { var newVariableDeclaration = ts.createVariableDeclaration(localNameText, variableType, initializer); var oldVariableDeclaration = getContainingVariableDeclarationIfInList(node, scope); if (oldVariableDeclaration) { changeTracker.insertNodeBefore(context.file, oldVariableDeclaration, newVariableDeclaration); var localReference = ts.createIdentifier(localNameText); changeTracker.replaceNode(context.file, node, localReference); } else if (node.parent.kind === 216 && scope === ts.findAncestor(node, isScope)) { var newVariableStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([newVariableDeclaration], 2)); changeTracker.replaceNode(context.file, node.parent, newVariableStatement); } else { var newVariableStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([newVariableDeclaration], 2)); var nodeToInsertBefore = getNodeToInsertConstantBefore(node, scope); if (nodeToInsertBefore.pos === 0) { changeTracker.insertNodeAtTopOfFile(context.file, newVariableStatement, false); } else { changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariableStatement, false); } if (node.parent.kind === 216) { changeTracker.deleteNode(context.file, node.parent, ts.textChanges.useNonAdjustedPositions); } else { var localReference = ts.createIdentifier(localNameText); changeTracker.replaceNode(context.file, node, localReference); } } } var edits = changeTracker.getChanges(); var renameFilename = node.getSourceFile().fileName; var renameLocation = ts.getRenameLocation(edits, renameFilename, localNameText, true); return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits }; } function getContainingVariableDeclarationIfInList(node, scope) { var prevNode; while (node !== undefined && node !== scope) { if (ts.isVariableDeclaration(node) && node.initializer === prevNode && ts.isVariableDeclarationList(node.parent) && node.parent.declarations.length > 1) { return node; } prevNode = node; node = node.parent; } } function getFirstDeclaration(type) { var firstDeclaration; var symbol = type.symbol; if (symbol && symbol.declarations) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; if (firstDeclaration === undefined || declaration.pos < firstDeclaration.pos) { firstDeclaration = declaration; } } } return firstDeclaration; } function compareTypesByDeclarationOrder(_a, _b) { var type1 = _a.type, declaration1 = _a.declaration; var type2 = _b.type, declaration2 = _b.declaration; return ts.compareProperties(declaration1, declaration2, "pos", ts.compareValues) || ts.compareStringsCaseSensitive(type1.symbol ? type1.symbol.getName() : "", type2.symbol ? type2.symbol.getName() : "") || ts.compareValues(type1.id, type2.id); } function getCalledExpression(scope, range, functionNameText) { var functionReference = ts.createIdentifier(functionNameText); if (ts.isClassLike(scope)) { var lhs = range.facts & RangeFacts.InStaticRegion ? ts.createIdentifier(scope.name.text) : ts.createThis(); return ts.createPropertyAccess(lhs, functionReference); } else { return functionReference; } } function transformFunctionBody(body, exposedVariableDeclarations, writes, substitutions, hasReturn) { var hasWritesOrVariableDeclarations = writes !== undefined || exposedVariableDeclarations.length > 0; if (ts.isBlock(body) && !hasWritesOrVariableDeclarations && substitutions.size === 0) { return { body: ts.createBlock(body.statements, true), returnValueProperty: undefined }; } var returnValueProperty; var ignoreReturns = false; var statements = ts.createNodeArray(ts.isBlock(body) ? body.statements.slice(0) : [ts.isStatement(body) ? body : ts.createReturn(body)]); if (hasWritesOrVariableDeclarations || substitutions.size) { var rewrittenStatements = ts.visitNodes(statements, visitor).slice(); if (hasWritesOrVariableDeclarations && !hasReturn && ts.isStatement(body)) { var assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); if (assignments.length === 1) { rewrittenStatements.push(ts.createReturn(assignments[0].name)); } else { rewrittenStatements.push(ts.createReturn(ts.createObjectLiteral(assignments))); } } return { body: ts.createBlock(rewrittenStatements, true), returnValueProperty: returnValueProperty }; } else { return { body: ts.createBlock(statements, true), returnValueProperty: undefined }; } function visitor(node) { if (!ignoreReturns && node.kind === 225 && hasWritesOrVariableDeclarations) { var assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); if (node.expression) { if (!returnValueProperty) { returnValueProperty = "__return"; } assignments.unshift(ts.createPropertyAssignment(returnValueProperty, ts.visitNode(node.expression, visitor))); } if (assignments.length === 1) { return ts.createReturn(assignments[0].name); } else { return ts.createReturn(ts.createObjectLiteral(assignments)); } } else { var oldIgnoreReturns = ignoreReturns; ignoreReturns = ignoreReturns || ts.isFunctionLikeDeclaration(node) || ts.isClassLike(node); var substitution = substitutions.get(ts.getNodeId(node).toString()); var result = substitution ? ts.getSynthesizedDeepClone(substitution) : ts.visitEachChild(node, visitor, ts.nullTransformationContext); ignoreReturns = oldIgnoreReturns; return result; } } } function transformConstantInitializer(initializer, substitutions) { return substitutions.size ? visitor(initializer) : initializer; function visitor(node) { var substitution = substitutions.get(ts.getNodeId(node).toString()); return substitution ? ts.getSynthesizedDeepClone(substitution) : ts.visitEachChild(node, visitor, ts.nullTransformationContext); } } function getStatementsOrClassElements(scope) { if (ts.isFunctionLikeDeclaration(scope)) { var body = scope.body; if (ts.isBlock(body)) { return body.statements; } } else if (ts.isModuleBlock(scope) || ts.isSourceFile(scope)) { return scope.statements; } else if (ts.isClassLike(scope)) { return scope.members; } else { ts.assertTypeIsNever(scope); } return ts.emptyArray; } function getNodeToInsertFunctionBefore(minPos, scope) { return ts.find(getStatementsOrClassElements(scope), function (child) { return child.pos >= minPos && ts.isFunctionLikeDeclaration(child) && !ts.isConstructorDeclaration(child); }); } function getNodeToInsertPropertyBefore(maxPos, scope) { var members = scope.members; ts.Debug.assert(members.length > 0); var prevMember; var allProperties = true; for (var _i = 0, members_7 = members; _i < members_7.length; _i++) { var member = members_7[_i]; if (member.pos > maxPos) { return prevMember || members[0]; } if (allProperties && !ts.isPropertyDeclaration(member)) { if (prevMember !== undefined) { return member; } allProperties = false; } prevMember = member; } if (prevMember === undefined) return ts.Debug.fail(); return prevMember; } function getNodeToInsertConstantBefore(node, scope) { ts.Debug.assert(!ts.isClassLike(scope)); var prevScope; for (var curr = node; curr !== scope; curr = curr.parent) { if (isScope(curr)) { prevScope = curr; } } for (var curr = (prevScope || node).parent;; curr = curr.parent) { if (isBlockLike(curr)) { var prevStatement = void 0; for (var _i = 0, _a = curr.statements; _i < _a.length; _i++) { var statement = _a[_i]; if (statement.pos > node.pos) { break; } prevStatement = statement; } if (!prevStatement && ts.isCaseClause(curr)) { ts.Debug.assert(ts.isSwitchStatement(curr.parent.parent)); return curr.parent.parent; } return ts.Debug.assertDefined(prevStatement); } ts.Debug.assert(curr !== scope, "Didn't encounter a block-like before encountering scope"); } } function getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes) { var variableAssignments = ts.map(exposedVariableDeclarations, function (v) { return ts.createShorthandPropertyAssignment(v.symbol.name); }); var writeAssignments = ts.map(writes, function (w) { return ts.createShorthandPropertyAssignment(w.symbol.name); }); return variableAssignments === undefined ? writeAssignments : writeAssignments === undefined ? variableAssignments : variableAssignments.concat(writeAssignments); } function isReadonlyArray(v) { return ts.isArray(v); } function getEnclosingTextRange(targetRange, sourceFile) { return isReadonlyArray(targetRange.range) ? { pos: ts.first(targetRange.range).getStart(sourceFile), end: ts.last(targetRange.range).getEnd() } : targetRange.range; } var Usage; (function (Usage) { Usage[Usage["Read"] = 1] = "Read"; Usage[Usage["Write"] = 2] = "Write"; })(Usage || (Usage = {})); function collectReadsAndWrites(targetRange, scopes, enclosingTextRange, sourceFile, checker, cancellationToken) { var allTypeParameterUsages = ts.createMap(); var usagesPerScope = []; var substitutionsPerScope = []; var functionErrorsPerScope = []; var constantErrorsPerScope = []; var visibleDeclarationsInExtractedRange = []; var exposedVariableSymbolSet = ts.createMap(); var exposedVariableDeclarations = []; var firstExposedNonVariableDeclaration; var expression = !isReadonlyArray(targetRange.range) ? targetRange.range : targetRange.range.length === 1 && ts.isExpressionStatement(targetRange.range[0]) ? targetRange.range[0].expression : undefined; var expressionDiagnostic; if (expression === undefined) { var statements = targetRange.range; var start = ts.first(statements).getStart(); var end = ts.last(statements).end; expressionDiagnostic = ts.createFileDiagnostic(sourceFile, start, end - start, Messages.expressionExpected); } else if (checker.getTypeAtLocation(expression).flags & (4096 | 32768)) { expressionDiagnostic = ts.createDiagnosticForNode(expression, Messages.uselessConstantType); } for (var _i = 0, scopes_1 = scopes; _i < scopes_1.length; _i++) { var scope = scopes_1[_i]; usagesPerScope.push({ usages: ts.createMap(), typeParameterUsages: ts.createMap(), substitutions: ts.createMap() }); substitutionsPerScope.push(ts.createMap()); functionErrorsPerScope.push(ts.isFunctionLikeDeclaration(scope) && scope.kind !== 234 ? [ts.createDiagnosticForNode(scope, Messages.cannotExtractToOtherFunctionLike)] : []); var constantErrors = []; if (expressionDiagnostic) { constantErrors.push(expressionDiagnostic); } if (ts.isClassLike(scope) && ts.isInJavaScriptFile(scope)) { constantErrors.push(ts.createDiagnosticForNode(scope, Messages.cannotExtractToJSClass)); } if (ts.isArrowFunction(scope) && !ts.isBlock(scope.body)) { constantErrors.push(ts.createDiagnosticForNode(scope, Messages.cannotExtractToExpressionArrowFunction)); } constantErrorsPerScope.push(constantErrors); } var seenUsages = ts.createMap(); var target = isReadonlyArray(targetRange.range) ? ts.createBlock(targetRange.range) : targetRange.range; var unmodifiedNode = isReadonlyArray(targetRange.range) ? ts.first(targetRange.range) : targetRange.range; var inGenericContext = isInGenericContext(unmodifiedNode); collectUsages(target); if (inGenericContext && !isReadonlyArray(targetRange.range)) { var contextualType = checker.getContextualType(targetRange.range); recordTypeParameterUsages(contextualType); } if (allTypeParameterUsages.size > 0) { var seenTypeParameterUsages = ts.createMap(); var i_1 = 0; for (var curr = unmodifiedNode; curr !== undefined && i_1 < scopes.length; curr = curr.parent) { if (curr === scopes[i_1]) { seenTypeParameterUsages.forEach(function (typeParameter, id) { usagesPerScope[i_1].typeParameterUsages.set(id, typeParameter); }); i_1++; } if (ts.isDeclarationWithTypeParameters(curr)) { for (var _a = 0, _b = ts.getEffectiveTypeParameterDeclarations(curr); _a < _b.length; _a++) { var typeParameterDecl = _b[_a]; var typeParameter = checker.getTypeAtLocation(typeParameterDecl); if (allTypeParameterUsages.has(typeParameter.id.toString())) { seenTypeParameterUsages.set(typeParameter.id.toString(), typeParameter); } } } } ts.Debug.assert(i_1 === scopes.length); } if (visibleDeclarationsInExtractedRange.length) { var containingLexicalScopeOfExtraction = ts.isBlockScope(scopes[0], scopes[0].parent) ? scopes[0] : ts.getEnclosingBlockScopeContainer(scopes[0]); ts.forEachChild(containingLexicalScopeOfExtraction, checkForUsedDeclarations); } var _loop_24 = function (i) { var scopeUsages = usagesPerScope[i]; if (i > 0 && (scopeUsages.usages.size > 0 || scopeUsages.typeParameterUsages.size > 0)) { var errorNode = isReadonlyArray(targetRange.range) ? targetRange.range[0] : targetRange.range; constantErrorsPerScope[i].push(ts.createDiagnosticForNode(errorNode, Messages.cannotAccessVariablesFromNestedScopes)); } var hasWrite = false; var readonlyClassPropertyWrite; usagesPerScope[i].usages.forEach(function (value) { if (value.usage === 2) { hasWrite = true; if (value.symbol.flags & 106500 && value.symbol.valueDeclaration && ts.hasModifier(value.symbol.valueDeclaration, 64)) { readonlyClassPropertyWrite = value.symbol.valueDeclaration; } } }); ts.Debug.assert(isReadonlyArray(targetRange.range) || exposedVariableDeclarations.length === 0); if (hasWrite && !isReadonlyArray(targetRange.range)) { var diag = ts.createDiagnosticForNode(targetRange.range, Messages.cannotWriteInExpression); functionErrorsPerScope[i].push(diag); constantErrorsPerScope[i].push(diag); } else if (readonlyClassPropertyWrite && i > 0) { var diag = ts.createDiagnosticForNode(readonlyClassPropertyWrite, Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor); functionErrorsPerScope[i].push(diag); constantErrorsPerScope[i].push(diag); } else if (firstExposedNonVariableDeclaration) { var diag = ts.createDiagnosticForNode(firstExposedNonVariableDeclaration, Messages.cannotExtractExportedEntity); functionErrorsPerScope[i].push(diag); constantErrorsPerScope[i].push(diag); } }; for (var i = 0; i < scopes.length; i++) { _loop_24(i); } return { target: target, usagesPerScope: usagesPerScope, functionErrorsPerScope: functionErrorsPerScope, constantErrorsPerScope: constantErrorsPerScope, exposedVariableDeclarations: exposedVariableDeclarations }; function isInGenericContext(node) { return !!ts.findAncestor(node, function (n) { return ts.isDeclarationWithTypeParameters(n) && ts.getEffectiveTypeParameterDeclarations(n).length !== 0; }); } function recordTypeParameterUsages(type) { var symbolWalker = checker.getSymbolWalker(function () { return (cancellationToken.throwIfCancellationRequested(), true); }); var visitedTypes = symbolWalker.walkType(type).visitedTypes; for (var _i = 0, visitedTypes_1 = visitedTypes; _i < visitedTypes_1.length; _i++) { var visitedType = visitedTypes_1[_i]; if (visitedType.isTypeParameter()) { allTypeParameterUsages.set(visitedType.id.toString(), visitedType); } } } function collectUsages(node, valueUsage) { if (valueUsage === void 0) { valueUsage = 1; } if (inGenericContext) { var type = checker.getTypeAtLocation(node); recordTypeParameterUsages(type); } if (ts.isDeclaration(node) && node.symbol) { visibleDeclarationsInExtractedRange.push(node); } if (ts.isAssignmentExpression(node)) { collectUsages(node.left, 2); collectUsages(node.right); } else if (ts.isUnaryExpressionWithWrite(node)) { collectUsages(node.operand, 2); } else if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) { ts.forEachChild(node, collectUsages); } else if (ts.isIdentifier(node)) { if (!node.parent) { return; } if (ts.isQualifiedName(node.parent) && node !== node.parent.left) { return; } if (ts.isPropertyAccessExpression(node.parent) && node !== node.parent.expression) { return; } recordUsage(node, valueUsage, ts.isPartOfTypeNode(node)); } else { ts.forEachChild(node, collectUsages); } } function recordUsage(n, usage, isTypeNode) { var symbolId = recordUsagebySymbol(n, usage, isTypeNode); if (symbolId) { for (var i = 0; i < scopes.length; i++) { var substitution = substitutionsPerScope[i].get(symbolId); if (substitution) { usagesPerScope[i].substitutions.set(ts.getNodeId(n).toString(), substitution); } } } } function recordUsagebySymbol(identifier, usage, isTypeName) { var symbol = getSymbolReferencedByIdentifier(identifier); if (!symbol) { return undefined; } var symbolId = ts.getSymbolId(symbol).toString(); var lastUsage = seenUsages.get(symbolId); if (lastUsage && lastUsage >= usage) { return symbolId; } seenUsages.set(symbolId, usage); if (lastUsage) { for (var _i = 0, usagesPerScope_1 = usagesPerScope; _i < usagesPerScope_1.length; _i++) { var perScope = usagesPerScope_1[_i]; var prevEntry = perScope.usages.get(identifier.text); if (prevEntry) { perScope.usages.set(identifier.text, { usage: usage, symbol: symbol, node: identifier }); } } return symbolId; } var decls = symbol.getDeclarations(); var declInFile = decls && ts.find(decls, function (d) { return d.getSourceFile() === sourceFile; }); if (!declInFile) { return undefined; } if (ts.rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) { return undefined; } if (targetRange.facts & RangeFacts.IsGenerator && usage === 2) { var diag = ts.createDiagnosticForNode(identifier, Messages.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators); for (var _a = 0, functionErrorsPerScope_1 = functionErrorsPerScope; _a < functionErrorsPerScope_1.length; _a++) { var errors = functionErrorsPerScope_1[_a]; errors.push(diag); } for (var _b = 0, constantErrorsPerScope_1 = constantErrorsPerScope; _b < constantErrorsPerScope_1.length; _b++) { var errors = constantErrorsPerScope_1[_b]; errors.push(diag); } } for (var i = 0; i < scopes.length; i++) { var scope = scopes[i]; var resolvedSymbol = checker.resolveName(symbol.name, scope, symbol.flags, false); if (resolvedSymbol === symbol) { continue; } if (!substitutionsPerScope[i].has(symbolId)) { var substitution = tryReplaceWithQualifiedNameOrPropertyAccess(symbol.exportSymbol || symbol, scope, isTypeName); if (substitution) { substitutionsPerScope[i].set(symbolId, substitution); } else if (isTypeName) { if (!(symbol.flags & 262144)) { var diag = ts.createDiagnosticForNode(identifier, Messages.typeWillNotBeVisibleInTheNewScope); functionErrorsPerScope[i].push(diag); constantErrorsPerScope[i].push(diag); } } else { usagesPerScope[i].usages.set(identifier.text, { usage: usage, symbol: symbol, node: identifier }); } } } return symbolId; } function checkForUsedDeclarations(node) { if (node === targetRange.range || (isReadonlyArray(targetRange.range) && targetRange.range.indexOf(node) >= 0)) { return; } var sym = ts.isIdentifier(node) ? getSymbolReferencedByIdentifier(node) : checker.getSymbolAtLocation(node); if (sym) { var decl = ts.find(visibleDeclarationsInExtractedRange, function (d) { return d.symbol === sym; }); if (decl) { if (ts.isVariableDeclaration(decl)) { var idString = decl.symbol.id.toString(); if (!exposedVariableSymbolSet.has(idString)) { exposedVariableDeclarations.push(decl); exposedVariableSymbolSet.set(idString, true); } } else { firstExposedNonVariableDeclaration = firstExposedNonVariableDeclaration || decl; } } } ts.forEachChild(node, checkForUsedDeclarations); } function getSymbolReferencedByIdentifier(identifier) { return identifier.parent && ts.isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier ? checker.getShorthandAssignmentValueSymbol(identifier.parent) : checker.getSymbolAtLocation(identifier); } function tryReplaceWithQualifiedNameOrPropertyAccess(symbol, scopeDecl, isTypeNode) { if (!symbol) { return undefined; } var decls = symbol.getDeclarations(); if (decls && decls.some(function (d) { return d.parent === scopeDecl; })) { return ts.createIdentifier(symbol.name); } var prefix = tryReplaceWithQualifiedNameOrPropertyAccess(symbol.parent, scopeDecl, isTypeNode); if (prefix === undefined) { return undefined; } return isTypeNode ? ts.createQualifiedName(prefix, ts.createIdentifier(symbol.name)) : ts.createPropertyAccess(prefix, symbol.name); } } function isExtractableExpression(node) { var parent = node.parent; switch (parent.kind) { case 273: return false; } switch (node.kind) { case 9: return parent.kind !== 244 && parent.kind !== 248; case 204: case 180: case 182: return false; case 71: return parent.kind !== 182 && parent.kind !== 248 && parent.kind !== 252; } return true; } function isBlockLike(node) { switch (node.kind) { case 213: case 274: case 240: case 266: return true; default: return false; } } })(extractSymbol = refactor.extractSymbol || (refactor.extractSymbol = {})); })(refactor = ts.refactor || (ts.refactor = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor) { var generateGetAccessorAndSetAccessor; (function (generateGetAccessorAndSetAccessor) { var actionName = "Generate 'get' and 'set' accessors"; var actionDescription = ts.Diagnostics.Generate_get_and_set_accessors.message; refactor.registerRefactor(actionName, { getEditsForAction: getEditsForAction, getAvailableActions: getAvailableActions }); function getAvailableActions(context) { var file = context.file; if (!getConvertibleFieldAtPosition(context, file)) return undefined; return [{ name: actionName, description: actionDescription, actions: [ { name: actionName, description: actionDescription } ] }]; } function getEditsForAction(context, _actionName) { var file = context.file; var fieldInfo = getConvertibleFieldAtPosition(context, file); if (!fieldInfo) return undefined; var isJS = ts.isSourceFileJavaScript(file); var changeTracker = ts.textChanges.ChangeTracker.fromContext(context); var isStatic = fieldInfo.isStatic, isReadonly = fieldInfo.isReadonly, fieldName = fieldInfo.fieldName, accessorName = fieldInfo.accessorName, originalName = fieldInfo.originalName, type = fieldInfo.type, container = fieldInfo.container, declaration = fieldInfo.declaration, renameAccessor = fieldInfo.renameAccessor; ts.suppressLeadingAndTrailingTrivia(fieldName); ts.suppressLeadingAndTrailingTrivia(declaration); ts.suppressLeadingAndTrailingTrivia(container); var isInClassLike = ts.isClassLike(container); var modifierFlags = ts.getModifierFlags(declaration) & ~64; var accessorModifiers = isInClassLike ? !modifierFlags || modifierFlags & 8 ? getModifiers(isJS, isStatic, 114) : ts.createNodeArray(ts.createModifiersFromModifierFlags(modifierFlags)) : undefined; var fieldModifiers = isInClassLike ? getModifiers(isJS, isStatic, 112) : undefined; updateFieldDeclaration(changeTracker, file, declaration, fieldName, fieldModifiers); var getAccessor = generateGetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic, container); ts.suppressLeadingAndTrailingTrivia(getAccessor); insertAccessor(changeTracker, file, getAccessor, declaration, container); if (isReadonly) { var constructor = ts.getFirstConstructorWithBody(container); if (constructor) { updateReadonlyPropertyInitializerStatementConstructor(changeTracker, context, constructor, fieldName, originalName); } } else { var setAccessor = generateSetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic, container); ts.suppressLeadingAndTrailingTrivia(setAccessor); insertAccessor(changeTracker, file, setAccessor, declaration, container); } var edits = changeTracker.getChanges(); var renameFilename = file.fileName; var nameNeedRename = renameAccessor ? accessorName : fieldName; var renameLocationOffset = ts.isIdentifier(nameNeedRename) ? 0 : -1; var renameLocation = renameLocationOffset + ts.getRenameLocation(edits, renameFilename, nameNeedRename.text, ts.isParameter(declaration)); return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits }; } function isConvertibleName(name) { return ts.isIdentifier(name) || ts.isStringLiteral(name); } function isAcceptedDeclaration(node) { return ts.isParameterPropertyDeclaration(node) || ts.isPropertyDeclaration(node) || ts.isPropertyAssignment(node); } function createPropertyName(name, originalName) { return ts.isIdentifier(originalName) ? ts.createIdentifier(name) : ts.createLiteral(name); } function createAccessorAccessExpression(fieldName, isStatic, container) { var leftHead = isStatic ? container.name : ts.createThis(); return ts.isIdentifier(fieldName) ? ts.createPropertyAccess(leftHead, fieldName) : ts.createElementAccess(leftHead, ts.createLiteral(fieldName)); } function getModifiers(isJS, isStatic, accessModifier) { var modifiers = ts.append(!isJS ? [ts.createToken(accessModifier)] : undefined, isStatic ? ts.createToken(115) : undefined); return modifiers && ts.createNodeArray(modifiers); } function startsWithUnderscore(name) { return name.charCodeAt(0) === 95; } function getConvertibleFieldAtPosition(context, file) { var startPosition = context.startPosition, endPosition = context.endPosition; var node = ts.getTokenAtPosition(file, startPosition, false); var declaration = ts.findAncestor(node.parent, isAcceptedDeclaration); var meaning = 28 | 32 | 64; if (!declaration || !ts.rangeOverlapsWithStartEnd(declaration.name, startPosition, endPosition) || !isConvertibleName(declaration.name) || (ts.getModifierFlags(declaration) | meaning) !== meaning) return undefined; var name = declaration.name.text; var startWithUnderscore = startsWithUnderscore(name); var fieldName = createPropertyName(startWithUnderscore ? name : ts.getUniqueName("_" + name, file), declaration.name); var accessorName = createPropertyName(startWithUnderscore ? ts.getUniqueName(name.substring(1), file) : name, declaration.name); return { isStatic: ts.hasStaticModifier(declaration), isReadonly: ts.hasReadonlyModifier(declaration), type: ts.getTypeAnnotationNode(declaration), container: declaration.kind === 149 ? declaration.parent.parent : declaration.parent, originalName: declaration.name, declaration: declaration, fieldName: fieldName, accessorName: accessorName, renameAccessor: startWithUnderscore }; } function generateGetAccessor(fieldName, accessorName, type, modifiers, isStatic, container) { return ts.createGetAccessor(undefined, modifiers, accessorName, undefined, type, ts.createBlock([ ts.createReturn(createAccessorAccessExpression(fieldName, isStatic, container)) ], true)); } function generateSetAccessor(fieldName, accessorName, type, modifiers, isStatic, container) { return ts.createSetAccessor(undefined, modifiers, accessorName, [ts.createParameter(undefined, undefined, undefined, ts.createIdentifier("value"), undefined, type)], ts.createBlock([ ts.createStatement(ts.createAssignment(createAccessorAccessExpression(fieldName, isStatic, container), ts.createIdentifier("value"))) ], true)); } function updatePropertyDeclaration(changeTracker, file, declaration, fieldName, modifiers) { var property = ts.updateProperty(declaration, declaration.decorators, modifiers, fieldName, declaration.questionToken || declaration.exclamationToken, declaration.type, declaration.initializer); changeTracker.replaceNode(file, declaration, property); } function updatePropertyAssignmentDeclaration(changeTracker, file, declaration, fieldName) { var assignment = ts.updatePropertyAssignment(declaration, fieldName, declaration.initializer); changeTracker.replacePropertyAssignment(file, declaration, assignment); } function updateFieldDeclaration(changeTracker, file, declaration, fieldName, modifiers) { if (ts.isPropertyDeclaration(declaration)) { updatePropertyDeclaration(changeTracker, file, declaration, fieldName, modifiers); } else if (ts.isPropertyAssignment(declaration)) { updatePropertyAssignmentDeclaration(changeTracker, file, declaration, fieldName); } else { changeTracker.replaceNode(file, declaration, ts.updateParameter(declaration, declaration.decorators, modifiers, declaration.dotDotDotToken, ts.cast(fieldName, ts.isIdentifier), declaration.questionToken, declaration.type, declaration.initializer)); } } function insertAccessor(changeTracker, file, accessor, declaration, container) { ts.isParameterPropertyDeclaration(declaration) ? changeTracker.insertNodeAtClassStart(file, container, accessor) : ts.isPropertyAssignment(declaration) ? changeTracker.insertNodeAfterComma(file, declaration, accessor) : changeTracker.insertNodeAfter(file, declaration, accessor); } function updateReadonlyPropertyInitializerStatementConstructor(changeTracker, context, constructor, fieldName, originalName) { if (!constructor.body) return; var file = context.file, program = context.program, cancellationToken = context.cancellationToken; var referenceEntries = ts.mapDefined(ts.FindAllReferences.getReferenceEntriesForNode(originalName.parent.pos, originalName, program, [file], cancellationToken), function (entry) { return (entry.type === "node" && ts.rangeContainsRange(constructor, entry.node) && ts.isIdentifier(entry.node) && ts.isWriteAccess(entry.node)) ? entry.node : undefined; }); ts.forEach(referenceEntries, function (entry) { var parent = entry.parent; var accessorName = ts.createIdentifier(fieldName.text); var node = ts.isBinaryExpression(parent) ? ts.updateBinary(parent, accessorName, parent.right, parent.operatorToken) : ts.isPropertyAccessExpression(parent) ? ts.updatePropertyAccess(parent, parent.expression, accessorName) : ts.Debug.fail("Unexpected write access token"); changeTracker.replaceNode(file, parent, node); }); } })(generateGetAccessorAndSetAccessor = refactor.generateGetAccessorAndSetAccessor || (refactor.generateGetAccessorAndSetAccessor = {})); })(refactor = ts.refactor || (ts.refactor = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor) { var refactorName = "Move to a new file"; refactor.registerRefactor(refactorName, { getAvailableActions: function (context) { if (!context.preferences.allowTextChangesInNewFiles || getStatementsToMove(context) === undefined) return undefined; var description = ts.getLocaleSpecificMessage(ts.Diagnostics.Move_to_a_new_file); return [{ name: refactorName, description: description, actions: [{ name: refactorName, description: description }] }]; }, getEditsForAction: function (context, actionName) { ts.Debug.assert(actionName === refactorName); var statements = ts.Debug.assertDefined(getStatementsToMove(context)); var edits = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(context.file, context.program, statements, t, context.host, context.preferences); }); return { edits: edits, renameFilename: undefined, renameLocation: undefined }; } }); function getRangeToMove(context) { var file = context.file; var range = ts.createTextRangeFromSpan(ts.getRefactorContextSpan(context)); var statements = file.statements; var startNodeIndex = ts.findIndex(statements, function (s) { return s.end > range.pos; }); if (startNodeIndex === -1) return undefined; var startStatement = statements[startNodeIndex]; if (ts.isNamedDeclaration(startStatement) && startStatement.name && ts.rangeContainsRange(startStatement.name, range)) { return { toMove: [statements[startNodeIndex]], afterLast: statements[startNodeIndex + 1] }; } if (range.pos > startStatement.getStart(file)) return undefined; var afterEndNodeIndex = ts.findIndex(statements, function (s) { return s.end > range.end; }, startNodeIndex); if (afterEndNodeIndex !== -1 && (afterEndNodeIndex === 0 || statements[afterEndNodeIndex].getStart(file) < range.end)) return undefined; return { toMove: statements.slice(startNodeIndex, afterEndNodeIndex === -1 ? statements.length : afterEndNodeIndex), afterLast: afterEndNodeIndex === -1 ? undefined : statements[afterEndNodeIndex], }; } function doChange(oldFile, program, toMove, changes, host, preferences) { var checker = program.getTypeChecker(); var usage = getUsageInfo(oldFile, toMove.all, checker); var currentDirectory = ts.getDirectoryPath(oldFile.fileName); var extension = ts.extensionFromPath(oldFile.fileName); var newModuleName = makeUniqueModuleName(getNewModuleName(usage.movedSymbols), extension, currentDirectory, host); var newFileNameWithExtension = newModuleName + extension; changes.createNewFile(oldFile, ts.combinePaths(currentDirectory, newFileNameWithExtension), getNewStatementsAndRemoveFromOldFile(oldFile, usage, changes, toMove, program, newModuleName, preferences)); addNewFileToTsconfig(program, changes, oldFile.fileName, newFileNameWithExtension, ts.hostGetCanonicalFileName(host)); } function getStatementsToMove(context) { var rangeToMove = getRangeToMove(context); if (rangeToMove === undefined) return undefined; var all = []; var ranges = []; var toMove = rangeToMove.toMove, afterLast = rangeToMove.afterLast; ts.getRangesWhere(toMove, function (s) { return !isPureImport(s); }, function (start, afterEndIndex) { for (var i = start; i < afterEndIndex; i++) all.push(toMove[i]); ranges.push({ first: toMove[start], afterLast: afterLast }); }); return all.length === 0 ? undefined : { all: all, ranges: ranges }; } function isPureImport(node) { switch (node.kind) { case 244: return true; case 243: return !ts.hasModifier(node, 1); case 214: return node.declarationList.declarations.every(function (d) { return !!d.initializer && ts.isRequireCall(d.initializer, true); }); default: return false; } } function addNewFileToTsconfig(program, changes, oldFileName, newFileNameWithExtension, getCanonicalFileName) { var cfg = program.getCompilerOptions().configFile; if (!cfg) return; var newFileAbsolutePath = ts.normalizePath(ts.combinePaths(oldFileName, "..", newFileNameWithExtension)); var newFilePath = ts.getRelativePathFromFile(cfg.fileName, newFileAbsolutePath, getCanonicalFileName); var cfgObject = cfg.statements[0] && ts.tryCast(cfg.statements[0].expression, ts.isObjectLiteralExpression); var filesProp = cfgObject && ts.find(cfgObject.properties, function (prop) { return ts.isPropertyAssignment(prop) && ts.isStringLiteral(prop.name) && prop.name.text === "files"; }); if (filesProp && ts.isArrayLiteralExpression(filesProp.initializer)) { changes.insertNodeInListAfter(cfg, ts.last(filesProp.initializer.elements), ts.createLiteral(newFilePath), filesProp.initializer.elements); } } function getNewStatementsAndRemoveFromOldFile(oldFile, usage, changes, toMove, program, newModuleName, preferences) { var checker = program.getTypeChecker(); if (!oldFile.externalModuleIndicator && !oldFile.commonJsModuleIndicator) { deleteMovedStatements(oldFile, toMove.ranges, changes); return toMove.all; } var useEs6ModuleSyntax = !!oldFile.externalModuleIndicator; var quotePreference = ts.getQuotePreference(oldFile, preferences); var importsFromNewFile = createOldFileImportsFromNewFile(usage.oldFileImportsFromNewFile, newModuleName, useEs6ModuleSyntax, quotePreference); if (importsFromNewFile) { ts.insertImport(changes, oldFile, importsFromNewFile); } deleteUnusedOldImports(oldFile, toMove.all, changes, usage.unusedImportsFromOldFile, checker); deleteMovedStatements(oldFile, toMove.ranges, changes); updateImportsInOtherFiles(changes, program, oldFile, usage.movedSymbols, newModuleName); return getNewFileImportsAndAddExportInOldFile(oldFile, usage.oldImportsNeededByNewFile, usage.newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference).concat(addExports(oldFile, toMove.all, usage.oldFileImportsFromNewFile, useEs6ModuleSyntax)); } function deleteMovedStatements(sourceFile, moved, changes) { for (var _i = 0, moved_1 = moved; _i < moved_1.length; _i++) { var _a = moved_1[_i], first_1 = _a.first, afterLast = _a.afterLast; changes.deleteNodeRangeExcludingEnd(sourceFile, first_1, afterLast); } } function deleteUnusedOldImports(oldFile, toMove, changes, toDelete, checker) { for (var _i = 0, _a = oldFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; if (ts.contains(toMove, statement)) continue; forEachImportInStatement(statement, function (i) { return deleteUnusedImports(oldFile, i, changes, function (name) { return toDelete.has(checker.getSymbolAtLocation(name)); }); }); } } function updateImportsInOtherFiles(changes, program, oldFile, movedSymbols, newModuleName) { var checker = program.getTypeChecker(); var _loop_25 = function (sourceFile) { if (sourceFile === oldFile) return "continue"; var _loop_26 = function (statement) { forEachImportInStatement(statement, function (importNode) { if (checker.getSymbolAtLocation(moduleSpecifierFromImport(importNode)) !== oldFile.symbol) return; var shouldMove = function (name) { var symbol = ts.isBindingElement(name.parent) ? ts.getPropertySymbolFromBindingElement(checker, name.parent) : ts.skipAlias(checker.getSymbolAtLocation(name), checker); return !!symbol && movedSymbols.has(symbol); }; deleteUnusedImports(sourceFile, importNode, changes, shouldMove); var newModuleSpecifier = ts.combinePaths(ts.getDirectoryPath(moduleSpecifierFromImport(importNode).text), newModuleName); var newImportDeclaration = filterImport(importNode, ts.createLiteral(newModuleSpecifier), shouldMove); if (newImportDeclaration) changes.insertNodeAfter(sourceFile, statement, newImportDeclaration); var ns = getNamespaceLikeImport(importNode); if (ns) updateNamespaceLikeImport(changes, sourceFile, checker, movedSymbols, newModuleName, newModuleSpecifier, ns, importNode); }); }; for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { var statement = _a[_i]; _loop_26(statement); } }; for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { var sourceFile = _a[_i]; _loop_25(sourceFile); } } function getNamespaceLikeImport(node) { switch (node.kind) { case 244: return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 246 ? node.importClause.namedBindings.name : undefined; case 243: return node.name; case 232: return ts.tryCast(node.name, ts.isIdentifier); default: return ts.Debug.assertNever(node); } } function updateNamespaceLikeImport(changes, sourceFile, checker, movedSymbols, newModuleName, newModuleSpecifier, oldImportId, oldImportNode) { var preferredNewNamespaceName = ts.codefix.moduleSpecifierToValidIdentifier(newModuleName, 6); var needUniqueName = false; var toChange = []; ts.FindAllReferences.Core.eachSymbolReferenceInFile(oldImportId, checker, sourceFile, function (ref) { if (!ts.isPropertyAccessExpression(ref.parent)) return; needUniqueName = needUniqueName || !!checker.resolveName(preferredNewNamespaceName, ref, 67108863, true); if (movedSymbols.has(checker.getSymbolAtLocation(ref.parent.name))) { toChange.push(ref); } }); if (toChange.length) { var newNamespaceName = needUniqueName ? ts.getUniqueName(preferredNewNamespaceName, sourceFile) : preferredNewNamespaceName; for (var _i = 0, toChange_1 = toChange; _i < toChange_1.length; _i++) { var ref = toChange_1[_i]; changes.replaceNode(sourceFile, ref, ts.createIdentifier(newNamespaceName)); } changes.insertNodeAfter(sourceFile, oldImportNode, updateNamespaceLikeImportNode(oldImportNode, newModuleName, newModuleSpecifier)); } } function updateNamespaceLikeImportNode(node, newNamespaceName, newModuleSpecifier) { var newNamespaceId = ts.createIdentifier(newNamespaceName); var newModuleString = ts.createLiteral(newModuleSpecifier); switch (node.kind) { case 244: return ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(newNamespaceId)), newModuleString); case 243: return ts.createImportEqualsDeclaration(undefined, undefined, newNamespaceId, ts.createExternalModuleReference(newModuleString)); case 232: return ts.createVariableDeclaration(newNamespaceId, undefined, createRequireCall(newModuleString)); default: return ts.Debug.assertNever(node); } } function moduleSpecifierFromImport(i) { return (i.kind === 244 ? i.moduleSpecifier : i.kind === 243 ? i.moduleReference.expression : i.initializer.arguments[0]); } function forEachImportInStatement(statement, cb) { if (ts.isImportDeclaration(statement)) { if (ts.isStringLiteral(statement.moduleSpecifier)) cb(statement); } else if (ts.isImportEqualsDeclaration(statement)) { if (ts.isExternalModuleReference(statement.moduleReference) && ts.isStringLiteralLike(statement.moduleReference.expression)) { cb(statement); } } else if (ts.isVariableStatement(statement)) { for (var _i = 0, _a = statement.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (decl.initializer && ts.isRequireCall(decl.initializer, true)) { cb(decl); } } } } function createOldFileImportsFromNewFile(newFileNeedExport, newFileNameWithExtension, useEs6Imports, quotePreference) { var defaultImport; var imports = []; newFileNeedExport.forEach(function (symbol) { if (symbol.escapedName === "default") { defaultImport = ts.createIdentifier(ts.symbolNameNoDefault(symbol)); } else { imports.push(symbol.name); } }); return makeImportOrRequire(defaultImport, imports, newFileNameWithExtension, useEs6Imports, quotePreference); } function makeImportOrRequire(defaultImport, imports, path, useEs6Imports, quotePreference) { path = ts.ensurePathIsNonModuleName(path); if (useEs6Imports) { var specifiers = imports.map(function (i) { return ts.createImportSpecifier(undefined, ts.createIdentifier(i)); }); return ts.makeImportIfNecessary(defaultImport, specifiers, path, quotePreference); } else { ts.Debug.assert(!defaultImport); var bindingElements = imports.map(function (i) { return ts.createBindingElement(undefined, undefined, i); }); return bindingElements.length ? makeVariableStatement(ts.createObjectBindingPattern(bindingElements), undefined, createRequireCall(ts.createLiteral(path))) : undefined; } } function makeVariableStatement(name, type, initializer, flags) { if (flags === void 0) { flags = 2; } return ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(name, type, initializer)], flags)); } function createRequireCall(moduleSpecifier) { return ts.createCall(ts.createIdentifier("require"), undefined, [moduleSpecifier]); } function addExports(sourceFile, toMove, needExport, useEs6Exports) { return ts.flatMap(toMove, function (statement) { if (isTopLevelDeclarationStatement(statement) && !isExported(sourceFile, statement, useEs6Exports) && forEachTopLevelDeclaration(statement, function (d) { return needExport.has(ts.Debug.assertDefined(d.symbol)); })) { var exports_3 = addExport(statement, useEs6Exports); if (exports_3) return exports_3; } return statement; }); } function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) { switch (importDecl.kind) { case 244: deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused); break; case 243: if (isUnused(importDecl.name)) { changes.deleteNode(sourceFile, importDecl); } break; case 232: deleteUnusedImportsInVariableDeclaration(sourceFile, importDecl, changes, isUnused); break; default: ts.Debug.assertNever(importDecl); } } function deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused) { if (!importDecl.importClause) return; var _a = importDecl.importClause, name = _a.name, namedBindings = _a.namedBindings; var defaultUnused = !name || isUnused(name); var namedBindingsUnused = !namedBindings || (namedBindings.kind === 246 ? isUnused(namedBindings.name) : namedBindings.elements.every(function (e) { return isUnused(e.name); })); if (defaultUnused && namedBindingsUnused) { changes.deleteNode(sourceFile, importDecl); } else { if (name && defaultUnused) { changes.deleteNode(sourceFile, name); } if (namedBindings) { if (namedBindingsUnused) { changes.deleteNode(sourceFile, namedBindings); } else if (namedBindings.kind === 247) { for (var _i = 0, _b = namedBindings.elements; _i < _b.length; _i++) { var element = _b[_i]; if (isUnused(element.name)) changes.deleteNodeInList(sourceFile, element); } } } } } function deleteUnusedImportsInVariableDeclaration(sourceFile, varDecl, changes, isUnused) { var name = varDecl.name; switch (name.kind) { case 71: if (isUnused(name)) { changes.deleteNode(sourceFile, name); } break; case 181: break; case 180: if (name.elements.every(function (e) { return ts.isIdentifier(e.name) && isUnused(e.name); })) { changes.deleteNode(sourceFile, ts.isVariableDeclarationList(varDecl.parent) && varDecl.parent.declarations.length === 1 ? varDecl.parent.parent : varDecl); } else { for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { var element = _a[_i]; if (ts.isIdentifier(element.name) && isUnused(element.name)) { changes.deleteNode(sourceFile, element.name); } } } break; } } function getNewFileImportsAndAddExportInOldFile(oldFile, importsToCopy, newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference) { var copiedOldImports = []; for (var _i = 0, _a = oldFile.statements; _i < _a.length; _i++) { var oldStatement = _a[_i]; forEachImportInStatement(oldStatement, function (i) { ts.append(copiedOldImports, filterImport(i, moduleSpecifierFromImport(i), function (name) { return importsToCopy.has(checker.getSymbolAtLocation(name)); })); }); } var oldFileDefault; var oldFileNamedImports = []; var markSeenTop = ts.nodeSeenTracker(); newFileImportsFromOldFile.forEach(function (symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (!isTopLevelDeclaration(decl)) continue; var name = nameOfTopLevelDeclaration(decl); if (!name) continue; var top = getTopLevelDeclarationStatement(decl); if (markSeenTop(top)) { addExportToChanges(oldFile, top, changes, useEs6ModuleSyntax); } if (ts.hasModifier(decl, 512)) { oldFileDefault = name; } else { oldFileNamedImports.push(name.text); } } }); ts.append(copiedOldImports, makeImportOrRequire(oldFileDefault, oldFileNamedImports, ts.removeFileExtension(ts.getBaseFileName(oldFile.fileName)), useEs6ModuleSyntax, quotePreference)); return copiedOldImports; } function makeUniqueModuleName(moduleName, extension, inDirectory, host) { var newModuleName = moduleName; for (var i = 1;; i++) { var name = ts.combinePaths(inDirectory, newModuleName + extension); if (!host.fileExists(name)) return newModuleName; newModuleName = moduleName + "." + i; } } function getNewModuleName(movedSymbols) { return movedSymbols.forEachEntry(ts.symbolNameNoDefault) || "newFile"; } function getUsageInfo(oldFile, toMove, checker) { var movedSymbols = new SymbolSet(); var oldImportsNeededByNewFile = new SymbolSet(); var newFileImportsFromOldFile = new SymbolSet(); for (var _i = 0, toMove_1 = toMove; _i < toMove_1.length; _i++) { var statement = toMove_1[_i]; forEachTopLevelDeclaration(statement, function (decl) { movedSymbols.add(ts.Debug.assertDefined(ts.isExpressionStatement(decl) ? checker.getSymbolAtLocation(decl.expression.left) : decl.symbol)); }); } for (var _a = 0, toMove_2 = toMove; _a < toMove_2.length; _a++) { var statement = toMove_2[_a]; forEachReference(statement, checker, function (symbol) { if (!symbol.declarations) return; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var decl = _a[_i]; if (isInImport(decl)) { oldImportsNeededByNewFile.add(symbol); } else if (isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile && !movedSymbols.has(symbol)) { newFileImportsFromOldFile.add(symbol); } } }); } var unusedImportsFromOldFile = oldImportsNeededByNewFile.clone(); var oldFileImportsFromNewFile = new SymbolSet(); for (var _b = 0, _c = oldFile.statements; _b < _c.length; _b++) { var statement = _c[_b]; if (ts.contains(toMove, statement)) continue; forEachReference(statement, checker, function (symbol) { if (movedSymbols.has(symbol)) oldFileImportsFromNewFile.add(symbol); unusedImportsFromOldFile.delete(symbol); }); } return { movedSymbols: movedSymbols, newFileImportsFromOldFile: newFileImportsFromOldFile, oldFileImportsFromNewFile: oldFileImportsFromNewFile, oldImportsNeededByNewFile: oldImportsNeededByNewFile, unusedImportsFromOldFile: unusedImportsFromOldFile }; } function isInImport(decl) { switch (decl.kind) { case 243: case 248: case 245: return true; case 232: return isVariableDeclarationInImport(decl); case 182: return ts.isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent); default: return false; } } function isVariableDeclarationInImport(decl) { return ts.isSourceFile(decl.parent.parent.parent) && decl.initializer && ts.isRequireCall(decl.initializer, true); } function filterImport(i, moduleSpecifier, keep) { switch (i.kind) { case 244: { var clause = i.importClause; if (!clause) return undefined; var defaultImport = clause.name && keep(clause.name) ? clause.name : undefined; var namedBindings = clause.namedBindings && filterNamedBindings(clause.namedBindings, keep); return defaultImport || namedBindings ? ts.createImportDeclaration(undefined, undefined, ts.createImportClause(defaultImport, namedBindings), moduleSpecifier) : undefined; } case 243: return keep(i.name) ? i : undefined; case 232: { var name = filterBindingName(i.name, keep); return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : undefined; } default: return ts.Debug.assertNever(i); } } function filterNamedBindings(namedBindings, keep) { if (namedBindings.kind === 246) { return keep(namedBindings.name) ? namedBindings : undefined; } else { var newElements = namedBindings.elements.filter(function (e) { return keep(e.name); }); return newElements.length ? ts.createNamedImports(newElements) : undefined; } } function filterBindingName(name, keep) { switch (name.kind) { case 71: return keep(name) ? name : undefined; case 181: return name; case 180: { var newElements = name.elements.filter(function (prop) { return prop.propertyName || !ts.isIdentifier(prop.name) || keep(prop.name); }); return newElements.length ? ts.createObjectBindingPattern(newElements) : undefined; } } } function forEachReference(node, checker, onReference) { node.forEachChild(function cb(node) { if (ts.isIdentifier(node) && !ts.isDeclarationName(node)) { var sym = checker.getSymbolAtLocation(node); if (sym) onReference(sym); } else { node.forEachChild(cb); } }); } var SymbolSet = (function () { function SymbolSet() { this.map = ts.createMap(); } SymbolSet.prototype.add = function (symbol) { this.map.set(String(ts.getSymbolId(symbol)), symbol); }; SymbolSet.prototype.has = function (symbol) { return this.map.has(String(ts.getSymbolId(symbol))); }; SymbolSet.prototype.delete = function (symbol) { this.map.delete(String(ts.getSymbolId(symbol))); }; SymbolSet.prototype.forEach = function (cb) { this.map.forEach(cb); }; SymbolSet.prototype.forEachEntry = function (cb) { return ts.forEachEntry(this.map, cb); }; SymbolSet.prototype.clone = function () { var clone = new SymbolSet(); ts.copyEntries(this.map, clone.map); return clone; }; return SymbolSet; }()); function isTopLevelDeclaration(node) { return isNonVariableTopLevelDeclaration(node) && ts.isSourceFile(node.parent) || ts.isVariableDeclaration(node) && ts.isSourceFile(node.parent.parent.parent); } function sourceFileOfTopLevelDeclaration(node) { return ts.isVariableDeclaration(node) ? node.parent.parent.parent : node.parent; } function isTopLevelDeclarationStatement(node) { ts.Debug.assert(ts.isSourceFile(node.parent)); return isNonVariableTopLevelDeclaration(node) || ts.isVariableStatement(node); } function isNonVariableTopLevelDeclaration(node) { switch (node.kind) { case 234: case 235: case 239: case 238: case 237: case 236: case 243: return true; default: return false; } } function forEachTopLevelDeclaration(statement, cb) { switch (statement.kind) { case 234: case 235: case 239: case 238: case 237: case 236: case 243: return cb(statement); case 214: return ts.forEach(statement.declarationList.declarations, cb); case 216: { var expression = statement.expression; return ts.isBinaryExpression(expression) && ts.getSpecialPropertyAssignmentKind(expression) === 1 ? cb(statement) : undefined; } } } function nameOfTopLevelDeclaration(d) { return d.kind === 216 ? d.expression.left.name : ts.tryCast(d.name, ts.isIdentifier); } function getTopLevelDeclarationStatement(d) { return ts.isVariableDeclaration(d) ? d.parent.parent : d; } function addExportToChanges(sourceFile, decl, changes, useEs6Exports) { if (isExported(sourceFile, decl, useEs6Exports)) return; if (useEs6Exports) { if (!ts.isExpressionStatement(decl)) changes.insertExportModifier(sourceFile, decl); } else { var names = getNamesToExportInCommonJS(decl); if (names.length !== 0) changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment)); } } function isExported(sourceFile, decl, useEs6Exports) { if (useEs6Exports) { return !ts.isExpressionStatement(decl) && ts.hasModifier(decl, 1); } else { return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); }); } } function addExport(decl, useEs6Exports) { return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl); } function addEs6Export(d) { var modifiers = ts.concatenate([ts.createModifier(84)], d.modifiers); switch (d.kind) { case 234: return ts.updateFunctionDeclaration(d, d.decorators, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body); case 235: return ts.updateClassDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members); case 214: return ts.updateVariableStatement(d, modifiers, d.declarationList); case 239: return ts.updateModuleDeclaration(d, d.decorators, modifiers, d.name, d.body); case 238: return ts.updateEnumDeclaration(d, d.decorators, modifiers, d.name, d.members); case 237: return ts.updateTypeAliasDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.type); case 236: return ts.updateInterfaceDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members); case 243: return ts.updateImportEqualsDeclaration(d, d.decorators, modifiers, d.name, d.moduleReference); case 216: return ts.Debug.fail(); default: return ts.Debug.assertNever(d); } } function addCommonjsExport(decl) { return [decl].concat(getNamesToExportInCommonJS(decl).map(createExportAssignment)); } function getNamesToExportInCommonJS(decl) { switch (decl.kind) { case 234: case 235: return [decl.name.text]; case 214: return ts.mapDefined(decl.declarationList.declarations, function (d) { return ts.isIdentifier(d.name) ? d.name.text : undefined; }); case 239: case 238: case 237: case 236: case 243: return ts.emptyArray; case 216: return ts.Debug.fail(); default: return ts.Debug.assertNever(decl); } } function createExportAssignment(name) { return ts.createExpressionStatement(ts.createBinary(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.createIdentifier(name)), 58, ts.createIdentifier(name))); } })(refactor = ts.refactor || (ts.refactor = {})); })(ts || (ts = {})); var ts; (function (ts) { var refactor; (function (refactor) { var addOrRemoveBracesToArrowFunction; (function (addOrRemoveBracesToArrowFunction) { var refactorName = "Add or remove braces in an arrow function"; var refactorDescription = ts.Diagnostics.Add_or_remove_braces_in_an_arrow_function.message; var addBracesActionName = "Add braces to arrow function"; var removeBracesActionName = "Remove braces from arrow function"; var addBracesActionDescription = ts.Diagnostics.Add_braces_to_arrow_function.message; var removeBracesActionDescription = ts.Diagnostics.Remove_braces_from_arrow_function.message; refactor.registerRefactor(refactorName, { getEditsForAction: getEditsForAction, getAvailableActions: getAvailableActions }); function getAvailableActions(context) { var file = context.file, startPosition = context.startPosition; var info = getConvertibleArrowFunctionAtPosition(file, startPosition); if (!info) return undefined; return [{ name: refactorName, description: refactorDescription, actions: [ info.addBraces ? { name: addBracesActionName, description: addBracesActionDescription } : { name: removeBracesActionName, description: removeBracesActionDescription } ] }]; } function getEditsForAction(context, actionName) { var file = context.file, startPosition = context.startPosition; var info = getConvertibleArrowFunctionAtPosition(file, startPosition); if (!info) return undefined; var expression = info.expression, returnStatement = info.returnStatement, func = info.func; var body; if (actionName === addBracesActionName) { var returnStatement_1 = ts.createReturn(expression); body = ts.createBlock([returnStatement_1], true); ts.suppressLeadingAndTrailingTrivia(body); ts.copyComments(expression, returnStatement_1, file, 3, true); } else if (actionName === removeBracesActionName && returnStatement) { var actualExpression = expression || ts.createVoidZero(); body = needsParentheses(actualExpression) ? ts.createParen(actualExpression) : actualExpression; ts.suppressLeadingAndTrailingTrivia(body); ts.copyComments(returnStatement, body, file, 3, false); } else { ts.Debug.fail("invalid action"); } var edits = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(file, func.body, body); }); return { renameFilename: undefined, renameLocation: undefined, edits: edits }; } function needsParentheses(expression) { return ts.isBinaryExpression(expression) && expression.operatorToken.kind === 26 || ts.isObjectLiteralExpression(expression); } function getConvertibleArrowFunctionAtPosition(file, startPosition) { var node = ts.getTokenAtPosition(file, startPosition, false); var func = ts.getContainingFunction(node); if (!func || !ts.isArrowFunction(func) || (!ts.rangeContainsRange(func, node) || ts.rangeContainsRange(func.body, node))) return undefined; if (ts.isExpression(func.body)) { return { func: func, addBraces: true, expression: func.body }; } else if (func.body.statements.length === 1) { var firstStatement = ts.first(func.body.statements); if (ts.isReturnStatement(firstStatement)) { return { func: func, addBraces: false, expression: firstStatement.expression, returnStatement: firstStatement }; } } return undefined; } })(addOrRemoveBracesToArrowFunction = refactor.addOrRemoveBracesToArrowFunction || (refactor.addOrRemoveBracesToArrowFunction = {})); })(refactor = ts.refactor || (ts.refactor = {})); })(ts || (ts = {})); var ts; (function (ts) { ts.servicesVersion = "0.8"; function createNode(kind, pos, end, parent) { var node = ts.isNodeKind(kind) ? new NodeObject(kind, pos, end) : kind === 71 ? new IdentifierObject(71, pos, end) : new TokenObject(kind, pos, end); node.parent = parent; node.flags = parent.flags & 12679168; return node; } var NodeObject = (function () { function NodeObject(kind, pos, end) { this.pos = pos; this.end = end; this.flags = 0; this.transformFlags = undefined; this.parent = undefined; this.kind = kind; } NodeObject.prototype.assertHasRealPosition = function (message) { ts.Debug.assert(!ts.positionIsSynthesized(this.pos) && !ts.positionIsSynthesized(this.end), message || "Node must have a real position for this operation"); }; NodeObject.prototype.getSourceFile = function () { return ts.getSourceFileOfNode(this); }; NodeObject.prototype.getStart = function (sourceFile, includeJsDocComment) { this.assertHasRealPosition(); return ts.getTokenPosOfNode(this, sourceFile, includeJsDocComment); }; NodeObject.prototype.getFullStart = function () { this.assertHasRealPosition(); return this.pos; }; NodeObject.prototype.getEnd = function () { this.assertHasRealPosition(); return this.end; }; NodeObject.prototype.getWidth = function (sourceFile) { this.assertHasRealPosition(); return this.getEnd() - this.getStart(sourceFile); }; NodeObject.prototype.getFullWidth = function () { this.assertHasRealPosition(); return this.end - this.pos; }; NodeObject.prototype.getLeadingTriviaWidth = function (sourceFile) { this.assertHasRealPosition(); return this.getStart(sourceFile) - this.pos; }; NodeObject.prototype.getFullText = function (sourceFile) { this.assertHasRealPosition(); return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end); }; NodeObject.prototype.getText = function (sourceFile) { this.assertHasRealPosition(); if (!sourceFile) { sourceFile = this.getSourceFile(); } return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd()); }; NodeObject.prototype.getChildCount = function (sourceFile) { return this.getChildren(sourceFile).length; }; NodeObject.prototype.getChildAt = function (index, sourceFile) { return this.getChildren(sourceFile)[index]; }; NodeObject.prototype.getChildren = function (sourceFile) { this.assertHasRealPosition("Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine"); return this._children || (this._children = createChildren(this, sourceFile)); }; NodeObject.prototype.getFirstToken = function (sourceFile) { this.assertHasRealPosition(); var children = this.getChildren(sourceFile); if (!children.length) { return undefined; } var child = ts.find(children, function (kid) { return kid.kind < 278 || kid.kind > 299; }); return child.kind < 146 ? child : child.getFirstToken(sourceFile); }; NodeObject.prototype.getLastToken = function (sourceFile) { this.assertHasRealPosition(); var children = this.getChildren(sourceFile); var child = ts.lastOrUndefined(children); if (!child) { return undefined; } return child.kind < 146 ? child : child.getLastToken(sourceFile); }; NodeObject.prototype.forEachChild = function (cbNode, cbNodeArray) { return ts.forEachChild(this, cbNode, cbNodeArray); }; return NodeObject; }()); function createChildren(node, sourceFile) { if (!ts.isNodeKind(node.kind)) { return ts.emptyArray; } var children = []; if (ts.isJSDocCommentContainingNode(node)) { node.forEachChild(function (child) { children.push(child); }); return children; } ts.scanner.setText((sourceFile || node.getSourceFile()).text); var pos = node.pos; var processNode = function (child) { addSyntheticNodes(children, pos, child.pos, node); children.push(child); pos = child.end; }; var processNodes = function (nodes) { addSyntheticNodes(children, pos, nodes.pos, node); children.push(createSyntaxList(nodes, node)); pos = nodes.end; }; ts.forEach(node.jsDoc, processNode); pos = node.pos; node.forEachChild(processNode, processNodes); addSyntheticNodes(children, pos, node.end, node); ts.scanner.setText(undefined); return children; } function addSyntheticNodes(nodes, pos, end, parent) { ts.scanner.setTextPos(pos); while (pos < end) { var token = ts.scanner.scan(); var textPos = ts.scanner.getTextPos(); if (textPos <= end) { if (token === 71) { ts.Debug.fail("Did not expect " + ts.Debug.showSyntaxKind(parent) + " to have an Identifier in its trivia"); } nodes.push(createNode(token, pos, textPos, parent)); } pos = textPos; if (token === 1) { break; } } } function createSyntaxList(nodes, parent) { var list = createNode(300, nodes.pos, nodes.end, parent); list._children = []; var pos = nodes.pos; for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { var node = nodes_7[_i]; addSyntheticNodes(list._children, pos, node.pos, parent); list._children.push(node); pos = node.end; } addSyntheticNodes(list._children, pos, nodes.end, parent); return list; } var TokenOrIdentifierObject = (function () { function TokenOrIdentifierObject(pos, end) { this.pos = pos; this.end = end; this.flags = 0; this.parent = undefined; } TokenOrIdentifierObject.prototype.getSourceFile = function () { return ts.getSourceFileOfNode(this); }; TokenOrIdentifierObject.prototype.getStart = function (sourceFile, includeJsDocComment) { return ts.getTokenPosOfNode(this, sourceFile, includeJsDocComment); }; TokenOrIdentifierObject.prototype.getFullStart = function () { return this.pos; }; TokenOrIdentifierObject.prototype.getEnd = function () { return this.end; }; TokenOrIdentifierObject.prototype.getWidth = function (sourceFile) { return this.getEnd() - this.getStart(sourceFile); }; TokenOrIdentifierObject.prototype.getFullWidth = function () { return this.end - this.pos; }; TokenOrIdentifierObject.prototype.getLeadingTriviaWidth = function (sourceFile) { return this.getStart(sourceFile) - this.pos; }; TokenOrIdentifierObject.prototype.getFullText = function (sourceFile) { return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end); }; TokenOrIdentifierObject.prototype.getText = function (sourceFile) { if (!sourceFile) { sourceFile = this.getSourceFile(); } return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd()); }; TokenOrIdentifierObject.prototype.getChildCount = function () { return 0; }; TokenOrIdentifierObject.prototype.getChildAt = function () { return undefined; }; TokenOrIdentifierObject.prototype.getChildren = function () { return ts.emptyArray; }; TokenOrIdentifierObject.prototype.getFirstToken = function () { return undefined; }; TokenOrIdentifierObject.prototype.getLastToken = function () { return undefined; }; TokenOrIdentifierObject.prototype.forEachChild = function () { return undefined; }; return TokenOrIdentifierObject; }()); var SymbolObject = (function () { function SymbolObject(flags, name) { this.flags = flags; this.escapedName = name; } SymbolObject.prototype.getFlags = function () { return this.flags; }; Object.defineProperty(SymbolObject.prototype, "name", { get: function () { return ts.symbolName(this); }, enumerable: true, configurable: true }); SymbolObject.prototype.getEscapedName = function () { return this.escapedName; }; SymbolObject.prototype.getName = function () { return this.name; }; SymbolObject.prototype.getDeclarations = function () { return this.declarations; }; SymbolObject.prototype.getDocumentationComment = function (checker) { if (!this.documentationComment) { this.documentationComment = ts.emptyArray; this.documentationComment = getDocumentationComment(this.declarations, checker); } return this.documentationComment; }; SymbolObject.prototype.getJsDocTags = function () { if (this.tags === undefined) { this.tags = ts.JsDoc.getJsDocTagsFromDeclarations(this.declarations); } return this.tags; }; return SymbolObject; }()); var TokenObject = (function (_super) { __extends(TokenObject, _super); function TokenObject(kind, pos, end) { var _this = _super.call(this, pos, end) || this; _this.kind = kind; return _this; } return TokenObject; }(TokenOrIdentifierObject)); var IdentifierObject = (function (_super) { __extends(IdentifierObject, _super); function IdentifierObject(_kind, pos, end) { return _super.call(this, pos, end) || this; } Object.defineProperty(IdentifierObject.prototype, "text", { get: function () { return ts.idText(this); }, enumerable: true, configurable: true }); return IdentifierObject; }(TokenOrIdentifierObject)); IdentifierObject.prototype.kind = 71; var TypeObject = (function () { function TypeObject(checker, flags) { this.checker = checker; this.flags = flags; } TypeObject.prototype.getFlags = function () { return this.flags; }; TypeObject.prototype.getSymbol = function () { return this.symbol; }; TypeObject.prototype.getProperties = function () { return this.checker.getPropertiesOfType(this); }; TypeObject.prototype.getProperty = function (propertyName) { return this.checker.getPropertyOfType(this, propertyName); }; TypeObject.prototype.getApparentProperties = function () { return this.checker.getAugmentedPropertiesOfType(this); }; TypeObject.prototype.getCallSignatures = function () { return this.checker.getSignaturesOfType(this, 0); }; TypeObject.prototype.getConstructSignatures = function () { return this.checker.getSignaturesOfType(this, 1); }; TypeObject.prototype.getStringIndexType = function () { return this.checker.getIndexTypeOfType(this, 0); }; TypeObject.prototype.getNumberIndexType = function () { return this.checker.getIndexTypeOfType(this, 1); }; TypeObject.prototype.getBaseTypes = function () { return this.isClassOrInterface() ? this.checker.getBaseTypes(this) : undefined; }; TypeObject.prototype.getNonNullableType = function () { return this.checker.getNonNullableType(this); }; TypeObject.prototype.getConstraint = function () { return this.checker.getBaseConstraintOfType(this); }; TypeObject.prototype.getDefault = function () { return this.checker.getDefaultFromTypeParameter(this); }; TypeObject.prototype.isUnion = function () { return !!(this.flags & 262144); }; TypeObject.prototype.isIntersection = function () { return !!(this.flags & 524288); }; TypeObject.prototype.isUnionOrIntersection = function () { return !!(this.flags & 786432); }; TypeObject.prototype.isLiteral = function () { return !!(this.flags & 192); }; TypeObject.prototype.isStringLiteral = function () { return !!(this.flags & 64); }; TypeObject.prototype.isNumberLiteral = function () { return !!(this.flags & 128); }; TypeObject.prototype.isTypeParameter = function () { return !!(this.flags & 65536); }; TypeObject.prototype.isClassOrInterface = function () { return !!(ts.getObjectFlags(this) & 3); }; TypeObject.prototype.isClass = function () { return !!(ts.getObjectFlags(this) & 1); }; return TypeObject; }()); var SignatureObject = (function () { function SignatureObject(checker) { this.checker = checker; } SignatureObject.prototype.getDeclaration = function () { return this.declaration; }; SignatureObject.prototype.getTypeParameters = function () { return this.typeParameters; }; SignatureObject.prototype.getParameters = function () { return this.parameters; }; SignatureObject.prototype.getReturnType = function () { return this.checker.getReturnTypeOfSignature(this); }; SignatureObject.prototype.getDocumentationComment = function () { return this.documentationComment || (this.documentationComment = getDocumentationComment(ts.singleElementArray(this.declaration), this.checker)); }; SignatureObject.prototype.getJsDocTags = function () { if (this.jsDocTags === undefined) { this.jsDocTags = this.declaration ? ts.JsDoc.getJsDocTagsFromDeclarations([this.declaration]) : []; } return this.jsDocTags; }; return SignatureObject; }()); function hasJSDocInheritDocTag(node) { return ts.getJSDocTags(node).some(function (tag) { return tag.tagName.text === "inheritDoc"; }); } function getDocumentationComment(declarations, checker) { if (!declarations) return ts.emptyArray; var doc = ts.JsDoc.getJsDocCommentsFromDeclarations(declarations); if (doc.length === 0 || declarations.some(hasJSDocInheritDocTag)) { for (var _i = 0, declarations_14 = declarations; _i < declarations_14.length; _i++) { var declaration = declarations_14[_i]; var inheritedDocs = findInheritedJSDocComments(declaration, declaration.symbol.name, checker); if (inheritedDocs) doc = doc.length === 0 ? inheritedDocs.slice() : inheritedDocs.concat(ts.lineBreakPart(), doc); } } return doc; } function findInheritedJSDocComments(declaration, propertyName, typeChecker) { return ts.firstDefined(declaration.parent ? ts.getAllSuperTypeNodes(declaration.parent) : ts.emptyArray, function (superTypeNode) { var superType = typeChecker.getTypeAtLocation(superTypeNode); var baseProperty = superType && typeChecker.getPropertyOfType(superType, propertyName); var inheritedDocs = baseProperty && baseProperty.getDocumentationComment(typeChecker); return inheritedDocs && inheritedDocs.length ? inheritedDocs : undefined; }); } var SourceFileObject = (function (_super) { __extends(SourceFileObject, _super); function SourceFileObject(kind, pos, end) { return _super.call(this, kind, pos, end) || this; } SourceFileObject.prototype.update = function (newText, textChangeRange) { return ts.updateSourceFile(this, newText, textChangeRange); }; SourceFileObject.prototype.getLineAndCharacterOfPosition = function (position) { return ts.getLineAndCharacterOfPosition(this, position); }; SourceFileObject.prototype.getLineStarts = function () { return ts.getLineStarts(this); }; SourceFileObject.prototype.getPositionOfLineAndCharacter = function (line, character) { return ts.getPositionOfLineAndCharacter(this, line, character); }; SourceFileObject.prototype.getLineEndOfPosition = function (pos) { var line = this.getLineAndCharacterOfPosition(pos).line; var lineStarts = this.getLineStarts(); var lastCharPos; if (line + 1 >= lineStarts.length) { lastCharPos = this.getEnd(); } if (!lastCharPos) { lastCharPos = lineStarts[line + 1] - 1; } var fullText = this.getFullText(); return fullText[lastCharPos] === "\n" && fullText[lastCharPos - 1] === "\r" ? lastCharPos - 1 : lastCharPos; }; SourceFileObject.prototype.getNamedDeclarations = function () { if (!this.namedDeclarations) { this.namedDeclarations = this.computeNamedDeclarations(); } return this.namedDeclarations; }; SourceFileObject.prototype.computeNamedDeclarations = function () { var result = ts.createMultiMap(); ts.forEachChild(this, visit); return result; function addDeclaration(declaration) { var name = getDeclarationName(declaration); if (name) { result.add(name, declaration); } } function getDeclarations(name) { var declarations = result.get(name); if (!declarations) { result.set(name, declarations = []); } return declarations; } function getDeclarationName(declaration) { var name = ts.getNameOfDeclaration(declaration); return name && (ts.isComputedPropertyName(name) && ts.isPropertyAccessExpression(name.expression) ? name.expression.name.text : ts.isPropertyName(name) ? ts.getNameFromPropertyName(name) : undefined); } function visit(node) { switch (node.kind) { case 234: case 192: case 154: case 153: var functionDeclaration = node; var declarationName = getDeclarationName(functionDeclaration); if (declarationName) { var declarations = getDeclarations(declarationName); var lastDeclaration = ts.lastOrUndefined(declarations); if (lastDeclaration && functionDeclaration.parent === lastDeclaration.parent && functionDeclaration.symbol === lastDeclaration.symbol) { if (functionDeclaration.body && !lastDeclaration.body) { declarations[declarations.length - 1] = functionDeclaration; } } else { declarations.push(functionDeclaration); } } ts.forEachChild(node, visit); break; case 235: case 205: case 236: case 237: case 238: case 239: case 243: case 252: case 248: case 245: case 246: case 156: case 157: case 166: addDeclaration(node); ts.forEachChild(node, visit); break; case 149: if (!ts.hasModifier(node, 92)) { break; } case 232: case 182: { var decl = node; if (ts.isBindingPattern(decl.name)) { ts.forEachChild(decl.name, visit); break; } if (decl.initializer) { visit(decl.initializer); } } case 273: case 152: case 151: addDeclaration(node); break; case 250: if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; case 244: var importClause = node.importClause; if (importClause) { if (importClause.name) { addDeclaration(importClause); } if (importClause.namedBindings) { if (importClause.namedBindings.kind === 246) { addDeclaration(importClause.namedBindings); } else { ts.forEach(importClause.namedBindings.elements, visit); } } } break; case 200: if (ts.getSpecialPropertyAssignmentKind(node) !== 0) { addDeclaration(node); } default: ts.forEachChild(node, visit); } } }; return SourceFileObject; }(NodeObject)); var SourceMapSourceObject = (function () { function SourceMapSourceObject(fileName, text, skipTrivia) { this.fileName = fileName; this.text = text; this.skipTrivia = skipTrivia; } SourceMapSourceObject.prototype.getLineAndCharacterOfPosition = function (pos) { return ts.getLineAndCharacterOfPosition(this, pos); }; return SourceMapSourceObject; }()); function getServicesObjectAllocator() { return { getNodeConstructor: function () { return NodeObject; }, getTokenConstructor: function () { return TokenObject; }, getIdentifierConstructor: function () { return IdentifierObject; }, getSourceFileConstructor: function () { return SourceFileObject; }, getSymbolConstructor: function () { return SymbolObject; }, getTypeConstructor: function () { return TypeObject; }, getSignatureConstructor: function () { return SignatureObject; }, getSourceMapSourceConstructor: function () { return SourceMapSourceObject; }, }; } function toEditorSettings(optionsAsMap) { var allPropertiesAreCamelCased = true; for (var key in optionsAsMap) { if (ts.hasProperty(optionsAsMap, key) && !isCamelCase(key)) { allPropertiesAreCamelCased = false; break; } } if (allPropertiesAreCamelCased) { return optionsAsMap; } var settings = {}; for (var key in optionsAsMap) { if (ts.hasProperty(optionsAsMap, key)) { var newKey = isCamelCase(key) ? key : key.charAt(0).toLowerCase() + key.substr(1); settings[newKey] = optionsAsMap[key]; } } return settings; } ts.toEditorSettings = toEditorSettings; function isCamelCase(s) { return !s.length || s.charAt(0) === s.charAt(0).toLowerCase(); } function displayPartsToString(displayParts) { if (displayParts) { return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join(""); } return ""; } ts.displayPartsToString = displayPartsToString; function getDefaultCompilerOptions() { return { target: 1, jsx: 1 }; } ts.getDefaultCompilerOptions = getDefaultCompilerOptions; function getSupportedCodeFixes() { return ts.codefix.getSupportedErrorCodes(); } ts.getSupportedCodeFixes = getSupportedCodeFixes; var HostCache = (function () { function HostCache(host, getCanonicalFileName) { this.host = host; this.currentDirectory = host.getCurrentDirectory(); this.fileNameToEntry = ts.createMap(); var rootFileNames = host.getScriptFileNames(); for (var _i = 0, rootFileNames_1 = rootFileNames; _i < rootFileNames_1.length; _i++) { var fileName = rootFileNames_1[_i]; this.createEntry(fileName, ts.toPath(fileName, this.currentDirectory, getCanonicalFileName)); } this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions(); } HostCache.prototype.compilationSettings = function () { return this._compilationSettings; }; HostCache.prototype.getProjectReferences = function () { return this.host.getProjectReferences && this.host.getProjectReferences(); }; HostCache.prototype.createEntry = function (fileName, path) { var entry; var scriptSnapshot = this.host.getScriptSnapshot(fileName); if (scriptSnapshot) { entry = { hostFileName: fileName, version: this.host.getScriptVersion(fileName), scriptSnapshot: scriptSnapshot, scriptKind: ts.getScriptKind(fileName, this.host) }; } else { entry = fileName; } this.fileNameToEntry.set(path, entry); return entry; }; HostCache.prototype.getEntryByPath = function (path) { return this.fileNameToEntry.get(path); }; HostCache.prototype.getHostFileInformation = function (path) { var entry = this.fileNameToEntry.get(path); return !ts.isString(entry) ? entry : undefined; }; HostCache.prototype.getOrCreateEntryByPath = function (fileName, path) { var info = this.getEntryByPath(path) || this.createEntry(fileName, path); return ts.isString(info) ? undefined : info; }; HostCache.prototype.getRootFileNames = function () { var names = []; this.fileNameToEntry.forEach(function (entry) { if (ts.isString(entry)) { names.push(entry); } else { if (entry.scriptKind !== 6) { names.push(entry.hostFileName); } } }); return names; }; HostCache.prototype.getVersion = function (path) { var file = this.getHostFileInformation(path); return (file && file.version); }; HostCache.prototype.getScriptSnapshot = function (path) { var file = this.getHostFileInformation(path); return (file && file.scriptSnapshot); }; return HostCache; }()); var SyntaxTreeCache = (function () { function SyntaxTreeCache(host) { this.host = host; } SyntaxTreeCache.prototype.getCurrentSourceFile = function (fileName) { var scriptSnapshot = this.host.getScriptSnapshot(fileName); if (!scriptSnapshot) { throw new Error("Could not find file: '" + fileName + "'."); } var scriptKind = ts.getScriptKind(fileName, this.host); var version = this.host.getScriptVersion(fileName); var sourceFile; if (this.currentFileName !== fileName) { sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, 6, version, true, scriptKind); } else if (this.currentFileVersion !== version) { var editRange = scriptSnapshot.getChangeRange(this.currentFileScriptSnapshot); sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version, editRange); } if (sourceFile) { this.currentFileVersion = version; this.currentFileName = fileName; this.currentFileScriptSnapshot = scriptSnapshot; this.currentSourceFile = sourceFile; } return this.currentSourceFile; }; return SyntaxTreeCache; }()); function setSourceFileFields(sourceFile, scriptSnapshot, version) { sourceFile.version = version; sourceFile.scriptSnapshot = scriptSnapshot; } function createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, setNodeParents, scriptKind) { var sourceFile = ts.createSourceFile(fileName, ts.getSnapshotText(scriptSnapshot), scriptTarget, setNodeParents, scriptKind); setSourceFileFields(sourceFile, scriptSnapshot, version); return sourceFile; } ts.createLanguageServiceSourceFile = createLanguageServiceSourceFile; ts.disableIncrementalParsing = false; function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version, textChangeRange, aggressiveChecks) { if (textChangeRange) { if (version !== sourceFile.version) { if (!ts.disableIncrementalParsing) { var newText = void 0; var prefix = textChangeRange.span.start !== 0 ? sourceFile.text.substr(0, textChangeRange.span.start) : ""; var suffix = ts.textSpanEnd(textChangeRange.span) !== sourceFile.text.length ? sourceFile.text.substr(ts.textSpanEnd(textChangeRange.span)) : ""; if (textChangeRange.newLength === 0) { newText = prefix && suffix ? prefix + suffix : prefix || suffix; } else { var changedText = scriptSnapshot.getText(textChangeRange.span.start, textChangeRange.span.start + textChangeRange.newLength); newText = prefix && suffix ? prefix + changedText + suffix : prefix ? (prefix + changedText) : (changedText + suffix); } var newSourceFile = ts.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); setSourceFileFields(newSourceFile, scriptSnapshot, version); newSourceFile.nameTable = undefined; if (sourceFile !== newSourceFile && sourceFile.scriptSnapshot) { if (sourceFile.scriptSnapshot.dispose) { sourceFile.scriptSnapshot.dispose(); } sourceFile.scriptSnapshot = undefined; } return newSourceFile; } } } return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, true, sourceFile.scriptKind); } ts.updateLanguageServiceSourceFile = updateLanguageServiceSourceFile; var CancellationTokenObject = (function () { function CancellationTokenObject(cancellationToken) { this.cancellationToken = cancellationToken; } CancellationTokenObject.prototype.isCancellationRequested = function () { return !!this.cancellationToken && this.cancellationToken.isCancellationRequested(); }; CancellationTokenObject.prototype.throwIfCancellationRequested = function () { if (this.isCancellationRequested()) { throw new ts.OperationCanceledException(); } }; return CancellationTokenObject; }()); var ThrottledCancellationToken = (function () { function ThrottledCancellationToken(hostCancellationToken, throttleWaitMilliseconds) { if (throttleWaitMilliseconds === void 0) { throttleWaitMilliseconds = 20; } this.hostCancellationToken = hostCancellationToken; this.throttleWaitMilliseconds = throttleWaitMilliseconds; this.lastCancellationCheckTime = 0; } ThrottledCancellationToken.prototype.isCancellationRequested = function () { var time = ts.timestamp(); var duration = Math.abs(time - this.lastCancellationCheckTime); if (duration >= this.throttleWaitMilliseconds) { this.lastCancellationCheckTime = time; return this.hostCancellationToken.isCancellationRequested(); } return false; }; ThrottledCancellationToken.prototype.throwIfCancellationRequested = function () { if (this.isCancellationRequested()) { throw new ts.OperationCanceledException(); } }; return ThrottledCancellationToken; }()); ts.ThrottledCancellationToken = ThrottledCancellationToken; function createLanguageService(host, documentRegistry, syntaxOnly) { if (documentRegistry === void 0) { documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); } if (syntaxOnly === void 0) { syntaxOnly = false; } var _a; var syntaxTreeCache = new SyntaxTreeCache(host); var program; var lastProjectVersion; var lastTypesRootVersion = 0; var cancellationToken = new CancellationTokenObject(host.getCancellationToken && host.getCancellationToken()); var currentDirectory = host.getCurrentDirectory(); if (!ts.localizedDiagnosticMessages && host.getLocalizedDiagnosticMessages) { ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); } var sourcemappedFileCache; function log(message) { if (host.log) { host.log(message); } } var useCaseSensitiveFileNames = ts.hostUsesCaseSensitiveFileNames(host); var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames); function getValidSourceFile(fileName) { var sourceFile = program.getSourceFile(fileName); if (!sourceFile) { throw new Error("Could not find file: '" + fileName + "'."); } return sourceFile; } function synchronizeHostData() { ts.Debug.assert(!syntaxOnly); if (host.getProjectVersion) { var hostProjectVersion = host.getProjectVersion(); if (hostProjectVersion) { if (lastProjectVersion === hostProjectVersion && !host.hasChangedAutomaticTypeDirectiveNames) { return; } lastProjectVersion = hostProjectVersion; } } var typeRootsVersion = host.getTypeRootsVersion ? host.getTypeRootsVersion() : 0; if (lastTypesRootVersion !== typeRootsVersion) { log("TypeRoots version has changed; provide new program"); program = undefined; lastTypesRootVersion = typeRootsVersion; } var hostCache = new HostCache(host, getCanonicalFileName); var rootFileNames = hostCache.getRootFileNames(); var hasInvalidatedResolution = host.hasInvalidatedResolution || ts.returnFalse; if (ts.isProgramUptoDate(program, rootFileNames, hostCache.compilationSettings(), function (path) { return hostCache.getVersion(path); }, fileExists, hasInvalidatedResolution, !!host.hasChangedAutomaticTypeDirectiveNames)) { return; } var newSettings = hostCache.compilationSettings(); var compilerHost = { getSourceFile: getOrCreateSourceFile, getSourceFileByPath: getOrCreateSourceFileByPath, getCancellationToken: function () { return cancellationToken; }, getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: function () { return useCaseSensitiveFileNames; }, getNewLine: function () { return ts.getNewLineCharacter(newSettings, function () { return ts.getNewLineOrDefaultFromHost(host); }); }, getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); }, writeFile: ts.noop, getCurrentDirectory: function () { return currentDirectory; }, fileExists: fileExists, readFile: function (fileName) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var entry = hostCache.getEntryByPath(path); if (entry) { return ts.isString(entry) ? undefined : ts.getSnapshotText(entry.scriptSnapshot); } return host.readFile && host.readFile(fileName); }, realpath: host.realpath && (function (path) { return host.realpath(path); }), directoryExists: function (directoryName) { return ts.directoryProbablyExists(directoryName, host); }, getDirectories: function (path) { return host.getDirectories ? host.getDirectories(path) : []; }, onReleaseOldSourceFile: onReleaseOldSourceFile, hasInvalidatedResolution: hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames: host.hasChangedAutomaticTypeDirectiveNames }; if (host.trace) { compilerHost.trace = function (message) { return host.trace(message); }; } if (host.resolveModuleNames) { compilerHost.resolveModuleNames = function (moduleNames, containingFile, reusedNames) { return host.resolveModuleNames(moduleNames, containingFile, reusedNames); }; } if (host.resolveTypeReferenceDirectives) { compilerHost.resolveTypeReferenceDirectives = function (typeReferenceDirectiveNames, containingFile) { return host.resolveTypeReferenceDirectives(typeReferenceDirectiveNames, containingFile); }; } var documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); var options = { rootNames: rootFileNames, options: newSettings, host: compilerHost, oldProgram: program, projectReferences: hostCache.getProjectReferences() }; program = ts.createProgram(options); hostCache = undefined; sourcemappedFileCache = ts.createSourceFileLikeCache(host); program.getTypeChecker(); return; function fileExists(fileName) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var entry = hostCache.getEntryByPath(path); return entry ? !ts.isString(entry) : (!!host.fileExists && host.fileExists(fileName)); } function onReleaseOldSourceFile(oldSourceFile, oldOptions) { var oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldOptions); documentRegistry.releaseDocumentWithKey(oldSourceFile.path, oldSettingsKey); } function getOrCreateSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile) { return getOrCreateSourceFileByPath(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName), languageVersion, onError, shouldCreateNewSourceFile); } function getOrCreateSourceFileByPath(fileName, path, _languageVersion, _onError, shouldCreateNewSourceFile) { ts.Debug.assert(hostCache !== undefined); var hostFileInformation = hostCache.getOrCreateEntryByPath(fileName, path); if (!hostFileInformation) { return undefined; } if (!shouldCreateNewSourceFile) { var oldSourceFile = program && program.getSourceFileByPath(path); if (oldSourceFile) { ts.Debug.assertEqual(hostFileInformation.scriptKind, oldSourceFile.scriptKind, "Registered script kind should match new script kind.", path); return documentRegistry.updateDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } } return documentRegistry.acquireDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } } function getProgram() { if (syntaxOnly) { ts.Debug.assert(program === undefined); return undefined; } synchronizeHostData(); return program; } function cleanupSemanticCache() { program = undefined; } function dispose() { if (program) { ts.forEach(program.getSourceFiles(), function (f) { return documentRegistry.releaseDocument(f.fileName, program.getCompilerOptions()); }); program = undefined; } host = undefined; } function getSyntacticDiagnostics(fileName) { synchronizeHostData(); return program.getSyntacticDiagnostics(getValidSourceFile(fileName), cancellationToken).slice(); } function getSemanticDiagnostics(fileName) { synchronizeHostData(); var targetSourceFile = getValidSourceFile(fileName); var semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile, cancellationToken); if (!program.getCompilerOptions().declaration) { return semanticDiagnostics.slice(); } var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken); return semanticDiagnostics.concat(declarationDiagnostics); } function getSuggestionDiagnostics(fileName) { synchronizeHostData(); return ts.computeSuggestionDiagnostics(getValidSourceFile(fileName), program, cancellationToken); } function getCompilerOptionsDiagnostics() { synchronizeHostData(); return program.getOptionsDiagnostics(cancellationToken).concat(program.getGlobalDiagnostics(cancellationToken)); } function getCompletionsAtPosition(fileName, position, options) { if (options === void 0) { options = ts.defaultPreferences; } var fullPreferences = __assign({}, ts.identity(options), { includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions }); synchronizeHostData(); return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter); } function getCompletionEntryDetails(fileName, position, name, formattingOptions, source, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); return ts.Completions.getCompletionEntryDetails(program, log, getValidSourceFile(fileName), position, { name: name, source: source }, host, (formattingOptions && ts.formatting.getFormatContext(formattingOptions)), getCanonicalFileName, preferences, cancellationToken); } function getCompletionEntrySymbol(fileName, position, name, source) { synchronizeHostData(); return ts.Completions.getCompletionEntrySymbol(program, log, getValidSourceFile(fileName), position, { name: name, source: source }); } function getQuickInfoAtPosition(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); if (node === sourceFile) { return undefined; } var typeChecker = program.getTypeChecker(); var symbol = getSymbolAtLocationForQuickInfo(node, typeChecker); if (!symbol || typeChecker.isUnknownSymbol(symbol)) { switch (node.kind) { case 71: if (ts.isLabelName(node)) { return undefined; } case 185: case 146: case 99: case 174: case 97: var type_4 = typeChecker.getTypeAtLocation(node); return type_4 && { kind: "", kindModifiers: "", textSpan: ts.createTextSpanFromNode(node, sourceFile), displayParts: typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.typeToDisplayParts(typeChecker, type_4, ts.getContainerNode(node)); }), documentation: type_4.symbol ? type_4.symbol.getDocumentationComment(typeChecker) : undefined, tags: type_4.symbol ? type_4.symbol.getJsDocTags() : undefined }; } return undefined; } var _a = typeChecker.runWithCancellationToken(cancellationToken, function (typeChecker) { return ts.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, ts.getContainerNode(node), node); }), symbolKind = _a.symbolKind, displayParts = _a.displayParts, documentation = _a.documentation, tags = _a.tags; return { kind: symbolKind, kindModifiers: ts.SymbolDisplay.getSymbolModifiers(symbol), textSpan: ts.createTextSpanFromNode(node, sourceFile), displayParts: displayParts, documentation: documentation, tags: tags, }; } function getSymbolAtLocationForQuickInfo(node, checker) { if ((ts.isIdentifier(node) || ts.isStringLiteral(node)) && ts.isPropertyAssignment(node.parent) && node.parent.name === node) { var type = checker.getContextualType(node.parent.parent); var property = type && checker.getPropertyOfType(type, ts.getTextOfIdentifierOrLiteral(node)); if (property) { return property; } } return checker.getSymbolAtLocation(node); } function toLineColumnOffset(fileName, position) { var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); var file = program.getSourceFile(path) || sourcemappedFileCache.get(path); return file.getLineAndCharacterOfPosition(position); } var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/gm; var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/; function scanForSourcemapURL(fileName) { var mappedFile = sourcemappedFileCache.get(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); if (!mappedFile) { return; } var starts = ts.getLineStarts(mappedFile); for (var index = starts.length - 1; index >= 0; index--) { sourceMapCommentRegExp.lastIndex = starts[index]; var comment = sourceMapCommentRegExp.exec(mappedFile.text); if (comment) { return comment[1]; } } } function convertDocumentToSourceMapper(file, contents, mapFileName) { var maps; try { maps = JSON.parse(contents); } catch (_a) { } if (!maps || !maps.sources || !maps.file || !maps.mappings) { return file.sourceMapper = ts.sourcemaps.identitySourceMapper; } return file.sourceMapper = ts.sourcemaps.decode({ readFile: function (s) { return host.readFile(s); }, fileExists: function (s) { return host.fileExists(s); }, getCanonicalFileName: getCanonicalFileName, log: log, }, mapFileName, maps, program, sourcemappedFileCache); } function getSourceMapper(fileName, file) { if (!host.readFile || !host.fileExists) { return file.sourceMapper = ts.sourcemaps.identitySourceMapper; } if (file.sourceMapper) { return file.sourceMapper; } var mapFileName = scanForSourcemapURL(fileName); if (mapFileName) { var match = base64UrlRegExp.exec(mapFileName); if (match) { if (match[1]) { var base64Object = match[1]; return convertDocumentToSourceMapper(file, ts.base64decode(ts.sys, base64Object), fileName); } mapFileName = undefined; } } var possibleMapLocations = []; if (mapFileName) { possibleMapLocations.push(mapFileName); } possibleMapLocations.push(fileName + ".map"); for (var _i = 0, possibleMapLocations_1 = possibleMapLocations; _i < possibleMapLocations_1.length; _i++) { var location = possibleMapLocations_1[_i]; var mapPath = ts.toPath(location, ts.getDirectoryPath(fileName), getCanonicalFileName); if (host.fileExists(mapPath)) { return convertDocumentToSourceMapper(file, host.readFile(mapPath), mapPath); } } return file.sourceMapper = ts.sourcemaps.identitySourceMapper; } function makeGetTargetOfMappedPosition(extract, create) { return getTargetOfMappedPosition; function getTargetOfMappedPosition(input, original) { if (original === void 0) { original = input; } var info = extract(input); if (ts.endsWith(info.fileName, ".d.ts")) { var file = program.getSourceFile(info.fileName); if (!file) { var path = ts.toPath(info.fileName, currentDirectory, getCanonicalFileName); file = sourcemappedFileCache.get(path); } if (!file) { return input; } var mapper = getSourceMapper(info.fileName, file); var newLoc = mapper.getOriginalPosition(info); if (newLoc === info) return input; return getTargetOfMappedPosition(create(newLoc, input, original), original); } return input; } } var getTargetOfMappedDeclarationInfo = makeGetTargetOfMappedPosition(function (info) { return ({ fileName: info.fileName, position: info.textSpan.start }); }, function (newLoc, info, original) { return ({ containerKind: info.containerKind, containerName: info.containerName, fileName: newLoc.fileName, kind: info.kind, name: info.name, textSpan: { start: newLoc.position, length: info.textSpan.length }, originalFileName: original.fileName, originalTextSpan: original.textSpan }); }); function getTargetOfMappedDeclarationFiles(infos) { return ts.map(infos, function (d) { return getTargetOfMappedDeclarationInfo(d); }); } function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); return getTargetOfMappedDeclarationFiles(ts.GoToDefinition.getDefinitionAtPosition(program, getValidSourceFile(fileName), position)); } function getDefinitionAndBoundSpan(fileName, position) { synchronizeHostData(); var result = ts.GoToDefinition.getDefinitionAndBoundSpan(program, getValidSourceFile(fileName), position); if (!result) return result; var mappedDefs = getTargetOfMappedDeclarationFiles(result.definitions); if (mappedDefs === result.definitions) { return result; } return { definitions: mappedDefs, textSpan: result.textSpan }; } function getTypeDefinitionAtPosition(fileName, position) { synchronizeHostData(); return getTargetOfMappedDeclarationFiles(ts.GoToDefinition.getTypeDefinitionAtPosition(program.getTypeChecker(), getValidSourceFile(fileName), position)); } var getTargetOfMappedImplementationLocation = makeGetTargetOfMappedPosition(function (info) { return ({ fileName: info.fileName, position: info.textSpan.start }); }, function (newLoc, info) { return ({ fileName: newLoc.fileName, kind: info.kind, displayParts: info.displayParts, textSpan: { start: newLoc.position, length: info.textSpan.length }, originalFileName: info.fileName, originalTextSpan: info.textSpan }); }); function getTargetOfMappedImplementationLocations(infos) { return ts.map(infos, function (d) { return getTargetOfMappedImplementationLocation(d); }); } function getImplementationAtPosition(fileName, position) { synchronizeHostData(); return getTargetOfMappedImplementationLocations(ts.FindAllReferences.getImplementationsAtPosition(program, cancellationToken, program.getSourceFiles(), getValidSourceFile(fileName), position)); } function getOccurrencesAtPosition(fileName, position) { return ts.flatMap(getDocumentHighlights(fileName, position, [fileName]), function (entry) { return entry.highlightSpans.map(function (highlightSpan) { return ({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, isWriteAccess: highlightSpan.kind === "writtenReference", isDefinition: false, isInString: highlightSpan.isInString, }); }); }); } function getDocumentHighlights(fileName, position, filesToSearch) { ts.Debug.assert(filesToSearch.some(function (f) { return ts.normalizePath(f) === fileName; })); synchronizeHostData(); var sourceFilesToSearch = ts.map(filesToSearch, function (f) { return ts.Debug.assertDefined(program.getSourceFile(f)); }); var sourceFile = getValidSourceFile(fileName); return ts.DocumentHighlights.getDocumentHighlights(program, cancellationToken, sourceFile, position, sourceFilesToSearch); } function findRenameLocations(fileName, position, findInStrings, findInComments) { return getReferences(fileName, position, { findInStrings: findInStrings, findInComments: findInComments, isForRename: true }); } function getReferencesAtPosition(fileName, position) { return getReferences(fileName, position); } function getReferences(fileName, position, options) { synchronizeHostData(); var sourceFiles = options && options.isForRename ? program.getSourceFiles().filter(function (sourceFile) { return !program.isSourceFileDefaultLibrary(sourceFile); }) : program.getSourceFiles(); return ts.FindAllReferences.findReferencedEntries(program, cancellationToken, sourceFiles, getValidSourceFile(fileName), position, options); } function findReferences(fileName, position) { synchronizeHostData(); return ts.FindAllReferences.findReferencedSymbols(program, cancellationToken, program.getSourceFiles(), getValidSourceFile(fileName), position); } function getNavigateToItems(searchValue, maxResultCount, fileName, excludeDtsFiles) { if (excludeDtsFiles === void 0) { excludeDtsFiles = false; } synchronizeHostData(); var sourceFiles = fileName ? [getValidSourceFile(fileName)] : program.getSourceFiles(); return ts.NavigateTo.getNavigateToItems(sourceFiles, program.getTypeChecker(), cancellationToken, searchValue, maxResultCount, excludeDtsFiles); } function getEmitOutput(fileName, emitOnlyDtsFiles) { if (emitOnlyDtsFiles === void 0) { emitOnlyDtsFiles = false; } synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var customTransformers = host.getCustomTransformers && host.getCustomTransformers(); return ts.getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers); } function getSignatureHelpItems(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); return ts.SignatureHelp.getSignatureHelpItems(program, sourceFile, position, cancellationToken); } function getNonBoundSourceFile(fileName) { return syntaxTreeCache.getCurrentSourceFile(fileName); } function getNameOrDottedNameSpan(fileName, startPos, _endPos) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, startPos); if (node === sourceFile) { return undefined; } switch (node.kind) { case 185: case 146: case 9: case 86: case 101: case 95: case 97: case 99: case 174: case 71: break; default: return undefined; } var nodeForStartPos = node; while (true) { if (ts.isRightSideOfPropertyAccess(nodeForStartPos) || ts.isRightSideOfQualifiedName(nodeForStartPos)) { nodeForStartPos = nodeForStartPos.parent; } else if (ts.isNameOfModuleDeclaration(nodeForStartPos)) { if (nodeForStartPos.parent.parent.kind === 239 && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { nodeForStartPos = nodeForStartPos.parent.parent.name; } else { break; } } else { break; } } return ts.createTextSpanFromBounds(nodeForStartPos.getStart(), node.getEnd()); } function getBreakpointStatementAtPosition(fileName, position) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); return ts.BreakpointResolver.spanInSourceFileAtLocation(sourceFile, position); } function getNavigationBarItems(fileName) { return ts.NavigationBar.getNavigationBarItems(syntaxTreeCache.getCurrentSourceFile(fileName), cancellationToken); } function getNavigationTree(fileName) { return ts.NavigationBar.getNavigationTree(syntaxTreeCache.getCurrentSourceFile(fileName), cancellationToken); } function isTsOrTsxFile(fileName) { var kind = ts.getScriptKind(fileName, host); return kind === 3 || kind === 4; } function getSemanticClassifications(fileName, span) { if (!isTsOrTsxFile(fileName)) { return []; } synchronizeHostData(); return ts.getSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); } function getEncodedSemanticClassifications(fileName, span) { if (!isTsOrTsxFile(fileName)) { return { spans: [], endOfLineState: 0 }; } synchronizeHostData(); return ts.getEncodedSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); } function getSyntacticClassifications(fileName, span) { return ts.getSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); } function getEncodedSyntacticClassifications(fileName, span) { return ts.getEncodedSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); } function getOutliningSpans(fileName) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); return ts.OutliningElementsCollector.collectElements(sourceFile, cancellationToken); } var braceMatching = ts.createMapFromTemplate((_a = {}, _a[17] = 18, _a[19] = 20, _a[21] = 22, _a[29] = 27, _a)); braceMatching.forEach(function (value, key) { return braceMatching.set(value.toString(), Number(key)); }); function getBraceMatchingAtPosition(fileName, position) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var token = ts.getTouchingToken(sourceFile, position, false); var matchKind = token.getStart(sourceFile) === position ? braceMatching.get(token.kind.toString()) : undefined; var match = matchKind && ts.findChildOfKind(token.parent, matchKind, sourceFile); return match ? [ts.createTextSpanFromNode(token, sourceFile), ts.createTextSpanFromNode(match, sourceFile)].sort(function (a, b) { return a.start - b.start; }) : ts.emptyArray; } function getIndentationAtPosition(fileName, position, editorOptions) { var start = ts.timestamp(); var settings = toEditorSettings(editorOptions); var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); log("getIndentationAtPosition: getCurrentSourceFile: " + (ts.timestamp() - start)); start = ts.timestamp(); var result = ts.formatting.SmartIndenter.getIndentation(position, sourceFile, settings); log("getIndentationAtPosition: computeIndentation : " + (ts.timestamp() - start)); return result; } function getFormattingEditsForRange(fileName, start, end, options) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); return ts.formatting.formatSelection(start, end, sourceFile, ts.formatting.getFormatContext(toEditorSettings(options))); } function getFormattingEditsForDocument(fileName, options) { return ts.formatting.formatDocument(syntaxTreeCache.getCurrentSourceFile(fileName), ts.formatting.getFormatContext(toEditorSettings(options))); } function getFormattingEditsAfterKeystroke(fileName, position, key, options) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var formatContext = ts.formatting.getFormatContext(toEditorSettings(options)); if (!ts.isInComment(sourceFile, position)) { switch (key) { case "{": return ts.formatting.formatOnOpeningCurly(position, sourceFile, formatContext); case "}": return ts.formatting.formatOnClosingCurly(position, sourceFile, formatContext); case ";": return ts.formatting.formatOnSemicolon(position, sourceFile, formatContext); case "\n": return ts.formatting.formatOnEnter(position, sourceFile, formatContext); } } return []; } function getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var span = ts.createTextSpanFromBounds(start, end); var formatContext = ts.formatting.getFormatContext(formatOptions); return ts.flatMap(ts.deduplicate(errorCodes, ts.equateValues, ts.compareValues), function (errorCode) { cancellationToken.throwIfCancellationRequested(); return ts.codefix.getFixes({ errorCode: errorCode, sourceFile: sourceFile, span: span, program: program, host: host, cancellationToken: cancellationToken, formatContext: formatContext, preferences: preferences }); }); } function getCombinedCodeFix(scope, fixId, formatOptions, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); ts.Debug.assert(scope.type === "file"); var sourceFile = getValidSourceFile(scope.fileName); var formatContext = ts.formatting.getFormatContext(formatOptions); return ts.codefix.getAllFixes({ fixId: fixId, sourceFile: sourceFile, program: program, host: host, cancellationToken: cancellationToken, formatContext: formatContext, preferences: preferences }); } function organizeImports(scope, formatOptions, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); ts.Debug.assert(scope.type === "file"); var sourceFile = getValidSourceFile(scope.fileName); var formatContext = ts.formatting.getFormatContext(formatOptions); return ts.OrganizeImports.organizeImports(sourceFile, formatContext, host, program, preferences); } function getEditsForFileRename(oldFilePath, newFilePath, formatOptions, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } return ts.getEditsForFileRename(getProgram(), oldFilePath, newFilePath, host, ts.formatting.getFormatContext(formatOptions), preferences); } function applyCodeActionCommand(fileName, actionOrUndefined) { var action = typeof fileName === "string" ? actionOrUndefined : fileName; return ts.isArray(action) ? Promise.all(action.map(applySingleCodeActionCommand)) : applySingleCodeActionCommand(action); } function applySingleCodeActionCommand(action) { switch (action.type) { case "install package": return host.installPackage ? host.installPackage({ fileName: ts.toPath(action.file, currentDirectory, getCanonicalFileName), packageName: action.packageName }) : Promise.reject("Host does not implement `installPackage`"); default: return ts.Debug.fail(); } } function getDocCommentTemplateAtPosition(fileName, position) { return ts.JsDoc.getDocCommentTemplateAtPosition(ts.getNewLineOrDefaultFromHost(host), syntaxTreeCache.getCurrentSourceFile(fileName), position); } function isValidBraceCompletionAtPosition(fileName, position, openingBrace) { if (openingBrace === 60) { return false; } var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); if (ts.isInString(sourceFile, position)) { return false; } if (ts.isInsideJsxElementOrAttribute(sourceFile, position)) { return openingBrace === 123; } if (ts.isInTemplateString(sourceFile, position)) { return false; } switch (openingBrace) { case 39: case 34: case 96: return !ts.isInComment(sourceFile, position); } return true; } function getJsxClosingTagAtPosition(fileName, position) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var token = ts.findPrecedingToken(position, sourceFile); if (!token) return undefined; var element = token.kind === 29 && ts.isJsxOpeningElement(token.parent) ? token.parent.parent : ts.isJsxText(token) ? token.parent : undefined; if (element && !ts.tagNamesAreEquivalent(element.openingElement.tagName, element.closingElement.tagName)) { return { newText: "" }; } } function getSpanOfEnclosingComment(fileName, position, onlyMultiLine) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var range = ts.formatting.getRangeOfEnclosingComment(sourceFile, position, onlyMultiLine); return range && ts.createTextSpanFromRange(range); } function getTodoComments(fileName, descriptors) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); cancellationToken.throwIfCancellationRequested(); var fileContents = sourceFile.text; var result = []; if (descriptors.length > 0 && !isNodeModulesFile(sourceFile.fileName)) { var regExp = getTodoCommentsRegExp(); var matchArray = void 0; while (matchArray = regExp.exec(fileContents)) { cancellationToken.throwIfCancellationRequested(); var firstDescriptorCaptureIndex = 3; ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); var preamble = matchArray[1]; var matchPosition = matchArray.index + preamble.length; if (!ts.isInComment(sourceFile, matchPosition)) { continue; } var descriptor = void 0; for (var i = 0; i < descriptors.length; i++) { if (matchArray[i + firstDescriptorCaptureIndex]) { descriptor = descriptors[i]; } } if (descriptor === undefined) return ts.Debug.fail(); if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) { continue; } var message = matchArray[2]; result.push({ descriptor: descriptor, message: message, position: matchPosition }); } } return result; function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } function getTodoCommentsRegExp() { var singleLineCommentStart = /(?:\/\/+\s*)/.source; var multiLineCommentStart = /(?:\/\*+\s*)/.source; var anyNumberOfSpacesAndAsterisksAtStartOfLine = /(?:^(?:\s|\*)*)/.source; var preamble = "(" + anyNumberOfSpacesAndAsterisksAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; var literals = "(?:" + ts.map(descriptors, function (d) { return "(" + escapeRegExp(d.text) + ")"; }).join("|") + ")"; var endOfLineOrEndOfComment = /(?:$|\*\/)/.source; var messageRemainder = /(?:.*?)/.source; var messagePortion = "(" + literals + messageRemainder + ")"; var regExpString = preamble + messagePortion + endOfLineOrEndOfComment; return new RegExp(regExpString, "gim"); } function isLetterOrDigit(char) { return (char >= 97 && char <= 122) || (char >= 65 && char <= 90) || (char >= 48 && char <= 57); } function isNodeModulesFile(path) { return ts.stringContains(path, "/node_modules/"); } } function getRenameInfo(fileName, position) { synchronizeHostData(); var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); return ts.Rename.getRenameInfo(program.getTypeChecker(), defaultLibFileName, getCanonicalFileName, getValidSourceFile(fileName), position); } function getRefactorContext(file, positionOrRange, preferences, formatOptions) { var _a = typeof positionOrRange === "number" ? [positionOrRange, undefined] : [positionOrRange.pos, positionOrRange.end], startPosition = _a[0], endPosition = _a[1]; return { file: file, startPosition: startPosition, endPosition: endPosition, program: getProgram(), host: host, formatContext: ts.formatting.getFormatContext(formatOptions), cancellationToken: cancellationToken, preferences: preferences, }; } function getApplicableRefactors(fileName, positionOrRange, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); var file = getValidSourceFile(fileName); return ts.refactor.getApplicableRefactors(getRefactorContext(file, positionOrRange, preferences)); } function getEditsForRefactor(fileName, formatOptions, positionOrRange, refactorName, actionName, preferences) { if (preferences === void 0) { preferences = ts.defaultPreferences; } synchronizeHostData(); var file = getValidSourceFile(fileName); return ts.refactor.getEditsForRefactor(getRefactorContext(file, positionOrRange, preferences, formatOptions), refactorName, actionName); } return { dispose: dispose, cleanupSemanticCache: cleanupSemanticCache, getSyntacticDiagnostics: getSyntacticDiagnostics, getSemanticDiagnostics: getSemanticDiagnostics, getSuggestionDiagnostics: getSuggestionDiagnostics, getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics, getSyntacticClassifications: getSyntacticClassifications, getSemanticClassifications: getSemanticClassifications, getEncodedSyntacticClassifications: getEncodedSyntacticClassifications, getEncodedSemanticClassifications: getEncodedSemanticClassifications, getCompletionsAtPosition: getCompletionsAtPosition, getCompletionEntryDetails: getCompletionEntryDetails, getCompletionEntrySymbol: getCompletionEntrySymbol, getSignatureHelpItems: getSignatureHelpItems, getQuickInfoAtPosition: getQuickInfoAtPosition, getDefinitionAtPosition: getDefinitionAtPosition, getDefinitionAndBoundSpan: getDefinitionAndBoundSpan, getImplementationAtPosition: getImplementationAtPosition, getTypeDefinitionAtPosition: getTypeDefinitionAtPosition, getReferencesAtPosition: getReferencesAtPosition, findReferences: findReferences, getOccurrencesAtPosition: getOccurrencesAtPosition, getDocumentHighlights: getDocumentHighlights, getNameOrDottedNameSpan: getNameOrDottedNameSpan, getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, getNavigateToItems: getNavigateToItems, getRenameInfo: getRenameInfo, findRenameLocations: findRenameLocations, getNavigationBarItems: getNavigationBarItems, getNavigationTree: getNavigationTree, getOutliningSpans: getOutliningSpans, getTodoComments: getTodoComments, getBraceMatchingAtPosition: getBraceMatchingAtPosition, getIndentationAtPosition: getIndentationAtPosition, getFormattingEditsForRange: getFormattingEditsForRange, getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, isValidBraceCompletionAtPosition: isValidBraceCompletionAtPosition, getJsxClosingTagAtPosition: getJsxClosingTagAtPosition, getSpanOfEnclosingComment: getSpanOfEnclosingComment, getCodeFixesAtPosition: getCodeFixesAtPosition, getCombinedCodeFix: getCombinedCodeFix, applyCodeActionCommand: applyCodeActionCommand, organizeImports: organizeImports, getEditsForFileRename: getEditsForFileRename, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram, getApplicableRefactors: getApplicableRefactors, getEditsForRefactor: getEditsForRefactor, toLineColumnOffset: toLineColumnOffset }; } ts.createLanguageService = createLanguageService; function getNameTable(sourceFile) { if (!sourceFile.nameTable) { initializeNameTable(sourceFile); } return sourceFile.nameTable; } ts.getNameTable = getNameTable; function initializeNameTable(sourceFile) { var nameTable = sourceFile.nameTable = ts.createUnderscoreEscapedMap(); sourceFile.forEachChild(function walk(node) { if (ts.isIdentifier(node) && node.escapedText || ts.isStringOrNumericLiteral(node) && literalIsName(node)) { var text = ts.getEscapedTextOfIdentifierOrLiteral(node); nameTable.set(text, nameTable.get(text) === undefined ? node.pos : -1); } ts.forEachChild(node, walk); if (ts.hasJSDocNodes(node)) { for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) { var jsDoc = _a[_i]; ts.forEachChild(jsDoc, walk); } } }); } function literalIsName(node) { return ts.isDeclarationName(node) || node.parent.kind === 254 || isArgumentOfElementAccessExpression(node) || ts.isLiteralComputedPropertyDeclarationName(node); } function getContainingObjectLiteralElement(node) { switch (node.kind) { case 9: case 8: if (node.parent.kind === 147) { return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined; } case 71: return ts.isObjectLiteralElement(node.parent) && (node.parent.parent.kind === 184 || node.parent.parent.kind === 263) && node.parent.name === node ? node.parent : undefined; } return undefined; } ts.getContainingObjectLiteralElement = getContainingObjectLiteralElement; function getPropertySymbolsFromContextualType(typeChecker, node) { var objectLiteral = node.parent; var contextualType = typeChecker.getContextualType(objectLiteral); return getPropertySymbolsFromType(contextualType, node.name); } ts.getPropertySymbolsFromContextualType = getPropertySymbolsFromContextualType; function getPropertySymbolsFromType(type, propName) { var name = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(propName)); if (name && type) { var result_7 = []; var symbol = type.getProperty(name); if (type.flags & 262144) { ts.forEach(type.types, function (t) { var symbol = t.getProperty(name); if (symbol) { result_7.push(symbol); } }); return result_7; } if (symbol) { result_7.push(symbol); return result_7; } } return undefined; } ts.getPropertySymbolsFromType = getPropertySymbolsFromType; function isArgumentOfElementAccessExpression(node) { return node && node.parent && node.parent.kind === 186 && node.parent.argumentExpression === node; } function getDefaultLibFilePath(options) { if (typeof __dirname !== "undefined") { return __dirname + ts.directorySeparator + ts.getDefaultLibFileName(options); } throw new Error("getDefaultLibFilePath is only supported when consumed as a node module. "); } ts.getDefaultLibFilePath = getDefaultLibFilePath; ts.objectAllocator = getServicesObjectAllocator(); })(ts || (ts = {})); var ts; (function (ts) { var BreakpointResolver; (function (BreakpointResolver) { function spanInSourceFileAtLocation(sourceFile, position) { if (sourceFile.isDeclarationFile) { return undefined; } var tokenAtLocation = ts.getTokenAtPosition(sourceFile, position, false); var lineOfPosition = sourceFile.getLineAndCharacterOfPosition(position).line; if (sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getStart(sourceFile)).line > lineOfPosition) { var preceding = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile); if (!preceding || sourceFile.getLineAndCharacterOfPosition(preceding.getEnd()).line !== lineOfPosition) { return undefined; } tokenAtLocation = preceding; } if (tokenAtLocation.flags & 4194304) { return undefined; } return spanInNode(tokenAtLocation); function textSpan(startNode, endNode) { var start = startNode.decorators ? ts.skipTrivia(sourceFile.text, startNode.decorators.end) : startNode.getStart(sourceFile); return ts.createTextSpanFromBounds(start, (endNode || startNode).getEnd()); } function textSpanEndingAtNextToken(startNode, previousTokenToFindNextEndToken) { return textSpan(startNode, ts.findNextToken(previousTokenToFindNextEndToken, previousTokenToFindNextEndToken.parent, sourceFile)); } function spanInNodeIfStartsOnSameLine(node, otherwiseOnNode) { if (node && lineOfPosition === sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line) { return spanInNode(node); } return spanInNode(otherwiseOnNode); } function spanInNodeArray(nodeArray) { return ts.createTextSpanFromBounds(ts.skipTrivia(sourceFile.text, nodeArray.pos), nodeArray.end); } function spanInPreviousNode(node) { return spanInNode(ts.findPrecedingToken(node.pos, sourceFile)); } function spanInNextNode(node) { return spanInNode(ts.findNextToken(node, node.parent, sourceFile)); } function spanInNode(node) { if (node) { var parent = node.parent; switch (node.kind) { case 214: return spanInVariableDeclaration(node.declarationList.declarations[0]); case 232: case 152: case 151: return spanInVariableDeclaration(node); case 149: return spanInParameterDeclaration(node); case 234: case 154: case 153: case 156: case 157: case 155: case 192: case 193: return spanInFunctionDeclaration(node); case 213: if (ts.isFunctionBlock(node)) { return spanInFunctionBlock(node); } case 240: return spanInBlock(node); case 269: return spanInBlock(node.block); case 216: return textSpan(node.expression); case 225: return textSpan(node.getChildAt(0), node.expression); case 219: return textSpanEndingAtNextToken(node, node.expression); case 218: return spanInNode(node.statement); case 231: return textSpan(node.getChildAt(0)); case 217: return textSpanEndingAtNextToken(node, node.expression); case 228: return spanInNode(node.statement); case 224: case 223: return textSpan(node.getChildAt(0), node.label); case 220: return spanInForStatement(node); case 221: return textSpanEndingAtNextToken(node, node.expression); case 222: return spanInInitializerOfForLike(node); case 227: return textSpanEndingAtNextToken(node, node.expression); case 266: case 267: return spanInNode(node.statements[0]); case 230: return spanInBlock(node.tryBlock); case 229: return textSpan(node, node.expression); case 249: return textSpan(node, node.expression); case 243: return textSpan(node, node.moduleReference); case 244: return textSpan(node, node.moduleSpecifier); case 250: return textSpan(node, node.moduleSpecifier); case 239: if (ts.getModuleInstanceState(node) !== 1) { return undefined; } case 235: case 238: case 273: case 182: return textSpan(node); case 226: return spanInNode(node.statement); case 150: return spanInNodeArray(parent.decorators); case 180: case 181: return spanInBindingPattern(node); case 236: case 237: return undefined; case 25: case 1: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile)); case 26: return spanInPreviousNode(node); case 17: return spanInOpenBraceToken(node); case 18: return spanInCloseBraceToken(node); case 22: return spanInCloseBracketToken(node); case 19: return spanInOpenParenToken(node); case 20: return spanInCloseParenToken(node); case 56: return spanInColonToken(node); case 29: case 27: return spanInGreaterThanOrLessThanToken(node); case 106: return spanInWhileKeyword(node); case 82: case 74: case 87: return spanInNextNode(node); case 145: return spanInOfKeyword(node); default: if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node)) { return spanInArrayLiteralOrObjectLiteralDestructuringPattern(node); } if ((node.kind === 71 || node.kind === 204 || node.kind === 270 || node.kind === 271) && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(parent)) { return textSpan(node); } if (node.kind === 200) { var _a = node, left = _a.left, operatorToken = _a.operatorToken; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left)) { return spanInArrayLiteralOrObjectLiteralDestructuringPattern(left); } if (operatorToken.kind === 58 && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { return textSpan(node); } if (operatorToken.kind === 26) { return spanInNode(left); } } if (ts.isExpressionNode(node)) { switch (parent.kind) { case 218: return spanInPreviousNode(node); case 150: return spanInNode(node.parent); case 220: case 222: return textSpan(node); case 200: if (node.parent.operatorToken.kind === 26) { return textSpan(node); } break; case 193: if (node.parent.body === node) { return textSpan(node); } break; } } switch (node.parent.kind) { case 270: if (node.parent.name === node && !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { return spanInNode(node.parent.initializer); } break; case 190: if (node.parent.type === node) { return spanInNextNode(node.parent.type); } break; case 232: case 149: { var _b = node.parent, initializer = _b.initializer, type = _b.type; if (initializer === node || type === node || ts.isAssignmentOperator(node.kind)) { return spanInPreviousNode(node); } break; } case 200: { var left = node.parent.left; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) { return spanInPreviousNode(node); } break; } default: if (ts.isFunctionLike(node.parent) && node.parent.type === node) { return spanInPreviousNode(node); } } return spanInNode(node.parent); } } function textSpanFromVariableDeclaration(variableDeclaration) { if (ts.isVariableDeclarationList(variableDeclaration.parent) && variableDeclaration.parent.declarations[0] === variableDeclaration) { return textSpan(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent), variableDeclaration); } else { return textSpan(variableDeclaration); } } function spanInVariableDeclaration(variableDeclaration) { if (variableDeclaration.parent.parent.kind === 221) { return spanInNode(variableDeclaration.parent.parent); } var parent = variableDeclaration.parent; if (ts.isBindingPattern(variableDeclaration.name)) { return spanInBindingPattern(variableDeclaration.name); } if (variableDeclaration.initializer || ts.hasModifier(variableDeclaration, 1) || parent.parent.kind === 222) { return textSpanFromVariableDeclaration(variableDeclaration); } if (ts.isVariableDeclarationList(variableDeclaration.parent) && variableDeclaration.parent.declarations[0] !== variableDeclaration) { return spanInNode(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); } } function canHaveSpanInParameterDeclaration(parameter) { return !!parameter.initializer || parameter.dotDotDotToken !== undefined || ts.hasModifier(parameter, 4 | 8); } function spanInParameterDeclaration(parameter) { if (ts.isBindingPattern(parameter.name)) { return spanInBindingPattern(parameter.name); } else if (canHaveSpanInParameterDeclaration(parameter)) { return textSpan(parameter); } else { var functionDeclaration = parameter.parent; var indexOfParameter = functionDeclaration.parameters.indexOf(parameter); ts.Debug.assert(indexOfParameter !== -1); if (indexOfParameter !== 0) { return spanInParameterDeclaration(functionDeclaration.parameters[indexOfParameter - 1]); } else { return spanInNode(functionDeclaration.body); } } } function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { return ts.hasModifier(functionDeclaration, 1) || (functionDeclaration.parent.kind === 235 && functionDeclaration.kind !== 155); } function spanInFunctionDeclaration(functionDeclaration) { if (!functionDeclaration.body) { return undefined; } if (canFunctionHaveSpanInWholeDeclaration(functionDeclaration)) { return textSpan(functionDeclaration); } return spanInNode(functionDeclaration.body); } function spanInFunctionBlock(block) { var nodeForSpanInBlock = block.statements.length ? block.statements[0] : block.getLastToken(); if (canFunctionHaveSpanInWholeDeclaration(block.parent)) { return spanInNodeIfStartsOnSameLine(block.parent, nodeForSpanInBlock); } return spanInNode(nodeForSpanInBlock); } function spanInBlock(block) { switch (block.parent.kind) { case 239: if (ts.getModuleInstanceState(block.parent) !== 1) { return undefined; } case 219: case 217: case 221: return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); case 220: case 222: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); } return spanInNode(block.statements[0]); } function spanInInitializerOfForLike(forLikeStatement) { if (forLikeStatement.initializer.kind === 233) { var variableDeclarationList = forLikeStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); } } else { return spanInNode(forLikeStatement.initializer); } } function spanInForStatement(forStatement) { if (forStatement.initializer) { return spanInInitializerOfForLike(forStatement); } if (forStatement.condition) { return textSpan(forStatement.condition); } if (forStatement.incrementor) { return textSpan(forStatement.incrementor); } } function spanInBindingPattern(bindingPattern) { var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 206 ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } if (bindingPattern.parent.kind === 182) { return textSpan(bindingPattern.parent); } return textSpanFromVariableDeclaration(bindingPattern.parent); } function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) { ts.Debug.assert(node.kind !== 181 && node.kind !== 180); var elements = node.kind === 183 ? node.elements : node.properties; var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 206 ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } return textSpan(node.parent.kind === 200 ? node.parent : node); } function spanInOpenBraceToken(node) { switch (node.parent.kind) { case 238: var enumDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); case 235: var classDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); case 241: return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]); } return spanInNode(node.parent); } function spanInCloseBraceToken(node) { switch (node.parent.kind) { case 240: if (ts.getModuleInstanceState(node.parent.parent) !== 1) { return undefined; } case 238: case 235: return textSpan(node); case 213: if (ts.isFunctionBlock(node.parent)) { return textSpan(node); } case 269: return spanInNode(ts.lastOrUndefined(node.parent.statements)); case 241: var caseBlock = node.parent; var lastClause = ts.lastOrUndefined(caseBlock.clauses); if (lastClause) { return spanInNode(ts.lastOrUndefined(lastClause.statements)); } return undefined; case 180: var bindingPattern = node.parent; return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); default: if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { var objectLiteral = node.parent; return textSpan(ts.lastOrUndefined(objectLiteral.properties) || objectLiteral); } return spanInNode(node.parent); } } function spanInCloseBracketToken(node) { switch (node.parent.kind) { case 181: var bindingPattern = node.parent; return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); default: if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { var arrayLiteral = node.parent; return textSpan(ts.lastOrUndefined(arrayLiteral.elements) || arrayLiteral); } return spanInNode(node.parent); } } function spanInOpenParenToken(node) { if (node.parent.kind === 218 || node.parent.kind === 187 || node.parent.kind === 188) { return spanInPreviousNode(node); } if (node.parent.kind === 191) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInCloseParenToken(node) { switch (node.parent.kind) { case 192: case 234: case 193: case 154: case 153: case 156: case 157: case 155: case 219: case 218: case 220: case 222: case 187: case 188: case 191: return spanInPreviousNode(node); default: return spanInNode(node.parent); } } function spanInColonToken(node) { if (ts.isFunctionLike(node.parent) || node.parent.kind === 270 || node.parent.kind === 149) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInGreaterThanOrLessThanToken(node) { if (node.parent.kind === 190) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInWhileKeyword(node) { if (node.parent.kind === 218) { return textSpanEndingAtNextToken(node, node.parent.expression); } return spanInNode(node.parent); } function spanInOfKeyword(node) { if (node.parent.kind === 222) { return spanInNextNode(node); } return spanInNode(node.parent); } } } BreakpointResolver.spanInSourceFileAtLocation = spanInSourceFileAtLocation; })(BreakpointResolver = ts.BreakpointResolver || (ts.BreakpointResolver = {})); })(ts || (ts = {})); var ts; (function (ts) { function transform(source, transformers, compilerOptions) { var diagnostics = []; compilerOptions = ts.fixupCompilerOptions(compilerOptions, diagnostics); var nodes = ts.isArray(source) ? source : [source]; var result = ts.transformNodes(undefined, undefined, compilerOptions, nodes, transformers, true); result.diagnostics = ts.concatenate(result.diagnostics, diagnostics); return result; } ts.transform = transform; })(ts || (ts = {})); var debugObjectHost = (function () { return this; })(); var ts; (function (ts) { function logInternalError(logger, err) { if (logger) { logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); } } var ScriptSnapshotShimAdapter = (function () { function ScriptSnapshotShimAdapter(scriptSnapshotShim) { this.scriptSnapshotShim = scriptSnapshotShim; } ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { return this.scriptSnapshotShim.getText(start, end); }; ScriptSnapshotShimAdapter.prototype.getLength = function () { return this.scriptSnapshotShim.getLength(); }; ScriptSnapshotShimAdapter.prototype.getChangeRange = function (oldSnapshot) { var oldSnapshotShim = oldSnapshot; var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); if (encoded === null) { return null; } var decoded = JSON.parse(encoded); return ts.createTextChangeRange(ts.createTextSpan(decoded.span.start, decoded.span.length), decoded.newLength); }; ScriptSnapshotShimAdapter.prototype.dispose = function () { if ("dispose" in this.scriptSnapshotShim) { this.scriptSnapshotShim.dispose(); } }; return ScriptSnapshotShimAdapter; }()); var LanguageServiceShimHostAdapter = (function () { function LanguageServiceShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; this.loggingEnabled = false; this.tracingEnabled = false; if ("getModuleResolutionsForFile" in this.shimHost) { this.resolveModuleNames = function (moduleNames, containingFile) { var resolutionsInFile = JSON.parse(_this.shimHost.getModuleResolutionsForFile(containingFile)); return ts.map(moduleNames, function (name) { var result = ts.getProperty(resolutionsInFile, name); return result ? { resolvedFileName: result, extension: ts.extensionFromPath(result), isExternalLibraryImport: false } : undefined; }); }; } if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } if ("getTypeReferenceDirectiveResolutionsForFile" in this.shimHost) { this.resolveTypeReferenceDirectives = function (typeDirectiveNames, containingFile) { var typeDirectivesForFile = JSON.parse(_this.shimHost.getTypeReferenceDirectiveResolutionsForFile(containingFile)); return ts.map(typeDirectiveNames, function (name) { return ts.getProperty(typeDirectivesForFile, name); }); }; } } LanguageServiceShimHostAdapter.prototype.log = function (s) { if (this.loggingEnabled) { this.shimHost.log(s); } }; LanguageServiceShimHostAdapter.prototype.trace = function (s) { if (this.tracingEnabled) { this.shimHost.trace(s); } }; LanguageServiceShimHostAdapter.prototype.error = function (s) { this.shimHost.error(s); }; LanguageServiceShimHostAdapter.prototype.getProjectVersion = function () { if (!this.shimHost.getProjectVersion) { return undefined; } return this.shimHost.getProjectVersion(); }; LanguageServiceShimHostAdapter.prototype.getTypeRootsVersion = function () { if (!this.shimHost.getTypeRootsVersion) { return 0; } return this.shimHost.getTypeRootsVersion(); }; LanguageServiceShimHostAdapter.prototype.useCaseSensitiveFileNames = function () { return this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; }; LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { var settingsJson = this.shimHost.getCompilationSettings(); if (settingsJson === null || settingsJson === "") { throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); } var compilerOptions = JSON.parse(settingsJson); compilerOptions.allowNonTsExtensions = true; return compilerOptions; }; LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { var encoded = this.shimHost.getScriptFileNames(); return this.files = JSON.parse(encoded); }; LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { var scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); }; LanguageServiceShimHostAdapter.prototype.getScriptKind = function (fileName) { if ("getScriptKind" in this.shimHost) { return this.shimHost.getScriptKind(fileName); } else { return 0; } }; LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { return this.shimHost.getScriptVersion(fileName); }; LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); if (diagnosticMessagesJson === null || diagnosticMessagesJson === "") { return null; } try { return JSON.parse(diagnosticMessagesJson); } catch (e) { this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); return null; } }; LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () { var hostCancellationToken = this.shimHost.getCancellationToken(); return new ts.ThrottledCancellationToken(hostCancellationToken); }; LanguageServiceShimHostAdapter.prototype.getCurrentDirectory = function () { return this.shimHost.getCurrentDirectory(); }; LanguageServiceShimHostAdapter.prototype.getDirectories = function (path) { return JSON.parse(this.shimHost.getDirectories(path)); }; LanguageServiceShimHostAdapter.prototype.getDefaultLibFileName = function (options) { return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); }; LanguageServiceShimHostAdapter.prototype.readDirectory = function (path, extensions, exclude, include, depth) { var pattern = ts.getFileMatcherPatterns(path, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); return JSON.parse(this.shimHost.readDirectory(path, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); }; LanguageServiceShimHostAdapter.prototype.readFile = function (path, encoding) { return this.shimHost.readFile(path, encoding); }; LanguageServiceShimHostAdapter.prototype.fileExists = function (path) { return this.shimHost.fileExists(path); }; return LanguageServiceShimHostAdapter; }()); ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; var CoreServicesShimHostAdapter = (function () { function CoreServicesShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } if ("realpath" in this.shimHost) { this.realpath = function (path) { return _this.shimHost.realpath(path); }; } } CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extensions, exclude, include, depth) { var pattern = ts.getFileMatcherPatterns(rootDir, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); return JSON.parse(this.shimHost.readDirectory(rootDir, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); }; CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { return this.shimHost.fileExists(fileName); }; CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { return this.shimHost.readFile(fileName); }; CoreServicesShimHostAdapter.prototype.getDirectories = function (path) { return JSON.parse(this.shimHost.getDirectories(path)); }; return CoreServicesShimHostAdapter; }()); ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; function simpleForwardCall(logger, actionDescription, action, logPerformance) { var start; if (logPerformance) { logger.log(actionDescription); start = ts.timestamp(); } var result = action(); if (logPerformance) { var end = ts.timestamp(); logger.log(actionDescription + " completed in " + (end - start) + " msec"); if (ts.isString(result)) { var str = result; if (str.length > 128) { str = str.substring(0, 128) + "..."; } logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); } } return result; } function forwardJSONCall(logger, actionDescription, action, logPerformance) { return forwardCall(logger, actionDescription, true, action, logPerformance); } function forwardCall(logger, actionDescription, returnJson, action, logPerformance) { try { var result = simpleForwardCall(logger, actionDescription, action, logPerformance); return returnJson ? JSON.stringify({ result: result }) : result; } catch (err) { if (err instanceof ts.OperationCanceledException) { return JSON.stringify({ canceled: true }); } logInternalError(logger, err); err.description = actionDescription; return JSON.stringify({ error: err }); } } var ShimBase = (function () { function ShimBase(factory) { this.factory = factory; factory.registerShim(this); } ShimBase.prototype.dispose = function (_dummy) { this.factory.unregisterShim(this); }; return ShimBase; }()); function realizeDiagnostics(diagnostics, newLine) { return diagnostics.map(function (d) { return realizeDiagnostic(d, newLine); }); } ts.realizeDiagnostics = realizeDiagnostics; function realizeDiagnostic(diagnostic, newLine) { return { message: ts.flattenDiagnosticMessageText(diagnostic.messageText, newLine), start: diagnostic.start, length: diagnostic.length, category: ts.diagnosticCategoryName(diagnostic), code: diagnostic.code, reportsUnnecessary: diagnostic.reportsUnnecessary, }; } var LanguageServiceShimObject = (function (_super) { __extends(LanguageServiceShimObject, _super); function LanguageServiceShimObject(factory, host, languageService) { var _this = _super.call(this, factory) || this; _this.host = host; _this.languageService = languageService; _this.logPerformance = false; _this.logger = _this.host; return _this; } LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) { return forwardJSONCall(this.logger, actionDescription, action, this.logPerformance); }; LanguageServiceShimObject.prototype.dispose = function (dummy) { this.logger.log("dispose()"); this.languageService.dispose(); this.languageService = null; if (debugObjectHost && debugObjectHost.CollectGarbage) { debugObjectHost.CollectGarbage(); this.logger.log("CollectGarbage()"); } this.logger = null; _super.prototype.dispose.call(this, dummy); }; LanguageServiceShimObject.prototype.refresh = function (throwOnError) { this.forwardJSONCall("refresh(" + throwOnError + ")", function () { return null; }); }; LanguageServiceShimObject.prototype.cleanupSemanticCache = function () { var _this = this; this.forwardJSONCall("cleanupSemanticCache()", function () { _this.languageService.cleanupSemanticCache(); return null; }); }; LanguageServiceShimObject.prototype.realizeDiagnostics = function (diagnostics) { var newLine = ts.getNewLineOrDefaultFromHost(this.host); return realizeDiagnostics(diagnostics, newLine); }; LanguageServiceShimObject.prototype.getSyntacticClassifications = function (fileName, start, length) { var _this = this; return this.forwardJSONCall("getSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return _this.languageService.getSyntacticClassifications(fileName, ts.createTextSpan(start, length)); }); }; LanguageServiceShimObject.prototype.getSemanticClassifications = function (fileName, start, length) { var _this = this; return this.forwardJSONCall("getSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return _this.languageService.getSemanticClassifications(fileName, ts.createTextSpan(start, length)); }); }; LanguageServiceShimObject.prototype.getEncodedSyntacticClassifications = function (fileName, start, length) { var _this = this; return this.forwardJSONCall("getEncodedSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return convertClassifications(_this.languageService.getEncodedSyntacticClassifications(fileName, ts.createTextSpan(start, length))); }); }; LanguageServiceShimObject.prototype.getEncodedSemanticClassifications = function (fileName, start, length) { var _this = this; return this.forwardJSONCall("getEncodedSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return convertClassifications(_this.languageService.getEncodedSemanticClassifications(fileName, ts.createTextSpan(start, length))); }); }; LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) { var _this = this; return this.forwardJSONCall("getSyntacticDiagnostics('" + fileName + "')", function () { var diagnostics = _this.languageService.getSyntacticDiagnostics(fileName); return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) { var _this = this; return this.forwardJSONCall("getSemanticDiagnostics('" + fileName + "')", function () { var diagnostics = _this.languageService.getSemanticDiagnostics(fileName); return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getSuggestionDiagnostics = function (fileName) { var _this = this; return this.forwardJSONCall("getSuggestionDiagnostics('" + fileName + "')", function () { return _this.realizeDiagnostics(_this.languageService.getSuggestionDiagnostics(fileName)); }); }; LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () { var _this = this; return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { var diagnostics = _this.languageService.getCompilerOptionsDiagnostics(); return _this.realizeDiagnostics(diagnostics); }); }; LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getQuickInfoAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getQuickInfoAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { var _this = this; return this.forwardJSONCall("getNameOrDottedNameSpan('" + fileName + "', " + startPos + ", " + endPos + ")", function () { return _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); }); }; LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getBreakpointStatementAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBreakpointStatementAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getSignatureHelpItems = function (fileName, position) { var _this = this; return this.forwardJSONCall("getSignatureHelpItems('" + fileName + "', " + position + ")", function () { return _this.languageService.getSignatureHelpItems(fileName, position); }); }; LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getDefinitionAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getDefinitionAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getDefinitionAndBoundSpan = function (fileName, position) { var _this = this; return this.forwardJSONCall("getDefinitionAndBoundSpan('" + fileName + "', " + position + ")", function () { return _this.languageService.getDefinitionAndBoundSpan(fileName, position); }); }; LanguageServiceShimObject.prototype.getTypeDefinitionAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getTypeDefinitionAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getTypeDefinitionAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getImplementationAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getImplementationAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getImplementationAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getRenameInfo = function (fileName, position) { var _this = this; return this.forwardJSONCall("getRenameInfo('" + fileName + "', " + position + ")", function () { return _this.languageService.getRenameInfo(fileName, position); }); }; LanguageServiceShimObject.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) { var _this = this; return this.forwardJSONCall("findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")", function () { return _this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments); }); }; LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBraceMatchingAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) { var _this = this; return this.forwardJSONCall("isValidBraceCompletionAtPosition('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace); }); }; LanguageServiceShimObject.prototype.getSpanOfEnclosingComment = function (fileName, position, onlyMultiLine) { var _this = this; return this.forwardJSONCall("getSpanOfEnclosingComment('" + fileName + "', " + position + ")", function () { return _this.languageService.getSpanOfEnclosingComment(fileName, position, onlyMultiLine); }); }; LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { var _this = this; return this.forwardJSONCall("getIndentationAtPosition('" + fileName + "', " + position + ")", function () { var localOptions = JSON.parse(options); return _this.languageService.getIndentationAtPosition(fileName, position, localOptions); }); }; LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getReferencesAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getReferencesAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.findReferences = function (fileName, position) { var _this = this; return this.forwardJSONCall("findReferences('" + fileName + "', " + position + ")", function () { return _this.languageService.findReferences(fileName, position); }); }; LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getOccurrencesAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getOccurrencesAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getDocumentHighlights = function (fileName, position, filesToSearch) { var _this = this; return this.forwardJSONCall("getDocumentHighlights('" + fileName + "', " + position + ")", function () { var results = _this.languageService.getDocumentHighlights(fileName, position, JSON.parse(filesToSearch)); var normalizedName = ts.normalizeSlashes(fileName).toLowerCase(); return ts.filter(results, function (r) { return ts.normalizeSlashes(r.fileName).toLowerCase() === normalizedName; }); }); }; LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position, preferences) { var _this = this; return this.forwardJSONCall("getCompletionsAtPosition('" + fileName + "', " + position + ", " + preferences + ")", function () { return _this.languageService.getCompletionsAtPosition(fileName, position, preferences); }); }; LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName, formatOptions, source, preferences) { var _this = this; return this.forwardJSONCall("getCompletionEntryDetails('" + fileName + "', " + position + ", '" + entryName + "')", function () { var localOptions = formatOptions === undefined ? undefined : JSON.parse(formatOptions); return _this.languageService.getCompletionEntryDetails(fileName, position, entryName, localOptions, source, preferences); }); }; LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, start, end, options) { var _this = this; return this.forwardJSONCall("getFormattingEditsForRange('" + fileName + "', " + start + ", " + end + ")", function () { var localOptions = JSON.parse(options); return _this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions); }); }; LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, options) { var _this = this; return this.forwardJSONCall("getFormattingEditsForDocument('" + fileName + "')", function () { var localOptions = JSON.parse(options); return _this.languageService.getFormattingEditsForDocument(fileName, localOptions); }); }; LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { var _this = this; return this.forwardJSONCall("getFormattingEditsAfterKeystroke('" + fileName + "', " + position + ", '" + key + "')", function () { var localOptions = JSON.parse(options); return _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); }); }; LanguageServiceShimObject.prototype.getDocCommentTemplateAtPosition = function (fileName, position) { var _this = this; return this.forwardJSONCall("getDocCommentTemplateAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getDocCommentTemplateAtPosition(fileName, position); }); }; LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue, maxResultCount, fileName) { var _this = this; return this.forwardJSONCall("getNavigateToItems('" + searchValue + "', " + maxResultCount + ", " + fileName + ")", function () { return _this.languageService.getNavigateToItems(searchValue, maxResultCount, fileName); }); }; LanguageServiceShimObject.prototype.getNavigationBarItems = function (fileName) { var _this = this; return this.forwardJSONCall("getNavigationBarItems('" + fileName + "')", function () { return _this.languageService.getNavigationBarItems(fileName); }); }; LanguageServiceShimObject.prototype.getNavigationTree = function (fileName) { var _this = this; return this.forwardJSONCall("getNavigationTree('" + fileName + "')", function () { return _this.languageService.getNavigationTree(fileName); }); }; LanguageServiceShimObject.prototype.getOutliningSpans = function (fileName) { var _this = this; return this.forwardJSONCall("getOutliningSpans('" + fileName + "')", function () { return _this.languageService.getOutliningSpans(fileName); }); }; LanguageServiceShimObject.prototype.getTodoComments = function (fileName, descriptors) { var _this = this; return this.forwardJSONCall("getTodoComments('" + fileName + "')", function () { return _this.languageService.getTodoComments(fileName, JSON.parse(descriptors)); }); }; LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) { var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); }; LanguageServiceShimObject.prototype.getEmitOutputObject = function (fileName) { var _this = this; return forwardCall(this.logger, "getEmitOutput('" + fileName + "')", false, function () { return _this.languageService.getEmitOutput(fileName); }, this.logPerformance); }; return LanguageServiceShimObject; }(ShimBase)); function convertClassifications(classifications) { return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState }; } var ClassifierShimObject = (function (_super) { __extends(ClassifierShimObject, _super); function ClassifierShimObject(factory, logger) { var _this = _super.call(this, factory) || this; _this.logger = logger; _this.logPerformance = false; _this.classifier = ts.createClassifier(); return _this; } ClassifierShimObject.prototype.getEncodedLexicalClassifications = function (text, lexState, syntacticClassifierAbsent) { var _this = this; if (syntacticClassifierAbsent === void 0) { syntacticClassifierAbsent = false; } return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", function () { return convertClassifications(_this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)); }, this.logPerformance); }; ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) { if (classifyKeywordsInGenerics === void 0) { classifyKeywordsInGenerics = false; } var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); var result = ""; for (var _i = 0, _a = classification.entries; _i < _a.length; _i++) { var item = _a[_i]; result += item.length + "\n"; result += item.classification + "\n"; } result += classification.finalLexState; return result; }; return ClassifierShimObject; }(ShimBase)); var CoreServicesShimObject = (function (_super) { __extends(CoreServicesShimObject, _super); function CoreServicesShimObject(factory, logger, host) { var _this = _super.call(this, factory) || this; _this.logger = logger; _this.host = host; _this.logPerformance = false; return _this; } CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) { return forwardJSONCall(this.logger, actionDescription, action, this.logPerformance); }; CoreServicesShimObject.prototype.resolveModuleName = function (fileName, moduleName, compilerOptionsJson) { var _this = this; return this.forwardJSONCall("resolveModuleName('" + fileName + "')", function () { var compilerOptions = JSON.parse(compilerOptionsJson); var result = ts.resolveModuleName(moduleName, ts.normalizeSlashes(fileName), compilerOptions, _this.host); var resolvedFileName = result.resolvedModule ? result.resolvedModule.resolvedFileName : undefined; if (result.resolvedModule && result.resolvedModule.extension !== ".ts" && result.resolvedModule.extension !== ".tsx" && result.resolvedModule.extension !== ".d.ts") { resolvedFileName = undefined; } return { resolvedFileName: resolvedFileName, failedLookupLocations: result.failedLookupLocations }; }); }; CoreServicesShimObject.prototype.resolveTypeReferenceDirective = function (fileName, typeReferenceDirective, compilerOptionsJson) { var _this = this; return this.forwardJSONCall("resolveTypeReferenceDirective(" + fileName + ")", function () { var compilerOptions = JSON.parse(compilerOptionsJson); var result = ts.resolveTypeReferenceDirective(typeReferenceDirective, ts.normalizeSlashes(fileName), compilerOptions, _this.host); return { resolvedFileName: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.resolvedFileName : undefined, primary: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.primary : true, failedLookupLocations: result.failedLookupLocations }; }); }; CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) { var _this = this; return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () { var result = ts.preProcessFile(ts.getSnapshotText(sourceTextSnapshot), true, true); return { referencedFiles: _this.convertFileReferences(result.referencedFiles), importedFiles: _this.convertFileReferences(result.importedFiles), ambientExternalModules: result.ambientExternalModules, isLibFile: result.isLibFile, typeReferenceDirectives: _this.convertFileReferences(result.typeReferenceDirectives), libReferenceDirectives: _this.convertFileReferences(result.libReferenceDirectives) }; }); }; CoreServicesShimObject.prototype.getAutomaticTypeDirectiveNames = function (compilerOptionsJson) { var _this = this; return this.forwardJSONCall("getAutomaticTypeDirectiveNames('" + compilerOptionsJson + "')", function () { var compilerOptions = JSON.parse(compilerOptionsJson); return ts.getAutomaticTypeDirectiveNames(compilerOptions, _this.host); }); }; CoreServicesShimObject.prototype.convertFileReferences = function (refs) { if (!refs) { return undefined; } var result = []; for (var _i = 0, refs_2 = refs; _i < refs_2.length; _i++) { var ref = refs_2[_i]; result.push({ path: ts.normalizeSlashes(ref.fileName), position: ref.pos, length: ref.end - ref.pos }); } return result; }; CoreServicesShimObject.prototype.getTSConfigFileInfo = function (fileName, sourceTextSnapshot) { var _this = this; return this.forwardJSONCall("getTSConfigFileInfo('" + fileName + "')", function () { var result = ts.parseJsonText(fileName, ts.getSnapshotText(sourceTextSnapshot)); var normalizedFileName = ts.normalizeSlashes(fileName); var configFile = ts.parseJsonSourceFileConfigFileContent(result, _this.host, ts.getDirectoryPath(normalizedFileName), {}, normalizedFileName); return { options: configFile.options, typeAcquisition: configFile.typeAcquisition, files: configFile.fileNames, raw: configFile.raw, errors: realizeDiagnostics(result.parseDiagnostics.concat(configFile.errors), "\r\n") }; }); }; CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () { return this.forwardJSONCall("getDefaultCompilationSettings()", function () { return ts.getDefaultCompilerOptions(); }); }; CoreServicesShimObject.prototype.discoverTypings = function (discoverTypingsJson) { var _this = this; var getCanonicalFileName = ts.createGetCanonicalFileName(false); return this.forwardJSONCall("discoverTypings()", function () { var info = JSON.parse(discoverTypingsJson); if (_this.safeList === undefined) { _this.safeList = ts.JsTyping.loadSafeList(_this.host, ts.toPath(info.safeListPath, info.safeListPath, getCanonicalFileName)); } return ts.JsTyping.discoverTypings(_this.host, function (msg) { return _this.logger.log(msg); }, info.fileNames, ts.toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), _this.safeList, info.packageNameToTypingLocation, info.typeAcquisition, info.unresolvedImports, info.typesRegistry); }); }; return CoreServicesShimObject; }(ShimBase)); var TypeScriptServicesFactory = (function () { function TypeScriptServicesFactory() { this._shims = []; } TypeScriptServicesFactory.prototype.getServicesVersion = function () { return ts.servicesVersion; }; TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { try { if (this.documentRegistry === undefined) { this.documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); } var hostAdapter = new LanguageServiceShimHostAdapter(host); var languageService = ts.createLanguageService(hostAdapter, this.documentRegistry, false); return new LanguageServiceShimObject(this, host, languageService); } catch (err) { logInternalError(host, err); throw err; } }; TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) { try { return new ClassifierShimObject(this, logger); } catch (err) { logInternalError(logger, err); throw err; } }; TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { try { var adapter = new CoreServicesShimHostAdapter(host); return new CoreServicesShimObject(this, host, adapter); } catch (err) { logInternalError(host, err); throw err; } }; TypeScriptServicesFactory.prototype.close = function () { ts.clear(this._shims); this.documentRegistry = undefined; }; TypeScriptServicesFactory.prototype.registerShim = function (shim) { this._shims.push(shim); }; TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { for (var i = 0; i < this._shims.length; i++) { if (this._shims[i] === shim) { delete this._shims[i]; return; } } throw new Error("Invalid operation"); }; return TypeScriptServicesFactory; }()); ts.TypeScriptServicesFactory = TypeScriptServicesFactory; if (typeof module !== "undefined" && module.exports) { module.exports = ts; } })(ts || (ts = {})); var TypeScript; (function (TypeScript) { var Services; (function (Services) { Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory; })(Services = TypeScript.Services || (TypeScript.Services = {})); })(TypeScript || (TypeScript = {})); var toolsVersion = ts.versionMajorMinor; //# sourceMappingURL=typescriptServices.js.map