mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-12-13 04:57:55 -06:00
106818 lines
5.8 MiB
106818 lines
5.8 MiB
/*! *****************************************************************************
|
|
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
var __assign = (this && this.__assign) || function () {
|
|
__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;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
return cooked;
|
|
};
|
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
while (_) try {
|
|
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;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0: case 1: t = op; break;
|
|
case 4: _.label++; return { value: op[1], done: false };
|
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop(); continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
};
|
|
var ts;
|
|
(function (ts) {
|
|
ts.versionMajorMinor = "4.8";
|
|
ts.version = "4.8.2";
|
|
var NativeCollections;
|
|
(function (NativeCollections) {
|
|
var globals = typeof globalThis !== "undefined" ? globalThis :
|
|
typeof global !== "undefined" ? global :
|
|
typeof self !== "undefined" ? self :
|
|
undefined;
|
|
function tryGetNativeMap() {
|
|
var gMap = globals === null || globals === void 0 ? void 0 : globals.Map;
|
|
return typeof gMap !== "undefined" && "entries" in gMap.prototype && new gMap([[0, 0]]).size === 1 ? gMap : undefined;
|
|
}
|
|
NativeCollections.tryGetNativeMap = tryGetNativeMap;
|
|
function tryGetNativeSet() {
|
|
var gSet = globals === null || globals === void 0 ? void 0 : globals.Set;
|
|
return typeof gSet !== "undefined" && "entries" in gSet.prototype && new gSet([0]).size === 1 ? gSet : undefined;
|
|
}
|
|
NativeCollections.tryGetNativeSet = tryGetNativeSet;
|
|
})(NativeCollections || (NativeCollections = {}));
|
|
ts.Map = getCollectionImplementation("Map", "tryGetNativeMap", "createMapShim");
|
|
ts.Set = getCollectionImplementation("Set", "tryGetNativeSet", "createSetShim");
|
|
function getCollectionImplementation(name, nativeFactory, shimFactory) {
|
|
var _a;
|
|
var constructor = (_a = NativeCollections[nativeFactory]()) !== null && _a !== void 0 ? _a : ts.ShimCollections === null || ts.ShimCollections === void 0 ? void 0 : ts.ShimCollections[shimFactory](ts.getIterator);
|
|
if (constructor)
|
|
return constructor;
|
|
throw new Error("TypeScript requires an environment that provides a compatible native ".concat(name, " implementation."));
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getIterator(iterable) {
|
|
if (iterable) {
|
|
if (isArray(iterable))
|
|
return arrayIterator(iterable);
|
|
if (iterable instanceof ts.Map)
|
|
return iterable.entries();
|
|
if (iterable instanceof ts.Set)
|
|
return iterable.values();
|
|
throw new Error("Iteration not supported.");
|
|
}
|
|
}
|
|
ts.getIterator = getIterator;
|
|
ts.emptyArray = [];
|
|
ts.emptyMap = new ts.Map();
|
|
ts.emptySet = new ts.Set();
|
|
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 forEachRight(array, callback) {
|
|
if (array) {
|
|
for (var i = array.length - 1; i >= 0; i--) {
|
|
var result = callback(array[i], i);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.forEachRight = forEachRight;
|
|
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 iterResult = iter.next();
|
|
if (iterResult.done) {
|
|
return undefined;
|
|
}
|
|
var result = callback(iterResult.value);
|
|
if (result !== undefined) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
ts.firstDefinedIterator = firstDefinedIterator;
|
|
function reduceLeftIterator(iterator, f, initial) {
|
|
var result = initial;
|
|
if (iterator) {
|
|
for (var step = iterator.next(), pos = 0; !step.done; step = iterator.next(), pos++) {
|
|
result = f(result, step.value, pos);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
ts.reduceLeftIterator = reduceLeftIterator;
|
|
function zipWith(arrayA, arrayB, callback) {
|
|
var result = [];
|
|
ts.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) {
|
|
ts.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) {
|
|
ts.Debug.assert(keys.length === values.length);
|
|
var map = new ts.Map();
|
|
for (var i = 0; i < keys.length; ++i) {
|
|
map.set(keys[i], values[i]);
|
|
}
|
|
return map;
|
|
}
|
|
ts.zipToMap = zipToMap;
|
|
function intersperse(input, element) {
|
|
if (input.length <= 1) {
|
|
return input;
|
|
}
|
|
var result = [];
|
|
for (var i = 0, n = input.length; i < n; i++) {
|
|
if (i)
|
|
result.push(element);
|
|
result.push(input[i]);
|
|
}
|
|
return result;
|
|
}
|
|
ts.intersperse = intersperse;
|
|
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, startIndex) {
|
|
if (array === undefined)
|
|
return undefined;
|
|
for (var i = startIndex !== null && startIndex !== void 0 ? startIndex : 0; i < array.length; i++) {
|
|
var value = array[i];
|
|
if (predicate(value, i)) {
|
|
return value;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.find = find;
|
|
function findLast(array, predicate, startIndex) {
|
|
if (array === undefined)
|
|
return undefined;
|
|
for (var i = startIndex !== null && startIndex !== void 0 ? startIndex : 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) {
|
|
if (array === undefined)
|
|
return -1;
|
|
for (var i = startIndex !== null && startIndex !== void 0 ? startIndex : 0; i < array.length; i++) {
|
|
if (predicate(array[i], i)) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
ts.findIndex = findIndex;
|
|
function findLastIndex(array, predicate, startIndex) {
|
|
if (array === undefined)
|
|
return -1;
|
|
for (var i = startIndex !== null && startIndex !== void 0 ? startIndex : array.length - 1; 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 ts.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 = [];
|
|
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) {
|
|
for (var i = 0; i < array.length; i++) {
|
|
var v = mapfn(array[i], i);
|
|
if (v) {
|
|
if (isArray(v)) {
|
|
result = addRange(result, v);
|
|
}
|
|
else {
|
|
result = append(result, v);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result || ts.emptyArray;
|
|
}
|
|
ts.flatMap = flatMap;
|
|
function flatMapToMutable(array, mapfn) {
|
|
var result = [];
|
|
if (array) {
|
|
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.flatMapToMutable = flatMapToMutable;
|
|
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;
|
|
function mapDefinedEntries(map, f) {
|
|
if (!map) {
|
|
return undefined;
|
|
}
|
|
var result = new ts.Map();
|
|
map.forEach(function (value, key) {
|
|
var entry = f(key, value);
|
|
if (entry !== undefined) {
|
|
var newKey = entry[0], newValue = entry[1];
|
|
if (newKey !== undefined && newValue !== undefined) {
|
|
result.set(newKey, newValue);
|
|
}
|
|
}
|
|
});
|
|
return result;
|
|
}
|
|
ts.mapDefinedEntries = mapDefinedEntries;
|
|
function mapDefinedValues(set, f) {
|
|
if (set) {
|
|
var result_1 = new ts.Set();
|
|
set.forEach(function (value) {
|
|
var newValue = f(value);
|
|
if (newValue !== undefined) {
|
|
result_1.add(newValue);
|
|
}
|
|
});
|
|
return result_1;
|
|
}
|
|
}
|
|
ts.mapDefinedValues = mapDefinedValues;
|
|
function getOrUpdate(map, key, callback) {
|
|
if (map.has(key)) {
|
|
return map.get(key);
|
|
}
|
|
var value = callback();
|
|
map.set(key, value);
|
|
return value;
|
|
}
|
|
ts.getOrUpdate = getOrUpdate;
|
|
function tryAddToSet(set, value) {
|
|
if (!set.has(value)) {
|
|
set.add(value);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.tryAddToSet = tryAddToSet;
|
|
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 = new ts.Map();
|
|
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 __spreadArray(__spreadArray([], array1, true), array2, true);
|
|
}
|
|
ts.concatenate = concatenate;
|
|
function selectIndex(_, i) {
|
|
return i;
|
|
}
|
|
function indicesOf(array) {
|
|
return array.map(selectIndex);
|
|
}
|
|
ts.indicesOf = indicesOf;
|
|
function deduplicateRelational(array, equalityComparer, comparer) {
|
|
var indices = indicesOf(array);
|
|
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.length === 0 ? [] :
|
|
array.length === 1 ? array.slice() :
|
|
comparer ? deduplicateRelational(array, equalityComparer, comparer) :
|
|
deduplicateEquality(array, equalityComparer);
|
|
}
|
|
ts.deduplicate = deduplicate;
|
|
function deduplicateSorted(array, comparer) {
|
|
if (array.length === 0)
|
|
return ts.emptyArray;
|
|
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 ts.Debug.fail("Array is unsorted.");
|
|
}
|
|
deduplicated.push(last = next);
|
|
}
|
|
return deduplicated;
|
|
}
|
|
function createSortedArray() {
|
|
return [];
|
|
}
|
|
ts.createSortedArray = createSortedArray;
|
|
function insertSorted(array, insert, compare, allowDuplicates) {
|
|
if (array.length === 0) {
|
|
array.push(insert);
|
|
return;
|
|
}
|
|
var insertIndex = binarySearch(array, insert, identity, compare);
|
|
if (insertIndex < 0) {
|
|
array.splice(~insertIndex, 0, insert);
|
|
}
|
|
else if (allowDuplicates) {
|
|
array.splice(insertIndex, 0, insert);
|
|
}
|
|
}
|
|
ts.insertSorted = insertSorted;
|
|
function sortAndDeduplicate(array, comparer, equalityComparer) {
|
|
return deduplicateSorted(sort(array, comparer), equalityComparer || comparer || compareStringsCaseSensitive);
|
|
}
|
|
ts.sortAndDeduplicate = sortAndDeduplicate;
|
|
function arrayIsSorted(array, comparer) {
|
|
if (array.length < 2)
|
|
return true;
|
|
var prevElement = array[0];
|
|
for (var _i = 0, _a = array.slice(1); _i < _a.length; _i++) {
|
|
var element = _a[_i];
|
|
if (comparer(prevElement, element) === 1) {
|
|
return false;
|
|
}
|
|
prevElement = element;
|
|
}
|
|
return true;
|
|
}
|
|
ts.arrayIsSorted = arrayIsSorted;
|
|
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], 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) {
|
|
ts.Debug.assertGreaterThanOrEqual(comparer(arrayB[offsetB], arrayB[offsetB - 1]), 0);
|
|
}
|
|
loopA: for (var startA = offsetA; offsetA < arrayA.length; offsetA++) {
|
|
if (offsetA > startA) {
|
|
ts.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 combine(xs, ys) {
|
|
if (xs === undefined)
|
|
return ys;
|
|
if (ys === undefined)
|
|
return xs;
|
|
if (isArray(xs))
|
|
return isArray(ys) ? concatenate(xs, ys) : append(xs, ys);
|
|
if (isArray(ys))
|
|
return append(ys, xs);
|
|
return [xs, ys];
|
|
}
|
|
ts.combine = combine;
|
|
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.length === 0 ? array : array.slice().sort(comparer));
|
|
}
|
|
ts.sort = sort;
|
|
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 arrayReverseIterator(array) {
|
|
var i = array.length;
|
|
return {
|
|
next: function () {
|
|
if (i === 0) {
|
|
return { value: undefined, done: true };
|
|
}
|
|
else {
|
|
i--;
|
|
return { value: array[i], done: false };
|
|
}
|
|
}
|
|
};
|
|
}
|
|
ts.arrayReverseIterator = arrayReverseIterator;
|
|
function stableSort(array, comparer) {
|
|
var indices = indicesOf(array);
|
|
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 === undefined || array.length === 0 ? undefined : array[0];
|
|
}
|
|
ts.firstOrUndefined = firstOrUndefined;
|
|
function first(array) {
|
|
ts.Debug.assert(array.length !== 0);
|
|
return array[0];
|
|
}
|
|
ts.first = first;
|
|
function lastOrUndefined(array) {
|
|
return array === undefined || array.length === 0 ? undefined : array[array.length - 1];
|
|
}
|
|
ts.lastOrUndefined = lastOrUndefined;
|
|
function last(array) {
|
|
ts.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) {
|
|
return binarySearchKey(array, keySelector(value), keySelector, keyComparer, offset);
|
|
}
|
|
ts.binarySearch = binarySearch;
|
|
function binarySearchKey(array, key, keySelector, keyComparer, offset) {
|
|
if (!some(array)) {
|
|
return -1;
|
|
}
|
|
var low = offset || 0;
|
|
var high = array.length - 1;
|
|
while (low <= high) {
|
|
var middle = low + ((high - low) >> 1);
|
|
var midKey = keySelector(array[middle], middle);
|
|
switch (keyComparer(midKey, key)) {
|
|
case -1:
|
|
low = middle + 1;
|
|
break;
|
|
case 0:
|
|
return middle;
|
|
case 1:
|
|
high = middle - 1;
|
|
break;
|
|
}
|
|
}
|
|
return ~low;
|
|
}
|
|
ts.binarySearchKey = binarySearchKey;
|
|
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 getAllKeys(obj) {
|
|
var result = [];
|
|
do {
|
|
var names = Object.getOwnPropertyNames(obj);
|
|
for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {
|
|
var name = names_1[_i];
|
|
pushIfUnique(result, name);
|
|
}
|
|
} while (obj = Object.getPrototypeOf(obj));
|
|
return result;
|
|
}
|
|
ts.getAllKeys = getAllKeys;
|
|
function getOwnValues(collection) {
|
|
var values = [];
|
|
for (var key in collection) {
|
|
if (hasOwnProperty.call(collection, key)) {
|
|
values.push(collection[key]);
|
|
}
|
|
}
|
|
return values;
|
|
}
|
|
ts.getOwnValues = getOwnValues;
|
|
var _entries = Object.entries || (function (obj) {
|
|
var keys = getOwnKeys(obj);
|
|
var result = Array(keys.length);
|
|
for (var i = 0; i < keys.length; i++) {
|
|
result[i] = [keys[i], obj[keys[i]]];
|
|
}
|
|
return result;
|
|
});
|
|
function getEntries(obj) {
|
|
return obj ? _entries(obj) : [];
|
|
}
|
|
ts.getEntries = getEntries;
|
|
function arrayOf(count, f) {
|
|
var result = new Array(count);
|
|
for (var i = 0; i < count; i++) {
|
|
result[i] = f(i);
|
|
}
|
|
return result;
|
|
}
|
|
ts.arrayOf = arrayOf;
|
|
function arrayFrom(iterator, map) {
|
|
var result = [];
|
|
for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
|
|
result.push(map ? map(iterResult.value) : iterResult.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];
|
|
if (arg === undefined)
|
|
continue;
|
|
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))
|
|
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 = new ts.Map();
|
|
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, resultSelector) {
|
|
if (resultSelector === void 0) { resultSelector = identity; }
|
|
return arrayFrom(arrayToMultiMap(values, getGroupId).values(), resultSelector);
|
|
}
|
|
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 copyProperties(first, second) {
|
|
for (var id in second) {
|
|
if (hasOwnProperty.call(second, id)) {
|
|
first[id] = second[id];
|
|
}
|
|
}
|
|
}
|
|
ts.copyProperties = copyProperties;
|
|
function maybeBind(obj, fn) {
|
|
return fn ? fn.bind(obj) : undefined;
|
|
}
|
|
ts.maybeBind = maybeBind;
|
|
function createMultiMap() {
|
|
var map = new ts.Map();
|
|
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 createUnderscoreEscapedMultiMap() {
|
|
return createMultiMap();
|
|
}
|
|
ts.createUnderscoreEscapedMultiMap = createUnderscoreEscapedMultiMap;
|
|
function createQueue(items) {
|
|
var elements = (items === null || items === void 0 ? void 0 : items.slice()) || [];
|
|
var headIndex = 0;
|
|
function isEmpty() {
|
|
return headIndex === elements.length;
|
|
}
|
|
function enqueue() {
|
|
var items = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
items[_i] = arguments[_i];
|
|
}
|
|
elements.push.apply(elements, items);
|
|
}
|
|
function dequeue() {
|
|
if (isEmpty()) {
|
|
throw new Error("Queue is empty");
|
|
}
|
|
var result = elements[headIndex];
|
|
elements[headIndex] = undefined;
|
|
headIndex++;
|
|
if (headIndex > 100 && headIndex > (elements.length >> 1)) {
|
|
var newLength = elements.length - headIndex;
|
|
elements.copyWithin(0, headIndex);
|
|
elements.length = newLength;
|
|
headIndex = 0;
|
|
}
|
|
return result;
|
|
}
|
|
return {
|
|
enqueue: enqueue,
|
|
dequeue: dequeue,
|
|
isEmpty: isEmpty,
|
|
};
|
|
}
|
|
ts.createQueue = createQueue;
|
|
function createSet(getHashCode, equals) {
|
|
var multiMap = new ts.Map();
|
|
var size = 0;
|
|
function getElementIterator() {
|
|
var valueIt = multiMap.values();
|
|
var arrayIt;
|
|
return {
|
|
next: function () {
|
|
while (true) {
|
|
if (arrayIt) {
|
|
var n = arrayIt.next();
|
|
if (!n.done) {
|
|
return { value: n.value };
|
|
}
|
|
arrayIt = undefined;
|
|
}
|
|
else {
|
|
var n = valueIt.next();
|
|
if (n.done) {
|
|
return { value: undefined, done: true };
|
|
}
|
|
if (!isArray(n.value)) {
|
|
return { value: n.value };
|
|
}
|
|
arrayIt = arrayIterator(n.value);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
var set = {
|
|
has: function (element) {
|
|
var hash = getHashCode(element);
|
|
if (!multiMap.has(hash))
|
|
return false;
|
|
var candidates = multiMap.get(hash);
|
|
if (!isArray(candidates))
|
|
return equals(candidates, element);
|
|
for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
|
|
var candidate = candidates_1[_i];
|
|
if (equals(candidate, element)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
add: function (element) {
|
|
var hash = getHashCode(element);
|
|
if (multiMap.has(hash)) {
|
|
var values = multiMap.get(hash);
|
|
if (isArray(values)) {
|
|
if (!contains(values, element, equals)) {
|
|
values.push(element);
|
|
size++;
|
|
}
|
|
}
|
|
else {
|
|
var value = values;
|
|
if (!equals(value, element)) {
|
|
multiMap.set(hash, [value, element]);
|
|
size++;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
multiMap.set(hash, element);
|
|
size++;
|
|
}
|
|
return this;
|
|
},
|
|
delete: function (element) {
|
|
var hash = getHashCode(element);
|
|
if (!multiMap.has(hash))
|
|
return false;
|
|
var candidates = multiMap.get(hash);
|
|
if (isArray(candidates)) {
|
|
for (var i = 0; i < candidates.length; i++) {
|
|
if (equals(candidates[i], element)) {
|
|
if (candidates.length === 1) {
|
|
multiMap.delete(hash);
|
|
}
|
|
else if (candidates.length === 2) {
|
|
multiMap.set(hash, candidates[1 - i]);
|
|
}
|
|
else {
|
|
unorderedRemoveItemAt(candidates, i);
|
|
}
|
|
size--;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var candidate = candidates;
|
|
if (equals(candidate, element)) {
|
|
multiMap.delete(hash);
|
|
size--;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
clear: function () {
|
|
multiMap.clear();
|
|
size = 0;
|
|
},
|
|
get size() {
|
|
return size;
|
|
},
|
|
forEach: function (action) {
|
|
for (var _i = 0, _a = arrayFrom(multiMap.values()); _i < _a.length; _i++) {
|
|
var elements = _a[_i];
|
|
if (isArray(elements)) {
|
|
for (var _b = 0, elements_1 = elements; _b < elements_1.length; _b++) {
|
|
var element = elements_1[_b];
|
|
action(element, element);
|
|
}
|
|
}
|
|
else {
|
|
var element = elements;
|
|
action(element, element);
|
|
}
|
|
}
|
|
},
|
|
keys: function () {
|
|
return getElementIterator();
|
|
},
|
|
values: function () {
|
|
return getElementIterator();
|
|
},
|
|
entries: function () {
|
|
var it = getElementIterator();
|
|
return {
|
|
next: function () {
|
|
var n = it.next();
|
|
return n.done ? n : { value: [n.value, n.value] };
|
|
}
|
|
};
|
|
},
|
|
};
|
|
return set;
|
|
}
|
|
ts.createSet = createSet;
|
|
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 isNumber(x) {
|
|
return typeof x === "number";
|
|
}
|
|
ts.isNumber = isNumber;
|
|
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 ts.Debug.fail("Invalid cast. The supplied value ".concat(value, " did not pass the test '").concat(ts.Debug.getFunctionName(test), "'."));
|
|
}
|
|
ts.cast = cast;
|
|
function noop(_) { }
|
|
ts.noop = noop;
|
|
ts.noopPush = {
|
|
push: noop,
|
|
length: 0
|
|
};
|
|
function returnFalse() {
|
|
return false;
|
|
}
|
|
ts.returnFalse = returnFalse;
|
|
function returnTrue() {
|
|
return true;
|
|
}
|
|
ts.returnTrue = returnTrue;
|
|
function returnUndefined() {
|
|
return undefined;
|
|
}
|
|
ts.returnUndefined = returnUndefined;
|
|
function identity(x) {
|
|
return x;
|
|
}
|
|
ts.identity = identity;
|
|
function toLowerCase(x) {
|
|
return x.toLowerCase();
|
|
}
|
|
ts.toLowerCase = toLowerCase;
|
|
var fileNameLowerCaseRegExp = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_\. ]+/g;
|
|
function toFileNameLowerCase(x) {
|
|
return fileNameLowerCaseRegExp.test(x) ?
|
|
x.replace(fileNameLowerCaseRegExp, toLowerCase) :
|
|
x;
|
|
}
|
|
ts.toFileNameLowerCase = toFileNameLowerCase;
|
|
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 memoizeOne(callback) {
|
|
var map = new ts.Map();
|
|
return function (arg) {
|
|
var key = "".concat(typeof arg, ":").concat(arg);
|
|
var value = map.get(key);
|
|
if (value === undefined && !map.has(key)) {
|
|
value = callback(arg);
|
|
map.set(key, value);
|
|
}
|
|
return value;
|
|
};
|
|
}
|
|
ts.memoizeOne = memoizeOne;
|
|
function compose(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 reduceLeft(args_2, 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;
|
|
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 compareTextSpans(a, b) {
|
|
return compareValues(a === null || a === void 0 ? void 0 : a.start, b === null || b === void 0 ? void 0 : b.start) || compareValues(a === null || a === void 0 ? void 0 : a.length, b === null || b === void 0 ? void 0 : b.length);
|
|
}
|
|
ts.compareTextSpans = compareTextSpans;
|
|
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.max(2, Math.floor(name.length * 0.34));
|
|
var bestDistance = Math.floor(name.length * 0.4) + 1;
|
|
var bestCandidate;
|
|
for (var _i = 0, candidates_2 = candidates; _i < candidates_2.length; _i++) {
|
|
var candidate = candidates_2[_i];
|
|
var candidateName = getName(candidate);
|
|
if (candidateName !== undefined && Math.abs(candidateName.length - name.length) <= maximumLengthDifference) {
|
|
if (candidateName === name) {
|
|
continue;
|
|
}
|
|
if (candidateName.length < 3 && candidateName.toLowerCase() !== name.toLowerCase()) {
|
|
continue;
|
|
}
|
|
var distance = levenshteinWithMax(name, candidateName, bestDistance - 0.1);
|
|
if (distance === undefined) {
|
|
continue;
|
|
}
|
|
ts.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 + 0.01;
|
|
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 = Math.ceil(i > max ? i - max : 1);
|
|
var maxJ = Math.floor(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 substitutionDistance = s1[i - 1].toLowerCase() === s2[j - 1].toLowerCase()
|
|
? (previous[j - 1] + 0.1)
|
|
: (previous[j - 1] + 2);
|
|
var dist = c1 === s2.charCodeAt(j - 1)
|
|
? previous[j - 1]
|
|
: Math.min(previous[j] + 1, current[j - 1] + 1, substitutionDistance);
|
|
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 removeMinAndVersionNumbers(fileName) {
|
|
var end = fileName.length;
|
|
for (var pos = end - 1; pos > 0; pos--) {
|
|
var ch = fileName.charCodeAt(pos);
|
|
if (ch >= 48 && ch <= 57) {
|
|
do {
|
|
--pos;
|
|
ch = fileName.charCodeAt(pos);
|
|
} while (pos > 0 && ch >= 48 && ch <= 57);
|
|
}
|
|
else if (pos > 4 && (ch === 110 || ch === 78)) {
|
|
--pos;
|
|
ch = fileName.charCodeAt(pos);
|
|
if (ch !== 105 && ch !== 73) {
|
|
break;
|
|
}
|
|
--pos;
|
|
ch = fileName.charCodeAt(pos);
|
|
if (ch !== 109 && ch !== 77) {
|
|
break;
|
|
}
|
|
--pos;
|
|
ch = fileName.charCodeAt(pos);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
if (ch !== 45 && ch !== 46) {
|
|
break;
|
|
}
|
|
end = pos;
|
|
}
|
|
return end === fileName.length ? fileName : fileName.slice(0, end);
|
|
}
|
|
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 : toFileNameLowerCase;
|
|
}
|
|
ts.createGetCanonicalFileName = createGetCanonicalFileName;
|
|
function patternText(_a) {
|
|
var prefix = _a.prefix, suffix = _a.suffix;
|
|
return "".concat(prefix, "*").concat(suffix);
|
|
}
|
|
ts.patternText = patternText;
|
|
function matchedText(pattern, candidate) {
|
|
ts.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, getCanonicalFileName) {
|
|
if (getCanonicalFileName === void 0) { getCanonicalFileName = identity; }
|
|
return startsWith(getCanonicalFileName(str), getCanonicalFileName(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);
|
|
}
|
|
ts.isPatternMatch = isPatternMatch;
|
|
function and(f, g) {
|
|
return function (arg) { return f(arg) && g(arg); };
|
|
}
|
|
ts.and = and;
|
|
function or() {
|
|
var fs = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
fs[_i] = arguments[_i];
|
|
}
|
|
return function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
var lastResult;
|
|
for (var _a = 0, fs_1 = fs; _a < fs_1.length; _a++) {
|
|
var f = fs_1[_a];
|
|
lastResult = f.apply(void 0, args);
|
|
if (lastResult) {
|
|
return lastResult;
|
|
}
|
|
}
|
|
return lastResult;
|
|
};
|
|
}
|
|
ts.or = or;
|
|
function not(fn) {
|
|
return function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return !fn.apply(void 0, args);
|
|
};
|
|
}
|
|
ts.not = not;
|
|
function assertType(_) { }
|
|
ts.assertType = assertType;
|
|
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;
|
|
var hasChanges = false;
|
|
while (newIndex < newLen && oldIndex < oldLen) {
|
|
var newItem = newItems[newIndex];
|
|
var oldItem = oldItems[oldIndex];
|
|
var compareResult = comparer(newItem, oldItem);
|
|
if (compareResult === -1) {
|
|
inserted(newItem);
|
|
newIndex++;
|
|
hasChanges = true;
|
|
}
|
|
else if (compareResult === 1) {
|
|
deleted(oldItem);
|
|
oldIndex++;
|
|
hasChanges = true;
|
|
}
|
|
else {
|
|
unchanged(oldItem, newItem);
|
|
newIndex++;
|
|
oldIndex++;
|
|
}
|
|
}
|
|
while (newIndex < newLen) {
|
|
inserted(newItems[newIndex++]);
|
|
hasChanges = true;
|
|
}
|
|
while (oldIndex < oldLen) {
|
|
deleted(oldItems[oldIndex++]);
|
|
hasChanges = true;
|
|
}
|
|
return hasChanges;
|
|
}
|
|
ts.enumerateInsertsAndDeletes = enumerateInsertsAndDeletes;
|
|
function fill(length, cb) {
|
|
var result = Array(length);
|
|
for (var i = 0; i < length; i++) {
|
|
result[i] = cb(i);
|
|
}
|
|
return result;
|
|
}
|
|
ts.fill = fill;
|
|
function cartesianProduct(arrays) {
|
|
var result = [];
|
|
cartesianProductWorker(arrays, result, undefined, 0);
|
|
return result;
|
|
}
|
|
ts.cartesianProduct = cartesianProduct;
|
|
function cartesianProductWorker(arrays, result, outer, index) {
|
|
for (var _i = 0, _a = arrays[index]; _i < _a.length; _i++) {
|
|
var element = _a[_i];
|
|
var inner = void 0;
|
|
if (outer) {
|
|
inner = outer.slice();
|
|
inner.push(element);
|
|
}
|
|
else {
|
|
inner = [element];
|
|
}
|
|
if (index === arrays.length - 1) {
|
|
result.push(inner);
|
|
}
|
|
else {
|
|
cartesianProductWorker(arrays, result, inner, index + 1);
|
|
}
|
|
}
|
|
}
|
|
function padLeft(s, length, padString) {
|
|
if (padString === void 0) { padString = " "; }
|
|
return length <= s.length ? s : padString.repeat(length - s.length) + s;
|
|
}
|
|
ts.padLeft = padLeft;
|
|
function padRight(s, length, padString) {
|
|
if (padString === void 0) { padString = " "; }
|
|
return length <= s.length ? s : s + padString.repeat(length - s.length);
|
|
}
|
|
ts.padRight = padRight;
|
|
function takeWhile(array, predicate) {
|
|
var len = array.length;
|
|
var index = 0;
|
|
while (index < len && predicate(array[index])) {
|
|
index++;
|
|
}
|
|
return array.slice(0, index);
|
|
}
|
|
ts.takeWhile = takeWhile;
|
|
ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
|
|
ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
|
|
ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
|
|
function trimEndImpl(s) {
|
|
var end = s.length - 1;
|
|
while (end >= 0) {
|
|
if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
|
|
break;
|
|
end--;
|
|
}
|
|
return s.slice(0, end + 1);
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var LogLevel;
|
|
(function (LogLevel) {
|
|
LogLevel[LogLevel["Off"] = 0] = "Off";
|
|
LogLevel[LogLevel["Error"] = 1] = "Error";
|
|
LogLevel[LogLevel["Warning"] = 2] = "Warning";
|
|
LogLevel[LogLevel["Info"] = 3] = "Info";
|
|
LogLevel[LogLevel["Verbose"] = 4] = "Verbose";
|
|
})(LogLevel = ts.LogLevel || (ts.LogLevel = {}));
|
|
var Debug;
|
|
(function (Debug) {
|
|
var typeScriptVersion;
|
|
var currentAssertionLevel = 0;
|
|
Debug.currentLogLevel = LogLevel.Warning;
|
|
Debug.isDebugging = false;
|
|
Debug.enableDeprecationWarnings = true;
|
|
function getTypeScriptVersion() {
|
|
return typeScriptVersion !== null && typeScriptVersion !== void 0 ? typeScriptVersion : (typeScriptVersion = new ts.Version(ts.version));
|
|
}
|
|
Debug.getTypeScriptVersion = getTypeScriptVersion;
|
|
function shouldLog(level) {
|
|
return Debug.currentLogLevel <= level;
|
|
}
|
|
Debug.shouldLog = shouldLog;
|
|
function logMessage(level, s) {
|
|
if (Debug.loggingHost && shouldLog(level)) {
|
|
Debug.loggingHost.log(level, s);
|
|
}
|
|
}
|
|
function log(s) {
|
|
logMessage(LogLevel.Info, s);
|
|
}
|
|
Debug.log = log;
|
|
(function (log_1) {
|
|
function error(s) {
|
|
logMessage(LogLevel.Error, s);
|
|
}
|
|
log_1.error = error;
|
|
function warn(s) {
|
|
logMessage(LogLevel.Warning, s);
|
|
}
|
|
log_1.warn = warn;
|
|
function log(s) {
|
|
logMessage(LogLevel.Info, s);
|
|
}
|
|
log_1.log = log;
|
|
function trace(s) {
|
|
logMessage(LogLevel.Verbose, s);
|
|
}
|
|
log_1.trace = trace;
|
|
})(log = Debug.log || (Debug.log = {}));
|
|
var assertionCache = {};
|
|
function getAssertionLevel() {
|
|
return currentAssertionLevel;
|
|
}
|
|
Debug.getAssertionLevel = getAssertionLevel;
|
|
function setAssertionLevel(level) {
|
|
var prevAssertionLevel = currentAssertionLevel;
|
|
currentAssertionLevel = level;
|
|
if (level > prevAssertionLevel) {
|
|
for (var _i = 0, _a = ts.getOwnKeys(assertionCache); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
var cachedFunc = assertionCache[key];
|
|
if (cachedFunc !== undefined && Debug[key] !== cachedFunc.assertion && level >= cachedFunc.level) {
|
|
Debug[key] = cachedFunc;
|
|
assertionCache[key] = undefined;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Debug.setAssertionLevel = setAssertionLevel;
|
|
function shouldAssert(level) {
|
|
return currentAssertionLevel >= level;
|
|
}
|
|
Debug.shouldAssert = shouldAssert;
|
|
function shouldAssertFunction(level, name) {
|
|
if (!shouldAssert(level)) {
|
|
assertionCache[name] = { level: level, assertion: Debug[name] };
|
|
Debug[name] = ts.noop;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function fail(message, stackCrawlMark) {
|
|
debugger;
|
|
var e = new Error(message ? "Debug Failure. ".concat(message) : "Debug Failure.");
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(e, stackCrawlMark || fail);
|
|
}
|
|
throw e;
|
|
}
|
|
Debug.fail = fail;
|
|
function failBadSyntaxKind(node, message, stackCrawlMark) {
|
|
return fail("".concat(message || "Unexpected node.", "\r\nNode ").concat(formatSyntaxKind(node.kind), " was unexpected."), stackCrawlMark || failBadSyntaxKind);
|
|
}
|
|
Debug.failBadSyntaxKind = failBadSyntaxKind;
|
|
function assert(expression, message, verboseDebugInfo, stackCrawlMark) {
|
|
if (!expression) {
|
|
message = message ? "False expression: ".concat(message) : "False expression.";
|
|
if (verboseDebugInfo) {
|
|
message += "\r\nVerbose Debug Information: " + (typeof verboseDebugInfo === "string" ? verboseDebugInfo : verboseDebugInfo());
|
|
}
|
|
fail(message, stackCrawlMark || assert);
|
|
}
|
|
}
|
|
Debug.assert = assert;
|
|
function assertEqual(a, b, msg, msg2, stackCrawlMark) {
|
|
if (a !== b) {
|
|
var message = msg ? msg2 ? "".concat(msg, " ").concat(msg2) : msg : "";
|
|
fail("Expected ".concat(a, " === ").concat(b, ". ").concat(message), stackCrawlMark || assertEqual);
|
|
}
|
|
}
|
|
Debug.assertEqual = assertEqual;
|
|
function assertLessThan(a, b, msg, stackCrawlMark) {
|
|
if (a >= b) {
|
|
fail("Expected ".concat(a, " < ").concat(b, ". ").concat(msg || ""), stackCrawlMark || assertLessThan);
|
|
}
|
|
}
|
|
Debug.assertLessThan = assertLessThan;
|
|
function assertLessThanOrEqual(a, b, stackCrawlMark) {
|
|
if (a > b) {
|
|
fail("Expected ".concat(a, " <= ").concat(b), stackCrawlMark || assertLessThanOrEqual);
|
|
}
|
|
}
|
|
Debug.assertLessThanOrEqual = assertLessThanOrEqual;
|
|
function assertGreaterThanOrEqual(a, b, stackCrawlMark) {
|
|
if (a < b) {
|
|
fail("Expected ".concat(a, " >= ").concat(b), stackCrawlMark || assertGreaterThanOrEqual);
|
|
}
|
|
}
|
|
Debug.assertGreaterThanOrEqual = assertGreaterThanOrEqual;
|
|
function assertIsDefined(value, message, stackCrawlMark) {
|
|
if (value === undefined || value === null) {
|
|
fail(message, stackCrawlMark || assertIsDefined);
|
|
}
|
|
}
|
|
Debug.assertIsDefined = assertIsDefined;
|
|
function checkDefined(value, message, stackCrawlMark) {
|
|
assertIsDefined(value, message, stackCrawlMark || checkDefined);
|
|
return value;
|
|
}
|
|
Debug.checkDefined = checkDefined;
|
|
function assertEachIsDefined(value, message, stackCrawlMark) {
|
|
for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
|
|
var v = value_1[_i];
|
|
assertIsDefined(v, message, stackCrawlMark || assertEachIsDefined);
|
|
}
|
|
}
|
|
Debug.assertEachIsDefined = assertEachIsDefined;
|
|
function checkEachDefined(value, message, stackCrawlMark) {
|
|
assertEachIsDefined(value, message, stackCrawlMark || checkEachDefined);
|
|
return value;
|
|
}
|
|
Debug.checkEachDefined = checkEachDefined;
|
|
function assertNever(member, message, stackCrawlMark) {
|
|
if (message === void 0) { message = "Illegal value:"; }
|
|
var detail = typeof member === "object" && ts.hasProperty(member, "kind") && ts.hasProperty(member, "pos") ? "SyntaxKind: " + formatSyntaxKind(member.kind) : JSON.stringify(member);
|
|
return fail("".concat(message, " ").concat(detail), stackCrawlMark || assertNever);
|
|
}
|
|
Debug.assertNever = assertNever;
|
|
function assertEachNode(nodes, test, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertEachNode")) {
|
|
assert(test === undefined || ts.every(nodes, test), message || "Unexpected node.", function () { return "Node array did not pass test '".concat(getFunctionName(test), "'."); }, stackCrawlMark || assertEachNode);
|
|
}
|
|
}
|
|
Debug.assertEachNode = assertEachNode;
|
|
function assertNode(node, test, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertNode")) {
|
|
assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node ".concat(formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind), " did not pass test '").concat(getFunctionName(test), "'."); }, stackCrawlMark || assertNode);
|
|
}
|
|
}
|
|
Debug.assertNode = assertNode;
|
|
function assertNotNode(node, test, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertNotNode")) {
|
|
assert(node === undefined || test === undefined || !test(node), message || "Unexpected node.", function () { return "Node ".concat(formatSyntaxKind(node.kind), " should not have passed test '").concat(getFunctionName(test), "'."); }, stackCrawlMark || assertNotNode);
|
|
}
|
|
}
|
|
Debug.assertNotNode = assertNotNode;
|
|
function assertOptionalNode(node, test, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertOptionalNode")) {
|
|
assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node ".concat(formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind), " did not pass test '").concat(getFunctionName(test), "'."); }, stackCrawlMark || assertOptionalNode);
|
|
}
|
|
}
|
|
Debug.assertOptionalNode = assertOptionalNode;
|
|
function assertOptionalToken(node, kind, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertOptionalToken")) {
|
|
assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node ".concat(formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind), " was not a '").concat(formatSyntaxKind(kind), "' token."); }, stackCrawlMark || assertOptionalToken);
|
|
}
|
|
}
|
|
Debug.assertOptionalToken = assertOptionalToken;
|
|
function assertMissingNode(node, message, stackCrawlMark) {
|
|
if (shouldAssertFunction(1, "assertMissingNode")) {
|
|
assert(node === undefined, message || "Unexpected node.", function () { return "Node ".concat(formatSyntaxKind(node.kind), " was unexpected'."); }, stackCrawlMark || assertMissingNode);
|
|
}
|
|
}
|
|
Debug.assertMissingNode = assertMissingNode;
|
|
function type(_value) { }
|
|
Debug.type = type;
|
|
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;
|
|
function formatSymbol(symbol) {
|
|
return "{ name: ".concat(ts.unescapeLeadingUnderscores(symbol.escapedName), "; flags: ").concat(formatSymbolFlags(symbol.flags), "; declarations: ").concat(ts.map(symbol.declarations, function (node) { return formatSyntaxKind(node.kind); }), " }");
|
|
}
|
|
Debug.formatSymbol = formatSymbol;
|
|
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 = 0, members_1 = members; _i < members_1.length; _i++) {
|
|
var _a = members_1[_i], enumValue = _a[0], enumName = _a[1];
|
|
if (enumValue > value) {
|
|
break;
|
|
}
|
|
if (enumValue !== 0 && enumValue & value) {
|
|
result.push(enumName);
|
|
remainingFlags &= ~enumValue;
|
|
}
|
|
}
|
|
if (remainingFlags === 0) {
|
|
return result.join("|");
|
|
}
|
|
}
|
|
else {
|
|
for (var _b = 0, members_2 = members; _b < members_2.length; _b++) {
|
|
var _c = members_2[_b], enumValue = _c[0], enumName = _c[1];
|
|
if (enumValue === value) {
|
|
return enumName;
|
|
}
|
|
}
|
|
}
|
|
return value.toString();
|
|
}
|
|
Debug.formatEnum = formatEnum;
|
|
var enumMemberCache = new ts.Map();
|
|
function getEnumMembers(enumObject) {
|
|
var existing = enumMemberCache.get(enumObject);
|
|
if (existing) {
|
|
return existing;
|
|
}
|
|
var result = [];
|
|
for (var name in enumObject) {
|
|
var value = enumObject[name];
|
|
if (typeof value === "number") {
|
|
result.push([value, name]);
|
|
}
|
|
}
|
|
var sorted = ts.stableSort(result, function (x, y) { return ts.compareValues(x[0], y[0]); });
|
|
enumMemberCache.set(enumObject, sorted);
|
|
return sorted;
|
|
}
|
|
function formatSyntaxKind(kind) {
|
|
return formatEnum(kind, ts.SyntaxKind, false);
|
|
}
|
|
Debug.formatSyntaxKind = formatSyntaxKind;
|
|
function formatSnippetKind(kind) {
|
|
return formatEnum(kind, ts.SnippetKind, false);
|
|
}
|
|
Debug.formatSnippetKind = formatSnippetKind;
|
|
function formatNodeFlags(flags) {
|
|
return formatEnum(flags, ts.NodeFlags, true);
|
|
}
|
|
Debug.formatNodeFlags = formatNodeFlags;
|
|
function formatModifierFlags(flags) {
|
|
return formatEnum(flags, ts.ModifierFlags, true);
|
|
}
|
|
Debug.formatModifierFlags = formatModifierFlags;
|
|
function formatTransformFlags(flags) {
|
|
return formatEnum(flags, ts.TransformFlags, true);
|
|
}
|
|
Debug.formatTransformFlags = formatTransformFlags;
|
|
function formatEmitFlags(flags) {
|
|
return formatEnum(flags, ts.EmitFlags, true);
|
|
}
|
|
Debug.formatEmitFlags = formatEmitFlags;
|
|
function formatSymbolFlags(flags) {
|
|
return formatEnum(flags, ts.SymbolFlags, true);
|
|
}
|
|
Debug.formatSymbolFlags = formatSymbolFlags;
|
|
function formatTypeFlags(flags) {
|
|
return formatEnum(flags, ts.TypeFlags, true);
|
|
}
|
|
Debug.formatTypeFlags = formatTypeFlags;
|
|
function formatSignatureFlags(flags) {
|
|
return formatEnum(flags, ts.SignatureFlags, true);
|
|
}
|
|
Debug.formatSignatureFlags = formatSignatureFlags;
|
|
function formatObjectFlags(flags) {
|
|
return formatEnum(flags, ts.ObjectFlags, true);
|
|
}
|
|
Debug.formatObjectFlags = formatObjectFlags;
|
|
function formatFlowFlags(flags) {
|
|
return formatEnum(flags, ts.FlowFlags, true);
|
|
}
|
|
Debug.formatFlowFlags = formatFlowFlags;
|
|
function formatRelationComparisonResult(result) {
|
|
return formatEnum(result, ts.RelationComparisonResult, true);
|
|
}
|
|
Debug.formatRelationComparisonResult = formatRelationComparisonResult;
|
|
function formatCheckMode(mode) {
|
|
return formatEnum(mode, ts.CheckMode, true);
|
|
}
|
|
Debug.formatCheckMode = formatCheckMode;
|
|
function formatSignatureCheckMode(mode) {
|
|
return formatEnum(mode, ts.SignatureCheckMode, true);
|
|
}
|
|
Debug.formatSignatureCheckMode = formatSignatureCheckMode;
|
|
function formatTypeFacts(facts) {
|
|
return formatEnum(facts, ts.TypeFacts, true);
|
|
}
|
|
Debug.formatTypeFacts = formatTypeFacts;
|
|
var isDebugInfoEnabled = false;
|
|
var extendedDebugModule;
|
|
function extendedDebug() {
|
|
enableDebugInfo();
|
|
if (!extendedDebugModule) {
|
|
throw new Error("Debugging helpers could not be loaded.");
|
|
}
|
|
return extendedDebugModule;
|
|
}
|
|
function printControlFlowGraph(flowNode) {
|
|
return console.log(formatControlFlowGraph(flowNode));
|
|
}
|
|
Debug.printControlFlowGraph = printControlFlowGraph;
|
|
function formatControlFlowGraph(flowNode) {
|
|
return extendedDebug().formatControlFlowGraph(flowNode);
|
|
}
|
|
Debug.formatControlFlowGraph = formatControlFlowGraph;
|
|
var flowNodeProto;
|
|
function attachFlowNodeDebugInfoWorker(flowNode) {
|
|
if (!("__debugFlowFlags" in flowNode)) {
|
|
Object.defineProperties(flowNode, {
|
|
__tsDebuggerDisplay: {
|
|
value: function () {
|
|
var flowHeader = this.flags & 2 ? "FlowStart" :
|
|
this.flags & 4 ? "FlowBranchLabel" :
|
|
this.flags & 8 ? "FlowLoopLabel" :
|
|
this.flags & 16 ? "FlowAssignment" :
|
|
this.flags & 32 ? "FlowTrueCondition" :
|
|
this.flags & 64 ? "FlowFalseCondition" :
|
|
this.flags & 128 ? "FlowSwitchClause" :
|
|
this.flags & 256 ? "FlowArrayMutation" :
|
|
this.flags & 512 ? "FlowCall" :
|
|
this.flags & 1024 ? "FlowReduceLabel" :
|
|
this.flags & 1 ? "FlowUnreachable" :
|
|
"UnknownFlow";
|
|
var remainingFlags = this.flags & ~(2048 - 1);
|
|
return "".concat(flowHeader).concat(remainingFlags ? " (".concat(formatFlowFlags(remainingFlags), ")") : "");
|
|
}
|
|
},
|
|
__debugFlowFlags: { get: function () { return formatEnum(this.flags, ts.FlowFlags, true); } },
|
|
__debugToString: { value: function () { return formatControlFlowGraph(this); } }
|
|
});
|
|
}
|
|
}
|
|
function attachFlowNodeDebugInfo(flowNode) {
|
|
if (isDebugInfoEnabled) {
|
|
if (typeof Object.setPrototypeOf === "function") {
|
|
if (!flowNodeProto) {
|
|
flowNodeProto = Object.create(Object.prototype);
|
|
attachFlowNodeDebugInfoWorker(flowNodeProto);
|
|
}
|
|
Object.setPrototypeOf(flowNode, flowNodeProto);
|
|
}
|
|
else {
|
|
attachFlowNodeDebugInfoWorker(flowNode);
|
|
}
|
|
}
|
|
}
|
|
Debug.attachFlowNodeDebugInfo = attachFlowNodeDebugInfo;
|
|
var nodeArrayProto;
|
|
function attachNodeArrayDebugInfoWorker(array) {
|
|
if (!("__tsDebuggerDisplay" in array)) {
|
|
Object.defineProperties(array, {
|
|
__tsDebuggerDisplay: {
|
|
value: function (defaultValue) {
|
|
defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
|
|
return "NodeArray ".concat(defaultValue);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function attachNodeArrayDebugInfo(array) {
|
|
if (isDebugInfoEnabled) {
|
|
if (typeof Object.setPrototypeOf === "function") {
|
|
if (!nodeArrayProto) {
|
|
nodeArrayProto = Object.create(Array.prototype);
|
|
attachNodeArrayDebugInfoWorker(nodeArrayProto);
|
|
}
|
|
Object.setPrototypeOf(array, nodeArrayProto);
|
|
}
|
|
else {
|
|
attachNodeArrayDebugInfoWorker(array);
|
|
}
|
|
}
|
|
}
|
|
Debug.attachNodeArrayDebugInfo = attachNodeArrayDebugInfo;
|
|
function enableDebugInfo() {
|
|
if (isDebugInfoEnabled)
|
|
return;
|
|
var weakTypeTextMap;
|
|
var weakNodeTextMap;
|
|
function getWeakTypeTextMap() {
|
|
if (weakTypeTextMap === undefined) {
|
|
if (typeof WeakMap === "function")
|
|
weakTypeTextMap = new WeakMap();
|
|
}
|
|
return weakTypeTextMap;
|
|
}
|
|
function getWeakNodeTextMap() {
|
|
if (weakNodeTextMap === undefined) {
|
|
if (typeof WeakMap === "function")
|
|
weakNodeTextMap = new WeakMap();
|
|
}
|
|
return weakNodeTextMap;
|
|
}
|
|
Object.defineProperties(ts.objectAllocator.getSymbolConstructor().prototype, {
|
|
__tsDebuggerDisplay: {
|
|
value: function () {
|
|
var symbolHeader = this.flags & 33554432 ? "TransientSymbol" :
|
|
"Symbol";
|
|
var remainingSymbolFlags = this.flags & ~33554432;
|
|
return "".concat(symbolHeader, " '").concat(ts.symbolName(this), "'").concat(remainingSymbolFlags ? " (".concat(formatSymbolFlags(remainingSymbolFlags), ")") : "");
|
|
}
|
|
},
|
|
__debugFlags: { get: function () { return formatSymbolFlags(this.flags); } }
|
|
});
|
|
Object.defineProperties(ts.objectAllocator.getTypeConstructor().prototype, {
|
|
__tsDebuggerDisplay: {
|
|
value: function () {
|
|
var typeHeader = this.flags & 98304 ? "NullableType" :
|
|
this.flags & 384 ? "LiteralType ".concat(JSON.stringify(this.value)) :
|
|
this.flags & 2048 ? "LiteralType ".concat(this.value.negative ? "-" : "").concat(this.value.base10Value, "n") :
|
|
this.flags & 8192 ? "UniqueESSymbolType" :
|
|
this.flags & 32 ? "EnumType" :
|
|
this.flags & 67359327 ? "IntrinsicType ".concat(this.intrinsicName) :
|
|
this.flags & 1048576 ? "UnionType" :
|
|
this.flags & 2097152 ? "IntersectionType" :
|
|
this.flags & 4194304 ? "IndexType" :
|
|
this.flags & 8388608 ? "IndexedAccessType" :
|
|
this.flags & 16777216 ? "ConditionalType" :
|
|
this.flags & 33554432 ? "SubstitutionType" :
|
|
this.flags & 262144 ? "TypeParameter" :
|
|
this.flags & 524288 ?
|
|
this.objectFlags & 3 ? "InterfaceType" :
|
|
this.objectFlags & 4 ? "TypeReference" :
|
|
this.objectFlags & 8 ? "TupleType" :
|
|
this.objectFlags & 16 ? "AnonymousType" :
|
|
this.objectFlags & 32 ? "MappedType" :
|
|
this.objectFlags & 1024 ? "ReverseMappedType" :
|
|
this.objectFlags & 256 ? "EvolvingArrayType" :
|
|
"ObjectType" :
|
|
"Type";
|
|
var remainingObjectFlags = this.flags & 524288 ? this.objectFlags & ~1343 : 0;
|
|
return "".concat(typeHeader).concat(this.symbol ? " '".concat(ts.symbolName(this.symbol), "'") : "").concat(remainingObjectFlags ? " (".concat(formatObjectFlags(remainingObjectFlags), ")") : "");
|
|
}
|
|
},
|
|
__debugFlags: { get: function () { return formatTypeFlags(this.flags); } },
|
|
__debugObjectFlags: { get: function () { return this.flags & 524288 ? formatObjectFlags(this.objectFlags) : ""; } },
|
|
__debugTypeToString: {
|
|
value: function () {
|
|
var map = getWeakTypeTextMap();
|
|
var text = map === null || map === void 0 ? void 0 : map.get(this);
|
|
if (text === undefined) {
|
|
text = this.checker.typeToString(this);
|
|
map === null || map === void 0 ? void 0 : map.set(this, text);
|
|
}
|
|
return text;
|
|
}
|
|
},
|
|
});
|
|
Object.defineProperties(ts.objectAllocator.getSignatureConstructor().prototype, {
|
|
__debugFlags: { get: function () { return formatSignatureFlags(this.flags); } },
|
|
__debugSignatureToString: { value: function () { var _a; return (_a = this.checker) === null || _a === void 0 ? void 0 : _a.signatureToString(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, {
|
|
__tsDebuggerDisplay: {
|
|
value: function () {
|
|
var nodeHeader = ts.isGeneratedIdentifier(this) ? "GeneratedIdentifier" :
|
|
ts.isIdentifier(this) ? "Identifier '".concat(ts.idText(this), "'") :
|
|
ts.isPrivateIdentifier(this) ? "PrivateIdentifier '".concat(ts.idText(this), "'") :
|
|
ts.isStringLiteral(this) ? "StringLiteral ".concat(JSON.stringify(this.text.length < 10 ? this.text : this.text.slice(10) + "...")) :
|
|
ts.isNumericLiteral(this) ? "NumericLiteral ".concat(this.text) :
|
|
ts.isBigIntLiteral(this) ? "BigIntLiteral ".concat(this.text, "n") :
|
|
ts.isTypeParameterDeclaration(this) ? "TypeParameterDeclaration" :
|
|
ts.isParameter(this) ? "ParameterDeclaration" :
|
|
ts.isConstructorDeclaration(this) ? "ConstructorDeclaration" :
|
|
ts.isGetAccessorDeclaration(this) ? "GetAccessorDeclaration" :
|
|
ts.isSetAccessorDeclaration(this) ? "SetAccessorDeclaration" :
|
|
ts.isCallSignatureDeclaration(this) ? "CallSignatureDeclaration" :
|
|
ts.isConstructSignatureDeclaration(this) ? "ConstructSignatureDeclaration" :
|
|
ts.isIndexSignatureDeclaration(this) ? "IndexSignatureDeclaration" :
|
|
ts.isTypePredicateNode(this) ? "TypePredicateNode" :
|
|
ts.isTypeReferenceNode(this) ? "TypeReferenceNode" :
|
|
ts.isFunctionTypeNode(this) ? "FunctionTypeNode" :
|
|
ts.isConstructorTypeNode(this) ? "ConstructorTypeNode" :
|
|
ts.isTypeQueryNode(this) ? "TypeQueryNode" :
|
|
ts.isTypeLiteralNode(this) ? "TypeLiteralNode" :
|
|
ts.isArrayTypeNode(this) ? "ArrayTypeNode" :
|
|
ts.isTupleTypeNode(this) ? "TupleTypeNode" :
|
|
ts.isOptionalTypeNode(this) ? "OptionalTypeNode" :
|
|
ts.isRestTypeNode(this) ? "RestTypeNode" :
|
|
ts.isUnionTypeNode(this) ? "UnionTypeNode" :
|
|
ts.isIntersectionTypeNode(this) ? "IntersectionTypeNode" :
|
|
ts.isConditionalTypeNode(this) ? "ConditionalTypeNode" :
|
|
ts.isInferTypeNode(this) ? "InferTypeNode" :
|
|
ts.isParenthesizedTypeNode(this) ? "ParenthesizedTypeNode" :
|
|
ts.isThisTypeNode(this) ? "ThisTypeNode" :
|
|
ts.isTypeOperatorNode(this) ? "TypeOperatorNode" :
|
|
ts.isIndexedAccessTypeNode(this) ? "IndexedAccessTypeNode" :
|
|
ts.isMappedTypeNode(this) ? "MappedTypeNode" :
|
|
ts.isLiteralTypeNode(this) ? "LiteralTypeNode" :
|
|
ts.isNamedTupleMember(this) ? "NamedTupleMember" :
|
|
ts.isImportTypeNode(this) ? "ImportTypeNode" :
|
|
formatSyntaxKind(this.kind);
|
|
return "".concat(nodeHeader).concat(this.flags ? " (".concat(formatNodeFlags(this.flags), ")") : "");
|
|
}
|
|
},
|
|
__debugKind: { get: function () { return formatSyntaxKind(this.kind); } },
|
|
__debugNodeFlags: { get: function () { return formatNodeFlags(this.flags); } },
|
|
__debugModifierFlags: { get: function () { return formatModifierFlags(ts.getEffectiveModifierFlagsNoCache(this)); } },
|
|
__debugTransformFlags: { get: function () { return formatTransformFlags(this.transformFlags); } },
|
|
__debugIsParseTreeNode: { get: function () { return ts.isParseTreeNode(this); } },
|
|
__debugEmitFlags: { get: function () { return formatEmitFlags(ts.getEmitFlags(this)); } },
|
|
__debugGetText: {
|
|
value: function (includeTrivia) {
|
|
if (ts.nodeIsSynthesized(this))
|
|
return "";
|
|
var map = getWeakNodeTextMap();
|
|
var text = map === null || map === void 0 ? void 0 : map.get(this);
|
|
if (text === undefined) {
|
|
var parseNode = ts.getParseTreeNode(this);
|
|
var sourceFile = parseNode && ts.getSourceFileOfNode(parseNode);
|
|
text = sourceFile ? ts.getSourceTextOfNodeFromSourceFile(sourceFile, parseNode, includeTrivia) : "";
|
|
map === null || map === void 0 ? void 0 : map.set(this, text);
|
|
}
|
|
return text;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
try {
|
|
if (ts.sys && ts.sys.require) {
|
|
var basePath = ts.getDirectoryPath(ts.resolvePath(ts.sys.getExecutingFilePath()));
|
|
var result = ts.sys.require(basePath, "./compiler-debug");
|
|
if (!result.error) {
|
|
result.module.init(ts);
|
|
extendedDebugModule = result.module;
|
|
}
|
|
}
|
|
}
|
|
catch (_a) {
|
|
}
|
|
isDebugInfoEnabled = true;
|
|
}
|
|
Debug.enableDebugInfo = enableDebugInfo;
|
|
function formatDeprecationMessage(name, error, errorAfter, since, message) {
|
|
var deprecationMessage = error ? "DeprecationError: " : "DeprecationWarning: ";
|
|
deprecationMessage += "'".concat(name, "' ");
|
|
deprecationMessage += since ? "has been deprecated since v".concat(since) : "is deprecated";
|
|
deprecationMessage += error ? " and can no longer be used." : errorAfter ? " and will no longer be usable after v".concat(errorAfter, ".") : ".";
|
|
deprecationMessage += message ? " ".concat(ts.formatStringFromArgs(message, [name], 0)) : "";
|
|
return deprecationMessage;
|
|
}
|
|
function createErrorDeprecation(name, errorAfter, since, message) {
|
|
var deprecationMessage = formatDeprecationMessage(name, true, errorAfter, since, message);
|
|
return function () {
|
|
throw new TypeError(deprecationMessage);
|
|
};
|
|
}
|
|
function createWarningDeprecation(name, errorAfter, since, message) {
|
|
var hasWrittenDeprecation = false;
|
|
return function () {
|
|
if (Debug.enableDeprecationWarnings && !hasWrittenDeprecation) {
|
|
log.warn(formatDeprecationMessage(name, false, errorAfter, since, message));
|
|
hasWrittenDeprecation = true;
|
|
}
|
|
};
|
|
}
|
|
function createDeprecation(name, options) {
|
|
var _a, _b;
|
|
if (options === void 0) { options = {}; }
|
|
var version = typeof options.typeScriptVersion === "string" ? new ts.Version(options.typeScriptVersion) : (_a = options.typeScriptVersion) !== null && _a !== void 0 ? _a : getTypeScriptVersion();
|
|
var errorAfter = typeof options.errorAfter === "string" ? new ts.Version(options.errorAfter) : options.errorAfter;
|
|
var warnAfter = typeof options.warnAfter === "string" ? new ts.Version(options.warnAfter) : options.warnAfter;
|
|
var since = typeof options.since === "string" ? new ts.Version(options.since) : (_b = options.since) !== null && _b !== void 0 ? _b : warnAfter;
|
|
var error = options.error || errorAfter && version.compareTo(errorAfter) <= 0;
|
|
var warn = !warnAfter || version.compareTo(warnAfter) >= 0;
|
|
return error ? createErrorDeprecation(name, errorAfter, since, options.message) :
|
|
warn ? createWarningDeprecation(name, errorAfter, since, options.message) :
|
|
ts.noop;
|
|
}
|
|
Debug.createDeprecation = createDeprecation;
|
|
function wrapFunction(deprecation, func) {
|
|
return function () {
|
|
deprecation();
|
|
return func.apply(this, arguments);
|
|
};
|
|
}
|
|
function deprecate(func, options) {
|
|
var _a;
|
|
var deprecation = createDeprecation((_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : getFunctionName(func), options);
|
|
return wrapFunction(deprecation, func);
|
|
}
|
|
Debug.deprecate = deprecate;
|
|
function formatVariance(varianceFlags) {
|
|
var variance = varianceFlags & 7;
|
|
var result = variance === 0 ? "in out" :
|
|
variance === 3 ? "[bivariant]" :
|
|
variance === 2 ? "in" :
|
|
variance === 1 ? "out" :
|
|
variance === 4 ? "[independent]" : "";
|
|
if (varianceFlags & 8) {
|
|
result += " (unmeasurable)";
|
|
}
|
|
else if (varianceFlags & 16) {
|
|
result += " (unreliable)";
|
|
}
|
|
return result;
|
|
}
|
|
Debug.formatVariance = formatVariance;
|
|
var DebugTypeMapper = (function () {
|
|
function DebugTypeMapper() {
|
|
}
|
|
DebugTypeMapper.prototype.__debugToString = function () {
|
|
var _a;
|
|
type(this);
|
|
switch (this.kind) {
|
|
case 3: return ((_a = this.debugInfo) === null || _a === void 0 ? void 0 : _a.call(this)) || "(function mapper)";
|
|
case 0: return "".concat(this.source.__debugTypeToString(), " -> ").concat(this.target.__debugTypeToString());
|
|
case 1: return ts.zipWith(this.sources, this.targets || ts.map(this.sources, function () { return "any"; }), function (s, t) { return "".concat(s.__debugTypeToString(), " -> ").concat(typeof t === "string" ? t : t.__debugTypeToString()); }).join(", ");
|
|
case 2: return ts.zipWith(this.sources, this.targets, function (s, t) { return "".concat(s.__debugTypeToString(), " -> ").concat(t().__debugTypeToString()); }).join(", ");
|
|
case 5:
|
|
case 4: return "m1: ".concat(this.mapper1.__debugToString().split("\n").join("\n "), "\nm2: ").concat(this.mapper2.__debugToString().split("\n").join("\n "));
|
|
default: return assertNever(this);
|
|
}
|
|
};
|
|
return DebugTypeMapper;
|
|
}());
|
|
Debug.DebugTypeMapper = DebugTypeMapper;
|
|
function attachDebugPrototypeIfDebug(mapper) {
|
|
if (Debug.isDebugging) {
|
|
return Object.setPrototypeOf(mapper, DebugTypeMapper.prototype);
|
|
}
|
|
return mapper;
|
|
}
|
|
Debug.attachDebugPrototypeIfDebug = attachDebugPrototypeIfDebug;
|
|
})(Debug = ts.Debug || (ts.Debug = {}));
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var versionRegExp = /^(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i;
|
|
var prereleaseRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)(?:\.(?:0|[1-9]\d*|[a-z-][a-z0-9-]*))*$/i;
|
|
var buildRegExp = /^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/i;
|
|
var numericIdentifierRegExp = /^(0|[1-9]\d*)$/;
|
|
var Version = (function () {
|
|
function Version(major, minor, patch, prerelease, build) {
|
|
if (minor === void 0) { minor = 0; }
|
|
if (patch === void 0) { patch = 0; }
|
|
if (prerelease === void 0) { prerelease = ""; }
|
|
if (build === void 0) { build = ""; }
|
|
if (typeof major === "string") {
|
|
var result = ts.Debug.checkDefined(tryParseComponents(major), "Invalid version");
|
|
(major = result.major, minor = result.minor, patch = result.patch, prerelease = result.prerelease, build = result.build);
|
|
}
|
|
ts.Debug.assert(major >= 0, "Invalid argument: major");
|
|
ts.Debug.assert(minor >= 0, "Invalid argument: minor");
|
|
ts.Debug.assert(patch >= 0, "Invalid argument: patch");
|
|
ts.Debug.assert(!prerelease || prereleaseRegExp.test(prerelease), "Invalid argument: prerelease");
|
|
ts.Debug.assert(!build || buildRegExp.test(build), "Invalid argument: build");
|
|
this.major = major;
|
|
this.minor = minor;
|
|
this.patch = patch;
|
|
this.prerelease = prerelease ? prerelease.split(".") : ts.emptyArray;
|
|
this.build = build ? build.split(".") : ts.emptyArray;
|
|
}
|
|
Version.tryParse = function (text) {
|
|
var result = tryParseComponents(text);
|
|
if (!result)
|
|
return undefined;
|
|
var major = result.major, minor = result.minor, patch = result.patch, prerelease = result.prerelease, build = result.build;
|
|
return new Version(major, minor, patch, prerelease, build);
|
|
};
|
|
Version.prototype.compareTo = function (other) {
|
|
if (this === other)
|
|
return 0;
|
|
if (other === undefined)
|
|
return 1;
|
|
return ts.compareValues(this.major, other.major)
|
|
|| ts.compareValues(this.minor, other.minor)
|
|
|| ts.compareValues(this.patch, other.patch)
|
|
|| comparePrereleaseIdentifiers(this.prerelease, other.prerelease);
|
|
};
|
|
Version.prototype.increment = function (field) {
|
|
switch (field) {
|
|
case "major": return new Version(this.major + 1, 0, 0);
|
|
case "minor": return new Version(this.major, this.minor + 1, 0);
|
|
case "patch": return new Version(this.major, this.minor, this.patch + 1);
|
|
default: return ts.Debug.assertNever(field);
|
|
}
|
|
};
|
|
Version.prototype.toString = function () {
|
|
var result = "".concat(this.major, ".").concat(this.minor, ".").concat(this.patch);
|
|
if (ts.some(this.prerelease))
|
|
result += "-".concat(this.prerelease.join("."));
|
|
if (ts.some(this.build))
|
|
result += "+".concat(this.build.join("."));
|
|
return result;
|
|
};
|
|
Version.zero = new Version(0, 0, 0);
|
|
return Version;
|
|
}());
|
|
ts.Version = Version;
|
|
function tryParseComponents(text) {
|
|
var match = versionRegExp.exec(text);
|
|
if (!match)
|
|
return undefined;
|
|
var major = match[1], _a = match[2], minor = _a === void 0 ? "0" : _a, _b = match[3], patch = _b === void 0 ? "0" : _b, _c = match[4], prerelease = _c === void 0 ? "" : _c, _d = match[5], build = _d === void 0 ? "" : _d;
|
|
if (prerelease && !prereleaseRegExp.test(prerelease))
|
|
return undefined;
|
|
if (build && !buildRegExp.test(build))
|
|
return undefined;
|
|
return {
|
|
major: parseInt(major, 10),
|
|
minor: parseInt(minor, 10),
|
|
patch: parseInt(patch, 10),
|
|
prerelease: prerelease,
|
|
build: build
|
|
};
|
|
}
|
|
function comparePrereleaseIdentifiers(left, right) {
|
|
if (left === right)
|
|
return 0;
|
|
if (left.length === 0)
|
|
return right.length === 0 ? 0 : 1;
|
|
if (right.length === 0)
|
|
return -1;
|
|
var length = Math.min(left.length, right.length);
|
|
for (var i = 0; i < length; i++) {
|
|
var leftIdentifier = left[i];
|
|
var rightIdentifier = right[i];
|
|
if (leftIdentifier === rightIdentifier)
|
|
continue;
|
|
var leftIsNumeric = numericIdentifierRegExp.test(leftIdentifier);
|
|
var rightIsNumeric = numericIdentifierRegExp.test(rightIdentifier);
|
|
if (leftIsNumeric || rightIsNumeric) {
|
|
if (leftIsNumeric !== rightIsNumeric)
|
|
return leftIsNumeric ? -1 : 1;
|
|
var result = ts.compareValues(+leftIdentifier, +rightIdentifier);
|
|
if (result)
|
|
return result;
|
|
}
|
|
else {
|
|
var result = ts.compareStringsCaseSensitive(leftIdentifier, rightIdentifier);
|
|
if (result)
|
|
return result;
|
|
}
|
|
}
|
|
return ts.compareValues(left.length, right.length);
|
|
}
|
|
var VersionRange = (function () {
|
|
function VersionRange(spec) {
|
|
this._alternatives = spec ? ts.Debug.checkDefined(parseRange(spec), "Invalid range spec.") : ts.emptyArray;
|
|
}
|
|
VersionRange.tryParse = function (text) {
|
|
var sets = parseRange(text);
|
|
if (sets) {
|
|
var range = new VersionRange("");
|
|
range._alternatives = sets;
|
|
return range;
|
|
}
|
|
return undefined;
|
|
};
|
|
VersionRange.prototype.test = function (version) {
|
|
if (typeof version === "string")
|
|
version = new Version(version);
|
|
return testDisjunction(version, this._alternatives);
|
|
};
|
|
VersionRange.prototype.toString = function () {
|
|
return formatDisjunction(this._alternatives);
|
|
};
|
|
return VersionRange;
|
|
}());
|
|
ts.VersionRange = VersionRange;
|
|
var logicalOrRegExp = /\|\|/g;
|
|
var whitespaceRegExp = /\s+/g;
|
|
var partialRegExp = /^([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i;
|
|
var hyphenRegExp = /^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i;
|
|
var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
|
|
function parseRange(text) {
|
|
var alternatives = [];
|
|
for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
|
|
var range = _a[_i];
|
|
if (!range)
|
|
continue;
|
|
var comparators = [];
|
|
range = ts.trimString(range);
|
|
var match = hyphenRegExp.exec(range);
|
|
if (match) {
|
|
if (!parseHyphen(match[1], match[2], comparators))
|
|
return undefined;
|
|
}
|
|
else {
|
|
for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
|
|
var simple = _c[_b];
|
|
var match_1 = rangeRegExp.exec(ts.trimString(simple));
|
|
if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
|
|
return undefined;
|
|
}
|
|
}
|
|
alternatives.push(comparators);
|
|
}
|
|
return alternatives;
|
|
}
|
|
function parsePartial(text) {
|
|
var match = partialRegExp.exec(text);
|
|
if (!match)
|
|
return undefined;
|
|
var major = match[1], _a = match[2], minor = _a === void 0 ? "*" : _a, _b = match[3], patch = _b === void 0 ? "*" : _b, prerelease = match[4], build = match[5];
|
|
var version = new Version(isWildcard(major) ? 0 : parseInt(major, 10), isWildcard(major) || isWildcard(minor) ? 0 : parseInt(minor, 10), isWildcard(major) || isWildcard(minor) || isWildcard(patch) ? 0 : parseInt(patch, 10), prerelease, build);
|
|
return { version: version, major: major, minor: minor, patch: patch };
|
|
}
|
|
function parseHyphen(left, right, comparators) {
|
|
var leftResult = parsePartial(left);
|
|
if (!leftResult)
|
|
return false;
|
|
var rightResult = parsePartial(right);
|
|
if (!rightResult)
|
|
return false;
|
|
if (!isWildcard(leftResult.major)) {
|
|
comparators.push(createComparator(">=", leftResult.version));
|
|
}
|
|
if (!isWildcard(rightResult.major)) {
|
|
comparators.push(isWildcard(rightResult.minor) ? createComparator("<", rightResult.version.increment("major")) :
|
|
isWildcard(rightResult.patch) ? createComparator("<", rightResult.version.increment("minor")) :
|
|
createComparator("<=", rightResult.version));
|
|
}
|
|
return true;
|
|
}
|
|
function parseComparator(operator, text, comparators) {
|
|
var result = parsePartial(text);
|
|
if (!result)
|
|
return false;
|
|
var version = result.version, major = result.major, minor = result.minor, patch = result.patch;
|
|
if (!isWildcard(major)) {
|
|
switch (operator) {
|
|
case "~":
|
|
comparators.push(createComparator(">=", version));
|
|
comparators.push(createComparator("<", version.increment(isWildcard(minor) ? "major" :
|
|
"minor")));
|
|
break;
|
|
case "^":
|
|
comparators.push(createComparator(">=", version));
|
|
comparators.push(createComparator("<", version.increment(version.major > 0 || isWildcard(minor) ? "major" :
|
|
version.minor > 0 || isWildcard(patch) ? "minor" :
|
|
"patch")));
|
|
break;
|
|
case "<":
|
|
case ">=":
|
|
comparators.push(createComparator(operator, version));
|
|
break;
|
|
case "<=":
|
|
case ">":
|
|
comparators.push(isWildcard(minor) ? createComparator(operator === "<=" ? "<" : ">=", version.increment("major")) :
|
|
isWildcard(patch) ? createComparator(operator === "<=" ? "<" : ">=", version.increment("minor")) :
|
|
createComparator(operator, version));
|
|
break;
|
|
case "=":
|
|
case undefined:
|
|
if (isWildcard(minor) || isWildcard(patch)) {
|
|
comparators.push(createComparator(">=", version));
|
|
comparators.push(createComparator("<", version.increment(isWildcard(minor) ? "major" : "minor")));
|
|
}
|
|
else {
|
|
comparators.push(createComparator("=", version));
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
else if (operator === "<" || operator === ">") {
|
|
comparators.push(createComparator("<", Version.zero));
|
|
}
|
|
return true;
|
|
}
|
|
function isWildcard(part) {
|
|
return part === "*" || part === "x" || part === "X";
|
|
}
|
|
function createComparator(operator, operand) {
|
|
return { operator: operator, operand: operand };
|
|
}
|
|
function testDisjunction(version, alternatives) {
|
|
if (alternatives.length === 0)
|
|
return true;
|
|
for (var _i = 0, alternatives_1 = alternatives; _i < alternatives_1.length; _i++) {
|
|
var alternative = alternatives_1[_i];
|
|
if (testAlternative(version, alternative))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function testAlternative(version, comparators) {
|
|
for (var _i = 0, comparators_1 = comparators; _i < comparators_1.length; _i++) {
|
|
var comparator = comparators_1[_i];
|
|
if (!testComparator(version, comparator.operator, comparator.operand))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function testComparator(version, operator, operand) {
|
|
var cmp = version.compareTo(operand);
|
|
switch (operator) {
|
|
case "<": return cmp < 0;
|
|
case "<=": return cmp <= 0;
|
|
case ">": return cmp > 0;
|
|
case ">=": return cmp >= 0;
|
|
case "=": return cmp === 0;
|
|
default: return ts.Debug.assertNever(operator);
|
|
}
|
|
}
|
|
function formatDisjunction(alternatives) {
|
|
return ts.map(alternatives, formatAlternative).join(" || ") || "*";
|
|
}
|
|
function formatAlternative(comparators) {
|
|
return ts.map(comparators, formatComparator).join(" ");
|
|
}
|
|
function formatComparator(comparator) {
|
|
return "".concat(comparator.operator).concat(comparator.operand);
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function hasRequiredAPI(performance, PerformanceObserver) {
|
|
return typeof performance === "object" &&
|
|
typeof performance.timeOrigin === "number" &&
|
|
typeof performance.mark === "function" &&
|
|
typeof performance.measure === "function" &&
|
|
typeof performance.now === "function" &&
|
|
typeof PerformanceObserver === "function";
|
|
}
|
|
function tryGetWebPerformanceHooks() {
|
|
if (typeof performance === "object" &&
|
|
typeof PerformanceObserver === "function" &&
|
|
hasRequiredAPI(performance, PerformanceObserver)) {
|
|
return {
|
|
shouldWriteNativeEvents: true,
|
|
performance: performance,
|
|
PerformanceObserver: PerformanceObserver
|
|
};
|
|
}
|
|
}
|
|
function tryGetNodePerformanceHooks() {
|
|
if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof module === "object" && typeof require === "function") {
|
|
try {
|
|
var performance_1;
|
|
var _a = require("perf_hooks"), nodePerformance_1 = _a.performance, PerformanceObserver_1 = _a.PerformanceObserver;
|
|
if (hasRequiredAPI(nodePerformance_1, PerformanceObserver_1)) {
|
|
performance_1 = nodePerformance_1;
|
|
var version_1 = new ts.Version(process.versions.node);
|
|
var range = new ts.VersionRange("<12.16.3 || 13 <13.13");
|
|
if (range.test(version_1)) {
|
|
performance_1 = {
|
|
get timeOrigin() { return nodePerformance_1.timeOrigin; },
|
|
now: function () { return nodePerformance_1.now(); },
|
|
mark: function (name) { return nodePerformance_1.mark(name); },
|
|
measure: function (name, start, end) {
|
|
if (start === void 0) { start = "nodeStart"; }
|
|
if (end === undefined) {
|
|
end = "__performance.measure-fix__";
|
|
nodePerformance_1.mark(end);
|
|
}
|
|
nodePerformance_1.measure(name, start, end);
|
|
if (end === "__performance.measure-fix__") {
|
|
nodePerformance_1.clearMarks("__performance.measure-fix__");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
return {
|
|
shouldWriteNativeEvents: false,
|
|
performance: performance_1,
|
|
PerformanceObserver: PerformanceObserver_1
|
|
};
|
|
}
|
|
}
|
|
catch (_b) {
|
|
}
|
|
}
|
|
}
|
|
var nativePerformanceHooks = tryGetWebPerformanceHooks() || tryGetNodePerformanceHooks();
|
|
var nativePerformance = nativePerformanceHooks === null || nativePerformanceHooks === void 0 ? void 0 : nativePerformanceHooks.performance;
|
|
function tryGetNativePerformanceHooks() {
|
|
return nativePerformanceHooks;
|
|
}
|
|
ts.tryGetNativePerformanceHooks = tryGetNativePerformanceHooks;
|
|
ts.timestamp = nativePerformance ? function () { return nativePerformance.now(); } :
|
|
Date.now ? Date.now :
|
|
function () { return +(new Date()); };
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var performance;
|
|
(function (performance) {
|
|
var perfHooks;
|
|
var performanceImpl;
|
|
function createTimerIf(condition, measureName, startMarkName, endMarkName) {
|
|
return condition ? createTimer(measureName, startMarkName, endMarkName) : performance.nullTimer;
|
|
}
|
|
performance.createTimerIf = createTimerIf;
|
|
function createTimer(measureName, startMarkName, endMarkName) {
|
|
var enterCount = 0;
|
|
return {
|
|
enter: enter,
|
|
exit: exit
|
|
};
|
|
function enter() {
|
|
if (++enterCount === 1) {
|
|
mark(startMarkName);
|
|
}
|
|
}
|
|
function exit() {
|
|
if (--enterCount === 0) {
|
|
mark(endMarkName);
|
|
measure(measureName, startMarkName, endMarkName);
|
|
}
|
|
else if (enterCount < 0) {
|
|
ts.Debug.fail("enter/exit count does not match.");
|
|
}
|
|
}
|
|
}
|
|
performance.createTimer = createTimer;
|
|
performance.nullTimer = { enter: ts.noop, exit: ts.noop };
|
|
var enabled = false;
|
|
var timeorigin = ts.timestamp();
|
|
var marks = new ts.Map();
|
|
var counts = new ts.Map();
|
|
var durations = new ts.Map();
|
|
function mark(markName) {
|
|
var _a;
|
|
if (enabled) {
|
|
var count = (_a = counts.get(markName)) !== null && _a !== void 0 ? _a : 0;
|
|
counts.set(markName, count + 1);
|
|
marks.set(markName, ts.timestamp());
|
|
performanceImpl === null || performanceImpl === void 0 ? void 0 : performanceImpl.mark(markName);
|
|
}
|
|
}
|
|
performance.mark = mark;
|
|
function measure(measureName, startMarkName, endMarkName) {
|
|
var _a, _b;
|
|
if (enabled) {
|
|
var end = (_a = (endMarkName !== undefined ? marks.get(endMarkName) : undefined)) !== null && _a !== void 0 ? _a : ts.timestamp();
|
|
var start = (_b = (startMarkName !== undefined ? marks.get(startMarkName) : undefined)) !== null && _b !== void 0 ? _b : timeorigin;
|
|
var previousDuration = durations.get(measureName) || 0;
|
|
durations.set(measureName, previousDuration + (end - start));
|
|
performanceImpl === null || performanceImpl === void 0 ? void 0 : performanceImpl.measure(measureName, startMarkName, endMarkName);
|
|
}
|
|
}
|
|
performance.measure = measure;
|
|
function getCount(markName) {
|
|
return counts.get(markName) || 0;
|
|
}
|
|
performance.getCount = getCount;
|
|
function getDuration(measureName) {
|
|
return durations.get(measureName) || 0;
|
|
}
|
|
performance.getDuration = getDuration;
|
|
function forEachMeasure(cb) {
|
|
durations.forEach(function (duration, measureName) { return cb(measureName, duration); });
|
|
}
|
|
performance.forEachMeasure = forEachMeasure;
|
|
function isEnabled() {
|
|
return enabled;
|
|
}
|
|
performance.isEnabled = isEnabled;
|
|
function enable(system) {
|
|
var _a;
|
|
if (system === void 0) { system = ts.sys; }
|
|
if (!enabled) {
|
|
enabled = true;
|
|
perfHooks || (perfHooks = ts.tryGetNativePerformanceHooks());
|
|
if (perfHooks) {
|
|
timeorigin = perfHooks.performance.timeOrigin;
|
|
if (perfHooks.shouldWriteNativeEvents || ((_a = system === null || system === void 0 ? void 0 : system.cpuProfilingEnabled) === null || _a === void 0 ? void 0 : _a.call(system)) || (system === null || system === void 0 ? void 0 : system.debugMode)) {
|
|
performanceImpl = perfHooks.performance;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
performance.enable = enable;
|
|
function disable() {
|
|
if (enabled) {
|
|
marks.clear();
|
|
counts.clear();
|
|
durations.clear();
|
|
performanceImpl = undefined;
|
|
enabled = false;
|
|
}
|
|
}
|
|
performance.disable = disable;
|
|
})(performance = ts.performance || (ts.performance = {}));
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var _a;
|
|
var nullLogger = {
|
|
logEvent: ts.noop,
|
|
logErrEvent: ts.noop,
|
|
logPerfEvent: ts.noop,
|
|
logInfoEvent: ts.noop,
|
|
logStartCommand: ts.noop,
|
|
logStopCommand: ts.noop,
|
|
logStartUpdateProgram: ts.noop,
|
|
logStopUpdateProgram: ts.noop,
|
|
logStartUpdateGraph: ts.noop,
|
|
logStopUpdateGraph: ts.noop,
|
|
logStartResolveModule: ts.noop,
|
|
logStopResolveModule: ts.noop,
|
|
logStartParseSourceFile: ts.noop,
|
|
logStopParseSourceFile: ts.noop,
|
|
logStartReadFile: ts.noop,
|
|
logStopReadFile: ts.noop,
|
|
logStartBindFile: ts.noop,
|
|
logStopBindFile: ts.noop,
|
|
logStartScheduledOperation: ts.noop,
|
|
logStopScheduledOperation: ts.noop,
|
|
};
|
|
var etwModule;
|
|
try {
|
|
var etwModulePath = (_a = process.env.TS_ETW_MODULE_PATH) !== null && _a !== void 0 ? _a : "./node_modules/@microsoft/typescript-etw";
|
|
etwModule = require(etwModulePath);
|
|
}
|
|
catch (e) {
|
|
etwModule = undefined;
|
|
}
|
|
ts.perfLogger = etwModule && etwModule.logEvent ? etwModule : nullLogger;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var tracingEnabled;
|
|
(function (tracingEnabled) {
|
|
var fs;
|
|
var traceCount = 0;
|
|
var traceFd = 0;
|
|
var mode;
|
|
var typeCatalog = [];
|
|
var legendPath;
|
|
var legend = [];
|
|
;
|
|
function startTracing(tracingMode, traceDir, configFilePath) {
|
|
ts.Debug.assert(!ts.tracing, "Tracing already started");
|
|
if (fs === undefined) {
|
|
try {
|
|
fs = require("fs");
|
|
}
|
|
catch (e) {
|
|
throw new Error("tracing requires having fs\n(original error: ".concat(e.message || e, ")"));
|
|
}
|
|
}
|
|
mode = tracingMode;
|
|
typeCatalog.length = 0;
|
|
if (legendPath === undefined) {
|
|
legendPath = ts.combinePaths(traceDir, "legend.json");
|
|
}
|
|
if (!fs.existsSync(traceDir)) {
|
|
fs.mkdirSync(traceDir, { recursive: true });
|
|
}
|
|
var countPart = mode === "build" ? ".".concat(process.pid, "-").concat(++traceCount)
|
|
: mode === "server" ? ".".concat(process.pid)
|
|
: "";
|
|
var tracePath = ts.combinePaths(traceDir, "trace".concat(countPart, ".json"));
|
|
var typesPath = ts.combinePaths(traceDir, "types".concat(countPart, ".json"));
|
|
legend.push({
|
|
configFilePath: configFilePath,
|
|
tracePath: tracePath,
|
|
typesPath: typesPath,
|
|
});
|
|
traceFd = fs.openSync(tracePath, "w");
|
|
ts.tracing = tracingEnabled;
|
|
var meta = { cat: "__metadata", ph: "M", ts: 1000 * ts.timestamp(), pid: 1, tid: 1 };
|
|
fs.writeSync(traceFd, "[\n"
|
|
+ [__assign({ name: "process_name", args: { name: "tsc" } }, meta), __assign({ name: "thread_name", args: { name: "Main" } }, meta), __assign(__assign({ name: "TracingStartedInBrowser" }, meta), { cat: "disabled-by-default-devtools.timeline" })]
|
|
.map(function (v) { return JSON.stringify(v); }).join(",\n"));
|
|
}
|
|
tracingEnabled.startTracing = startTracing;
|
|
function stopTracing() {
|
|
ts.Debug.assert(ts.tracing, "Tracing is not in progress");
|
|
ts.Debug.assert(!!typeCatalog.length === (mode !== "server"));
|
|
fs.writeSync(traceFd, "\n]\n");
|
|
fs.closeSync(traceFd);
|
|
ts.tracing = undefined;
|
|
if (typeCatalog.length) {
|
|
dumpTypes(typeCatalog);
|
|
}
|
|
else {
|
|
legend[legend.length - 1].typesPath = undefined;
|
|
}
|
|
}
|
|
tracingEnabled.stopTracing = stopTracing;
|
|
function recordType(type) {
|
|
if (mode !== "server") {
|
|
typeCatalog.push(type);
|
|
}
|
|
}
|
|
tracingEnabled.recordType = recordType;
|
|
function instant(phase, name, args) {
|
|
writeEvent("I", phase, name, args, "\"s\":\"g\"");
|
|
}
|
|
tracingEnabled.instant = instant;
|
|
var eventStack = [];
|
|
function push(phase, name, args, separateBeginAndEnd) {
|
|
if (separateBeginAndEnd === void 0) { separateBeginAndEnd = false; }
|
|
if (separateBeginAndEnd) {
|
|
writeEvent("B", phase, name, args);
|
|
}
|
|
eventStack.push({ phase: phase, name: name, args: args, time: 1000 * ts.timestamp(), separateBeginAndEnd: separateBeginAndEnd });
|
|
}
|
|
tracingEnabled.push = push;
|
|
function pop(results) {
|
|
ts.Debug.assert(eventStack.length > 0);
|
|
writeStackEvent(eventStack.length - 1, 1000 * ts.timestamp(), results);
|
|
eventStack.length--;
|
|
}
|
|
tracingEnabled.pop = pop;
|
|
function popAll() {
|
|
var endTime = 1000 * ts.timestamp();
|
|
for (var i = eventStack.length - 1; i >= 0; i--) {
|
|
writeStackEvent(i, endTime);
|
|
}
|
|
eventStack.length = 0;
|
|
}
|
|
tracingEnabled.popAll = popAll;
|
|
var sampleInterval = 1000 * 10;
|
|
function writeStackEvent(index, endTime, results) {
|
|
var _a = eventStack[index], phase = _a.phase, name = _a.name, args = _a.args, time = _a.time, separateBeginAndEnd = _a.separateBeginAndEnd;
|
|
if (separateBeginAndEnd) {
|
|
ts.Debug.assert(!results, "`results` are not supported for events with `separateBeginAndEnd`");
|
|
writeEvent("E", phase, name, args, undefined, endTime);
|
|
}
|
|
else if (sampleInterval - (time % sampleInterval) <= endTime - time) {
|
|
writeEvent("X", phase, name, __assign(__assign({}, args), { results: results }), "\"dur\":".concat(endTime - time), time);
|
|
}
|
|
}
|
|
function writeEvent(eventType, phase, name, args, extras, time) {
|
|
if (time === void 0) { time = 1000 * ts.timestamp(); }
|
|
if (mode === "server" && phase === "checkTypes")
|
|
return;
|
|
ts.performance.mark("beginTracing");
|
|
fs.writeSync(traceFd, ",\n{\"pid\":1,\"tid\":1,\"ph\":\"".concat(eventType, "\",\"cat\":\"").concat(phase, "\",\"ts\":").concat(time, ",\"name\":\"").concat(name, "\""));
|
|
if (extras)
|
|
fs.writeSync(traceFd, ",".concat(extras));
|
|
if (args)
|
|
fs.writeSync(traceFd, ",\"args\":".concat(JSON.stringify(args)));
|
|
fs.writeSync(traceFd, "}");
|
|
ts.performance.mark("endTracing");
|
|
ts.performance.measure("Tracing", "beginTracing", "endTracing");
|
|
}
|
|
function getLocation(node) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
return !file
|
|
? undefined
|
|
: {
|
|
path: file.path,
|
|
start: indexFromOne(ts.getLineAndCharacterOfPosition(file, node.pos)),
|
|
end: indexFromOne(ts.getLineAndCharacterOfPosition(file, node.end)),
|
|
};
|
|
function indexFromOne(lc) {
|
|
return {
|
|
line: lc.line + 1,
|
|
character: lc.character + 1,
|
|
};
|
|
}
|
|
}
|
|
function dumpTypes(types) {
|
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
ts.performance.mark("beginDumpTypes");
|
|
var typesPath = legend[legend.length - 1].typesPath;
|
|
var typesFd = fs.openSync(typesPath, "w");
|
|
var recursionIdentityMap = new ts.Map();
|
|
fs.writeSync(typesFd, "[");
|
|
var numTypes = types.length;
|
|
for (var i = 0; i < numTypes; i++) {
|
|
var type = types[i];
|
|
var objectFlags = type.objectFlags;
|
|
var symbol = (_a = type.aliasSymbol) !== null && _a !== void 0 ? _a : type.symbol;
|
|
var display = void 0;
|
|
if ((objectFlags & 16) | (type.flags & 2944)) {
|
|
try {
|
|
display = (_b = type.checker) === null || _b === void 0 ? void 0 : _b.typeToString(type);
|
|
}
|
|
catch (_y) {
|
|
display = undefined;
|
|
}
|
|
}
|
|
var indexedAccessProperties = {};
|
|
if (type.flags & 8388608) {
|
|
var indexedAccessType = type;
|
|
indexedAccessProperties = {
|
|
indexedAccessObjectType: (_c = indexedAccessType.objectType) === null || _c === void 0 ? void 0 : _c.id,
|
|
indexedAccessIndexType: (_d = indexedAccessType.indexType) === null || _d === void 0 ? void 0 : _d.id,
|
|
};
|
|
}
|
|
var referenceProperties = {};
|
|
if (objectFlags & 4) {
|
|
var referenceType = type;
|
|
referenceProperties = {
|
|
instantiatedType: (_e = referenceType.target) === null || _e === void 0 ? void 0 : _e.id,
|
|
typeArguments: (_f = referenceType.resolvedTypeArguments) === null || _f === void 0 ? void 0 : _f.map(function (t) { return t.id; }),
|
|
referenceLocation: getLocation(referenceType.node),
|
|
};
|
|
}
|
|
var conditionalProperties = {};
|
|
if (type.flags & 16777216) {
|
|
var conditionalType = type;
|
|
conditionalProperties = {
|
|
conditionalCheckType: (_g = conditionalType.checkType) === null || _g === void 0 ? void 0 : _g.id,
|
|
conditionalExtendsType: (_h = conditionalType.extendsType) === null || _h === void 0 ? void 0 : _h.id,
|
|
conditionalTrueType: (_k = (_j = conditionalType.resolvedTrueType) === null || _j === void 0 ? void 0 : _j.id) !== null && _k !== void 0 ? _k : -1,
|
|
conditionalFalseType: (_m = (_l = conditionalType.resolvedFalseType) === null || _l === void 0 ? void 0 : _l.id) !== null && _m !== void 0 ? _m : -1,
|
|
};
|
|
}
|
|
var substitutionProperties = {};
|
|
if (type.flags & 33554432) {
|
|
var substitutionType = type;
|
|
substitutionProperties = {
|
|
substitutionBaseType: (_o = substitutionType.baseType) === null || _o === void 0 ? void 0 : _o.id,
|
|
substituteType: (_p = substitutionType.substitute) === null || _p === void 0 ? void 0 : _p.id,
|
|
};
|
|
}
|
|
var reverseMappedProperties = {};
|
|
if (objectFlags & 1024) {
|
|
var reverseMappedType = type;
|
|
reverseMappedProperties = {
|
|
reverseMappedSourceType: (_q = reverseMappedType.source) === null || _q === void 0 ? void 0 : _q.id,
|
|
reverseMappedMappedType: (_r = reverseMappedType.mappedType) === null || _r === void 0 ? void 0 : _r.id,
|
|
reverseMappedConstraintType: (_s = reverseMappedType.constraintType) === null || _s === void 0 ? void 0 : _s.id,
|
|
};
|
|
}
|
|
var evolvingArrayProperties = {};
|
|
if (objectFlags & 256) {
|
|
var evolvingArrayType = type;
|
|
evolvingArrayProperties = {
|
|
evolvingArrayElementType: evolvingArrayType.elementType.id,
|
|
evolvingArrayFinalType: (_t = evolvingArrayType.finalArrayType) === null || _t === void 0 ? void 0 : _t.id,
|
|
};
|
|
}
|
|
var recursionToken = void 0;
|
|
var recursionIdentity = type.checker.getRecursionIdentity(type);
|
|
if (recursionIdentity) {
|
|
recursionToken = recursionIdentityMap.get(recursionIdentity);
|
|
if (!recursionToken) {
|
|
recursionToken = recursionIdentityMap.size;
|
|
recursionIdentityMap.set(recursionIdentity, recursionToken);
|
|
}
|
|
}
|
|
var descriptor = __assign(__assign(__assign(__assign(__assign(__assign(__assign({ id: type.id, intrinsicName: type.intrinsicName, symbolName: (symbol === null || symbol === void 0 ? void 0 : symbol.escapedName) && ts.unescapeLeadingUnderscores(symbol.escapedName), recursionId: recursionToken, isTuple: objectFlags & 8 ? true : undefined, unionTypes: (type.flags & 1048576) ? (_u = type.types) === null || _u === void 0 ? void 0 : _u.map(function (t) { return t.id; }) : undefined, intersectionTypes: (type.flags & 2097152) ? type.types.map(function (t) { return t.id; }) : undefined, aliasTypeArguments: (_v = type.aliasTypeArguments) === null || _v === void 0 ? void 0 : _v.map(function (t) { return t.id; }), keyofType: (type.flags & 4194304) ? (_w = type.type) === null || _w === void 0 ? void 0 : _w.id : undefined }, indexedAccessProperties), referenceProperties), conditionalProperties), substitutionProperties), reverseMappedProperties), evolvingArrayProperties), { destructuringPattern: getLocation(type.pattern), firstDeclaration: getLocation((_x = symbol === null || symbol === void 0 ? void 0 : symbol.declarations) === null || _x === void 0 ? void 0 : _x[0]), flags: ts.Debug.formatTypeFlags(type.flags).split("|"), display: display });
|
|
fs.writeSync(typesFd, JSON.stringify(descriptor));
|
|
if (i < numTypes - 1) {
|
|
fs.writeSync(typesFd, ",\n");
|
|
}
|
|
}
|
|
fs.writeSync(typesFd, "]\n");
|
|
fs.closeSync(typesFd);
|
|
ts.performance.mark("endDumpTypes");
|
|
ts.performance.measure("Dump types", "beginDumpTypes", "endDumpTypes");
|
|
}
|
|
function dumpLegend() {
|
|
if (!legendPath) {
|
|
return;
|
|
}
|
|
fs.writeFileSync(legendPath, JSON.stringify(legend));
|
|
}
|
|
tracingEnabled.dumpLegend = dumpLegend;
|
|
})(tracingEnabled || (tracingEnabled = {}));
|
|
ts.startTracing = tracingEnabled.startTracing;
|
|
ts.dumpTracingLegend = tracingEnabled.dumpLegend;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var OperationCanceledException = (function () {
|
|
function OperationCanceledException() {
|
|
}
|
|
return OperationCanceledException;
|
|
}());
|
|
ts.OperationCanceledException = OperationCanceledException;
|
|
var FileIncludeKind;
|
|
(function (FileIncludeKind) {
|
|
FileIncludeKind[FileIncludeKind["RootFile"] = 0] = "RootFile";
|
|
FileIncludeKind[FileIncludeKind["SourceFromProjectReference"] = 1] = "SourceFromProjectReference";
|
|
FileIncludeKind[FileIncludeKind["OutputFromProjectReference"] = 2] = "OutputFromProjectReference";
|
|
FileIncludeKind[FileIncludeKind["Import"] = 3] = "Import";
|
|
FileIncludeKind[FileIncludeKind["ReferenceFile"] = 4] = "ReferenceFile";
|
|
FileIncludeKind[FileIncludeKind["TypeReferenceDirective"] = 5] = "TypeReferenceDirective";
|
|
FileIncludeKind[FileIncludeKind["LibFile"] = 6] = "LibFile";
|
|
FileIncludeKind[FileIncludeKind["LibReferenceDirective"] = 7] = "LibReferenceDirective";
|
|
FileIncludeKind[FileIncludeKind["AutomaticTypeDirectiveFile"] = 8] = "AutomaticTypeDirectiveFile";
|
|
})(FileIncludeKind = ts.FileIncludeKind || (ts.FileIncludeKind = {}));
|
|
var ExitStatus;
|
|
(function (ExitStatus) {
|
|
ExitStatus[ExitStatus["Success"] = 0] = "Success";
|
|
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped";
|
|
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated";
|
|
ExitStatus[ExitStatus["InvalidProject_OutputsSkipped"] = 3] = "InvalidProject_OutputsSkipped";
|
|
ExitStatus[ExitStatus["ProjectReferenceCycle_OutputsSkipped"] = 4] = "ProjectReferenceCycle_OutputsSkipped";
|
|
ExitStatus[ExitStatus["ProjectReferenceCycle_OutputsSkupped"] = 4] = "ProjectReferenceCycle_OutputsSkupped";
|
|
})(ExitStatus = ts.ExitStatus || (ts.ExitStatus = {}));
|
|
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["BigIntLikeType"] = 4] = "BigIntLikeType";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 5] = "StringLikeType";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 6] = "BooleanType";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 7] = "ArrayLikeType";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 8] = "ESSymbolType";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["Promise"] = 9] = "Promise";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 10] = "TypeWithCallSignature";
|
|
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 11] = "ObjectType";
|
|
})(TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {}));
|
|
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[ModuleResolutionKind["Node16"] = 3] = "Node16";
|
|
ModuleResolutionKind[ModuleResolutionKind["NodeNext"] = 99] = "NodeNext";
|
|
})(ModuleResolutionKind = ts.ModuleResolutionKind || (ts.ModuleResolutionKind = {}));
|
|
var ModuleDetectionKind;
|
|
(function (ModuleDetectionKind) {
|
|
ModuleDetectionKind[ModuleDetectionKind["Legacy"] = 1] = "Legacy";
|
|
ModuleDetectionKind[ModuleDetectionKind["Auto"] = 2] = "Auto";
|
|
ModuleDetectionKind[ModuleDetectionKind["Force"] = 3] = "Force";
|
|
})(ModuleDetectionKind = ts.ModuleDetectionKind || (ts.ModuleDetectionKind = {}));
|
|
var WatchFileKind;
|
|
(function (WatchFileKind) {
|
|
WatchFileKind[WatchFileKind["FixedPollingInterval"] = 0] = "FixedPollingInterval";
|
|
WatchFileKind[WatchFileKind["PriorityPollingInterval"] = 1] = "PriorityPollingInterval";
|
|
WatchFileKind[WatchFileKind["DynamicPriorityPolling"] = 2] = "DynamicPriorityPolling";
|
|
WatchFileKind[WatchFileKind["FixedChunkSizePolling"] = 3] = "FixedChunkSizePolling";
|
|
WatchFileKind[WatchFileKind["UseFsEvents"] = 4] = "UseFsEvents";
|
|
WatchFileKind[WatchFileKind["UseFsEventsOnParentDirectory"] = 5] = "UseFsEventsOnParentDirectory";
|
|
})(WatchFileKind = ts.WatchFileKind || (ts.WatchFileKind = {}));
|
|
var WatchDirectoryKind;
|
|
(function (WatchDirectoryKind) {
|
|
WatchDirectoryKind[WatchDirectoryKind["UseFsEvents"] = 0] = "UseFsEvents";
|
|
WatchDirectoryKind[WatchDirectoryKind["FixedPollingInterval"] = 1] = "FixedPollingInterval";
|
|
WatchDirectoryKind[WatchDirectoryKind["DynamicPriorityPolling"] = 2] = "DynamicPriorityPolling";
|
|
WatchDirectoryKind[WatchDirectoryKind["FixedChunkSizePolling"] = 3] = "FixedChunkSizePolling";
|
|
})(WatchDirectoryKind = ts.WatchDirectoryKind || (ts.WatchDirectoryKind = {}));
|
|
var PollingWatchKind;
|
|
(function (PollingWatchKind) {
|
|
PollingWatchKind[PollingWatchKind["FixedInterval"] = 0] = "FixedInterval";
|
|
PollingWatchKind[PollingWatchKind["PriorityInterval"] = 1] = "PriorityInterval";
|
|
PollingWatchKind[PollingWatchKind["DynamicPriority"] = 2] = "DynamicPriority";
|
|
PollingWatchKind[PollingWatchKind["FixedChunkSize"] = 3] = "FixedChunkSize";
|
|
})(PollingWatchKind = ts.PollingWatchKind || (ts.PollingWatchKind = {}));
|
|
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["ES2020"] = 6] = "ES2020";
|
|
ModuleKind[ModuleKind["ES2022"] = 7] = "ES2022";
|
|
ModuleKind[ModuleKind["ESNext"] = 99] = "ESNext";
|
|
ModuleKind[ModuleKind["Node16"] = 100] = "Node16";
|
|
ModuleKind[ModuleKind["NodeNext"] = 199] = "NodeNext";
|
|
})(ModuleKind = ts.ModuleKind || (ts.ModuleKind = {}));
|
|
ts.commentPragmas = {
|
|
"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 },
|
|
{ name: "resolution-mode", 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
|
|
},
|
|
"jsxfrag": {
|
|
args: [{ name: "factory" }],
|
|
kind: 4
|
|
},
|
|
"jsximportsource": {
|
|
args: [{ name: "factory" }],
|
|
kind: 4
|
|
},
|
|
"jsxruntime": {
|
|
args: [{ name: "factory" }],
|
|
kind: 4
|
|
},
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function generateDjb2Hash(data) {
|
|
var acc = 5381;
|
|
for (var i = 0; i < data.length; i++) {
|
|
acc = ((acc << 5) + acc) + data.charCodeAt(i);
|
|
}
|
|
return acc.toString();
|
|
}
|
|
ts.generateDjb2Hash = generateDjb2Hash;
|
|
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 = {}));
|
|
ts.missingFileModifiedTime = new Date(0);
|
|
function getModifiedTime(host, fileName) {
|
|
return host.getModifiedTime(fileName) || ts.missingFileModifiedTime;
|
|
}
|
|
ts.getModifiedTime = getModifiedTime;
|
|
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("".concat(envVar, "_").concat(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(__assign({}, defaultLevels), customLevels) : defaultLevels);
|
|
}
|
|
}
|
|
ts.setCustomPollingValues = setCustomPollingValues;
|
|
function pollWatchedFileQueue(host, queue, pollIndex, chunkSize, callbackOnWatchFileStat) {
|
|
var definedValueCopyToIndex = pollIndex;
|
|
for (var canVisit = queue.length; chunkSize && canVisit; nextPollIndex(), canVisit--) {
|
|
var watchedFile = queue[pollIndex];
|
|
if (!watchedFile) {
|
|
continue;
|
|
}
|
|
else if (watchedFile.isClosed) {
|
|
queue[pollIndex] = undefined;
|
|
continue;
|
|
}
|
|
chunkSize--;
|
|
var fileChanged = onWatchedFileStat(watchedFile, getModifiedTime(host, watchedFile.fileName));
|
|
if (watchedFile.isClosed) {
|
|
queue[pollIndex] = undefined;
|
|
continue;
|
|
}
|
|
callbackOnWatchFileStat === null || callbackOnWatchFileStat === void 0 ? void 0 : callbackOnWatchFileStat(watchedFile, pollIndex, fileChanged);
|
|
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 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(host, 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) {
|
|
return pollWatchedFileQueue(host, queue, pollIndex, chunkSize, onWatchFileStat);
|
|
function onWatchFileStat(watchedFile, pollIndex, fileChanged) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
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));
|
|
}
|
|
}
|
|
ts.createDynamicPriorityPollingWatchFile = createDynamicPriorityPollingWatchFile;
|
|
function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFileNames) {
|
|
var fileWatcherCallbacks = ts.createMultiMap();
|
|
var dirWatchers = new ts.Map();
|
|
var toCanonicalName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
return nonPollingWatchFile;
|
|
function nonPollingWatchFile(fileName, callback, _pollingInterval, fallbackOptions) {
|
|
var filePath = toCanonicalName(fileName);
|
|
fileWatcherCallbacks.add(filePath, callback);
|
|
var dirPath = ts.getDirectoryPath(filePath) || ".";
|
|
var watcher = dirWatchers.get(dirPath) ||
|
|
createDirectoryWatcher(ts.getDirectoryPath(fileName) || ".", dirPath, fallbackOptions);
|
|
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, fallbackOptions) {
|
|
var watcher = fsWatch(dirName, 1, function (_eventName, relativeFileName, modifiedTime) {
|
|
if (!ts.isString(relativeFileName))
|
|
return;
|
|
var fileName = ts.getNormalizedAbsolutePath(relativeFileName, dirName);
|
|
var callbacks = fileName && 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, modifiedTime);
|
|
}
|
|
}
|
|
}, false, PollingInterval.Medium, fallbackOptions);
|
|
watcher.referenceCount = 0;
|
|
dirWatchers.set(dirPath, watcher);
|
|
return watcher;
|
|
}
|
|
}
|
|
function createFixedChunkSizePollingWatchFile(host) {
|
|
var watchedFiles = [];
|
|
var pollIndex = 0;
|
|
var pollScheduled;
|
|
return watchFile;
|
|
function watchFile(fileName, callback) {
|
|
var file = {
|
|
fileName: fileName,
|
|
callback: callback,
|
|
mtime: getModifiedTime(host, fileName)
|
|
};
|
|
watchedFiles.push(file);
|
|
scheduleNextPoll();
|
|
return {
|
|
close: function () {
|
|
file.isClosed = true;
|
|
ts.unorderedRemoveItem(watchedFiles, file);
|
|
}
|
|
};
|
|
}
|
|
function pollQueue() {
|
|
pollScheduled = undefined;
|
|
pollIndex = pollWatchedFileQueue(host, watchedFiles, pollIndex, pollingChunkSize[PollingInterval.Low]);
|
|
scheduleNextPoll();
|
|
}
|
|
function scheduleNextPoll() {
|
|
if (!watchedFiles.length || pollScheduled)
|
|
return;
|
|
pollScheduled = host.setTimeout(pollQueue, PollingInterval.High);
|
|
}
|
|
}
|
|
function createSingleFileWatcherPerName(watchFile, useCaseSensitiveFileNames) {
|
|
var cache = new ts.Map();
|
|
var callbacksCache = ts.createMultiMap();
|
|
var toCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
return function (fileName, callback, pollingInterval, options) {
|
|
var path = toCanonicalFileName(fileName);
|
|
var existing = cache.get(path);
|
|
if (existing) {
|
|
existing.refCount++;
|
|
}
|
|
else {
|
|
cache.set(path, {
|
|
watcher: watchFile(fileName, function (fileName, eventKind, modifiedTime) { return ts.forEach(callbacksCache.get(path), function (cb) { return cb(fileName, eventKind, modifiedTime); }); }, pollingInterval, options),
|
|
refCount: 1
|
|
});
|
|
}
|
|
callbacksCache.add(path, callback);
|
|
return {
|
|
close: function () {
|
|
var watcher = ts.Debug.checkDefined(cache.get(path));
|
|
callbacksCache.remove(path, callback);
|
|
watcher.refCount--;
|
|
if (watcher.refCount)
|
|
return;
|
|
cache.delete(path);
|
|
ts.closeFileWatcherOf(watcher);
|
|
}
|
|
};
|
|
};
|
|
}
|
|
ts.createSingleFileWatcherPerName = createSingleFileWatcherPerName;
|
|
function onWatchedFileStat(watchedFile, modifiedTime) {
|
|
var oldTime = watchedFile.mtime.getTime();
|
|
var newTime = modifiedTime.getTime();
|
|
if (oldTime !== newTime) {
|
|
watchedFile.mtime = modifiedTime;
|
|
watchedFile.callback(watchedFile.fileName, getFileWatcherEventKind(oldTime, newTime), modifiedTime);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.onWatchedFileStat = onWatchedFileStat;
|
|
function getFileWatcherEventKind(oldTime, newTime) {
|
|
return oldTime === 0
|
|
? FileWatcherEventKind.Created
|
|
: newTime === 0
|
|
? FileWatcherEventKind.Deleted
|
|
: FileWatcherEventKind.Changed;
|
|
}
|
|
ts.getFileWatcherEventKind = getFileWatcherEventKind;
|
|
ts.ignoredPaths = ["/node_modules/.", "/.git", "/.#"];
|
|
var curSysLog = ts.noop;
|
|
function sysLog(s) {
|
|
return curSysLog(s);
|
|
}
|
|
ts.sysLog = sysLog;
|
|
function setSysLog(logger) {
|
|
curSysLog = logger;
|
|
}
|
|
ts.setSysLog = setSysLog;
|
|
function createDirectoryWatcherSupportingRecursive(_a) {
|
|
var watchDirectory = _a.watchDirectory, useCaseSensitiveFileNames = _a.useCaseSensitiveFileNames, getCurrentDirectory = _a.getCurrentDirectory, getAccessibleSortedChildDirectories = _a.getAccessibleSortedChildDirectories, fileSystemEntryExists = _a.fileSystemEntryExists, realpath = _a.realpath, setTimeout = _a.setTimeout, clearTimeout = _a.clearTimeout;
|
|
var cache = new ts.Map();
|
|
var callbackCache = ts.createMultiMap();
|
|
var cacheToUpdateChildWatches = new ts.Map();
|
|
var timerToUpdateChildWatches;
|
|
var filePathComparer = ts.getStringComparer(!useCaseSensitiveFileNames);
|
|
var toCanonicalFilePath = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
return function (dirName, callback, recursive, options) { return recursive ?
|
|
createDirectoryWatcher(dirName, options, callback) :
|
|
watchDirectory(dirName, callback, recursive, options); };
|
|
function createDirectoryWatcher(dirName, options, callback) {
|
|
var dirPath = toCanonicalFilePath(dirName);
|
|
var directoryWatcher = cache.get(dirPath);
|
|
if (directoryWatcher) {
|
|
directoryWatcher.refCount++;
|
|
}
|
|
else {
|
|
directoryWatcher = {
|
|
watcher: watchDirectory(dirName, function (fileName) {
|
|
if (isIgnoredPath(fileName, options))
|
|
return;
|
|
if (options === null || options === void 0 ? void 0 : options.synchronousWatchDirectory) {
|
|
invokeCallbacks(dirPath, fileName);
|
|
updateChildWatches(dirName, dirPath, options);
|
|
}
|
|
else {
|
|
nonSyncUpdateChildWatches(dirName, dirPath, fileName, options);
|
|
}
|
|
}, false, options),
|
|
refCount: 1,
|
|
childWatches: ts.emptyArray
|
|
};
|
|
cache.set(dirPath, directoryWatcher);
|
|
updateChildWatches(dirName, dirPath, options);
|
|
}
|
|
var callbackToAdd = callback && { dirName: dirName, callback: callback };
|
|
if (callbackToAdd) {
|
|
callbackCache.add(dirPath, callbackToAdd);
|
|
}
|
|
return {
|
|
dirName: dirName,
|
|
close: function () {
|
|
var directoryWatcher = ts.Debug.checkDefined(cache.get(dirPath));
|
|
if (callbackToAdd)
|
|
callbackCache.remove(dirPath, callbackToAdd);
|
|
directoryWatcher.refCount--;
|
|
if (directoryWatcher.refCount)
|
|
return;
|
|
cache.delete(dirPath);
|
|
ts.closeFileWatcherOf(directoryWatcher);
|
|
directoryWatcher.childWatches.forEach(ts.closeFileWatcher);
|
|
}
|
|
};
|
|
}
|
|
function invokeCallbacks(dirPath, fileNameOrInvokeMap, fileNames) {
|
|
var fileName;
|
|
var invokeMap;
|
|
if (ts.isString(fileNameOrInvokeMap)) {
|
|
fileName = fileNameOrInvokeMap;
|
|
}
|
|
else {
|
|
invokeMap = fileNameOrInvokeMap;
|
|
}
|
|
callbackCache.forEach(function (callbacks, rootDirName) {
|
|
var _a;
|
|
if (invokeMap && invokeMap.get(rootDirName) === true)
|
|
return;
|
|
if (rootDirName === dirPath || (ts.startsWith(dirPath, rootDirName) && dirPath[rootDirName.length] === ts.directorySeparator)) {
|
|
if (invokeMap) {
|
|
if (fileNames) {
|
|
var existing = invokeMap.get(rootDirName);
|
|
if (existing) {
|
|
(_a = existing).push.apply(_a, fileNames);
|
|
}
|
|
else {
|
|
invokeMap.set(rootDirName, fileNames.slice());
|
|
}
|
|
}
|
|
else {
|
|
invokeMap.set(rootDirName, true);
|
|
}
|
|
}
|
|
else {
|
|
callbacks.forEach(function (_a) {
|
|
var callback = _a.callback;
|
|
return callback(fileName);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function nonSyncUpdateChildWatches(dirName, dirPath, fileName, options) {
|
|
var parentWatcher = cache.get(dirPath);
|
|
if (parentWatcher && fileSystemEntryExists(dirName, 1)) {
|
|
scheduleUpdateChildWatches(dirName, dirPath, fileName, options);
|
|
return;
|
|
}
|
|
invokeCallbacks(dirPath, fileName);
|
|
removeChildWatches(parentWatcher);
|
|
}
|
|
function scheduleUpdateChildWatches(dirName, dirPath, fileName, options) {
|
|
var existing = cacheToUpdateChildWatches.get(dirPath);
|
|
if (existing) {
|
|
existing.fileNames.push(fileName);
|
|
}
|
|
else {
|
|
cacheToUpdateChildWatches.set(dirPath, { dirName: dirName, options: options, fileNames: [fileName] });
|
|
}
|
|
if (timerToUpdateChildWatches) {
|
|
clearTimeout(timerToUpdateChildWatches);
|
|
timerToUpdateChildWatches = undefined;
|
|
}
|
|
timerToUpdateChildWatches = setTimeout(onTimerToUpdateChildWatches, 1000);
|
|
}
|
|
function onTimerToUpdateChildWatches() {
|
|
timerToUpdateChildWatches = undefined;
|
|
sysLog("sysLog:: onTimerToUpdateChildWatches:: ".concat(cacheToUpdateChildWatches.size));
|
|
var start = ts.timestamp();
|
|
var invokeMap = new ts.Map();
|
|
while (!timerToUpdateChildWatches && cacheToUpdateChildWatches.size) {
|
|
var result = cacheToUpdateChildWatches.entries().next();
|
|
ts.Debug.assert(!result.done);
|
|
var _a = result.value, dirPath = _a[0], _b = _a[1], dirName = _b.dirName, options = _b.options, fileNames = _b.fileNames;
|
|
cacheToUpdateChildWatches.delete(dirPath);
|
|
var hasChanges = updateChildWatches(dirName, dirPath, options);
|
|
invokeCallbacks(dirPath, invokeMap, hasChanges ? undefined : fileNames);
|
|
}
|
|
sysLog("sysLog:: invokingWatchers:: Elapsed:: ".concat(ts.timestamp() - start, "ms:: ").concat(cacheToUpdateChildWatches.size));
|
|
callbackCache.forEach(function (callbacks, rootDirName) {
|
|
var existing = invokeMap.get(rootDirName);
|
|
if (existing) {
|
|
callbacks.forEach(function (_a) {
|
|
var callback = _a.callback, dirName = _a.dirName;
|
|
if (ts.isArray(existing)) {
|
|
existing.forEach(callback);
|
|
}
|
|
else {
|
|
callback(dirName);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
var elapsed = ts.timestamp() - start;
|
|
sysLog("sysLog:: Elapsed:: ".concat(elapsed, "ms:: onTimerToUpdateChildWatches:: ").concat(cacheToUpdateChildWatches.size, " ").concat(timerToUpdateChildWatches));
|
|
}
|
|
function removeChildWatches(parentWatcher) {
|
|
if (!parentWatcher)
|
|
return;
|
|
var existingChildWatches = parentWatcher.childWatches;
|
|
parentWatcher.childWatches = ts.emptyArray;
|
|
for (var _i = 0, existingChildWatches_1 = existingChildWatches; _i < existingChildWatches_1.length; _i++) {
|
|
var childWatcher = existingChildWatches_1[_i];
|
|
childWatcher.close();
|
|
removeChildWatches(cache.get(toCanonicalFilePath(childWatcher.dirName)));
|
|
}
|
|
}
|
|
function updateChildWatches(parentDir, parentDirPath, options) {
|
|
var parentWatcher = cache.get(parentDirPath);
|
|
if (!parentWatcher)
|
|
return false;
|
|
var newChildWatches;
|
|
var hasChanges = ts.enumerateInsertsAndDeletes(fileSystemEntryExists(parentDir, 1) ? ts.mapDefined(getAccessibleSortedChildDirectories(parentDir), function (child) {
|
|
var childFullName = ts.getNormalizedAbsolutePath(child, parentDir);
|
|
return !isIgnoredPath(childFullName, options) && filePathComparer(childFullName, ts.normalizePath(realpath(childFullName))) === 0 ? childFullName : undefined;
|
|
}) : ts.emptyArray, parentWatcher.childWatches, function (child, childWatcher) { return filePathComparer(child, childWatcher.dirName); }, createAndAddChildDirectoryWatcher, ts.closeFileWatcher, addChildDirectoryWatcher);
|
|
parentWatcher.childWatches = newChildWatches || ts.emptyArray;
|
|
return hasChanges;
|
|
function createAndAddChildDirectoryWatcher(childName) {
|
|
var result = createDirectoryWatcher(childName, options);
|
|
addChildDirectoryWatcher(result);
|
|
}
|
|
function addChildDirectoryWatcher(childWatcher) {
|
|
(newChildWatches || (newChildWatches = [])).push(childWatcher);
|
|
}
|
|
}
|
|
function isIgnoredPath(path, options) {
|
|
return ts.some(ts.ignoredPaths, function (searchPath) { return isInPath(path, searchPath); }) ||
|
|
isIgnoredByWatchOptions(path, options, useCaseSensitiveFileNames, getCurrentDirectory);
|
|
}
|
|
function isInPath(path, searchPath) {
|
|
if (ts.stringContains(path, searchPath))
|
|
return true;
|
|
if (useCaseSensitiveFileNames)
|
|
return false;
|
|
return ts.stringContains(toCanonicalFilePath(path), searchPath);
|
|
}
|
|
}
|
|
ts.createDirectoryWatcherSupportingRecursive = createDirectoryWatcherSupportingRecursive;
|
|
function createFileWatcherCallback(callback) {
|
|
return function (_fileName, eventKind, modifiedTime) { return callback(eventKind === FileWatcherEventKind.Changed ? "change" : "rename", "", modifiedTime); };
|
|
}
|
|
ts.createFileWatcherCallback = createFileWatcherCallback;
|
|
function createFsWatchCallbackForFileWatcherCallback(fileName, callback, getModifiedTime) {
|
|
return function (eventName, _relativeFileName, modifiedTime) {
|
|
if (eventName === "rename") {
|
|
modifiedTime || (modifiedTime = getModifiedTime(fileName) || ts.missingFileModifiedTime);
|
|
callback(fileName, modifiedTime !== ts.missingFileModifiedTime ? FileWatcherEventKind.Created : FileWatcherEventKind.Deleted, modifiedTime);
|
|
}
|
|
else {
|
|
callback(fileName, FileWatcherEventKind.Changed, modifiedTime);
|
|
}
|
|
};
|
|
}
|
|
function isIgnoredByWatchOptions(pathToCheck, options, useCaseSensitiveFileNames, getCurrentDirectory) {
|
|
return ((options === null || options === void 0 ? void 0 : options.excludeDirectories) || (options === null || options === void 0 ? void 0 : options.excludeFiles)) && (ts.matchesExclude(pathToCheck, options === null || options === void 0 ? void 0 : options.excludeFiles, useCaseSensitiveFileNames, getCurrentDirectory()) ||
|
|
ts.matchesExclude(pathToCheck, options === null || options === void 0 ? void 0 : options.excludeDirectories, useCaseSensitiveFileNames, getCurrentDirectory()));
|
|
}
|
|
function createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames, getCurrentDirectory) {
|
|
return function (eventName, relativeFileName) {
|
|
if (eventName === "rename") {
|
|
var fileName = !relativeFileName ? directoryName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName));
|
|
if (!relativeFileName || !isIgnoredByWatchOptions(fileName, options, useCaseSensitiveFileNames, getCurrentDirectory)) {
|
|
callback(fileName);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function createSystemWatchFunctions(_a) {
|
|
var pollingWatchFile = _a.pollingWatchFile, getModifiedTime = _a.getModifiedTime, setTimeout = _a.setTimeout, clearTimeout = _a.clearTimeout, fsWatchWorker = _a.fsWatchWorker, fileSystemEntryExists = _a.fileSystemEntryExists, useCaseSensitiveFileNames = _a.useCaseSensitiveFileNames, getCurrentDirectory = _a.getCurrentDirectory, fsSupportsRecursiveFsWatch = _a.fsSupportsRecursiveFsWatch, getAccessibleSortedChildDirectories = _a.getAccessibleSortedChildDirectories, realpath = _a.realpath, tscWatchFile = _a.tscWatchFile, useNonPollingWatchers = _a.useNonPollingWatchers, tscWatchDirectory = _a.tscWatchDirectory, defaultWatchFileKind = _a.defaultWatchFileKind, inodeWatching = _a.inodeWatching, sysLog = _a.sysLog;
|
|
var dynamicPollingWatchFile;
|
|
var fixedChunkSizePollingWatchFile;
|
|
var nonPollingWatchFile;
|
|
var hostRecursiveDirectoryWatcher;
|
|
var hitSystemWatcherLimit = false;
|
|
return {
|
|
watchFile: watchFile,
|
|
watchDirectory: watchDirectory
|
|
};
|
|
function watchFile(fileName, callback, pollingInterval, options) {
|
|
options = updateOptionsForWatchFile(options, useNonPollingWatchers);
|
|
var watchFileKind = ts.Debug.checkDefined(options.watchFile);
|
|
switch (watchFileKind) {
|
|
case ts.WatchFileKind.FixedPollingInterval:
|
|
return pollingWatchFile(fileName, callback, PollingInterval.Low, undefined);
|
|
case ts.WatchFileKind.PriorityPollingInterval:
|
|
return pollingWatchFile(fileName, callback, pollingInterval, undefined);
|
|
case ts.WatchFileKind.DynamicPriorityPolling:
|
|
return ensureDynamicPollingWatchFile()(fileName, callback, pollingInterval, undefined);
|
|
case ts.WatchFileKind.FixedChunkSizePolling:
|
|
return ensureFixedChunkSizePollingWatchFile()(fileName, callback, undefined, undefined);
|
|
case ts.WatchFileKind.UseFsEvents:
|
|
return fsWatch(fileName, 0, createFsWatchCallbackForFileWatcherCallback(fileName, callback, getModifiedTime), false, pollingInterval, ts.getFallbackOptions(options));
|
|
case ts.WatchFileKind.UseFsEventsOnParentDirectory:
|
|
if (!nonPollingWatchFile) {
|
|
nonPollingWatchFile = createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFileNames);
|
|
}
|
|
return nonPollingWatchFile(fileName, callback, pollingInterval, ts.getFallbackOptions(options));
|
|
default:
|
|
ts.Debug.assertNever(watchFileKind);
|
|
}
|
|
}
|
|
function ensureDynamicPollingWatchFile() {
|
|
return dynamicPollingWatchFile || (dynamicPollingWatchFile = createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }));
|
|
}
|
|
function ensureFixedChunkSizePollingWatchFile() {
|
|
return fixedChunkSizePollingWatchFile || (fixedChunkSizePollingWatchFile = createFixedChunkSizePollingWatchFile({ getModifiedTime: getModifiedTime, setTimeout: setTimeout }));
|
|
}
|
|
function updateOptionsForWatchFile(options, useNonPollingWatchers) {
|
|
if (options && options.watchFile !== undefined)
|
|
return options;
|
|
switch (tscWatchFile) {
|
|
case "PriorityPollingInterval":
|
|
return { watchFile: ts.WatchFileKind.PriorityPollingInterval };
|
|
case "DynamicPriorityPolling":
|
|
return { watchFile: ts.WatchFileKind.DynamicPriorityPolling };
|
|
case "UseFsEvents":
|
|
return generateWatchFileOptions(ts.WatchFileKind.UseFsEvents, ts.PollingWatchKind.PriorityInterval, options);
|
|
case "UseFsEventsWithFallbackDynamicPolling":
|
|
return generateWatchFileOptions(ts.WatchFileKind.UseFsEvents, ts.PollingWatchKind.DynamicPriority, options);
|
|
case "UseFsEventsOnParentDirectory":
|
|
useNonPollingWatchers = true;
|
|
default:
|
|
return useNonPollingWatchers ?
|
|
generateWatchFileOptions(ts.WatchFileKind.UseFsEventsOnParentDirectory, ts.PollingWatchKind.PriorityInterval, options) :
|
|
{ watchFile: (defaultWatchFileKind === null || defaultWatchFileKind === void 0 ? void 0 : defaultWatchFileKind()) || ts.WatchFileKind.FixedPollingInterval };
|
|
}
|
|
}
|
|
function generateWatchFileOptions(watchFile, fallbackPolling, options) {
|
|
var defaultFallbackPolling = options === null || options === void 0 ? void 0 : options.fallbackPolling;
|
|
return {
|
|
watchFile: watchFile,
|
|
fallbackPolling: defaultFallbackPolling === undefined ?
|
|
fallbackPolling :
|
|
defaultFallbackPolling
|
|
};
|
|
}
|
|
function watchDirectory(directoryName, callback, recursive, options) {
|
|
if (fsSupportsRecursiveFsWatch) {
|
|
return fsWatch(directoryName, 1, createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames, getCurrentDirectory), recursive, PollingInterval.Medium, ts.getFallbackOptions(options));
|
|
}
|
|
if (!hostRecursiveDirectoryWatcher) {
|
|
hostRecursiveDirectoryWatcher = createDirectoryWatcherSupportingRecursive({
|
|
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
|
|
getCurrentDirectory: getCurrentDirectory,
|
|
fileSystemEntryExists: fileSystemEntryExists,
|
|
getAccessibleSortedChildDirectories: getAccessibleSortedChildDirectories,
|
|
watchDirectory: nonRecursiveWatchDirectory,
|
|
realpath: realpath,
|
|
setTimeout: setTimeout,
|
|
clearTimeout: clearTimeout
|
|
});
|
|
}
|
|
return hostRecursiveDirectoryWatcher(directoryName, callback, recursive, options);
|
|
}
|
|
function nonRecursiveWatchDirectory(directoryName, callback, recursive, options) {
|
|
ts.Debug.assert(!recursive);
|
|
var watchDirectoryOptions = updateOptionsForWatchDirectory(options);
|
|
var watchDirectoryKind = ts.Debug.checkDefined(watchDirectoryOptions.watchDirectory);
|
|
switch (watchDirectoryKind) {
|
|
case ts.WatchDirectoryKind.FixedPollingInterval:
|
|
return pollingWatchFile(directoryName, function () { return callback(directoryName); }, PollingInterval.Medium, undefined);
|
|
case ts.WatchDirectoryKind.DynamicPriorityPolling:
|
|
return ensureDynamicPollingWatchFile()(directoryName, function () { return callback(directoryName); }, PollingInterval.Medium, undefined);
|
|
case ts.WatchDirectoryKind.FixedChunkSizePolling:
|
|
return ensureFixedChunkSizePollingWatchFile()(directoryName, function () { return callback(directoryName); }, undefined, undefined);
|
|
case ts.WatchDirectoryKind.UseFsEvents:
|
|
return fsWatch(directoryName, 1, createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames, getCurrentDirectory), recursive, PollingInterval.Medium, ts.getFallbackOptions(watchDirectoryOptions));
|
|
default:
|
|
ts.Debug.assertNever(watchDirectoryKind);
|
|
}
|
|
}
|
|
function updateOptionsForWatchDirectory(options) {
|
|
if (options && options.watchDirectory !== undefined)
|
|
return options;
|
|
switch (tscWatchDirectory) {
|
|
case "RecursiveDirectoryUsingFsWatchFile":
|
|
return { watchDirectory: ts.WatchDirectoryKind.FixedPollingInterval };
|
|
case "RecursiveDirectoryUsingDynamicPriorityPolling":
|
|
return { watchDirectory: ts.WatchDirectoryKind.DynamicPriorityPolling };
|
|
default:
|
|
var defaultFallbackPolling = options === null || options === void 0 ? void 0 : options.fallbackPolling;
|
|
return {
|
|
watchDirectory: ts.WatchDirectoryKind.UseFsEvents,
|
|
fallbackPolling: defaultFallbackPolling !== undefined ?
|
|
defaultFallbackPolling :
|
|
undefined
|
|
};
|
|
}
|
|
}
|
|
function fsWatch(fileOrDirectory, entryKind, callback, recursive, fallbackPollingInterval, fallbackOptions) {
|
|
var lastDirectoryPartWithDirectorySeparator;
|
|
var lastDirectoryPart;
|
|
if (inodeWatching) {
|
|
lastDirectoryPartWithDirectorySeparator = fileOrDirectory.substring(fileOrDirectory.lastIndexOf(ts.directorySeparator));
|
|
lastDirectoryPart = lastDirectoryPartWithDirectorySeparator.slice(ts.directorySeparator.length);
|
|
}
|
|
var watcher = !fileSystemEntryExists(fileOrDirectory, entryKind) ?
|
|
watchMissingFileSystemEntry() :
|
|
watchPresentFileSystemEntry();
|
|
return {
|
|
close: function () {
|
|
if (watcher) {
|
|
watcher.close();
|
|
watcher = undefined;
|
|
}
|
|
}
|
|
};
|
|
function updateWatcher(createWatcher) {
|
|
if (watcher) {
|
|
sysLog("sysLog:: ".concat(fileOrDirectory, ":: Changing watcher to ").concat(createWatcher === watchPresentFileSystemEntry ? "Present" : "Missing", "FileSystemEntryWatcher"));
|
|
watcher.close();
|
|
watcher = createWatcher();
|
|
}
|
|
}
|
|
function watchPresentFileSystemEntry() {
|
|
if (hitSystemWatcherLimit) {
|
|
sysLog("sysLog:: ".concat(fileOrDirectory, ":: Defaulting to watchFile"));
|
|
return watchPresentFileSystemEntryWithFsWatchFile();
|
|
}
|
|
try {
|
|
var presentWatcher = fsWatchWorker(fileOrDirectory, recursive, inodeWatching ?
|
|
callbackChangingToMissingFileSystemEntry :
|
|
callback);
|
|
presentWatcher.on("error", function () {
|
|
callback("rename", "");
|
|
updateWatcher(watchMissingFileSystemEntry);
|
|
});
|
|
return presentWatcher;
|
|
}
|
|
catch (e) {
|
|
hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
|
|
sysLog("sysLog:: ".concat(fileOrDirectory, ":: Changing to watchFile"));
|
|
return watchPresentFileSystemEntryWithFsWatchFile();
|
|
}
|
|
}
|
|
function callbackChangingToMissingFileSystemEntry(event, relativeName) {
|
|
var originalRelativeName;
|
|
if (relativeName && ts.endsWith(relativeName, "~")) {
|
|
originalRelativeName = relativeName;
|
|
relativeName = relativeName.slice(0, relativeName.length - 1);
|
|
}
|
|
if (event === "rename" &&
|
|
(!relativeName ||
|
|
relativeName === lastDirectoryPart ||
|
|
ts.endsWith(relativeName, lastDirectoryPartWithDirectorySeparator))) {
|
|
var modifiedTime = getModifiedTime(fileOrDirectory) || ts.missingFileModifiedTime;
|
|
if (originalRelativeName)
|
|
callback(event, originalRelativeName, modifiedTime);
|
|
callback(event, relativeName, modifiedTime);
|
|
if (inodeWatching) {
|
|
updateWatcher(modifiedTime === ts.missingFileModifiedTime ? watchMissingFileSystemEntry : watchPresentFileSystemEntry);
|
|
}
|
|
else if (modifiedTime === ts.missingFileModifiedTime) {
|
|
updateWatcher(watchMissingFileSystemEntry);
|
|
}
|
|
}
|
|
else {
|
|
if (originalRelativeName)
|
|
callback(event, originalRelativeName);
|
|
callback(event, relativeName);
|
|
}
|
|
}
|
|
function watchPresentFileSystemEntryWithFsWatchFile() {
|
|
return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
|
|
}
|
|
function watchMissingFileSystemEntry() {
|
|
return watchFile(fileOrDirectory, function (_fileName, eventKind, modifiedTime) {
|
|
if (eventKind === FileWatcherEventKind.Created) {
|
|
modifiedTime || (modifiedTime = getModifiedTime(fileOrDirectory) || ts.missingFileModifiedTime);
|
|
if (modifiedTime !== ts.missingFileModifiedTime) {
|
|
callback("rename", "", modifiedTime);
|
|
updateWatcher(watchPresentFileSystemEntry);
|
|
}
|
|
}
|
|
}, fallbackPollingInterval, fallbackOptions);
|
|
}
|
|
}
|
|
}
|
|
ts.createSystemWatchFunctions = createSystemWatchFunctions;
|
|
function patchWriteFileEnsuringDirectory(sys) {
|
|
var originalWriteFile = sys.writeFile;
|
|
sys.writeFile = function (path, data, writeBom) {
|
|
return ts.writeFileEnsuringDirectories(path, data, !!writeBom, function (path, data, writeByteOrderMark) { return originalWriteFile.call(sys, path, data, writeByteOrderMark); }, function (path) { return sys.createDirectory(path); }, function (path) { return sys.directoryExists(path); });
|
|
};
|
|
}
|
|
ts.patchWriteFileEnsuringDirectory = patchWriteFileEnsuringDirectory;
|
|
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 nativePattern = /^native |^\([^)]+\)$|^(internal[\\/]|[a-zA-Z0-9_\s]+(\.js)?$)/;
|
|
var _fs = require("fs");
|
|
var _path = require("path");
|
|
var _os = require("os");
|
|
var _crypto;
|
|
try {
|
|
_crypto = require("crypto");
|
|
}
|
|
catch (_a) {
|
|
_crypto = undefined;
|
|
}
|
|
var activeSession;
|
|
var profilePath = "./profile.cpuprofile";
|
|
var Buffer = require("buffer").Buffer;
|
|
var nodeVersion = getNodeMajorVersion();
|
|
var isNode4OrLater = nodeVersion >= 4;
|
|
var isLinuxOrMacOs = process.platform === "linux" || process.platform === "darwin";
|
|
var platform = _os.platform();
|
|
var useCaseSensitiveFileNames = isFileSystemCaseSensitive();
|
|
var fsRealpath = !!_fs.realpathSync.native ? process.platform === "win32" ? fsRealPathHandlingLongPath : _fs.realpathSync.native : _fs.realpathSync;
|
|
var fsSupportsRecursiveFsWatch = isNode4OrLater && (process.platform === "win32" || process.platform === "darwin");
|
|
var getCurrentDirectory = ts.memoize(function () { return process.cwd(); });
|
|
var _b = createSystemWatchFunctions({
|
|
pollingWatchFile: createSingleFileWatcherPerName(fsWatchFileWorker, useCaseSensitiveFileNames),
|
|
getModifiedTime: getModifiedTime,
|
|
setTimeout: setTimeout,
|
|
clearTimeout: clearTimeout,
|
|
fsWatchWorker: fsWatchWorker,
|
|
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
|
|
getCurrentDirectory: getCurrentDirectory,
|
|
fileSystemEntryExists: fileSystemEntryExists,
|
|
fsSupportsRecursiveFsWatch: fsSupportsRecursiveFsWatch,
|
|
getAccessibleSortedChildDirectories: function (path) { return getAccessibleFileSystemEntries(path).directories; },
|
|
realpath: realpath,
|
|
tscWatchFile: process.env.TSC_WATCHFILE,
|
|
useNonPollingWatchers: process.env.TSC_NONPOLLING_WATCHER,
|
|
tscWatchDirectory: process.env.TSC_WATCHDIRECTORY,
|
|
defaultWatchFileKind: function () { var _a, _b; return (_b = (_a = sys).defaultWatchFileKind) === null || _b === void 0 ? void 0 : _b.call(_a); },
|
|
inodeWatching: isLinuxOrMacOs,
|
|
sysLog: sysLog,
|
|
}), watchFile = _b.watchFile, watchDirectory = _b.watchDirectory;
|
|
var nodeSystem = {
|
|
args: process.argv.slice(2),
|
|
newLine: _os.EOL,
|
|
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
|
|
write: function (s) {
|
|
process.stdout.write(s);
|
|
},
|
|
getWidthOfTerminal: function () {
|
|
return process.stdout.columns;
|
|
},
|
|
writeOutputIsTTY: function () {
|
|
return process.stdout.isTTY;
|
|
},
|
|
readFile: readFile,
|
|
writeFile: writeFile,
|
|
watchFile: watchFile,
|
|
watchDirectory: watchDirectory,
|
|
resolvePath: function (path) { return _path.resolve(path); },
|
|
fileExists: fileExists,
|
|
directoryExists: directoryExists,
|
|
createDirectory: function (directoryName) {
|
|
if (!nodeSystem.directoryExists(directoryName)) {
|
|
try {
|
|
_fs.mkdirSync(directoryName);
|
|
}
|
|
catch (e) {
|
|
if (e.code !== "EEXIST") {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
getExecutingFilePath: function () {
|
|
return __filename;
|
|
},
|
|
getCurrentDirectory: getCurrentDirectory,
|
|
getDirectories: getDirectories,
|
|
getEnvironmentVariable: function (name) {
|
|
return process.env[name] || "";
|
|
},
|
|
readDirectory: readDirectory,
|
|
getModifiedTime: getModifiedTime,
|
|
setModifiedTime: setModifiedTime,
|
|
deleteFile: deleteFile,
|
|
createHash: _crypto ? createSHA256Hash : generateDjb2Hash,
|
|
createSHA256Hash: _crypto ? createSHA256Hash : undefined,
|
|
getMemoryUsage: function () {
|
|
if (global.gc) {
|
|
global.gc();
|
|
}
|
|
return process.memoryUsage().heapUsed;
|
|
},
|
|
getFileSize: function (path) {
|
|
try {
|
|
var stat = statSync(path);
|
|
if (stat === null || stat === void 0 ? void 0 : stat.isFile()) {
|
|
return stat.size;
|
|
}
|
|
}
|
|
catch (_a) { }
|
|
return 0;
|
|
},
|
|
exit: function (exitCode) {
|
|
disableCPUProfiler(function () { return process.exit(exitCode); });
|
|
},
|
|
enableCPUProfiler: enableCPUProfiler,
|
|
disableCPUProfiler: disableCPUProfiler,
|
|
cpuProfilingEnabled: function () { return !!activeSession || ts.contains(process.execArgv, "--cpu-prof") || ts.contains(process.execArgv, "--prof"); },
|
|
realpath: realpath,
|
|
debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || 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);
|
|
}
|
|
},
|
|
bufferFrom: bufferFrom,
|
|
base64decode: function (input) { return bufferFrom(input, "base64").toString("utf8"); },
|
|
base64encode: function (input) { return bufferFrom(input).toString("base64"); },
|
|
require: function (baseDir, moduleName) {
|
|
try {
|
|
var modulePath = ts.resolveJSModule(moduleName, baseDir, nodeSystem);
|
|
return { module: require(modulePath), modulePath: modulePath, error: undefined };
|
|
}
|
|
catch (error) {
|
|
return { module: undefined, modulePath: undefined, error: error };
|
|
}
|
|
}
|
|
};
|
|
return nodeSystem;
|
|
function statSync(path) {
|
|
return _fs.statSync(path, { throwIfNoEntry: false });
|
|
}
|
|
function enableCPUProfiler(path, cb) {
|
|
if (activeSession) {
|
|
cb();
|
|
return false;
|
|
}
|
|
var inspector = require("inspector");
|
|
if (!inspector || !inspector.Session) {
|
|
cb();
|
|
return false;
|
|
}
|
|
var session = new inspector.Session();
|
|
session.connect();
|
|
session.post("Profiler.enable", function () {
|
|
session.post("Profiler.start", function () {
|
|
activeSession = session;
|
|
profilePath = path;
|
|
cb();
|
|
});
|
|
});
|
|
return true;
|
|
}
|
|
function cleanupPaths(profile) {
|
|
var externalFileCounter = 0;
|
|
var remappedPaths = new ts.Map();
|
|
var normalizedDir = ts.normalizeSlashes(__dirname);
|
|
var fileUrlRoot = "file://".concat(ts.getRootLength(normalizedDir) === 1 ? "" : "/").concat(normalizedDir);
|
|
for (var _i = 0, _a = profile.nodes; _i < _a.length; _i++) {
|
|
var node = _a[_i];
|
|
if (node.callFrame.url) {
|
|
var url = ts.normalizeSlashes(node.callFrame.url);
|
|
if (ts.containsPath(fileUrlRoot, url, useCaseSensitiveFileNames)) {
|
|
node.callFrame.url = ts.getRelativePathToDirectoryOrUrl(fileUrlRoot, url, fileUrlRoot, ts.createGetCanonicalFileName(useCaseSensitiveFileNames), true);
|
|
}
|
|
else if (!nativePattern.test(url)) {
|
|
node.callFrame.url = (remappedPaths.has(url) ? remappedPaths : remappedPaths.set(url, "external".concat(externalFileCounter, ".js"))).get(url);
|
|
externalFileCounter++;
|
|
}
|
|
}
|
|
}
|
|
return profile;
|
|
}
|
|
function disableCPUProfiler(cb) {
|
|
if (activeSession && activeSession !== "stopping") {
|
|
var s_1 = activeSession;
|
|
activeSession.post("Profiler.stop", function (err, _a) {
|
|
var _b;
|
|
var profile = _a.profile;
|
|
if (!err) {
|
|
try {
|
|
if ((_b = statSync(profilePath)) === null || _b === void 0 ? void 0 : _b.isDirectory()) {
|
|
profilePath = _path.join(profilePath, "".concat((new Date()).toISOString().replace(/:/g, "-"), "+P").concat(process.pid, ".cpuprofile"));
|
|
}
|
|
}
|
|
catch (_c) {
|
|
}
|
|
try {
|
|
_fs.mkdirSync(_path.dirname(profilePath), { recursive: true });
|
|
}
|
|
catch (_d) {
|
|
}
|
|
_fs.writeFileSync(profilePath, JSON.stringify(cleanupPaths(profile)));
|
|
}
|
|
activeSession = undefined;
|
|
s_1.disconnect();
|
|
cb();
|
|
});
|
|
activeSession = "stopping";
|
|
return true;
|
|
}
|
|
else {
|
|
cb();
|
|
return false;
|
|
}
|
|
}
|
|
function bufferFrom(input, encoding) {
|
|
return Buffer.from && Buffer.from !== Int8Array.from
|
|
? Buffer.from(input, encoding)
|
|
: new Buffer(input, encoding);
|
|
}
|
|
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 fsWatchFileWorker(fileName, callback, pollingInterval) {
|
|
_fs.watchFile(fileName, { persistent: true, interval: pollingInterval }, 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, curr.mtime);
|
|
}
|
|
}
|
|
function fsWatchWorker(fileOrDirectory, recursive, callback) {
|
|
return _fs.watch(fileOrDirectory, fsSupportsRecursiveFsWatch ?
|
|
{ persistent: true, recursive: !!recursive } : { persistent: true }, callback);
|
|
}
|
|
function readFileWorker(fileName, _encoding) {
|
|
var buffer;
|
|
try {
|
|
buffer = _fs.readFileSync(fileName);
|
|
}
|
|
catch (e) {
|
|
return undefined;
|
|
}
|
|
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 readFile(fileName, _encoding) {
|
|
ts.perfLogger.logStartReadFile(fileName);
|
|
var file = readFileWorker(fileName, _encoding);
|
|
ts.perfLogger.logStopReadFile();
|
|
return file;
|
|
}
|
|
function writeFile(fileName, data, writeByteOrderMark) {
|
|
ts.perfLogger.logEvent("WriteFile: " + fileName);
|
|
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) {
|
|
ts.perfLogger.logEvent("ReadDir: " + (path || "."));
|
|
try {
|
|
var entries = _fs.readdirSync(path || ".", { withFileTypes: true });
|
|
var files = [];
|
|
var directories = [];
|
|
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
var dirent = entries_1[_i];
|
|
var entry = typeof dirent === "string" ? dirent : dirent.name;
|
|
if (entry === "." || entry === "..") {
|
|
continue;
|
|
}
|
|
var stat = void 0;
|
|
if (typeof dirent === "string" || dirent.isSymbolicLink()) {
|
|
var name = ts.combinePaths(path, entry);
|
|
try {
|
|
stat = statSync(name);
|
|
if (!stat) {
|
|
continue;
|
|
}
|
|
}
|
|
catch (e) {
|
|
continue;
|
|
}
|
|
}
|
|
else {
|
|
stat = dirent;
|
|
}
|
|
if (stat.isFile()) {
|
|
files.push(entry);
|
|
}
|
|
else if (stat.isDirectory()) {
|
|
directories.push(entry);
|
|
}
|
|
}
|
|
files.sort();
|
|
directories.sort();
|
|
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, realpath);
|
|
}
|
|
function fileSystemEntryExists(path, entryKind) {
|
|
var originalStackTraceLimit = Error.stackTraceLimit;
|
|
Error.stackTraceLimit = 0;
|
|
try {
|
|
var stat = statSync(path);
|
|
if (!stat) {
|
|
return false;
|
|
}
|
|
switch (entryKind) {
|
|
case 0: return stat.isFile();
|
|
case 1: return stat.isDirectory();
|
|
default: return false;
|
|
}
|
|
}
|
|
catch (e) {
|
|
return false;
|
|
}
|
|
finally {
|
|
Error.stackTraceLimit = originalStackTraceLimit;
|
|
}
|
|
}
|
|
function fileExists(path) {
|
|
return fileSystemEntryExists(path, 0);
|
|
}
|
|
function directoryExists(path) {
|
|
return fileSystemEntryExists(path, 1);
|
|
}
|
|
function getDirectories(path) {
|
|
return getAccessibleFileSystemEntries(path).directories.slice();
|
|
}
|
|
function fsRealPathHandlingLongPath(path) {
|
|
return path.length < 260 ? _fs.realpathSync.native(path) : _fs.realpathSync(path);
|
|
}
|
|
function realpath(path) {
|
|
try {
|
|
return fsRealpath(path);
|
|
}
|
|
catch (_a) {
|
|
return path;
|
|
}
|
|
}
|
|
function getModifiedTime(path) {
|
|
var _a;
|
|
var originalStackTraceLimit = Error.stackTraceLimit;
|
|
Error.stackTraceLimit = 0;
|
|
try {
|
|
return (_a = statSync(path)) === null || _a === void 0 ? void 0 : _a.mtime;
|
|
}
|
|
catch (e) {
|
|
return undefined;
|
|
}
|
|
finally {
|
|
Error.stackTraceLimit = originalStackTraceLimit;
|
|
}
|
|
}
|
|
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 createSHA256Hash(data) {
|
|
var hash = _crypto.createHash("sha256");
|
|
hash.update(data);
|
|
return hash.digest("hex");
|
|
}
|
|
}
|
|
var sys;
|
|
if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") {
|
|
sys = getNodeSystem();
|
|
}
|
|
if (sys) {
|
|
patchWriteFileEnsuringDirectory(sys);
|
|
}
|
|
return sys;
|
|
})();
|
|
function setSys(s) {
|
|
ts.sys = s;
|
|
}
|
|
ts.setSys = setSys;
|
|
if (ts.sys && ts.sys.getEnvironmentVariable) {
|
|
setCustomPollingValues(ts.sys);
|
|
ts.Debug.setAssertionLevel(/^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) {
|
|
ts.directorySeparator = "/";
|
|
ts.altDirectorySeparator = "\\";
|
|
var urlSchemeSeparator = "://";
|
|
var backslashRegExp = /\\/g;
|
|
function isAnyDirectorySeparator(charCode) {
|
|
return charCode === 47 || charCode === 92;
|
|
}
|
|
ts.isAnyDirectorySeparator = isAnyDirectorySeparator;
|
|
function isUrl(path) {
|
|
return getEncodedRootLength(path) < 0;
|
|
}
|
|
ts.isUrl = isUrl;
|
|
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 pathIsAbsolute(path) {
|
|
return getEncodedRootLength(path) !== 0;
|
|
}
|
|
ts.pathIsAbsolute = pathIsAbsolute;
|
|
function pathIsRelative(path) {
|
|
return /^\.\.?($|[\\/])/.test(path);
|
|
}
|
|
ts.pathIsRelative = pathIsRelative;
|
|
function pathIsBareSpecifier(path) {
|
|
return !pathIsAbsolute(path) && !pathIsRelative(path);
|
|
}
|
|
ts.pathIsBareSpecifier = pathIsBareSpecifier;
|
|
function hasExtension(fileName) {
|
|
return ts.stringContains(getBaseFileName(fileName), ".");
|
|
}
|
|
ts.hasExtension = hasExtension;
|
|
function fileExtensionIs(path, extension) {
|
|
return path.length > extension.length && ts.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 hasTrailingDirectorySeparator(path) {
|
|
return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1));
|
|
}
|
|
ts.hasTrailingDirectorySeparator = hasTrailingDirectorySeparator;
|
|
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 : ts.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 getDirectoryPath(path) {
|
|
path = normalizeSlashes(path);
|
|
var rootLength = getRootLength(path);
|
|
if (rootLength === path.length)
|
|
return path;
|
|
path = removeTrailingDirectorySeparator(path);
|
|
return path.slice(0, Math.max(rootLength, path.lastIndexOf(ts.directorySeparator)));
|
|
}
|
|
ts.getDirectoryPath = getDirectoryPath;
|
|
function getBaseFileName(path, extensions, ignoreCase) {
|
|
path = normalizeSlashes(path);
|
|
var rootLength = getRootLength(path);
|
|
if (rootLength === path.length)
|
|
return "";
|
|
path = removeTrailingDirectorySeparator(path);
|
|
var name = path.slice(Math.max(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 tryGetExtensionFromPath(path, extension, stringEqualityComparer) {
|
|
if (!ts.startsWith(extension, "."))
|
|
extension = "." + extension;
|
|
if (path.length >= extension.length && path.charCodeAt(path.length - extension.length) === 46) {
|
|
var pathExtension = path.slice(path.length - extension.length);
|
|
if (stringEqualityComparer(pathExtension, extension)) {
|
|
return pathExtension;
|
|
}
|
|
}
|
|
}
|
|
function getAnyExtensionFromPathWorker(path, extensions, stringEqualityComparer) {
|
|
if (typeof extensions === "string") {
|
|
return tryGetExtensionFromPath(path, extensions, stringEqualityComparer) || "";
|
|
}
|
|
for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) {
|
|
var extension = extensions_2[_i];
|
|
var result = tryGetExtensionFromPath(path, extension, stringEqualityComparer);
|
|
if (result)
|
|
return result;
|
|
}
|
|
return "";
|
|
}
|
|
function getAnyExtensionFromPath(path, extensions, ignoreCase) {
|
|
if (extensions) {
|
|
return getAnyExtensionFromPathWorker(removeTrailingDirectorySeparator(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 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 __spreadArray([root], rest, true);
|
|
}
|
|
function getPathComponents(path, currentDirectory) {
|
|
if (currentDirectory === void 0) { currentDirectory = ""; }
|
|
path = combinePaths(currentDirectory, path);
|
|
return pathComponents(path, getRootLength(path));
|
|
}
|
|
ts.getPathComponents = getPathComponents;
|
|
function getPathFromPathComponents(pathComponents) {
|
|
if (pathComponents.length === 0)
|
|
return "";
|
|
var root = pathComponents[0] && ensureTrailingDirectorySeparator(pathComponents[0]);
|
|
return root + pathComponents.slice(1).join(ts.directorySeparator);
|
|
}
|
|
ts.getPathFromPathComponents = getPathFromPathComponents;
|
|
function normalizeSlashes(path) {
|
|
var index = path.indexOf("\\");
|
|
if (index === -1) {
|
|
return path;
|
|
}
|
|
backslashRegExp.lastIndex = index;
|
|
return path.replace(backslashRegExp, ts.directorySeparator);
|
|
}
|
|
ts.normalizeSlashes = normalizeSlashes;
|
|
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 combinePaths(path) {
|
|
var paths = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
paths[_i - 1] = arguments[_i];
|
|
}
|
|
if (path)
|
|
path = normalizeSlashes(path);
|
|
for (var _a = 0, paths_1 = paths; _a < paths_1.length; _a++) {
|
|
var relativePath = paths_1[_a];
|
|
if (!relativePath)
|
|
continue;
|
|
relativePath = normalizeSlashes(relativePath);
|
|
if (!path || 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];
|
|
}
|
|
return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
|
|
}
|
|
ts.resolvePath = resolvePath;
|
|
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 normalizePath(path) {
|
|
path = normalizeSlashes(path);
|
|
if (!relativePathSegmentRegExp.test(path)) {
|
|
return path;
|
|
}
|
|
var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
|
|
if (simplified !== path) {
|
|
path = simplified;
|
|
if (!relativePathSegmentRegExp.test(path)) {
|
|
return path;
|
|
}
|
|
}
|
|
var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
|
|
return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
|
|
}
|
|
ts.normalizePath = normalizePath;
|
|
function getPathWithoutRoot(pathComponents) {
|
|
if (pathComponents.length === 0)
|
|
return "";
|
|
return pathComponents.slice(1).join(ts.directorySeparator);
|
|
}
|
|
function getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory) {
|
|
return getPathWithoutRoot(getNormalizedPathComponents(fileName, currentDirectory));
|
|
}
|
|
ts.getNormalizedAbsolutePathWithoutRoot = getNormalizedAbsolutePathWithoutRoot;
|
|
function toPath(fileName, basePath, getCanonicalFileName) {
|
|
var nonCanonicalizedPath = isRootedDiskPath(fileName)
|
|
? normalizePath(fileName)
|
|
: getNormalizedAbsolutePath(fileName, basePath);
|
|
return getCanonicalFileName(nonCanonicalizedPath);
|
|
}
|
|
ts.toPath = toPath;
|
|
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 ensurePathIsNonModuleName(path) {
|
|
return !pathIsAbsolute(path) && !pathIsRelative(path) ? "./" + path : path;
|
|
}
|
|
ts.ensurePathIsNonModuleName = ensurePathIsNonModuleName;
|
|
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 relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
|
|
function comparePathsWorker(a, b, componentComparer) {
|
|
if (a === b)
|
|
return 0;
|
|
if (a === undefined)
|
|
return -1;
|
|
if (b === undefined)
|
|
return 1;
|
|
var aRoot = a.substring(0, getRootLength(a));
|
|
var bRoot = b.substring(0, getRootLength(b));
|
|
var result = ts.compareStringsCaseInsensitive(aRoot, bRoot);
|
|
if (result !== 0) {
|
|
return result;
|
|
}
|
|
var aRest = a.substring(aRoot.length);
|
|
var bRest = b.substring(bRoot.length);
|
|
if (!relativePathSegmentRegExp.test(aRest) && !relativePathSegmentRegExp.test(bRest)) {
|
|
return componentComparer(aRest, bRest);
|
|
}
|
|
var aComponents = reducePathComponents(getPathComponents(a));
|
|
var bComponents = reducePathComponents(getPathComponents(b));
|
|
var sharedLength = Math.min(aComponents.length, bComponents.length);
|
|
for (var i = 1; i < sharedLength; i++) {
|
|
var result_2 = componentComparer(aComponents[i], bComponents[i]);
|
|
if (result_2 !== 0) {
|
|
return result_2;
|
|
}
|
|
}
|
|
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 = reducePathComponents(getPathComponents(parent));
|
|
var childComponents = reducePathComponents(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 startsWithDirectory(fileName, directoryName, getCanonicalFileName) {
|
|
var canonicalFileName = getCanonicalFileName(fileName);
|
|
var canonicalDirectoryName = getCanonicalFileName(directoryName);
|
|
return ts.startsWith(canonicalFileName, canonicalDirectoryName + "/") || ts.startsWith(canonicalFileName, canonicalDirectoryName + "\\");
|
|
}
|
|
ts.startsWithDirectory = startsWithDirectory;
|
|
function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) {
|
|
var fromComponents = reducePathComponents(getPathComponents(from));
|
|
var toComponents = reducePathComponents(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 __spreadArray(__spreadArray([""], relative, true), components, true);
|
|
}
|
|
ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
|
|
function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
|
|
ts.Debug.assert((getRootLength(fromDirectory) > 0) === (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 getPathFromPathComponents(pathComponents);
|
|
}
|
|
ts.getRelativePathFromDirectory = getRelativePathFromDirectory;
|
|
function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) {
|
|
return !isRootedDiskPath(absoluteOrRelativePath)
|
|
? absoluteOrRelativePath
|
|
: getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false);
|
|
}
|
|
ts.convertToRelativePath = convertToRelativePath;
|
|
function getRelativePathFromFile(from, to, getCanonicalFileName) {
|
|
return ensurePathIsNonModuleName(getRelativePathFromDirectory(getDirectoryPath(from), to, getCanonicalFileName));
|
|
}
|
|
ts.getRelativePathFromFile = getRelativePathFromFile;
|
|
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 && isRootedDiskPath(firstComponent)) {
|
|
var prefix = firstComponent.charAt(0) === ts.directorySeparator ? "file://" : "file:///";
|
|
pathComponents[0] = prefix + firstComponent;
|
|
}
|
|
return getPathFromPathComponents(pathComponents);
|
|
}
|
|
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
|
|
function forEachAncestorDirectory(directory, callback) {
|
|
while (true) {
|
|
var result = callback(directory);
|
|
if (result !== undefined) {
|
|
return result;
|
|
}
|
|
var parentPath = getDirectoryPath(directory);
|
|
if (parentPath === directory) {
|
|
return undefined;
|
|
}
|
|
directory = parentPath;
|
|
}
|
|
}
|
|
ts.forEachAncestorDirectory = forEachAncestorDirectory;
|
|
function isNodeModulesDirectory(dirPath) {
|
|
return ts.endsWith(dirPath, "/node_modules");
|
|
}
|
|
ts.isNodeModulesDirectory = isNodeModulesDirectory;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function diag(code, category, key, message, reportsUnnecessary, elidedInCompatabilityPyramid, reportsDeprecated) {
|
|
return { code: code, category: category, key: key, message: message, reportsUnnecessary: reportsUnnecessary, elidedInCompatabilityPyramid: elidedInCompatabilityPyramid, reportsDeprecated: reportsDeprecated };
|
|
}
|
|
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."),
|
|
The_parser_expected_to_find_a_1_to_match_the_0_token_here: diag(1007, ts.DiagnosticCategory.Error, "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007", "The parser expected to find a '{1}' to match the '{0}' token here."),
|
|
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."),
|
|
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."),
|
|
An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
|
|
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_class_elements_of_this_kind: diag(1031, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031", "'{0}' modifier cannot appear on class elements of this kind."),
|
|
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_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_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."),
|
|
Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier: diag(1046, ts.DiagnosticCategory.Error, "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046", "Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier."),
|
|
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."),
|
|
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_Did_you_mean_to_write_Promise_0: diag(1064, ts.DiagnosticCategory.Error, "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064", "The return type of an async function or method must be the global Promise<T> type. Did you mean to write 'Promise<{0}>'?"),
|
|
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}'."),
|
|
_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."),
|
|
for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
|
|
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."),
|
|
The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
|
|
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: diag(1117, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117", "An object literal cannot have multiple properties with the same name."),
|
|
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."),
|
|
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."),
|
|
or_JSX_element_expected: diag(1145, ts.DiagnosticCategory.Error, "or_JSX_element_expected_1145", "'{' or JSX element 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."),
|
|
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_have_a_simple_literal_type_or_a_unique_symbol_type: diag(1166, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166", "A computed property name in a class property declaration must have a simple 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."),
|
|
export_Asterisk_does_not_re_export_a_default: diag(1195, ts.DiagnosticCategory.Error, "export_Asterisk_does_not_re_export_a_default_1195", "'export *' does not re-export a default."),
|
|
Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified: diag(1196, ts.DiagnosticCategory.Error, "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196", "Catch clause variable type annotation must be 'any' or 'unknown' if specified."),
|
|
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."),
|
|
Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type: diag(1205, ts.DiagnosticCategory.Error, "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205", "Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'."),
|
|
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."),
|
|
_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
|
|
Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0: diag(1209, ts.DiagnosticCategory.Error, "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209", "Invalid optional chain from new expression. Did you mean to call '{0}()'?"),
|
|
Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/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_in_your_tsconfig_or_jsconfig_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 in your 'tsconfig' or 'jsconfig' to remove this warning."),
|
|
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_must_be_at_the_top_level_of_a_file_or_module_declaration: diag(1231, ts.DiagnosticCategory.Error, "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231", "An export assignment must be at the top level of a file or module declaration."),
|
|
An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module: diag(1232, ts.DiagnosticCategory.Error, "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232", "An import declaration can only be used at the top level of a namespace or module."),
|
|
An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module: diag(1233, ts.DiagnosticCategory.Error, "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233", "An export declaration can only be used at the top level of a namespace or 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_at_the_top_level_of_a_namespace_or_module: diag(1235, ts.DiagnosticCategory.Error, "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235", "A namespace declaration is only allowed at the top level of 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."),
|
|
A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference: diag(1254, ts.DiagnosticCategory.Error, "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254", "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference."),
|
|
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."),
|
|
A_required_element_cannot_follow_an_optional_element: diag(1257, ts.DiagnosticCategory.Error, "A_required_element_cannot_follow_an_optional_element_1257", "A required element cannot follow an optional element."),
|
|
A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration: diag(1258, ts.DiagnosticCategory.Error, "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258", "A default export must be at the top level of a file or module declaration."),
|
|
Module_0_can_only_be_default_imported_using_the_1_flag: diag(1259, ts.DiagnosticCategory.Error, "Module_0_can_only_be_default_imported_using_the_1_flag_1259", "Module '{0}' can only be default-imported using the '{1}' flag"),
|
|
Keywords_cannot_contain_escape_characters: diag(1260, ts.DiagnosticCategory.Error, "Keywords_cannot_contain_escape_characters_1260", "Keywords cannot contain escape characters."),
|
|
Already_included_file_name_0_differs_from_file_name_1_only_in_casing: diag(1261, ts.DiagnosticCategory.Error, "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261", "Already included file name '{0}' differs from file name '{1}' only in casing."),
|
|
Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module: diag(1262, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262", "Identifier expected. '{0}' is a reserved word at the top-level of a module."),
|
|
Declarations_with_initializers_cannot_also_have_definite_assignment_assertions: diag(1263, ts.DiagnosticCategory.Error, "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263", "Declarations with initializers cannot also have definite assignment assertions."),
|
|
Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
|
|
A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
|
|
An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
|
|
Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
|
|
An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
|
|
Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided: diag(1269, ts.DiagnosticCategory.Error, "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269", "Cannot use 'export import' on a type or type-only namespace when the '--isolatedModules' flag is provided."),
|
|
Decorator_function_return_type_0_is_not_assignable_to_type_1: diag(1270, ts.DiagnosticCategory.Error, "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270", "Decorator function return type '{0}' is not assignable to type '{1}'."),
|
|
Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any: diag(1271, ts.DiagnosticCategory.Error, "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271", "Decorator function return type is '{0}' but is expected to be 'void' or 'any'."),
|
|
A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled: diag(1272, ts.DiagnosticCategory.Error, "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272", "A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled."),
|
|
_0_modifier_cannot_appear_on_a_type_parameter: diag(1273, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_type_parameter_1273", "'{0}' modifier cannot appear on a type parameter"),
|
|
_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias: diag(1274, ts.DiagnosticCategory.Error, "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274", "'{0}' modifier can only appear on a type parameter of a class, interface or type alias"),
|
|
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_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
|
|
The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level: diag(1309, ts.DiagnosticCategory.Error, "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309", "The current file is a CommonJS module and cannot use 'await' at the top level."),
|
|
Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
|
|
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_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext: diag(1323, ts.DiagnosticCategory.Error, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'."),
|
|
Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext: diag(1324, ts.DiagnosticCategory.Error, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', or 'nodenext'."),
|
|
Argument_of_dynamic_import_cannot_be_spread_element: diag(1325, ts.DiagnosticCategory.Error, "Argument_of_dynamic_import_cannot_be_spread_element_1325", "Argument of dynamic import cannot be spread element."),
|
|
This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments: diag(1326, ts.DiagnosticCategory.Error, "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326", "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and 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_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic 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_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
|
|
Class_constructor_may_not_be_an_accessor: diag(1341, ts.DiagnosticCategory.Error, "Class_constructor_may_not_be_an_accessor_1341", "Class constructor may not be an accessor."),
|
|
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_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext: diag(1343, ts.DiagnosticCategory.Error, "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343", "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', or 'nodenext'."),
|
|
A_label_is_not_allowed_here: diag(1344, ts.DiagnosticCategory.Error, "A_label_is_not_allowed_here_1344", "'A label is not allowed here."),
|
|
An_expression_of_type_void_cannot_be_tested_for_truthiness: diag(1345, ts.DiagnosticCategory.Error, "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345", "An expression of type 'void' cannot be tested for truthiness."),
|
|
This_parameter_is_not_allowed_with_use_strict_directive: diag(1346, ts.DiagnosticCategory.Error, "This_parameter_is_not_allowed_with_use_strict_directive_1346", "This parameter is not allowed with 'use strict' directive."),
|
|
use_strict_directive_cannot_be_used_with_non_simple_parameter_list: diag(1347, ts.DiagnosticCategory.Error, "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347", "'use strict' directive cannot be used with non-simple parameter list."),
|
|
Non_simple_parameter_declared_here: diag(1348, ts.DiagnosticCategory.Error, "Non_simple_parameter_declared_here_1348", "Non-simple parameter declared here."),
|
|
use_strict_directive_used_here: diag(1349, ts.DiagnosticCategory.Error, "use_strict_directive_used_here_1349", "'use strict' directive used here."),
|
|
Print_the_final_configuration_instead_of_building: diag(1350, ts.DiagnosticCategory.Message, "Print_the_final_configuration_instead_of_building_1350", "Print the final configuration instead of building."),
|
|
An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal: diag(1351, ts.DiagnosticCategory.Error, "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351", "An identifier or keyword cannot immediately follow a numeric literal."),
|
|
A_bigint_literal_cannot_use_exponential_notation: diag(1352, ts.DiagnosticCategory.Error, "A_bigint_literal_cannot_use_exponential_notation_1352", "A bigint literal cannot use exponential notation."),
|
|
A_bigint_literal_must_be_an_integer: diag(1353, ts.DiagnosticCategory.Error, "A_bigint_literal_must_be_an_integer_1353", "A bigint literal must be an integer."),
|
|
readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types: diag(1354, ts.DiagnosticCategory.Error, "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354", "'readonly' type modifier is only permitted on array and tuple literal types."),
|
|
A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals: diag(1355, ts.DiagnosticCategory.Error, "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355", "A 'const' assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals."),
|
|
Did_you_mean_to_mark_this_function_as_async: diag(1356, ts.DiagnosticCategory.Error, "Did_you_mean_to_mark_this_function_as_async_1356", "Did you mean to mark this function as 'async'?"),
|
|
An_enum_member_name_must_be_followed_by_a_or: diag(1357, ts.DiagnosticCategory.Error, "An_enum_member_name_must_be_followed_by_a_or_1357", "An enum member name must be followed by a ',', '=', or '}'."),
|
|
Tagged_template_expressions_are_not_permitted_in_an_optional_chain: diag(1358, ts.DiagnosticCategory.Error, "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358", "Tagged template expressions are not permitted in an optional chain."),
|
|
Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here: diag(1359, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359", "Identifier expected. '{0}' is a reserved word that cannot be used here."),
|
|
Class_constructor_may_not_be_a_generator: diag(1360, ts.DiagnosticCategory.Error, "Class_constructor_may_not_be_a_generator_1360", "Class constructor may not be a generator."),
|
|
_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type: diag(1361, ts.DiagnosticCategory.Error, "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361", "'{0}' cannot be used as a value because it was imported using 'import type'."),
|
|
_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type: diag(1362, ts.DiagnosticCategory.Error, "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362", "'{0}' cannot be used as a value because it was exported using 'export type'."),
|
|
A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both: diag(1363, ts.DiagnosticCategory.Error, "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363", "A type-only import can specify a default import or named bindings, but not both."),
|
|
Convert_to_type_only_export: diag(1364, ts.DiagnosticCategory.Message, "Convert_to_type_only_export_1364", "Convert to type-only export"),
|
|
Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
|
|
Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
|
|
Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
|
|
Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
|
|
This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
|
|
Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
|
|
Convert_all_imports_not_used_as_a_value_to_type_only_imports: diag(1374, ts.DiagnosticCategory.Message, "Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374", "Convert all imports not used as a value to type-only imports"),
|
|
await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1375, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375", "'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
|
|
_0_was_imported_here: diag(1376, ts.DiagnosticCategory.Message, "_0_was_imported_here_1376", "'{0}' was imported here."),
|
|
_0_was_exported_here: diag(1377, ts.DiagnosticCategory.Message, "_0_was_exported_here_1377", "'{0}' was exported here."),
|
|
Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher: diag(1378, ts.DiagnosticCategory.Error, "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378", "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher."),
|
|
An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type: diag(1379, ts.DiagnosticCategory.Error, "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379", "An import alias cannot reference a declaration that was exported using 'export type'."),
|
|
An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type: diag(1380, ts.DiagnosticCategory.Error, "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380", "An import alias cannot reference a declaration that was imported using 'import type'."),
|
|
Unexpected_token_Did_you_mean_or_rbrace: diag(1381, ts.DiagnosticCategory.Error, "Unexpected_token_Did_you_mean_or_rbrace_1381", "Unexpected token. Did you mean `{'}'}` or `}`?"),
|
|
Unexpected_token_Did_you_mean_or_gt: diag(1382, ts.DiagnosticCategory.Error, "Unexpected_token_Did_you_mean_or_gt_1382", "Unexpected token. Did you mean `{'>'}` or `>`?"),
|
|
Only_named_exports_may_use_export_type: diag(1383, ts.DiagnosticCategory.Error, "Only_named_exports_may_use_export_type_1383", "Only named exports may use 'export type'."),
|
|
Function_type_notation_must_be_parenthesized_when_used_in_a_union_type: diag(1385, ts.DiagnosticCategory.Error, "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385", "Function type notation must be parenthesized when used in a union type."),
|
|
Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type: diag(1386, ts.DiagnosticCategory.Error, "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386", "Constructor type notation must be parenthesized when used in a union type."),
|
|
Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type: diag(1387, ts.DiagnosticCategory.Error, "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387", "Function type notation must be parenthesized when used in an intersection type."),
|
|
Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type: diag(1388, ts.DiagnosticCategory.Error, "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388", "Constructor type notation must be parenthesized when used in an intersection type."),
|
|
_0_is_not_allowed_as_a_variable_declaration_name: diag(1389, ts.DiagnosticCategory.Error, "_0_is_not_allowed_as_a_variable_declaration_name_1389", "'{0}' is not allowed as a variable declaration name."),
|
|
_0_is_not_allowed_as_a_parameter_name: diag(1390, ts.DiagnosticCategory.Error, "_0_is_not_allowed_as_a_parameter_name_1390", "'{0}' is not allowed as a parameter name."),
|
|
An_import_alias_cannot_use_import_type: diag(1392, ts.DiagnosticCategory.Error, "An_import_alias_cannot_use_import_type_1392", "An import alias cannot use 'import type'"),
|
|
Imported_via_0_from_file_1: diag(1393, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_1393", "Imported via {0} from file '{1}'"),
|
|
Imported_via_0_from_file_1_with_packageId_2: diag(1394, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_with_packageId_2_1394", "Imported via {0} from file '{1}' with packageId '{2}'"),
|
|
Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions: diag(1395, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395", "Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions"),
|
|
Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions: diag(1396, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396", "Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions"),
|
|
Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions: diag(1397, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397", "Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions"),
|
|
Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions: diag(1398, ts.DiagnosticCategory.Message, "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398", "Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions"),
|
|
File_is_included_via_import_here: diag(1399, ts.DiagnosticCategory.Message, "File_is_included_via_import_here_1399", "File is included via import here."),
|
|
Referenced_via_0_from_file_1: diag(1400, ts.DiagnosticCategory.Message, "Referenced_via_0_from_file_1_1400", "Referenced via '{0}' from file '{1}'"),
|
|
File_is_included_via_reference_here: diag(1401, ts.DiagnosticCategory.Message, "File_is_included_via_reference_here_1401", "File is included via reference here."),
|
|
Type_library_referenced_via_0_from_file_1: diag(1402, ts.DiagnosticCategory.Message, "Type_library_referenced_via_0_from_file_1_1402", "Type library referenced via '{0}' from file '{1}'"),
|
|
Type_library_referenced_via_0_from_file_1_with_packageId_2: diag(1403, ts.DiagnosticCategory.Message, "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403", "Type library referenced via '{0}' from file '{1}' with packageId '{2}'"),
|
|
File_is_included_via_type_library_reference_here: diag(1404, ts.DiagnosticCategory.Message, "File_is_included_via_type_library_reference_here_1404", "File is included via type library reference here."),
|
|
Library_referenced_via_0_from_file_1: diag(1405, ts.DiagnosticCategory.Message, "Library_referenced_via_0_from_file_1_1405", "Library referenced via '{0}' from file '{1}'"),
|
|
File_is_included_via_library_reference_here: diag(1406, ts.DiagnosticCategory.Message, "File_is_included_via_library_reference_here_1406", "File is included via library reference here."),
|
|
Matched_by_include_pattern_0_in_1: diag(1407, ts.DiagnosticCategory.Message, "Matched_by_include_pattern_0_in_1_1407", "Matched by include pattern '{0}' in '{1}'"),
|
|
File_is_matched_by_include_pattern_specified_here: diag(1408, ts.DiagnosticCategory.Message, "File_is_matched_by_include_pattern_specified_here_1408", "File is matched by include pattern specified here."),
|
|
Part_of_files_list_in_tsconfig_json: diag(1409, ts.DiagnosticCategory.Message, "Part_of_files_list_in_tsconfig_json_1409", "Part of 'files' list in tsconfig.json"),
|
|
File_is_matched_by_files_list_specified_here: diag(1410, ts.DiagnosticCategory.Message, "File_is_matched_by_files_list_specified_here_1410", "File is matched by 'files' list specified here."),
|
|
Output_from_referenced_project_0_included_because_1_specified: diag(1411, ts.DiagnosticCategory.Message, "Output_from_referenced_project_0_included_because_1_specified_1411", "Output from referenced project '{0}' included because '{1}' specified"),
|
|
Output_from_referenced_project_0_included_because_module_is_specified_as_none: diag(1412, ts.DiagnosticCategory.Message, "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412", "Output from referenced project '{0}' included because '--module' is specified as 'none'"),
|
|
File_is_output_from_referenced_project_specified_here: diag(1413, ts.DiagnosticCategory.Message, "File_is_output_from_referenced_project_specified_here_1413", "File is output from referenced project specified here."),
|
|
Source_from_referenced_project_0_included_because_1_specified: diag(1414, ts.DiagnosticCategory.Message, "Source_from_referenced_project_0_included_because_1_specified_1414", "Source from referenced project '{0}' included because '{1}' specified"),
|
|
Source_from_referenced_project_0_included_because_module_is_specified_as_none: diag(1415, ts.DiagnosticCategory.Message, "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415", "Source from referenced project '{0}' included because '--module' is specified as 'none'"),
|
|
File_is_source_from_referenced_project_specified_here: diag(1416, ts.DiagnosticCategory.Message, "File_is_source_from_referenced_project_specified_here_1416", "File is source from referenced project specified here."),
|
|
Entry_point_of_type_library_0_specified_in_compilerOptions: diag(1417, ts.DiagnosticCategory.Message, "Entry_point_of_type_library_0_specified_in_compilerOptions_1417", "Entry point of type library '{0}' specified in compilerOptions"),
|
|
Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1: diag(1418, ts.DiagnosticCategory.Message, "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418", "Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'"),
|
|
File_is_entry_point_of_type_library_specified_here: diag(1419, ts.DiagnosticCategory.Message, "File_is_entry_point_of_type_library_specified_here_1419", "File is entry point of type library specified here."),
|
|
Entry_point_for_implicit_type_library_0: diag(1420, ts.DiagnosticCategory.Message, "Entry_point_for_implicit_type_library_0_1420", "Entry point for implicit type library '{0}'"),
|
|
Entry_point_for_implicit_type_library_0_with_packageId_1: diag(1421, ts.DiagnosticCategory.Message, "Entry_point_for_implicit_type_library_0_with_packageId_1_1421", "Entry point for implicit type library '{0}' with packageId '{1}'"),
|
|
Library_0_specified_in_compilerOptions: diag(1422, ts.DiagnosticCategory.Message, "Library_0_specified_in_compilerOptions_1422", "Library '{0}' specified in compilerOptions"),
|
|
File_is_library_specified_here: diag(1423, ts.DiagnosticCategory.Message, "File_is_library_specified_here_1423", "File is library specified here."),
|
|
Default_library: diag(1424, ts.DiagnosticCategory.Message, "Default_library_1424", "Default library"),
|
|
Default_library_for_target_0: diag(1425, ts.DiagnosticCategory.Message, "Default_library_for_target_0_1425", "Default library for target '{0}'"),
|
|
File_is_default_library_for_target_specified_here: diag(1426, ts.DiagnosticCategory.Message, "File_is_default_library_for_target_specified_here_1426", "File is default library for target specified here."),
|
|
Root_file_specified_for_compilation: diag(1427, ts.DiagnosticCategory.Message, "Root_file_specified_for_compilation_1427", "Root file specified for compilation"),
|
|
File_is_output_of_project_reference_source_0: diag(1428, ts.DiagnosticCategory.Message, "File_is_output_of_project_reference_source_0_1428", "File is output of project reference source '{0}'"),
|
|
File_redirects_to_file_0: diag(1429, ts.DiagnosticCategory.Message, "File_redirects_to_file_0_1429", "File redirects to file '{0}'"),
|
|
The_file_is_in_the_program_because_Colon: diag(1430, ts.DiagnosticCategory.Message, "The_file_is_in_the_program_because_Colon_1430", "The file is in the program because:"),
|
|
for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
|
|
Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher."),
|
|
Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
|
|
Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
|
|
Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
|
|
Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
|
|
Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
|
|
Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
|
|
Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
|
|
Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
|
|
Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
|
|
Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
|
|
Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
|
|
_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled: diag(1444, ts.DiagnosticCategory.Error, "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444", "'{0}' is a type and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled."),
|
|
_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled: diag(1446, ts.DiagnosticCategory.Error, "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446", "'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled."),
|
|
_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isolatedModules_is_enabled: diag(1448, ts.DiagnosticCategory.Error, "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448", "'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when 'isolatedModules' is enabled."),
|
|
Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed: diag(1449, ts.DiagnosticCategory.Message, "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449", "Preserve unused imported values in the JavaScript output that would otherwise be removed."),
|
|
Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments: diag(1450, ts.DiagnosticCategory.Message, "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450", "Dynamic imports can only accept a module specifier and an optional assertion as arguments"),
|
|
Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression: diag(1451, ts.DiagnosticCategory.Error, "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451", "Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression"),
|
|
resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext: diag(1452, ts.DiagnosticCategory.Error, "resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452", "'resolution-mode' assertions are only supported when `moduleResolution` is `node16` or `nodenext`."),
|
|
resolution_mode_should_be_either_require_or_import: diag(1453, ts.DiagnosticCategory.Error, "resolution_mode_should_be_either_require_or_import_1453", "`resolution-mode` should be either `require` or `import`."),
|
|
resolution_mode_can_only_be_set_for_type_only_imports: diag(1454, ts.DiagnosticCategory.Error, "resolution_mode_can_only_be_set_for_type_only_imports_1454", "`resolution-mode` can only be set for type-only imports."),
|
|
resolution_mode_is_the_only_valid_key_for_type_import_assertions: diag(1455, ts.DiagnosticCategory.Error, "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455", "`resolution-mode` is the only valid key for type import assertions."),
|
|
Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require: diag(1456, ts.DiagnosticCategory.Error, "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456", "Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`."),
|
|
Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk: diag(1457, ts.DiagnosticCategory.Message, "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457", "Matched by default include pattern '**/*'"),
|
|
File_is_ECMAScript_module_because_0_has_field_type_with_value_module: diag(1458, ts.DiagnosticCategory.Message, "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458", "File is ECMAScript module because '{0}' has field \"type\" with value \"module\""),
|
|
File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module: diag(1459, ts.DiagnosticCategory.Message, "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459", "File is CommonJS module because '{0}' has field \"type\" whose value is not \"module\""),
|
|
File_is_CommonJS_module_because_0_does_not_have_field_type: diag(1460, ts.DiagnosticCategory.Message, "File_is_CommonJS_module_because_0_does_not_have_field_type_1460", "File is CommonJS module because '{0}' does not have field \"type\""),
|
|
File_is_CommonJS_module_because_package_json_was_not_found: diag(1461, ts.DiagnosticCategory.Message, "File_is_CommonJS_module_because_package_json_was_not_found_1461", "File is CommonJS module because 'package.json' was not found"),
|
|
The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output: diag(1470, ts.DiagnosticCategory.Error, "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470", "The 'import.meta' meta-property is not allowed in files which will build into CommonJS output."),
|
|
Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead: diag(1471, ts.DiagnosticCategory.Error, "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471", "Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead."),
|
|
catch_or_finally_expected: diag(1472, ts.DiagnosticCategory.Error, "catch_or_finally_expected_1472", "'catch' or 'finally' expected."),
|
|
An_import_declaration_can_only_be_used_at_the_top_level_of_a_module: diag(1473, ts.DiagnosticCategory.Error, "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473", "An import declaration can only be used at the top level of a module."),
|
|
An_export_declaration_can_only_be_used_at_the_top_level_of_a_module: diag(1474, ts.DiagnosticCategory.Error, "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474", "An export declaration can only be used at the top level of a module."),
|
|
Control_what_method_is_used_to_detect_module_format_JS_files: diag(1475, ts.DiagnosticCategory.Message, "Control_what_method_is_used_to_detect_module_format_JS_files_1475", "Control what method is used to detect module-format JS files."),
|
|
auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules: diag(1476, ts.DiagnosticCategory.Message, "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476", "\"auto\": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules."),
|
|
An_instantiation_expression_cannot_be_followed_by_a_property_access: diag(1477, ts.DiagnosticCategory.Error, "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477", "An instantiation expression cannot be followed by a property access."),
|
|
Identifier_or_string_literal_expected: diag(1478, ts.DiagnosticCategory.Error, "Identifier_or_string_literal_expected_1478", "Identifier or string literal expected."),
|
|
The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead: diag(1479, ts.DiagnosticCategory.Error, "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479", "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"{0}\")' call instead."),
|
|
To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module: diag(1480, ts.DiagnosticCategory.Message, "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480", "To convert this file to an ECMAScript module, change its file extension to '{0}' or create a local package.json file with `{ \"type\": \"module\" }`."),
|
|
To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1: diag(1481, ts.DiagnosticCategory.Message, "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481", "To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field `\"type\": \"module\"` to '{1}'."),
|
|
To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0: diag(1482, ts.DiagnosticCategory.Message, "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482", "To convert this file to an ECMAScript module, add the field `\"type\": \"module\"` to '{0}'."),
|
|
To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module: diag(1483, ts.DiagnosticCategory.Message, "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483", "To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`."),
|
|
The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
|
|
The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
|
|
Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", undefined, true),
|
|
Construct_signature_return_types_0_and_1_are_incompatible: diag(2203, ts.DiagnosticCategory.Error, "Construct_signature_return_types_0_and_1_are_incompatible_2203", "Construct signature return types '{0}' and '{1}' are incompatible.", undefined, true),
|
|
Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1: diag(2204, ts.DiagnosticCategory.Error, "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204", "Call signatures with no arguments have incompatible return types '{0}' and '{1}'.", undefined, true),
|
|
Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1: diag(2205, ts.DiagnosticCategory.Error, "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205", "Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.", undefined, true),
|
|
The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement: diag(2206, ts.DiagnosticCategory.Error, "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206", "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement."),
|
|
The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement: diag(2207, ts.DiagnosticCategory.Error, "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207", "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement."),
|
|
This_type_parameter_might_need_an_extends_0_constraint: diag(2208, ts.DiagnosticCategory.Error, "This_type_parameter_might_need_an_extends_0_constraint_2208", "This type parameter might need an `extends {0}` constraint."),
|
|
The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2209, ts.DiagnosticCategory.Error, "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209", "The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),
|
|
The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2210, ts.DiagnosticCategory.Error, "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210", "The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),
|
|
Add_extends_constraint: diag(2211, ts.DiagnosticCategory.Message, "Add_extends_constraint_2211", "Add `extends` constraint."),
|
|
Add_extends_constraint_to_all_type_parameters: diag(2212, ts.DiagnosticCategory.Message, "Add_extends_constraint_to_all_type_parameters_2212", "Add `extends` constraint to all type parameters"),
|
|
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_or_its_corresponding_type_declarations: diag(2307, ts.DiagnosticCategory.Error, "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", "Cannot find module '{0}' or its corresponding type declarations."),
|
|
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."),
|
|
Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function: diag(2311, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311", "Cannot find name '{0}'. Did you mean to write this in an async function?"),
|
|
An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2312, ts.DiagnosticCategory.Error, "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312", "An interface can only extend an object type or intersection of object types with statically known members."),
|
|
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_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
|
|
_0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' 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}'."),
|
|
This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0: diag(2343, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343", "This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'."),
|
|
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'?"),
|
|
This_expression_is_not_callable: diag(2349, ts.DiagnosticCategory.Error, "This_expression_is_not_callable_2349", "This expression is not callable."),
|
|
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."),
|
|
This_expression_is_not_constructable: diag(2351, ts.DiagnosticCategory.Error, "This_expression_is_not_constructable_2351", "This expression is not constructable."),
|
|
Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first: diag(2352, ts.DiagnosticCategory.Error, "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352", "Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first."),
|
|
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_bigint_or_an_enum_type: diag(2356, ts.DiagnosticCategory.Error, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' 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_a_private_identifier_or_of_type_any_string_number_or_symbol: diag(2360, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_in_expression_must_be_a_private_identifier_or_of_type_any_string_number_or__2360", "The left-hand side of an 'in' expression must be a private identifier or of type 'any', 'string', 'number', or 'symbol'."),
|
|
The_right_hand_side_of_an_in_expression_must_not_be_a_primitive: diag(2361, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361", "The right-hand side of an 'in' expression must not be a primitive."),
|
|
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."),
|
|
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' 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'."),
|
|
This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap: diag(2367, ts.DiagnosticCategory.Error, "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367", "This condition will always return '{0}' since the types '{1}' and '{2}' have no overlap."),
|
|
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_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
|
|
Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
|
|
Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
|
|
Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties: diag(2375, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375", "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."),
|
|
A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376", "A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers."),
|
|
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."),
|
|
Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties: diag(2379, ts.DiagnosticCategory.Error, "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379", "Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."),
|
|
The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type: diag(2380, ts.DiagnosticCategory.Error, "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380", "The return type of a 'get' accessor must be assignable to its 'set' accessor type"),
|
|
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."),
|
|
This_overload_signature_is_not_compatible_with_its_implementation_signature: diag(2394, ts.DiagnosticCategory.Error, "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394", "This overload signature is not compatible with its implementation signature."),
|
|
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}'."),
|
|
constructor_cannot_be_used_as_a_parameter_property_name: diag(2398, ts.DiagnosticCategory.Error, "constructor_cannot_be_used_as_a_parameter_property_name_2398", "'constructor' cannot be used as a parameter property name."),
|
|
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."),
|
|
A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2401, ts.DiagnosticCategory.Error, "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401", "A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers."),
|
|
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'."),
|
|
Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target: diag(2412, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412", "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target."),
|
|
Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
|
|
_0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
|
|
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}'."),
|
|
Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1: diag(2418, ts.DiagnosticCategory.Error, "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418", "Type of computed property's value is '{0}', which is not assignable to type '{1}'."),
|
|
Types_of_construct_signatures_are_incompatible: diag(2419, ts.DiagnosticCategory.Error, "Types_of_construct_signatures_are_incompatible_2419", "Types of construct signatures are incompatible."),
|
|
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_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2422, ts.DiagnosticCategory.Error, "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422", "A class can only implement an object type or intersection of object types with statically known members."),
|
|
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_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_This_is_an_instance_of_class_2: diag(2446, ts.DiagnosticCategory.Error, "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446", "Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'."),
|
|
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."),
|
|
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_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."),
|
|
Module_0_declares_1_locally_but_it_is_not_exported: diag(2459, ts.DiagnosticCategory.Error, "Module_0_declares_1_locally_but_it_is_not_exported_2459", "Module '{0}' declares '{1}' locally, but it is not exported."),
|
|
Module_0_declares_1_locally_but_it_is_exported_as_2: diag(2460, ts.DiagnosticCategory.Error, "Module_0_declares_1_locally_but_it_is_exported_as_2_2460", "Module '{0}' declares '{1}' locally, but it is exported as '{2}'."),
|
|
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'."),
|
|
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."),
|
|
const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values: diag(2474, ts.DiagnosticCategory.Error, "const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474", "const enum member initializers can only contain literal values and other computed enum values."),
|
|
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'."),
|
|
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_0_method_of_an_iterator_must_have_a_value_property: diag(2490, ts.DiagnosticCategory.Error, "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490", "The type returned by the '{0}()' 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_of_length_1_has_no_element_at_index_2: diag(2493, ts.DiagnosticCategory.Error, "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493", "Tuple type '{0}' of length '{1}' has no element at index '{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."),
|
|
This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export: diag(2497, ts.DiagnosticCategory.Error, "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497", "This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export."),
|
|
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_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2509, ts.DiagnosticCategory.Error, "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509", "Base constructor return type '{0}' is not an object type or intersection of object types with statically known members."),
|
|
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."),
|
|
A_tuple_type_cannot_be_indexed_with_a_negative_value: diag(2514, ts.DiagnosticCategory.Error, "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514", "A tuple type cannot be indexed with a negative value."),
|
|
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."),
|
|
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_read_only_property: diag(2540, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_read_only_property_2540", "Cannot assign to '{0}' because it is a read-only property."),
|
|
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[]'."),
|
|
The_type_returned_by_the_0_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_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547", "The type returned by the '{0}()' 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."),
|
|
Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later: diag(2550, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550", "Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later."),
|
|
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}."),
|
|
A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter: diag(2556, ts.DiagnosticCategory.Error, "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556", "A spread argument must either have a tuple type or be passed to a rest parameter."),
|
|
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."),
|
|
Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
|
|
Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
|
|
Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
|
|
A_rest_element_type_must_be_an_array_type: diag(2574, ts.DiagnosticCategory.Error, "A_rest_element_type_must_be_an_array_type_2574", "A rest element type must be an array type."),
|
|
No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments: diag(2575, ts.DiagnosticCategory.Error, "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575", "No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments."),
|
|
Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead: diag(2576, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576", "Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?"),
|
|
Return_type_annotation_circularly_references_itself: diag(2577, ts.DiagnosticCategory.Error, "Return_type_annotation_circularly_references_itself_2577", "Return type annotation circularly references itself."),
|
|
Unused_ts_expect_error_directive: diag(2578, ts.DiagnosticCategory.Error, "Unused_ts_expect_error_directive_2578", "Unused '@ts-expect-error' directive."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode: diag(2580, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580", "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery: diag(2581, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581", "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha: diag(2582, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582", "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`."),
|
|
Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later: diag(2583, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583", "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later."),
|
|
Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom: diag(2584, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584", "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'."),
|
|
_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later: diag(2585, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585", "'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later."),
|
|
Cannot_assign_to_0_because_it_is_a_constant: diag(2588, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_constant_2588", "Cannot assign to '{0}' because it is a constant."),
|
|
Type_instantiation_is_excessively_deep_and_possibly_infinite: diag(2589, ts.DiagnosticCategory.Error, "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589", "Type instantiation is excessively deep and possibly infinite."),
|
|
Expression_produces_a_union_type_that_is_too_complex_to_represent: diag(2590, ts.DiagnosticCategory.Error, "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590", "Expression produces a union type that is too complex to represent."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig: diag(2591, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591", "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig: diag(2592, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592", "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig."),
|
|
Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig: diag(2593, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593", "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig."),
|
|
This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag: diag(2594, ts.DiagnosticCategory.Error, "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594", "This module is declared with using 'export =', and can only be used with a default import when using the '{0}' flag."),
|
|
_0_can_only_be_imported_by_using_a_default_import: diag(2595, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_using_a_default_import_2595", "'{0}' can only be imported by using a default import."),
|
|
_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2596, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596", "'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import."),
|
|
_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import: diag(2597, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597", "'{0}' can only be imported by using a 'require' call or by using a default import."),
|
|
_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2598, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598", "'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import."),
|
|
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."),
|
|
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."),
|
|
_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property: diag(2610, ts.DiagnosticCategory.Error, "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610", "'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property."),
|
|
_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor: diag(2611, ts.DiagnosticCategory.Error, "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611", "'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor."),
|
|
Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration: diag(2612, ts.DiagnosticCategory.Error, "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612", "Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration."),
|
|
Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead: diag(2613, ts.DiagnosticCategory.Error, "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613", "Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?"),
|
|
Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead: diag(2614, ts.DiagnosticCategory.Error, "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614", "Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?"),
|
|
Type_of_property_0_circularly_references_itself_in_mapped_type_1: diag(2615, ts.DiagnosticCategory.Error, "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615", "Type of property '{0}' circularly references itself in mapped type '{1}'."),
|
|
_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import: diag(2616, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616", "'{0}' can only be imported by using 'import {1} = require({2})' or a default import."),
|
|
_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2617, ts.DiagnosticCategory.Error, "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617", "'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import."),
|
|
Source_has_0_element_s_but_target_requires_1: diag(2618, ts.DiagnosticCategory.Error, "Source_has_0_element_s_but_target_requires_1_2618", "Source has {0} element(s) but target requires {1}."),
|
|
Source_has_0_element_s_but_target_allows_only_1: diag(2619, ts.DiagnosticCategory.Error, "Source_has_0_element_s_but_target_allows_only_1_2619", "Source has {0} element(s) but target allows only {1}."),
|
|
Target_requires_0_element_s_but_source_may_have_fewer: diag(2620, ts.DiagnosticCategory.Error, "Target_requires_0_element_s_but_source_may_have_fewer_2620", "Target requires {0} element(s) but source may have fewer."),
|
|
Target_allows_only_0_element_s_but_source_may_have_more: diag(2621, ts.DiagnosticCategory.Error, "Target_allows_only_0_element_s_but_source_may_have_more_2621", "Target allows only {0} element(s) but source may have more."),
|
|
Source_provides_no_match_for_required_element_at_position_0_in_target: diag(2623, ts.DiagnosticCategory.Error, "Source_provides_no_match_for_required_element_at_position_0_in_target_2623", "Source provides no match for required element at position {0} in target."),
|
|
Source_provides_no_match_for_variadic_element_at_position_0_in_target: diag(2624, ts.DiagnosticCategory.Error, "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624", "Source provides no match for variadic element at position {0} in target."),
|
|
Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target: diag(2625, ts.DiagnosticCategory.Error, "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625", "Variadic element at position {0} in source does not match element at position {1} in target."),
|
|
Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target: diag(2626, ts.DiagnosticCategory.Error, "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626", "Type at position {0} in source is not compatible with type at position {1} in target."),
|
|
Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target: diag(2627, ts.DiagnosticCategory.Error, "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627", "Type at positions {0} through {1} in source is not compatible with type at position {2} in target."),
|
|
Cannot_assign_to_0_because_it_is_an_enum: diag(2628, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_enum_2628", "Cannot assign to '{0}' because it is an enum."),
|
|
Cannot_assign_to_0_because_it_is_a_class: diag(2629, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_class_2629", "Cannot assign to '{0}' because it is a class."),
|
|
Cannot_assign_to_0_because_it_is_a_function: diag(2630, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_function_2630", "Cannot assign to '{0}' because it is a function."),
|
|
Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
|
|
Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
|
|
JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
|
|
_0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
|
|
Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable: diag(2635, ts.DiagnosticCategory.Error, "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635", "Type '{0}' has no signatures for which the type argument list is applicable."),
|
|
Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation: diag(2636, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636", "Type '{0}' is not assignable to type '{1}' as implied by variance annotation."),
|
|
Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types: diag(2637, ts.DiagnosticCategory.Error, "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637", "Variance annotations are only supported in type aliases for object, function, constructor, and mapped types."),
|
|
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}'."),
|
|
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."),
|
|
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'?"),
|
|
_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0: diag(2690, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690", "'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?"),
|
|
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_property_0: diag(2718, ts.DiagnosticCategory.Error, "Duplicate_property_0_2718", "Duplicate property '{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'."),
|
|
_0_has_no_exported_member_named_1_Did_you_mean_2: diag(2724, ts.DiagnosticCategory.Error, "_0_has_no_exported_member_named_1_Did_you_mean_2_2724", "'{0}' has no exported member named '{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}'?"),
|
|
_0_is_declared_here: diag(2728, ts.DiagnosticCategory.Message, "_0_is_declared_here_2728", "'{0}' is declared here."),
|
|
Property_0_is_used_before_its_initialization: diag(2729, ts.DiagnosticCategory.Error, "Property_0_is_used_before_its_initialization_2729", "Property '{0}' is used before its initialization."),
|
|
An_arrow_function_cannot_have_a_this_parameter: diag(2730, ts.DiagnosticCategory.Error, "An_arrow_function_cannot_have_a_this_parameter_2730", "An arrow function cannot have a 'this' parameter."),
|
|
Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String: diag(2731, ts.DiagnosticCategory.Error, "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731", "Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'."),
|
|
Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension: diag(2732, ts.DiagnosticCategory.Error, "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732", "Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension."),
|
|
Property_0_was_also_declared_here: diag(2733, ts.DiagnosticCategory.Error, "Property_0_was_also_declared_here_2733", "Property '{0}' was also declared here."),
|
|
Are_you_missing_a_semicolon: diag(2734, ts.DiagnosticCategory.Error, "Are_you_missing_a_semicolon_2734", "Are you missing a semicolon?"),
|
|
Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1: diag(2735, ts.DiagnosticCategory.Error, "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735", "Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?"),
|
|
Operator_0_cannot_be_applied_to_type_1: diag(2736, ts.DiagnosticCategory.Error, "Operator_0_cannot_be_applied_to_type_1_2736", "Operator '{0}' cannot be applied to type '{1}'."),
|
|
BigInt_literals_are_not_available_when_targeting_lower_than_ES2020: diag(2737, ts.DiagnosticCategory.Error, "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737", "BigInt literals are not available when targeting lower than ES2020."),
|
|
An_outer_value_of_this_is_shadowed_by_this_container: diag(2738, ts.DiagnosticCategory.Message, "An_outer_value_of_this_is_shadowed_by_this_container_2738", "An outer value of 'this' is shadowed by this container."),
|
|
Type_0_is_missing_the_following_properties_from_type_1_Colon_2: diag(2739, ts.DiagnosticCategory.Error, "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739", "Type '{0}' is missing the following properties from type '{1}': {2}"),
|
|
Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more: diag(2740, ts.DiagnosticCategory.Error, "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740", "Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more."),
|
|
Property_0_is_missing_in_type_1_but_required_in_type_2: diag(2741, ts.DiagnosticCategory.Error, "Property_0_is_missing_in_type_1_but_required_in_type_2_2741", "Property '{0}' is missing in type '{1}' but required in type '{2}'."),
|
|
The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary: diag(2742, ts.DiagnosticCategory.Error, "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742", "The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary."),
|
|
No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments: diag(2743, ts.DiagnosticCategory.Error, "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743", "No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments."),
|
|
Type_parameter_defaults_can_only_reference_previously_declared_type_parameters: diag(2744, ts.DiagnosticCategory.Error, "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744", "Type parameter defaults can only reference previously declared type parameters."),
|
|
This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided: diag(2745, ts.DiagnosticCategory.Error, "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745", "This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided."),
|
|
This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided: diag(2746, ts.DiagnosticCategory.Error, "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746", "This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided."),
|
|
_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2: diag(2747, ts.DiagnosticCategory.Error, "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747", "'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'."),
|
|
Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided: diag(2748, ts.DiagnosticCategory.Error, "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748", "Cannot access ambient const enums when the '--isolatedModules' flag is provided."),
|
|
_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0: diag(2749, ts.DiagnosticCategory.Error, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749", "'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?"),
|
|
The_implementation_signature_is_declared_here: diag(2750, ts.DiagnosticCategory.Error, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."),
|
|
Circularity_originates_in_type_at_this_location: diag(2751, ts.DiagnosticCategory.Error, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."),
|
|
The_first_export_default_is_here: diag(2752, ts.DiagnosticCategory.Error, "The_first_export_default_is_here_2752", "The first export default is here."),
|
|
Another_export_default_is_here: diag(2753, ts.DiagnosticCategory.Error, "Another_export_default_is_here_2753", "Another export default is here."),
|
|
super_may_not_use_type_arguments: diag(2754, ts.DiagnosticCategory.Error, "super_may_not_use_type_arguments_2754", "'super' may not use type arguments."),
|
|
No_constituent_of_type_0_is_callable: diag(2755, ts.DiagnosticCategory.Error, "No_constituent_of_type_0_is_callable_2755", "No constituent of type '{0}' is callable."),
|
|
Not_all_constituents_of_type_0_are_callable: diag(2756, ts.DiagnosticCategory.Error, "Not_all_constituents_of_type_0_are_callable_2756", "Not all constituents of type '{0}' are callable."),
|
|
Type_0_has_no_call_signatures: diag(2757, ts.DiagnosticCategory.Error, "Type_0_has_no_call_signatures_2757", "Type '{0}' has no call signatures."),
|
|
Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other: diag(2758, ts.DiagnosticCategory.Error, "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758", "Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other."),
|
|
No_constituent_of_type_0_is_constructable: diag(2759, ts.DiagnosticCategory.Error, "No_constituent_of_type_0_is_constructable_2759", "No constituent of type '{0}' is constructable."),
|
|
Not_all_constituents_of_type_0_are_constructable: diag(2760, ts.DiagnosticCategory.Error, "Not_all_constituents_of_type_0_are_constructable_2760", "Not all constituents of type '{0}' are constructable."),
|
|
Type_0_has_no_construct_signatures: diag(2761, ts.DiagnosticCategory.Error, "Type_0_has_no_construct_signatures_2761", "Type '{0}' has no construct signatures."),
|
|
Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other: diag(2762, ts.DiagnosticCategory.Error, "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762", "Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other."),
|
|
Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0: diag(2763, ts.DiagnosticCategory.Error, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'."),
|
|
Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0: diag(2764, ts.DiagnosticCategory.Error, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'."),
|
|
Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0: diag(2765, ts.DiagnosticCategory.Error, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'."),
|
|
Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0: diag(2766, ts.DiagnosticCategory.Error, "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766", "Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'."),
|
|
The_0_property_of_an_iterator_must_be_a_method: diag(2767, ts.DiagnosticCategory.Error, "The_0_property_of_an_iterator_must_be_a_method_2767", "The '{0}' property of an iterator must be a method."),
|
|
The_0_property_of_an_async_iterator_must_be_a_method: diag(2768, ts.DiagnosticCategory.Error, "The_0_property_of_an_async_iterator_must_be_a_method_2768", "The '{0}' property of an async iterator must be a method."),
|
|
No_overload_matches_this_call: diag(2769, ts.DiagnosticCategory.Error, "No_overload_matches_this_call_2769", "No overload matches this call."),
|
|
The_last_overload_gave_the_following_error: diag(2770, ts.DiagnosticCategory.Error, "The_last_overload_gave_the_following_error_2770", "The last overload gave the following error."),
|
|
The_last_overload_is_declared_here: diag(2771, ts.DiagnosticCategory.Error, "The_last_overload_is_declared_here_2771", "The last overload is declared here."),
|
|
Overload_0_of_1_2_gave_the_following_error: diag(2772, ts.DiagnosticCategory.Error, "Overload_0_of_1_2_gave_the_following_error_2772", "Overload {0} of {1}, '{2}', gave the following error."),
|
|
Did_you_forget_to_use_await: diag(2773, ts.DiagnosticCategory.Error, "Did_you_forget_to_use_await_2773", "Did you forget to use 'await'?"),
|
|
This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead: diag(2774, ts.DiagnosticCategory.Error, "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774", "This condition will always return true since this function is always defined. Did you mean to call it instead?"),
|
|
Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation: diag(2775, ts.DiagnosticCategory.Error, "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775", "Assertions require every name in the call target to be declared with an explicit type annotation."),
|
|
Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name: diag(2776, ts.DiagnosticCategory.Error, "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776", "Assertions require the call target to be an identifier or qualified name."),
|
|
The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access: diag(2777, ts.DiagnosticCategory.Error, "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777", "The operand of an increment or decrement operator may not be an optional property access."),
|
|
The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access: diag(2778, ts.DiagnosticCategory.Error, "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778", "The target of an object rest assignment may not be an optional property access."),
|
|
The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access: diag(2779, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779", "The left-hand side of an assignment expression may not be an optional property access."),
|
|
The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access: diag(2780, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780", "The left-hand side of a 'for...in' statement may not be an optional property access."),
|
|
The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access: diag(2781, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781", "The left-hand side of a 'for...of' statement may not be an optional property access."),
|
|
_0_needs_an_explicit_type_annotation: diag(2782, ts.DiagnosticCategory.Message, "_0_needs_an_explicit_type_annotation_2782", "'{0}' needs an explicit type annotation."),
|
|
_0_is_specified_more_than_once_so_this_usage_will_be_overwritten: diag(2783, ts.DiagnosticCategory.Error, "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783", "'{0}' is specified more than once, so this usage will be overwritten."),
|
|
get_and_set_accessors_cannot_declare_this_parameters: diag(2784, ts.DiagnosticCategory.Error, "get_and_set_accessors_cannot_declare_this_parameters_2784", "'get' and 'set' accessors cannot declare 'this' parameters."),
|
|
This_spread_always_overwrites_this_property: diag(2785, ts.DiagnosticCategory.Error, "This_spread_always_overwrites_this_property_2785", "This spread always overwrites this property."),
|
|
_0_cannot_be_used_as_a_JSX_component: diag(2786, ts.DiagnosticCategory.Error, "_0_cannot_be_used_as_a_JSX_component_2786", "'{0}' cannot be used as a JSX component."),
|
|
Its_return_type_0_is_not_a_valid_JSX_element: diag(2787, ts.DiagnosticCategory.Error, "Its_return_type_0_is_not_a_valid_JSX_element_2787", "Its return type '{0}' is not a valid JSX element."),
|
|
Its_instance_type_0_is_not_a_valid_JSX_element: diag(2788, ts.DiagnosticCategory.Error, "Its_instance_type_0_is_not_a_valid_JSX_element_2788", "Its instance type '{0}' is not a valid JSX element."),
|
|
Its_element_type_0_is_not_a_valid_JSX_element: diag(2789, ts.DiagnosticCategory.Error, "Its_element_type_0_is_not_a_valid_JSX_element_2789", "Its element type '{0}' is not a valid JSX element."),
|
|
The_operand_of_a_delete_operator_must_be_optional: diag(2790, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_must_be_optional_2790", "The operand of a 'delete' operator must be optional."),
|
|
Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later: diag(2791, ts.DiagnosticCategory.Error, "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791", "Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later."),
|
|
Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option: diag(2792, ts.DiagnosticCategory.Error, "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792", "Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?"),
|
|
The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible: diag(2793, ts.DiagnosticCategory.Error, "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793", "The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible."),
|
|
Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise: diag(2794, ts.DiagnosticCategory.Error, "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794", "Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?"),
|
|
The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types: diag(2795, ts.DiagnosticCategory.Error, "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795", "The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types."),
|
|
It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked: diag(2796, ts.DiagnosticCategory.Error, "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796", "It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked."),
|
|
A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract: diag(2797, ts.DiagnosticCategory.Error, "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797", "A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'."),
|
|
The_declaration_was_marked_as_deprecated_here: diag(2798, ts.DiagnosticCategory.Error, "The_declaration_was_marked_as_deprecated_here_2798", "The declaration was marked as deprecated here."),
|
|
Type_produces_a_tuple_type_that_is_too_large_to_represent: diag(2799, ts.DiagnosticCategory.Error, "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799", "Type produces a tuple type that is too large to represent."),
|
|
Expression_produces_a_tuple_type_that_is_too_large_to_represent: diag(2800, ts.DiagnosticCategory.Error, "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800", "Expression produces a tuple type that is too large to represent."),
|
|
This_condition_will_always_return_true_since_this_0_is_always_defined: diag(2801, ts.DiagnosticCategory.Error, "This_condition_will_always_return_true_since_this_0_is_always_defined_2801", "This condition will always return true since this '{0}' is always defined."),
|
|
Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher: diag(2802, ts.DiagnosticCategory.Error, "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802", "Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher."),
|
|
Cannot_assign_to_private_method_0_Private_methods_are_not_writable: diag(2803, ts.DiagnosticCategory.Error, "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803", "Cannot assign to private method '{0}'. Private methods are not writable."),
|
|
Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name: diag(2804, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804", "Duplicate identifier '{0}'. Static and instance elements cannot share the same private name."),
|
|
Private_accessor_was_defined_without_a_getter: diag(2806, ts.DiagnosticCategory.Error, "Private_accessor_was_defined_without_a_getter_2806", "Private accessor was defined without a getter."),
|
|
This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0: diag(2807, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807", "This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'."),
|
|
A_get_accessor_must_be_at_least_as_accessible_as_the_setter: diag(2808, ts.DiagnosticCategory.Error, "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808", "A get accessor must be at least as accessible as the setter"),
|
|
Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses: diag(2809, ts.DiagnosticCategory.Error, "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809", "Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the the whole assignment in parentheses."),
|
|
Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments: diag(2810, ts.DiagnosticCategory.Error, "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810", "Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments."),
|
|
Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
|
|
Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
|
|
Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
|
|
Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
|
|
arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
|
|
Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
|
|
Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
|
|
Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
|
|
Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
|
|
Type_0_is_not_assignable_to_type_1_Did_you_mean_2: diag(2820, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820", "Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?"),
|
|
Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext: diag(2821, ts.DiagnosticCategory.Error, "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821", "Import assertions are only supported when the '--module' option is set to 'esnext' or 'nodenext'."),
|
|
Import_assertions_cannot_be_used_with_type_only_imports_or_exports: diag(2822, ts.DiagnosticCategory.Error, "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822", "Import assertions cannot be used with type-only imports or exports."),
|
|
Cannot_find_namespace_0_Did_you_mean_1: diag(2833, ts.DiagnosticCategory.Error, "Cannot_find_namespace_0_Did_you_mean_1_2833", "Cannot find namespace '{0}'. Did you mean '{1}'?"),
|
|
Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path: diag(2834, ts.DiagnosticCategory.Error, "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834", "Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path."),
|
|
Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0: diag(2835, ts.DiagnosticCategory.Error, "Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835", "Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?"),
|
|
Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls: diag(2836, ts.DiagnosticCategory.Error, "Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836", "Import assertions are not allowed on statements that transpile to commonjs 'require' calls."),
|
|
Import_assertion_values_must_be_string_literal_expressions: diag(2837, ts.DiagnosticCategory.Error, "Import_assertion_values_must_be_string_literal_expressions_2837", "Import assertion values must be string literal expressions."),
|
|
All_declarations_of_0_must_have_identical_constraints: diag(2838, ts.DiagnosticCategory.Error, "All_declarations_of_0_must_have_identical_constraints_2838", "All declarations of '{0}' must have identical constraints."),
|
|
This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value: diag(2839, ts.DiagnosticCategory.Error, "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839", "This condition will always return '{0}' since JavaScript compares objects by reference, not value."),
|
|
An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes: diag(2840, ts.DiagnosticCategory.Error, "An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840", "An interface cannot extend a primitive type like '{0}'; an interface can only extend named types and classes"),
|
|
The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(2841, ts.DiagnosticCategory.Error, "The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841", "The type of this expression cannot be named without a 'resolution-mode' assertion, which is an unstable feature. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),
|
|
_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation: diag(2842, ts.DiagnosticCategory.Error, "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842", "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?"),
|
|
We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here: diag(2843, ts.DiagnosticCategory.Error, "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843", "We can only write a type for '{0}' by adding a type for the entire parameter here."),
|
|
Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2844, ts.DiagnosticCategory.Error, "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844", "Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),
|
|
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_class_has_or_is_using_private_name_0: diag(4021, ts.DiagnosticCategory.Error, "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021", "'extends' clause of exported class has or is using private name '{0}'."),
|
|
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}'."),
|
|
Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2: diag(4084, ts.DiagnosticCategory.Error, "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084", "Exported type alias '{0}' has or is using private name '{1}' from module {2}."),
|
|
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}'."),
|
|
Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1: diag(4103, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103", "Type parameter '{0}' of exported mapped object type is using private name '{1}'."),
|
|
The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1: diag(4104, ts.DiagnosticCategory.Error, "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104", "The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'."),
|
|
Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter: diag(4105, ts.DiagnosticCategory.Error, "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105", "Private or protected member '{0}' cannot be accessed on a type parameter."),
|
|
Parameter_0_of_accessor_has_or_is_using_private_name_1: diag(4106, ts.DiagnosticCategory.Error, "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106", "Parameter '{0}' of accessor has or is using private name '{1}'."),
|
|
Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2: diag(4107, ts.DiagnosticCategory.Error, "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107", "Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'."),
|
|
Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4108, ts.DiagnosticCategory.Error, "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108", "Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named."),
|
|
Type_arguments_for_0_circularly_reference_themselves: diag(4109, ts.DiagnosticCategory.Error, "Type_arguments_for_0_circularly_reference_themselves_4109", "Type arguments for '{0}' circularly reference themselves."),
|
|
Tuple_type_arguments_circularly_reference_themselves: diag(4110, ts.DiagnosticCategory.Error, "Tuple_type_arguments_circularly_reference_themselves_4110", "Tuple type arguments circularly reference themselves."),
|
|
Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0: diag(4111, ts.DiagnosticCategory.Error, "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111", "Property '{0}' comes from an index signature, so it must be accessed with ['{0}']."),
|
|
This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class: diag(4112, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112", "This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class."),
|
|
This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0: diag(4113, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'."),
|
|
This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
|
|
This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
|
|
This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
|
|
This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
|
|
The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
|
|
This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0: diag(4119, ts.DiagnosticCategory.Error, "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119", "This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."),
|
|
This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0: diag(4120, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120", "This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."),
|
|
This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class: diag(4121, ts.DiagnosticCategory.Error, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121", "This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class."),
|
|
This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0: diag(4122, ts.DiagnosticCategory.Error, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122", "This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'."),
|
|
This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4123, ts.DiagnosticCategory.Error, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123", "This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
|
|
Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(4124, ts.DiagnosticCategory.Error, "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124", "Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),
|
|
resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(4125, ts.DiagnosticCategory.Error, "resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125", "'resolution-mode' assertions are unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),
|
|
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}."),
|
|
Unknown_compiler_option_0_Did_you_mean_1: diag(5025, ts.DiagnosticCategory.Error, "Unknown_compiler_option_0_Did_you_mean_1_5025", "Unknown compiler option '{0}'. Did you mean '{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_cannot_be_specified_when_option_target_is_ES3: diag(5048, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_when_option_target_is_ES3_5048", "Option '{0}' cannot be specified when option 'target' is 'ES3'."),
|
|
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."),
|
|
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_can_have_at_most_one_Asterisk_character: diag(5062, ts.DiagnosticCategory.Error, "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062", "Substitution '{0}' in pattern '{1}' 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."),
|
|
Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext: diag(5071, ts.DiagnosticCategory.Error, "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071", "Option '--resolveJsonModule' can only be specified when module code generation is 'commonjs', 'amd', 'es2015' or 'esNext'."),
|
|
Unknown_build_option_0: diag(5072, ts.DiagnosticCategory.Error, "Unknown_build_option_0_5072", "Unknown build option '{0}'."),
|
|
Build_option_0_requires_a_value_of_type_1: diag(5073, ts.DiagnosticCategory.Error, "Build_option_0_requires_a_value_of_type_1_5073", "Build option '{0}' requires a value of type {1}."),
|
|
Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified: diag(5074, ts.DiagnosticCategory.Error, "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074", "Option '--incremental' can only be specified using tsconfig, emitting to single file or when option '--tsBuildInfoFile' is specified."),
|
|
_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2: diag(5075, ts.DiagnosticCategory.Error, "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075", "'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'."),
|
|
_0_and_1_operations_cannot_be_mixed_without_parentheses: diag(5076, ts.DiagnosticCategory.Error, "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076", "'{0}' and '{1}' operations cannot be mixed without parentheses."),
|
|
Unknown_build_option_0_Did_you_mean_1: diag(5077, ts.DiagnosticCategory.Error, "Unknown_build_option_0_Did_you_mean_1_5077", "Unknown build option '{0}'. Did you mean '{1}'?"),
|
|
Unknown_watch_option_0: diag(5078, ts.DiagnosticCategory.Error, "Unknown_watch_option_0_5078", "Unknown watch option '{0}'."),
|
|
Unknown_watch_option_0_Did_you_mean_1: diag(5079, ts.DiagnosticCategory.Error, "Unknown_watch_option_0_Did_you_mean_1_5079", "Unknown watch option '{0}'. Did you mean '{1}'?"),
|
|
Watch_option_0_requires_a_value_of_type_1: diag(5080, ts.DiagnosticCategory.Error, "Watch_option_0_requires_a_value_of_type_1_5080", "Watch option '{0}' requires a value of type {1}."),
|
|
Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0: diag(5081, ts.DiagnosticCategory.Error, "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081", "Cannot find a tsconfig.json file at the current directory: {0}."),
|
|
_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1: diag(5082, ts.DiagnosticCategory.Error, "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082", "'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'."),
|
|
Cannot_read_file_0: diag(5083, ts.DiagnosticCategory.Error, "Cannot_read_file_0_5083", "Cannot read file '{0}'."),
|
|
Tuple_members_must_all_have_names_or_all_not_have_names: diag(5084, ts.DiagnosticCategory.Error, "Tuple_members_must_all_have_names_or_all_not_have_names_5084", "Tuple members must all have names or all not have names."),
|
|
A_tuple_member_cannot_be_both_optional_and_rest: diag(5085, ts.DiagnosticCategory.Error, "A_tuple_member_cannot_be_both_optional_and_rest_5085", "A tuple member cannot be both optional and rest."),
|
|
A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type: diag(5086, ts.DiagnosticCategory.Error, "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086", "A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type."),
|
|
A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type: diag(5087, ts.DiagnosticCategory.Error, "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087", "A labeled tuple element is declared as rest with a '...' before the name, rather than before the type."),
|
|
The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary: diag(5088, ts.DiagnosticCategory.Error, "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", "The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary."),
|
|
Option_0_cannot_be_specified_when_option_jsx_is_1: diag(5089, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_when_option_jsx_is_1_5089", "Option '{0}' cannot be specified when option 'jsx' is '{1}'."),
|
|
Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash: diag(5090, ts.DiagnosticCategory.Error, "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090", "Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?"),
|
|
Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled: diag(5091, ts.DiagnosticCategory.Error, "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091", "Option 'preserveConstEnums' cannot be disabled when 'isolatedModules' is enabled."),
|
|
The_root_value_of_a_0_file_must_be_an_object: diag(5092, ts.DiagnosticCategory.Error, "The_root_value_of_a_0_file_must_be_an_object_5092", "The root value of a '{0}' file must be an object."),
|
|
Compiler_option_0_may_only_be_used_with_build: diag(5093, ts.DiagnosticCategory.Error, "Compiler_option_0_may_only_be_used_with_build_5093", "Compiler option '--{0}' may only be used with '--build'."),
|
|
Compiler_option_0_may_not_be_used_with_build: diag(5094, ts.DiagnosticCategory.Error, "Compiler_option_0_may_not_be_used_with_build_5094", "Compiler option '--{0}' may not be used with '--build'."),
|
|
Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later: diag(5095, ts.DiagnosticCategory.Error, "Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095", "Option 'preserveValueImports' can only be used when 'module' is set to 'es2015' or later."),
|
|
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_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: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
|
|
Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
|
|
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"),
|
|
Errors_Files: diag(6041, ts.DiagnosticCategory.Message, "Errors_Files_6041", "Errors Files"),
|
|
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 <language> or <language>-<territory>. For example '{0}' or '{1}'."),
|
|
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_an_unsupported_extension_The_only_supported_extensions_are_1: diag(6054, ts.DiagnosticCategory.Error, "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054", "File '{0}' has an 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_or_set_to_null_on_command_line: diag(6064, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line."),
|
|
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."),
|
|
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: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
|
|
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."),
|
|
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_1_got_2: diag(6105, ts.DiagnosticCategory.Message, "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105", "Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'."),
|
|
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}'. ========"),
|
|
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."),
|
|
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"),
|
|
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."),
|
|
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_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
|
|
Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
|
|
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."),
|
|
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),
|
|
Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0: diag(6200, ts.DiagnosticCategory.Error, "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200", "Definitions of the following identifiers conflict with those in another file: {0}"),
|
|
Conflicts_are_in_this_file: diag(6201, ts.DiagnosticCategory.Message, "Conflicts_are_in_this_file_6201", "Conflicts are in this file."),
|
|
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}"),
|
|
_0_was_also_declared_here: diag(6203, ts.DiagnosticCategory.Message, "_0_was_also_declared_here_6203", "'{0}' was also declared here."),
|
|
and_here: diag(6204, ts.DiagnosticCategory.Message, "and_here_6204", "and here."),
|
|
All_type_parameters_are_unused: diag(6205, ts.DiagnosticCategory.Error, "All_type_parameters_are_unused_6205", "All type parameters are unused."),
|
|
package_json_has_a_typesVersions_field_with_version_specific_path_mappings: diag(6206, ts.DiagnosticCategory.Message, "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206", "'package.json' has a 'typesVersions' field with version-specific path mappings."),
|
|
package_json_does_not_have_a_typesVersions_entry_that_matches_version_0: diag(6207, ts.DiagnosticCategory.Message, "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207", "'package.json' does not have a 'typesVersions' entry that matches version '{0}'."),
|
|
package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2: diag(6208, ts.DiagnosticCategory.Message, "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208", "'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'."),
|
|
package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range: diag(6209, ts.DiagnosticCategory.Message, "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209", "'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range."),
|
|
An_argument_for_0_was_not_provided: diag(6210, ts.DiagnosticCategory.Message, "An_argument_for_0_was_not_provided_6210", "An argument for '{0}' was not provided."),
|
|
An_argument_matching_this_binding_pattern_was_not_provided: diag(6211, ts.DiagnosticCategory.Message, "An_argument_matching_this_binding_pattern_was_not_provided_6211", "An argument matching this binding pattern was not provided."),
|
|
Did_you_mean_to_call_this_expression: diag(6212, ts.DiagnosticCategory.Message, "Did_you_mean_to_call_this_expression_6212", "Did you mean to call this expression?"),
|
|
Did_you_mean_to_use_new_with_this_expression: diag(6213, ts.DiagnosticCategory.Message, "Did_you_mean_to_use_new_with_this_expression_6213", "Did you mean to use 'new' with this expression?"),
|
|
Enable_strict_bind_call_and_apply_methods_on_functions: diag(6214, ts.DiagnosticCategory.Message, "Enable_strict_bind_call_and_apply_methods_on_functions_6214", "Enable strict 'bind', 'call', and 'apply' methods on functions."),
|
|
Using_compiler_options_of_project_reference_redirect_0: diag(6215, ts.DiagnosticCategory.Message, "Using_compiler_options_of_project_reference_redirect_0_6215", "Using compiler options of project reference redirect '{0}'."),
|
|
Found_1_error: diag(6216, ts.DiagnosticCategory.Message, "Found_1_error_6216", "Found 1 error."),
|
|
Found_0_errors: diag(6217, ts.DiagnosticCategory.Message, "Found_0_errors_6217", "Found {0} errors."),
|
|
Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2: diag(6218, ts.DiagnosticCategory.Message, "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218", "======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========"),
|
|
Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3: diag(6219, ts.DiagnosticCategory.Message, "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219", "======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========"),
|
|
package_json_had_a_falsy_0_field: diag(6220, ts.DiagnosticCategory.Message, "package_json_had_a_falsy_0_field_6220", "'package.json' had a falsy '{0}' field."),
|
|
Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects: diag(6221, ts.DiagnosticCategory.Message, "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221", "Disable use of source files instead of declaration files from referenced projects."),
|
|
Emit_class_fields_with_Define_instead_of_Set: diag(6222, ts.DiagnosticCategory.Message, "Emit_class_fields_with_Define_instead_of_Set_6222", "Emit class fields with Define instead of Set."),
|
|
Generates_a_CPU_profile: diag(6223, ts.DiagnosticCategory.Message, "Generates_a_CPU_profile_6223", "Generates a CPU profile."),
|
|
Disable_solution_searching_for_this_project: diag(6224, ts.DiagnosticCategory.Message, "Disable_solution_searching_for_this_project_6224", "Disable solution searching for this project."),
|
|
Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
|
|
Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
|
|
Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
|
|
Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
|
|
Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
|
|
Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
|
|
Declaration_augments_declaration_in_another_file_This_cannot_be_serialized: diag(6232, ts.DiagnosticCategory.Error, "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232", "Declaration augments declaration in another file. This cannot be serialized."),
|
|
This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file: diag(6233, ts.DiagnosticCategory.Error, "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233", "This is the declaration being augmented. Consider moving the augmenting declaration into the same file."),
|
|
This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without: diag(6234, ts.DiagnosticCategory.Error, "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234", "This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?"),
|
|
Disable_loading_referenced_projects: diag(6235, ts.DiagnosticCategory.Message, "Disable_loading_referenced_projects_6235", "Disable loading referenced projects."),
|
|
Arguments_for_the_rest_parameter_0_were_not_provided: diag(6236, ts.DiagnosticCategory.Error, "Arguments_for_the_rest_parameter_0_were_not_provided_6236", "Arguments for the rest parameter '{0}' were not provided."),
|
|
Generates_an_event_trace_and_a_list_of_types: diag(6237, ts.DiagnosticCategory.Message, "Generates_an_event_trace_and_a_list_of_types_6237", "Generates an event trace and a list of types."),
|
|
Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react: diag(6238, ts.DiagnosticCategory.Error, "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238", "Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react"),
|
|
File_0_exists_according_to_earlier_cached_lookups: diag(6239, ts.DiagnosticCategory.Message, "File_0_exists_according_to_earlier_cached_lookups_6239", "File '{0}' exists according to earlier cached lookups."),
|
|
File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
|
|
Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
|
|
Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
|
|
Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
|
|
Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
|
|
File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
|
|
Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
|
|
JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
|
|
Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
|
|
Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
|
|
Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
|
|
Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
|
|
Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
|
|
Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
|
|
Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
|
|
Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
|
|
Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
|
|
Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
|
|
_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file: diag(6258, ts.DiagnosticCategory.Error, "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258", "'{0}' should be set inside the 'compilerOptions' object of the config json file"),
|
|
Found_1_error_in_1: diag(6259, ts.DiagnosticCategory.Message, "Found_1_error_in_1_6259", "Found 1 error in {1}"),
|
|
Found_0_errors_in_the_same_file_starting_at_Colon_1: diag(6260, ts.DiagnosticCategory.Message, "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260", "Found {0} errors in the same file, starting at: {1}"),
|
|
Found_0_errors_in_1_files: diag(6261, ts.DiagnosticCategory.Message, "Found_0_errors_in_1_files_6261", "Found {0} errors in {1} files."),
|
|
Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve: diag(6270, ts.DiagnosticCategory.Message, "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270", "Directory '{0}' has no containing package.json scope. Imports will not resolve."),
|
|
Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1: diag(6271, ts.DiagnosticCategory.Message, "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271", "Import specifier '{0}' does not exist in package.json scope at path '{1}'."),
|
|
Invalid_import_specifier_0_has_no_possible_resolutions: diag(6272, ts.DiagnosticCategory.Message, "Invalid_import_specifier_0_has_no_possible_resolutions_6272", "Invalid import specifier '{0}' has no possible resolutions."),
|
|
package_json_scope_0_has_no_imports_defined: diag(6273, ts.DiagnosticCategory.Message, "package_json_scope_0_has_no_imports_defined_6273", "package.json scope '{0}' has no imports defined."),
|
|
package_json_scope_0_explicitly_maps_specifier_1_to_null: diag(6274, ts.DiagnosticCategory.Message, "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274", "package.json scope '{0}' explicitly maps specifier '{1}' to null."),
|
|
package_json_scope_0_has_invalid_type_for_target_of_specifier_1: diag(6275, ts.DiagnosticCategory.Message, "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275", "package.json scope '{0}' has invalid type for target of specifier '{1}'"),
|
|
Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1: diag(6276, ts.DiagnosticCategory.Message, "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276", "Export specifier '{0}' does not exist in package.json scope at path '{1}'."),
|
|
Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
|
|
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_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern: diag(6307, ts.DiagnosticCategory.Error, "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307", "File '{0}' is not listed within the file list of project '{1}'. 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"),
|
|
Referenced_project_0_may_not_disable_emit: diag(6310, ts.DiagnosticCategory.Error, "Referenced_project_0_may_not_disable_emit_6310", "Referenced project '{0}' may not disable emit."),
|
|
Project_0_is_out_of_date_because_output_1_is_older_than_input_2: diag(6350, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350", "Project '{0}' is out of date because output '{1}' is older than input '{2}'"),
|
|
Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2: diag(6351, ts.DiagnosticCategory.Message, "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351", "Project '{0}' is up to date because newest input '{1}' is older than 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}'..."),
|
|
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."),
|
|
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')"),
|
|
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."),
|
|
Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
|
|
Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed: diag(6372, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372", "Project '{0}' is out of date because output of its dependency '{1}' has changed"),
|
|
Updating_output_of_project_0: diag(6373, ts.DiagnosticCategory.Message, "Updating_output_of_project_0_6373", "Updating output of project '{0}'..."),
|
|
A_non_dry_build_would_update_timestamps_for_output_of_project_0: diag(6374, ts.DiagnosticCategory.Message, "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374", "A non-dry build would update timestamps for output of project '{0}'"),
|
|
A_non_dry_build_would_update_output_of_project_0: diag(6375, ts.DiagnosticCategory.Message, "A_non_dry_build_would_update_output_of_project_0_6375", "A non-dry build would update output of project '{0}'"),
|
|
Cannot_update_output_of_project_0_because_there_was_error_reading_file_1: diag(6376, ts.DiagnosticCategory.Message, "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376", "Cannot update output of project '{0}' because there was error reading file '{1}'"),
|
|
Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1: diag(6377, ts.DiagnosticCategory.Error, "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377", "Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'"),
|
|
Composite_projects_may_not_disable_incremental_compilation: diag(6379, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_incremental_compilation_6379", "Composite projects may not disable incremental compilation."),
|
|
Specify_file_to_store_incremental_compilation_information: diag(6380, ts.DiagnosticCategory.Message, "Specify_file_to_store_incremental_compilation_information_6380", "Specify file to store incremental compilation information"),
|
|
Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2: diag(6381, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381", "Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'"),
|
|
Skipping_build_of_project_0_because_its_dependency_1_was_not_built: diag(6382, ts.DiagnosticCategory.Message, "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382", "Skipping build of project '{0}' because its dependency '{1}' was not built"),
|
|
Project_0_can_t_be_built_because_its_dependency_1_was_not_built: diag(6383, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383", "Project '{0}' can't be built because its dependency '{1}' was not built"),
|
|
Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6384, ts.DiagnosticCategory.Message, "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384", "Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it."),
|
|
_0_is_deprecated: diag(6385, ts.DiagnosticCategory.Suggestion, "_0_is_deprecated_6385", "'{0}' is deprecated.", undefined, undefined, true),
|
|
Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
|
|
The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", undefined, undefined, true),
|
|
Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
|
|
Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
|
|
Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
|
|
Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
|
|
Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
|
|
Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
|
|
Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted: diag(6399, ts.DiagnosticCategory.Message, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399", "Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted"),
|
|
Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files: diag(6400, ts.DiagnosticCategory.Message, "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400", "Project '{0}' is up to date but needs to update timestamps of output files that are older than input files"),
|
|
The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
|
|
The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
|
|
The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
|
|
Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
|
|
File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
|
|
Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
|
|
Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
|
|
Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files."),
|
|
Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
|
|
Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
|
|
Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
|
|
Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
|
|
Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
|
|
Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it."),
|
|
Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
|
|
No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
|
|
Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
|
|
Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
|
|
Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
|
|
Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
|
|
Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
|
|
Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
|
|
Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
|
|
Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
|
|
Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
|
|
Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
|
|
Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects."),
|
|
Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
|
|
Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
|
|
Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
|
|
Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
|
|
Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
|
|
Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility."),
|
|
Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
|
|
Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
|
|
Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
|
|
Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
|
|
Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
|
|
Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
|
|
Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
|
|
Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
|
|
Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
|
|
Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date."),
|
|
Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
|
|
Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
|
|
Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
|
|
Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
|
|
Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
|
|
Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
|
|
Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
|
|
Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
|
|
Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
|
|
Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'."),
|
|
Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
|
|
Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'."),
|
|
Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
|
|
Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
|
|
Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
|
|
Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
|
|
Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
|
|
Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
|
|
Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'."),
|
|
Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
|
|
Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
|
|
Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
|
|
Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
|
|
Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like '__extends' in compiled output."),
|
|
Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
|
|
Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
|
|
Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
|
|
Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied 'any' type."),
|
|
Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
|
|
Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
|
|
Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when 'this' is given the type 'any'."),
|
|
Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
|
|
Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
|
|
Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type."),
|
|
Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project."),
|
|
Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
|
|
Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add 'undefined' to a type when accessed using an index."),
|
|
Enable_error_reporting_when_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_local_variables_aren_t_read_6675", "Enable error reporting when local variables aren't read."),
|
|
Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read."),
|
|
Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use 'outFile' instead."),
|
|
Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
|
|
Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output."),
|
|
Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
|
|
Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
|
|
Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing 'const enum' declarations in generated code."),
|
|
Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
|
|
Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode."),
|
|
Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read."),
|
|
Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit."),
|
|
Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
|
|
Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
|
|
Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files."),
|
|
Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
|
|
Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
|
|
Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
|
|
Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
|
|
Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
|
|
Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
|
|
Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for 'bind', 'call', and 'apply' methods match the original function."),
|
|
When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
|
|
When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account 'null' and 'undefined'."),
|
|
Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
|
|
Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have '@internal' in their JSDoc comments."),
|
|
Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
|
|
Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress 'noImplicitAny' errors when indexing objects that lack index signatures."),
|
|
Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
|
|
Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
|
|
Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the 'moduleResolution' process."),
|
|
Specify_the_path_to_tsbuildinfo_incremental_compilation_file: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707", "Specify the path to .tsbuildinfo incremental compilation file."),
|
|
Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
|
|
Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like './node_modules/@types'."),
|
|
Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
|
|
Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
|
|
Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging."),
|
|
Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
|
|
Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
|
|
Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
|
|
Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types."),
|
|
Default_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Default_catch_clause_variables_as_unknown_instead_of_any_6803", "Default catch clause variables as 'unknown' instead of 'any'."),
|
|
one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
|
|
one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
|
|
type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
|
|
default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
|
|
module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
|
|
false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
|
|
false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
|
|
node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
|
|
if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
|
|
true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
|
|
module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
|
|
Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
|
|
Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
|
|
You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
|
|
Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
|
|
Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
|
|
COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
|
|
ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
|
|
WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
|
|
BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
|
|
COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
|
|
COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
|
|
tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
|
|
Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
|
|
Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
|
|
Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
|
|
Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
|
|
Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
|
|
An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
|
|
Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
|
|
true_for_ES2022_and_above_including_ESNext: diag(6930, ts.DiagnosticCategory.Message, "true_for_ES2022_and_above_including_ESNext_6930", "`true` for ES2022 and above, including ESNext."),
|
|
List_of_file_name_suffixes_to_search_when_resolving_a_module: diag(6931, ts.DiagnosticCategory.Error, "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931", "List of file name suffixes to search when resolving a module."),
|
|
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."),
|
|
Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: diag(7014, ts.DiagnosticCategory.Error, "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014", "Function type, which lacks return-type annotation, implicitly has an '{0}' 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_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation: diag(7025, ts.DiagnosticCategory.Error, "Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_retu_7025", "Generator implicitly has yield type '{0}' because it does not yield any values. Consider supplying a return type annotation."),
|
|
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_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0: diag(7035, ts.DiagnosticCategory.Error, "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035", "Try `npm i --save-dev @types/{1}` 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.Message, "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."),
|
|
If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1: diag(7040, ts.DiagnosticCategory.Error, "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040", "If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'"),
|
|
The_containing_arrow_function_captures_the_global_value_of_this: diag(7041, ts.DiagnosticCategory.Error, "The_containing_arrow_function_captures_the_global_value_of_this_7041", "The containing arrow function captures the global value of 'this'."),
|
|
Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used: diag(7042, ts.DiagnosticCategory.Error, "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042", "Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used."),
|
|
Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7043, ts.DiagnosticCategory.Suggestion, "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043", "Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),
|
|
Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7044, ts.DiagnosticCategory.Suggestion, "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044", "Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),
|
|
Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7045, ts.DiagnosticCategory.Suggestion, "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045", "Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),
|
|
Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage: diag(7046, ts.DiagnosticCategory.Suggestion, "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046", "Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage."),
|
|
Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage: diag(7047, ts.DiagnosticCategory.Suggestion, "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047", "Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage."),
|
|
Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage: diag(7048, ts.DiagnosticCategory.Suggestion, "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048", "Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage."),
|
|
Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage: diag(7049, ts.DiagnosticCategory.Suggestion, "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049", "Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage."),
|
|
_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage: diag(7050, ts.DiagnosticCategory.Suggestion, "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050", "'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage."),
|
|
Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1: diag(7051, ts.DiagnosticCategory.Error, "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051", "Parameter has a name but no type. Did you mean '{0}: {1}'?"),
|
|
Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1: diag(7052, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052", "Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?"),
|
|
Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1: diag(7053, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053", "Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'."),
|
|
No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1: diag(7054, ts.DiagnosticCategory.Error, "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054", "No index signature with a parameter of type '{0}' was found on type '{1}'."),
|
|
_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type: diag(7055, ts.DiagnosticCategory.Error, "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055", "'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type."),
|
|
The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed: diag(7056, ts.DiagnosticCategory.Error, "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056", "The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed."),
|
|
yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation: diag(7057, ts.DiagnosticCategory.Error, "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057", "'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation."),
|
|
If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1: diag(7058, ts.DiagnosticCategory.Error, "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058", "If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`"),
|
|
This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead: diag(7059, ts.DiagnosticCategory.Error, "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059", "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead."),
|
|
This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint: diag(7060, ts.DiagnosticCategory.Error, "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060", "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint."),
|
|
A_mapped_type_may_not_declare_properties_or_methods: diag(7061, ts.DiagnosticCategory.Error, "A_mapped_type_may_not_declare_properties_or_methods_7061", "A mapped type may not declare properties or methods."),
|
|
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_TypeScript_files: diag(8002, ts.DiagnosticCategory.Error, "import_can_only_be_used_in_TypeScript_files_8002", "'import ... =' can only be used in TypeScript files."),
|
|
export_can_only_be_used_in_TypeScript_files: diag(8003, ts.DiagnosticCategory.Error, "export_can_only_be_used_in_TypeScript_files_8003", "'export =' can only be used in TypeScript files."),
|
|
Type_parameter_declarations_can_only_be_used_in_TypeScript_files: diag(8004, ts.DiagnosticCategory.Error, "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004", "Type parameter declarations can only be used in TypeScript files."),
|
|
implements_clauses_can_only_be_used_in_TypeScript_files: diag(8005, ts.DiagnosticCategory.Error, "implements_clauses_can_only_be_used_in_TypeScript_files_8005", "'implements' clauses can only be used in TypeScript files."),
|
|
_0_declarations_can_only_be_used_in_TypeScript_files: diag(8006, ts.DiagnosticCategory.Error, "_0_declarations_can_only_be_used_in_TypeScript_files_8006", "'{0}' declarations can only be used in TypeScript files."),
|
|
Type_aliases_can_only_be_used_in_TypeScript_files: diag(8008, ts.DiagnosticCategory.Error, "Type_aliases_can_only_be_used_in_TypeScript_files_8008", "Type aliases can only be used in TypeScript files."),
|
|
The_0_modifier_can_only_be_used_in_TypeScript_files: diag(8009, ts.DiagnosticCategory.Error, "The_0_modifier_can_only_be_used_in_TypeScript_files_8009", "The '{0}' modifier can only be used in TypeScript files."),
|
|
Type_annotations_can_only_be_used_in_TypeScript_files: diag(8010, ts.DiagnosticCategory.Error, "Type_annotations_can_only_be_used_in_TypeScript_files_8010", "Type annotations can only be used in TypeScript files."),
|
|
Type_arguments_can_only_be_used_in_TypeScript_files: diag(8011, ts.DiagnosticCategory.Error, "Type_arguments_can_only_be_used_in_TypeScript_files_8011", "Type arguments can only be used in TypeScript files."),
|
|
Parameter_modifiers_can_only_be_used_in_TypeScript_files: diag(8012, ts.DiagnosticCategory.Error, "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012", "Parameter modifiers can only be used in TypeScript files."),
|
|
Non_null_assertions_can_only_be_used_in_TypeScript_files: diag(8013, ts.DiagnosticCategory.Error, "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013", "Non-null assertions can only be used in TypeScript files."),
|
|
Type_assertion_expressions_can_only_be_used_in_TypeScript_files: diag(8016, ts.DiagnosticCategory.Error, "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016", "Type assertion expressions can only be used in TypeScript files."),
|
|
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."),
|
|
The_type_of_a_function_declaration_must_match_the_function_s_signature: diag(8030, ts.DiagnosticCategory.Error, "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030", "The type of a function declaration must match the function's signature."),
|
|
You_cannot_rename_a_module_via_a_global_import: diag(8031, ts.DiagnosticCategory.Error, "You_cannot_rename_a_module_via_a_global_import_8031", "You cannot rename a module via a global import."),
|
|
Qualified_name_0_is_not_allowed_without_a_leading_param_object_1: diag(8032, ts.DiagnosticCategory.Error, "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032", "Qualified name '{0}' is not allowed without a leading '@param {object} {1}'."),
|
|
A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags: diag(8033, ts.DiagnosticCategory.Error, "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033", "A JSDoc '@typedef' comment may not contain multiple '@type' tags."),
|
|
The_tag_was_first_specified_here: diag(8034, ts.DiagnosticCategory.Error, "The_tag_was_first_specified_here_8034", "The tag was first specified here."),
|
|
You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder: diag(8035, ts.DiagnosticCategory.Error, "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035", "You cannot rename elements that are defined in a 'node_modules' folder."),
|
|
You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder: diag(8036, ts.DiagnosticCategory.Error, "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036", "You cannot rename elements that are defined in another 'node_modules' folder."),
|
|
Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit: diag(9005, ts.DiagnosticCategory.Error, "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005", "Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit."),
|
|
Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit: diag(9006, ts.DiagnosticCategory.Error, "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006", "Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit."),
|
|
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}'."),
|
|
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."),
|
|
The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option: diag(17016, ts.DiagnosticCategory.Error, "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016", "The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option."),
|
|
An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments: diag(17017, ts.DiagnosticCategory.Error, "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017", "An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments."),
|
|
Unknown_type_acquisition_option_0_Did_you_mean_1: diag(17018, ts.DiagnosticCategory.Error, "Unknown_type_acquisition_option_0_Did_you_mean_1_17018", "Unknown type acquisition option '{0}'. Did you mean '{1}'?"),
|
|
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}"),
|
|
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_ES_module: diag(80001, ts.DiagnosticCategory.Suggestion, "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001", "File is a CommonJS module; it may be converted to an ES 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."),
|
|
This_may_be_converted_to_an_async_function: diag(80006, ts.DiagnosticCategory.Suggestion, "This_may_be_converted_to_an_async_function_80006", "This may be converted to an async function."),
|
|
await_has_no_effect_on_the_type_of_this_expression: diag(80007, ts.DiagnosticCategory.Suggestion, "await_has_no_effect_on_the_type_of_this_expression_80007", "'await' has no effect on the type of this expression."),
|
|
Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers: diag(80008, ts.DiagnosticCategory.Suggestion, "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008", "Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers."),
|
|
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_unused_declaration_for_Colon_0: diag(90004, ts.DiagnosticCategory.Message, "Remove_unused_declaration_for_Colon_0_90004", "Remove unused 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_variable_statement: diag(90010, ts.DiagnosticCategory.Message, "Remove_variable_statement_90010", "Remove variable statement"),
|
|
Remove_template_tag: diag(90011, ts.DiagnosticCategory.Message, "Remove_template_tag_90011", "Remove template tag"),
|
|
Remove_type_parameters: diag(90012, ts.DiagnosticCategory.Message, "Remove_type_parameters_90012", "Remove type parameters"),
|
|
Import_0_from_1: diag(90013, ts.DiagnosticCategory.Message, "Import_0_from_1_90013", "Import '{0}' from \"{1}\""),
|
|
Change_0_to_1: diag(90014, ts.DiagnosticCategory.Message, "Change_0_to_1_90014", "Change '{0}' to '{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"),
|
|
Replace_infer_0_with_unknown: diag(90030, ts.DiagnosticCategory.Message, "Replace_infer_0_with_unknown_90030", "Replace 'infer {0}' with 'unknown'"),
|
|
Replace_all_unused_infer_with_unknown: diag(90031, ts.DiagnosticCategory.Message, "Replace_all_unused_infer_with_unknown_90031", "Replace all unused 'infer' with 'unknown'"),
|
|
Add_parameter_name: diag(90034, ts.DiagnosticCategory.Message, "Add_parameter_name_90034", "Add parameter name"),
|
|
Declare_private_property_0: diag(90035, ts.DiagnosticCategory.Message, "Declare_private_property_0_90035", "Declare private property '{0}'"),
|
|
Replace_0_with_Promise_1: diag(90036, ts.DiagnosticCategory.Message, "Replace_0_with_Promise_1_90036", "Replace '{0}' with 'Promise<{1}>'"),
|
|
Fix_all_incorrect_return_type_of_an_async_functions: diag(90037, ts.DiagnosticCategory.Message, "Fix_all_incorrect_return_type_of_an_async_functions_90037", "Fix all incorrect return type of an async functions"),
|
|
Declare_private_method_0: diag(90038, ts.DiagnosticCategory.Message, "Declare_private_method_0_90038", "Declare private method '{0}'"),
|
|
Remove_unused_destructuring_declaration: diag(90039, ts.DiagnosticCategory.Message, "Remove_unused_destructuring_declaration_90039", "Remove unused destructuring declaration"),
|
|
Remove_unused_declarations_for_Colon_0: diag(90041, ts.DiagnosticCategory.Message, "Remove_unused_declarations_for_Colon_0_90041", "Remove unused declarations for: '{0}'"),
|
|
Declare_a_private_field_named_0: diag(90053, ts.DiagnosticCategory.Message, "Declare_a_private_field_named_0_90053", "Declare a private field named '{0}'."),
|
|
Includes_imports_of_types_referenced_by_0: diag(90054, ts.DiagnosticCategory.Message, "Includes_imports_of_types_referenced_by_0_90054", "Includes imports of types referenced by '{0}'"),
|
|
Remove_type_from_import_declaration_from_0: diag(90055, ts.DiagnosticCategory.Message, "Remove_type_from_import_declaration_from_0_90055", "Remove 'type' from import declaration from \"{0}\""),
|
|
Remove_type_from_import_of_0_from_1: diag(90056, ts.DiagnosticCategory.Message, "Remove_type_from_import_of_0_from_1_90056", "Remove 'type' from import of '{0}' from \"{1}\""),
|
|
Add_import_from_0: diag(90057, ts.DiagnosticCategory.Message, "Add_import_from_0_90057", "Add import from \"{0}\""),
|
|
Update_import_from_0: diag(90058, ts.DiagnosticCategory.Message, "Update_import_from_0_90058", "Update import from \"{0}\""),
|
|
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_0_to_1_in_0: diag(95003, ts.DiagnosticCategory.Message, "Convert_0_to_1_in_0_95003", "Convert '{0}' to '{1} in {0}'"),
|
|
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"),
|
|
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_ES_module: diag(95017, ts.DiagnosticCategory.Message, "Convert_to_ES_module_95017", "Convert to ES 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}'"),
|
|
Convert_all_type_literals_to_mapped_type: diag(95021, ts.DiagnosticCategory.Message, "Convert_all_type_literals_to_mapped_type_95021", "Convert all type literals to mapped type"),
|
|
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"),
|
|
Convert_default_export_to_named_export: diag(95061, ts.DiagnosticCategory.Message, "Convert_default_export_to_named_export_95061", "Convert default export to named export"),
|
|
Convert_named_export_to_default_export: diag(95062, ts.DiagnosticCategory.Message, "Convert_named_export_to_default_export_95062", "Convert named export to default export"),
|
|
Add_missing_enum_member_0: diag(95063, ts.DiagnosticCategory.Message, "Add_missing_enum_member_0_95063", "Add missing enum member '{0}'"),
|
|
Add_all_missing_imports: diag(95064, ts.DiagnosticCategory.Message, "Add_all_missing_imports_95064", "Add all missing imports"),
|
|
Convert_to_async_function: diag(95065, ts.DiagnosticCategory.Message, "Convert_to_async_function_95065", "Convert to async function"),
|
|
Convert_all_to_async_functions: diag(95066, ts.DiagnosticCategory.Message, "Convert_all_to_async_functions_95066", "Convert all to async functions"),
|
|
Add_missing_call_parentheses: diag(95067, ts.DiagnosticCategory.Message, "Add_missing_call_parentheses_95067", "Add missing call parentheses"),
|
|
Add_all_missing_call_parentheses: diag(95068, ts.DiagnosticCategory.Message, "Add_all_missing_call_parentheses_95068", "Add all missing call parentheses"),
|
|
Add_unknown_conversion_for_non_overlapping_types: diag(95069, ts.DiagnosticCategory.Message, "Add_unknown_conversion_for_non_overlapping_types_95069", "Add 'unknown' conversion for non-overlapping types"),
|
|
Add_unknown_to_all_conversions_of_non_overlapping_types: diag(95070, ts.DiagnosticCategory.Message, "Add_unknown_to_all_conversions_of_non_overlapping_types_95070", "Add 'unknown' to all conversions of non-overlapping types"),
|
|
Add_missing_new_operator_to_call: diag(95071, ts.DiagnosticCategory.Message, "Add_missing_new_operator_to_call_95071", "Add missing 'new' operator to call"),
|
|
Add_missing_new_operator_to_all_calls: diag(95072, ts.DiagnosticCategory.Message, "Add_missing_new_operator_to_all_calls_95072", "Add missing 'new' operator to all calls"),
|
|
Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
|
|
Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
|
|
Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
|
|
Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
|
|
Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
|
|
Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
|
|
Infer_this_type_of_0_from_usage: diag(95080, ts.DiagnosticCategory.Message, "Infer_this_type_of_0_from_usage_95080", "Infer 'this' type of '{0}' from usage"),
|
|
Add_const_to_unresolved_variable: diag(95081, ts.DiagnosticCategory.Message, "Add_const_to_unresolved_variable_95081", "Add 'const' to unresolved variable"),
|
|
Add_const_to_all_unresolved_variables: diag(95082, ts.DiagnosticCategory.Message, "Add_const_to_all_unresolved_variables_95082", "Add 'const' to all unresolved variables"),
|
|
Add_await: diag(95083, ts.DiagnosticCategory.Message, "Add_await_95083", "Add 'await'"),
|
|
Add_await_to_initializer_for_0: diag(95084, ts.DiagnosticCategory.Message, "Add_await_to_initializer_for_0_95084", "Add 'await' to initializer for '{0}'"),
|
|
Fix_all_expressions_possibly_missing_await: diag(95085, ts.DiagnosticCategory.Message, "Fix_all_expressions_possibly_missing_await_95085", "Fix all expressions possibly missing 'await'"),
|
|
Remove_unnecessary_await: diag(95086, ts.DiagnosticCategory.Message, "Remove_unnecessary_await_95086", "Remove unnecessary 'await'"),
|
|
Remove_all_unnecessary_uses_of_await: diag(95087, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_uses_of_await_95087", "Remove all unnecessary uses of 'await'"),
|
|
Enable_the_jsx_flag_in_your_configuration_file: diag(95088, ts.DiagnosticCategory.Message, "Enable_the_jsx_flag_in_your_configuration_file_95088", "Enable the '--jsx' flag in your configuration file"),
|
|
Add_await_to_initializers: diag(95089, ts.DiagnosticCategory.Message, "Add_await_to_initializers_95089", "Add 'await' to initializers"),
|
|
Extract_to_interface: diag(95090, ts.DiagnosticCategory.Message, "Extract_to_interface_95090", "Extract to interface"),
|
|
Convert_to_a_bigint_numeric_literal: diag(95091, ts.DiagnosticCategory.Message, "Convert_to_a_bigint_numeric_literal_95091", "Convert to a bigint numeric literal"),
|
|
Convert_all_to_bigint_numeric_literals: diag(95092, ts.DiagnosticCategory.Message, "Convert_all_to_bigint_numeric_literals_95092", "Convert all to bigint numeric literals"),
|
|
Convert_const_to_let: diag(95093, ts.DiagnosticCategory.Message, "Convert_const_to_let_95093", "Convert 'const' to 'let'"),
|
|
Prefix_with_declare: diag(95094, ts.DiagnosticCategory.Message, "Prefix_with_declare_95094", "Prefix with 'declare'"),
|
|
Prefix_all_incorrect_property_declarations_with_declare: diag(95095, ts.DiagnosticCategory.Message, "Prefix_all_incorrect_property_declarations_with_declare_95095", "Prefix all incorrect property declarations with 'declare'"),
|
|
Convert_to_template_string: diag(95096, ts.DiagnosticCategory.Message, "Convert_to_template_string_95096", "Convert to template string"),
|
|
Add_export_to_make_this_file_into_a_module: diag(95097, ts.DiagnosticCategory.Message, "Add_export_to_make_this_file_into_a_module_95097", "Add 'export {}' to make this file into a module"),
|
|
Set_the_target_option_in_your_configuration_file_to_0: diag(95098, ts.DiagnosticCategory.Message, "Set_the_target_option_in_your_configuration_file_to_0_95098", "Set the 'target' option in your configuration file to '{0}'"),
|
|
Set_the_module_option_in_your_configuration_file_to_0: diag(95099, ts.DiagnosticCategory.Message, "Set_the_module_option_in_your_configuration_file_to_0_95099", "Set the 'module' option in your configuration file to '{0}'"),
|
|
Convert_invalid_character_to_its_html_entity_code: diag(95100, ts.DiagnosticCategory.Message, "Convert_invalid_character_to_its_html_entity_code_95100", "Convert invalid character to its html entity code"),
|
|
Convert_all_invalid_characters_to_HTML_entity_code: diag(95101, ts.DiagnosticCategory.Message, "Convert_all_invalid_characters_to_HTML_entity_code_95101", "Convert all invalid characters to HTML entity code"),
|
|
Convert_function_expression_0_to_arrow_function: diag(95105, ts.DiagnosticCategory.Message, "Convert_function_expression_0_to_arrow_function_95105", "Convert function expression '{0}' to arrow function"),
|
|
Convert_function_declaration_0_to_arrow_function: diag(95106, ts.DiagnosticCategory.Message, "Convert_function_declaration_0_to_arrow_function_95106", "Convert function declaration '{0}' to arrow function"),
|
|
Fix_all_implicit_this_errors: diag(95107, ts.DiagnosticCategory.Message, "Fix_all_implicit_this_errors_95107", "Fix all implicit-'this' errors"),
|
|
Wrap_invalid_character_in_an_expression_container: diag(95108, ts.DiagnosticCategory.Message, "Wrap_invalid_character_in_an_expression_container_95108", "Wrap invalid character in an expression container"),
|
|
Wrap_all_invalid_characters_in_an_expression_container: diag(95109, ts.DiagnosticCategory.Message, "Wrap_all_invalid_characters_in_an_expression_container_95109", "Wrap all invalid characters in an expression container"),
|
|
Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file: diag(95110, ts.DiagnosticCategory.Message, "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110", "Visit https://aka.ms/tsconfig to read more about this file"),
|
|
Add_a_return_statement: diag(95111, ts.DiagnosticCategory.Message, "Add_a_return_statement_95111", "Add a return statement"),
|
|
Remove_braces_from_arrow_function_body: diag(95112, ts.DiagnosticCategory.Message, "Remove_braces_from_arrow_function_body_95112", "Remove braces from arrow function body"),
|
|
Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal: diag(95113, ts.DiagnosticCategory.Message, "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113", "Wrap the following body with parentheses which should be an object literal"),
|
|
Add_all_missing_return_statement: diag(95114, ts.DiagnosticCategory.Message, "Add_all_missing_return_statement_95114", "Add all missing return statement"),
|
|
Remove_braces_from_all_arrow_function_bodies_with_relevant_issues: diag(95115, ts.DiagnosticCategory.Message, "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115", "Remove braces from all arrow function bodies with relevant issues"),
|
|
Wrap_all_object_literal_with_parentheses: diag(95116, ts.DiagnosticCategory.Message, "Wrap_all_object_literal_with_parentheses_95116", "Wrap all object literal with parentheses"),
|
|
Move_labeled_tuple_element_modifiers_to_labels: diag(95117, ts.DiagnosticCategory.Message, "Move_labeled_tuple_element_modifiers_to_labels_95117", "Move labeled tuple element modifiers to labels"),
|
|
Convert_overload_list_to_single_signature: diag(95118, ts.DiagnosticCategory.Message, "Convert_overload_list_to_single_signature_95118", "Convert overload list to single signature"),
|
|
Generate_get_and_set_accessors_for_all_overriding_properties: diag(95119, ts.DiagnosticCategory.Message, "Generate_get_and_set_accessors_for_all_overriding_properties_95119", "Generate 'get' and 'set' accessors for all overriding properties"),
|
|
Wrap_in_JSX_fragment: diag(95120, ts.DiagnosticCategory.Message, "Wrap_in_JSX_fragment_95120", "Wrap in JSX fragment"),
|
|
Wrap_all_unparented_JSX_in_JSX_fragment: diag(95121, ts.DiagnosticCategory.Message, "Wrap_all_unparented_JSX_in_JSX_fragment_95121", "Wrap all unparented JSX in JSX fragment"),
|
|
Convert_arrow_function_or_function_expression: diag(95122, ts.DiagnosticCategory.Message, "Convert_arrow_function_or_function_expression_95122", "Convert arrow function or function expression"),
|
|
Convert_to_anonymous_function: diag(95123, ts.DiagnosticCategory.Message, "Convert_to_anonymous_function_95123", "Convert to anonymous function"),
|
|
Convert_to_named_function: diag(95124, ts.DiagnosticCategory.Message, "Convert_to_named_function_95124", "Convert to named function"),
|
|
Convert_to_arrow_function: diag(95125, ts.DiagnosticCategory.Message, "Convert_to_arrow_function_95125", "Convert to arrow function"),
|
|
Remove_parentheses: diag(95126, ts.DiagnosticCategory.Message, "Remove_parentheses_95126", "Remove parentheses"),
|
|
Could_not_find_a_containing_arrow_function: diag(95127, ts.DiagnosticCategory.Message, "Could_not_find_a_containing_arrow_function_95127", "Could not find a containing arrow function"),
|
|
Containing_function_is_not_an_arrow_function: diag(95128, ts.DiagnosticCategory.Message, "Containing_function_is_not_an_arrow_function_95128", "Containing function is not an arrow function"),
|
|
Could_not_find_export_statement: diag(95129, ts.DiagnosticCategory.Message, "Could_not_find_export_statement_95129", "Could not find export statement"),
|
|
This_file_already_has_a_default_export: diag(95130, ts.DiagnosticCategory.Message, "This_file_already_has_a_default_export_95130", "This file already has a default export"),
|
|
Could_not_find_import_clause: diag(95131, ts.DiagnosticCategory.Message, "Could_not_find_import_clause_95131", "Could not find import clause"),
|
|
Could_not_find_namespace_import_or_named_imports: diag(95132, ts.DiagnosticCategory.Message, "Could_not_find_namespace_import_or_named_imports_95132", "Could not find namespace import or named imports"),
|
|
Selection_is_not_a_valid_type_node: diag(95133, ts.DiagnosticCategory.Message, "Selection_is_not_a_valid_type_node_95133", "Selection is not a valid type node"),
|
|
No_type_could_be_extracted_from_this_type_node: diag(95134, ts.DiagnosticCategory.Message, "No_type_could_be_extracted_from_this_type_node_95134", "No type could be extracted from this type node"),
|
|
Could_not_find_property_for_which_to_generate_accessor: diag(95135, ts.DiagnosticCategory.Message, "Could_not_find_property_for_which_to_generate_accessor_95135", "Could not find property for which to generate accessor"),
|
|
Name_is_not_valid: diag(95136, ts.DiagnosticCategory.Message, "Name_is_not_valid_95136", "Name is not valid"),
|
|
Can_only_convert_property_with_modifier: diag(95137, ts.DiagnosticCategory.Message, "Can_only_convert_property_with_modifier_95137", "Can only convert property with modifier"),
|
|
Switch_each_misused_0_to_1: diag(95138, ts.DiagnosticCategory.Message, "Switch_each_misused_0_to_1_95138", "Switch each misused '{0}' to '{1}'"),
|
|
Convert_to_optional_chain_expression: diag(95139, ts.DiagnosticCategory.Message, "Convert_to_optional_chain_expression_95139", "Convert to optional chain expression"),
|
|
Could_not_find_convertible_access_expression: diag(95140, ts.DiagnosticCategory.Message, "Could_not_find_convertible_access_expression_95140", "Could not find convertible access expression"),
|
|
Could_not_find_matching_access_expressions: diag(95141, ts.DiagnosticCategory.Message, "Could_not_find_matching_access_expressions_95141", "Could not find matching access expressions"),
|
|
Can_only_convert_logical_AND_access_chains: diag(95142, ts.DiagnosticCategory.Message, "Can_only_convert_logical_AND_access_chains_95142", "Can only convert logical AND access chains"),
|
|
Add_void_to_Promise_resolved_without_a_value: diag(95143, ts.DiagnosticCategory.Message, "Add_void_to_Promise_resolved_without_a_value_95143", "Add 'void' to Promise resolved without a value"),
|
|
Add_void_to_all_Promises_resolved_without_a_value: diag(95144, ts.DiagnosticCategory.Message, "Add_void_to_all_Promises_resolved_without_a_value_95144", "Add 'void' to all Promises resolved without a value"),
|
|
Use_element_access_for_0: diag(95145, ts.DiagnosticCategory.Message, "Use_element_access_for_0_95145", "Use element access for '{0}'"),
|
|
Use_element_access_for_all_undeclared_properties: diag(95146, ts.DiagnosticCategory.Message, "Use_element_access_for_all_undeclared_properties_95146", "Use element access for all undeclared properties."),
|
|
Delete_all_unused_imports: diag(95147, ts.DiagnosticCategory.Message, "Delete_all_unused_imports_95147", "Delete all unused imports"),
|
|
Infer_function_return_type: diag(95148, ts.DiagnosticCategory.Message, "Infer_function_return_type_95148", "Infer function return type"),
|
|
Return_type_must_be_inferred_from_a_function: diag(95149, ts.DiagnosticCategory.Message, "Return_type_must_be_inferred_from_a_function_95149", "Return type must be inferred from a function"),
|
|
Could_not_determine_function_return_type: diag(95150, ts.DiagnosticCategory.Message, "Could_not_determine_function_return_type_95150", "Could not determine function return type"),
|
|
Could_not_convert_to_arrow_function: diag(95151, ts.DiagnosticCategory.Message, "Could_not_convert_to_arrow_function_95151", "Could not convert to arrow function"),
|
|
Could_not_convert_to_named_function: diag(95152, ts.DiagnosticCategory.Message, "Could_not_convert_to_named_function_95152", "Could not convert to named function"),
|
|
Could_not_convert_to_anonymous_function: diag(95153, ts.DiagnosticCategory.Message, "Could_not_convert_to_anonymous_function_95153", "Could not convert to anonymous function"),
|
|
Can_only_convert_string_concatenation: diag(95154, ts.DiagnosticCategory.Message, "Can_only_convert_string_concatenation_95154", "Can only convert string concatenation"),
|
|
Selection_is_not_a_valid_statement_or_statements: diag(95155, ts.DiagnosticCategory.Message, "Selection_is_not_a_valid_statement_or_statements_95155", "Selection is not a valid statement or statements"),
|
|
Add_missing_function_declaration_0: diag(95156, ts.DiagnosticCategory.Message, "Add_missing_function_declaration_0_95156", "Add missing function declaration '{0}'"),
|
|
Add_all_missing_function_declarations: diag(95157, ts.DiagnosticCategory.Message, "Add_all_missing_function_declarations_95157", "Add all missing function declarations"),
|
|
Method_not_implemented: diag(95158, ts.DiagnosticCategory.Message, "Method_not_implemented_95158", "Method not implemented."),
|
|
Function_not_implemented: diag(95159, ts.DiagnosticCategory.Message, "Function_not_implemented_95159", "Function not implemented."),
|
|
Add_override_modifier: diag(95160, ts.DiagnosticCategory.Message, "Add_override_modifier_95160", "Add 'override' modifier"),
|
|
Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
|
|
Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
|
|
Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
|
|
Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
|
|
Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
|
|
Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
|
|
Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
|
|
Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
|
|
Add_undefined_to_optional_property_type: diag(95169, ts.DiagnosticCategory.Message, "Add_undefined_to_optional_property_type_95169", "Add 'undefined' to optional property type"),
|
|
Convert_named_imports_to_default_import: diag(95170, ts.DiagnosticCategory.Message, "Convert_named_imports_to_default_import_95170", "Convert named imports to default import"),
|
|
Delete_unused_param_tag_0: diag(95171, ts.DiagnosticCategory.Message, "Delete_unused_param_tag_0_95171", "Delete unused '@param' tag '{0}'"),
|
|
Delete_all_unused_param_tags: diag(95172, ts.DiagnosticCategory.Message, "Delete_all_unused_param_tags_95172", "Delete all unused '@param' tags"),
|
|
Rename_param_tag_name_0_to_1: diag(95173, ts.DiagnosticCategory.Message, "Rename_param_tag_name_0_to_1_95173", "Rename '@param' tag name '{0}' to '{1}'"),
|
|
No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
|
|
Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
|
|
JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
|
|
Private_identifiers_cannot_be_used_as_parameters: diag(18009, ts.DiagnosticCategory.Error, "Private_identifiers_cannot_be_used_as_parameters_18009", "Private identifiers cannot be used as parameters."),
|
|
An_accessibility_modifier_cannot_be_used_with_a_private_identifier: diag(18010, ts.DiagnosticCategory.Error, "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010", "An accessibility modifier cannot be used with a private identifier."),
|
|
The_operand_of_a_delete_operator_cannot_be_a_private_identifier: diag(18011, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011", "The operand of a 'delete' operator cannot be a private identifier."),
|
|
constructor_is_a_reserved_word: diag(18012, ts.DiagnosticCategory.Error, "constructor_is_a_reserved_word_18012", "'#constructor' is a reserved word."),
|
|
Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier: diag(18013, ts.DiagnosticCategory.Error, "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013", "Property '{0}' is not accessible outside class '{1}' because it has a private identifier."),
|
|
The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling: diag(18014, ts.DiagnosticCategory.Error, "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014", "The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling."),
|
|
Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2: diag(18015, ts.DiagnosticCategory.Error, "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015", "Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'."),
|
|
Private_identifiers_are_not_allowed_outside_class_bodies: diag(18016, ts.DiagnosticCategory.Error, "Private_identifiers_are_not_allowed_outside_class_bodies_18016", "Private identifiers are not allowed outside class bodies."),
|
|
The_shadowing_declaration_of_0_is_defined_here: diag(18017, ts.DiagnosticCategory.Error, "The_shadowing_declaration_of_0_is_defined_here_18017", "The shadowing declaration of '{0}' is defined here"),
|
|
The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here: diag(18018, ts.DiagnosticCategory.Error, "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018", "The declaration of '{0}' that you probably intended to use is defined here"),
|
|
_0_modifier_cannot_be_used_with_a_private_identifier: diag(18019, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_with_a_private_identifier_18019", "'{0}' modifier cannot be used with a private identifier."),
|
|
An_enum_member_cannot_be_named_with_a_private_identifier: diag(18024, ts.DiagnosticCategory.Error, "An_enum_member_cannot_be_named_with_a_private_identifier_18024", "An enum member cannot be named with a private identifier."),
|
|
can_only_be_used_at_the_start_of_a_file: diag(18026, ts.DiagnosticCategory.Error, "can_only_be_used_at_the_start_of_a_file_18026", "'#!' can only be used at the start of a file."),
|
|
Compiler_reserves_name_0_when_emitting_private_identifier_downlevel: diag(18027, ts.DiagnosticCategory.Error, "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027", "Compiler reserves name '{0}' when emitting private identifier downlevel."),
|
|
Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher: diag(18028, ts.DiagnosticCategory.Error, "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028", "Private identifiers are only available when targeting ECMAScript 2015 and higher."),
|
|
Private_identifiers_are_not_allowed_in_variable_declarations: diag(18029, ts.DiagnosticCategory.Error, "Private_identifiers_are_not_allowed_in_variable_declarations_18029", "Private identifiers are not allowed in variable declarations."),
|
|
An_optional_chain_cannot_contain_private_identifiers: diag(18030, ts.DiagnosticCategory.Error, "An_optional_chain_cannot_contain_private_identifiers_18030", "An optional chain cannot contain private identifiers."),
|
|
The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents: diag(18031, ts.DiagnosticCategory.Error, "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031", "The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents."),
|
|
The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some: diag(18032, ts.DiagnosticCategory.Error, "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032", "The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some."),
|
|
Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhaustiveness_checks_consider_using_an_object_literal_instead: diag(18033, ts.DiagnosticCategory.Error, "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033", "Only numeric enums can have computed members, but this expression has type '{0}'. If you do not need exhaustiveness checks, consider using an object literal instead."),
|
|
Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
|
|
Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
|
|
Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
|
|
Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
|
|
For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
|
|
Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
|
|
A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
|
|
_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation: diag(18042, ts.DiagnosticCategory.Error, "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042", "'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation."),
|
|
Types_cannot_appear_in_export_declarations_in_JavaScript_files: diag(18043, ts.DiagnosticCategory.Error, "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043", "Types cannot appear in export declarations in JavaScript files."),
|
|
_0_is_automatically_exported_here: diag(18044, ts.DiagnosticCategory.Message, "_0_is_automatically_exported_here_18044", "'{0}' is automatically exported here."),
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var _a;
|
|
function tokenIsIdentifierOrKeyword(token) {
|
|
return token >= 79;
|
|
}
|
|
ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
|
|
function tokenIsIdentifierOrKeywordOrGreaterThan(token) {
|
|
return token === 31 || tokenIsIdentifierOrKeyword(token);
|
|
}
|
|
ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
|
|
ts.textToKeywordObj = (_a = {
|
|
abstract: 126,
|
|
any: 130,
|
|
as: 127,
|
|
asserts: 128,
|
|
assert: 129,
|
|
bigint: 158,
|
|
boolean: 133,
|
|
break: 81,
|
|
case: 82,
|
|
catch: 83,
|
|
class: 84,
|
|
continue: 86,
|
|
const: 85
|
|
},
|
|
_a["" + "constructor"] = 134,
|
|
_a.debugger = 87,
|
|
_a.declare = 135,
|
|
_a.default = 88,
|
|
_a.delete = 89,
|
|
_a.do = 90,
|
|
_a.else = 91,
|
|
_a.enum = 92,
|
|
_a.export = 93,
|
|
_a.extends = 94,
|
|
_a.false = 95,
|
|
_a.finally = 96,
|
|
_a.for = 97,
|
|
_a.from = 156,
|
|
_a.function = 98,
|
|
_a.get = 136,
|
|
_a.if = 99,
|
|
_a.implements = 117,
|
|
_a.import = 100,
|
|
_a.in = 101,
|
|
_a.infer = 137,
|
|
_a.instanceof = 102,
|
|
_a.interface = 118,
|
|
_a.intrinsic = 138,
|
|
_a.is = 139,
|
|
_a.keyof = 140,
|
|
_a.let = 119,
|
|
_a.module = 141,
|
|
_a.namespace = 142,
|
|
_a.never = 143,
|
|
_a.new = 103,
|
|
_a.null = 104,
|
|
_a.number = 147,
|
|
_a.object = 148,
|
|
_a.package = 120,
|
|
_a.private = 121,
|
|
_a.protected = 122,
|
|
_a.public = 123,
|
|
_a.override = 159,
|
|
_a.out = 144,
|
|
_a.readonly = 145,
|
|
_a.require = 146,
|
|
_a.global = 157,
|
|
_a.return = 105,
|
|
_a.set = 149,
|
|
_a.static = 124,
|
|
_a.string = 150,
|
|
_a.super = 106,
|
|
_a.switch = 107,
|
|
_a.symbol = 151,
|
|
_a.this = 108,
|
|
_a.throw = 109,
|
|
_a.true = 110,
|
|
_a.try = 111,
|
|
_a.type = 152,
|
|
_a.typeof = 112,
|
|
_a.undefined = 153,
|
|
_a.unique = 154,
|
|
_a.unknown = 155,
|
|
_a.var = 113,
|
|
_a.void = 114,
|
|
_a.while = 115,
|
|
_a.with = 116,
|
|
_a.yield = 125,
|
|
_a.async = 131,
|
|
_a.await = 132,
|
|
_a.of = 160,
|
|
_a);
|
|
var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
|
|
var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18, "}": 19, "(": 20, ")": 21, "[": 22, "]": 23, ".": 24, "...": 25, ";": 26, ",": 27, "<": 29, ">": 31, "<=": 32, ">=": 33, "==": 34, "!=": 35, "===": 36, "!==": 37, "=>": 38, "+": 39, "-": 40, "**": 42, "*": 41, "/": 43, "%": 44, "++": 45, "--": 46, "<<": 47, "</": 30, ">>": 48, ">>>": 49, "&": 50, "|": 51, "^": 52, "!": 53, "~": 54, "&&": 55, "||": 56, "?": 57, "??": 60, "?.": 28, ":": 58, "=": 63, "+=": 64, "-=": 65, "*=": 66, "**=": 67, "/=": 68, "%=": 69, "<<=": 70, ">>=": 71, ">>>=": 72, "&=": 73, "|=": 74, "^=": 78, "||=": 75, "&&=": 76, "??=": 77, "@": 59, "#": 62, "`": 61 })));
|
|
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,];
|
|
var unicodeESNextIdentifierStart = [65, 90, 97, 122, 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, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 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, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 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, 2809, 2809, 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, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 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, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 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, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 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, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 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, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 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, 43824, 43866, 43868, 43879, 43888, 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, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
|
|
var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 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, 2556, 2556, 2558, 2558, 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, 2809, 2815, 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, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 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, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 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, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 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, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 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, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 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, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 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, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 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, 65071, 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, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
|
|
var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
|
|
var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
|
|
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 >= 2 ?
|
|
lookupInUnicodeMap(code, unicodeESNextIdentifierStart) :
|
|
languageVersion === 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) :
|
|
lookupInUnicodeMap(code, unicodeES3IdentifierStart);
|
|
}
|
|
ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart;
|
|
function isUnicodeIdentifierPart(code, languageVersion) {
|
|
return languageVersion >= 2 ?
|
|
lookupInUnicodeMap(code, unicodeESNextIdentifierPart) :
|
|
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, allowEdits) {
|
|
return sourceFile.getPositionOfLineAndCharacter ?
|
|
sourceFile.getPositionOfLineAndCharacter(line, character, allowEdits) :
|
|
computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text, allowEdits);
|
|
}
|
|
ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter;
|
|
function computePositionOfLineAndCharacter(lineStarts, line, character, debugText, allowEdits) {
|
|
if (line < 0 || line >= lineStarts.length) {
|
|
if (allowEdits) {
|
|
line = line < 0 ? 0 : line >= lineStarts.length ? lineStarts.length - 1 : line;
|
|
}
|
|
else {
|
|
ts.Debug.fail("Bad line number. Line: ".concat(line, ", lineStarts.length: ").concat(lineStarts.length, " , line map is correct? ").concat(debugText !== undefined ? ts.arraysEqual(lineStarts, computeLineStarts(debugText)) : "unknown"));
|
|
}
|
|
}
|
|
var res = lineStarts[line] + character;
|
|
if (allowEdits) {
|
|
return res > lineStarts[line + 1] ? lineStarts[line + 1] : typeof debugText === "string" && res > debugText.length ? debugText.length : res;
|
|
}
|
|
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 = computeLineOfPosition(lineStarts, position);
|
|
return {
|
|
line: lineNumber,
|
|
character: position - lineStarts[lineNumber]
|
|
};
|
|
}
|
|
ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition;
|
|
function computeLineOfPosition(lineStarts, position, lowerBound) {
|
|
var lineNumber = ts.binarySearch(lineStarts, position, ts.identity, ts.compareValues, lowerBound);
|
|
if (lineNumber < 0) {
|
|
lineNumber = ~lineNumber - 1;
|
|
ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file");
|
|
}
|
|
return lineNumber;
|
|
}
|
|
ts.computeLineOfPosition = computeLineOfPosition;
|
|
function getLinesBetweenPositions(sourceFile, pos1, pos2) {
|
|
if (pos1 === pos2)
|
|
return 0;
|
|
var lineStarts = getLineStarts(sourceFile);
|
|
var lower = Math.min(pos1, pos2);
|
|
var isNegative = lower === pos2;
|
|
var upper = isNegative ? pos1 : pos2;
|
|
var lowerLine = computeLineOfPosition(lineStarts, lower);
|
|
var upperLine = computeLineOfPosition(lineStarts, upper, lowerLine);
|
|
return isNegative ? lowerLine - upperLine : upperLine - lowerLine;
|
|
}
|
|
ts.getLinesBetweenPositions = getLinesBetweenPositions;
|
|
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 isHexDigit(ch) {
|
|
return isDigit(ch) || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102;
|
|
}
|
|
function isCodePoint(code) {
|
|
return code <= 0x10FFFF;
|
|
}
|
|
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, inJSDoc) {
|
|
if (ts.positionIsSynthesized(pos)) {
|
|
return pos;
|
|
}
|
|
var canConsumeStar = false;
|
|
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;
|
|
}
|
|
canConsumeStar = !!inJSDoc;
|
|
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++;
|
|
}
|
|
canConsumeStar = false;
|
|
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++;
|
|
}
|
|
canConsumeStar = false;
|
|
continue;
|
|
}
|
|
break;
|
|
case 60:
|
|
case 124:
|
|
case 61:
|
|
case 62:
|
|
if (isConflictMarkerTrivia(text, pos)) {
|
|
pos = scanConflictMarkerTrivia(text, pos);
|
|
canConsumeStar = false;
|
|
continue;
|
|
}
|
|
break;
|
|
case 35:
|
|
if (pos === 0 && isShebangTrivia(text, pos)) {
|
|
pos = scanShebangTrivia(text, pos);
|
|
canConsumeStar = false;
|
|
continue;
|
|
}
|
|
break;
|
|
case 42:
|
|
if (canConsumeStar) {
|
|
pos++;
|
|
canConsumeStar = false;
|
|
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);
|
|
}
|
|
ts.isShebangTrivia = isShebangTrivia;
|
|
function scanShebangTrivia(text, pos) {
|
|
var shebang = shebangTriviaRegex.exec(text)[0];
|
|
pos = pos + shebang.length;
|
|
return pos;
|
|
}
|
|
ts.scanShebangTrivia = scanShebangTrivia;
|
|
function iterateCommentRanges(reduce, text, pos, trailing, cb, state, initial) {
|
|
var pendingPos;
|
|
var pendingEnd;
|
|
var pendingKind;
|
|
var pendingHasTrailingNewLine;
|
|
var hasPendingCommentRange = false;
|
|
var collecting = trailing;
|
|
var accumulator = initial;
|
|
if (pos === 0) {
|
|
collecting = true;
|
|
var shebang = getShebang(text);
|
|
if (shebang) {
|
|
pos = shebang.length;
|
|
}
|
|
}
|
|
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, identifierVariant) {
|
|
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
|
|
ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
|
|
(identifierVariant === 1 ? (ch === 45 || ch === 58) : false) ||
|
|
ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
|
|
}
|
|
ts.isIdentifierPart = isIdentifierPart;
|
|
function isIdentifierText(name, languageVersion, identifierVariant) {
|
|
var ch = codePointAt(name, 0);
|
|
if (!isIdentifierStart(ch, languageVersion)) {
|
|
return false;
|
|
}
|
|
for (var i = charSize(ch); i < name.length; i += charSize(ch)) {
|
|
if (!isIdentifierPart(ch = codePointAt(name, i), languageVersion, identifierVariant)) {
|
|
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;
|
|
var commentDirectives;
|
|
var inJSDocType = 0;
|
|
setText(text, start, length);
|
|
var scanner = {
|
|
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; },
|
|
hasUnicodeEscape: function () { return (tokenFlags & 1024) !== 0; },
|
|
hasExtendedUnicodeEscape: function () { return (tokenFlags & 8) !== 0; },
|
|
hasPrecedingLineBreak: function () { return (tokenFlags & 1) !== 0; },
|
|
hasPrecedingJSDocComment: function () { return (tokenFlags & 2) !== 0; },
|
|
isIdentifier: function () { return token === 79 || token > 116; },
|
|
isReservedWord: function () { return token >= 81 && token <= 116; },
|
|
isUnterminated: function () { return (tokenFlags & 4) !== 0; },
|
|
getCommentDirectives: function () { return commentDirectives; },
|
|
getNumericLiteralFlags: function () { return tokenFlags & 1008; },
|
|
getTokenFlags: function () { return tokenFlags; },
|
|
reScanGreaterToken: reScanGreaterToken,
|
|
reScanAsteriskEqualsToken: reScanAsteriskEqualsToken,
|
|
reScanSlashToken: reScanSlashToken,
|
|
reScanTemplateToken: reScanTemplateToken,
|
|
reScanTemplateHeadOrNoSubstitutionTemplate: reScanTemplateHeadOrNoSubstitutionTemplate,
|
|
scanJsxIdentifier: scanJsxIdentifier,
|
|
scanJsxAttributeValue: scanJsxAttributeValue,
|
|
reScanJsxAttributeValue: reScanJsxAttributeValue,
|
|
reScanJsxToken: reScanJsxToken,
|
|
reScanLessThanToken: reScanLessThanToken,
|
|
reScanHashToken: reScanHashToken,
|
|
reScanQuestionToken: reScanQuestionToken,
|
|
reScanInvalidIdentifier: reScanInvalidIdentifier,
|
|
scanJsxToken: scanJsxToken,
|
|
scanJsDocToken: scanJsDocToken,
|
|
scan: scan,
|
|
getText: getText,
|
|
clearCommentDirectives: clearCommentDirectives,
|
|
setText: setText,
|
|
setScriptTarget: setScriptTarget,
|
|
setLanguageVariant: setLanguageVariant,
|
|
setOnError: setOnError,
|
|
setTextPos: setTextPos,
|
|
setInJSDocType: setInJSDocType,
|
|
tryScan: tryScan,
|
|
lookAhead: lookAhead,
|
|
scanRange: scanRange,
|
|
};
|
|
if (ts.Debug.isDebugging) {
|
|
Object.defineProperty(scanner, "__debugShowCurrentPositionInText", {
|
|
get: function () {
|
|
var text = scanner.getText();
|
|
return text.slice(0, scanner.getStartPos()) + "║" + text.slice(scanner.getStartPos());
|
|
},
|
|
});
|
|
}
|
|
return scanner;
|
|
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;
|
|
}
|
|
}
|
|
var result;
|
|
if (tokenFlags & 512) {
|
|
result = mainFragment;
|
|
if (decimalFragment) {
|
|
result += "." + decimalFragment;
|
|
}
|
|
if (scientificFragment) {
|
|
result += scientificFragment;
|
|
}
|
|
}
|
|
else {
|
|
result = text.substring(start, end);
|
|
}
|
|
if (decimalFragment !== undefined || tokenFlags & 16) {
|
|
checkForIdentifierStartAfterNumericLiteral(start, decimalFragment === undefined && !!(tokenFlags & 16));
|
|
return {
|
|
type: 8,
|
|
value: "" + +result
|
|
};
|
|
}
|
|
else {
|
|
tokenValue = result;
|
|
var type = checkBigIntSuffix();
|
|
checkForIdentifierStartAfterNumericLiteral(start);
|
|
return { type: type, value: tokenValue };
|
|
}
|
|
}
|
|
function checkForIdentifierStartAfterNumericLiteral(numericStart, isScientific) {
|
|
if (!isIdentifierStart(codePointAt(text, pos), languageVersion)) {
|
|
return;
|
|
}
|
|
var identifierStart = pos;
|
|
var length = scanIdentifierParts().length;
|
|
if (length === 1 && text[identifierStart] === "n") {
|
|
if (isScientific) {
|
|
error(ts.Diagnostics.A_bigint_literal_cannot_use_exponential_notation, numericStart, identifierStart - numericStart + 1);
|
|
}
|
|
else {
|
|
error(ts.Diagnostics.A_bigint_literal_must_be_an_integer, numericStart, identifierStart - numericStart + 1);
|
|
}
|
|
}
|
|
else {
|
|
error(ts.Diagnostics.An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal, identifierStart, length);
|
|
pos = identifierStart;
|
|
}
|
|
}
|
|
function scanOctalDigits() {
|
|
var start = pos;
|
|
while (isOctalDigit(text.charCodeAt(pos))) {
|
|
pos++;
|
|
}
|
|
return +(text.substring(start, pos));
|
|
}
|
|
function scanExactNumberOfHexDigits(count, canHaveSeparators) {
|
|
var valueString = scanHexDigits(count, false, canHaveSeparators);
|
|
return valueString ? parseInt(valueString, 16) : -1;
|
|
}
|
|
function scanMinimumNumberOfHexDigits(count, canHaveSeparators) {
|
|
return scanHexDigits(count, true, canHaveSeparators);
|
|
}
|
|
function scanHexDigits(minCount, scanAsManyAsPossible, canHaveSeparators) {
|
|
var valueChars = [];
|
|
var allowSeparator = false;
|
|
var isPreviousTokenSeparator = false;
|
|
while (valueChars.length < 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 >= 65 && ch <= 70) {
|
|
ch += 97 - 65;
|
|
}
|
|
else if (!((ch >= 48 && ch <= 57) ||
|
|
(ch >= 97 && ch <= 102))) {
|
|
break;
|
|
}
|
|
valueChars.push(ch);
|
|
pos++;
|
|
isPreviousTokenSeparator = false;
|
|
}
|
|
if (valueChars.length < minCount) {
|
|
valueChars = [];
|
|
}
|
|
if (text.charCodeAt(pos - 1) === 95) {
|
|
error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1);
|
|
}
|
|
return String.fromCharCode.apply(String, valueChars);
|
|
}
|
|
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(isTaggedTemplate) {
|
|
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 ? 14 : 17;
|
|
break;
|
|
}
|
|
var currChar = text.charCodeAt(pos);
|
|
if (currChar === 96) {
|
|
contents += text.substring(start, pos);
|
|
pos++;
|
|
resultingToken = startedWithBacktick ? 14 : 17;
|
|
break;
|
|
}
|
|
if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) {
|
|
contents += text.substring(start, pos);
|
|
pos += 2;
|
|
resultingToken = startedWithBacktick ? 15 : 16;
|
|
break;
|
|
}
|
|
if (currChar === 92) {
|
|
contents += text.substring(start, pos);
|
|
contents += scanEscapeSequence(isTaggedTemplate);
|
|
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(isTaggedTemplate) {
|
|
var start = pos;
|
|
pos++;
|
|
if (pos >= end) {
|
|
error(ts.Diagnostics.Unexpected_end_of_text);
|
|
return "";
|
|
}
|
|
var ch = text.charCodeAt(pos);
|
|
pos++;
|
|
switch (ch) {
|
|
case 48:
|
|
if (isTaggedTemplate && pos < end && isDigit(text.charCodeAt(pos))) {
|
|
pos++;
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
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 (isTaggedTemplate) {
|
|
for (var escapePos = pos; escapePos < pos + 4; escapePos++) {
|
|
if (escapePos < end && !isHexDigit(text.charCodeAt(escapePos)) && text.charCodeAt(escapePos) !== 123) {
|
|
pos = escapePos;
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
}
|
|
}
|
|
if (pos < end && text.charCodeAt(pos) === 123) {
|
|
pos++;
|
|
if (isTaggedTemplate && !isHexDigit(text.charCodeAt(pos))) {
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
if (isTaggedTemplate) {
|
|
var savePos = pos;
|
|
var escapedValueString = scanMinimumNumberOfHexDigits(1, false);
|
|
var escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1;
|
|
if (!isCodePoint(escapedValue) || text.charCodeAt(pos) !== 125) {
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
else {
|
|
pos = savePos;
|
|
}
|
|
}
|
|
tokenFlags |= 8;
|
|
return scanExtendedUnicodeEscape();
|
|
}
|
|
tokenFlags |= 1024;
|
|
return scanHexadecimalEscape(4);
|
|
case 120:
|
|
if (isTaggedTemplate) {
|
|
if (!isHexDigit(text.charCodeAt(pos))) {
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
else if (!isHexDigit(text.charCodeAt(pos + 1))) {
|
|
pos++;
|
|
tokenFlags |= 2048;
|
|
return text.substring(start, pos);
|
|
}
|
|
}
|
|
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 escapedValueString = scanMinimumNumberOfHexDigits(1, false);
|
|
var escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1;
|
|
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 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 peekExtendedUnicodeEscape() {
|
|
if (languageVersion >= 2 && codePointAt(text, pos + 1) === 117 && codePointAt(text, pos + 2) === 123) {
|
|
var start_2 = pos;
|
|
pos += 3;
|
|
var escapedValueString = scanMinimumNumberOfHexDigits(1, false);
|
|
var escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1;
|
|
pos = start_2;
|
|
return escapedValue;
|
|
}
|
|
return -1;
|
|
}
|
|
function scanIdentifierParts() {
|
|
var result = "";
|
|
var start = pos;
|
|
while (pos < end) {
|
|
var ch = codePointAt(text, pos);
|
|
if (isIdentifierPart(ch, languageVersion)) {
|
|
pos += charSize(ch);
|
|
}
|
|
else if (ch === 92) {
|
|
ch = peekExtendedUnicodeEscape();
|
|
if (ch >= 0 && isIdentifierPart(ch, languageVersion)) {
|
|
pos += 3;
|
|
tokenFlags |= 8;
|
|
result += scanExtendedUnicodeEscape();
|
|
start = pos;
|
|
continue;
|
|
}
|
|
ch = peekUnicodeEscape();
|
|
if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) {
|
|
break;
|
|
}
|
|
tokenFlags |= 1024;
|
|
result += text.substring(start, pos);
|
|
result += utf16EncodeAsString(ch);
|
|
pos += 6;
|
|
start = pos;
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
result += text.substring(start, pos);
|
|
return result;
|
|
}
|
|
function getIdentifierToken() {
|
|
var len = tokenValue.length;
|
|
if (len >= 2 && len <= 12) {
|
|
var ch = tokenValue.charCodeAt(0);
|
|
if (ch >= 97 && ch <= 122) {
|
|
var keyword = textToKeyword.get(tokenValue);
|
|
if (keyword !== undefined) {
|
|
return token = keyword;
|
|
}
|
|
}
|
|
}
|
|
return token = 79;
|
|
}
|
|
function scanBinaryOrOctalDigits(base) {
|
|
var value = "";
|
|
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;
|
|
if (!isDigit(ch) || ch - 48 >= base) {
|
|
break;
|
|
}
|
|
value += text[pos];
|
|
pos++;
|
|
isPreviousTokenSeparator = false;
|
|
}
|
|
if (text.charCodeAt(pos - 1) === 95) {
|
|
error(ts.Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1);
|
|
}
|
|
return value;
|
|
}
|
|
function checkBigIntSuffix() {
|
|
if (text.charCodeAt(pos) === 110) {
|
|
tokenValue += "n";
|
|
if (tokenFlags & 384) {
|
|
tokenValue = ts.parsePseudoBigInt(tokenValue) + "n";
|
|
}
|
|
pos++;
|
|
return 9;
|
|
}
|
|
else {
|
|
var numericValue = tokenFlags & 128
|
|
? parseInt(tokenValue.slice(2), 2)
|
|
: tokenFlags & 256
|
|
? parseInt(tokenValue.slice(2), 8)
|
|
: +tokenValue;
|
|
tokenValue = "" + numericValue;
|
|
return 8;
|
|
}
|
|
}
|
|
function scan() {
|
|
var _a;
|
|
startPos = pos;
|
|
tokenFlags = 0;
|
|
var asteriskSeen = false;
|
|
while (true) {
|
|
tokenPos = pos;
|
|
if (pos >= end) {
|
|
return token = 1;
|
|
}
|
|
var ch = codePointAt(text, 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:
|
|
case 160:
|
|
case 5760:
|
|
case 8192:
|
|
case 8193:
|
|
case 8194:
|
|
case 8195:
|
|
case 8196:
|
|
case 8197:
|
|
case 8198:
|
|
case 8199:
|
|
case 8200:
|
|
case 8201:
|
|
case 8202:
|
|
case 8203:
|
|
case 8239:
|
|
case 8287:
|
|
case 12288:
|
|
case 65279:
|
|
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 = 37;
|
|
}
|
|
return pos += 2, token = 35;
|
|
}
|
|
pos++;
|
|
return token = 53;
|
|
case 34:
|
|
case 39:
|
|
tokenValue = scanString();
|
|
return token = 10;
|
|
case 96:
|
|
return token = scanTemplateAndSetTokenValue(false);
|
|
case 37:
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 69;
|
|
}
|
|
pos++;
|
|
return token = 44;
|
|
case 38:
|
|
if (text.charCodeAt(pos + 1) === 38) {
|
|
if (text.charCodeAt(pos + 2) === 61) {
|
|
return pos += 3, token = 76;
|
|
}
|
|
return pos += 2, token = 55;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 73;
|
|
}
|
|
pos++;
|
|
return token = 50;
|
|
case 40:
|
|
pos++;
|
|
return token = 20;
|
|
case 41:
|
|
pos++;
|
|
return token = 21;
|
|
case 42:
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 66;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 42) {
|
|
if (text.charCodeAt(pos + 2) === 61) {
|
|
return pos += 3, token = 67;
|
|
}
|
|
return pos += 2, token = 42;
|
|
}
|
|
pos++;
|
|
if (inJSDocType && !asteriskSeen && (tokenFlags & 1)) {
|
|
asteriskSeen = true;
|
|
continue;
|
|
}
|
|
return token = 41;
|
|
case 43:
|
|
if (text.charCodeAt(pos + 1) === 43) {
|
|
return pos += 2, token = 45;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 64;
|
|
}
|
|
pos++;
|
|
return token = 39;
|
|
case 44:
|
|
pos++;
|
|
return token = 27;
|
|
case 45:
|
|
if (text.charCodeAt(pos + 1) === 45) {
|
|
return pos += 2, token = 46;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 65;
|
|
}
|
|
pos++;
|
|
return token = 40;
|
|
case 46:
|
|
if (isDigit(text.charCodeAt(pos + 1))) {
|
|
tokenValue = scanNumber().value;
|
|
return token = 8;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
|
|
return pos += 3, token = 25;
|
|
}
|
|
pos++;
|
|
return token = 24;
|
|
case 47:
|
|
if (text.charCodeAt(pos + 1) === 47) {
|
|
pos += 2;
|
|
while (pos < end) {
|
|
if (isLineBreak(text.charCodeAt(pos))) {
|
|
break;
|
|
}
|
|
pos++;
|
|
}
|
|
commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(tokenPos, pos), commentDirectiveRegExSingleLine, tokenPos);
|
|
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;
|
|
var lastLineStart = tokenPos;
|
|
while (pos < end) {
|
|
var ch_1 = text.charCodeAt(pos);
|
|
if (ch_1 === 42 && text.charCodeAt(pos + 1) === 47) {
|
|
pos += 2;
|
|
commentClosed = true;
|
|
break;
|
|
}
|
|
pos++;
|
|
if (isLineBreak(ch_1)) {
|
|
lastLineStart = pos;
|
|
tokenFlags |= 1;
|
|
}
|
|
}
|
|
commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart);
|
|
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 = 68;
|
|
}
|
|
pos++;
|
|
return token = 43;
|
|
case 48:
|
|
if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) {
|
|
pos += 2;
|
|
tokenValue = scanMinimumNumberOfHexDigits(1, true);
|
|
if (!tokenValue) {
|
|
error(ts.Diagnostics.Hexadecimal_digit_expected);
|
|
tokenValue = "0";
|
|
}
|
|
tokenValue = "0x" + tokenValue;
|
|
tokenFlags |= 64;
|
|
return token = checkBigIntSuffix();
|
|
}
|
|
else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) {
|
|
pos += 2;
|
|
tokenValue = scanBinaryOrOctalDigits(2);
|
|
if (!tokenValue) {
|
|
error(ts.Diagnostics.Binary_digit_expected);
|
|
tokenValue = "0";
|
|
}
|
|
tokenValue = "0b" + tokenValue;
|
|
tokenFlags |= 128;
|
|
return token = checkBigIntSuffix();
|
|
}
|
|
else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) {
|
|
pos += 2;
|
|
tokenValue = scanBinaryOrOctalDigits(8);
|
|
if (!tokenValue) {
|
|
error(ts.Diagnostics.Octal_digit_expected);
|
|
tokenValue = "0";
|
|
}
|
|
tokenValue = "0o" + tokenValue;
|
|
tokenFlags |= 256;
|
|
return token = checkBigIntSuffix();
|
|
}
|
|
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:
|
|
(_a = scanNumber(), token = _a.type, tokenValue = _a.value);
|
|
return token;
|
|
case 58:
|
|
pos++;
|
|
return token = 58;
|
|
case 59:
|
|
pos++;
|
|
return token = 26;
|
|
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 = 70;
|
|
}
|
|
return pos += 2, token = 47;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 32;
|
|
}
|
|
if (languageVariant === 1 &&
|
|
text.charCodeAt(pos + 1) === 47 &&
|
|
text.charCodeAt(pos + 2) !== 42) {
|
|
return pos += 2, token = 30;
|
|
}
|
|
pos++;
|
|
return token = 29;
|
|
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 = 36;
|
|
}
|
|
return pos += 2, token = 34;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 62) {
|
|
return pos += 2, token = 38;
|
|
}
|
|
pos++;
|
|
return token = 63;
|
|
case 62:
|
|
if (isConflictMarkerTrivia(text, pos)) {
|
|
pos = scanConflictMarkerTrivia(text, pos, error);
|
|
if (skipTrivia) {
|
|
continue;
|
|
}
|
|
else {
|
|
return token = 7;
|
|
}
|
|
}
|
|
pos++;
|
|
return token = 31;
|
|
case 63:
|
|
if (text.charCodeAt(pos + 1) === 46 && !isDigit(text.charCodeAt(pos + 2))) {
|
|
return pos += 2, token = 28;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 63) {
|
|
if (text.charCodeAt(pos + 2) === 61) {
|
|
return pos += 3, token = 77;
|
|
}
|
|
return pos += 2, token = 60;
|
|
}
|
|
pos++;
|
|
return token = 57;
|
|
case 91:
|
|
pos++;
|
|
return token = 22;
|
|
case 93:
|
|
pos++;
|
|
return token = 23;
|
|
case 94:
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 78;
|
|
}
|
|
pos++;
|
|
return token = 52;
|
|
case 123:
|
|
pos++;
|
|
return token = 18;
|
|
case 124:
|
|
if (isConflictMarkerTrivia(text, pos)) {
|
|
pos = scanConflictMarkerTrivia(text, pos, error);
|
|
if (skipTrivia) {
|
|
continue;
|
|
}
|
|
else {
|
|
return token = 7;
|
|
}
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 124) {
|
|
if (text.charCodeAt(pos + 2) === 61) {
|
|
return pos += 3, token = 75;
|
|
}
|
|
return pos += 2, token = 56;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 74;
|
|
}
|
|
pos++;
|
|
return token = 51;
|
|
case 125:
|
|
pos++;
|
|
return token = 19;
|
|
case 126:
|
|
pos++;
|
|
return token = 54;
|
|
case 64:
|
|
pos++;
|
|
return token = 59;
|
|
case 92:
|
|
var extendedCookedChar = peekExtendedUnicodeEscape();
|
|
if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) {
|
|
pos += 3;
|
|
tokenFlags |= 8;
|
|
tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts();
|
|
return token = getIdentifierToken();
|
|
}
|
|
var cookedChar = peekUnicodeEscape();
|
|
if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) {
|
|
pos += 6;
|
|
tokenFlags |= 1024;
|
|
tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
|
|
return token = getIdentifierToken();
|
|
}
|
|
error(ts.Diagnostics.Invalid_character);
|
|
pos++;
|
|
return token = 0;
|
|
case 35:
|
|
if (pos !== 0 && text[pos + 1] === "!") {
|
|
error(ts.Diagnostics.can_only_be_used_at_the_start_of_a_file);
|
|
pos++;
|
|
return token = 0;
|
|
}
|
|
if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
|
|
pos++;
|
|
scanIdentifier(codePointAt(text, pos), languageVersion);
|
|
}
|
|
else {
|
|
tokenValue = String.fromCharCode(codePointAt(text, pos));
|
|
error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
|
|
}
|
|
return token = 80;
|
|
default:
|
|
var identifierKind = scanIdentifier(ch, languageVersion);
|
|
if (identifierKind) {
|
|
return token = identifierKind;
|
|
}
|
|
else if (isWhiteSpaceSingleLine(ch)) {
|
|
pos += charSize(ch);
|
|
continue;
|
|
}
|
|
else if (isLineBreak(ch)) {
|
|
tokenFlags |= 1;
|
|
pos += charSize(ch);
|
|
continue;
|
|
}
|
|
var size = charSize(ch);
|
|
error(ts.Diagnostics.Invalid_character, pos, size);
|
|
pos += size;
|
|
return token = 0;
|
|
}
|
|
}
|
|
}
|
|
function reScanInvalidIdentifier() {
|
|
ts.Debug.assert(token === 0, "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'.");
|
|
pos = tokenPos = startPos;
|
|
tokenFlags = 0;
|
|
var ch = codePointAt(text, pos);
|
|
var identifierKind = scanIdentifier(ch, 99);
|
|
if (identifierKind) {
|
|
return token = identifierKind;
|
|
}
|
|
pos += charSize(ch);
|
|
return token;
|
|
}
|
|
function scanIdentifier(startCharacter, languageVersion) {
|
|
var ch = startCharacter;
|
|
if (isIdentifierStart(ch, languageVersion)) {
|
|
pos += charSize(ch);
|
|
while (pos < end && isIdentifierPart(ch = codePointAt(text, pos), languageVersion))
|
|
pos += charSize(ch);
|
|
tokenValue = text.substring(tokenPos, pos);
|
|
if (ch === 92) {
|
|
tokenValue += scanIdentifierParts();
|
|
}
|
|
return getIdentifierToken();
|
|
}
|
|
}
|
|
function reScanGreaterToken() {
|
|
if (token === 31) {
|
|
if (text.charCodeAt(pos) === 62) {
|
|
if (text.charCodeAt(pos + 1) === 62) {
|
|
if (text.charCodeAt(pos + 2) === 61) {
|
|
return pos += 3, token = 72;
|
|
}
|
|
return pos += 2, token = 49;
|
|
}
|
|
if (text.charCodeAt(pos + 1) === 61) {
|
|
return pos += 2, token = 71;
|
|
}
|
|
pos++;
|
|
return token = 48;
|
|
}
|
|
if (text.charCodeAt(pos) === 61) {
|
|
pos++;
|
|
return token = 33;
|
|
}
|
|
}
|
|
return token;
|
|
}
|
|
function reScanAsteriskEqualsToken() {
|
|
ts.Debug.assert(token === 66, "'reScanAsteriskEqualsToken' should only be called on a '*='");
|
|
pos = tokenPos + 1;
|
|
return token = 63;
|
|
}
|
|
function reScanSlashToken() {
|
|
if (token === 43 || token === 68) {
|
|
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 = 13;
|
|
}
|
|
return token;
|
|
}
|
|
function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
|
|
var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
|
|
if (type === undefined) {
|
|
return commentDirectives;
|
|
}
|
|
return ts.append(commentDirectives, {
|
|
range: { pos: lineStart, end: pos },
|
|
type: type,
|
|
});
|
|
}
|
|
function getDirectiveFromComment(text, commentDirectiveRegEx) {
|
|
var match = commentDirectiveRegEx.exec(text);
|
|
if (!match) {
|
|
return undefined;
|
|
}
|
|
switch (match[1]) {
|
|
case "ts-expect-error":
|
|
return 0;
|
|
case "ts-ignore":
|
|
return 1;
|
|
}
|
|
return undefined;
|
|
}
|
|
function reScanTemplateToken(isTaggedTemplate) {
|
|
ts.Debug.assert(token === 19, "'reScanTemplateToken' should only be called on a '}'");
|
|
pos = tokenPos;
|
|
return token = scanTemplateAndSetTokenValue(isTaggedTemplate);
|
|
}
|
|
function reScanTemplateHeadOrNoSubstitutionTemplate() {
|
|
pos = tokenPos;
|
|
return token = scanTemplateAndSetTokenValue(true);
|
|
}
|
|
function reScanJsxToken(allowMultilineJsxText) {
|
|
if (allowMultilineJsxText === void 0) { allowMultilineJsxText = true; }
|
|
pos = tokenPos = startPos;
|
|
return token = scanJsxToken(allowMultilineJsxText);
|
|
}
|
|
function reScanLessThanToken() {
|
|
if (token === 47) {
|
|
pos = tokenPos + 1;
|
|
return token = 29;
|
|
}
|
|
return token;
|
|
}
|
|
function reScanHashToken() {
|
|
if (token === 80) {
|
|
pos = tokenPos + 1;
|
|
return token = 62;
|
|
}
|
|
return token;
|
|
}
|
|
function reScanQuestionToken() {
|
|
ts.Debug.assert(token === 60, "'reScanQuestionToken' should only be called on a '??'");
|
|
pos = tokenPos + 1;
|
|
return token = 57;
|
|
}
|
|
function scanJsxToken(allowMultilineJsxText) {
|
|
if (allowMultilineJsxText === void 0) { allowMultilineJsxText = true; }
|
|
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 = 30;
|
|
}
|
|
pos++;
|
|
return token = 29;
|
|
}
|
|
if (char === 123) {
|
|
pos++;
|
|
return token = 18;
|
|
}
|
|
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 (char === 62) {
|
|
error(ts.Diagnostics.Unexpected_token_Did_you_mean_or_gt, pos, 1);
|
|
}
|
|
if (char === 125) {
|
|
error(ts.Diagnostics.Unexpected_token_Did_you_mean_or_rbrace, pos, 1);
|
|
}
|
|
if (isLineBreak(char) && firstNonWhitespace === 0) {
|
|
firstNonWhitespace = -1;
|
|
}
|
|
else if (!allowMultilineJsxText && isLineBreak(char) && firstNonWhitespace > 0) {
|
|
break;
|
|
}
|
|
else if (!isWhiteSpaceLike(char)) {
|
|
firstNonWhitespace = pos;
|
|
}
|
|
pos++;
|
|
}
|
|
tokenValue = text.substring(startPos, pos);
|
|
return firstNonWhitespace === -1 ? 12 : 11;
|
|
}
|
|
function scanJsxIdentifier() {
|
|
if (tokenIsIdentifierOrKeyword(token)) {
|
|
var namespaceSeparator = false;
|
|
while (pos < end) {
|
|
var ch = text.charCodeAt(pos);
|
|
if (ch === 45) {
|
|
tokenValue += "-";
|
|
pos++;
|
|
continue;
|
|
}
|
|
else if (ch === 58 && !namespaceSeparator) {
|
|
tokenValue += ":";
|
|
pos++;
|
|
namespaceSeparator = true;
|
|
token = 79;
|
|
continue;
|
|
}
|
|
var oldPos = pos;
|
|
tokenValue += scanIdentifierParts();
|
|
if (pos === oldPos) {
|
|
break;
|
|
}
|
|
}
|
|
if (tokenValue.slice(-1) === ":") {
|
|
tokenValue = tokenValue.slice(0, -1);
|
|
pos--;
|
|
}
|
|
return getIdentifierToken();
|
|
}
|
|
return token;
|
|
}
|
|
function scanJsxAttributeValue() {
|
|
startPos = pos;
|
|
switch (text.charCodeAt(pos)) {
|
|
case 34:
|
|
case 39:
|
|
tokenValue = scanString(true);
|
|
return token = 10;
|
|
default:
|
|
return scan();
|
|
}
|
|
}
|
|
function reScanJsxAttributeValue() {
|
|
pos = tokenPos = startPos;
|
|
return scanJsxAttributeValue();
|
|
}
|
|
function scanJsDocToken() {
|
|
startPos = tokenPos = pos;
|
|
tokenFlags = 0;
|
|
if (pos >= end) {
|
|
return token = 1;
|
|
}
|
|
var ch = codePointAt(text, pos);
|
|
pos += charSize(ch);
|
|
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 = 59;
|
|
case 13:
|
|
if (text.charCodeAt(pos) === 10) {
|
|
pos++;
|
|
}
|
|
case 10:
|
|
tokenFlags |= 1;
|
|
return token = 4;
|
|
case 42:
|
|
return token = 41;
|
|
case 123:
|
|
return token = 18;
|
|
case 125:
|
|
return token = 19;
|
|
case 91:
|
|
return token = 22;
|
|
case 93:
|
|
return token = 23;
|
|
case 60:
|
|
return token = 29;
|
|
case 62:
|
|
return token = 31;
|
|
case 61:
|
|
return token = 63;
|
|
case 44:
|
|
return token = 27;
|
|
case 46:
|
|
return token = 24;
|
|
case 96:
|
|
return token = 61;
|
|
case 35:
|
|
return token = 62;
|
|
case 92:
|
|
pos--;
|
|
var extendedCookedChar = peekExtendedUnicodeEscape();
|
|
if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) {
|
|
pos += 3;
|
|
tokenFlags |= 8;
|
|
tokenValue = scanExtendedUnicodeEscape() + scanIdentifierParts();
|
|
return token = getIdentifierToken();
|
|
}
|
|
var cookedChar = peekUnicodeEscape();
|
|
if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) {
|
|
pos += 6;
|
|
tokenFlags |= 1024;
|
|
tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
|
|
return token = getIdentifierToken();
|
|
}
|
|
pos++;
|
|
return token = 0;
|
|
}
|
|
if (isIdentifierStart(ch, languageVersion)) {
|
|
var char = ch;
|
|
while (pos < end && isIdentifierPart(char = codePointAt(text, pos), languageVersion) || text.charCodeAt(pos) === 45)
|
|
pos += charSize(char);
|
|
tokenValue = text.substring(tokenPos, pos);
|
|
if (char === 92) {
|
|
tokenValue += scanIdentifierParts();
|
|
}
|
|
return token = getIdentifierToken();
|
|
}
|
|
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;
|
|
var saveErrorExpectations = commentDirectives;
|
|
setText(text, start, length);
|
|
var result = callback();
|
|
end = saveEnd;
|
|
pos = savePos;
|
|
startPos = saveStartPos;
|
|
tokenPos = saveTokenPos;
|
|
token = saveToken;
|
|
tokenValue = saveTokenValue;
|
|
tokenFlags = saveTokenFlags;
|
|
commentDirectives = saveErrorExpectations;
|
|
return result;
|
|
}
|
|
function lookAhead(callback) {
|
|
return speculationHelper(callback, true);
|
|
}
|
|
function tryScan(callback) {
|
|
return speculationHelper(callback, false);
|
|
}
|
|
function getText() {
|
|
return text;
|
|
}
|
|
function clearCommentDirectives() {
|
|
commentDirectives = undefined;
|
|
}
|
|
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;
|
|
}
|
|
function setInJSDocType(inType) {
|
|
inJSDocType += inType ? 1 : -1;
|
|
}
|
|
}
|
|
ts.createScanner = createScanner;
|
|
var codePointAt = String.prototype.codePointAt ? function (s, i) { return s.codePointAt(i); } : function codePointAt(str, i) {
|
|
var size = str.length;
|
|
if (i < 0 || i >= size) {
|
|
return undefined;
|
|
}
|
|
var first = str.charCodeAt(i);
|
|
if (first >= 0xD800 && first <= 0xDBFF && size > i + 1) {
|
|
var second = str.charCodeAt(i + 1);
|
|
if (second >= 0xDC00 && second <= 0xDFFF) {
|
|
return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
|
|
}
|
|
}
|
|
return first;
|
|
};
|
|
function charSize(ch) {
|
|
if (ch >= 0x10000) {
|
|
return 2;
|
|
}
|
|
return 1;
|
|
}
|
|
function utf16EncodeAsStringFallback(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);
|
|
}
|
|
var utf16EncodeAsStringWorker = String.fromCodePoint ? function (codePoint) { return String.fromCodePoint(codePoint); } : utf16EncodeAsStringFallback;
|
|
function utf16EncodeAsString(codePoint) {
|
|
return utf16EncodeAsStringWorker(codePoint);
|
|
}
|
|
ts.utf16EncodeAsString = utf16EncodeAsString;
|
|
})(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;
|
|
function getDefaultLibFileName(options) {
|
|
switch (ts.getEmitScriptTarget(options)) {
|
|
case 99:
|
|
return "lib.esnext.full.d.ts";
|
|
case 9:
|
|
return "lib.es2022.full.d.ts";
|
|
case 8:
|
|
return "lib.es2021.full.d.ts";
|
|
case 7:
|
|
return "lib.es2020.full.d.ts";
|
|
case 6:
|
|
return "lib.es2019.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 textRangeContainsPositionInclusive(span, position) {
|
|
return position >= span.pos && position <= span.end;
|
|
}
|
|
ts.textRangeContainsPositionInclusive = textRangeContainsPositionInclusive;
|
|
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 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 === 163) {
|
|
for (var current = d; current; current = current.parent) {
|
|
if (isFunctionLike(current) || isClassLike(current) || current.kind === 258) {
|
|
return current;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ts.getTypeParameterOwner = getTypeParameterOwner;
|
|
function isParameterPropertyDeclaration(node, parent) {
|
|
return ts.hasSyntacticModifier(node, 16476) && parent.kind === 171;
|
|
}
|
|
ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
|
|
function isEmptyBindingPattern(node) {
|
|
if (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(binding) {
|
|
var node = binding.parent;
|
|
while (ts.isBindingElement(node.parent)) {
|
|
node = node.parent.parent;
|
|
}
|
|
return node.parent;
|
|
}
|
|
ts.walkUpBindingElementsAndPatterns = walkUpBindingElementsAndPatterns;
|
|
function getCombinedFlags(node, getFlags) {
|
|
if (ts.isBindingElement(node)) {
|
|
node = walkUpBindingElementsAndPatterns(node);
|
|
}
|
|
var flags = getFlags(node);
|
|
if (node.kind === 254) {
|
|
node = node.parent;
|
|
}
|
|
if (node && node.kind === 255) {
|
|
flags |= getFlags(node);
|
|
node = node.parent;
|
|
}
|
|
if (node && node.kind === 237) {
|
|
flags |= getFlags(node);
|
|
}
|
|
return flags;
|
|
}
|
|
function getCombinedModifierFlags(node) {
|
|
return getCombinedFlags(node, ts.getEffectiveModifierFlags);
|
|
}
|
|
ts.getCombinedModifierFlags = getCombinedModifierFlags;
|
|
function getCombinedNodeFlagsAlwaysIncludeJSDoc(node) {
|
|
return getCombinedFlags(node, ts.getEffectiveModifierFlagsAlwaysIncludeJSDoc);
|
|
}
|
|
ts.getCombinedNodeFlagsAlwaysIncludeJSDoc = getCombinedNodeFlagsAlwaysIncludeJSDoc;
|
|
function getCombinedNodeFlags(node) {
|
|
return getCombinedFlags(node, function (n) { return n.flags; });
|
|
}
|
|
ts.getCombinedNodeFlags = getCombinedNodeFlags;
|
|
ts.supportedLocaleDirectories = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-br", "ru", "tr", "zh-cn", "zh-tw"];
|
|
function validateLocaleAndSetLanguage(locale, sys, errors) {
|
|
var lowerCaseLocale = locale.toLowerCase();
|
|
var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(lowerCaseLocale);
|
|
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 (ts.contains(ts.supportedLocaleDirectories, lowerCaseLocale) && !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.setLocalizedDiagnosticMessages(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 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 isParseTreeNode(node) {
|
|
return (node.flags & 8) === 0;
|
|
}
|
|
ts.isParseTreeNode = isParseTreeNode;
|
|
function getParseTreeNode(node, nodeTest) {
|
|
if (node === undefined || isParseTreeNode(node)) {
|
|
return node;
|
|
}
|
|
node = node.original;
|
|
while (node) {
|
|
if (isParseTreeNode(node)) {
|
|
return !nodeTest || nodeTest(node) ? node : undefined;
|
|
}
|
|
node = node.original;
|
|
}
|
|
}
|
|
ts.getParseTreeNode = getParseTreeNode;
|
|
function escapeLeadingUnderscores(identifier) {
|
|
return (identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier);
|
|
}
|
|
ts.escapeLeadingUnderscores = escapeLeadingUnderscores;
|
|
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(identifierOrPrivateName) {
|
|
return unescapeLeadingUnderscores(identifierOrPrivateName.escapedText);
|
|
}
|
|
ts.idText = idText;
|
|
function symbolName(symbol) {
|
|
if (symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) {
|
|
return idText(symbol.valueDeclaration.name);
|
|
}
|
|
return unescapeLeadingUnderscores(symbol.escapedName);
|
|
}
|
|
ts.symbolName = symbolName;
|
|
function nameForNamelessJSDocTypedef(declaration) {
|
|
var hostNode = declaration.parent.parent;
|
|
if (!hostNode) {
|
|
return undefined;
|
|
}
|
|
if (isDeclaration(hostNode)) {
|
|
return getDeclarationIdentifier(hostNode);
|
|
}
|
|
switch (hostNode.kind) {
|
|
case 237:
|
|
if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
|
|
return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
|
|
}
|
|
break;
|
|
case 238:
|
|
var expr = hostNode.expression;
|
|
if (expr.kind === 221 && expr.operatorToken.kind === 63) {
|
|
expr = expr.left;
|
|
}
|
|
switch (expr.kind) {
|
|
case 206:
|
|
return expr.name;
|
|
case 207:
|
|
var arg = expr.argumentExpression;
|
|
if (ts.isIdentifier(arg)) {
|
|
return arg;
|
|
}
|
|
}
|
|
break;
|
|
case 212: {
|
|
return getDeclarationIdentifier(hostNode.expression);
|
|
}
|
|
case 250: {
|
|
if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
|
|
return getDeclarationIdentifier(hostNode.statement);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
function getDeclarationIdentifier(node) {
|
|
var name = getNameOfDeclaration(node);
|
|
return name && ts.isIdentifier(name) ? name : undefined;
|
|
}
|
|
function nodeHasName(statement, name) {
|
|
if (isNamedDeclaration(statement) && ts.isIdentifier(statement.name) && idText(statement.name) === idText(name)) {
|
|
return true;
|
|
}
|
|
if (ts.isVariableStatement(statement) && ts.some(statement.declarationList.declarations, function (d) { return nodeHasName(d, name); })) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.nodeHasName = nodeHasName;
|
|
function getNameOfJSDocTypedef(declaration) {
|
|
return declaration.name || nameForNamelessJSDocTypedef(declaration);
|
|
}
|
|
ts.getNameOfJSDocTypedef = getNameOfJSDocTypedef;
|
|
function isNamedDeclaration(node) {
|
|
return !!node.name;
|
|
}
|
|
ts.isNamedDeclaration = isNamedDeclaration;
|
|
function getNonAssignedNameOfDeclaration(declaration) {
|
|
switch (declaration.kind) {
|
|
case 79:
|
|
return declaration;
|
|
case 347:
|
|
case 340: {
|
|
var name = declaration.name;
|
|
if (name.kind === 161) {
|
|
return name.right;
|
|
}
|
|
break;
|
|
}
|
|
case 208:
|
|
case 221: {
|
|
var expr_1 = declaration;
|
|
switch (ts.getAssignmentDeclarationKind(expr_1)) {
|
|
case 1:
|
|
case 4:
|
|
case 5:
|
|
case 3:
|
|
return ts.getElementOrPropertyAccessArgumentExpressionOrName(expr_1.left);
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
return expr_1.arguments[1];
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
case 345:
|
|
return getNameOfJSDocTypedef(declaration);
|
|
case 339:
|
|
return nameForNamelessJSDocTypedef(declaration);
|
|
case 271: {
|
|
var expression = declaration.expression;
|
|
return ts.isIdentifier(expression) ? expression : undefined;
|
|
}
|
|
case 207:
|
|
var expr = declaration;
|
|
if (ts.isBindableStaticElementAccessExpression(expr)) {
|
|
return expr.argumentExpression;
|
|
}
|
|
}
|
|
return declaration.name;
|
|
}
|
|
ts.getNonAssignedNameOfDeclaration = getNonAssignedNameOfDeclaration;
|
|
function getNameOfDeclaration(declaration) {
|
|
if (declaration === undefined)
|
|
return undefined;
|
|
return getNonAssignedNameOfDeclaration(declaration) ||
|
|
(ts.isFunctionExpression(declaration) || ts.isArrowFunction(declaration) || ts.isClassExpression(declaration) ? getAssignedName(declaration) : undefined);
|
|
}
|
|
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.isAccessExpression(node.parent.left)) {
|
|
return ts.getElementOrPropertyAccessArgumentExpressionOrName(node.parent.left);
|
|
}
|
|
}
|
|
else if (ts.isVariableDeclaration(node.parent) && ts.isIdentifier(node.parent.name)) {
|
|
return node.parent.name;
|
|
}
|
|
}
|
|
ts.getAssignedName = getAssignedName;
|
|
function getDecorators(node) {
|
|
if (ts.hasDecorators(node)) {
|
|
return ts.filter(node.modifiers, ts.isDecorator);
|
|
}
|
|
}
|
|
ts.getDecorators = getDecorators;
|
|
function getModifiers(node) {
|
|
if (ts.hasSyntacticModifier(node, 125951)) {
|
|
return ts.filter(node.modifiers, isModifier);
|
|
}
|
|
}
|
|
ts.getModifiers = getModifiers;
|
|
function getJSDocParameterTagsWorker(param, noCache) {
|
|
if (param.name) {
|
|
if (ts.isIdentifier(param.name)) {
|
|
var name_1 = param.name.escapedText;
|
|
return getJSDocTagsWorker(param.parent, noCache).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 = getJSDocTagsWorker(param.parent, noCache).filter(ts.isJSDocParameterTag);
|
|
if (i < paramTags.length) {
|
|
return [paramTags[i]];
|
|
}
|
|
}
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function getJSDocParameterTags(param) {
|
|
return getJSDocParameterTagsWorker(param, false);
|
|
}
|
|
ts.getJSDocParameterTags = getJSDocParameterTags;
|
|
function getJSDocParameterTagsNoCache(param) {
|
|
return getJSDocParameterTagsWorker(param, true);
|
|
}
|
|
ts.getJSDocParameterTagsNoCache = getJSDocParameterTagsNoCache;
|
|
function getJSDocTypeParameterTagsWorker(param, noCache) {
|
|
var name = param.name.escapedText;
|
|
return getJSDocTagsWorker(param.parent, noCache).filter(function (tag) {
|
|
return ts.isJSDocTemplateTag(tag) && tag.typeParameters.some(function (tp) { return tp.name.escapedText === name; });
|
|
});
|
|
}
|
|
function getJSDocTypeParameterTags(param) {
|
|
return getJSDocTypeParameterTagsWorker(param, false);
|
|
}
|
|
ts.getJSDocTypeParameterTags = getJSDocTypeParameterTags;
|
|
function getJSDocTypeParameterTagsNoCache(param) {
|
|
return getJSDocTypeParameterTagsWorker(param, true);
|
|
}
|
|
ts.getJSDocTypeParameterTagsNoCache = getJSDocTypeParameterTagsNoCache;
|
|
function hasJSDocParameterTags(node) {
|
|
return !!getFirstJSDocTag(node, ts.isJSDocParameterTag);
|
|
}
|
|
ts.hasJSDocParameterTags = hasJSDocParameterTags;
|
|
function getJSDocAugmentsTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocAugmentsTag);
|
|
}
|
|
ts.getJSDocAugmentsTag = getJSDocAugmentsTag;
|
|
function getJSDocImplementsTags(node) {
|
|
return getAllJSDocTags(node, ts.isJSDocImplementsTag);
|
|
}
|
|
ts.getJSDocImplementsTags = getJSDocImplementsTags;
|
|
function getJSDocClassTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocClassTag);
|
|
}
|
|
ts.getJSDocClassTag = getJSDocClassTag;
|
|
function getJSDocPublicTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocPublicTag);
|
|
}
|
|
ts.getJSDocPublicTag = getJSDocPublicTag;
|
|
function getJSDocPublicTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocPublicTag, true);
|
|
}
|
|
ts.getJSDocPublicTagNoCache = getJSDocPublicTagNoCache;
|
|
function getJSDocPrivateTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocPrivateTag);
|
|
}
|
|
ts.getJSDocPrivateTag = getJSDocPrivateTag;
|
|
function getJSDocPrivateTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocPrivateTag, true);
|
|
}
|
|
ts.getJSDocPrivateTagNoCache = getJSDocPrivateTagNoCache;
|
|
function getJSDocProtectedTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocProtectedTag);
|
|
}
|
|
ts.getJSDocProtectedTag = getJSDocProtectedTag;
|
|
function getJSDocProtectedTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocProtectedTag, true);
|
|
}
|
|
ts.getJSDocProtectedTagNoCache = getJSDocProtectedTagNoCache;
|
|
function getJSDocReadonlyTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocReadonlyTag);
|
|
}
|
|
ts.getJSDocReadonlyTag = getJSDocReadonlyTag;
|
|
function getJSDocReadonlyTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocReadonlyTag, true);
|
|
}
|
|
ts.getJSDocReadonlyTagNoCache = getJSDocReadonlyTagNoCache;
|
|
function getJSDocOverrideTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocOverrideTag, true);
|
|
}
|
|
ts.getJSDocOverrideTagNoCache = getJSDocOverrideTagNoCache;
|
|
function getJSDocDeprecatedTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocDeprecatedTag);
|
|
}
|
|
ts.getJSDocDeprecatedTag = getJSDocDeprecatedTag;
|
|
function getJSDocDeprecatedTagNoCache(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocDeprecatedTag, true);
|
|
}
|
|
ts.getJSDocDeprecatedTagNoCache = getJSDocDeprecatedTagNoCache;
|
|
function getJSDocEnumTag(node) {
|
|
return getFirstJSDocTag(node, ts.isJSDocEnumTag);
|
|
}
|
|
ts.getJSDocEnumTag = getJSDocEnumTag;
|
|
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);
|
|
if (returnTag && returnTag.typeExpression) {
|
|
return returnTag.typeExpression.type;
|
|
}
|
|
var typeTag = getJSDocTypeTag(node);
|
|
if (typeTag && typeTag.typeExpression) {
|
|
var type = typeTag.typeExpression.type;
|
|
if (ts.isTypeLiteralNode(type)) {
|
|
var sig = ts.find(type.members, ts.isCallSignatureDeclaration);
|
|
return sig && sig.type;
|
|
}
|
|
if (ts.isFunctionTypeNode(type) || ts.isJSDocFunctionType(type)) {
|
|
return type.type;
|
|
}
|
|
}
|
|
}
|
|
ts.getJSDocReturnType = getJSDocReturnType;
|
|
function getJSDocTagsWorker(node, noCache) {
|
|
var tags = node.jsDocCache;
|
|
if (tags === undefined || noCache) {
|
|
var comments = ts.getJSDocCommentsAndTags(node, noCache);
|
|
ts.Debug.assert(comments.length < 2 || comments[0] !== comments[1]);
|
|
tags = ts.flatMap(comments, function (j) { return ts.isJSDoc(j) ? j.tags : j; });
|
|
if (!noCache) {
|
|
node.jsDocCache = tags;
|
|
}
|
|
}
|
|
return tags;
|
|
}
|
|
function getJSDocTags(node) {
|
|
return getJSDocTagsWorker(node, false);
|
|
}
|
|
ts.getJSDocTags = getJSDocTags;
|
|
function getJSDocTagsNoCache(node) {
|
|
return getJSDocTagsWorker(node, true);
|
|
}
|
|
ts.getJSDocTagsNoCache = getJSDocTagsNoCache;
|
|
function getFirstJSDocTag(node, predicate, noCache) {
|
|
return ts.find(getJSDocTagsWorker(node, noCache), predicate);
|
|
}
|
|
function getAllJSDocTags(node, predicate) {
|
|
return getJSDocTags(node).filter(predicate);
|
|
}
|
|
ts.getAllJSDocTags = getAllJSDocTags;
|
|
function getAllJSDocTagsOfKind(node, kind) {
|
|
return getJSDocTags(node).filter(function (doc) { return doc.kind === kind; });
|
|
}
|
|
ts.getAllJSDocTagsOfKind = getAllJSDocTagsOfKind;
|
|
function getTextOfJSDocComment(comment) {
|
|
return typeof comment === "string" ? comment
|
|
: comment === null || comment === void 0 ? void 0 : comment.map(function (c) { return c.kind === 321 ? c.text : formatJSDocLink(c); }).join("");
|
|
}
|
|
ts.getTextOfJSDocComment = getTextOfJSDocComment;
|
|
function formatJSDocLink(link) {
|
|
var kind = link.kind === 324 ? "link"
|
|
: link.kind === 325 ? "linkcode"
|
|
: "linkplain";
|
|
var name = link.name ? ts.entityNameToString(link.name) : "";
|
|
var space = link.name && link.text.startsWith("://") ? "" : " ";
|
|
return "{@".concat(kind, " ").concat(name).concat(space).concat(link.text, "}");
|
|
}
|
|
function getEffectiveTypeParameterDeclarations(node) {
|
|
if (ts.isJSDocSignature(node)) {
|
|
return ts.emptyArray;
|
|
}
|
|
if (ts.isJSDocTypeAlias(node)) {
|
|
ts.Debug.assert(node.parent.kind === 320);
|
|
return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
|
|
}
|
|
if (node.typeParameters) {
|
|
return node.typeParameters;
|
|
}
|
|
if (ts.canHaveIllegalTypeParameters(node) && node.typeParameters) {
|
|
return node.typeParameters;
|
|
}
|
|
if (ts.isInJSFile(node)) {
|
|
var decls = ts.getJSDocTypeParameterDeclarations(node);
|
|
if (decls.length) {
|
|
return decls;
|
|
}
|
|
var typeTag = getJSDocType(node);
|
|
if (typeTag && ts.isFunctionTypeNode(typeTag) && typeTag.typeParameters) {
|
|
return typeTag.typeParameters;
|
|
}
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
ts.getEffectiveTypeParameterDeclarations = getEffectiveTypeParameterDeclarations;
|
|
function getEffectiveConstraintOfTypeParameter(node) {
|
|
return node.constraint ? node.constraint :
|
|
ts.isJSDocTemplateTag(node.parent) && node === node.parent.typeParameters[0] ? node.parent.constraint :
|
|
undefined;
|
|
}
|
|
ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
|
|
function isMemberName(node) {
|
|
return node.kind === 79 || node.kind === 80;
|
|
}
|
|
ts.isMemberName = isMemberName;
|
|
function isGetOrSetAccessorDeclaration(node) {
|
|
return node.kind === 173 || node.kind === 172;
|
|
}
|
|
ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
|
|
function isPropertyAccessChain(node) {
|
|
return ts.isPropertyAccessExpression(node) && !!(node.flags & 32);
|
|
}
|
|
ts.isPropertyAccessChain = isPropertyAccessChain;
|
|
function isElementAccessChain(node) {
|
|
return ts.isElementAccessExpression(node) && !!(node.flags & 32);
|
|
}
|
|
ts.isElementAccessChain = isElementAccessChain;
|
|
function isCallChain(node) {
|
|
return ts.isCallExpression(node) && !!(node.flags & 32);
|
|
}
|
|
ts.isCallChain = isCallChain;
|
|
function isOptionalChain(node) {
|
|
var kind = node.kind;
|
|
return !!(node.flags & 32) &&
|
|
(kind === 206
|
|
|| kind === 207
|
|
|| kind === 208
|
|
|| kind === 230);
|
|
}
|
|
ts.isOptionalChain = isOptionalChain;
|
|
function isOptionalChainRoot(node) {
|
|
return isOptionalChain(node) && !ts.isNonNullExpression(node) && !!node.questionDotToken;
|
|
}
|
|
ts.isOptionalChainRoot = isOptionalChainRoot;
|
|
function isExpressionOfOptionalChainRoot(node) {
|
|
return isOptionalChainRoot(node.parent) && node.parent.expression === node;
|
|
}
|
|
ts.isExpressionOfOptionalChainRoot = isExpressionOfOptionalChainRoot;
|
|
function isOutermostOptionalChain(node) {
|
|
return !isOptionalChain(node.parent)
|
|
|| isOptionalChainRoot(node.parent)
|
|
|| node !== node.parent.expression;
|
|
}
|
|
ts.isOutermostOptionalChain = isOutermostOptionalChain;
|
|
function isNullishCoalesce(node) {
|
|
return node.kind === 221 && node.operatorToken.kind === 60;
|
|
}
|
|
ts.isNullishCoalesce = isNullishCoalesce;
|
|
function isConstTypeReference(node) {
|
|
return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) &&
|
|
node.typeName.escapedText === "const" && !node.typeArguments;
|
|
}
|
|
ts.isConstTypeReference = isConstTypeReference;
|
|
function skipPartiallyEmittedExpressions(node) {
|
|
return ts.skipOuterExpressions(node, 8);
|
|
}
|
|
ts.skipPartiallyEmittedExpressions = skipPartiallyEmittedExpressions;
|
|
function isNonNullChain(node) {
|
|
return ts.isNonNullExpression(node) && !!(node.flags & 32);
|
|
}
|
|
ts.isNonNullChain = isNonNullChain;
|
|
function isBreakOrContinueStatement(node) {
|
|
return node.kind === 246 || node.kind === 245;
|
|
}
|
|
ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
|
|
function isNamedExportBindings(node) {
|
|
return node.kind === 274 || node.kind === 273;
|
|
}
|
|
ts.isNamedExportBindings = isNamedExportBindings;
|
|
function isUnparsedTextLike(node) {
|
|
switch (node.kind) {
|
|
case 302:
|
|
case 303:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isUnparsedTextLike = isUnparsedTextLike;
|
|
function isUnparsedNode(node) {
|
|
return isUnparsedTextLike(node) ||
|
|
node.kind === 300 ||
|
|
node.kind === 304;
|
|
}
|
|
ts.isUnparsedNode = isUnparsedNode;
|
|
function isJSDocPropertyLikeTag(node) {
|
|
return node.kind === 347 || node.kind === 340;
|
|
}
|
|
ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
|
|
function isNode(node) {
|
|
return isNodeKind(node.kind);
|
|
}
|
|
ts.isNode = isNode;
|
|
function isNodeKind(kind) {
|
|
return kind >= 161;
|
|
}
|
|
ts.isNodeKind = isNodeKind;
|
|
function isTokenKind(kind) {
|
|
return kind >= 0 && kind <= 160;
|
|
}
|
|
ts.isTokenKind = isTokenKind;
|
|
function isToken(n) {
|
|
return isTokenKind(n.kind);
|
|
}
|
|
ts.isToken = isToken;
|
|
function isNodeArray(array) {
|
|
return array.hasOwnProperty("pos") && array.hasOwnProperty("end");
|
|
}
|
|
ts.isNodeArray = isNodeArray;
|
|
function isLiteralKind(kind) {
|
|
return 8 <= kind && kind <= 14;
|
|
}
|
|
ts.isLiteralKind = isLiteralKind;
|
|
function isLiteralExpression(node) {
|
|
return isLiteralKind(node.kind);
|
|
}
|
|
ts.isLiteralExpression = isLiteralExpression;
|
|
function isLiteralExpressionOfObject(node) {
|
|
switch (node.kind) {
|
|
case 205:
|
|
case 204:
|
|
case 13:
|
|
case 213:
|
|
case 226:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isLiteralExpressionOfObject = isLiteralExpressionOfObject;
|
|
function isTemplateLiteralKind(kind) {
|
|
return 14 <= kind && kind <= 17;
|
|
}
|
|
ts.isTemplateLiteralKind = isTemplateLiteralKind;
|
|
function isTemplateLiteralToken(node) {
|
|
return isTemplateLiteralKind(node.kind);
|
|
}
|
|
ts.isTemplateLiteralToken = isTemplateLiteralToken;
|
|
function isTemplateMiddleOrTemplateTail(node) {
|
|
var kind = node.kind;
|
|
return kind === 16
|
|
|| kind === 17;
|
|
}
|
|
ts.isTemplateMiddleOrTemplateTail = isTemplateMiddleOrTemplateTail;
|
|
function isImportOrExportSpecifier(node) {
|
|
return ts.isImportSpecifier(node) || ts.isExportSpecifier(node);
|
|
}
|
|
ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
|
|
function isTypeOnlyImportOrExportDeclaration(node) {
|
|
switch (node.kind) {
|
|
case 270:
|
|
case 275:
|
|
return node.isTypeOnly || node.parent.parent.isTypeOnly;
|
|
case 268:
|
|
return node.parent.isTypeOnly;
|
|
case 267:
|
|
case 265:
|
|
return node.isTypeOnly;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isTypeOnlyImportOrExportDeclaration = isTypeOnlyImportOrExportDeclaration;
|
|
function isAssertionKey(node) {
|
|
return ts.isStringLiteral(node) || ts.isIdentifier(node);
|
|
}
|
|
ts.isAssertionKey = isAssertionKey;
|
|
function isStringTextContainingNode(node) {
|
|
return node.kind === 10 || isTemplateLiteralKind(node.kind);
|
|
}
|
|
ts.isStringTextContainingNode = isStringTextContainingNode;
|
|
function isGeneratedIdentifier(node) {
|
|
return ts.isIdentifier(node) && (node.autoGenerateFlags & 7) > 0;
|
|
}
|
|
ts.isGeneratedIdentifier = isGeneratedIdentifier;
|
|
function isPrivateIdentifierClassElementDeclaration(node) {
|
|
return (ts.isPropertyDeclaration(node) || isMethodOrAccessor(node)) && ts.isPrivateIdentifier(node.name);
|
|
}
|
|
ts.isPrivateIdentifierClassElementDeclaration = isPrivateIdentifierClassElementDeclaration;
|
|
function isPrivateIdentifierPropertyAccessExpression(node) {
|
|
return ts.isPropertyAccessExpression(node) && ts.isPrivateIdentifier(node.name);
|
|
}
|
|
ts.isPrivateIdentifierPropertyAccessExpression = isPrivateIdentifierPropertyAccessExpression;
|
|
function isModifierKind(token) {
|
|
switch (token) {
|
|
case 126:
|
|
case 131:
|
|
case 85:
|
|
case 135:
|
|
case 88:
|
|
case 93:
|
|
case 101:
|
|
case 123:
|
|
case 121:
|
|
case 122:
|
|
case 145:
|
|
case 124:
|
|
case 144:
|
|
case 159:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isModifierKind = isModifierKind;
|
|
function isParameterPropertyModifier(kind) {
|
|
return !!(ts.modifierToFlag(kind) & 16476);
|
|
}
|
|
ts.isParameterPropertyModifier = isParameterPropertyModifier;
|
|
function isClassMemberModifier(idToken) {
|
|
return isParameterPropertyModifier(idToken) || idToken === 124 || idToken === 159;
|
|
}
|
|
ts.isClassMemberModifier = isClassMemberModifier;
|
|
function isModifier(node) {
|
|
return isModifierKind(node.kind);
|
|
}
|
|
ts.isModifier = isModifier;
|
|
function isEntityName(node) {
|
|
var kind = node.kind;
|
|
return kind === 161
|
|
|| kind === 79;
|
|
}
|
|
ts.isEntityName = isEntityName;
|
|
function isPropertyName(node) {
|
|
var kind = node.kind;
|
|
return kind === 79
|
|
|| kind === 80
|
|
|| kind === 10
|
|
|| kind === 8
|
|
|| kind === 162;
|
|
}
|
|
ts.isPropertyName = isPropertyName;
|
|
function isBindingName(node) {
|
|
var kind = node.kind;
|
|
return kind === 79
|
|
|| kind === 201
|
|
|| kind === 202;
|
|
}
|
|
ts.isBindingName = isBindingName;
|
|
function isFunctionLike(node) {
|
|
return !!node && isFunctionLikeKind(node.kind);
|
|
}
|
|
ts.isFunctionLike = isFunctionLike;
|
|
function isFunctionLikeOrClassStaticBlockDeclaration(node) {
|
|
return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
|
|
}
|
|
ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
|
|
function isFunctionLikeDeclaration(node) {
|
|
return node && isFunctionLikeDeclarationKind(node.kind);
|
|
}
|
|
ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
|
|
function isBooleanLiteral(node) {
|
|
return node.kind === 110 || node.kind === 95;
|
|
}
|
|
ts.isBooleanLiteral = isBooleanLiteral;
|
|
function isFunctionLikeDeclarationKind(kind) {
|
|
switch (kind) {
|
|
case 256:
|
|
case 169:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 213:
|
|
case 214:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isFunctionLikeKind(kind) {
|
|
switch (kind) {
|
|
case 168:
|
|
case 174:
|
|
case 323:
|
|
case 175:
|
|
case 176:
|
|
case 179:
|
|
case 317:
|
|
case 180:
|
|
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 === 171
|
|
|| kind === 167
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173
|
|
|| kind === 176
|
|
|| kind === 170
|
|
|| kind === 234;
|
|
}
|
|
ts.isClassElement = isClassElement;
|
|
function isClassLike(node) {
|
|
return node && (node.kind === 257 || node.kind === 226);
|
|
}
|
|
ts.isClassLike = isClassLike;
|
|
function isAccessor(node) {
|
|
return node && (node.kind === 172 || node.kind === 173);
|
|
}
|
|
ts.isAccessor = isAccessor;
|
|
function isMethodOrAccessor(node) {
|
|
switch (node.kind) {
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isMethodOrAccessor = isMethodOrAccessor;
|
|
function isModifierLike(node) {
|
|
return isModifier(node) || ts.isDecorator(node);
|
|
}
|
|
ts.isModifierLike = isModifierLike;
|
|
function isTypeElement(node) {
|
|
var kind = node.kind;
|
|
return kind === 175
|
|
|| kind === 174
|
|
|| kind === 166
|
|
|| kind === 168
|
|
|| kind === 176
|
|
|| kind === 172
|
|
|| kind === 173;
|
|
}
|
|
ts.isTypeElement = isTypeElement;
|
|
function isClassOrTypeElement(node) {
|
|
return isTypeElement(node) || isClassElement(node);
|
|
}
|
|
ts.isClassOrTypeElement = isClassOrTypeElement;
|
|
function isObjectLiteralElementLike(node) {
|
|
var kind = node.kind;
|
|
return kind === 296
|
|
|| kind === 297
|
|
|| kind === 298
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173;
|
|
}
|
|
ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
|
|
function isTypeNode(node) {
|
|
return ts.isTypeNodeKind(node.kind);
|
|
}
|
|
ts.isTypeNode = isTypeNode;
|
|
function isFunctionOrConstructorTypeNode(node) {
|
|
switch (node.kind) {
|
|
case 179:
|
|
case 180:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isFunctionOrConstructorTypeNode = isFunctionOrConstructorTypeNode;
|
|
function isBindingPattern(node) {
|
|
if (node) {
|
|
var kind = node.kind;
|
|
return kind === 202
|
|
|| kind === 201;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isBindingPattern = isBindingPattern;
|
|
function isAssignmentPattern(node) {
|
|
var kind = node.kind;
|
|
return kind === 204
|
|
|| kind === 205;
|
|
}
|
|
ts.isAssignmentPattern = isAssignmentPattern;
|
|
function isArrayBindingElement(node) {
|
|
var kind = node.kind;
|
|
return kind === 203
|
|
|| kind === 227;
|
|
}
|
|
ts.isArrayBindingElement = isArrayBindingElement;
|
|
function isDeclarationBindingElement(bindingElement) {
|
|
switch (bindingElement.kind) {
|
|
case 254:
|
|
case 164:
|
|
case 203:
|
|
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 201:
|
|
case 205:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
|
|
function isObjectBindingOrAssignmentElement(node) {
|
|
switch (node.kind) {
|
|
case 203:
|
|
case 296:
|
|
case 297:
|
|
case 298:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
|
|
function isArrayBindingOrAssignmentPattern(node) {
|
|
switch (node.kind) {
|
|
case 202:
|
|
case 204:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern;
|
|
function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
|
|
var kind = node.kind;
|
|
return kind === 206
|
|
|| kind === 161
|
|
|| kind === 200;
|
|
}
|
|
ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
|
|
function isPropertyAccessOrQualifiedName(node) {
|
|
var kind = node.kind;
|
|
return kind === 206
|
|
|| kind === 161;
|
|
}
|
|
ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
|
|
function isCallLikeExpression(node) {
|
|
switch (node.kind) {
|
|
case 280:
|
|
case 279:
|
|
case 208:
|
|
case 209:
|
|
case 210:
|
|
case 165:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isCallLikeExpression = isCallLikeExpression;
|
|
function isCallOrNewExpression(node) {
|
|
return node.kind === 208 || node.kind === 209;
|
|
}
|
|
ts.isCallOrNewExpression = isCallOrNewExpression;
|
|
function isTemplateLiteral(node) {
|
|
var kind = node.kind;
|
|
return kind === 223
|
|
|| kind === 14;
|
|
}
|
|
ts.isTemplateLiteral = isTemplateLiteral;
|
|
function isLeftHandSideExpression(node) {
|
|
return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind);
|
|
}
|
|
ts.isLeftHandSideExpression = isLeftHandSideExpression;
|
|
function isLeftHandSideExpressionKind(kind) {
|
|
switch (kind) {
|
|
case 206:
|
|
case 207:
|
|
case 209:
|
|
case 208:
|
|
case 278:
|
|
case 279:
|
|
case 282:
|
|
case 210:
|
|
case 204:
|
|
case 212:
|
|
case 205:
|
|
case 226:
|
|
case 213:
|
|
case 79:
|
|
case 80:
|
|
case 13:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 14:
|
|
case 223:
|
|
case 95:
|
|
case 104:
|
|
case 108:
|
|
case 110:
|
|
case 106:
|
|
case 230:
|
|
case 228:
|
|
case 231:
|
|
case 100:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isUnaryExpression(node) {
|
|
return isUnaryExpressionKind(skipPartiallyEmittedExpressions(node).kind);
|
|
}
|
|
ts.isUnaryExpression = isUnaryExpression;
|
|
function isUnaryExpressionKind(kind) {
|
|
switch (kind) {
|
|
case 219:
|
|
case 220:
|
|
case 215:
|
|
case 216:
|
|
case 217:
|
|
case 218:
|
|
case 211:
|
|
return true;
|
|
default:
|
|
return isLeftHandSideExpressionKind(kind);
|
|
}
|
|
}
|
|
function isUnaryExpressionWithWrite(expr) {
|
|
switch (expr.kind) {
|
|
case 220:
|
|
return true;
|
|
case 219:
|
|
return expr.operator === 45 ||
|
|
expr.operator === 46;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isUnaryExpressionWithWrite = isUnaryExpressionWithWrite;
|
|
function isExpression(node) {
|
|
return isExpressionKind(skipPartiallyEmittedExpressions(node).kind);
|
|
}
|
|
ts.isExpression = isExpression;
|
|
function isExpressionKind(kind) {
|
|
switch (kind) {
|
|
case 222:
|
|
case 224:
|
|
case 214:
|
|
case 221:
|
|
case 225:
|
|
case 229:
|
|
case 227:
|
|
case 351:
|
|
case 350:
|
|
return true;
|
|
default:
|
|
return isUnaryExpressionKind(kind);
|
|
}
|
|
}
|
|
function isAssertionExpression(node) {
|
|
var kind = node.kind;
|
|
return kind === 211
|
|
|| kind === 229;
|
|
}
|
|
ts.isAssertionExpression = isAssertionExpression;
|
|
function isNotEmittedOrPartiallyEmittedNode(node) {
|
|
return ts.isNotEmittedStatement(node)
|
|
|| ts.isPartiallyEmittedExpression(node);
|
|
}
|
|
ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
|
|
function isIterationStatement(node, lookInLabeledStatements) {
|
|
switch (node.kind) {
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
case 240:
|
|
case 241:
|
|
return true;
|
|
case 250:
|
|
return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isIterationStatement = isIterationStatement;
|
|
function isScopeMarker(node) {
|
|
return ts.isExportAssignment(node) || ts.isExportDeclaration(node);
|
|
}
|
|
ts.isScopeMarker = isScopeMarker;
|
|
function hasScopeMarker(statements) {
|
|
return ts.some(statements, isScopeMarker);
|
|
}
|
|
ts.hasScopeMarker = hasScopeMarker;
|
|
function needsScopeMarker(result) {
|
|
return !ts.isAnyImportOrReExport(result) && !ts.isExportAssignment(result) && !ts.hasSyntacticModifier(result, 1) && !ts.isAmbientModule(result);
|
|
}
|
|
ts.needsScopeMarker = needsScopeMarker;
|
|
function isExternalModuleIndicator(result) {
|
|
return ts.isAnyImportOrReExport(result) || ts.isExportAssignment(result) || ts.hasSyntacticModifier(result, 1);
|
|
}
|
|
ts.isExternalModuleIndicator = isExternalModuleIndicator;
|
|
function isForInOrOfStatement(node) {
|
|
return node.kind === 243 || node.kind === 244;
|
|
}
|
|
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 === 262
|
|
|| kind === 261
|
|
|| kind === 79;
|
|
}
|
|
ts.isModuleBody = isModuleBody;
|
|
function isNamespaceBody(node) {
|
|
var kind = node.kind;
|
|
return kind === 262
|
|
|| kind === 261;
|
|
}
|
|
ts.isNamespaceBody = isNamespaceBody;
|
|
function isJSDocNamespaceBody(node) {
|
|
var kind = node.kind;
|
|
return kind === 79
|
|
|| kind === 261;
|
|
}
|
|
ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
|
|
function isNamedImportBindings(node) {
|
|
var kind = node.kind;
|
|
return kind === 269
|
|
|| kind === 268;
|
|
}
|
|
ts.isNamedImportBindings = isNamedImportBindings;
|
|
function isModuleOrEnumDeclaration(node) {
|
|
return node.kind === 261 || node.kind === 260;
|
|
}
|
|
ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
|
|
function isDeclarationKind(kind) {
|
|
return kind === 214
|
|
|| kind === 203
|
|
|| kind === 257
|
|
|| kind === 226
|
|
|| kind === 170
|
|
|| kind === 171
|
|
|| kind === 260
|
|
|| kind === 299
|
|
|| kind === 275
|
|
|| kind === 256
|
|
|| kind === 213
|
|
|| kind === 172
|
|
|| kind === 267
|
|
|| kind === 265
|
|
|| kind === 270
|
|
|| kind === 258
|
|
|| kind === 285
|
|
|| kind === 169
|
|
|| kind === 168
|
|
|| kind === 261
|
|
|| kind === 264
|
|
|| kind === 268
|
|
|| kind === 274
|
|
|| kind === 164
|
|
|| kind === 296
|
|
|| kind === 167
|
|
|| kind === 166
|
|
|| kind === 173
|
|
|| kind === 297
|
|
|| kind === 259
|
|
|| kind === 163
|
|
|| kind === 254
|
|
|| kind === 345
|
|
|| kind === 338
|
|
|| kind === 347;
|
|
}
|
|
function isDeclarationStatementKind(kind) {
|
|
return kind === 256
|
|
|| kind === 276
|
|
|| kind === 257
|
|
|| kind === 258
|
|
|| kind === 259
|
|
|| kind === 260
|
|
|| kind === 261
|
|
|| kind === 266
|
|
|| kind === 265
|
|
|| kind === 272
|
|
|| kind === 271
|
|
|| kind === 264;
|
|
}
|
|
function isStatementKindButNotDeclarationKind(kind) {
|
|
return kind === 246
|
|
|| kind === 245
|
|
|| kind === 253
|
|
|| kind === 240
|
|
|| kind === 238
|
|
|| kind === 236
|
|
|| kind === 243
|
|
|| kind === 244
|
|
|| kind === 242
|
|
|| kind === 239
|
|
|| kind === 250
|
|
|| kind === 247
|
|
|| kind === 249
|
|
|| kind === 251
|
|
|| kind === 252
|
|
|| kind === 237
|
|
|| kind === 241
|
|
|| kind === 248
|
|
|| kind === 349
|
|
|| kind === 353
|
|
|| kind === 352;
|
|
}
|
|
function isDeclaration(node) {
|
|
if (node.kind === 163) {
|
|
return (node.parent && node.parent.kind !== 344) || ts.isInJSFile(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 !== 235)
|
|
return false;
|
|
if (node.parent !== undefined) {
|
|
if (node.parent.kind === 252 || node.parent.kind === 292) {
|
|
return false;
|
|
}
|
|
}
|
|
return !ts.isFunctionBlock(node);
|
|
}
|
|
function isStatementOrBlock(node) {
|
|
var kind = node.kind;
|
|
return isStatementKindButNotDeclarationKind(kind)
|
|
|| isDeclarationStatementKind(kind)
|
|
|| kind === 235;
|
|
}
|
|
ts.isStatementOrBlock = isStatementOrBlock;
|
|
function isModuleReference(node) {
|
|
var kind = node.kind;
|
|
return kind === 277
|
|
|| kind === 161
|
|
|| kind === 79;
|
|
}
|
|
ts.isModuleReference = isModuleReference;
|
|
function isJsxTagNameExpression(node) {
|
|
var kind = node.kind;
|
|
return kind === 108
|
|
|| kind === 79
|
|
|| kind === 206;
|
|
}
|
|
ts.isJsxTagNameExpression = isJsxTagNameExpression;
|
|
function isJsxChild(node) {
|
|
var kind = node.kind;
|
|
return kind === 278
|
|
|| kind === 288
|
|
|| kind === 279
|
|
|| kind === 11
|
|
|| kind === 282;
|
|
}
|
|
ts.isJsxChild = isJsxChild;
|
|
function isJsxAttributeLike(node) {
|
|
var kind = node.kind;
|
|
return kind === 285
|
|
|| kind === 287;
|
|
}
|
|
ts.isJsxAttributeLike = isJsxAttributeLike;
|
|
function isStringLiteralOrJsxExpression(node) {
|
|
var kind = node.kind;
|
|
return kind === 10
|
|
|| kind === 288;
|
|
}
|
|
ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
|
|
function isJsxOpeningLikeElement(node) {
|
|
var kind = node.kind;
|
|
return kind === 280
|
|
|| kind === 279;
|
|
}
|
|
ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
|
|
function isCaseOrDefaultClause(node) {
|
|
var kind = node.kind;
|
|
return kind === 289
|
|
|| kind === 290;
|
|
}
|
|
ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
|
|
function isJSDocNode(node) {
|
|
return node.kind >= 309 && node.kind <= 347;
|
|
}
|
|
ts.isJSDocNode = isJSDocNode;
|
|
function isJSDocCommentContainingNode(node) {
|
|
return node.kind === 320
|
|
|| node.kind === 319
|
|
|| node.kind === 321
|
|
|| isJSDocLinkLike(node)
|
|
|| isJSDocTag(node)
|
|
|| ts.isJSDocTypeLiteral(node)
|
|
|| ts.isJSDocSignature(node);
|
|
}
|
|
ts.isJSDocCommentContainingNode = isJSDocCommentContainingNode;
|
|
function isJSDocTag(node) {
|
|
return node.kind >= 327 && node.kind <= 347;
|
|
}
|
|
ts.isJSDocTag = isJSDocTag;
|
|
function isSetAccessor(node) {
|
|
return node.kind === 173;
|
|
}
|
|
ts.isSetAccessor = isSetAccessor;
|
|
function isGetAccessor(node) {
|
|
return node.kind === 172;
|
|
}
|
|
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 hasInitializer(node) {
|
|
return !!node.initializer;
|
|
}
|
|
ts.hasInitializer = hasInitializer;
|
|
function hasOnlyExpressionInitializer(node) {
|
|
switch (node.kind) {
|
|
case 254:
|
|
case 164:
|
|
case 203:
|
|
case 167:
|
|
case 296:
|
|
case 299:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
|
|
function isObjectLiteralElement(node) {
|
|
return node.kind === 285 || node.kind === 287 || isObjectLiteralElementLike(node);
|
|
}
|
|
ts.isObjectLiteralElement = isObjectLiteralElement;
|
|
function isTypeReferenceType(node) {
|
|
return node.kind === 178 || node.kind === 228;
|
|
}
|
|
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 === 10 || node.kind === 14;
|
|
}
|
|
ts.isStringLiteralLike = isStringLiteralLike;
|
|
function isJSDocLinkLike(node) {
|
|
return node.kind === 324 || node.kind === 325 || node.kind === 326;
|
|
}
|
|
ts.isJSDocLinkLike = isJSDocLinkLike;
|
|
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 === 318;
|
|
}
|
|
ts.isRestParameter = isRestParameter;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
ts.resolvingEmptyArray = [];
|
|
ts.externalHelpersModuleNameText = "tslib";
|
|
ts.defaultMaximumTruncationLength = 160;
|
|
ts.noTruncationMaximumTruncationLength = 1000000;
|
|
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 getDeclarationsOfKind(symbol, kind) {
|
|
return ts.filter(symbol.declarations || ts.emptyArray, function (d) { return d.kind === kind; });
|
|
}
|
|
ts.getDeclarationsOfKind = getDeclarationsOfKind;
|
|
function createSymbolTable(symbols) {
|
|
var result = new ts.Map();
|
|
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;
|
|
function isTransientSymbol(symbol) {
|
|
return (symbol.flags & 33554432) !== 0;
|
|
}
|
|
ts.isTransientSymbol = isTransientSymbol;
|
|
var stringWriter = createSingleLineStringWriter();
|
|
function createSingleLineStringWriter() {
|
|
var str = "";
|
|
var writeText = function (text) { return str += text; };
|
|
return {
|
|
getText: function () { return str; },
|
|
write: writeText,
|
|
rawWrite: writeText,
|
|
writeKeyword: writeText,
|
|
writeOperator: writeText,
|
|
writePunctuation: writeText,
|
|
writeSpace: writeText,
|
|
writeStringLiteral: writeText,
|
|
writeLiteral: writeText,
|
|
writeParameter: writeText,
|
|
writeProperty: writeText,
|
|
writeSymbol: function (s, _) { return writeText(s); },
|
|
writeTrailingSemicolon: writeText,
|
|
writeComment: writeText,
|
|
getTextPos: function () { return str.length; },
|
|
getLine: function () { return 0; },
|
|
getColumn: function () { return 0; },
|
|
getIndent: function () { return 0; },
|
|
isAtStartOfLine: function () { return false; },
|
|
hasTrailingComment: function () { return false; },
|
|
hasTrailingWhitespace: function () { return !!str.length && ts.isWhiteSpaceLike(str.charCodeAt(str.length - 1)); },
|
|
writeLine: function () { return str += " "; },
|
|
increaseIndent: ts.noop,
|
|
decreaseIndent: ts.noop,
|
|
clear: function () { return str = ""; },
|
|
trackSymbol: function () { return false; },
|
|
reportInaccessibleThisError: ts.noop,
|
|
reportInaccessibleUniqueSymbolError: ts.noop,
|
|
reportPrivateInBaseOfClassExpression: ts.noop,
|
|
};
|
|
}
|
|
function changesAffectModuleResolution(oldOptions, newOptions) {
|
|
return oldOptions.configFilePath !== newOptions.configFilePath ||
|
|
optionsHaveModuleResolutionChanges(oldOptions, newOptions);
|
|
}
|
|
ts.changesAffectModuleResolution = changesAffectModuleResolution;
|
|
function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
|
|
return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
|
|
}
|
|
ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
|
|
function changesAffectingProgramStructure(oldOptions, newOptions) {
|
|
return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
|
|
}
|
|
ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
|
|
function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
|
|
return oldOptions !== newOptions && optionDeclarations.some(function (o) {
|
|
return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
|
|
});
|
|
}
|
|
ts.optionsHaveChanges = optionsHaveChanges;
|
|
function forEachAncestor(node, callback) {
|
|
while (true) {
|
|
var res = callback(node);
|
|
if (res === "quit")
|
|
return undefined;
|
|
if (res !== undefined)
|
|
return res;
|
|
if (ts.isSourceFile(node))
|
|
return undefined;
|
|
node = node.parent;
|
|
}
|
|
}
|
|
ts.forEachAncestor = forEachAncestor;
|
|
function forEachEntry(map, callback) {
|
|
var iterator = map.entries();
|
|
for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
|
|
var _a = iterResult.value, key = _a[0], value = _a[1];
|
|
var result = callback(value, key);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.forEachEntry = forEachEntry;
|
|
function forEachKey(map, callback) {
|
|
var iterator = map.keys();
|
|
for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
|
|
var result = callback(iterResult.value);
|
|
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 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, mode) {
|
|
return sourceFile && sourceFile.resolvedModules && sourceFile.resolvedModules.get(moduleNameText, mode);
|
|
}
|
|
ts.getResolvedModule = getResolvedModule;
|
|
function setResolvedModule(sourceFile, moduleNameText, resolvedModule, mode) {
|
|
if (!sourceFile.resolvedModules) {
|
|
sourceFile.resolvedModules = ts.createModeAwareCache();
|
|
}
|
|
sourceFile.resolvedModules.set(moduleNameText, mode, resolvedModule);
|
|
}
|
|
ts.setResolvedModule = setResolvedModule;
|
|
function setResolvedTypeReferenceDirective(sourceFile, typeReferenceDirectiveName, resolvedTypeReferenceDirective) {
|
|
if (!sourceFile.resolvedTypeReferenceDirectiveNames) {
|
|
sourceFile.resolvedTypeReferenceDirectiveNames = ts.createModeAwareCache();
|
|
}
|
|
sourceFile.resolvedTypeReferenceDirectiveNames.set(typeReferenceDirectiveName, undefined, resolvedTypeReferenceDirective);
|
|
}
|
|
ts.setResolvedTypeReferenceDirective = setResolvedTypeReferenceDirective;
|
|
function projectReferenceIsEqualTo(oldRef, newRef) {
|
|
return oldRef.path === newRef.path &&
|
|
!oldRef.prepend === !newRef.prepend &&
|
|
!oldRef.circular === !newRef.circular;
|
|
}
|
|
ts.projectReferenceIsEqualTo = projectReferenceIsEqualTo;
|
|
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 packageIdToPackageName(_a) {
|
|
var name = _a.name, subModuleName = _a.subModuleName;
|
|
return subModuleName ? "".concat(name, "/").concat(subModuleName) : name;
|
|
}
|
|
ts.packageIdToPackageName = packageIdToPackageName;
|
|
function packageIdToString(packageId) {
|
|
return "".concat(packageIdToPackageName(packageId), "@").concat(packageId.version);
|
|
}
|
|
ts.packageIdToString = packageIdToString;
|
|
function typeDirectiveIsEqualTo(oldResolution, newResolution) {
|
|
return oldResolution.resolvedFileName === newResolution.resolvedFileName
|
|
&& oldResolution.primary === newResolution.primary
|
|
&& oldResolution.originalPath === newResolution.originalPath;
|
|
}
|
|
ts.typeDirectiveIsEqualTo = typeDirectiveIsEqualTo;
|
|
function hasChangesInResolutions(names, newResolutions, oldResolutions, oldSourceFile, comparer) {
|
|
ts.Debug.assert(names.length === newResolutions.length);
|
|
for (var i = 0; i < names.length; i++) {
|
|
var newResolution = newResolutions[i];
|
|
var entry = names[i];
|
|
var name = !ts.isString(entry) ? entry.fileName.toLowerCase() : entry;
|
|
var mode = !ts.isString(entry) ? ts.getModeForFileReference(entry, oldSourceFile === null || oldSourceFile === void 0 ? void 0 : oldSourceFile.impliedNodeFormat) : oldSourceFile && ts.getModeForResolutionAtIndex(oldSourceFile, i);
|
|
var oldResolution = oldResolutions && oldResolutions.get(name, mode);
|
|
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 & 524288) !== 0;
|
|
}
|
|
ts.containsParseError = containsParseError;
|
|
function aggregateChildData(node) {
|
|
if (!(node.flags & 1048576)) {
|
|
var thisNodeOrAnySubNodesHasError = ((node.flags & 131072) !== 0) ||
|
|
ts.forEachChild(node, containsParseError);
|
|
if (thisNodeOrAnySubNodesHasError) {
|
|
node.flags |= 524288;
|
|
}
|
|
node.flags |= 1048576;
|
|
}
|
|
}
|
|
function getSourceFileOfNode(node) {
|
|
while (node && node.kind !== 305) {
|
|
node = node.parent;
|
|
}
|
|
return node;
|
|
}
|
|
ts.getSourceFileOfNode = getSourceFileOfNode;
|
|
function getSourceFileOfModule(module) {
|
|
return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
|
|
}
|
|
ts.getSourceFileOfModule = getSourceFileOfModule;
|
|
function isPlainJsFile(file, checkJs) {
|
|
return !!file && (file.scriptKind === 1 || file.scriptKind === 2) && !file.checkJsDirective && checkJs === undefined;
|
|
}
|
|
ts.isPlainJsFile = isPlainJsFile;
|
|
function isStatementWithLocals(node) {
|
|
switch (node.kind) {
|
|
case 235:
|
|
case 263:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
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 "".concat(file.fileName, "(").concat(loc.line + 1, ",").concat(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 insertStatementsAfterPrologue(to, from, isPrologueDirective) {
|
|
if (from === undefined || from.length === 0)
|
|
return to;
|
|
var statementIndex = 0;
|
|
for (; statementIndex < to.length; ++statementIndex) {
|
|
if (!isPrologueDirective(to[statementIndex])) {
|
|
break;
|
|
}
|
|
}
|
|
to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
|
|
return to;
|
|
}
|
|
function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
|
|
if (statement === undefined)
|
|
return to;
|
|
var statementIndex = 0;
|
|
for (; statementIndex < to.length; ++statementIndex) {
|
|
if (!isPrologueDirective(to[statementIndex])) {
|
|
break;
|
|
}
|
|
}
|
|
to.splice(statementIndex, 0, statement);
|
|
return to;
|
|
}
|
|
function isAnyPrologueDirective(node) {
|
|
return isPrologueDirective(node) || !!(getEmitFlags(node) & 1048576);
|
|
}
|
|
function insertStatementsAfterStandardPrologue(to, from) {
|
|
return insertStatementsAfterPrologue(to, from, isPrologueDirective);
|
|
}
|
|
ts.insertStatementsAfterStandardPrologue = insertStatementsAfterStandardPrologue;
|
|
function insertStatementsAfterCustomPrologue(to, from) {
|
|
return insertStatementsAfterPrologue(to, from, isAnyPrologueDirective);
|
|
}
|
|
ts.insertStatementsAfterCustomPrologue = insertStatementsAfterCustomPrologue;
|
|
function insertStatementAfterStandardPrologue(to, statement) {
|
|
return insertStatementAfterPrologue(to, statement, isPrologueDirective);
|
|
}
|
|
ts.insertStatementAfterStandardPrologue = insertStatementAfterStandardPrologue;
|
|
function insertStatementAfterCustomPrologue(to, statement) {
|
|
return insertStatementAfterPrologue(to, statement, isAnyPrologueDirective);
|
|
}
|
|
ts.insertStatementAfterCustomPrologue = insertStatementAfterCustomPrologue;
|
|
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 ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
|
|
ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
|
|
fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
|
|
defaultLibReferenceRegEx.test(textSubStr) ?
|
|
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 createCommentDirectivesMap(sourceFile, commentDirectives) {
|
|
var directivesByLine = new ts.Map(commentDirectives.map(function (commentDirective) { return ([
|
|
"".concat(ts.getLineAndCharacterOfPosition(sourceFile, commentDirective.range.end).line),
|
|
commentDirective,
|
|
]); }));
|
|
var usedLines = new ts.Map();
|
|
return { getUnusedExpectations: getUnusedExpectations, markUsed: markUsed };
|
|
function getUnusedExpectations() {
|
|
return ts.arrayFrom(directivesByLine.entries())
|
|
.filter(function (_a) {
|
|
var line = _a[0], directive = _a[1];
|
|
return directive.type === 0 && !usedLines.get(line);
|
|
})
|
|
.map(function (_a) {
|
|
var _ = _a[0], directive = _a[1];
|
|
return directive;
|
|
});
|
|
}
|
|
function markUsed(line) {
|
|
if (!directivesByLine.has("".concat(line))) {
|
|
return false;
|
|
}
|
|
usedLines.set("".concat(line), true);
|
|
return true;
|
|
}
|
|
}
|
|
ts.createCommentDirectivesMap = createCommentDirectivesMap;
|
|
function getTokenPosOfNode(node, sourceFile, includeJsDoc) {
|
|
if (nodeIsMissing(node)) {
|
|
return node.pos;
|
|
}
|
|
if (ts.isJSDocNode(node) || node.kind === 11) {
|
|
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, true);
|
|
}
|
|
if (includeJsDoc && ts.hasJSDocNodes(node)) {
|
|
return getTokenPosOfNode(node.jsDoc[0], sourceFile);
|
|
}
|
|
if (node.kind === 348 && node._children.length > 0) {
|
|
return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
|
|
}
|
|
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, false, isInJSDoc(node));
|
|
}
|
|
ts.getTokenPosOfNode = getTokenPosOfNode;
|
|
function getNonDecoratorTokenPosOfNode(node, sourceFile) {
|
|
var lastDecorator = !nodeIsMissing(node) && ts.canHaveModifiers(node) ? ts.findLast(node.modifiers, ts.isDecorator) : undefined;
|
|
if (!lastDecorator) {
|
|
return getTokenPosOfNode(node, sourceFile);
|
|
}
|
|
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastDecorator.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 isJSDocTypeExpressionOrChild(node) {
|
|
return !!ts.findAncestor(node, ts.isJSDocTypeExpression);
|
|
}
|
|
function isExportNamespaceAsDefaultDeclaration(node) {
|
|
return !!(ts.isExportDeclaration(node) && node.exportClause && ts.isNamespaceExport(node.exportClause) && node.exportClause.name.escapedText === "default");
|
|
}
|
|
ts.isExportNamespaceAsDefaultDeclaration = isExportNamespaceAsDefaultDeclaration;
|
|
function getTextOfNodeFromSourceText(sourceText, node, includeTrivia) {
|
|
if (includeTrivia === void 0) { includeTrivia = false; }
|
|
if (nodeIsMissing(node)) {
|
|
return "";
|
|
}
|
|
var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
|
|
if (isJSDocTypeExpressionOrChild(node)) {
|
|
text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
|
|
}
|
|
return text;
|
|
}
|
|
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 getScriptTargetFeatures() {
|
|
return {
|
|
es2015: {
|
|
Array: ["find", "findIndex", "fill", "copyWithin", "entries", "keys", "values"],
|
|
RegExp: ["flags", "sticky", "unicode"],
|
|
Reflect: ["apply", "construct", "defineProperty", "deleteProperty", "get", " getOwnPropertyDescriptor", "getPrototypeOf", "has", "isExtensible", "ownKeys", "preventExtensions", "set", "setPrototypeOf"],
|
|
ArrayConstructor: ["from", "of"],
|
|
ObjectConstructor: ["assign", "getOwnPropertySymbols", "keys", "is", "setPrototypeOf"],
|
|
NumberConstructor: ["isFinite", "isInteger", "isNaN", "isSafeInteger", "parseFloat", "parseInt"],
|
|
Math: ["clz32", "imul", "sign", "log10", "log2", "log1p", "expm1", "cosh", "sinh", "tanh", "acosh", "asinh", "atanh", "hypot", "trunc", "fround", "cbrt"],
|
|
Map: ["entries", "keys", "values"],
|
|
Set: ["entries", "keys", "values"],
|
|
Promise: ts.emptyArray,
|
|
PromiseConstructor: ["all", "race", "reject", "resolve"],
|
|
Symbol: ["for", "keyFor"],
|
|
WeakMap: ["entries", "keys", "values"],
|
|
WeakSet: ["entries", "keys", "values"],
|
|
Iterator: ts.emptyArray,
|
|
AsyncIterator: ts.emptyArray,
|
|
String: ["codePointAt", "includes", "endsWith", "normalize", "repeat", "startsWith", "anchor", "big", "blink", "bold", "fixed", "fontcolor", "fontsize", "italics", "link", "small", "strike", "sub", "sup"],
|
|
StringConstructor: ["fromCodePoint", "raw"]
|
|
},
|
|
es2016: {
|
|
Array: ["includes"]
|
|
},
|
|
es2017: {
|
|
Atomics: ts.emptyArray,
|
|
SharedArrayBuffer: ts.emptyArray,
|
|
String: ["padStart", "padEnd"],
|
|
ObjectConstructor: ["values", "entries", "getOwnPropertyDescriptors"],
|
|
DateTimeFormat: ["formatToParts"]
|
|
},
|
|
es2018: {
|
|
Promise: ["finally"],
|
|
RegExpMatchArray: ["groups"],
|
|
RegExpExecArray: ["groups"],
|
|
RegExp: ["dotAll"],
|
|
Intl: ["PluralRules"],
|
|
AsyncIterable: ts.emptyArray,
|
|
AsyncIterableIterator: ts.emptyArray,
|
|
AsyncGenerator: ts.emptyArray,
|
|
AsyncGeneratorFunction: ts.emptyArray,
|
|
NumberFormat: ["formatToParts"]
|
|
},
|
|
es2019: {
|
|
Array: ["flat", "flatMap"],
|
|
ObjectConstructor: ["fromEntries"],
|
|
String: ["trimStart", "trimEnd", "trimLeft", "trimRight"],
|
|
Symbol: ["description"]
|
|
},
|
|
es2020: {
|
|
BigInt: ts.emptyArray,
|
|
BigInt64Array: ts.emptyArray,
|
|
BigUint64Array: ts.emptyArray,
|
|
PromiseConstructor: ["allSettled"],
|
|
SymbolConstructor: ["matchAll"],
|
|
String: ["matchAll"],
|
|
DataView: ["setBigInt64", "setBigUint64", "getBigInt64", "getBigUint64"],
|
|
RelativeTimeFormat: ["format", "formatToParts", "resolvedOptions"]
|
|
},
|
|
es2021: {
|
|
PromiseConstructor: ["any"],
|
|
String: ["replaceAll"]
|
|
},
|
|
es2022: {
|
|
Array: ["at"],
|
|
String: ["at"],
|
|
Int8Array: ["at"],
|
|
Uint8Array: ["at"],
|
|
Uint8ClampedArray: ["at"],
|
|
Int16Array: ["at"],
|
|
Uint16Array: ["at"],
|
|
Int32Array: ["at"],
|
|
Uint32Array: ["at"],
|
|
Float32Array: ["at"],
|
|
Float64Array: ["at"],
|
|
BigInt64Array: ["at"],
|
|
BigUint64Array: ["at"],
|
|
ObjectConstructor: ["hasOwn"],
|
|
Error: ["cause"]
|
|
}
|
|
};
|
|
}
|
|
ts.getScriptTargetFeatures = getScriptTargetFeatures;
|
|
function getLiteralText(node, sourceFile, flags) {
|
|
var _a;
|
|
if (sourceFile && canUseOriginalText(node, flags)) {
|
|
return getSourceTextOfNodeFromSourceFile(sourceFile, node);
|
|
}
|
|
switch (node.kind) {
|
|
case 10: {
|
|
var escapeText = flags & 2 ? escapeJsxAttributeString :
|
|
flags & 1 || (getEmitFlags(node) & 16777216) ? escapeString :
|
|
escapeNonAsciiString;
|
|
if (node.singleQuote) {
|
|
return "'" + escapeText(node.text, 39) + "'";
|
|
}
|
|
else {
|
|
return '"' + escapeText(node.text, 34) + '"';
|
|
}
|
|
}
|
|
case 14:
|
|
case 15:
|
|
case 16:
|
|
case 17: {
|
|
var escapeText = flags & 1 || (getEmitFlags(node) & 16777216) ? escapeString :
|
|
escapeNonAsciiString;
|
|
var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96));
|
|
switch (node.kind) {
|
|
case 14:
|
|
return "`" + rawText + "`";
|
|
case 15:
|
|
return "`" + rawText + "${";
|
|
case 16:
|
|
return "}" + rawText + "${";
|
|
case 17:
|
|
return "}" + rawText + "`";
|
|
}
|
|
break;
|
|
}
|
|
case 8:
|
|
case 9:
|
|
return node.text;
|
|
case 13:
|
|
if (flags & 4 && node.isUnterminated) {
|
|
return node.text + (node.text.charCodeAt(node.text.length - 1) === 92 ? " /" : "/");
|
|
}
|
|
return node.text;
|
|
}
|
|
return ts.Debug.fail("Literal kind '".concat(node.kind, "' not accounted for."));
|
|
}
|
|
ts.getLiteralText = getLiteralText;
|
|
function canUseOriginalText(node, flags) {
|
|
if (nodeIsSynthesized(node) || !node.parent || (flags & 4 && node.isUnterminated)) {
|
|
return false;
|
|
}
|
|
if (ts.isNumericLiteral(node) && node.numericLiteralFlags & 512) {
|
|
return !!(flags & 8);
|
|
}
|
|
return !ts.isBigIntLiteral(node);
|
|
}
|
|
function getTextOfConstantValue(value) {
|
|
return ts.isString(value) ? '"' + escapeNonAsciiString(value) + '"' : "" + value;
|
|
}
|
|
ts.getTextOfConstantValue = getTextOfConstantValue;
|
|
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 === 254 && node.parent.kind === 292;
|
|
}
|
|
ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
|
|
function isAmbientModule(node) {
|
|
return ts.isModuleDeclaration(node) && (node.name.kind === 10 || isGlobalScopeAugmentation(node));
|
|
}
|
|
ts.isAmbientModule = isAmbientModule;
|
|
function isModuleWithStringLiteralName(node) {
|
|
return ts.isModuleDeclaration(node) && node.name.kind === 10;
|
|
}
|
|
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 === 261 && (!node.body);
|
|
}
|
|
function isBlockScopedContainerTopLevel(node) {
|
|
return node.kind === 305 ||
|
|
node.kind === 261 ||
|
|
ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
|
|
}
|
|
ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
|
|
function isGlobalScopeAugmentation(module) {
|
|
return !!(module.flags & 1024);
|
|
}
|
|
ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation;
|
|
function isExternalModuleAugmentation(node) {
|
|
return isAmbientModule(node) && isModuleAugmentationExternal(node);
|
|
}
|
|
ts.isExternalModuleAugmentation = isExternalModuleAugmentation;
|
|
function isModuleAugmentationExternal(node) {
|
|
switch (node.parent.kind) {
|
|
case 305:
|
|
return ts.isExternalModule(node.parent);
|
|
case 262:
|
|
return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isModuleAugmentationExternal = isModuleAugmentationExternal;
|
|
function getNonAugmentationDeclaration(symbol) {
|
|
var _a;
|
|
return (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return !isExternalModuleAugmentation(d) && !(ts.isModuleDeclaration(d) && isGlobalScopeAugmentation(d)); });
|
|
}
|
|
ts.getNonAugmentationDeclaration = getNonAugmentationDeclaration;
|
|
function isCommonJSContainingModuleKind(kind) {
|
|
return kind === ts.ModuleKind.CommonJS || kind === ts.ModuleKind.Node16 || kind === ts.ModuleKind.NodeNext;
|
|
}
|
|
function isEffectiveExternalModule(node, compilerOptions) {
|
|
return ts.isExternalModule(node) || compilerOptions.isolatedModules || (isCommonJSContainingModuleKind(getEmitModuleKind(compilerOptions)) && !!node.commonJsModuleIndicator);
|
|
}
|
|
ts.isEffectiveExternalModule = isEffectiveExternalModule;
|
|
function isEffectiveStrictModeSourceFile(node, compilerOptions) {
|
|
switch (node.scriptKind) {
|
|
case 1:
|
|
case 3:
|
|
case 2:
|
|
case 4:
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
if (node.isDeclarationFile) {
|
|
return false;
|
|
}
|
|
if (getStrictOptionValue(compilerOptions, "alwaysStrict")) {
|
|
return true;
|
|
}
|
|
if (ts.startsWithUseStrict(node.statements)) {
|
|
return true;
|
|
}
|
|
if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
|
|
if (getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
|
|
return true;
|
|
}
|
|
return !compilerOptions.noImplicitUseStrict;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
|
|
function isBlockScope(node, parentNode) {
|
|
switch (node.kind) {
|
|
case 305:
|
|
case 263:
|
|
case 292:
|
|
case 261:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
case 171:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
case 167:
|
|
case 170:
|
|
return true;
|
|
case 235:
|
|
return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isBlockScope = isBlockScope;
|
|
function isDeclarationWithTypeParameters(node) {
|
|
switch (node.kind) {
|
|
case 338:
|
|
case 345:
|
|
case 323:
|
|
return true;
|
|
default:
|
|
ts.assertType(node);
|
|
return isDeclarationWithTypeParameterChildren(node);
|
|
}
|
|
}
|
|
ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
|
|
function isDeclarationWithTypeParameterChildren(node) {
|
|
switch (node.kind) {
|
|
case 174:
|
|
case 175:
|
|
case 168:
|
|
case 176:
|
|
case 179:
|
|
case 180:
|
|
case 317:
|
|
case 257:
|
|
case 226:
|
|
case 258:
|
|
case 259:
|
|
case 344:
|
|
case 256:
|
|
case 169:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 213:
|
|
case 214:
|
|
return true;
|
|
default:
|
|
ts.assertType(node);
|
|
return false;
|
|
}
|
|
}
|
|
ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
|
|
function isAnyImportSyntax(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
case 265:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isAnyImportSyntax = isAnyImportSyntax;
|
|
function isAnyImportOrBareOrAccessedRequire(node) {
|
|
return isAnyImportSyntax(node) || isVariableDeclarationInitializedToBareOrAccessedRequire(node);
|
|
}
|
|
ts.isAnyImportOrBareOrAccessedRequire = isAnyImportOrBareOrAccessedRequire;
|
|
function isLateVisibilityPaintedStatement(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
case 265:
|
|
case 237:
|
|
case 257:
|
|
case 256:
|
|
case 261:
|
|
case 259:
|
|
case 258:
|
|
case 260:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isLateVisibilityPaintedStatement = isLateVisibilityPaintedStatement;
|
|
function hasPossibleExternalModuleReference(node) {
|
|
return isAnyImportOrReExport(node) || ts.isModuleDeclaration(node) || ts.isImportTypeNode(node) || isImportCall(node);
|
|
}
|
|
ts.hasPossibleExternalModuleReference = hasPossibleExternalModuleReference;
|
|
function isAnyImportOrReExport(node) {
|
|
return isAnyImportSyntax(node) || ts.isExportDeclaration(node);
|
|
}
|
|
ts.isAnyImportOrReExport = isAnyImportOrReExport;
|
|
function getEnclosingBlockScopeContainer(node) {
|
|
return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
|
|
}
|
|
ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
|
|
function forEachEnclosingBlockScopeContainer(node, cb) {
|
|
var container = getEnclosingBlockScopeContainer(node);
|
|
while (container) {
|
|
cb(container);
|
|
container = getEnclosingBlockScopeContainer(container);
|
|
}
|
|
}
|
|
ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
|
|
function declarationNameToString(name) {
|
|
return !name || 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 isComputedNonLiteralName(name) {
|
|
return name.kind === 162 && !isStringOrNumericLiteralLike(name.expression);
|
|
}
|
|
ts.isComputedNonLiteralName = isComputedNonLiteralName;
|
|
function tryGetTextOfPropertyName(name) {
|
|
switch (name.kind) {
|
|
case 79:
|
|
case 80:
|
|
return name.escapedText;
|
|
case 10:
|
|
case 8:
|
|
case 14:
|
|
return ts.escapeLeadingUnderscores(name.text);
|
|
case 162:
|
|
if (isStringOrNumericLiteralLike(name.expression))
|
|
return ts.escapeLeadingUnderscores(name.expression.text);
|
|
return undefined;
|
|
default:
|
|
return ts.Debug.assertNever(name);
|
|
}
|
|
}
|
|
ts.tryGetTextOfPropertyName = tryGetTextOfPropertyName;
|
|
function getTextOfPropertyName(name) {
|
|
return ts.Debug.checkDefined(tryGetTextOfPropertyName(name));
|
|
}
|
|
ts.getTextOfPropertyName = getTextOfPropertyName;
|
|
function entityNameToString(name) {
|
|
switch (name.kind) {
|
|
case 108:
|
|
return "this";
|
|
case 80:
|
|
case 79:
|
|
return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
|
|
case 161:
|
|
return entityNameToString(name.left) + "." + entityNameToString(name.right);
|
|
case 206:
|
|
if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
|
|
return entityNameToString(name.expression) + "." + entityNameToString(name.name);
|
|
}
|
|
else {
|
|
return ts.Debug.assertNever(name.name);
|
|
}
|
|
case 311:
|
|
return entityNameToString(name.left) + entityNameToString(name.right);
|
|
default:
|
|
return 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 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 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 createFileDiagnosticFromMessageChain(sourceFile, span.start, span.length, messageChain, relatedInformation);
|
|
}
|
|
ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain;
|
|
function assertDiagnosticLocation(file, start, length) {
|
|
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);
|
|
}
|
|
}
|
|
function createFileDiagnosticFromMessageChain(file, start, length, messageChain, relatedInformation) {
|
|
assertDiagnosticLocation(file, start, length);
|
|
return {
|
|
file: file,
|
|
start: start,
|
|
length: length,
|
|
code: messageChain.code,
|
|
category: messageChain.category,
|
|
messageText: messageChain.next ? messageChain : messageChain.messageText,
|
|
relatedInformation: relatedInformation
|
|
};
|
|
}
|
|
ts.createFileDiagnosticFromMessageChain = createFileDiagnosticFromMessageChain;
|
|
function createDiagnosticForFileFromMessageChain(sourceFile, messageChain, relatedInformation) {
|
|
return {
|
|
file: sourceFile,
|
|
start: 0,
|
|
length: 0,
|
|
code: messageChain.code,
|
|
category: messageChain.category,
|
|
messageText: messageChain.next ? messageChain : messageChain.messageText,
|
|
relatedInformation: relatedInformation
|
|
};
|
|
}
|
|
ts.createDiagnosticForFileFromMessageChain = createDiagnosticForFileFromMessageChain;
|
|
function createDiagnosticMessageChainFromDiagnostic(diagnostic) {
|
|
return typeof diagnostic.messageText === "string" ? {
|
|
code: diagnostic.code,
|
|
category: diagnostic.category,
|
|
messageText: diagnostic.messageText,
|
|
next: diagnostic.next,
|
|
} : diagnostic.messageText;
|
|
}
|
|
ts.createDiagnosticMessageChainFromDiagnostic = createDiagnosticMessageChainFromDiagnostic;
|
|
function createDiagnosticForRange(sourceFile, range, message) {
|
|
return {
|
|
file: sourceFile,
|
|
start: range.pos,
|
|
length: range.end - range.pos,
|
|
code: message.code,
|
|
category: message.category,
|
|
messageText: message.message,
|
|
};
|
|
}
|
|
ts.createDiagnosticForRange = createDiagnosticForRange;
|
|
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 === 235) {
|
|
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 305:
|
|
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 254:
|
|
case 203:
|
|
case 257:
|
|
case 226:
|
|
case 258:
|
|
case 261:
|
|
case 260:
|
|
case 299:
|
|
case 256:
|
|
case 213:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 259:
|
|
case 167:
|
|
case 166:
|
|
case 268:
|
|
errorNode = node.name;
|
|
break;
|
|
case 214:
|
|
return getErrorSpanForArrowFunction(sourceFile, node);
|
|
case 289:
|
|
case 290:
|
|
var start = ts.skipTrivia(sourceFile.text, node.pos);
|
|
var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
|
|
return ts.createTextSpanFromBounds(start, end);
|
|
}
|
|
if (errorNode === undefined) {
|
|
return getSpanOfTokenAtPosition(sourceFile, node.pos);
|
|
}
|
|
ts.Debug.assert(!ts.isJSDoc(errorNode));
|
|
var isMissing = nodeIsMissing(errorNode);
|
|
var pos = isMissing || ts.isJsxText(node)
|
|
? 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 isEnumConst(node) {
|
|
return !!(ts.getCombinedModifierFlags(node) & 2048);
|
|
}
|
|
ts.isEnumConst = isEnumConst;
|
|
function isDeclarationReadonly(declaration) {
|
|
return !!(ts.getCombinedModifierFlags(declaration) & 64 && !ts.isParameterPropertyDeclaration(declaration, declaration.parent));
|
|
}
|
|
ts.isDeclarationReadonly = isDeclarationReadonly;
|
|
function isVarConst(node) {
|
|
return !!(ts.getCombinedNodeFlags(node) & 2);
|
|
}
|
|
ts.isVarConst = isVarConst;
|
|
function isLet(node) {
|
|
return !!(ts.getCombinedNodeFlags(node) & 1);
|
|
}
|
|
ts.isLet = isLet;
|
|
function isSuperCall(n) {
|
|
return n.kind === 208 && n.expression.kind === 106;
|
|
}
|
|
ts.isSuperCall = isSuperCall;
|
|
function isImportCall(n) {
|
|
return n.kind === 208 && n.expression.kind === 100;
|
|
}
|
|
ts.isImportCall = isImportCall;
|
|
function isImportMeta(n) {
|
|
return ts.isMetaProperty(n)
|
|
&& n.keywordToken === 100
|
|
&& n.name.escapedText === "meta";
|
|
}
|
|
ts.isImportMeta = isImportMeta;
|
|
function isLiteralImportTypeNode(n) {
|
|
return ts.isImportTypeNode(n) && ts.isLiteralTypeNode(n.argument) && ts.isStringLiteral(n.argument.literal);
|
|
}
|
|
ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
|
|
function isPrologueDirective(node) {
|
|
return node.kind === 238
|
|
&& node.expression.kind === 10;
|
|
}
|
|
ts.isPrologueDirective = isPrologueDirective;
|
|
function isCustomPrologue(node) {
|
|
return !!(getEmitFlags(node) & 1048576);
|
|
}
|
|
ts.isCustomPrologue = isCustomPrologue;
|
|
function isHoistedFunction(node) {
|
|
return isCustomPrologue(node)
|
|
&& ts.isFunctionDeclaration(node);
|
|
}
|
|
ts.isHoistedFunction = isHoistedFunction;
|
|
function isHoistedVariable(node) {
|
|
return ts.isIdentifier(node.name)
|
|
&& !node.initializer;
|
|
}
|
|
function isHoistedVariableStatement(node) {
|
|
return isCustomPrologue(node)
|
|
&& ts.isVariableStatement(node)
|
|
&& ts.every(node.declarationList.declarations, isHoistedVariable);
|
|
}
|
|
ts.isHoistedVariableStatement = isHoistedVariableStatement;
|
|
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
|
|
return node.kind !== 11 ? ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : undefined;
|
|
}
|
|
ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
|
|
function getJSDocCommentRanges(node, text) {
|
|
var commentRanges = (node.kind === 164 ||
|
|
node.kind === 163 ||
|
|
node.kind === 213 ||
|
|
node.kind === 214 ||
|
|
node.kind === 212 ||
|
|
node.kind === 254 ||
|
|
node.kind === 275) ?
|
|
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*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
|
|
var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
|
|
ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
|
|
var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
|
|
function isPartOfTypeNode(node) {
|
|
if (177 <= node.kind && node.kind <= 200) {
|
|
return true;
|
|
}
|
|
switch (node.kind) {
|
|
case 130:
|
|
case 155:
|
|
case 147:
|
|
case 158:
|
|
case 150:
|
|
case 133:
|
|
case 151:
|
|
case 148:
|
|
case 153:
|
|
case 143:
|
|
return true;
|
|
case 114:
|
|
return node.parent.kind !== 217;
|
|
case 228:
|
|
return ts.isHeritageClause(node.parent) && !isExpressionWithTypeArgumentsInClassExtendsClause(node);
|
|
case 163:
|
|
return node.parent.kind === 195 || node.parent.kind === 190;
|
|
case 79:
|
|
if (node.parent.kind === 161 && node.parent.right === node) {
|
|
node = node.parent;
|
|
}
|
|
else if (node.parent.kind === 206 && node.parent.name === node) {
|
|
node = node.parent;
|
|
}
|
|
ts.Debug.assert(node.kind === 79 || node.kind === 161 || node.kind === 206, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
|
|
case 161:
|
|
case 206:
|
|
case 108: {
|
|
var parent = node.parent;
|
|
if (parent.kind === 181) {
|
|
return false;
|
|
}
|
|
if (parent.kind === 200) {
|
|
return !parent.isTypeOf;
|
|
}
|
|
if (177 <= parent.kind && parent.kind <= 200) {
|
|
return true;
|
|
}
|
|
switch (parent.kind) {
|
|
case 228:
|
|
return ts.isHeritageClause(parent.parent) && !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
|
|
case 163:
|
|
return node === parent.constraint;
|
|
case 344:
|
|
return node === parent.constraint;
|
|
case 167:
|
|
case 166:
|
|
case 164:
|
|
case 254:
|
|
return node === parent.type;
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
case 171:
|
|
case 169:
|
|
case 168:
|
|
case 172:
|
|
case 173:
|
|
return node === parent.type;
|
|
case 174:
|
|
case 175:
|
|
case 176:
|
|
return node === parent.type;
|
|
case 211:
|
|
return node === parent.type;
|
|
case 208:
|
|
case 209:
|
|
return ts.contains(parent.typeArguments, node);
|
|
case 210:
|
|
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 247:
|
|
return visitor(node);
|
|
case 263:
|
|
case 235:
|
|
case 239:
|
|
case 240:
|
|
case 241:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
case 248:
|
|
case 249:
|
|
case 289:
|
|
case 290:
|
|
case 250:
|
|
case 252:
|
|
case 292:
|
|
return ts.forEachChild(node, traverse);
|
|
}
|
|
}
|
|
}
|
|
ts.forEachReturnStatement = forEachReturnStatement;
|
|
function forEachYieldExpression(body, visitor) {
|
|
return traverse(body);
|
|
function traverse(node) {
|
|
switch (node.kind) {
|
|
case 224:
|
|
visitor(node);
|
|
var operand = node.expression;
|
|
if (operand) {
|
|
traverse(operand);
|
|
}
|
|
return;
|
|
case 260:
|
|
case 258:
|
|
case 261:
|
|
case 259:
|
|
return;
|
|
default:
|
|
if (ts.isFunctionLike(node)) {
|
|
if (node.name && node.name.kind === 162) {
|
|
traverse(node.name.expression);
|
|
return;
|
|
}
|
|
}
|
|
else if (!isPartOfTypeNode(node)) {
|
|
ts.forEachChild(node, traverse);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ts.forEachYieldExpression = forEachYieldExpression;
|
|
function getRestParameterElementType(node) {
|
|
if (node && node.kind === 183) {
|
|
return node.elementType;
|
|
}
|
|
else if (node && node.kind === 178) {
|
|
return ts.singleOrUndefined(node.typeArguments);
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.getRestParameterElementType = getRestParameterElementType;
|
|
function getMembersOfDeclaration(node) {
|
|
switch (node.kind) {
|
|
case 258:
|
|
case 257:
|
|
case 226:
|
|
case 182:
|
|
return node.members;
|
|
case 205:
|
|
return node.properties;
|
|
}
|
|
}
|
|
ts.getMembersOfDeclaration = getMembersOfDeclaration;
|
|
function isVariableLike(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 203:
|
|
case 299:
|
|
case 164:
|
|
case 296:
|
|
case 167:
|
|
case 166:
|
|
case 297:
|
|
case 254:
|
|
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 === 255
|
|
&& node.parent.parent.kind === 237;
|
|
}
|
|
ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
|
|
function isCommonJsExportedExpression(node) {
|
|
if (!isInJSFile(node))
|
|
return false;
|
|
return (ts.isObjectLiteralExpression(node.parent) && ts.isBinaryExpression(node.parent.parent) && getAssignmentDeclarationKind(node.parent.parent) === 2) ||
|
|
isCommonJsExportPropertyAssignment(node.parent);
|
|
}
|
|
ts.isCommonJsExportedExpression = isCommonJsExportedExpression;
|
|
function isCommonJsExportPropertyAssignment(node) {
|
|
if (!isInJSFile(node))
|
|
return false;
|
|
return (ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 1);
|
|
}
|
|
ts.isCommonJsExportPropertyAssignment = isCommonJsExportPropertyAssignment;
|
|
function isValidESSymbolDeclaration(node) {
|
|
return (ts.isVariableDeclaration(node) ? isVarConst(node) && ts.isIdentifier(node.name) && isVariableDeclarationInVariableStatement(node) :
|
|
ts.isPropertyDeclaration(node) ? hasEffectiveReadonlyModifier(node) && hasStaticModifier(node) :
|
|
ts.isPropertySignature(node) && hasEffectiveReadonlyModifier(node)) || isCommonJsExportPropertyAssignment(node);
|
|
}
|
|
ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
|
|
function introducesArgumentsExoticObject(node) {
|
|
switch (node.kind) {
|
|
case 169:
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 256:
|
|
case 213:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject;
|
|
function unwrapInnermostStatementOfLabel(node, beforeUnwrapLabelCallback) {
|
|
while (true) {
|
|
if (beforeUnwrapLabelCallback) {
|
|
beforeUnwrapLabelCallback(node);
|
|
}
|
|
if (node.statement.kind !== 250) {
|
|
return node.statement;
|
|
}
|
|
node = node.statement;
|
|
}
|
|
}
|
|
ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
|
|
function isFunctionBlock(node) {
|
|
return node && node.kind === 235 && ts.isFunctionLike(node.parent);
|
|
}
|
|
ts.isFunctionBlock = isFunctionBlock;
|
|
function isObjectLiteralMethod(node) {
|
|
return node && node.kind === 169 && node.parent.kind === 205;
|
|
}
|
|
ts.isObjectLiteralMethod = isObjectLiteralMethod;
|
|
function isObjectLiteralOrClassExpressionMethodOrAccessor(node) {
|
|
return (node.kind === 169 || node.kind === 172 || node.kind === 173) &&
|
|
(node.parent.kind === 205 ||
|
|
node.parent.kind === 226);
|
|
}
|
|
ts.isObjectLiteralOrClassExpressionMethodOrAccessor = isObjectLiteralOrClassExpressionMethodOrAccessor;
|
|
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 === 296) {
|
|
var propName = tryGetTextOfPropertyName(property.name);
|
|
return key === propName || (!!key2 && key2 === propName);
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
ts.getPropertyAssignment = getPropertyAssignment;
|
|
function getPropertyArrayElementValue(objectLiteral, propKey, elementValue) {
|
|
return ts.firstDefined(getPropertyAssignment(objectLiteral, propKey), function (property) {
|
|
return ts.isArrayLiteralExpression(property.initializer) ?
|
|
ts.find(property.initializer.elements, function (element) { return ts.isStringLiteral(element) && element.text === elementValue; }) :
|
|
undefined;
|
|
});
|
|
}
|
|
ts.getPropertyArrayElementValue = getPropertyArrayElementValue;
|
|
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 ts.findAncestor(node.parent, ts.isFunctionLike);
|
|
}
|
|
ts.getContainingFunction = getContainingFunction;
|
|
function getContainingFunctionDeclaration(node) {
|
|
return ts.findAncestor(node.parent, ts.isFunctionLikeDeclaration);
|
|
}
|
|
ts.getContainingFunctionDeclaration = getContainingFunctionDeclaration;
|
|
function getContainingClass(node) {
|
|
return ts.findAncestor(node.parent, ts.isClassLike);
|
|
}
|
|
ts.getContainingClass = getContainingClass;
|
|
function getContainingClassStaticBlock(node) {
|
|
return ts.findAncestor(node.parent, function (n) {
|
|
if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
|
|
return "quit";
|
|
}
|
|
return ts.isClassStaticBlockDeclaration(n);
|
|
});
|
|
}
|
|
ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
|
|
function getContainingFunctionOrClassStaticBlock(node) {
|
|
return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
|
|
}
|
|
ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
|
|
function getThisContainer(node, includeArrowFunctions) {
|
|
ts.Debug.assert(node.kind !== 305);
|
|
while (true) {
|
|
node = node.parent;
|
|
if (!node) {
|
|
return ts.Debug.fail();
|
|
}
|
|
switch (node.kind) {
|
|
case 162:
|
|
if (ts.isClassLike(node.parent.parent)) {
|
|
return node;
|
|
}
|
|
node = node.parent;
|
|
break;
|
|
case 165:
|
|
if (node.parent.kind === 164 && ts.isClassElement(node.parent.parent)) {
|
|
node = node.parent.parent;
|
|
}
|
|
else if (ts.isClassElement(node.parent)) {
|
|
node = node.parent;
|
|
}
|
|
break;
|
|
case 214:
|
|
if (!includeArrowFunctions) {
|
|
continue;
|
|
}
|
|
case 256:
|
|
case 213:
|
|
case 261:
|
|
case 170:
|
|
case 167:
|
|
case 166:
|
|
case 169:
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 174:
|
|
case 175:
|
|
case 176:
|
|
case 260:
|
|
case 305:
|
|
return node;
|
|
}
|
|
}
|
|
}
|
|
ts.getThisContainer = getThisContainer;
|
|
function isThisContainerOrFunctionBlock(node) {
|
|
switch (node.kind) {
|
|
case 214:
|
|
case 256:
|
|
case 213:
|
|
case 167:
|
|
return true;
|
|
case 235:
|
|
switch (node.parent.kind) {
|
|
case 171:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isThisContainerOrFunctionBlock = isThisContainerOrFunctionBlock;
|
|
function isInTopLevelContext(node) {
|
|
if (ts.isIdentifier(node) && (ts.isClassDeclaration(node.parent) || ts.isFunctionDeclaration(node.parent)) && node.parent.name === node) {
|
|
node = node.parent;
|
|
}
|
|
var container = getThisContainer(node, true);
|
|
return ts.isSourceFile(container);
|
|
}
|
|
ts.isInTopLevelContext = isInTopLevelContext;
|
|
function getNewTargetContainer(node) {
|
|
var container = getThisContainer(node, false);
|
|
if (container) {
|
|
switch (container.kind) {
|
|
case 171:
|
|
case 256:
|
|
case 213:
|
|
return container;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getNewTargetContainer = getNewTargetContainer;
|
|
function getSuperContainer(node, stopOnFunctions) {
|
|
while (true) {
|
|
node = node.parent;
|
|
if (!node) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 162:
|
|
node = node.parent;
|
|
break;
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
if (!stopOnFunctions) {
|
|
continue;
|
|
}
|
|
case 167:
|
|
case 166:
|
|
case 169:
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 170:
|
|
return node;
|
|
case 165:
|
|
if (node.parent.kind === 164 && 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 === 213 || func.kind === 214) {
|
|
var prev = func;
|
|
var parent = func.parent;
|
|
while (parent.kind === 212) {
|
|
prev = parent;
|
|
parent = parent.parent;
|
|
}
|
|
if (parent.kind === 208 && parent.expression === prev) {
|
|
return parent;
|
|
}
|
|
}
|
|
}
|
|
ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
|
|
function isSuperOrSuperProperty(node) {
|
|
return node.kind === 106
|
|
|| isSuperProperty(node);
|
|
}
|
|
ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
|
|
function isSuperProperty(node) {
|
|
var kind = node.kind;
|
|
return (kind === 206 || kind === 207)
|
|
&& node.expression.kind === 106;
|
|
}
|
|
ts.isSuperProperty = isSuperProperty;
|
|
function isThisProperty(node) {
|
|
var kind = node.kind;
|
|
return (kind === 206 || kind === 207)
|
|
&& node.expression.kind === 108;
|
|
}
|
|
ts.isThisProperty = isThisProperty;
|
|
function isThisInitializedDeclaration(node) {
|
|
var _a;
|
|
return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108;
|
|
}
|
|
ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
|
|
function isThisInitializedObjectBindingExpression(node) {
|
|
return !!node
|
|
&& (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
|
|
&& ts.isBinaryExpression(node.parent.parent)
|
|
&& node.parent.parent.operatorToken.kind === 63
|
|
&& node.parent.parent.right.kind === 108;
|
|
}
|
|
ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
|
|
function getEntityNameFromTypeNode(node) {
|
|
switch (node.kind) {
|
|
case 178:
|
|
return node.typeName;
|
|
case 228:
|
|
return isEntityNameExpression(node.expression)
|
|
? node.expression
|
|
: undefined;
|
|
case 79:
|
|
case 161:
|
|
return node;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
|
|
function getInvokedExpression(node) {
|
|
switch (node.kind) {
|
|
case 210:
|
|
return node.tag;
|
|
case 280:
|
|
case 279:
|
|
return node.tagName;
|
|
default:
|
|
return node.expression;
|
|
}
|
|
}
|
|
ts.getInvokedExpression = getInvokedExpression;
|
|
function nodeCanBeDecorated(node, parent, grandparent) {
|
|
if (ts.isNamedDeclaration(node) && ts.isPrivateIdentifier(node.name)) {
|
|
return false;
|
|
}
|
|
switch (node.kind) {
|
|
case 257:
|
|
return true;
|
|
case 167:
|
|
return parent.kind === 257;
|
|
case 172:
|
|
case 173:
|
|
case 169:
|
|
return node.body !== undefined
|
|
&& parent.kind === 257;
|
|
case 164:
|
|
return parent.body !== undefined
|
|
&& (parent.kind === 171
|
|
|| parent.kind === 169
|
|
|| parent.kind === 173)
|
|
&& grandparent.kind === 257;
|
|
}
|
|
return false;
|
|
}
|
|
ts.nodeCanBeDecorated = nodeCanBeDecorated;
|
|
function nodeIsDecorated(node, parent, grandparent) {
|
|
return hasDecorators(node)
|
|
&& 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 257:
|
|
return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); });
|
|
case 169:
|
|
case 173:
|
|
case 171:
|
|
return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); });
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.childIsDecorated = childIsDecorated;
|
|
function classOrConstructorParameterIsDecorated(node) {
|
|
if (nodeIsDecorated(node))
|
|
return true;
|
|
var constructor = getFirstConstructorWithBody(node);
|
|
return !!constructor && childIsDecorated(constructor, node);
|
|
}
|
|
ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
|
|
function isJSXTagName(node) {
|
|
var parent = node.parent;
|
|
if (parent.kind === 280 ||
|
|
parent.kind === 279 ||
|
|
parent.kind === 281) {
|
|
return parent.tagName === node;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isJSXTagName = isJSXTagName;
|
|
function isExpressionNode(node) {
|
|
switch (node.kind) {
|
|
case 106:
|
|
case 104:
|
|
case 110:
|
|
case 95:
|
|
case 13:
|
|
case 204:
|
|
case 205:
|
|
case 206:
|
|
case 207:
|
|
case 208:
|
|
case 209:
|
|
case 210:
|
|
case 229:
|
|
case 211:
|
|
case 230:
|
|
case 212:
|
|
case 213:
|
|
case 226:
|
|
case 214:
|
|
case 217:
|
|
case 215:
|
|
case 216:
|
|
case 219:
|
|
case 220:
|
|
case 221:
|
|
case 222:
|
|
case 225:
|
|
case 223:
|
|
case 227:
|
|
case 278:
|
|
case 279:
|
|
case 282:
|
|
case 224:
|
|
case 218:
|
|
case 231:
|
|
return true;
|
|
case 228:
|
|
return !ts.isHeritageClause(node.parent);
|
|
case 161:
|
|
while (node.parent.kind === 161) {
|
|
node = node.parent;
|
|
}
|
|
return node.parent.kind === 181 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
|
|
case 311:
|
|
while (ts.isJSDocMemberName(node.parent)) {
|
|
node = node.parent;
|
|
}
|
|
return node.parent.kind === 181 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
|
|
case 80:
|
|
return ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 101;
|
|
case 79:
|
|
if (node.parent.kind === 181 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
|
|
return true;
|
|
}
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 14:
|
|
case 108:
|
|
return isInExpressionContext(node);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isExpressionNode = isExpressionNode;
|
|
function isInExpressionContext(node) {
|
|
var parent = node.parent;
|
|
switch (parent.kind) {
|
|
case 254:
|
|
case 164:
|
|
case 167:
|
|
case 166:
|
|
case 299:
|
|
case 296:
|
|
case 203:
|
|
return parent.initializer === node;
|
|
case 238:
|
|
case 239:
|
|
case 240:
|
|
case 241:
|
|
case 247:
|
|
case 248:
|
|
case 249:
|
|
case 289:
|
|
case 251:
|
|
return parent.expression === node;
|
|
case 242:
|
|
var forStatement = parent;
|
|
return (forStatement.initializer === node && forStatement.initializer.kind !== 255) ||
|
|
forStatement.condition === node ||
|
|
forStatement.incrementor === node;
|
|
case 243:
|
|
case 244:
|
|
var forInStatement = parent;
|
|
return (forInStatement.initializer === node && forInStatement.initializer.kind !== 255) ||
|
|
forInStatement.expression === node;
|
|
case 211:
|
|
case 229:
|
|
return node === parent.expression;
|
|
case 233:
|
|
return node === parent.expression;
|
|
case 162:
|
|
return node === parent.expression;
|
|
case 165:
|
|
case 288:
|
|
case 287:
|
|
case 298:
|
|
return true;
|
|
case 228:
|
|
return parent.expression === node && !isPartOfTypeNode(parent);
|
|
case 297:
|
|
return parent.objectAssignmentInitializer === node;
|
|
default:
|
|
return isExpressionNode(parent);
|
|
}
|
|
}
|
|
ts.isInExpressionContext = isInExpressionContext;
|
|
function isPartOfTypeQuery(node) {
|
|
while (node.kind === 161 || node.kind === 79) {
|
|
node = node.parent;
|
|
}
|
|
return node.kind === 181;
|
|
}
|
|
ts.isPartOfTypeQuery = isPartOfTypeQuery;
|
|
function isNamespaceReexportDeclaration(node) {
|
|
return ts.isNamespaceExport(node) && !!node.parent.moduleSpecifier;
|
|
}
|
|
ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
|
|
function isExternalModuleImportEqualsDeclaration(node) {
|
|
return node.kind === 265 && node.moduleReference.kind === 277;
|
|
}
|
|
ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
|
|
function getExternalModuleImportEqualsDeclarationExpression(node) {
|
|
ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node));
|
|
return node.moduleReference.expression;
|
|
}
|
|
ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression;
|
|
function getExternalModuleRequireArgument(node) {
|
|
return isVariableDeclarationInitializedToBareOrAccessedRequire(node) && getLeftmostAccessExpression(node.initializer).arguments[0];
|
|
}
|
|
ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
|
|
function isInternalModuleImportEqualsDeclaration(node) {
|
|
return node.kind === 265 && node.moduleReference.kind !== 277;
|
|
}
|
|
ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
|
|
function isSourceFileJS(file) {
|
|
return isInJSFile(file);
|
|
}
|
|
ts.isSourceFileJS = isSourceFileJS;
|
|
function isSourceFileNotJS(file) {
|
|
return !isInJSFile(file);
|
|
}
|
|
ts.isSourceFileNotJS = isSourceFileNotJS;
|
|
function isInJSFile(node) {
|
|
return !!node && !!(node.flags & 262144);
|
|
}
|
|
ts.isInJSFile = isInJSFile;
|
|
function isInJsonFile(node) {
|
|
return !!node && !!(node.flags & 67108864);
|
|
}
|
|
ts.isInJsonFile = isInJsonFile;
|
|
function isSourceFileNotJson(file) {
|
|
return !isJsonSourceFile(file);
|
|
}
|
|
ts.isSourceFileNotJson = isSourceFileNotJson;
|
|
function isInJSDoc(node) {
|
|
return !!node && !!(node.flags & 8388608);
|
|
}
|
|
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 === 150 || node.typeArguments[0].kind === 147);
|
|
}
|
|
ts.isJSDocIndexSignature = isJSDocIndexSignature;
|
|
function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
|
|
if (callExpression.kind !== 208) {
|
|
return false;
|
|
}
|
|
var _a = callExpression, expression = _a.expression, args = _a.arguments;
|
|
if (expression.kind !== 79 || expression.escapedText !== "require") {
|
|
return false;
|
|
}
|
|
if (args.length !== 1) {
|
|
return false;
|
|
}
|
|
var arg = args[0];
|
|
return !requireStringLiteralLikeArgument || ts.isStringLiteralLike(arg);
|
|
}
|
|
ts.isRequireCall = isRequireCall;
|
|
function isVariableDeclarationInitializedToRequire(node) {
|
|
return isVariableDeclarationInitializedWithRequireHelper(node, false);
|
|
}
|
|
ts.isVariableDeclarationInitializedToRequire = isVariableDeclarationInitializedToRequire;
|
|
function isVariableDeclarationInitializedToBareOrAccessedRequire(node) {
|
|
return isVariableDeclarationInitializedWithRequireHelper(node, true);
|
|
}
|
|
ts.isVariableDeclarationInitializedToBareOrAccessedRequire = isVariableDeclarationInitializedToBareOrAccessedRequire;
|
|
function isVariableDeclarationInitializedWithRequireHelper(node, allowAccessedRequire) {
|
|
return ts.isVariableDeclaration(node) &&
|
|
!!node.initializer &&
|
|
isRequireCall(allowAccessedRequire ? getLeftmostAccessExpression(node.initializer) : node.initializer, true);
|
|
}
|
|
function isRequireVariableStatement(node) {
|
|
return ts.isVariableStatement(node)
|
|
&& node.declarationList.declarations.length > 0
|
|
&& ts.every(node.declarationList.declarations, function (decl) { return isVariableDeclarationInitializedToRequire(decl); });
|
|
}
|
|
ts.isRequireVariableStatement = isRequireVariableStatement;
|
|
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 isAssignmentDeclaration(decl) {
|
|
return ts.isBinaryExpression(decl) || isAccessExpression(decl) || ts.isIdentifier(decl) || ts.isCallExpression(decl);
|
|
}
|
|
ts.isAssignmentDeclaration = isAssignmentDeclaration;
|
|
function getEffectiveInitializer(node) {
|
|
if (isInJSFile(node) && node.initializer &&
|
|
ts.isBinaryExpression(node.initializer) &&
|
|
(node.initializer.operatorToken.kind === 56 || node.initializer.operatorToken.kind === 60) &&
|
|
node.name && isEntityNameExpression(node.name) && isSameEntityName(node.name, node.initializer.left)) {
|
|
return node.initializer.right;
|
|
}
|
|
return node.initializer;
|
|
}
|
|
ts.getEffectiveInitializer = getEffectiveInitializer;
|
|
function getDeclaredExpandoInitializer(node) {
|
|
var init = getEffectiveInitializer(node);
|
|
return init && getExpandoInitializer(init, isPrototypeAccess(node.name));
|
|
}
|
|
ts.getDeclaredExpandoInitializer = getDeclaredExpandoInitializer;
|
|
function hasExpandoValueProperty(node, isPrototypeAssignment) {
|
|
return ts.forEach(node.properties, function (p) {
|
|
return ts.isPropertyAssignment(p) &&
|
|
ts.isIdentifier(p.name) &&
|
|
p.name.escapedText === "value" &&
|
|
p.initializer &&
|
|
getExpandoInitializer(p.initializer, isPrototypeAssignment);
|
|
});
|
|
}
|
|
function getAssignedExpandoInitializer(node) {
|
|
if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63) {
|
|
var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
|
|
return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
|
|
getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
|
|
}
|
|
if (node && ts.isCallExpression(node) && isBindableObjectDefinePropertyCall(node)) {
|
|
var result = hasExpandoValueProperty(node.arguments[2], node.arguments[1].text === "prototype");
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
ts.getAssignedExpandoInitializer = getAssignedExpandoInitializer;
|
|
function getExpandoInitializer(initializer, isPrototypeAssignment) {
|
|
if (ts.isCallExpression(initializer)) {
|
|
var e = skipParentheses(initializer.expression);
|
|
return e.kind === 213 || e.kind === 214 ? initializer : undefined;
|
|
}
|
|
if (initializer.kind === 213 ||
|
|
initializer.kind === 226 ||
|
|
initializer.kind === 214) {
|
|
return initializer;
|
|
}
|
|
if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
|
|
return initializer;
|
|
}
|
|
}
|
|
ts.getExpandoInitializer = getExpandoInitializer;
|
|
function getDefaultedExpandoInitializer(name, initializer, isPrototypeAssignment) {
|
|
var e = ts.isBinaryExpression(initializer)
|
|
&& (initializer.operatorToken.kind === 56 || initializer.operatorToken.kind === 60)
|
|
&& getExpandoInitializer(initializer.right, isPrototypeAssignment);
|
|
if (e && isSameEntityName(name, initializer.left)) {
|
|
return e;
|
|
}
|
|
}
|
|
function isDefaultedExpandoInitializer(node) {
|
|
var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
|
|
ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 ? node.parent.left :
|
|
undefined;
|
|
return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
|
|
}
|
|
ts.isDefaultedExpandoInitializer = isDefaultedExpandoInitializer;
|
|
function getNameOfExpando(node) {
|
|
if (ts.isBinaryExpression(node.parent)) {
|
|
var parent = ((node.parent.operatorToken.kind === 56 || node.parent.operatorToken.kind === 60) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
|
|
if (parent.operatorToken.kind === 63 && ts.isIdentifier(parent.left)) {
|
|
return parent.left;
|
|
}
|
|
}
|
|
else if (ts.isVariableDeclaration(node.parent)) {
|
|
return node.parent.name;
|
|
}
|
|
}
|
|
ts.getNameOfExpando = getNameOfExpando;
|
|
function isSameEntityName(name, initializer) {
|
|
if (isPropertyNameLiteral(name) && isPropertyNameLiteral(initializer)) {
|
|
return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
|
|
}
|
|
if (ts.isMemberName(name) && isLiteralLikeAccess(initializer) &&
|
|
(initializer.expression.kind === 108 ||
|
|
ts.isIdentifier(initializer.expression) &&
|
|
(initializer.expression.escapedText === "window" ||
|
|
initializer.expression.escapedText === "self" ||
|
|
initializer.expression.escapedText === "global"))) {
|
|
return isSameEntityName(name, getNameOrArgument(initializer));
|
|
}
|
|
if (isLiteralLikeAccess(name) && isLiteralLikeAccess(initializer)) {
|
|
return getElementOrPropertyAccessName(name) === getElementOrPropertyAccessName(initializer)
|
|
&& isSameEntityName(name.expression, initializer.expression);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isSameEntityName = isSameEntityName;
|
|
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 isModuleIdentifier(node) {
|
|
return ts.isIdentifier(node) && node.escapedText === "module";
|
|
}
|
|
ts.isModuleIdentifier = isModuleIdentifier;
|
|
function isModuleExportsAccessExpression(node) {
|
|
return (ts.isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node))
|
|
&& isModuleIdentifier(node.expression)
|
|
&& getElementOrPropertyAccessName(node) === "exports";
|
|
}
|
|
ts.isModuleExportsAccessExpression = isModuleExportsAccessExpression;
|
|
function getAssignmentDeclarationKind(expr) {
|
|
var special = getAssignmentDeclarationKindWorker(expr);
|
|
return special === 5 || isInJSFile(expr) ? special : 0;
|
|
}
|
|
ts.getAssignmentDeclarationKind = getAssignmentDeclarationKind;
|
|
function isBindableObjectDefinePropertyCall(expr) {
|
|
return ts.length(expr.arguments) === 3 &&
|
|
ts.isPropertyAccessExpression(expr.expression) &&
|
|
ts.isIdentifier(expr.expression.expression) &&
|
|
ts.idText(expr.expression.expression) === "Object" &&
|
|
ts.idText(expr.expression.name) === "defineProperty" &&
|
|
isStringOrNumericLiteralLike(expr.arguments[1]) &&
|
|
isBindableStaticNameExpression(expr.arguments[0], true);
|
|
}
|
|
ts.isBindableObjectDefinePropertyCall = isBindableObjectDefinePropertyCall;
|
|
function isLiteralLikeAccess(node) {
|
|
return ts.isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node);
|
|
}
|
|
ts.isLiteralLikeAccess = isLiteralLikeAccess;
|
|
function isLiteralLikeElementAccess(node) {
|
|
return ts.isElementAccessExpression(node) && isStringOrNumericLiteralLike(node.argumentExpression);
|
|
}
|
|
ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
|
|
function isBindableStaticAccessExpression(node, excludeThisKeyword) {
|
|
return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, true))
|
|
|| isBindableStaticElementAccessExpression(node, excludeThisKeyword);
|
|
}
|
|
ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
|
|
function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
|
|
return isLiteralLikeElementAccess(node)
|
|
&& ((!excludeThisKeyword && node.expression.kind === 108) ||
|
|
isEntityNameExpression(node.expression) ||
|
|
isBindableStaticAccessExpression(node.expression, true));
|
|
}
|
|
ts.isBindableStaticElementAccessExpression = isBindableStaticElementAccessExpression;
|
|
function isBindableStaticNameExpression(node, excludeThisKeyword) {
|
|
return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword);
|
|
}
|
|
ts.isBindableStaticNameExpression = isBindableStaticNameExpression;
|
|
function getNameOrArgument(expr) {
|
|
if (ts.isPropertyAccessExpression(expr)) {
|
|
return expr.name;
|
|
}
|
|
return expr.argumentExpression;
|
|
}
|
|
ts.getNameOrArgument = getNameOrArgument;
|
|
function getAssignmentDeclarationKindWorker(expr) {
|
|
if (ts.isCallExpression(expr)) {
|
|
if (!isBindableObjectDefinePropertyCall(expr)) {
|
|
return 0;
|
|
}
|
|
var entityName = expr.arguments[0];
|
|
if (isExportsIdentifier(entityName) || isModuleExportsAccessExpression(entityName)) {
|
|
return 8;
|
|
}
|
|
if (isBindableStaticAccessExpression(entityName) && getElementOrPropertyAccessName(entityName) === "prototype") {
|
|
return 9;
|
|
}
|
|
return 7;
|
|
}
|
|
if (expr.operatorToken.kind !== 63 || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
|
|
return 0;
|
|
}
|
|
if (isBindableStaticNameExpression(expr.left.expression, true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
|
|
return 6;
|
|
}
|
|
return getAssignmentDeclarationPropertyAccessKind(expr.left);
|
|
}
|
|
function isVoidZero(node) {
|
|
return ts.isVoidExpression(node) && ts.isNumericLiteral(node.expression) && node.expression.text === "0";
|
|
}
|
|
function getElementOrPropertyAccessArgumentExpressionOrName(node) {
|
|
if (ts.isPropertyAccessExpression(node)) {
|
|
return node.name;
|
|
}
|
|
var arg = skipParentheses(node.argumentExpression);
|
|
if (ts.isNumericLiteral(arg) || ts.isStringLiteralLike(arg)) {
|
|
return arg;
|
|
}
|
|
return node;
|
|
}
|
|
ts.getElementOrPropertyAccessArgumentExpressionOrName = getElementOrPropertyAccessArgumentExpressionOrName;
|
|
function getElementOrPropertyAccessName(node) {
|
|
var name = getElementOrPropertyAccessArgumentExpressionOrName(node);
|
|
if (name) {
|
|
if (ts.isIdentifier(name)) {
|
|
return name.escapedText;
|
|
}
|
|
if (ts.isStringLiteralLike(name) || ts.isNumericLiteral(name)) {
|
|
return ts.escapeLeadingUnderscores(name.text);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
|
|
function getAssignmentDeclarationPropertyAccessKind(lhs) {
|
|
if (lhs.expression.kind === 108) {
|
|
return 4;
|
|
}
|
|
else if (isModuleExportsAccessExpression(lhs)) {
|
|
return 2;
|
|
}
|
|
else if (isBindableStaticNameExpression(lhs.expression, true)) {
|
|
if (isPrototypeAccess(lhs.expression)) {
|
|
return 3;
|
|
}
|
|
var nextToLast = lhs;
|
|
while (!ts.isIdentifier(nextToLast.expression)) {
|
|
nextToLast = nextToLast.expression;
|
|
}
|
|
var id = nextToLast.expression;
|
|
if ((id.escapedText === "exports" ||
|
|
id.escapedText === "module" && getElementOrPropertyAccessName(nextToLast) === "exports") &&
|
|
isBindableStaticAccessExpression(lhs)) {
|
|
return 1;
|
|
}
|
|
if (isBindableStaticNameExpression(lhs, true) || (ts.isElementAccessExpression(lhs) && isDynamicName(lhs))) {
|
|
return 5;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
ts.getAssignmentDeclarationPropertyAccessKind = getAssignmentDeclarationPropertyAccessKind;
|
|
function getInitializerOfBinaryExpression(expr) {
|
|
while (ts.isBinaryExpression(expr.right)) {
|
|
expr = expr.right;
|
|
}
|
|
return expr.right;
|
|
}
|
|
ts.getInitializerOfBinaryExpression = getInitializerOfBinaryExpression;
|
|
function isPrototypePropertyAssignment(node) {
|
|
return ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 3;
|
|
}
|
|
ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
|
|
function isSpecialPropertyDeclaration(expr) {
|
|
return isInJSFile(expr) &&
|
|
expr.parent && expr.parent.kind === 238 &&
|
|
(!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
|
|
!!ts.getJSDocTypeTag(expr.parent);
|
|
}
|
|
ts.isSpecialPropertyDeclaration = isSpecialPropertyDeclaration;
|
|
function setValueDeclaration(symbol, node) {
|
|
var valueDeclaration = symbol.valueDeclaration;
|
|
if (!valueDeclaration ||
|
|
!(node.flags & 16777216 && !(valueDeclaration.flags & 16777216)) &&
|
|
(isAssignmentDeclaration(valueDeclaration) && !isAssignmentDeclaration(node)) ||
|
|
(valueDeclaration.kind !== node.kind && isEffectiveModuleDeclaration(valueDeclaration))) {
|
|
symbol.valueDeclaration = node;
|
|
}
|
|
}
|
|
ts.setValueDeclaration = setValueDeclaration;
|
|
function isFunctionSymbol(symbol) {
|
|
if (!symbol || !symbol.valueDeclaration) {
|
|
return false;
|
|
}
|
|
var decl = symbol.valueDeclaration;
|
|
return decl.kind === 256 || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
|
|
}
|
|
ts.isFunctionSymbol = isFunctionSymbol;
|
|
function tryGetModuleSpecifierFromDeclaration(node) {
|
|
var _a, _b;
|
|
switch (node.kind) {
|
|
case 254:
|
|
return (_a = ts.findAncestor(node.initializer, function (node) { return isRequireCall(node, true); })) === null || _a === void 0 ? void 0 : _a.arguments[0];
|
|
case 266:
|
|
return ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike);
|
|
case 265:
|
|
return ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike);
|
|
default:
|
|
ts.Debug.assertNever(node);
|
|
}
|
|
}
|
|
ts.tryGetModuleSpecifierFromDeclaration = tryGetModuleSpecifierFromDeclaration;
|
|
function importFromModuleSpecifier(node) {
|
|
return tryGetImportFromModuleSpecifier(node) || ts.Debug.failBadSyntaxKind(node.parent);
|
|
}
|
|
ts.importFromModuleSpecifier = importFromModuleSpecifier;
|
|
function tryGetImportFromModuleSpecifier(node) {
|
|
switch (node.parent.kind) {
|
|
case 266:
|
|
case 272:
|
|
return node.parent;
|
|
case 277:
|
|
return node.parent.parent;
|
|
case 208:
|
|
return isImportCall(node.parent) || isRequireCall(node.parent, false) ? node.parent : undefined;
|
|
case 196:
|
|
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 266:
|
|
case 272:
|
|
return node.moduleSpecifier;
|
|
case 265:
|
|
return node.moduleReference.kind === 277 ? node.moduleReference.expression : undefined;
|
|
case 200:
|
|
return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
|
|
case 208:
|
|
return node.arguments[0];
|
|
case 261:
|
|
return node.name.kind === 10 ? node.name : undefined;
|
|
default:
|
|
return ts.Debug.assertNever(node);
|
|
}
|
|
}
|
|
ts.getExternalModuleName = getExternalModuleName;
|
|
function getNamespaceDeclarationNode(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
|
|
case 265:
|
|
return node;
|
|
case 272:
|
|
return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
|
|
default:
|
|
return ts.Debug.assertNever(node);
|
|
}
|
|
}
|
|
ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
|
|
function isDefaultImport(node) {
|
|
return node.kind === 266 && !!node.importClause && !!node.importClause.name;
|
|
}
|
|
ts.isDefaultImport = isDefaultImport;
|
|
function forEachImportClauseDeclaration(node, action) {
|
|
if (node.name) {
|
|
var result = action(node);
|
|
if (result)
|
|
return result;
|
|
}
|
|
if (node.namedBindings) {
|
|
var result = ts.isNamespaceImport(node.namedBindings)
|
|
? action(node.namedBindings)
|
|
: ts.forEach(node.namedBindings.elements, action);
|
|
if (result)
|
|
return result;
|
|
}
|
|
}
|
|
ts.forEachImportClauseDeclaration = forEachImportClauseDeclaration;
|
|
function hasQuestionToken(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 164:
|
|
case 169:
|
|
case 168:
|
|
case 297:
|
|
case 296:
|
|
case 167:
|
|
case 166:
|
|
return node.questionToken !== undefined;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
ts.hasQuestionToken = hasQuestionToken;
|
|
function isJSDocConstructSignature(node) {
|
|
var param = ts.isJSDocFunctionType(node) ? ts.firstOrUndefined(node.parameters) : undefined;
|
|
var name = ts.tryCast(param && param.name, ts.isIdentifier);
|
|
return !!name && name.escapedText === "new";
|
|
}
|
|
ts.isJSDocConstructSignature = isJSDocConstructSignature;
|
|
function isJSDocTypeAlias(node) {
|
|
return node.kind === 345 || node.kind === 338 || node.kind === 339;
|
|
}
|
|
ts.isJSDocTypeAlias = isJSDocTypeAlias;
|
|
function isTypeAlias(node) {
|
|
return isJSDocTypeAlias(node) || ts.isTypeAliasDeclaration(node);
|
|
}
|
|
ts.isTypeAlias = isTypeAlias;
|
|
function getSourceOfAssignment(node) {
|
|
return ts.isExpressionStatement(node) &&
|
|
ts.isBinaryExpression(node.expression) &&
|
|
node.expression.operatorToken.kind === 63
|
|
? getRightMostAssignedExpression(node.expression)
|
|
: undefined;
|
|
}
|
|
function getSourceOfDefaultedAssignment(node) {
|
|
return ts.isExpressionStatement(node) &&
|
|
ts.isBinaryExpression(node.expression) &&
|
|
getAssignmentDeclarationKind(node.expression) !== 0 &&
|
|
ts.isBinaryExpression(node.expression.right) &&
|
|
(node.expression.right.operatorToken.kind === 56 || node.expression.right.operatorToken.kind === 60)
|
|
? node.expression.right.right
|
|
: undefined;
|
|
}
|
|
function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
|
|
switch (node.kind) {
|
|
case 237:
|
|
var v = getSingleVariableOfVariableStatement(node);
|
|
return v && v.initializer;
|
|
case 167:
|
|
return node.initializer;
|
|
case 296:
|
|
return node.initializer;
|
|
}
|
|
}
|
|
ts.getSingleInitializerOfVariableStatementOrPropertyDeclaration = getSingleInitializerOfVariableStatementOrPropertyDeclaration;
|
|
function getSingleVariableOfVariableStatement(node) {
|
|
return ts.isVariableStatement(node) ? ts.firstOrUndefined(node.declarationList.declarations) : undefined;
|
|
}
|
|
ts.getSingleVariableOfVariableStatement = getSingleVariableOfVariableStatement;
|
|
function getNestedModuleDeclaration(node) {
|
|
return ts.isModuleDeclaration(node) &&
|
|
node.body &&
|
|
node.body.kind === 261
|
|
? node.body
|
|
: undefined;
|
|
}
|
|
function getJSDocCommentsAndTags(hostNode, noCache) {
|
|
var result;
|
|
if (isVariableLike(hostNode) && ts.hasInitializer(hostNode) && ts.hasJSDocNodes(hostNode.initializer)) {
|
|
result = ts.addRange(result, filterOwnedJSDocTags(hostNode, ts.last(hostNode.initializer.jsDoc)));
|
|
}
|
|
var node = hostNode;
|
|
while (node && node.parent) {
|
|
if (ts.hasJSDocNodes(node)) {
|
|
result = ts.addRange(result, filterOwnedJSDocTags(hostNode, ts.last(node.jsDoc)));
|
|
}
|
|
if (node.kind === 164) {
|
|
result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
|
|
break;
|
|
}
|
|
if (node.kind === 163) {
|
|
result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
|
|
break;
|
|
}
|
|
node = getNextJSDocCommentLocation(node);
|
|
}
|
|
return result || ts.emptyArray;
|
|
}
|
|
ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
|
|
function filterOwnedJSDocTags(hostNode, jsDoc) {
|
|
if (ts.isJSDoc(jsDoc)) {
|
|
var ownedTags = ts.filter(jsDoc.tags, function (tag) { return ownsJSDocTag(hostNode, tag); });
|
|
return jsDoc.tags === ownedTags ? [jsDoc] : ownedTags;
|
|
}
|
|
return ownsJSDocTag(hostNode, jsDoc) ? [jsDoc] : undefined;
|
|
}
|
|
function ownsJSDocTag(hostNode, tag) {
|
|
return !ts.isJSDocTypeTag(tag)
|
|
|| !tag.parent
|
|
|| !ts.isJSDoc(tag.parent)
|
|
|| !ts.isParenthesizedExpression(tag.parent.parent)
|
|
|| tag.parent.parent === hostNode;
|
|
}
|
|
function getNextJSDocCommentLocation(node) {
|
|
var parent = node.parent;
|
|
if (parent.kind === 296 ||
|
|
parent.kind === 271 ||
|
|
parent.kind === 167 ||
|
|
parent.kind === 238 && node.kind === 206 ||
|
|
parent.kind === 247 ||
|
|
getNestedModuleDeclaration(parent) ||
|
|
ts.isBinaryExpression(node) && node.operatorToken.kind === 63) {
|
|
return parent;
|
|
}
|
|
else if (parent.parent &&
|
|
(getSingleVariableOfVariableStatement(parent.parent) === node ||
|
|
ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63)) {
|
|
return parent.parent;
|
|
}
|
|
else if (parent.parent && parent.parent.parent &&
|
|
(getSingleVariableOfVariableStatement(parent.parent.parent) ||
|
|
getSingleInitializerOfVariableStatementOrPropertyDeclaration(parent.parent.parent) === node ||
|
|
getSourceOfDefaultedAssignment(parent.parent.parent))) {
|
|
return parent.parent.parent;
|
|
}
|
|
}
|
|
ts.getNextJSDocCommentLocation = getNextJSDocCommentLocation;
|
|
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 === 79 && p.name.escapedText === name; });
|
|
return parameter && parameter.symbol;
|
|
}
|
|
ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
|
|
function getEffectiveContainerForJSDocTemplateTag(node) {
|
|
if (ts.isJSDoc(node.parent) && node.parent.tags) {
|
|
var typeAlias = ts.find(node.parent.tags, isJSDocTypeAlias);
|
|
if (typeAlias) {
|
|
return typeAlias;
|
|
}
|
|
}
|
|
return getHostSignatureFromJSDoc(node);
|
|
}
|
|
ts.getEffectiveContainerForJSDocTemplateTag = getEffectiveContainerForJSDocTemplateTag;
|
|
function getHostSignatureFromJSDoc(node) {
|
|
var host = getEffectiveJSDocHost(node);
|
|
if (host) {
|
|
return ts.isPropertySignature(host) && host.type && ts.isFunctionLike(host.type) ? host.type :
|
|
ts.isFunctionLike(host) ? host : undefined;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getHostSignatureFromJSDoc = getHostSignatureFromJSDoc;
|
|
function getEffectiveJSDocHost(node) {
|
|
var host = getJSDocHost(node);
|
|
if (host) {
|
|
return getSourceOfDefaultedAssignment(host)
|
|
|| getSourceOfAssignment(host)
|
|
|| getSingleInitializerOfVariableStatementOrPropertyDeclaration(host)
|
|
|| getSingleVariableOfVariableStatement(host)
|
|
|| getNestedModuleDeclaration(host)
|
|
|| host;
|
|
}
|
|
}
|
|
ts.getEffectiveJSDocHost = getEffectiveJSDocHost;
|
|
function getJSDocHost(node) {
|
|
var jsDoc = getJSDocRoot(node);
|
|
if (!jsDoc) {
|
|
return undefined;
|
|
}
|
|
var host = jsDoc.parent;
|
|
if (host && host.jsDoc && jsDoc === ts.lastOrUndefined(host.jsDoc)) {
|
|
return host;
|
|
}
|
|
}
|
|
ts.getJSDocHost = getJSDocHost;
|
|
function getJSDocRoot(node) {
|
|
return ts.findAncestor(node.parent, ts.isJSDoc);
|
|
}
|
|
ts.getJSDocRoot = getJSDocRoot;
|
|
function getTypeParameterFromJsDoc(node) {
|
|
var name = node.name.escapedText;
|
|
var typeParameters = node.parent.parent.parent.typeParameters;
|
|
return typeParameters && ts.find(typeParameters, function (p) { return p.name.escapedText === name; });
|
|
}
|
|
ts.getTypeParameterFromJsDoc = getTypeParameterFromJsDoc;
|
|
function hasTypeArguments(node) {
|
|
return !!node.typeArguments;
|
|
}
|
|
ts.hasTypeArguments = hasTypeArguments;
|
|
function getAssignmentTargetKind(node) {
|
|
var parent = node.parent;
|
|
while (true) {
|
|
switch (parent.kind) {
|
|
case 221:
|
|
var binaryOperator = parent.operatorToken.kind;
|
|
return isAssignmentOperator(binaryOperator) && parent.left === node ?
|
|
binaryOperator === 63 || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 : 2 :
|
|
0;
|
|
case 219:
|
|
case 220:
|
|
var unaryOperator = parent.operator;
|
|
return unaryOperator === 45 || unaryOperator === 46 ? 2 : 0;
|
|
case 243:
|
|
case 244:
|
|
return parent.initializer === node ? 1 : 0;
|
|
case 212:
|
|
case 204:
|
|
case 225:
|
|
case 230:
|
|
node = parent;
|
|
break;
|
|
case 298:
|
|
node = parent.parent;
|
|
break;
|
|
case 297:
|
|
if (parent.name !== node) {
|
|
return 0;
|
|
}
|
|
node = parent.parent;
|
|
break;
|
|
case 296:
|
|
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 235:
|
|
case 237:
|
|
case 248:
|
|
case 239:
|
|
case 249:
|
|
case 263:
|
|
case 289:
|
|
case 290:
|
|
case 250:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
case 240:
|
|
case 241:
|
|
case 252:
|
|
case 292:
|
|
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, 191);
|
|
}
|
|
ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
|
|
function walkUpParenthesizedExpressions(node) {
|
|
return walkUp(node, 212);
|
|
}
|
|
ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
|
|
function walkUpParenthesizedTypesAndGetParentAndChild(node) {
|
|
var child;
|
|
while (node && node.kind === 191) {
|
|
child = node;
|
|
node = node.parent;
|
|
}
|
|
return [child, node];
|
|
}
|
|
ts.walkUpParenthesizedTypesAndGetParentAndChild = walkUpParenthesizedTypesAndGetParentAndChild;
|
|
function skipTypeParentheses(node) {
|
|
while (ts.isParenthesizedTypeNode(node))
|
|
node = node.type;
|
|
return node;
|
|
}
|
|
ts.skipTypeParentheses = skipTypeParentheses;
|
|
function skipParentheses(node, excludeJSDocTypeAssertions) {
|
|
var flags = excludeJSDocTypeAssertions ?
|
|
1 | 16 :
|
|
1;
|
|
return ts.skipOuterExpressions(node, flags);
|
|
}
|
|
ts.skipParentheses = skipParentheses;
|
|
function isDeleteTarget(node) {
|
|
if (node.kind !== 206 && node.kind !== 207) {
|
|
return false;
|
|
}
|
|
node = walkUpParenthesizedExpressions(node.parent);
|
|
return node && node.kind === 215;
|
|
}
|
|
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 getDeclarationFromName(name) {
|
|
var parent = name.parent;
|
|
switch (name.kind) {
|
|
case 10:
|
|
case 14:
|
|
case 8:
|
|
if (ts.isComputedPropertyName(parent))
|
|
return parent.parent;
|
|
case 79:
|
|
if (ts.isDeclaration(parent)) {
|
|
return parent.name === name ? parent : undefined;
|
|
}
|
|
else if (ts.isQualifiedName(parent)) {
|
|
var tag = parent.parent;
|
|
return ts.isJSDocParameterTag(tag) && tag.name === parent ? tag : undefined;
|
|
}
|
|
else {
|
|
var binExp = parent.parent;
|
|
return ts.isBinaryExpression(binExp) &&
|
|
getAssignmentDeclarationKind(binExp) !== 0 &&
|
|
(binExp.left.symbol || binExp.symbol) &&
|
|
ts.getNameOfDeclaration(binExp) === name
|
|
? binExp
|
|
: undefined;
|
|
}
|
|
case 80:
|
|
return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.getDeclarationFromName = getDeclarationFromName;
|
|
function isLiteralComputedPropertyDeclarationName(node) {
|
|
return isStringOrNumericLiteralLike(node) &&
|
|
node.parent.kind === 162 &&
|
|
ts.isDeclaration(node.parent.parent);
|
|
}
|
|
ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
|
|
function isIdentifierName(node) {
|
|
var parent = node.parent;
|
|
switch (parent.kind) {
|
|
case 167:
|
|
case 166:
|
|
case 169:
|
|
case 168:
|
|
case 172:
|
|
case 173:
|
|
case 299:
|
|
case 296:
|
|
case 206:
|
|
return parent.name === node;
|
|
case 161:
|
|
return parent.right === node;
|
|
case 203:
|
|
case 270:
|
|
return parent.propertyName === node;
|
|
case 275:
|
|
case 285:
|
|
case 279:
|
|
case 280:
|
|
case 281:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isIdentifierName = isIdentifierName;
|
|
function isAliasSymbolDeclaration(node) {
|
|
if (node.kind === 265 ||
|
|
node.kind === 264 ||
|
|
node.kind === 267 && !!node.name ||
|
|
node.kind === 268 ||
|
|
node.kind === 274 ||
|
|
node.kind === 270 ||
|
|
node.kind === 275 ||
|
|
node.kind === 271 && exportAssignmentIsAlias(node)) {
|
|
return true;
|
|
}
|
|
return isInJSFile(node) && (ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 && exportAssignmentIsAlias(node) ||
|
|
ts.isPropertyAccessExpression(node)
|
|
&& ts.isBinaryExpression(node.parent)
|
|
&& node.parent.left === node
|
|
&& node.parent.operatorToken.kind === 63
|
|
&& isAliasableExpression(node.parent.right));
|
|
}
|
|
ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
|
|
function getAliasDeclarationFromName(node) {
|
|
switch (node.parent.kind) {
|
|
case 267:
|
|
case 270:
|
|
case 268:
|
|
case 275:
|
|
case 271:
|
|
case 265:
|
|
case 274:
|
|
return node.parent;
|
|
case 161:
|
|
do {
|
|
node = node.parent;
|
|
} while (node.parent.kind === 161);
|
|
return getAliasDeclarationFromName(node);
|
|
}
|
|
}
|
|
ts.getAliasDeclarationFromName = getAliasDeclarationFromName;
|
|
function isAliasableExpression(e) {
|
|
return isEntityNameExpression(e) || ts.isClassExpression(e);
|
|
}
|
|
ts.isAliasableExpression = isAliasableExpression;
|
|
function exportAssignmentIsAlias(node) {
|
|
var e = getExportAssignmentExpression(node);
|
|
return isAliasableExpression(e);
|
|
}
|
|
ts.exportAssignmentIsAlias = exportAssignmentIsAlias;
|
|
function getExportAssignmentExpression(node) {
|
|
return ts.isExportAssignment(node) ? node.expression : node.right;
|
|
}
|
|
ts.getExportAssignmentExpression = getExportAssignmentExpression;
|
|
function getPropertyAssignmentAliasLikeExpression(node) {
|
|
return node.kind === 297 ? node.name : node.kind === 296 ? node.initializer :
|
|
node.parent.right;
|
|
}
|
|
ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
|
|
function getEffectiveBaseTypeNode(node) {
|
|
var baseType = getClassExtendsHeritageElement(node);
|
|
if (baseType && isInJSFile(node)) {
|
|
var tag = ts.getJSDocAugmentsTag(node);
|
|
if (tag) {
|
|
return tag.class;
|
|
}
|
|
}
|
|
return baseType;
|
|
}
|
|
ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
|
|
function getClassExtendsHeritageElement(node) {
|
|
var heritageClause = getHeritageClause(node.heritageClauses, 94);
|
|
return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
|
|
}
|
|
ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
|
|
function getEffectiveImplementsTypeNodes(node) {
|
|
if (isInJSFile(node)) {
|
|
return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
|
|
}
|
|
else {
|
|
var heritageClause = getHeritageClause(node.heritageClauses, 117);
|
|
return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
|
|
}
|
|
}
|
|
ts.getEffectiveImplementsTypeNodes = getEffectiveImplementsTypeNodes;
|
|
function getAllSuperTypeNodes(node) {
|
|
return ts.isInterfaceDeclaration(node) ? getInterfaceBaseTypeNodes(node) || ts.emptyArray :
|
|
ts.isClassLike(node) ? ts.concatenate(ts.singleElementArray(getEffectiveBaseTypeNode(node)), getEffectiveImplementsTypeNodes(node)) || ts.emptyArray :
|
|
ts.emptyArray;
|
|
}
|
|
ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
|
|
function getInterfaceBaseTypeNodes(node) {
|
|
var heritageClause = getHeritageClause(node.heritageClauses, 94);
|
|
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 getAncestor(node, kind) {
|
|
while (node) {
|
|
if (node.kind === kind) {
|
|
return node;
|
|
}
|
|
node = node.parent;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getAncestor = getAncestor;
|
|
function isKeyword(token) {
|
|
return 81 <= token && token <= 160;
|
|
}
|
|
ts.isKeyword = isKeyword;
|
|
function isContextualKeyword(token) {
|
|
return 126 <= token && token <= 160;
|
|
}
|
|
ts.isContextualKeyword = isContextualKeyword;
|
|
function isNonContextualKeyword(token) {
|
|
return isKeyword(token) && !isContextualKeyword(token);
|
|
}
|
|
ts.isNonContextualKeyword = isNonContextualKeyword;
|
|
function isFutureReservedKeyword(token) {
|
|
return 117 <= token && token <= 125;
|
|
}
|
|
ts.isFutureReservedKeyword = isFutureReservedKeyword;
|
|
function isStringANonContextualKeyword(name) {
|
|
var token = ts.stringToToken(name);
|
|
return token !== undefined && isNonContextualKeyword(token);
|
|
}
|
|
ts.isStringANonContextualKeyword = isStringANonContextualKeyword;
|
|
function isStringAKeyword(name) {
|
|
var token = ts.stringToToken(name);
|
|
return token !== undefined && isKeyword(token);
|
|
}
|
|
ts.isStringAKeyword = isStringAKeyword;
|
|
function isIdentifierANonContextualKeyword(_a) {
|
|
var originalKeywordKind = _a.originalKeywordKind;
|
|
return !!originalKeywordKind && !isContextualKeyword(originalKeywordKind);
|
|
}
|
|
ts.isIdentifierANonContextualKeyword = isIdentifierANonContextualKeyword;
|
|
function isTrivia(token) {
|
|
return 2 <= token && token <= 7;
|
|
}
|
|
ts.isTrivia = isTrivia;
|
|
function getFunctionFlags(node) {
|
|
if (!node) {
|
|
return 4;
|
|
}
|
|
var flags = 0;
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 213:
|
|
case 169:
|
|
if (node.asteriskToken) {
|
|
flags |= 1;
|
|
}
|
|
case 214:
|
|
if (hasSyntacticModifier(node, 256)) {
|
|
flags |= 2;
|
|
}
|
|
break;
|
|
}
|
|
if (!node.body) {
|
|
flags |= 4;
|
|
}
|
|
return flags;
|
|
}
|
|
ts.getFunctionFlags = getFunctionFlags;
|
|
function isAsyncFunction(node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
case 169:
|
|
return node.body !== undefined
|
|
&& node.asteriskToken === undefined
|
|
&& hasSyntacticModifier(node, 256);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isAsyncFunction = isAsyncFunction;
|
|
function isStringOrNumericLiteralLike(node) {
|
|
return ts.isStringLiteralLike(node) || ts.isNumericLiteral(node);
|
|
}
|
|
ts.isStringOrNumericLiteralLike = isStringOrNumericLiteralLike;
|
|
function isSignedNumericLiteral(node) {
|
|
return ts.isPrefixUnaryExpression(node) && (node.operator === 39 || node.operator === 40) && ts.isNumericLiteral(node.operand);
|
|
}
|
|
ts.isSignedNumericLiteral = isSignedNumericLiteral;
|
|
function hasDynamicName(declaration) {
|
|
var name = ts.getNameOfDeclaration(declaration);
|
|
return !!name && isDynamicName(name);
|
|
}
|
|
ts.hasDynamicName = hasDynamicName;
|
|
function isDynamicName(name) {
|
|
if (!(name.kind === 162 || name.kind === 207)) {
|
|
return false;
|
|
}
|
|
var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
|
|
return !isStringOrNumericLiteralLike(expr) &&
|
|
!isSignedNumericLiteral(expr);
|
|
}
|
|
ts.isDynamicName = isDynamicName;
|
|
function getPropertyNameForPropertyNameNode(name) {
|
|
switch (name.kind) {
|
|
case 79:
|
|
case 80:
|
|
return name.escapedText;
|
|
case 10:
|
|
case 8:
|
|
return ts.escapeLeadingUnderscores(name.text);
|
|
case 162:
|
|
var nameExpression = name.expression;
|
|
if (isStringOrNumericLiteralLike(nameExpression)) {
|
|
return ts.escapeLeadingUnderscores(nameExpression.text);
|
|
}
|
|
else if (isSignedNumericLiteral(nameExpression)) {
|
|
if (nameExpression.operator === 40) {
|
|
return ts.tokenToString(nameExpression.operator) + nameExpression.operand.text;
|
|
}
|
|
return nameExpression.operand.text;
|
|
}
|
|
return undefined;
|
|
default:
|
|
return ts.Debug.assertNever(name);
|
|
}
|
|
}
|
|
ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
|
|
function isPropertyNameLiteral(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
case 10:
|
|
case 14:
|
|
case 8:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isPropertyNameLiteral = isPropertyNameLiteral;
|
|
function getTextOfIdentifierOrLiteral(node) {
|
|
return ts.isMemberName(node) ? ts.idText(node) : node.text;
|
|
}
|
|
ts.getTextOfIdentifierOrLiteral = getTextOfIdentifierOrLiteral;
|
|
function getEscapedTextOfIdentifierOrLiteral(node) {
|
|
return ts.isMemberName(node) ? node.escapedText : ts.escapeLeadingUnderscores(node.text);
|
|
}
|
|
ts.getEscapedTextOfIdentifierOrLiteral = getEscapedTextOfIdentifierOrLiteral;
|
|
function getPropertyNameForUniqueESSymbol(symbol) {
|
|
return "__@".concat(ts.getSymbolId(symbol), "@").concat(symbol.escapedName);
|
|
}
|
|
ts.getPropertyNameForUniqueESSymbol = getPropertyNameForUniqueESSymbol;
|
|
function getSymbolNameForPrivateIdentifier(containingClassSymbol, description) {
|
|
return "__#".concat(ts.getSymbolId(containingClassSymbol), "@").concat(description);
|
|
}
|
|
ts.getSymbolNameForPrivateIdentifier = getSymbolNameForPrivateIdentifier;
|
|
function isKnownSymbol(symbol) {
|
|
return ts.startsWith(symbol.escapedName, "__@");
|
|
}
|
|
ts.isKnownSymbol = isKnownSymbol;
|
|
function isPrivateIdentifierSymbol(symbol) {
|
|
return ts.startsWith(symbol.escapedName, "__#");
|
|
}
|
|
ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
|
|
function isESSymbolIdentifier(node) {
|
|
return node.kind === 79 && 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 === 164;
|
|
}
|
|
ts.isParameterDeclaration = isParameterDeclaration;
|
|
function getRootDeclaration(node) {
|
|
while (node.kind === 203) {
|
|
node = node.parent.parent;
|
|
}
|
|
return node;
|
|
}
|
|
ts.getRootDeclaration = getRootDeclaration;
|
|
function nodeStartsNewLexicalEnvironment(node) {
|
|
var kind = node.kind;
|
|
return kind === 171
|
|
|| kind === 213
|
|
|| kind === 256
|
|
|| kind === 214
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173
|
|
|| kind === 261
|
|
|| kind === 305;
|
|
}
|
|
ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
|
|
function nodeIsSynthesized(range) {
|
|
return positionIsSynthesized(range.pos)
|
|
|| positionIsSynthesized(range.end);
|
|
}
|
|
ts.nodeIsSynthesized = nodeIsSynthesized;
|
|
function getOriginalSourceFile(sourceFile) {
|
|
return ts.getParseTreeNode(sourceFile, ts.isSourceFile) || sourceFile;
|
|
}
|
|
ts.getOriginalSourceFile = getOriginalSourceFile;
|
|
function getExpressionAssociativity(expression) {
|
|
var operator = getOperator(expression);
|
|
var hasArguments = expression.kind === 209 && expression.arguments !== undefined;
|
|
return getOperatorAssociativity(expression.kind, operator, hasArguments);
|
|
}
|
|
ts.getExpressionAssociativity = getExpressionAssociativity;
|
|
function getOperatorAssociativity(kind, operator, hasArguments) {
|
|
switch (kind) {
|
|
case 209:
|
|
return hasArguments ? 0 : 1;
|
|
case 219:
|
|
case 216:
|
|
case 217:
|
|
case 215:
|
|
case 218:
|
|
case 222:
|
|
case 224:
|
|
return 1;
|
|
case 221:
|
|
switch (operator) {
|
|
case 42:
|
|
case 63:
|
|
case 64:
|
|
case 65:
|
|
case 67:
|
|
case 66:
|
|
case 68:
|
|
case 69:
|
|
case 70:
|
|
case 71:
|
|
case 72:
|
|
case 73:
|
|
case 78:
|
|
case 74:
|
|
case 75:
|
|
case 76:
|
|
case 77:
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
ts.getOperatorAssociativity = getOperatorAssociativity;
|
|
function getExpressionPrecedence(expression) {
|
|
var operator = getOperator(expression);
|
|
var hasArguments = expression.kind === 209 && expression.arguments !== undefined;
|
|
return getOperatorPrecedence(expression.kind, operator, hasArguments);
|
|
}
|
|
ts.getExpressionPrecedence = getExpressionPrecedence;
|
|
function getOperator(expression) {
|
|
if (expression.kind === 221) {
|
|
return expression.operatorToken.kind;
|
|
}
|
|
else if (expression.kind === 219 || expression.kind === 220) {
|
|
return expression.operator;
|
|
}
|
|
else {
|
|
return expression.kind;
|
|
}
|
|
}
|
|
ts.getOperator = getOperator;
|
|
function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
|
|
switch (nodeKind) {
|
|
case 351:
|
|
return 0;
|
|
case 225:
|
|
return 1;
|
|
case 224:
|
|
return 2;
|
|
case 222:
|
|
return 4;
|
|
case 221:
|
|
switch (operatorKind) {
|
|
case 27:
|
|
return 0;
|
|
case 63:
|
|
case 64:
|
|
case 65:
|
|
case 67:
|
|
case 66:
|
|
case 68:
|
|
case 69:
|
|
case 70:
|
|
case 71:
|
|
case 72:
|
|
case 73:
|
|
case 78:
|
|
case 74:
|
|
case 75:
|
|
case 76:
|
|
case 77:
|
|
return 3;
|
|
default:
|
|
return getBinaryOperatorPrecedence(operatorKind);
|
|
}
|
|
case 211:
|
|
case 230:
|
|
case 219:
|
|
case 216:
|
|
case 217:
|
|
case 215:
|
|
case 218:
|
|
return 16;
|
|
case 220:
|
|
return 17;
|
|
case 208:
|
|
return 18;
|
|
case 209:
|
|
return hasArguments ? 19 : 18;
|
|
case 210:
|
|
case 206:
|
|
case 207:
|
|
case 231:
|
|
return 19;
|
|
case 229:
|
|
return 11;
|
|
case 108:
|
|
case 106:
|
|
case 79:
|
|
case 80:
|
|
case 104:
|
|
case 110:
|
|
case 95:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 204:
|
|
case 205:
|
|
case 213:
|
|
case 214:
|
|
case 226:
|
|
case 13:
|
|
case 14:
|
|
case 223:
|
|
case 212:
|
|
case 227:
|
|
case 278:
|
|
case 279:
|
|
case 282:
|
|
return 20;
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
ts.getOperatorPrecedence = getOperatorPrecedence;
|
|
function getBinaryOperatorPrecedence(kind) {
|
|
switch (kind) {
|
|
case 60:
|
|
return 4;
|
|
case 56:
|
|
return 5;
|
|
case 55:
|
|
return 6;
|
|
case 51:
|
|
return 7;
|
|
case 52:
|
|
return 8;
|
|
case 50:
|
|
return 9;
|
|
case 34:
|
|
case 35:
|
|
case 36:
|
|
case 37:
|
|
return 10;
|
|
case 29:
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
case 102:
|
|
case 101:
|
|
case 127:
|
|
return 11;
|
|
case 47:
|
|
case 48:
|
|
case 49:
|
|
return 12;
|
|
case 39:
|
|
case 40:
|
|
return 13;
|
|
case 41:
|
|
case 43:
|
|
case 44:
|
|
return 14;
|
|
case 42:
|
|
return 15;
|
|
}
|
|
return -1;
|
|
}
|
|
ts.getBinaryOperatorPrecedence = getBinaryOperatorPrecedence;
|
|
function getSemanticJsxChildren(children) {
|
|
return ts.filter(children, function (i) {
|
|
switch (i.kind) {
|
|
case 288:
|
|
return !!i.expression;
|
|
case 11:
|
|
return !i.containsOnlyTriviaWhiteSpaces;
|
|
default:
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
ts.getSemanticJsxChildren = getSemanticJsxChildren;
|
|
function createDiagnosticCollection() {
|
|
var nonFileDiagnostics = [];
|
|
var filesWithDiagnostics = [];
|
|
var fileDiagnostics = new ts.Map();
|
|
var hasReadNonFileDiagnostics = false;
|
|
return {
|
|
add: add,
|
|
lookup: lookup,
|
|
getGlobalDiagnostics: getGlobalDiagnostics,
|
|
getDiagnostics: getDiagnostics,
|
|
};
|
|
function lookup(diagnostic) {
|
|
var diagnostics;
|
|
if (diagnostic.file) {
|
|
diagnostics = fileDiagnostics.get(diagnostic.file.fileName);
|
|
}
|
|
else {
|
|
diagnostics = nonFileDiagnostics;
|
|
}
|
|
if (!diagnostics) {
|
|
return undefined;
|
|
}
|
|
var result = ts.binarySearch(diagnostics, diagnostic, ts.identity, compareDiagnosticsSkipRelatedInformation);
|
|
if (result >= 0) {
|
|
return diagnostics[result];
|
|
}
|
|
return undefined;
|
|
}
|
|
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, compareDiagnostics);
|
|
}
|
|
function getGlobalDiagnostics() {
|
|
hasReadNonFileDiagnostics = true;
|
|
return nonFileDiagnostics;
|
|
}
|
|
function getDiagnostics(fileName) {
|
|
if (fileName) {
|
|
return fileDiagnostics.get(fileName) || [];
|
|
}
|
|
var fileDiags = ts.flatMapToMutable(filesWithDiagnostics, function (f) { return fileDiagnostics.get(f); });
|
|
if (!nonFileDiagnostics.length) {
|
|
return fileDiags;
|
|
}
|
|
fileDiags.unshift.apply(fileDiags, nonFileDiagnostics);
|
|
return fileDiags;
|
|
}
|
|
}
|
|
ts.createDiagnosticCollection = createDiagnosticCollection;
|
|
var templateSubstitutionRegExp = /\$\{/g;
|
|
function escapeTemplateSubstitution(str) {
|
|
return str.replace(templateSubstitutionRegExp, "\\${");
|
|
}
|
|
function hasInvalidEscape(template) {
|
|
return template && !!(ts.isNoSubstitutionTemplateLiteral(template)
|
|
? template.templateFlags
|
|
: (template.head.templateFlags || ts.some(template.templateSpans, function (span) { return !!span.literal.templateFlags; })));
|
|
}
|
|
ts.hasInvalidEscape = hasInvalidEscape;
|
|
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 = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
|
|
var escapedCharsMap = new ts.Map(ts.getEntries({
|
|
"\t": "\\t",
|
|
"\v": "\\v",
|
|
"\f": "\\f",
|
|
"\b": "\\b",
|
|
"\r": "\\r",
|
|
"\n": "\\n",
|
|
"\\": "\\\\",
|
|
"\"": "\\\"",
|
|
"\'": "\\\'",
|
|
"\`": "\\\`",
|
|
"\u2028": "\\u2028",
|
|
"\u2029": "\\u2029",
|
|
"\u0085": "\\u0085",
|
|
"\r\n": "\\r\\n",
|
|
}));
|
|
function encodeUtf16EscapeSequence(charCode) {
|
|
var hexCharCode = charCode.toString(16).toUpperCase();
|
|
var paddedHexCode = ("0000" + hexCharCode).slice(-4);
|
|
return "\\u" + paddedHexCode;
|
|
}
|
|
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) || encodeUtf16EscapeSequence(c.charCodeAt(0));
|
|
}
|
|
function escapeString(s, quoteChar) {
|
|
var escapedCharsRegExp = quoteChar === 96 ? backtickQuoteEscapedCharsRegExp :
|
|
quoteChar === 39 ? singleQuoteEscapedCharsRegExp :
|
|
doubleQuoteEscapedCharsRegExp;
|
|
return s.replace(escapedCharsRegExp, getReplacement);
|
|
}
|
|
ts.escapeString = escapeString;
|
|
var nonAsciiCharacters = /[^\u0000-\u007F]/g;
|
|
function escapeNonAsciiString(s, quoteChar) {
|
|
s = escapeString(s, quoteChar);
|
|
return nonAsciiCharacters.test(s) ?
|
|
s.replace(nonAsciiCharacters, function (c) { return encodeUtf16EscapeSequence(c.charCodeAt(0)); }) :
|
|
s;
|
|
}
|
|
ts.escapeNonAsciiString = escapeNonAsciiString;
|
|
var jsxDoubleQuoteEscapedCharsRegExp = /[\"\u0000-\u001f\u2028\u2029\u0085]/g;
|
|
var jsxSingleQuoteEscapedCharsRegExp = /[\'\u0000-\u001f\u2028\u2029\u0085]/g;
|
|
var jsxEscapedCharsMap = new ts.Map(ts.getEntries({
|
|
"\"": """,
|
|
"\'": "'"
|
|
}));
|
|
function encodeJsxCharacterEntity(charCode) {
|
|
var hexCharCode = charCode.toString(16).toUpperCase();
|
|
return "&#x" + hexCharCode + ";";
|
|
}
|
|
function getJsxAttributeStringReplacement(c) {
|
|
if (c.charCodeAt(0) === 0) {
|
|
return "�";
|
|
}
|
|
return jsxEscapedCharsMap.get(c) || encodeJsxCharacterEntity(c.charCodeAt(0));
|
|
}
|
|
function escapeJsxAttributeString(s, quoteChar) {
|
|
var escapedCharsRegExp = quoteChar === 39 ? jsxSingleQuoteEscapedCharsRegExp :
|
|
jsxDoubleQuoteEscapedCharsRegExp;
|
|
return s.replace(escapedCharsRegExp, getJsxAttributeStringReplacement);
|
|
}
|
|
ts.escapeJsxAttributeString = escapeJsxAttributeString;
|
|
function stripQuotes(name) {
|
|
var length = name.length;
|
|
if (length >= 2 && name.charCodeAt(0) === name.charCodeAt(length - 1) && isQuoteOrBacktick(name.charCodeAt(0))) {
|
|
return name.substring(1, length - 1);
|
|
}
|
|
return name;
|
|
}
|
|
ts.stripQuotes = stripQuotes;
|
|
function isQuoteOrBacktick(charCode) {
|
|
return charCode === 39 ||
|
|
charCode === 34 ||
|
|
charCode === 96;
|
|
}
|
|
function isIntrinsicJsxName(name) {
|
|
var ch = name.charCodeAt(0);
|
|
return (ch >= 97 && ch <= 122) || ts.stringContains(name, "-") || ts.stringContains(name, ":");
|
|
}
|
|
ts.isIntrinsicJsxName = isIntrinsicJsxName;
|
|
var indentStrings = ["", " "];
|
|
function getIndentString(level) {
|
|
var singleLevel = indentStrings[1];
|
|
for (var current = indentStrings.length; current <= level; current++) {
|
|
indentStrings.push(indentStrings[current - 1] + singleLevel);
|
|
}
|
|
return indentStrings[level];
|
|
}
|
|
ts.getIndentString = getIndentString;
|
|
function getIndentSize() {
|
|
return indentStrings[1].length;
|
|
}
|
|
ts.getIndentSize = getIndentSize;
|
|
function isNightly() {
|
|
return ts.stringContains(ts.version, "-dev") || ts.stringContains(ts.version, "-insiders");
|
|
}
|
|
ts.isNightly = isNightly;
|
|
function createTextWriter(newLine) {
|
|
var output;
|
|
var indent;
|
|
var lineStart;
|
|
var lineCount;
|
|
var linePos;
|
|
var hasTrailingComment = false;
|
|
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 writeText(s) {
|
|
if (s && s.length) {
|
|
if (lineStart) {
|
|
s = getIndentString(indent) + s;
|
|
lineStart = false;
|
|
}
|
|
output += s;
|
|
updateLineCountAndPosFor(s);
|
|
}
|
|
}
|
|
function write(s) {
|
|
if (s)
|
|
hasTrailingComment = false;
|
|
writeText(s);
|
|
}
|
|
function writeComment(s) {
|
|
if (s)
|
|
hasTrailingComment = true;
|
|
writeText(s);
|
|
}
|
|
function reset() {
|
|
output = "";
|
|
indent = 0;
|
|
lineStart = true;
|
|
lineCount = 0;
|
|
linePos = 0;
|
|
hasTrailingComment = false;
|
|
}
|
|
function rawWrite(s) {
|
|
if (s !== undefined) {
|
|
output += s;
|
|
updateLineCountAndPosFor(s);
|
|
hasTrailingComment = false;
|
|
}
|
|
}
|
|
function writeLiteral(s) {
|
|
if (s && s.length) {
|
|
write(s);
|
|
}
|
|
}
|
|
function writeLine(force) {
|
|
if (!lineStart || force) {
|
|
output += newLine;
|
|
lineCount++;
|
|
linePos = output.length;
|
|
lineStart = true;
|
|
hasTrailingComment = false;
|
|
}
|
|
}
|
|
function getTextPosWithWriteLine() {
|
|
return lineStart ? output.length : (output.length + newLine.length);
|
|
}
|
|
reset();
|
|
return {
|
|
write: write,
|
|
rawWrite: rawWrite,
|
|
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; },
|
|
hasTrailingComment: function () { return hasTrailingComment; },
|
|
hasTrailingWhitespace: function () { return !!output.length && ts.isWhiteSpaceLike(output.charCodeAt(output.length - 1)); },
|
|
clear: reset,
|
|
reportInaccessibleThisError: ts.noop,
|
|
reportPrivateInBaseOfClassExpression: ts.noop,
|
|
reportInaccessibleUniqueSymbolError: ts.noop,
|
|
trackSymbol: function () { return false; },
|
|
writeKeyword: write,
|
|
writeOperator: write,
|
|
writeParameter: write,
|
|
writeProperty: write,
|
|
writePunctuation: write,
|
|
writeSpace: write,
|
|
writeStringLiteral: write,
|
|
writeSymbol: function (s, _) { return write(s); },
|
|
writeTrailingSemicolon: write,
|
|
writeComment: writeComment,
|
|
getTextPosWithWriteLine: getTextPosWithWriteLine
|
|
};
|
|
}
|
|
ts.createTextWriter = createTextWriter;
|
|
function getTrailingSemicolonDeferringWriter(writer) {
|
|
var pendingTrailingSemicolon = false;
|
|
function commitPendingTrailingSemicolon() {
|
|
if (pendingTrailingSemicolon) {
|
|
writer.writeTrailingSemicolon(";");
|
|
pendingTrailingSemicolon = false;
|
|
}
|
|
}
|
|
return __assign(__assign({}, writer), { writeTrailingSemicolon: function () {
|
|
pendingTrailingSemicolon = true;
|
|
}, writeLiteral: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeLiteral(s);
|
|
}, writeStringLiteral: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeStringLiteral(s);
|
|
}, writeSymbol: function (s, sym) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeSymbol(s, sym);
|
|
}, writePunctuation: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writePunctuation(s);
|
|
}, writeKeyword: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeKeyword(s);
|
|
}, writeOperator: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeOperator(s);
|
|
}, writeParameter: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeParameter(s);
|
|
}, writeSpace: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeSpace(s);
|
|
}, writeProperty: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeProperty(s);
|
|
}, writeComment: function (s) {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeComment(s);
|
|
}, writeLine: function () {
|
|
commitPendingTrailingSemicolon();
|
|
writer.writeLine();
|
|
}, increaseIndent: function () {
|
|
commitPendingTrailingSemicolon();
|
|
writer.increaseIndent();
|
|
}, decreaseIndent: function () {
|
|
commitPendingTrailingSemicolon();
|
|
writer.decreaseIndent();
|
|
} });
|
|
}
|
|
ts.getTrailingSemicolonDeferringWriter = getTrailingSemicolonDeferringWriter;
|
|
function hostUsesCaseSensitiveFileNames(host) {
|
|
return host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : false;
|
|
}
|
|
ts.hostUsesCaseSensitiveFileNames = hostUsesCaseSensitiveFileNames;
|
|
function hostGetCanonicalFileName(host) {
|
|
return ts.createGetCanonicalFileName(hostUsesCaseSensitiveFileNames(host));
|
|
}
|
|
ts.hostGetCanonicalFileName = hostGetCanonicalFileName;
|
|
function getResolvedExternalModuleName(host, file, referenceFile) {
|
|
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName);
|
|
}
|
|
ts.getResolvedExternalModuleName = getResolvedExternalModuleName;
|
|
function getCanonicalAbsolutePath(host, path) {
|
|
return host.getCanonicalFileName(ts.getNormalizedAbsolutePath(path, host.getCurrentDirectory()));
|
|
}
|
|
function getExternalModuleNameFromDeclaration(host, resolver, declaration) {
|
|
var file = resolver.getExternalModuleFileFromDeclaration(declaration);
|
|
if (!file || file.isDeclarationFile) {
|
|
return undefined;
|
|
}
|
|
var specifier = getExternalModuleName(declaration);
|
|
if (specifier && ts.isStringLiteralLike(specifier) && !ts.pathIsRelative(specifier.text) &&
|
|
getCanonicalAbsolutePath(host, file.path).indexOf(getCanonicalAbsolutePath(host, ts.ensureTrailingDirectorySeparator(host.getCommonSourceDirectory()))) === -1) {
|
|
return undefined;
|
|
}
|
|
return getResolvedExternalModuleName(host, file);
|
|
}
|
|
ts.getExternalModuleNameFromDeclaration = getExternalModuleNameFromDeclaration;
|
|
function getExternalModuleNameFromPath(host, fileName, referencePath) {
|
|
var getCanonicalFileName = function (f) { return host.getCanonicalFileName(f); };
|
|
var dir = ts.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 = removeFileExtension(relativePath);
|
|
return referencePath ? ts.ensurePathIsNonModuleName(extensionless) : extensionless;
|
|
}
|
|
ts.getExternalModuleNameFromPath = getExternalModuleNameFromPath;
|
|
function getOwnEmitOutputFilePath(fileName, host, extension) {
|
|
var compilerOptions = host.getCompilerOptions();
|
|
var emitOutputFilePathWithoutExtension;
|
|
if (compilerOptions.outDir) {
|
|
emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(fileName, host, compilerOptions.outDir));
|
|
}
|
|
else {
|
|
emitOutputFilePathWithoutExtension = removeFileExtension(fileName);
|
|
}
|
|
return emitOutputFilePathWithoutExtension + extension;
|
|
}
|
|
ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath;
|
|
function getDeclarationEmitOutputFilePath(fileName, host) {
|
|
return getDeclarationEmitOutputFilePathWorker(fileName, host.getCompilerOptions(), host.getCurrentDirectory(), host.getCommonSourceDirectory(), function (f) { return host.getCanonicalFileName(f); });
|
|
}
|
|
ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath;
|
|
function getDeclarationEmitOutputFilePathWorker(fileName, options, currentDirectory, commonSourceDirectory, getCanonicalFileName) {
|
|
var outputDir = options.declarationDir || options.outDir;
|
|
var path = outputDir
|
|
? getSourceFilePathInNewDirWorker(fileName, outputDir, currentDirectory, commonSourceDirectory, getCanonicalFileName)
|
|
: fileName;
|
|
var declarationExtension = getDeclarationEmitExtensionForPath(path);
|
|
return removeFileExtension(path) + declarationExtension;
|
|
}
|
|
ts.getDeclarationEmitOutputFilePathWorker = getDeclarationEmitOutputFilePathWorker;
|
|
function getDeclarationEmitExtensionForPath(path) {
|
|
return ts.fileExtensionIsOneOf(path, [".mjs", ".mts"]) ? ".d.mts" :
|
|
ts.fileExtensionIsOneOf(path, [".cjs", ".cts"]) ? ".d.cts" :
|
|
ts.fileExtensionIsOneOf(path, [".json"]) ? ".json.d.ts" :
|
|
".d.ts";
|
|
}
|
|
ts.getDeclarationEmitExtensionForPath = getDeclarationEmitExtensionForPath;
|
|
function getPossibleOriginalInputExtensionForExtension(path) {
|
|
return ts.fileExtensionIsOneOf(path, [".d.mts", ".mjs", ".mts"]) ? [".mts", ".mjs"] :
|
|
ts.fileExtensionIsOneOf(path, [".d.cts", ".cjs", ".cts"]) ? [".cts", ".cjs"] :
|
|
ts.fileExtensionIsOneOf(path, [".json.d.ts"]) ? [".json"] :
|
|
[".tsx", ".ts", ".jsx", ".js"];
|
|
}
|
|
ts.getPossibleOriginalInputExtensionForExtension = getPossibleOriginalInputExtensionForExtension;
|
|
function outFile(options) {
|
|
return options.outFile || options.out;
|
|
}
|
|
ts.outFile = outFile;
|
|
function getPathsBasePath(options, host) {
|
|
var _a, _b;
|
|
if (!options.paths)
|
|
return undefined;
|
|
return (_a = options.baseUrl) !== null && _a !== void 0 ? _a : ts.Debug.checkDefined(options.pathsBasePath || ((_b = host.getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(host)), "Encountered 'paths' without a 'baseUrl', config file, or host 'getCurrentDirectory'.");
|
|
}
|
|
ts.getPathsBasePath = getPathsBasePath;
|
|
function getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit) {
|
|
var options = host.getCompilerOptions();
|
|
if (outFile(options)) {
|
|
var moduleKind = getEmitModuleKind(options);
|
|
var moduleEmitEnabled_1 = options.emitDeclarationOnly || moduleKind === ts.ModuleKind.AMD || moduleKind === ts.ModuleKind.System;
|
|
return ts.filter(host.getSourceFiles(), function (sourceFile) {
|
|
return (moduleEmitEnabled_1 || !ts.isExternalModule(sourceFile)) &&
|
|
sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit);
|
|
});
|
|
}
|
|
else {
|
|
var sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile];
|
|
return ts.filter(sourceFiles, function (sourceFile) { return sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit); });
|
|
}
|
|
}
|
|
ts.getSourceFilesToEmit = getSourceFilesToEmit;
|
|
function sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit) {
|
|
var options = host.getCompilerOptions();
|
|
return !(options.noEmitForJsFiles && isSourceFileJS(sourceFile)) &&
|
|
!sourceFile.isDeclarationFile &&
|
|
!host.isSourceFileFromExternalLibrary(sourceFile) &&
|
|
(forceDtsEmit || (!(isJsonSourceFile(sourceFile) && host.getResolvedProjectReferenceToRedirect(sourceFile.fileName)) &&
|
|
!host.isSourceOfProjectReferenceRedirect(sourceFile.fileName)));
|
|
}
|
|
ts.sourceFileMayBeEmitted = sourceFileMayBeEmitted;
|
|
function getSourceFilePathInNewDir(fileName, host, newDirPath) {
|
|
return getSourceFilePathInNewDirWorker(fileName, newDirPath, host.getCurrentDirectory(), host.getCommonSourceDirectory(), function (f) { return host.getCanonicalFileName(f); });
|
|
}
|
|
ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir;
|
|
function getSourceFilePathInNewDirWorker(fileName, newDirPath, currentDirectory, commonSourceDirectory, getCanonicalFileName) {
|
|
var sourceFilePath = ts.getNormalizedAbsolutePath(fileName, currentDirectory);
|
|
var isSourceFileInCommonSourceDirectory = getCanonicalFileName(sourceFilePath).indexOf(getCanonicalFileName(commonSourceDirectory)) === 0;
|
|
sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath;
|
|
return ts.combinePaths(newDirPath, sourceFilePath);
|
|
}
|
|
ts.getSourceFilePathInNewDirWorker = getSourceFilePathInNewDirWorker;
|
|
function writeFile(host, diagnostics, fileName, text, writeByteOrderMark, sourceFiles, data) {
|
|
host.writeFile(fileName, text, writeByteOrderMark, function (hostErrorMessage) {
|
|
diagnostics.add(createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
|
|
}, sourceFiles, data);
|
|
}
|
|
ts.writeFile = writeFile;
|
|
function ensureDirectoriesExist(directoryPath, createDirectory, directoryExists) {
|
|
if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) {
|
|
var parentDirectory = ts.getDirectoryPath(directoryPath);
|
|
ensureDirectoriesExist(parentDirectory, createDirectory, directoryExists);
|
|
createDirectory(directoryPath);
|
|
}
|
|
}
|
|
function writeFileEnsuringDirectories(path, data, writeByteOrderMark, writeFile, createDirectory, directoryExists) {
|
|
try {
|
|
writeFile(path, data, writeByteOrderMark);
|
|
}
|
|
catch (_a) {
|
|
ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(path)), createDirectory, directoryExists);
|
|
writeFile(path, data, writeByteOrderMark);
|
|
}
|
|
}
|
|
ts.writeFileEnsuringDirectories = writeFileEnsuringDirectories;
|
|
function getLineOfLocalPosition(sourceFile, pos) {
|
|
var lineStarts = ts.getLineStarts(sourceFile);
|
|
return ts.computeLineOfPosition(lineStarts, pos);
|
|
}
|
|
ts.getLineOfLocalPosition = getLineOfLocalPosition;
|
|
function getLineOfLocalPositionFromLineMap(lineMap, pos) {
|
|
return ts.computeLineOfPosition(lineMap, pos);
|
|
}
|
|
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];
|
|
}
|
|
}
|
|
ts.getSetAccessorValueParameter = getSetAccessorValueParameter;
|
|
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 === 79 && identifierIsThisKeyword(node);
|
|
}
|
|
ts.isThisIdentifier = isThisIdentifier;
|
|
function isThisInTypeQuery(node) {
|
|
if (!isThisIdentifier(node)) {
|
|
return false;
|
|
}
|
|
while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
|
|
node = node.parent;
|
|
}
|
|
return node.parent.kind === 181;
|
|
}
|
|
ts.isThisInTypeQuery = isThisInTypeQuery;
|
|
function identifierIsThisKeyword(id) {
|
|
return id.originalKeywordKind === 108;
|
|
}
|
|
ts.identifierIsThisKeyword = identifierIsThisKeyword;
|
|
function getAllAccessorDeclarations(declarations, accessor) {
|
|
var firstAccessor;
|
|
var secondAccessor;
|
|
var getAccessor;
|
|
var setAccessor;
|
|
if (hasDynamicName(accessor)) {
|
|
firstAccessor = accessor;
|
|
if (accessor.kind === 172) {
|
|
getAccessor = accessor;
|
|
}
|
|
else if (accessor.kind === 173) {
|
|
setAccessor = accessor;
|
|
}
|
|
else {
|
|
ts.Debug.fail("Accessor has wrong kind");
|
|
}
|
|
}
|
|
else {
|
|
ts.forEach(declarations, function (member) {
|
|
if (ts.isAccessor(member)
|
|
&& isStatic(member) === isStatic(accessor)) {
|
|
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 === 172 && !getAccessor) {
|
|
getAccessor = member;
|
|
}
|
|
if (member.kind === 173 && !setAccessor) {
|
|
setAccessor = member;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return {
|
|
firstAccessor: firstAccessor,
|
|
secondAccessor: secondAccessor,
|
|
getAccessor: getAccessor,
|
|
setAccessor: setAccessor
|
|
};
|
|
}
|
|
ts.getAllAccessorDeclarations = getAllAccessorDeclarations;
|
|
function getEffectiveTypeAnnotationNode(node) {
|
|
if (!isInJSFile(node) && ts.isFunctionDeclaration(node))
|
|
return undefined;
|
|
var type = node.type;
|
|
if (type || !isInJSFile(node))
|
|
return type;
|
|
return ts.isJSDocPropertyLikeTag(node) ? node.typeExpression && node.typeExpression.type : ts.getJSDocType(node);
|
|
}
|
|
ts.getEffectiveTypeAnnotationNode = getEffectiveTypeAnnotationNode;
|
|
function getTypeAnnotationNode(node) {
|
|
return node.type;
|
|
}
|
|
ts.getTypeAnnotationNode = getTypeAnnotationNode;
|
|
function getEffectiveReturnTypeNode(node) {
|
|
return ts.isJSDocSignature(node) ?
|
|
node.type && node.type.typeExpression && node.type.typeExpression.type :
|
|
node.type || (isInJSFile(node) ? ts.getJSDocReturnType(node) : undefined);
|
|
}
|
|
ts.getEffectiveReturnTypeNode = getEffectiveReturnTypeNode;
|
|
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 === 320 && 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.writeSpace(" ");
|
|
}
|
|
var emitInterveningSeparator = false;
|
|
for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
|
|
var comment = comments_1[_i];
|
|
if (emitInterveningSeparator) {
|
|
writer.writeSpace(" ");
|
|
emitInterveningSeparator = false;
|
|
}
|
|
writeComment(text, lineMap, writer, comment.pos, comment.end, newLine);
|
|
if (comment.hasTrailingNewLine) {
|
|
writer.writeLine();
|
|
}
|
|
else {
|
|
emitInterveningSeparator = true;
|
|
}
|
|
}
|
|
if (emitInterveningSeparator && trailingSeparator) {
|
|
writer.writeSpace(" ");
|
|
}
|
|
}
|
|
}
|
|
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.writeComment(text.substring(commentPos, commentEnd));
|
|
}
|
|
}
|
|
ts.writeCommentRange = writeCommentRange;
|
|
function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
|
|
var end = Math.min(commentEnd, nextLineStart - 1);
|
|
var currentLineText = ts.trimString(text.substring(pos, end));
|
|
if (currentLineText) {
|
|
writer.writeComment(currentLineText);
|
|
if (end !== commentEnd) {
|
|
writer.writeLine();
|
|
}
|
|
}
|
|
else {
|
|
writer.rawWrite(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 hasEffectiveModifiers(node) {
|
|
return getEffectiveModifierFlags(node) !== 0;
|
|
}
|
|
ts.hasEffectiveModifiers = hasEffectiveModifiers;
|
|
function hasSyntacticModifiers(node) {
|
|
return getSyntacticModifierFlags(node) !== 0;
|
|
}
|
|
ts.hasSyntacticModifiers = hasSyntacticModifiers;
|
|
function hasEffectiveModifier(node, flags) {
|
|
return !!getSelectedEffectiveModifierFlags(node, flags);
|
|
}
|
|
ts.hasEffectiveModifier = hasEffectiveModifier;
|
|
function hasSyntacticModifier(node, flags) {
|
|
return !!getSelectedSyntacticModifierFlags(node, flags);
|
|
}
|
|
ts.hasSyntacticModifier = hasSyntacticModifier;
|
|
function isStatic(node) {
|
|
return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
|
|
}
|
|
ts.isStatic = isStatic;
|
|
function hasStaticModifier(node) {
|
|
return hasSyntacticModifier(node, 32);
|
|
}
|
|
ts.hasStaticModifier = hasStaticModifier;
|
|
function hasOverrideModifier(node) {
|
|
return hasEffectiveModifier(node, 16384);
|
|
}
|
|
ts.hasOverrideModifier = hasOverrideModifier;
|
|
function hasAbstractModifier(node) {
|
|
return hasSyntacticModifier(node, 128);
|
|
}
|
|
ts.hasAbstractModifier = hasAbstractModifier;
|
|
function hasAmbientModifier(node) {
|
|
return hasSyntacticModifier(node, 2);
|
|
}
|
|
ts.hasAmbientModifier = hasAmbientModifier;
|
|
function hasEffectiveReadonlyModifier(node) {
|
|
return hasEffectiveModifier(node, 64);
|
|
}
|
|
ts.hasEffectiveReadonlyModifier = hasEffectiveReadonlyModifier;
|
|
function hasDecorators(node) {
|
|
return hasSyntacticModifier(node, 131072);
|
|
}
|
|
ts.hasDecorators = hasDecorators;
|
|
function getSelectedEffectiveModifierFlags(node, flags) {
|
|
return getEffectiveModifierFlags(node) & flags;
|
|
}
|
|
ts.getSelectedEffectiveModifierFlags = getSelectedEffectiveModifierFlags;
|
|
function getSelectedSyntacticModifierFlags(node, flags) {
|
|
return getSyntacticModifierFlags(node) & flags;
|
|
}
|
|
ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
|
|
function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
|
|
if (node.kind >= 0 && node.kind <= 160) {
|
|
return 0;
|
|
}
|
|
if (!(node.modifierFlagsCache & 536870912)) {
|
|
node.modifierFlagsCache = getSyntacticModifierFlagsNoCache(node) | 536870912;
|
|
}
|
|
if (includeJSDoc && !(node.modifierFlagsCache & 4096) && (alwaysIncludeJSDoc || isInJSFile(node)) && node.parent) {
|
|
node.modifierFlagsCache |= getJSDocModifierFlagsNoCache(node) | 4096;
|
|
}
|
|
return node.modifierFlagsCache & ~(536870912 | 4096);
|
|
}
|
|
function getEffectiveModifierFlags(node) {
|
|
return getModifierFlagsWorker(node, true);
|
|
}
|
|
ts.getEffectiveModifierFlags = getEffectiveModifierFlags;
|
|
function getEffectiveModifierFlagsAlwaysIncludeJSDoc(node) {
|
|
return getModifierFlagsWorker(node, true, true);
|
|
}
|
|
ts.getEffectiveModifierFlagsAlwaysIncludeJSDoc = getEffectiveModifierFlagsAlwaysIncludeJSDoc;
|
|
function getSyntacticModifierFlags(node) {
|
|
return getModifierFlagsWorker(node, false);
|
|
}
|
|
ts.getSyntacticModifierFlags = getSyntacticModifierFlags;
|
|
function getJSDocModifierFlagsNoCache(node) {
|
|
var flags = 0;
|
|
if (!!node.parent && !ts.isParameter(node)) {
|
|
if (isInJSFile(node)) {
|
|
if (ts.getJSDocPublicTagNoCache(node))
|
|
flags |= 4;
|
|
if (ts.getJSDocPrivateTagNoCache(node))
|
|
flags |= 8;
|
|
if (ts.getJSDocProtectedTagNoCache(node))
|
|
flags |= 16;
|
|
if (ts.getJSDocReadonlyTagNoCache(node))
|
|
flags |= 64;
|
|
if (ts.getJSDocOverrideTagNoCache(node))
|
|
flags |= 16384;
|
|
}
|
|
if (ts.getJSDocDeprecatedTagNoCache(node))
|
|
flags |= 8192;
|
|
}
|
|
return flags;
|
|
}
|
|
function getEffectiveModifierFlagsNoCache(node) {
|
|
return getSyntacticModifierFlagsNoCache(node) | getJSDocModifierFlagsNoCache(node);
|
|
}
|
|
ts.getEffectiveModifierFlagsNoCache = getEffectiveModifierFlagsNoCache;
|
|
function getSyntacticModifierFlagsNoCache(node) {
|
|
var flags = ts.canHaveModifiers(node) ? modifiersToFlags(node.modifiers) : 0;
|
|
if (node.flags & 4 || (node.kind === 79 && node.isInJSDocNamespace)) {
|
|
flags |= 1;
|
|
}
|
|
return flags;
|
|
}
|
|
ts.getSyntacticModifierFlagsNoCache = getSyntacticModifierFlagsNoCache;
|
|
function modifiersToFlags(modifiers) {
|
|
var flags = 0;
|
|
if (modifiers) {
|
|
for (var _i = 0, modifiers_1 = modifiers; _i < modifiers_1.length; _i++) {
|
|
var modifier = modifiers_1[_i];
|
|
flags |= modifierToFlag(modifier.kind);
|
|
}
|
|
}
|
|
return flags;
|
|
}
|
|
ts.modifiersToFlags = modifiersToFlags;
|
|
function modifierToFlag(token) {
|
|
switch (token) {
|
|
case 124: return 32;
|
|
case 123: return 4;
|
|
case 122: return 16;
|
|
case 121: return 8;
|
|
case 126: return 128;
|
|
case 93: return 1;
|
|
case 135: return 2;
|
|
case 85: return 2048;
|
|
case 88: return 512;
|
|
case 131: return 256;
|
|
case 145: return 64;
|
|
case 159: return 16384;
|
|
case 101: return 32768;
|
|
case 144: return 65536;
|
|
case 165: return 131072;
|
|
}
|
|
return 0;
|
|
}
|
|
ts.modifierToFlag = modifierToFlag;
|
|
function createModifiers(modifierFlags) {
|
|
return modifierFlags ? ts.factory.createNodeArray(ts.factory.createModifiersFromModifierFlags(modifierFlags)) : undefined;
|
|
}
|
|
ts.createModifiers = createModifiers;
|
|
function isLogicalOperator(token) {
|
|
return token === 56
|
|
|| token === 55
|
|
|| token === 53;
|
|
}
|
|
ts.isLogicalOperator = isLogicalOperator;
|
|
function isLogicalOrCoalescingAssignmentOperator(token) {
|
|
return token === 75
|
|
|| token === 76
|
|
|| token === 77;
|
|
}
|
|
ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
|
|
function isLogicalOrCoalescingAssignmentExpression(expr) {
|
|
return isLogicalOrCoalescingAssignmentOperator(expr.operatorToken.kind);
|
|
}
|
|
ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
|
|
function isAssignmentOperator(token) {
|
|
return token >= 63 && token <= 78;
|
|
}
|
|
ts.isAssignmentOperator = isAssignmentOperator;
|
|
function tryGetClassExtendingExpressionWithTypeArguments(node) {
|
|
var cls = tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node);
|
|
return cls && !cls.isImplements ? cls.class : undefined;
|
|
}
|
|
ts.tryGetClassExtendingExpressionWithTypeArguments = tryGetClassExtendingExpressionWithTypeArguments;
|
|
function tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node) {
|
|
return ts.isExpressionWithTypeArguments(node)
|
|
&& ts.isHeritageClause(node.parent)
|
|
&& ts.isClassLike(node.parent.parent)
|
|
? { class: node.parent.parent, isImplements: node.parent.token === 117 }
|
|
: undefined;
|
|
}
|
|
ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
|
|
function isAssignmentExpression(node, excludeCompoundAssignment) {
|
|
return ts.isBinaryExpression(node)
|
|
&& (excludeCompoundAssignment
|
|
? node.operatorToken.kind === 63
|
|
: isAssignmentOperator(node.operatorToken.kind))
|
|
&& ts.isLeftHandSideExpression(node.left);
|
|
}
|
|
ts.isAssignmentExpression = isAssignmentExpression;
|
|
function isLeftHandSideOfAssignment(node) {
|
|
return isAssignmentExpression(node.parent) && node.parent.left === node;
|
|
}
|
|
ts.isLeftHandSideOfAssignment = isLeftHandSideOfAssignment;
|
|
function isDestructuringAssignment(node) {
|
|
if (isAssignmentExpression(node, true)) {
|
|
var kind = node.left.kind;
|
|
return kind === 205
|
|
|| kind === 204;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isDestructuringAssignment = isDestructuringAssignment;
|
|
function isExpressionWithTypeArgumentsInClassExtendsClause(node) {
|
|
return tryGetClassExtendingExpressionWithTypeArguments(node) !== undefined;
|
|
}
|
|
ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
|
|
function isEntityNameExpression(node) {
|
|
return node.kind === 79 || isPropertyAccessEntityNameExpression(node);
|
|
}
|
|
ts.isEntityNameExpression = isEntityNameExpression;
|
|
function getFirstIdentifier(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return node;
|
|
case 161:
|
|
do {
|
|
node = node.left;
|
|
} while (node.kind !== 79);
|
|
return node;
|
|
case 206:
|
|
do {
|
|
node = node.expression;
|
|
} while (node.kind !== 79);
|
|
return node;
|
|
}
|
|
}
|
|
ts.getFirstIdentifier = getFirstIdentifier;
|
|
function isDottedName(node) {
|
|
return node.kind === 79
|
|
|| node.kind === 108
|
|
|| node.kind === 106
|
|
|| node.kind === 231
|
|
|| node.kind === 206 && isDottedName(node.expression)
|
|
|| node.kind === 212 && isDottedName(node.expression);
|
|
}
|
|
ts.isDottedName = isDottedName;
|
|
function isPropertyAccessEntityNameExpression(node) {
|
|
return ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && isEntityNameExpression(node.expression);
|
|
}
|
|
ts.isPropertyAccessEntityNameExpression = isPropertyAccessEntityNameExpression;
|
|
function tryGetPropertyAccessOrIdentifierToString(expr) {
|
|
if (ts.isPropertyAccessExpression(expr)) {
|
|
var baseStr = tryGetPropertyAccessOrIdentifierToString(expr.expression);
|
|
if (baseStr !== undefined) {
|
|
return baseStr + "." + entityNameToString(expr.name);
|
|
}
|
|
}
|
|
else if (ts.isElementAccessExpression(expr)) {
|
|
var baseStr = tryGetPropertyAccessOrIdentifierToString(expr.expression);
|
|
if (baseStr !== undefined && ts.isPropertyName(expr.argumentExpression)) {
|
|
return baseStr + "." + getPropertyNameForPropertyNameNode(expr.argumentExpression);
|
|
}
|
|
}
|
|
else if (ts.isIdentifier(expr)) {
|
|
return ts.unescapeLeadingUnderscores(expr.escapedText);
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.tryGetPropertyAccessOrIdentifierToString = tryGetPropertyAccessOrIdentifierToString;
|
|
function isPrototypeAccess(node) {
|
|
return isBindableStaticAccessExpression(node) && getElementOrPropertyAccessName(node) === "prototype";
|
|
}
|
|
ts.isPrototypeAccess = isPrototypeAccess;
|
|
function isRightSideOfQualifiedNameOrPropertyAccess(node) {
|
|
return (node.parent.kind === 161 && node.parent.right === node) ||
|
|
(node.parent.kind === 206 && node.parent.name === node);
|
|
}
|
|
ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
|
|
function isRightSideOfAccessExpression(node) {
|
|
return ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
|
|
|| ts.isElementAccessExpression(node.parent) && node.parent.argumentExpression === node;
|
|
}
|
|
ts.isRightSideOfAccessExpression = isRightSideOfAccessExpression;
|
|
function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
|
|
return ts.isQualifiedName(node.parent) && node.parent.right === node
|
|
|| ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
|
|
|| ts.isJSDocMemberName(node.parent) && node.parent.right === node;
|
|
}
|
|
ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
|
|
function isEmptyObjectLiteral(expression) {
|
|
return expression.kind === 205 &&
|
|
expression.properties.length === 0;
|
|
}
|
|
ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
|
|
function isEmptyArrayLiteral(expression) {
|
|
return expression.kind === 204 &&
|
|
expression.elements.length === 0;
|
|
}
|
|
ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
|
|
function getLocalSymbolForExportDefault(symbol) {
|
|
if (!isExportDefaultSymbol(symbol) || !symbol.declarations)
|
|
return undefined;
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
if (decl.localSymbol)
|
|
return decl.localSymbol;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault;
|
|
function isExportDefaultSymbol(symbol) {
|
|
return symbol && ts.length(symbol.declarations) > 0 && hasSyntacticModifier(symbol.declarations[0], 512);
|
|
}
|
|
function tryExtractTSExtension(fileName) {
|
|
return ts.find(supportedTSExtensionsForExtractExtension, function (extension) { return ts.fileExtensionIs(fileName, extension); });
|
|
}
|
|
ts.tryExtractTSExtension = tryExtractTSExtension;
|
|
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;
|
|
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 directoryProbablyExists(directoryName, host) {
|
|
return !host.directoryExists || host.directoryExists(directoryName);
|
|
}
|
|
ts.directoryProbablyExists = directoryProbablyExists;
|
|
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 createRange(pos, end) {
|
|
if (end === void 0) { end = pos; }
|
|
ts.Debug.assert(end >= pos || end === -1);
|
|
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) {
|
|
var lastDecorator = ts.canHaveModifiers(node) ? ts.findLast(node.modifiers, ts.isDecorator) : undefined;
|
|
return lastDecorator && !positionIsSynthesized(lastDecorator.end)
|
|
? moveRangePos(node, lastDecorator.end)
|
|
: node;
|
|
}
|
|
ts.moveRangePastDecorators = moveRangePastDecorators;
|
|
function moveRangePastModifiers(node) {
|
|
var lastModifier = ts.canHaveModifiers(node) ? ts.lastOrUndefined(node.modifiers) : undefined;
|
|
return lastModifier && !positionIsSynthesized(lastModifier.end)
|
|
? moveRangePos(node, lastModifier.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, false), getStartPositionOfRange(range2, sourceFile, false), 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, false), range2.end, sourceFile);
|
|
}
|
|
ts.rangeStartIsOnSameLineAsRangeEnd = rangeStartIsOnSameLineAsRangeEnd;
|
|
function rangeEndIsOnSameLineAsRangeStart(range1, range2, sourceFile) {
|
|
return positionsAreOnSameLine(range1.end, getStartPositionOfRange(range2, sourceFile, false), sourceFile);
|
|
}
|
|
ts.rangeEndIsOnSameLineAsRangeStart = rangeEndIsOnSameLineAsRangeStart;
|
|
function getLinesBetweenRangeEndAndRangeStart(range1, range2, sourceFile, includeSecondRangeComments) {
|
|
var range2Start = getStartPositionOfRange(range2, sourceFile, includeSecondRangeComments);
|
|
return ts.getLinesBetweenPositions(sourceFile, range1.end, range2Start);
|
|
}
|
|
ts.getLinesBetweenRangeEndAndRangeStart = getLinesBetweenRangeEndAndRangeStart;
|
|
function getLinesBetweenRangeEndPositions(range1, range2, sourceFile) {
|
|
return ts.getLinesBetweenPositions(sourceFile, range1.end, range2.end);
|
|
}
|
|
ts.getLinesBetweenRangeEndPositions = getLinesBetweenRangeEndPositions;
|
|
function isNodeArrayMultiLine(list, sourceFile) {
|
|
return !positionsAreOnSameLine(list.pos, list.end, sourceFile);
|
|
}
|
|
ts.isNodeArrayMultiLine = isNodeArrayMultiLine;
|
|
function positionsAreOnSameLine(pos1, pos2, sourceFile) {
|
|
return ts.getLinesBetweenPositions(sourceFile, pos1, pos2) === 0;
|
|
}
|
|
ts.positionsAreOnSameLine = positionsAreOnSameLine;
|
|
function getStartPositionOfRange(range, sourceFile, includeComments) {
|
|
return positionIsSynthesized(range.pos) ? -1 : ts.skipTrivia(sourceFile.text, range.pos, false, includeComments);
|
|
}
|
|
ts.getStartPositionOfRange = getStartPositionOfRange;
|
|
function getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter(pos, stopPos, sourceFile, includeComments) {
|
|
var startPos = ts.skipTrivia(sourceFile.text, pos, false, includeComments);
|
|
var prevPos = getPreviousNonWhitespacePosition(startPos, stopPos, sourceFile);
|
|
return ts.getLinesBetweenPositions(sourceFile, prevPos !== null && prevPos !== void 0 ? prevPos : stopPos, startPos);
|
|
}
|
|
ts.getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter = getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter;
|
|
function getLinesBetweenPositionAndNextNonWhitespaceCharacter(pos, stopPos, sourceFile, includeComments) {
|
|
var nextPos = ts.skipTrivia(sourceFile.text, pos, false, includeComments);
|
|
return ts.getLinesBetweenPositions(sourceFile, pos, Math.min(stopPos, nextPos));
|
|
}
|
|
ts.getLinesBetweenPositionAndNextNonWhitespaceCharacter = getLinesBetweenPositionAndNextNonWhitespaceCharacter;
|
|
function getPreviousNonWhitespacePosition(pos, stopPos, sourceFile) {
|
|
if (stopPos === void 0) { stopPos = 0; }
|
|
while (pos-- > stopPos) {
|
|
if (!ts.isWhiteSpaceLike(sourceFile.text.charCodeAt(pos))) {
|
|
return pos;
|
|
}
|
|
}
|
|
}
|
|
function isDeclarationNameOfEnumOrNamespace(node) {
|
|
var parseNode = ts.getParseTreeNode(node);
|
|
if (parseNode) {
|
|
switch (parseNode.parent.kind) {
|
|
case 260:
|
|
case 261:
|
|
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, isWrite) {
|
|
if (isWrite === void 0) { isWrite = false; }
|
|
if (s.valueDeclaration) {
|
|
var declaration = (isWrite && s.declarations && ts.find(s.declarations, ts.isSetAccessorDeclaration))
|
|
|| (s.flags & 32768 && ts.find(s.declarations, ts.isGetAccessorDeclaration)) || s.valueDeclaration;
|
|
var flags = ts.getCombinedModifierFlags(declaration);
|
|
return s.parent && s.parent.flags & 32 ? flags : flags & ~28;
|
|
}
|
|
if (getCheckFlags(s) & 6) {
|
|
var checkFlags = s.checkFlags;
|
|
var accessModifier = checkFlags & 1024 ? 8 :
|
|
checkFlags & 256 ? 4 :
|
|
16;
|
|
var staticModifier = checkFlags & 2048 ? 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;
|
|
function accessKind(node) {
|
|
var parent = node.parent;
|
|
if (!parent)
|
|
return 0;
|
|
switch (parent.kind) {
|
|
case 212:
|
|
return accessKind(parent);
|
|
case 220:
|
|
case 219:
|
|
var operator = parent.operator;
|
|
return operator === 45 || operator === 46 ? writeOrReadWrite() : 0;
|
|
case 221:
|
|
var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
|
|
return left === node && isAssignmentOperator(operatorToken.kind) ?
|
|
operatorToken.kind === 63 ? 1 : writeOrReadWrite()
|
|
: 0;
|
|
case 206:
|
|
return parent.name !== node ? 0 : accessKind(parent);
|
|
case 296: {
|
|
var parentAccess = accessKind(parent.parent);
|
|
return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
|
|
}
|
|
case 297:
|
|
return node === parent.objectAssignmentInitializer ? 0 : accessKind(parent.parent);
|
|
case 204:
|
|
return accessKind(parent);
|
|
default:
|
|
return 0;
|
|
}
|
|
function writeOrReadWrite() {
|
|
return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 238 ? 1 : 2;
|
|
}
|
|
}
|
|
function reverseAccessKind(a) {
|
|
switch (a) {
|
|
case 0:
|
|
return 1;
|
|
case 1:
|
|
return 0;
|
|
case 2:
|
|
return 2;
|
|
default:
|
|
return ts.Debug.assertNever(a);
|
|
}
|
|
}
|
|
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 mutateMapSkippingNewValues(map, newMap, options) {
|
|
var 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);
|
|
}
|
|
});
|
|
}
|
|
ts.mutateMapSkippingNewValues = mutateMapSkippingNewValues;
|
|
function mutateMap(map, newMap, options) {
|
|
mutateMapSkippingNewValues(map, newMap, options);
|
|
var createNewValue = options.createNewValue;
|
|
newMap.forEach(function (valueInNewMap, key) {
|
|
if (!map.has(key)) {
|
|
map.set(key, createNewValue(key, valueInNewMap));
|
|
}
|
|
});
|
|
}
|
|
ts.mutateMap = mutateMap;
|
|
function isAbstractConstructorSymbol(symbol) {
|
|
if (symbol.flags & 32) {
|
|
var declaration = getClassLikeDeclarationOfSymbol(symbol);
|
|
return !!declaration && hasSyntacticModifier(declaration, 128);
|
|
}
|
|
return false;
|
|
}
|
|
ts.isAbstractConstructorSymbol = isAbstractConstructorSymbol;
|
|
function getClassLikeDeclarationOfSymbol(symbol) {
|
|
var _a;
|
|
return (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isClassLike);
|
|
}
|
|
ts.getClassLikeDeclarationOfSymbol = getClassLikeDeclarationOfSymbol;
|
|
function getObjectFlags(type) {
|
|
return type.flags & 3899393 ? 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 !!ts.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; }
|
|
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;
|
|
function isTypeNodeKind(kind) {
|
|
return (kind >= 177 && kind <= 200)
|
|
|| kind === 130
|
|
|| kind === 155
|
|
|| kind === 147
|
|
|| kind === 158
|
|
|| kind === 148
|
|
|| kind === 133
|
|
|| kind === 150
|
|
|| kind === 151
|
|
|| kind === 114
|
|
|| kind === 153
|
|
|| kind === 143
|
|
|| kind === 228
|
|
|| kind === 312
|
|
|| kind === 313
|
|
|| kind === 314
|
|
|| kind === 315
|
|
|| kind === 316
|
|
|| kind === 317
|
|
|| kind === 318;
|
|
}
|
|
ts.isTypeNodeKind = isTypeNodeKind;
|
|
function isAccessExpression(node) {
|
|
return node.kind === 206 || node.kind === 207;
|
|
}
|
|
ts.isAccessExpression = isAccessExpression;
|
|
function getNameOfAccessExpression(node) {
|
|
if (node.kind === 206) {
|
|
return node.name;
|
|
}
|
|
ts.Debug.assert(node.kind === 207);
|
|
return node.argumentExpression;
|
|
}
|
|
ts.getNameOfAccessExpression = getNameOfAccessExpression;
|
|
function isBundleFileTextLike(section) {
|
|
switch (section.kind) {
|
|
case "text":
|
|
case "internal":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isBundleFileTextLike = isBundleFileTextLike;
|
|
function isNamedImportsOrExports(node) {
|
|
return node.kind === 269 || node.kind === 273;
|
|
}
|
|
ts.isNamedImportsOrExports = isNamedImportsOrExports;
|
|
function getLeftmostAccessExpression(expr) {
|
|
while (isAccessExpression(expr)) {
|
|
expr = expr.expression;
|
|
}
|
|
return expr;
|
|
}
|
|
ts.getLeftmostAccessExpression = getLeftmostAccessExpression;
|
|
function forEachNameInAccessChainWalkingLeft(name, action) {
|
|
if (isAccessExpression(name.parent) && isRightSideOfAccessExpression(name)) {
|
|
return walkAccessExpression(name.parent);
|
|
}
|
|
function walkAccessExpression(access) {
|
|
if (access.kind === 206) {
|
|
var res = action(access.name);
|
|
if (res !== undefined) {
|
|
return res;
|
|
}
|
|
}
|
|
else if (access.kind === 207) {
|
|
if (ts.isIdentifier(access.argumentExpression) || ts.isStringLiteralLike(access.argumentExpression)) {
|
|
var res = action(access.argumentExpression);
|
|
if (res !== undefined) {
|
|
return res;
|
|
}
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
if (isAccessExpression(access.expression)) {
|
|
return walkAccessExpression(access.expression);
|
|
}
|
|
if (ts.isIdentifier(access.expression)) {
|
|
return action(access.expression);
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.forEachNameInAccessChainWalkingLeft = forEachNameInAccessChainWalkingLeft;
|
|
function getLeftmostExpression(node, stopAtCallExpressions) {
|
|
while (true) {
|
|
switch (node.kind) {
|
|
case 220:
|
|
node = node.operand;
|
|
continue;
|
|
case 221:
|
|
node = node.left;
|
|
continue;
|
|
case 222:
|
|
node = node.condition;
|
|
continue;
|
|
case 210:
|
|
node = node.tag;
|
|
continue;
|
|
case 208:
|
|
if (stopAtCallExpressions) {
|
|
return node;
|
|
}
|
|
case 229:
|
|
case 207:
|
|
case 206:
|
|
case 230:
|
|
case 350:
|
|
node = node.expression;
|
|
continue;
|
|
}
|
|
return node;
|
|
}
|
|
}
|
|
ts.getLeftmostExpression = getLeftmostExpression;
|
|
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 || ts.tracing) {
|
|
this.checker = checker;
|
|
}
|
|
}
|
|
function Signature(checker, flags) {
|
|
this.flags = flags;
|
|
if (ts.Debug.isDebugging) {
|
|
this.checker = checker;
|
|
}
|
|
}
|
|
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 Token(kind, pos, end) {
|
|
this.pos = pos;
|
|
this.end = end;
|
|
this.kind = kind;
|
|
this.id = 0;
|
|
this.flags = 0;
|
|
this.transformFlags = 0;
|
|
this.parent = undefined;
|
|
}
|
|
function Identifier(kind, pos, end) {
|
|
this.pos = pos;
|
|
this.end = end;
|
|
this.kind = kind;
|
|
this.id = 0;
|
|
this.flags = 0;
|
|
this.transformFlags = 0;
|
|
this.parent = undefined;
|
|
this.original = undefined;
|
|
this.flowNode = 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 Token; },
|
|
getIdentifierConstructor: function () { return Identifier; },
|
|
getPrivateIdentifierConstructor: function () { return Node; },
|
|
getSourceFileConstructor: function () { return Node; },
|
|
getSymbolConstructor: function () { return Symbol; },
|
|
getTypeConstructor: function () { return Type; },
|
|
getSignatureConstructor: function () { return Signature; },
|
|
getSourceMapSourceConstructor: function () { return SourceMapSource; },
|
|
};
|
|
function setObjectAllocator(alloc) {
|
|
Object.assign(ts.objectAllocator, alloc);
|
|
}
|
|
ts.setObjectAllocator = setObjectAllocator;
|
|
function formatStringFromArgs(text, args, baseIndex) {
|
|
if (baseIndex === void 0) { baseIndex = 0; }
|
|
return text.replace(/{(\d+)}/g, function (_match, index) { return "" + ts.Debug.checkDefined(args[+index + baseIndex]); });
|
|
}
|
|
ts.formatStringFromArgs = formatStringFromArgs;
|
|
var localizedDiagnosticMessages;
|
|
function setLocalizedDiagnosticMessages(messages) {
|
|
localizedDiagnosticMessages = messages;
|
|
}
|
|
ts.setLocalizedDiagnosticMessages = setLocalizedDiagnosticMessages;
|
|
function maybeSetLocalizedDiagnosticMessages(getMessages) {
|
|
if (!localizedDiagnosticMessages && getMessages) {
|
|
localizedDiagnosticMessages = getMessages();
|
|
}
|
|
}
|
|
ts.maybeSetLocalizedDiagnosticMessages = maybeSetLocalizedDiagnosticMessages;
|
|
function getLocaleSpecificMessage(message) {
|
|
return localizedDiagnosticMessages && localizedDiagnosticMessages[message.key] || message.message;
|
|
}
|
|
ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
|
|
function createDetachedDiagnostic(fileName, start, length, message) {
|
|
assertDiagnosticLocation(undefined, start, length);
|
|
var text = getLocaleSpecificMessage(message);
|
|
if (arguments.length > 4) {
|
|
text = formatStringFromArgs(text, arguments, 4);
|
|
}
|
|
return {
|
|
file: undefined,
|
|
start: start,
|
|
length: length,
|
|
messageText: text,
|
|
category: message.category,
|
|
code: message.code,
|
|
reportsUnnecessary: message.reportsUnnecessary,
|
|
fileName: fileName,
|
|
};
|
|
}
|
|
ts.createDetachedDiagnostic = createDetachedDiagnostic;
|
|
function isDiagnosticWithDetachedLocation(diagnostic) {
|
|
return diagnostic.file === undefined
|
|
&& diagnostic.start !== undefined
|
|
&& diagnostic.length !== undefined
|
|
&& typeof diagnostic.fileName === "string";
|
|
}
|
|
function attachFileToDiagnostic(diagnostic, file) {
|
|
var fileName = file.fileName || "";
|
|
var length = file.text.length;
|
|
ts.Debug.assertEqual(diagnostic.fileName, fileName);
|
|
ts.Debug.assertLessThanOrEqual(diagnostic.start, length);
|
|
ts.Debug.assertLessThanOrEqual(diagnostic.start + diagnostic.length, length);
|
|
var diagnosticWithLocation = {
|
|
file: file,
|
|
start: diagnostic.start,
|
|
length: diagnostic.length,
|
|
messageText: diagnostic.messageText,
|
|
category: diagnostic.category,
|
|
code: diagnostic.code,
|
|
reportsUnnecessary: diagnostic.reportsUnnecessary
|
|
};
|
|
if (diagnostic.relatedInformation) {
|
|
diagnosticWithLocation.relatedInformation = [];
|
|
for (var _i = 0, _a = diagnostic.relatedInformation; _i < _a.length; _i++) {
|
|
var related = _a[_i];
|
|
if (isDiagnosticWithDetachedLocation(related) && related.fileName === fileName) {
|
|
ts.Debug.assertLessThanOrEqual(related.start, length);
|
|
ts.Debug.assertLessThanOrEqual(related.start + related.length, length);
|
|
diagnosticWithLocation.relatedInformation.push(attachFileToDiagnostic(related, file));
|
|
}
|
|
else {
|
|
diagnosticWithLocation.relatedInformation.push(related);
|
|
}
|
|
}
|
|
}
|
|
return diagnosticWithLocation;
|
|
}
|
|
function attachFileToDiagnostics(diagnostics, file) {
|
|
var diagnosticsWithLocation = [];
|
|
for (var _i = 0, diagnostics_1 = diagnostics; _i < diagnostics_1.length; _i++) {
|
|
var diagnostic = diagnostics_1[_i];
|
|
diagnosticsWithLocation.push(attachFileToDiagnostic(diagnostic, file));
|
|
}
|
|
return diagnosticsWithLocation;
|
|
}
|
|
ts.attachFileToDiagnostics = attachFileToDiagnostics;
|
|
function createFileDiagnostic(file, start, length, message) {
|
|
assertDiagnosticLocation(file, start, 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,
|
|
reportsDeprecated: message.reportsDeprecated
|
|
};
|
|
}
|
|
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,
|
|
reportsDeprecated: message.reportsDeprecated
|
|
};
|
|
}
|
|
ts.createCompilerDiagnostic = createCompilerDiagnostic;
|
|
function createCompilerDiagnosticFromMessageChain(chain, relatedInformation) {
|
|
return {
|
|
file: undefined,
|
|
start: undefined,
|
|
length: undefined,
|
|
code: chain.code,
|
|
category: chain.category,
|
|
messageText: chain.next ? chain : chain.messageText,
|
|
relatedInformation: relatedInformation
|
|
};
|
|
}
|
|
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 === undefined || Array.isArray(details) ? details : [details]
|
|
};
|
|
}
|
|
ts.chainDiagnosticMessages = chainDiagnosticMessages;
|
|
function concatenateDiagnosticMessageChains(headChain, tailChain) {
|
|
var lastChain = headChain;
|
|
while (lastChain.next) {
|
|
lastChain = lastChain.next[0];
|
|
}
|
|
lastChain.next = [tailChain];
|
|
}
|
|
ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
|
|
function getDiagnosticFilePath(diagnostic) {
|
|
return diagnostic.file ? diagnostic.file.path : undefined;
|
|
}
|
|
function compareDiagnostics(d1, d2) {
|
|
return compareDiagnosticsSkipRelatedInformation(d1, d2) ||
|
|
compareRelatedInformation(d1, d2) ||
|
|
0;
|
|
}
|
|
ts.compareDiagnostics = compareDiagnostics;
|
|
function compareDiagnosticsSkipRelatedInformation(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.compareDiagnosticsSkipRelatedInformation = compareDiagnosticsSkipRelatedInformation;
|
|
function compareRelatedInformation(d1, d2) {
|
|
if (!d1.relatedInformation && !d2.relatedInformation) {
|
|
return 0;
|
|
}
|
|
if (d1.relatedInformation && d2.relatedInformation) {
|
|
return ts.compareValues(d1.relatedInformation.length, d2.relatedInformation.length) || ts.forEach(d1.relatedInformation, function (d1i, index) {
|
|
var d2i = d2.relatedInformation[index];
|
|
return compareDiagnostics(d1i, d2i);
|
|
}) || 0;
|
|
}
|
|
return d1.relatedInformation ? -1 : 1;
|
|
}
|
|
function compareMessageText(t1, t2) {
|
|
if (typeof t1 === "string" && typeof t2 === "string") {
|
|
return ts.compareStringsCaseSensitive(t1, t2);
|
|
}
|
|
else if (typeof t1 === "string") {
|
|
return -1;
|
|
}
|
|
else if (typeof t2 === "string") {
|
|
return 1;
|
|
}
|
|
var res = ts.compareStringsCaseSensitive(t1.messageText, t2.messageText);
|
|
if (res) {
|
|
return res;
|
|
}
|
|
if (!t1.next && !t2.next) {
|
|
return 0;
|
|
}
|
|
if (!t1.next) {
|
|
return -1;
|
|
}
|
|
if (!t2.next) {
|
|
return 1;
|
|
}
|
|
var len = Math.min(t1.next.length, t2.next.length);
|
|
for (var i = 0; i < len; i++) {
|
|
res = compareMessageText(t1.next[i], t2.next[i]);
|
|
if (res) {
|
|
return res;
|
|
}
|
|
}
|
|
if (t1.next.length < t2.next.length) {
|
|
return -1;
|
|
}
|
|
else if (t1.next.length > t2.next.length) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function getLanguageVariant(scriptKind) {
|
|
return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 || scriptKind === 6 ? 1 : 0;
|
|
}
|
|
ts.getLanguageVariant = getLanguageVariant;
|
|
function walkTreeForJSXTags(node) {
|
|
if (!(node.transformFlags & 2))
|
|
return undefined;
|
|
return ts.isJsxOpeningLikeElement(node) || ts.isJsxFragment(node) ? node : ts.forEachChild(node, walkTreeForJSXTags);
|
|
}
|
|
function isFileModuleFromUsingJSXTag(file) {
|
|
return !file.isDeclarationFile ? walkTreeForJSXTags(file) : undefined;
|
|
}
|
|
function isFileForcedToBeModuleByFormat(file) {
|
|
return (file.impliedNodeFormat === ts.ModuleKind.ESNext || (ts.fileExtensionIsOneOf(file.fileName, [".cjs", ".cts", ".mjs", ".mts"]))) && !file.isDeclarationFile ? true : undefined;
|
|
}
|
|
function getSetExternalModuleIndicator(options) {
|
|
switch (getEmitModuleDetectionKind(options)) {
|
|
case ts.ModuleDetectionKind.Force:
|
|
return function (file) {
|
|
file.externalModuleIndicator = ts.isFileProbablyExternalModule(file) || !file.isDeclarationFile || undefined;
|
|
};
|
|
case ts.ModuleDetectionKind.Legacy:
|
|
return function (file) {
|
|
file.externalModuleIndicator = ts.isFileProbablyExternalModule(file);
|
|
};
|
|
case ts.ModuleDetectionKind.Auto:
|
|
var checks = [ts.isFileProbablyExternalModule];
|
|
if (options.jsx === 4 || options.jsx === 5) {
|
|
checks.push(isFileModuleFromUsingJSXTag);
|
|
}
|
|
checks.push(isFileForcedToBeModuleByFormat);
|
|
var combined_1 = ts.or.apply(void 0, checks);
|
|
var callback = function (file) { return void (file.externalModuleIndicator = combined_1(file)); };
|
|
return callback;
|
|
}
|
|
}
|
|
ts.getSetExternalModuleIndicator = getSetExternalModuleIndicator;
|
|
function getEmitScriptTarget(compilerOptions) {
|
|
return compilerOptions.target ||
|
|
(compilerOptions.module === ts.ModuleKind.Node16 && 9) ||
|
|
(compilerOptions.module === ts.ModuleKind.NodeNext && 99) ||
|
|
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) {
|
|
switch (getEmitModuleKind(compilerOptions)) {
|
|
case ts.ModuleKind.CommonJS:
|
|
moduleResolution = ts.ModuleResolutionKind.NodeJs;
|
|
break;
|
|
case ts.ModuleKind.Node16:
|
|
moduleResolution = ts.ModuleResolutionKind.Node16;
|
|
break;
|
|
case ts.ModuleKind.NodeNext:
|
|
moduleResolution = ts.ModuleResolutionKind.NodeNext;
|
|
break;
|
|
default:
|
|
moduleResolution = ts.ModuleResolutionKind.Classic;
|
|
break;
|
|
}
|
|
}
|
|
return moduleResolution;
|
|
}
|
|
ts.getEmitModuleResolutionKind = getEmitModuleResolutionKind;
|
|
function getEmitModuleDetectionKind(options) {
|
|
return options.moduleDetection ||
|
|
(getEmitModuleKind(options) === ts.ModuleKind.Node16 || getEmitModuleKind(options) === ts.ModuleKind.NodeNext ? ts.ModuleDetectionKind.Force : ts.ModuleDetectionKind.Auto);
|
|
}
|
|
ts.getEmitModuleDetectionKind = getEmitModuleDetectionKind;
|
|
function hasJsonModuleEmitEnabled(options) {
|
|
switch (getEmitModuleKind(options)) {
|
|
case ts.ModuleKind.CommonJS:
|
|
case ts.ModuleKind.AMD:
|
|
case ts.ModuleKind.ES2015:
|
|
case ts.ModuleKind.ES2020:
|
|
case ts.ModuleKind.ES2022:
|
|
case ts.ModuleKind.ESNext:
|
|
case ts.ModuleKind.Node16:
|
|
case ts.ModuleKind.NodeNext:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.hasJsonModuleEmitEnabled = hasJsonModuleEmitEnabled;
|
|
function unreachableCodeIsError(options) {
|
|
return options.allowUnreachableCode === false;
|
|
}
|
|
ts.unreachableCodeIsError = unreachableCodeIsError;
|
|
function unusedLabelIsError(options) {
|
|
return options.allowUnusedLabels === false;
|
|
}
|
|
ts.unusedLabelIsError = unusedLabelIsError;
|
|
function getAreDeclarationMapsEnabled(options) {
|
|
return !!(getEmitDeclarations(options) && options.declarationMap);
|
|
}
|
|
ts.getAreDeclarationMapsEnabled = getAreDeclarationMapsEnabled;
|
|
function getESModuleInterop(compilerOptions) {
|
|
if (compilerOptions.esModuleInterop !== undefined) {
|
|
return compilerOptions.esModuleInterop;
|
|
}
|
|
switch (getEmitModuleKind(compilerOptions)) {
|
|
case ts.ModuleKind.Node16:
|
|
case ts.ModuleKind.NodeNext:
|
|
return true;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getESModuleInterop = getESModuleInterop;
|
|
function getAllowSyntheticDefaultImports(compilerOptions) {
|
|
var moduleKind = getEmitModuleKind(compilerOptions);
|
|
return compilerOptions.allowSyntheticDefaultImports !== undefined
|
|
? compilerOptions.allowSyntheticDefaultImports
|
|
: getESModuleInterop(compilerOptions) ||
|
|
moduleKind === ts.ModuleKind.System;
|
|
}
|
|
ts.getAllowSyntheticDefaultImports = getAllowSyntheticDefaultImports;
|
|
function getEmitDeclarations(compilerOptions) {
|
|
return !!(compilerOptions.declaration || compilerOptions.composite);
|
|
}
|
|
ts.getEmitDeclarations = getEmitDeclarations;
|
|
function shouldPreserveConstEnums(compilerOptions) {
|
|
return !!(compilerOptions.preserveConstEnums || compilerOptions.isolatedModules);
|
|
}
|
|
ts.shouldPreserveConstEnums = shouldPreserveConstEnums;
|
|
function isIncrementalCompilation(options) {
|
|
return !!(options.incremental || options.composite);
|
|
}
|
|
ts.isIncrementalCompilation = isIncrementalCompilation;
|
|
function getStrictOptionValue(compilerOptions, flag) {
|
|
return compilerOptions[flag] === undefined ? !!compilerOptions.strict : !!compilerOptions[flag];
|
|
}
|
|
ts.getStrictOptionValue = getStrictOptionValue;
|
|
function getAllowJSCompilerOption(compilerOptions) {
|
|
return compilerOptions.allowJs === undefined ? !!compilerOptions.checkJs : compilerOptions.allowJs;
|
|
}
|
|
ts.getAllowJSCompilerOption = getAllowJSCompilerOption;
|
|
function getUseDefineForClassFields(compilerOptions) {
|
|
return compilerOptions.useDefineForClassFields === undefined ? getEmitScriptTarget(compilerOptions) >= 9 : compilerOptions.useDefineForClassFields;
|
|
}
|
|
ts.getUseDefineForClassFields = getUseDefineForClassFields;
|
|
function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
|
|
return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
|
|
}
|
|
ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
|
|
function compilerOptionsAffectEmit(newOptions, oldOptions) {
|
|
return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
|
|
}
|
|
ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
|
|
function compilerOptionsAffectDeclarationPath(newOptions, oldOptions) {
|
|
return optionsHaveChanges(oldOptions, newOptions, ts.affectsDeclarationPathOptionDeclarations);
|
|
}
|
|
ts.compilerOptionsAffectDeclarationPath = compilerOptionsAffectDeclarationPath;
|
|
function getCompilerOptionValue(options, option) {
|
|
return option.strictFlag ? getStrictOptionValue(options, option.name) : options[option.name];
|
|
}
|
|
ts.getCompilerOptionValue = getCompilerOptionValue;
|
|
function getJSXTransformEnabled(options) {
|
|
var jsx = options.jsx;
|
|
return jsx === 2 || jsx === 4 || jsx === 5;
|
|
}
|
|
ts.getJSXTransformEnabled = getJSXTransformEnabled;
|
|
function getJSXImplicitImportBase(compilerOptions, file) {
|
|
var jsxImportSourcePragmas = file === null || file === void 0 ? void 0 : file.pragmas.get("jsximportsource");
|
|
var jsxImportSourcePragma = ts.isArray(jsxImportSourcePragmas) ? jsxImportSourcePragmas[jsxImportSourcePragmas.length - 1] : jsxImportSourcePragmas;
|
|
return compilerOptions.jsx === 4 ||
|
|
compilerOptions.jsx === 5 ||
|
|
compilerOptions.jsxImportSource ||
|
|
jsxImportSourcePragma ?
|
|
(jsxImportSourcePragma === null || jsxImportSourcePragma === void 0 ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" :
|
|
undefined;
|
|
}
|
|
ts.getJSXImplicitImportBase = getJSXImplicitImportBase;
|
|
function getJSXRuntimeImport(base, options) {
|
|
return base ? "".concat(base, "/").concat(options.jsx === 5 ? "jsx-dev-runtime" : "jsx-runtime") : undefined;
|
|
}
|
|
ts.getJSXRuntimeImport = getJSXRuntimeImport;
|
|
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;
|
|
function createSymlinkCache(cwd, getCanonicalFileName) {
|
|
var symlinkedDirectories;
|
|
var symlinkedDirectoriesByRealpath;
|
|
var symlinkedFiles;
|
|
var hasProcessedResolutions = false;
|
|
return {
|
|
getSymlinkedFiles: function () { return symlinkedFiles; },
|
|
getSymlinkedDirectories: function () { return symlinkedDirectories; },
|
|
getSymlinkedDirectoriesByRealpath: function () { return symlinkedDirectoriesByRealpath; },
|
|
setSymlinkedFile: function (path, real) { return (symlinkedFiles || (symlinkedFiles = new ts.Map())).set(path, real); },
|
|
setSymlinkedDirectory: function (symlink, real) {
|
|
var symlinkPath = ts.toPath(symlink, cwd, getCanonicalFileName);
|
|
if (!containsIgnoredPath(symlinkPath)) {
|
|
symlinkPath = ts.ensureTrailingDirectorySeparator(symlinkPath);
|
|
if (real !== false && !(symlinkedDirectories === null || symlinkedDirectories === void 0 ? void 0 : symlinkedDirectories.has(symlinkPath))) {
|
|
(symlinkedDirectoriesByRealpath || (symlinkedDirectoriesByRealpath = ts.createMultiMap())).add(ts.ensureTrailingDirectorySeparator(real.realPath), symlink);
|
|
}
|
|
(symlinkedDirectories || (symlinkedDirectories = new ts.Map())).set(symlinkPath, real);
|
|
}
|
|
},
|
|
setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
|
|
var _this = this;
|
|
var _a;
|
|
ts.Debug.assert(!hasProcessedResolutions);
|
|
hasProcessedResolutions = true;
|
|
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
|
|
var file = files_1[_i];
|
|
(_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
|
|
}
|
|
typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
|
|
},
|
|
hasProcessedResolutions: function () { return hasProcessedResolutions; },
|
|
};
|
|
function processResolution(cache, resolution) {
|
|
if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
|
|
return;
|
|
var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
|
|
cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
|
|
var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
|
|
if (commonResolved && commonOriginal) {
|
|
cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
|
|
}
|
|
}
|
|
}
|
|
ts.createSymlinkCache = createSymlinkCache;
|
|
function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
|
|
var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
|
|
var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
|
|
var isDirectory = false;
|
|
while (aParts.length >= 2 && bParts.length >= 2 &&
|
|
!isNodeModulesOrScopedPackageDirectory(aParts[aParts.length - 2], getCanonicalFileName) &&
|
|
!isNodeModulesOrScopedPackageDirectory(bParts[bParts.length - 2], getCanonicalFileName) &&
|
|
getCanonicalFileName(aParts[aParts.length - 1]) === getCanonicalFileName(bParts[bParts.length - 1])) {
|
|
aParts.pop();
|
|
bParts.pop();
|
|
isDirectory = true;
|
|
}
|
|
return isDirectory ? [ts.getPathFromPathComponents(aParts), ts.getPathFromPathComponents(bParts)] : undefined;
|
|
}
|
|
function isNodeModulesOrScopedPackageDirectory(s, getCanonicalFileName) {
|
|
return s !== undefined && (getCanonicalFileName(s) === "node_modules" || ts.startsWith(s, "@"));
|
|
}
|
|
function stripLeadingDirectorySeparator(s) {
|
|
return ts.isAnyDirectorySeparator(s.charCodeAt(0)) ? s.slice(1) : undefined;
|
|
}
|
|
function tryRemoveDirectoryPrefix(path, dirPath, getCanonicalFileName) {
|
|
var withoutPrefix = ts.tryRemovePrefix(path, dirPath, getCanonicalFileName);
|
|
return withoutPrefix === undefined ? undefined : stripLeadingDirectorySeparator(withoutPrefix);
|
|
}
|
|
ts.tryRemoveDirectoryPrefix = tryRemoveDirectoryPrefix;
|
|
var reservedCharacterPattern = /[^\w\s\/]/g;
|
|
function regExpEscape(text) {
|
|
return text.replace(reservedCharacterPattern, escapeRegExpCharacter);
|
|
}
|
|
ts.regExpEscape = regExpEscape;
|
|
function escapeRegExpCharacter(match) {
|
|
return "\\" + match;
|
|
}
|
|
var wildcardCharCodes = [42, 63];
|
|
ts.commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"];
|
|
var implicitExcludePathRegexPattern = "(?!(".concat(ts.commonPackageFolders.join("|"), ")(/|$))");
|
|
var filesMatcher = {
|
|
singleAsteriskRegexFragment: "([^./]|(\\.(?!min\\.js$))?)*",
|
|
doubleAsteriskRegexFragment: "(/".concat(implicitExcludePathRegexPattern, "[^/.][^/]*)*?"),
|
|
replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, filesMatcher.singleAsteriskRegexFragment); }
|
|
};
|
|
var directoriesMatcher = {
|
|
singleAsteriskRegexFragment: "[^/]*",
|
|
doubleAsteriskRegexFragment: "(/".concat(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 "(".concat(pattern, ")"); }).join("|");
|
|
var terminator = usage === "exclude" ? "($|/)" : "$";
|
|
return "^(".concat(pattern, ")").concat(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]);
|
|
});
|
|
}
|
|
ts.getRegularExpressionsForWildcards = getRegularExpressionsForWildcards;
|
|
function isImplicitGlob(lastPathComponent) {
|
|
return !/[.*?]/.test(lastPathComponent);
|
|
}
|
|
ts.isImplicitGlob = isImplicitGlob;
|
|
function getPatternFromSpec(spec, basePath, usage) {
|
|
var pattern = spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage]);
|
|
return pattern && "^(".concat(pattern, ")").concat(usage === "exclude" ? "($|/)" : "$");
|
|
}
|
|
ts.getPatternFromSpec = getPatternFromSpec;
|
|
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] = ts.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 = ts.combinePaths(currentDirectory, path);
|
|
return {
|
|
includeFilePatterns: ts.map(getRegularExpressionsForWildcards(includes, absolutePath, "files"), function (pattern) { return "^".concat(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, realpath) {
|
|
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 []; }) : [[]];
|
|
var visited = new ts.Map();
|
|
var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
|
|
var basePath = _a[_i];
|
|
visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
|
|
}
|
|
return ts.flatten(results);
|
|
function visitDirectory(path, absolutePath, depth) {
|
|
var canonicalPath = toCanonical(realpath(absolutePath));
|
|
if (visited.has(canonicalPath))
|
|
return;
|
|
visited.set(canonicalPath, true);
|
|
var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
|
|
var _loop_1 = function (current) {
|
|
var name = ts.combinePaths(path, current);
|
|
var absoluteName = ts.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 = ts.combinePaths(path, current);
|
|
var absoluteName = ts.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(ts.combinePaths(path, include));
|
|
includeBasePaths.push(getIncludeBasePath(absolute));
|
|
}
|
|
includeBasePaths.sort(ts.getStringComparer(!useCaseSensitiveFileNames));
|
|
var _loop_2 = function (includeBasePath) {
|
|
if (ts.every(basePaths, function (basePath) { return !ts.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 !ts.hasExtension(absolute)
|
|
? absolute
|
|
: ts.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":
|
|
case ".cjs":
|
|
case ".mjs":
|
|
return 1;
|
|
case ".jsx":
|
|
return 2;
|
|
case ".ts":
|
|
case ".cts":
|
|
case ".mts":
|
|
return 3;
|
|
case ".tsx":
|
|
return 4;
|
|
case ".json":
|
|
return 6;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
ts.getScriptKindFromFileName = getScriptKindFromFileName;
|
|
ts.supportedTSExtensions = [[".ts", ".tsx", ".d.ts"], [".cts", ".d.cts"], [".mts", ".d.mts"]];
|
|
ts.supportedTSExtensionsFlat = ts.flatten(ts.supportedTSExtensions);
|
|
var supportedTSExtensionsWithJson = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), [[".json"]], false);
|
|
var supportedTSExtensionsForExtractExtension = [".d.ts", ".d.cts", ".d.mts", ".cts", ".mts", ".ts", ".tsx", ".cts", ".mts"];
|
|
ts.supportedJSExtensions = [[".js", ".jsx"], [".mjs"], [".cjs"]];
|
|
ts.supportedJSExtensionsFlat = ts.flatten(ts.supportedJSExtensions);
|
|
var allSupportedExtensions = [[".ts", ".tsx", ".d.ts", ".js", ".jsx"], [".cts", ".d.cts", ".cjs"], [".mts", ".d.mts", ".mjs"]];
|
|
var allSupportedExtensionsWithJson = __spreadArray(__spreadArray([], allSupportedExtensions, true), [[".json"]], false);
|
|
ts.supportedDeclarationExtensions = [".d.ts", ".d.cts", ".d.mts"];
|
|
function getSupportedExtensions(options, extraFileExtensions) {
|
|
var needJsExtensions = options && getAllowJSCompilerOption(options);
|
|
if (!extraFileExtensions || extraFileExtensions.length === 0) {
|
|
return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
|
|
}
|
|
var builtins = needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
|
|
var flatBuiltins = ts.flatten(builtins);
|
|
var extensions = __spreadArray(__spreadArray([], builtins, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 || needJsExtensions && isJSLike(x.scriptKind) && flatBuiltins.indexOf(x.extension) === -1 ? [x.extension] : undefined; }), true);
|
|
return extensions;
|
|
}
|
|
ts.getSupportedExtensions = getSupportedExtensions;
|
|
function getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions) {
|
|
if (!options || !options.resolveJsonModule)
|
|
return supportedExtensions;
|
|
if (supportedExtensions === allSupportedExtensions)
|
|
return allSupportedExtensionsWithJson;
|
|
if (supportedExtensions === ts.supportedTSExtensions)
|
|
return supportedTSExtensionsWithJson;
|
|
return __spreadArray(__spreadArray([], supportedExtensions, true), [[".json"]], false);
|
|
}
|
|
ts.getSupportedExtensionsWithJsonIfResolveJsonModule = getSupportedExtensionsWithJsonIfResolveJsonModule;
|
|
function isJSLike(scriptKind) {
|
|
return scriptKind === 1 || scriptKind === 2;
|
|
}
|
|
function hasJSFileExtension(fileName) {
|
|
return ts.some(ts.supportedJSExtensionsFlat, function (extension) { return ts.fileExtensionIs(fileName, extension); });
|
|
}
|
|
ts.hasJSFileExtension = hasJSFileExtension;
|
|
function hasTSFileExtension(fileName) {
|
|
return ts.some(ts.supportedTSExtensionsFlat, function (extension) { return ts.fileExtensionIs(fileName, extension); });
|
|
}
|
|
ts.hasTSFileExtension = hasTSFileExtension;
|
|
function isSupportedSourceFileName(fileName, compilerOptions, extraFileExtensions) {
|
|
if (!fileName)
|
|
return false;
|
|
var supportedExtensions = getSupportedExtensions(compilerOptions, extraFileExtensions);
|
|
for (var _i = 0, _a = ts.flatten(getSupportedExtensionsWithJsonIfResolveJsonModule(compilerOptions, supportedExtensions)); _i < _a.length; _i++) {
|
|
var extension = _a[_i];
|
|
if (ts.fileExtensionIs(fileName, extension)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
ts.isSupportedSourceFileName = isSupportedSourceFileName;
|
|
function numberOfDirectorySeparators(str) {
|
|
var match = str.match(/\//g);
|
|
return match ? match.length : 0;
|
|
}
|
|
function compareNumberOfDirectorySeparators(path1, path2) {
|
|
return ts.compareValues(numberOfDirectorySeparators(path1), numberOfDirectorySeparators(path2));
|
|
}
|
|
ts.compareNumberOfDirectorySeparators = compareNumberOfDirectorySeparators;
|
|
var extensionsToRemove = [".d.ts", ".d.mts", ".d.cts", ".mjs", ".mts", ".cjs", ".cts", ".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 ts.changeAnyExtension(path, newExtension, extensionsToRemove, false);
|
|
}
|
|
ts.changeExtension = changeExtension;
|
|
function tryParsePattern(pattern) {
|
|
var indexOfStar = pattern.indexOf("*");
|
|
if (indexOfStar === -1) {
|
|
return pattern;
|
|
}
|
|
return pattern.indexOf("*", indexOfStar + 1) !== -1
|
|
? undefined
|
|
: {
|
|
prefix: pattern.substr(0, indexOfStar),
|
|
suffix: pattern.substr(indexOfStar + 1)
|
|
};
|
|
}
|
|
ts.tryParsePattern = tryParsePattern;
|
|
function tryParsePatterns(paths) {
|
|
return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
|
|
}
|
|
ts.tryParsePatterns = tryParsePatterns;
|
|
function positionIsSynthesized(pos) {
|
|
return !(pos >= 0);
|
|
}
|
|
ts.positionIsSynthesized = positionIsSynthesized;
|
|
function extensionIsTS(ext) {
|
|
return ext === ".ts" || ext === ".tsx" || ext === ".d.ts" || ext === ".cts" || ext === ".mts" || ext === ".d.mts" || ext === ".d.cts";
|
|
}
|
|
ts.extensionIsTS = extensionIsTS;
|
|
function resolutionExtensionIsTSOrJson(ext) {
|
|
return extensionIsTS(ext) || ext === ".json";
|
|
}
|
|
ts.resolutionExtensionIsTSOrJson = resolutionExtensionIsTSOrJson;
|
|
function extensionFromPath(path) {
|
|
var ext = tryGetExtensionFromPath(path);
|
|
return ext !== undefined ? ext : ts.Debug.fail("File ".concat(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 isCheckJsEnabledForFile(sourceFile, compilerOptions) {
|
|
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
|
|
}
|
|
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
|
|
ts.emptyFileSystemEntries = {
|
|
files: ts.emptyArray,
|
|
directories: ts.emptyArray
|
|
};
|
|
function matchPatternOrExact(patternOrStrings, candidate) {
|
|
var patterns = [];
|
|
for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
|
|
var patternOrString = patternOrStrings_1[_i];
|
|
if (patternOrString === candidate) {
|
|
return candidate;
|
|
}
|
|
if (!ts.isString(patternOrString)) {
|
|
patterns.push(patternOrString);
|
|
}
|
|
}
|
|
return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
|
|
}
|
|
ts.matchPatternOrExact = matchPatternOrExact;
|
|
function sliceAfter(arr, value) {
|
|
var index = arr.indexOf(value);
|
|
ts.Debug.assert(index !== -1);
|
|
return arr.slice(index);
|
|
}
|
|
ts.sliceAfter = sliceAfter;
|
|
function addRelatedInfo(diagnostic) {
|
|
var _a;
|
|
var relatedInformation = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
relatedInformation[_i - 1] = arguments[_i];
|
|
}
|
|
if (!relatedInformation.length) {
|
|
return diagnostic;
|
|
}
|
|
if (!diagnostic.relatedInformation) {
|
|
diagnostic.relatedInformation = [];
|
|
}
|
|
ts.Debug.assert(diagnostic.relatedInformation !== ts.emptyArray, "Diagnostic had empty array singleton for related info, but is still being constructed!");
|
|
(_a = diagnostic.relatedInformation).push.apply(_a, relatedInformation);
|
|
return diagnostic;
|
|
}
|
|
ts.addRelatedInfo = addRelatedInfo;
|
|
function minAndMax(arr, getValue) {
|
|
ts.Debug.assert(arr.length !== 0);
|
|
var min = getValue(arr[0]);
|
|
var max = min;
|
|
for (var i = 1; i < arr.length; i++) {
|
|
var value = getValue(arr[i]);
|
|
if (value < min) {
|
|
min = value;
|
|
}
|
|
else if (value > max) {
|
|
max = value;
|
|
}
|
|
}
|
|
return { min: min, max: max };
|
|
}
|
|
ts.minAndMax = minAndMax;
|
|
function rangeOfNode(node) {
|
|
return { pos: getTokenPosOfNode(node), end: node.end };
|
|
}
|
|
ts.rangeOfNode = rangeOfNode;
|
|
function rangeOfTypeParameters(sourceFile, typeParameters) {
|
|
var pos = typeParameters.pos - 1;
|
|
var end = ts.skipTrivia(sourceFile.text, typeParameters.end) + 1;
|
|
return { pos: pos, end: end };
|
|
}
|
|
ts.rangeOfTypeParameters = rangeOfTypeParameters;
|
|
function skipTypeChecking(sourceFile, options, host) {
|
|
return (options.skipLibCheck && sourceFile.isDeclarationFile ||
|
|
options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib) ||
|
|
host.isSourceOfProjectReferenceRedirect(sourceFile.fileName);
|
|
}
|
|
ts.skipTypeChecking = skipTypeChecking;
|
|
function isJsonEqual(a, b) {
|
|
return a === b || typeof a === "object" && a !== null && typeof b === "object" && b !== null && ts.equalOwnProperties(a, b, isJsonEqual);
|
|
}
|
|
ts.isJsonEqual = isJsonEqual;
|
|
function parsePseudoBigInt(stringValue) {
|
|
var log2Base;
|
|
switch (stringValue.charCodeAt(1)) {
|
|
case 98:
|
|
case 66:
|
|
log2Base = 1;
|
|
break;
|
|
case 111:
|
|
case 79:
|
|
log2Base = 3;
|
|
break;
|
|
case 120:
|
|
case 88:
|
|
log2Base = 4;
|
|
break;
|
|
default:
|
|
var nIndex = stringValue.length - 1;
|
|
var nonZeroStart = 0;
|
|
while (stringValue.charCodeAt(nonZeroStart) === 48) {
|
|
nonZeroStart++;
|
|
}
|
|
return stringValue.slice(nonZeroStart, nIndex) || "0";
|
|
}
|
|
var startIndex = 2, endIndex = stringValue.length - 1;
|
|
var bitsNeeded = (endIndex - startIndex) * log2Base;
|
|
var segments = new Uint16Array((bitsNeeded >>> 4) + (bitsNeeded & 15 ? 1 : 0));
|
|
for (var i = endIndex - 1, bitOffset = 0; i >= startIndex; i--, bitOffset += log2Base) {
|
|
var segment = bitOffset >>> 4;
|
|
var digitChar = stringValue.charCodeAt(i);
|
|
var digit = digitChar <= 57
|
|
? digitChar - 48
|
|
: 10 + digitChar -
|
|
(digitChar <= 70 ? 65 : 97);
|
|
var shiftedDigit = digit << (bitOffset & 15);
|
|
segments[segment] |= shiftedDigit;
|
|
var residual = shiftedDigit >>> 16;
|
|
if (residual)
|
|
segments[segment + 1] |= residual;
|
|
}
|
|
var base10Value = "";
|
|
var firstNonzeroSegment = segments.length - 1;
|
|
var segmentsRemaining = true;
|
|
while (segmentsRemaining) {
|
|
var mod10 = 0;
|
|
segmentsRemaining = false;
|
|
for (var segment = firstNonzeroSegment; segment >= 0; segment--) {
|
|
var newSegment = mod10 << 16 | segments[segment];
|
|
var segmentValue = (newSegment / 10) | 0;
|
|
segments[segment] = segmentValue;
|
|
mod10 = newSegment - segmentValue * 10;
|
|
if (segmentValue && !segmentsRemaining) {
|
|
firstNonzeroSegment = segment;
|
|
segmentsRemaining = true;
|
|
}
|
|
}
|
|
base10Value = mod10 + base10Value;
|
|
}
|
|
return base10Value;
|
|
}
|
|
ts.parsePseudoBigInt = parsePseudoBigInt;
|
|
function pseudoBigIntToString(_a) {
|
|
var negative = _a.negative, base10Value = _a.base10Value;
|
|
return (negative && base10Value !== "0" ? "-" : "") + base10Value;
|
|
}
|
|
ts.pseudoBigIntToString = pseudoBigIntToString;
|
|
function isValidTypeOnlyAliasUseSite(useSite) {
|
|
return !!(useSite.flags & 16777216)
|
|
|| isPartOfTypeQuery(useSite)
|
|
|| isIdentifierInNonEmittingHeritageClause(useSite)
|
|
|| isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
|
|
|| !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
|
|
}
|
|
ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
|
|
function isShorthandPropertyNameUseSite(useSite) {
|
|
return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
|
|
}
|
|
function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
|
|
while (node.kind === 79 || node.kind === 206) {
|
|
node = node.parent;
|
|
}
|
|
if (node.kind !== 162) {
|
|
return false;
|
|
}
|
|
if (hasSyntacticModifier(node.parent, 128)) {
|
|
return true;
|
|
}
|
|
var containerKind = node.parent.parent.kind;
|
|
return containerKind === 258 || containerKind === 182;
|
|
}
|
|
function isIdentifierInNonEmittingHeritageClause(node) {
|
|
if (node.kind !== 79)
|
|
return false;
|
|
var heritageClause = ts.findAncestor(node.parent, function (parent) {
|
|
switch (parent.kind) {
|
|
case 291:
|
|
return true;
|
|
case 206:
|
|
case 228:
|
|
return false;
|
|
default:
|
|
return "quit";
|
|
}
|
|
});
|
|
return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 258;
|
|
}
|
|
function isIdentifierTypeReference(node) {
|
|
return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
|
|
}
|
|
ts.isIdentifierTypeReference = isIdentifierTypeReference;
|
|
function arrayIsHomogeneous(array, comparer) {
|
|
if (comparer === void 0) { comparer = ts.equateValues; }
|
|
if (array.length < 2)
|
|
return true;
|
|
var first = array[0];
|
|
for (var i = 1, length_1 = array.length; i < length_1; i++) {
|
|
var target = array[i];
|
|
if (!comparer(first, target))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
ts.arrayIsHomogeneous = arrayIsHomogeneous;
|
|
function setTextRangePos(range, pos) {
|
|
range.pos = pos;
|
|
return range;
|
|
}
|
|
ts.setTextRangePos = setTextRangePos;
|
|
function setTextRangeEnd(range, end) {
|
|
range.end = end;
|
|
return range;
|
|
}
|
|
ts.setTextRangeEnd = setTextRangeEnd;
|
|
function setTextRangePosEnd(range, pos, end) {
|
|
return setTextRangeEnd(setTextRangePos(range, pos), end);
|
|
}
|
|
ts.setTextRangePosEnd = setTextRangePosEnd;
|
|
function setTextRangePosWidth(range, pos, width) {
|
|
return setTextRangePosEnd(range, pos, pos + width);
|
|
}
|
|
ts.setTextRangePosWidth = setTextRangePosWidth;
|
|
function setNodeFlags(node, newFlags) {
|
|
if (node) {
|
|
node.flags = newFlags;
|
|
}
|
|
return node;
|
|
}
|
|
ts.setNodeFlags = setNodeFlags;
|
|
function setParent(child, parent) {
|
|
if (child && parent) {
|
|
child.parent = parent;
|
|
}
|
|
return child;
|
|
}
|
|
ts.setParent = setParent;
|
|
function setEachParent(children, parent) {
|
|
if (children) {
|
|
for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
|
|
var child = children_1[_i];
|
|
setParent(child, parent);
|
|
}
|
|
}
|
|
return children;
|
|
}
|
|
ts.setEachParent = setEachParent;
|
|
function setParentRecursive(rootNode, incremental) {
|
|
if (!rootNode)
|
|
return rootNode;
|
|
ts.forEachChildRecursively(rootNode, ts.isJSDocNode(rootNode) ? bindParentToChildIgnoringJSDoc : bindParentToChild);
|
|
return rootNode;
|
|
function bindParentToChildIgnoringJSDoc(child, parent) {
|
|
if (incremental && child.parent === parent) {
|
|
return "skip";
|
|
}
|
|
setParent(child, parent);
|
|
}
|
|
function bindJSDoc(child) {
|
|
if (ts.hasJSDocNodes(child)) {
|
|
for (var _i = 0, _a = child.jsDoc; _i < _a.length; _i++) {
|
|
var doc = _a[_i];
|
|
bindParentToChildIgnoringJSDoc(doc, child);
|
|
ts.forEachChildRecursively(doc, bindParentToChildIgnoringJSDoc);
|
|
}
|
|
}
|
|
}
|
|
function bindParentToChild(child, parent) {
|
|
return bindParentToChildIgnoringJSDoc(child, parent) || bindJSDoc(child);
|
|
}
|
|
}
|
|
ts.setParentRecursive = setParentRecursive;
|
|
function isPackedElement(node) {
|
|
return !ts.isOmittedExpression(node);
|
|
}
|
|
function isPackedArrayLiteral(node) {
|
|
return ts.isArrayLiteralExpression(node) && ts.every(node.elements, isPackedElement);
|
|
}
|
|
ts.isPackedArrayLiteral = isPackedArrayLiteral;
|
|
function expressionResultIsUnused(node) {
|
|
ts.Debug.assertIsDefined(node.parent);
|
|
while (true) {
|
|
var parent = node.parent;
|
|
if (ts.isParenthesizedExpression(parent)) {
|
|
node = parent;
|
|
continue;
|
|
}
|
|
if (ts.isExpressionStatement(parent) ||
|
|
ts.isVoidExpression(parent) ||
|
|
ts.isForStatement(parent) && (parent.initializer === node || parent.incrementor === node)) {
|
|
return true;
|
|
}
|
|
if (ts.isCommaListExpression(parent)) {
|
|
if (node !== ts.last(parent.elements))
|
|
return true;
|
|
node = parent;
|
|
continue;
|
|
}
|
|
if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 27) {
|
|
if (node === parent.left)
|
|
return true;
|
|
node = parent;
|
|
continue;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
ts.expressionResultIsUnused = expressionResultIsUnused;
|
|
function containsIgnoredPath(path) {
|
|
return ts.some(ts.ignoredPaths, function (p) { return ts.stringContains(path, p); });
|
|
}
|
|
ts.containsIgnoredPath = containsIgnoredPath;
|
|
function getContainingNodeArray(node) {
|
|
if (!node.parent)
|
|
return undefined;
|
|
switch (node.kind) {
|
|
case 163:
|
|
var parent_1 = node.parent;
|
|
return parent_1.kind === 190 ? undefined : parent_1.typeParameters;
|
|
case 164:
|
|
return node.parent.parameters;
|
|
case 199:
|
|
return node.parent.templateSpans;
|
|
case 233:
|
|
return node.parent.templateSpans;
|
|
case 165: {
|
|
var parent_2 = node.parent;
|
|
return ts.canHaveDecorators(parent_2) ? parent_2.modifiers :
|
|
ts.canHaveIllegalDecorators(parent_2) ? parent_2.illegalDecorators :
|
|
undefined;
|
|
}
|
|
case 291:
|
|
return node.parent.heritageClauses;
|
|
}
|
|
var parent = node.parent;
|
|
if (ts.isJSDocTag(node)) {
|
|
return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
|
|
}
|
|
switch (parent.kind) {
|
|
case 182:
|
|
case 258:
|
|
return ts.isTypeElement(node) ? parent.members : undefined;
|
|
case 187:
|
|
case 188:
|
|
return parent.types;
|
|
case 184:
|
|
case 204:
|
|
case 351:
|
|
case 269:
|
|
case 273:
|
|
return parent.elements;
|
|
case 205:
|
|
case 286:
|
|
return parent.properties;
|
|
case 208:
|
|
case 209:
|
|
return ts.isTypeNode(node) ? parent.typeArguments :
|
|
parent.expression === node ? undefined :
|
|
parent.arguments;
|
|
case 278:
|
|
case 282:
|
|
return ts.isJsxChild(node) ? parent.children : undefined;
|
|
case 280:
|
|
case 279:
|
|
return ts.isTypeNode(node) ? parent.typeArguments : undefined;
|
|
case 235:
|
|
case 289:
|
|
case 290:
|
|
case 262:
|
|
return parent.statements;
|
|
case 263:
|
|
return parent.clauses;
|
|
case 257:
|
|
case 226:
|
|
return ts.isClassElement(node) ? parent.members : undefined;
|
|
case 260:
|
|
return ts.isEnumMember(node) ? parent.members : undefined;
|
|
case 305:
|
|
return parent.statements;
|
|
}
|
|
}
|
|
ts.getContainingNodeArray = getContainingNodeArray;
|
|
function hasContextSensitiveParameters(node) {
|
|
if (!node.typeParameters) {
|
|
if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
|
|
return true;
|
|
}
|
|
if (node.kind !== 214) {
|
|
var parameter = ts.firstOrUndefined(node.parameters);
|
|
if (!(parameter && parameterIsThisKeyword(parameter))) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
|
|
function isInfinityOrNaNString(name) {
|
|
return name === "Infinity" || name === "-Infinity" || name === "NaN";
|
|
}
|
|
ts.isInfinityOrNaNString = isInfinityOrNaNString;
|
|
function isCatchClauseVariableDeclaration(node) {
|
|
return node.kind === 254 && node.parent.kind === 292;
|
|
}
|
|
ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration;
|
|
function isParameterOrCatchClauseVariable(symbol) {
|
|
var declaration = symbol.valueDeclaration && getRootDeclaration(symbol.valueDeclaration);
|
|
return !!declaration && (ts.isParameter(declaration) || isCatchClauseVariableDeclaration(declaration));
|
|
}
|
|
ts.isParameterOrCatchClauseVariable = isParameterOrCatchClauseVariable;
|
|
function isFunctionExpressionOrArrowFunction(node) {
|
|
return node.kind === 213 || node.kind === 214;
|
|
}
|
|
ts.isFunctionExpressionOrArrowFunction = isFunctionExpressionOrArrowFunction;
|
|
function escapeSnippetText(text) {
|
|
return text.replace(/\$/gm, function () { return "\\$"; });
|
|
}
|
|
ts.escapeSnippetText = escapeSnippetText;
|
|
function isNumericLiteralName(name) {
|
|
return (+name).toString() === name;
|
|
}
|
|
ts.isNumericLiteralName = isNumericLiteralName;
|
|
function createPropertyNameNodeForIdentifierOrLiteral(name, target, singleQuote, stringNamed) {
|
|
return ts.isIdentifierText(name, target) ? ts.factory.createIdentifier(name) :
|
|
!stringNamed && isNumericLiteralName(name) && +name >= 0 ? ts.factory.createNumericLiteral(+name) :
|
|
ts.factory.createStringLiteral(name, !!singleQuote);
|
|
}
|
|
ts.createPropertyNameNodeForIdentifierOrLiteral = createPropertyNameNodeForIdentifierOrLiteral;
|
|
function isThisTypeParameter(type) {
|
|
return !!(type.flags & 262144 && type.isThisType);
|
|
}
|
|
ts.isThisTypeParameter = isThisTypeParameter;
|
|
function getNodeModulePathParts(fullPath) {
|
|
var topLevelNodeModulesIndex = 0;
|
|
var topLevelPackageNameIndex = 0;
|
|
var packageRootIndex = 0;
|
|
var fileNameIndex = 0;
|
|
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(ts.nodeModulesPathPart, 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(ts.nodeModulesPathPart, partStart) === partStart) {
|
|
state = 1;
|
|
}
|
|
else {
|
|
state = 3;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
fileNameIndex = partStart;
|
|
return state > 1 ? { topLevelNodeModulesIndex: topLevelNodeModulesIndex, topLevelPackageNameIndex: topLevelPackageNameIndex, packageRootIndex: packageRootIndex, fileNameIndex: fileNameIndex } : undefined;
|
|
}
|
|
ts.getNodeModulePathParts = getNodeModulePathParts;
|
|
function getParameterTypeNode(parameter) {
|
|
var _a;
|
|
return parameter.kind === 340 ? (_a = parameter.typeExpression) === null || _a === void 0 ? void 0 : _a.type : parameter.type;
|
|
}
|
|
ts.getParameterTypeNode = getParameterTypeNode;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createBaseNodeFactory() {
|
|
var NodeConstructor;
|
|
var TokenConstructor;
|
|
var IdentifierConstructor;
|
|
var PrivateIdentifierConstructor;
|
|
var SourceFileConstructor;
|
|
return {
|
|
createBaseSourceFileNode: createBaseSourceFileNode,
|
|
createBaseIdentifierNode: createBaseIdentifierNode,
|
|
createBasePrivateIdentifierNode: createBasePrivateIdentifierNode,
|
|
createBaseTokenNode: createBaseTokenNode,
|
|
createBaseNode: createBaseNode
|
|
};
|
|
function createBaseSourceFileNode(kind) {
|
|
return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, -1, -1);
|
|
}
|
|
function createBaseIdentifierNode(kind) {
|
|
return new (IdentifierConstructor || (IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor()))(kind, -1, -1);
|
|
}
|
|
function createBasePrivateIdentifierNode(kind) {
|
|
return new (PrivateIdentifierConstructor || (PrivateIdentifierConstructor = ts.objectAllocator.getPrivateIdentifierConstructor()))(kind, -1, -1);
|
|
}
|
|
function createBaseTokenNode(kind) {
|
|
return new (TokenConstructor || (TokenConstructor = ts.objectAllocator.getTokenConstructor()))(kind, -1, -1);
|
|
}
|
|
function createBaseNode(kind) {
|
|
return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, -1, -1);
|
|
}
|
|
}
|
|
ts.createBaseNodeFactory = createBaseNodeFactory;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createParenthesizerRules(factory) {
|
|
var binaryLeftOperandParenthesizerCache;
|
|
var binaryRightOperandParenthesizerCache;
|
|
return {
|
|
getParenthesizeLeftSideOfBinaryForOperator: getParenthesizeLeftSideOfBinaryForOperator,
|
|
getParenthesizeRightSideOfBinaryForOperator: getParenthesizeRightSideOfBinaryForOperator,
|
|
parenthesizeLeftSideOfBinary: parenthesizeLeftSideOfBinary,
|
|
parenthesizeRightSideOfBinary: parenthesizeRightSideOfBinary,
|
|
parenthesizeExpressionOfComputedPropertyName: parenthesizeExpressionOfComputedPropertyName,
|
|
parenthesizeConditionOfConditionalExpression: parenthesizeConditionOfConditionalExpression,
|
|
parenthesizeBranchOfConditionalExpression: parenthesizeBranchOfConditionalExpression,
|
|
parenthesizeExpressionOfExportDefault: parenthesizeExpressionOfExportDefault,
|
|
parenthesizeExpressionOfNew: parenthesizeExpressionOfNew,
|
|
parenthesizeLeftSideOfAccess: parenthesizeLeftSideOfAccess,
|
|
parenthesizeOperandOfPostfixUnary: parenthesizeOperandOfPostfixUnary,
|
|
parenthesizeOperandOfPrefixUnary: parenthesizeOperandOfPrefixUnary,
|
|
parenthesizeExpressionsOfCommaDelimitedList: parenthesizeExpressionsOfCommaDelimitedList,
|
|
parenthesizeExpressionForDisallowedComma: parenthesizeExpressionForDisallowedComma,
|
|
parenthesizeExpressionOfExpressionStatement: parenthesizeExpressionOfExpressionStatement,
|
|
parenthesizeConciseBodyOfArrowFunction: parenthesizeConciseBodyOfArrowFunction,
|
|
parenthesizeCheckTypeOfConditionalType: parenthesizeCheckTypeOfConditionalType,
|
|
parenthesizeExtendsTypeOfConditionalType: parenthesizeExtendsTypeOfConditionalType,
|
|
parenthesizeConstituentTypesOfUnionType: parenthesizeConstituentTypesOfUnionType,
|
|
parenthesizeConstituentTypeOfUnionType: parenthesizeConstituentTypeOfUnionType,
|
|
parenthesizeConstituentTypesOfIntersectionType: parenthesizeConstituentTypesOfIntersectionType,
|
|
parenthesizeConstituentTypeOfIntersectionType: parenthesizeConstituentTypeOfIntersectionType,
|
|
parenthesizeOperandOfTypeOperator: parenthesizeOperandOfTypeOperator,
|
|
parenthesizeOperandOfReadonlyTypeOperator: parenthesizeOperandOfReadonlyTypeOperator,
|
|
parenthesizeNonArrayTypeOfPostfixType: parenthesizeNonArrayTypeOfPostfixType,
|
|
parenthesizeElementTypesOfTupleType: parenthesizeElementTypesOfTupleType,
|
|
parenthesizeElementTypeOfTupleType: parenthesizeElementTypeOfTupleType,
|
|
parenthesizeTypeOfOptionalType: parenthesizeTypeOfOptionalType,
|
|
parenthesizeTypeArguments: parenthesizeTypeArguments,
|
|
parenthesizeLeadingTypeArgument: parenthesizeLeadingTypeArgument,
|
|
};
|
|
function getParenthesizeLeftSideOfBinaryForOperator(operatorKind) {
|
|
binaryLeftOperandParenthesizerCache || (binaryLeftOperandParenthesizerCache = new ts.Map());
|
|
var parenthesizerRule = binaryLeftOperandParenthesizerCache.get(operatorKind);
|
|
if (!parenthesizerRule) {
|
|
parenthesizerRule = function (node) { return parenthesizeLeftSideOfBinary(operatorKind, node); };
|
|
binaryLeftOperandParenthesizerCache.set(operatorKind, parenthesizerRule);
|
|
}
|
|
return parenthesizerRule;
|
|
}
|
|
function getParenthesizeRightSideOfBinaryForOperator(operatorKind) {
|
|
binaryRightOperandParenthesizerCache || (binaryRightOperandParenthesizerCache = new ts.Map());
|
|
var parenthesizerRule = binaryRightOperandParenthesizerCache.get(operatorKind);
|
|
if (!parenthesizerRule) {
|
|
parenthesizerRule = function (node) { return parenthesizeRightSideOfBinary(operatorKind, undefined, node); };
|
|
binaryRightOperandParenthesizerCache.set(operatorKind, parenthesizerRule);
|
|
}
|
|
return parenthesizerRule;
|
|
}
|
|
function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
|
|
var binaryOperatorPrecedence = ts.getOperatorPrecedence(221, binaryOperator);
|
|
var binaryOperatorAssociativity = ts.getOperatorAssociativity(221, binaryOperator);
|
|
var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
|
|
if (!isLeftSideOfBinary && operand.kind === 214 && binaryOperatorPrecedence > 3) {
|
|
return true;
|
|
}
|
|
var operandPrecedence = ts.getExpressionPrecedence(emittedOperand);
|
|
switch (ts.compareValues(operandPrecedence, binaryOperatorPrecedence)) {
|
|
case -1:
|
|
if (!isLeftSideOfBinary
|
|
&& binaryOperatorAssociativity === 1
|
|
&& operand.kind === 224) {
|
|
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 === 39) {
|
|
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 === 41
|
|
|| binaryOperator === 51
|
|
|| binaryOperator === 50
|
|
|| binaryOperator === 52;
|
|
}
|
|
function getLiteralKindOfBinaryPlusOperand(node) {
|
|
node = ts.skipPartiallyEmittedExpressions(node);
|
|
if (ts.isLiteralKind(node.kind)) {
|
|
return node.kind;
|
|
}
|
|
if (node.kind === 221 && node.operatorToken.kind === 39) {
|
|
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 parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
|
|
var skipped = ts.skipPartiallyEmittedExpressions(operand);
|
|
if (skipped.kind === 212) {
|
|
return operand;
|
|
}
|
|
return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
|
|
? factory.createParenthesizedExpression(operand)
|
|
: operand;
|
|
}
|
|
function parenthesizeLeftSideOfBinary(binaryOperator, leftSide) {
|
|
return parenthesizeBinaryOperand(binaryOperator, leftSide, true);
|
|
}
|
|
function parenthesizeRightSideOfBinary(binaryOperator, leftSide, rightSide) {
|
|
return parenthesizeBinaryOperand(binaryOperator, rightSide, false, leftSide);
|
|
}
|
|
function parenthesizeExpressionOfComputedPropertyName(expression) {
|
|
return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
|
|
}
|
|
function parenthesizeConditionOfConditionalExpression(condition) {
|
|
var conditionalPrecedence = ts.getOperatorPrecedence(222, 57);
|
|
var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
|
|
var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
|
|
if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1) {
|
|
return factory.createParenthesizedExpression(condition);
|
|
}
|
|
return condition;
|
|
}
|
|
function parenthesizeBranchOfConditionalExpression(branch) {
|
|
var emittedExpression = ts.skipPartiallyEmittedExpressions(branch);
|
|
return ts.isCommaSequence(emittedExpression)
|
|
? factory.createParenthesizedExpression(branch)
|
|
: branch;
|
|
}
|
|
function parenthesizeExpressionOfExportDefault(expression) {
|
|
var check = ts.skipPartiallyEmittedExpressions(expression);
|
|
var needsParens = ts.isCommaSequence(check);
|
|
if (!needsParens) {
|
|
switch (ts.getLeftmostExpression(check, false).kind) {
|
|
case 226:
|
|
case 213:
|
|
needsParens = true;
|
|
}
|
|
}
|
|
return needsParens ? factory.createParenthesizedExpression(expression) : expression;
|
|
}
|
|
function parenthesizeExpressionOfNew(expression) {
|
|
var leftmostExpr = ts.getLeftmostExpression(expression, true);
|
|
switch (leftmostExpr.kind) {
|
|
case 208:
|
|
return factory.createParenthesizedExpression(expression);
|
|
case 209:
|
|
return !leftmostExpr.arguments
|
|
? factory.createParenthesizedExpression(expression)
|
|
: expression;
|
|
}
|
|
return parenthesizeLeftSideOfAccess(expression);
|
|
}
|
|
function parenthesizeLeftSideOfAccess(expression, optionalChain) {
|
|
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
|
|
if (ts.isLeftHandSideExpression(emittedExpression)
|
|
&& (emittedExpression.kind !== 209 || emittedExpression.arguments)
|
|
&& (optionalChain || !ts.isOptionalChain(emittedExpression))) {
|
|
return expression;
|
|
}
|
|
return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
|
|
}
|
|
function parenthesizeOperandOfPostfixUnary(operand) {
|
|
return ts.isLeftHandSideExpression(operand) ? operand : ts.setTextRange(factory.createParenthesizedExpression(operand), operand);
|
|
}
|
|
function parenthesizeOperandOfPrefixUnary(operand) {
|
|
return ts.isUnaryExpression(operand) ? operand : ts.setTextRange(factory.createParenthesizedExpression(operand), operand);
|
|
}
|
|
function parenthesizeExpressionsOfCommaDelimitedList(elements) {
|
|
var result = ts.sameMap(elements, parenthesizeExpressionForDisallowedComma);
|
|
return ts.setTextRange(factory.createNodeArray(result, elements.hasTrailingComma), elements);
|
|
}
|
|
function parenthesizeExpressionForDisallowedComma(expression) {
|
|
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
|
|
var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
|
|
var commaPrecedence = ts.getOperatorPrecedence(221, 27);
|
|
return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
|
|
}
|
|
function parenthesizeExpressionOfExpressionStatement(expression) {
|
|
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
|
|
if (ts.isCallExpression(emittedExpression)) {
|
|
var callee = emittedExpression.expression;
|
|
var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
|
|
if (kind === 213 || kind === 214) {
|
|
var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
|
|
return factory.restoreOuterExpressions(expression, updated, 8);
|
|
}
|
|
}
|
|
var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, false).kind;
|
|
if (leftmostExpressionKind === 205 || leftmostExpressionKind === 213) {
|
|
return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
|
|
}
|
|
return expression;
|
|
}
|
|
function parenthesizeConciseBodyOfArrowFunction(body) {
|
|
if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, false).kind === 205)) {
|
|
return ts.setTextRange(factory.createParenthesizedExpression(body), body);
|
|
}
|
|
return body;
|
|
}
|
|
function parenthesizeCheckTypeOfConditionalType(checkType) {
|
|
switch (checkType.kind) {
|
|
case 179:
|
|
case 180:
|
|
case 189:
|
|
return factory.createParenthesizedType(checkType);
|
|
}
|
|
return checkType;
|
|
}
|
|
function parenthesizeExtendsTypeOfConditionalType(extendsType) {
|
|
switch (extendsType.kind) {
|
|
case 189:
|
|
return factory.createParenthesizedType(extendsType);
|
|
}
|
|
return extendsType;
|
|
}
|
|
function parenthesizeConstituentTypeOfUnionType(type) {
|
|
switch (type.kind) {
|
|
case 187:
|
|
case 188:
|
|
return factory.createParenthesizedType(type);
|
|
}
|
|
return parenthesizeCheckTypeOfConditionalType(type);
|
|
}
|
|
function parenthesizeConstituentTypesOfUnionType(members) {
|
|
return factory.createNodeArray(ts.sameMap(members, parenthesizeConstituentTypeOfUnionType));
|
|
}
|
|
function parenthesizeConstituentTypeOfIntersectionType(type) {
|
|
switch (type.kind) {
|
|
case 187:
|
|
case 188:
|
|
return factory.createParenthesizedType(type);
|
|
}
|
|
return parenthesizeConstituentTypeOfUnionType(type);
|
|
}
|
|
function parenthesizeConstituentTypesOfIntersectionType(members) {
|
|
return factory.createNodeArray(ts.sameMap(members, parenthesizeConstituentTypeOfIntersectionType));
|
|
}
|
|
function parenthesizeOperandOfTypeOperator(type) {
|
|
switch (type.kind) {
|
|
case 188:
|
|
return factory.createParenthesizedType(type);
|
|
}
|
|
return parenthesizeConstituentTypeOfIntersectionType(type);
|
|
}
|
|
function parenthesizeOperandOfReadonlyTypeOperator(type) {
|
|
switch (type.kind) {
|
|
case 193:
|
|
return factory.createParenthesizedType(type);
|
|
}
|
|
return parenthesizeOperandOfTypeOperator(type);
|
|
}
|
|
function parenthesizeNonArrayTypeOfPostfixType(type) {
|
|
switch (type.kind) {
|
|
case 190:
|
|
case 193:
|
|
case 181:
|
|
return factory.createParenthesizedType(type);
|
|
}
|
|
return parenthesizeOperandOfTypeOperator(type);
|
|
}
|
|
function parenthesizeElementTypesOfTupleType(types) {
|
|
return factory.createNodeArray(ts.sameMap(types, parenthesizeElementTypeOfTupleType));
|
|
}
|
|
function parenthesizeElementTypeOfTupleType(type) {
|
|
if (hasJSDocPostfixQuestion(type))
|
|
return factory.createParenthesizedType(type);
|
|
return type;
|
|
}
|
|
function hasJSDocPostfixQuestion(type) {
|
|
if (ts.isJSDocNullableType(type))
|
|
return type.postfix;
|
|
if (ts.isNamedTupleMember(type))
|
|
return hasJSDocPostfixQuestion(type.type);
|
|
if (ts.isFunctionTypeNode(type) || ts.isConstructorTypeNode(type) || ts.isTypeOperatorNode(type))
|
|
return hasJSDocPostfixQuestion(type.type);
|
|
if (ts.isConditionalTypeNode(type))
|
|
return hasJSDocPostfixQuestion(type.falseType);
|
|
if (ts.isUnionTypeNode(type))
|
|
return hasJSDocPostfixQuestion(ts.last(type.types));
|
|
if (ts.isIntersectionTypeNode(type))
|
|
return hasJSDocPostfixQuestion(ts.last(type.types));
|
|
if (ts.isInferTypeNode(type))
|
|
return !!type.typeParameter.constraint && hasJSDocPostfixQuestion(type.typeParameter.constraint);
|
|
return false;
|
|
}
|
|
function parenthesizeTypeOfOptionalType(type) {
|
|
if (hasJSDocPostfixQuestion(type))
|
|
return factory.createParenthesizedType(type);
|
|
return parenthesizeNonArrayTypeOfPostfixType(type);
|
|
}
|
|
function parenthesizeLeadingTypeArgument(node) {
|
|
return ts.isFunctionOrConstructorTypeNode(node) && node.typeParameters ? factory.createParenthesizedType(node) : node;
|
|
}
|
|
function parenthesizeOrdinalTypeArgument(node, i) {
|
|
return i === 0 ? parenthesizeLeadingTypeArgument(node) : node;
|
|
}
|
|
function parenthesizeTypeArguments(typeArguments) {
|
|
if (ts.some(typeArguments)) {
|
|
return factory.createNodeArray(ts.sameMap(typeArguments, parenthesizeOrdinalTypeArgument));
|
|
}
|
|
}
|
|
}
|
|
ts.createParenthesizerRules = createParenthesizerRules;
|
|
ts.nullParenthesizerRules = {
|
|
getParenthesizeLeftSideOfBinaryForOperator: function (_) { return ts.identity; },
|
|
getParenthesizeRightSideOfBinaryForOperator: function (_) { return ts.identity; },
|
|
parenthesizeLeftSideOfBinary: function (_binaryOperator, leftSide) { return leftSide; },
|
|
parenthesizeRightSideOfBinary: function (_binaryOperator, _leftSide, rightSide) { return rightSide; },
|
|
parenthesizeExpressionOfComputedPropertyName: ts.identity,
|
|
parenthesizeConditionOfConditionalExpression: ts.identity,
|
|
parenthesizeBranchOfConditionalExpression: ts.identity,
|
|
parenthesizeExpressionOfExportDefault: ts.identity,
|
|
parenthesizeExpressionOfNew: function (expression) { return ts.cast(expression, ts.isLeftHandSideExpression); },
|
|
parenthesizeLeftSideOfAccess: function (expression) { return ts.cast(expression, ts.isLeftHandSideExpression); },
|
|
parenthesizeOperandOfPostfixUnary: function (operand) { return ts.cast(operand, ts.isLeftHandSideExpression); },
|
|
parenthesizeOperandOfPrefixUnary: function (operand) { return ts.cast(operand, ts.isUnaryExpression); },
|
|
parenthesizeExpressionsOfCommaDelimitedList: function (nodes) { return ts.cast(nodes, ts.isNodeArray); },
|
|
parenthesizeExpressionForDisallowedComma: ts.identity,
|
|
parenthesizeExpressionOfExpressionStatement: ts.identity,
|
|
parenthesizeConciseBodyOfArrowFunction: ts.identity,
|
|
parenthesizeCheckTypeOfConditionalType: ts.identity,
|
|
parenthesizeExtendsTypeOfConditionalType: ts.identity,
|
|
parenthesizeConstituentTypesOfUnionType: function (nodes) { return ts.cast(nodes, ts.isNodeArray); },
|
|
parenthesizeConstituentTypeOfUnionType: ts.identity,
|
|
parenthesizeConstituentTypesOfIntersectionType: function (nodes) { return ts.cast(nodes, ts.isNodeArray); },
|
|
parenthesizeConstituentTypeOfIntersectionType: ts.identity,
|
|
parenthesizeOperandOfTypeOperator: ts.identity,
|
|
parenthesizeOperandOfReadonlyTypeOperator: ts.identity,
|
|
parenthesizeNonArrayTypeOfPostfixType: ts.identity,
|
|
parenthesizeElementTypesOfTupleType: function (nodes) { return ts.cast(nodes, ts.isNodeArray); },
|
|
parenthesizeElementTypeOfTupleType: ts.identity,
|
|
parenthesizeTypeOfOptionalType: ts.identity,
|
|
parenthesizeTypeArguments: function (nodes) { return nodes && ts.cast(nodes, ts.isNodeArray); },
|
|
parenthesizeLeadingTypeArgument: ts.identity,
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createNodeConverters(factory) {
|
|
return {
|
|
convertToFunctionBlock: convertToFunctionBlock,
|
|
convertToFunctionExpression: convertToFunctionExpression,
|
|
convertToArrayAssignmentElement: convertToArrayAssignmentElement,
|
|
convertToObjectAssignmentElement: convertToObjectAssignmentElement,
|
|
convertToAssignmentPattern: convertToAssignmentPattern,
|
|
convertToObjectAssignmentPattern: convertToObjectAssignmentPattern,
|
|
convertToArrayAssignmentPattern: convertToArrayAssignmentPattern,
|
|
convertToAssignmentElementTarget: convertToAssignmentElementTarget,
|
|
};
|
|
function convertToFunctionBlock(node, multiLine) {
|
|
if (ts.isBlock(node))
|
|
return node;
|
|
var returnStatement = factory.createReturnStatement(node);
|
|
ts.setTextRange(returnStatement, node);
|
|
var body = factory.createBlock([returnStatement], multiLine);
|
|
ts.setTextRange(body, node);
|
|
return body;
|
|
}
|
|
function convertToFunctionExpression(node) {
|
|
if (!node.body)
|
|
return ts.Debug.fail("Cannot convert a FunctionDeclaration without a body");
|
|
var updated = factory.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);
|
|
}
|
|
return updated;
|
|
}
|
|
function convertToArrayAssignmentElement(element) {
|
|
if (ts.isBindingElement(element)) {
|
|
if (element.dotDotDotToken) {
|
|
ts.Debug.assertNode(element.name, ts.isIdentifier);
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createSpreadElement(element.name), element), element);
|
|
}
|
|
var expression = convertToAssignmentElementTarget(element.name);
|
|
return element.initializer
|
|
? ts.setOriginalNode(ts.setTextRange(factory.createAssignment(expression, element.initializer), element), element)
|
|
: expression;
|
|
}
|
|
return ts.cast(element, ts.isExpression);
|
|
}
|
|
function convertToObjectAssignmentElement(element) {
|
|
if (ts.isBindingElement(element)) {
|
|
if (element.dotDotDotToken) {
|
|
ts.Debug.assertNode(element.name, ts.isIdentifier);
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createSpreadAssignment(element.name), element), element);
|
|
}
|
|
if (element.propertyName) {
|
|
var expression = convertToAssignmentElementTarget(element.name);
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createPropertyAssignment(element.propertyName, element.initializer ? factory.createAssignment(expression, element.initializer) : expression), element), element);
|
|
}
|
|
ts.Debug.assertNode(element.name, ts.isIdentifier);
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createShorthandPropertyAssignment(element.name, element.initializer), element), element);
|
|
}
|
|
return ts.cast(element, ts.isObjectLiteralElementLike);
|
|
}
|
|
function convertToAssignmentPattern(node) {
|
|
switch (node.kind) {
|
|
case 202:
|
|
case 204:
|
|
return convertToArrayAssignmentPattern(node);
|
|
case 201:
|
|
case 205:
|
|
return convertToObjectAssignmentPattern(node);
|
|
}
|
|
}
|
|
function convertToObjectAssignmentPattern(node) {
|
|
if (ts.isObjectBindingPattern(node)) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createObjectLiteralExpression(ts.map(node.elements, convertToObjectAssignmentElement)), node), node);
|
|
}
|
|
return ts.cast(node, ts.isObjectLiteralExpression);
|
|
}
|
|
function convertToArrayAssignmentPattern(node) {
|
|
if (ts.isArrayBindingPattern(node)) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createArrayLiteralExpression(ts.map(node.elements, convertToArrayAssignmentElement)), node), node);
|
|
}
|
|
return ts.cast(node, ts.isArrayLiteralExpression);
|
|
}
|
|
function convertToAssignmentElementTarget(node) {
|
|
if (ts.isBindingPattern(node)) {
|
|
return convertToAssignmentPattern(node);
|
|
}
|
|
return ts.cast(node, ts.isExpression);
|
|
}
|
|
}
|
|
ts.createNodeConverters = createNodeConverters;
|
|
ts.nullNodeConverters = {
|
|
convertToFunctionBlock: ts.notImplemented,
|
|
convertToFunctionExpression: ts.notImplemented,
|
|
convertToArrayAssignmentElement: ts.notImplemented,
|
|
convertToObjectAssignmentElement: ts.notImplemented,
|
|
convertToAssignmentPattern: ts.notImplemented,
|
|
convertToObjectAssignmentPattern: ts.notImplemented,
|
|
convertToArrayAssignmentPattern: ts.notImplemented,
|
|
convertToAssignmentElementTarget: ts.notImplemented,
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var nextAutoGenerateId = 0;
|
|
function createNodeFactory(flags, baseFactory) {
|
|
var update = flags & 8 ? updateWithoutOriginal : updateWithOriginal;
|
|
var parenthesizerRules = ts.memoize(function () { return flags & 1 ? ts.nullParenthesizerRules : ts.createParenthesizerRules(factory); });
|
|
var converters = ts.memoize(function () { return flags & 2 ? ts.nullNodeConverters : ts.createNodeConverters(factory); });
|
|
var getBinaryCreateFunction = ts.memoizeOne(function (operator) { return function (left, right) { return createBinaryExpression(left, operator, right); }; });
|
|
var getPrefixUnaryCreateFunction = ts.memoizeOne(function (operator) { return function (operand) { return createPrefixUnaryExpression(operator, operand); }; });
|
|
var getPostfixUnaryCreateFunction = ts.memoizeOne(function (operator) { return function (operand) { return createPostfixUnaryExpression(operand, operator); }; });
|
|
var getJSDocPrimaryTypeCreateFunction = ts.memoizeOne(function (kind) { return function () { return createJSDocPrimaryTypeWorker(kind); }; });
|
|
var getJSDocUnaryTypeCreateFunction = ts.memoizeOne(function (kind) { return function (type) { return createJSDocUnaryTypeWorker(kind, type); }; });
|
|
var getJSDocUnaryTypeUpdateFunction = ts.memoizeOne(function (kind) { return function (node, type) { return updateJSDocUnaryTypeWorker(kind, node, type); }; });
|
|
var getJSDocPrePostfixUnaryTypeCreateFunction = ts.memoizeOne(function (kind) { return function (type, postfix) { return createJSDocPrePostfixUnaryTypeWorker(kind, type, postfix); }; });
|
|
var getJSDocPrePostfixUnaryTypeUpdateFunction = ts.memoizeOne(function (kind) { return function (node, type) { return updateJSDocPrePostfixUnaryTypeWorker(kind, node, type); }; });
|
|
var getJSDocSimpleTagCreateFunction = ts.memoizeOne(function (kind) { return function (tagName, comment) { return createJSDocSimpleTagWorker(kind, tagName, comment); }; });
|
|
var getJSDocSimpleTagUpdateFunction = ts.memoizeOne(function (kind) { return function (node, tagName, comment) { return updateJSDocSimpleTagWorker(kind, node, tagName, comment); }; });
|
|
var getJSDocTypeLikeTagCreateFunction = ts.memoizeOne(function (kind) { return function (tagName, typeExpression, comment) { return createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment); }; });
|
|
var getJSDocTypeLikeTagUpdateFunction = ts.memoizeOne(function (kind) { return function (node, tagName, typeExpression, comment) { return updateJSDocTypeLikeTagWorker(kind, node, tagName, typeExpression, comment); }; });
|
|
var factory = {
|
|
get parenthesizer() { return parenthesizerRules(); },
|
|
get converters() { return converters(); },
|
|
baseFactory: baseFactory,
|
|
flags: flags,
|
|
createNodeArray: createNodeArray,
|
|
createNumericLiteral: createNumericLiteral,
|
|
createBigIntLiteral: createBigIntLiteral,
|
|
createStringLiteral: createStringLiteral,
|
|
createStringLiteralFromNode: createStringLiteralFromNode,
|
|
createRegularExpressionLiteral: createRegularExpressionLiteral,
|
|
createLiteralLikeNode: createLiteralLikeNode,
|
|
createIdentifier: createIdentifier,
|
|
updateIdentifier: updateIdentifier,
|
|
createTempVariable: createTempVariable,
|
|
createLoopVariable: createLoopVariable,
|
|
createUniqueName: createUniqueName,
|
|
getGeneratedNameForNode: getGeneratedNameForNode,
|
|
createPrivateIdentifier: createPrivateIdentifier,
|
|
createToken: createToken,
|
|
createSuper: createSuper,
|
|
createThis: createThis,
|
|
createNull: createNull,
|
|
createTrue: createTrue,
|
|
createFalse: createFalse,
|
|
createModifier: createModifier,
|
|
createModifiersFromModifierFlags: createModifiersFromModifierFlags,
|
|
createQualifiedName: createQualifiedName,
|
|
updateQualifiedName: updateQualifiedName,
|
|
createComputedPropertyName: createComputedPropertyName,
|
|
updateComputedPropertyName: updateComputedPropertyName,
|
|
createTypeParameterDeclaration: createTypeParameterDeclaration,
|
|
updateTypeParameterDeclaration: updateTypeParameterDeclaration,
|
|
createParameterDeclaration: createParameterDeclaration,
|
|
updateParameterDeclaration: updateParameterDeclaration,
|
|
createDecorator: createDecorator,
|
|
updateDecorator: updateDecorator,
|
|
createPropertySignature: createPropertySignature,
|
|
updatePropertySignature: updatePropertySignature,
|
|
createPropertyDeclaration: createPropertyDeclaration,
|
|
updatePropertyDeclaration: updatePropertyDeclaration,
|
|
createMethodSignature: createMethodSignature,
|
|
updateMethodSignature: updateMethodSignature,
|
|
createMethodDeclaration: createMethodDeclaration,
|
|
updateMethodDeclaration: updateMethodDeclaration,
|
|
createConstructorDeclaration: createConstructorDeclaration,
|
|
updateConstructorDeclaration: updateConstructorDeclaration,
|
|
createGetAccessorDeclaration: createGetAccessorDeclaration,
|
|
updateGetAccessorDeclaration: updateGetAccessorDeclaration,
|
|
createSetAccessorDeclaration: createSetAccessorDeclaration,
|
|
updateSetAccessorDeclaration: updateSetAccessorDeclaration,
|
|
createCallSignature: createCallSignature,
|
|
updateCallSignature: updateCallSignature,
|
|
createConstructSignature: createConstructSignature,
|
|
updateConstructSignature: updateConstructSignature,
|
|
createIndexSignature: createIndexSignature,
|
|
updateIndexSignature: updateIndexSignature,
|
|
createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
|
|
updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
|
|
createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
|
|
updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
|
|
createKeywordTypeNode: createKeywordTypeNode,
|
|
createTypePredicateNode: createTypePredicateNode,
|
|
updateTypePredicateNode: updateTypePredicateNode,
|
|
createTypeReferenceNode: createTypeReferenceNode,
|
|
updateTypeReferenceNode: updateTypeReferenceNode,
|
|
createFunctionTypeNode: createFunctionTypeNode,
|
|
updateFunctionTypeNode: updateFunctionTypeNode,
|
|
createConstructorTypeNode: createConstructorTypeNode,
|
|
updateConstructorTypeNode: updateConstructorTypeNode,
|
|
createTypeQueryNode: createTypeQueryNode,
|
|
updateTypeQueryNode: updateTypeQueryNode,
|
|
createTypeLiteralNode: createTypeLiteralNode,
|
|
updateTypeLiteralNode: updateTypeLiteralNode,
|
|
createArrayTypeNode: createArrayTypeNode,
|
|
updateArrayTypeNode: updateArrayTypeNode,
|
|
createTupleTypeNode: createTupleTypeNode,
|
|
updateTupleTypeNode: updateTupleTypeNode,
|
|
createNamedTupleMember: createNamedTupleMember,
|
|
updateNamedTupleMember: updateNamedTupleMember,
|
|
createOptionalTypeNode: createOptionalTypeNode,
|
|
updateOptionalTypeNode: updateOptionalTypeNode,
|
|
createRestTypeNode: createRestTypeNode,
|
|
updateRestTypeNode: updateRestTypeNode,
|
|
createUnionTypeNode: createUnionTypeNode,
|
|
updateUnionTypeNode: updateUnionTypeNode,
|
|
createIntersectionTypeNode: createIntersectionTypeNode,
|
|
updateIntersectionTypeNode: updateIntersectionTypeNode,
|
|
createConditionalTypeNode: createConditionalTypeNode,
|
|
updateConditionalTypeNode: updateConditionalTypeNode,
|
|
createInferTypeNode: createInferTypeNode,
|
|
updateInferTypeNode: updateInferTypeNode,
|
|
createImportTypeNode: createImportTypeNode,
|
|
updateImportTypeNode: updateImportTypeNode,
|
|
createParenthesizedType: createParenthesizedType,
|
|
updateParenthesizedType: updateParenthesizedType,
|
|
createThisTypeNode: createThisTypeNode,
|
|
createTypeOperatorNode: createTypeOperatorNode,
|
|
updateTypeOperatorNode: updateTypeOperatorNode,
|
|
createIndexedAccessTypeNode: createIndexedAccessTypeNode,
|
|
updateIndexedAccessTypeNode: updateIndexedAccessTypeNode,
|
|
createMappedTypeNode: createMappedTypeNode,
|
|
updateMappedTypeNode: updateMappedTypeNode,
|
|
createLiteralTypeNode: createLiteralTypeNode,
|
|
updateLiteralTypeNode: updateLiteralTypeNode,
|
|
createTemplateLiteralType: createTemplateLiteralType,
|
|
updateTemplateLiteralType: updateTemplateLiteralType,
|
|
createObjectBindingPattern: createObjectBindingPattern,
|
|
updateObjectBindingPattern: updateObjectBindingPattern,
|
|
createArrayBindingPattern: createArrayBindingPattern,
|
|
updateArrayBindingPattern: updateArrayBindingPattern,
|
|
createBindingElement: createBindingElement,
|
|
updateBindingElement: updateBindingElement,
|
|
createArrayLiteralExpression: createArrayLiteralExpression,
|
|
updateArrayLiteralExpression: updateArrayLiteralExpression,
|
|
createObjectLiteralExpression: createObjectLiteralExpression,
|
|
updateObjectLiteralExpression: updateObjectLiteralExpression,
|
|
createPropertyAccessExpression: flags & 4 ?
|
|
function (expression, name) { return ts.setEmitFlags(createPropertyAccessExpression(expression, name), 131072); } :
|
|
createPropertyAccessExpression,
|
|
updatePropertyAccessExpression: updatePropertyAccessExpression,
|
|
createPropertyAccessChain: flags & 4 ?
|
|
function (expression, questionDotToken, name) { return ts.setEmitFlags(createPropertyAccessChain(expression, questionDotToken, name), 131072); } :
|
|
createPropertyAccessChain,
|
|
updatePropertyAccessChain: updatePropertyAccessChain,
|
|
createElementAccessExpression: createElementAccessExpression,
|
|
updateElementAccessExpression: updateElementAccessExpression,
|
|
createElementAccessChain: createElementAccessChain,
|
|
updateElementAccessChain: updateElementAccessChain,
|
|
createCallExpression: createCallExpression,
|
|
updateCallExpression: updateCallExpression,
|
|
createCallChain: createCallChain,
|
|
updateCallChain: updateCallChain,
|
|
createNewExpression: createNewExpression,
|
|
updateNewExpression: updateNewExpression,
|
|
createTaggedTemplateExpression: createTaggedTemplateExpression,
|
|
updateTaggedTemplateExpression: updateTaggedTemplateExpression,
|
|
createTypeAssertion: createTypeAssertion,
|
|
updateTypeAssertion: updateTypeAssertion,
|
|
createParenthesizedExpression: createParenthesizedExpression,
|
|
updateParenthesizedExpression: updateParenthesizedExpression,
|
|
createFunctionExpression: createFunctionExpression,
|
|
updateFunctionExpression: updateFunctionExpression,
|
|
createArrowFunction: createArrowFunction,
|
|
updateArrowFunction: updateArrowFunction,
|
|
createDeleteExpression: createDeleteExpression,
|
|
updateDeleteExpression: updateDeleteExpression,
|
|
createTypeOfExpression: createTypeOfExpression,
|
|
updateTypeOfExpression: updateTypeOfExpression,
|
|
createVoidExpression: createVoidExpression,
|
|
updateVoidExpression: updateVoidExpression,
|
|
createAwaitExpression: createAwaitExpression,
|
|
updateAwaitExpression: updateAwaitExpression,
|
|
createPrefixUnaryExpression: createPrefixUnaryExpression,
|
|
updatePrefixUnaryExpression: updatePrefixUnaryExpression,
|
|
createPostfixUnaryExpression: createPostfixUnaryExpression,
|
|
updatePostfixUnaryExpression: updatePostfixUnaryExpression,
|
|
createBinaryExpression: createBinaryExpression,
|
|
updateBinaryExpression: updateBinaryExpression,
|
|
createConditionalExpression: createConditionalExpression,
|
|
updateConditionalExpression: updateConditionalExpression,
|
|
createTemplateExpression: createTemplateExpression,
|
|
updateTemplateExpression: updateTemplateExpression,
|
|
createTemplateHead: createTemplateHead,
|
|
createTemplateMiddle: createTemplateMiddle,
|
|
createTemplateTail: createTemplateTail,
|
|
createNoSubstitutionTemplateLiteral: createNoSubstitutionTemplateLiteral,
|
|
createTemplateLiteralLikeNode: createTemplateLiteralLikeNode,
|
|
createYieldExpression: createYieldExpression,
|
|
updateYieldExpression: updateYieldExpression,
|
|
createSpreadElement: createSpreadElement,
|
|
updateSpreadElement: updateSpreadElement,
|
|
createClassExpression: createClassExpression,
|
|
updateClassExpression: updateClassExpression,
|
|
createOmittedExpression: createOmittedExpression,
|
|
createExpressionWithTypeArguments: createExpressionWithTypeArguments,
|
|
updateExpressionWithTypeArguments: updateExpressionWithTypeArguments,
|
|
createAsExpression: createAsExpression,
|
|
updateAsExpression: updateAsExpression,
|
|
createNonNullExpression: createNonNullExpression,
|
|
updateNonNullExpression: updateNonNullExpression,
|
|
createNonNullChain: createNonNullChain,
|
|
updateNonNullChain: updateNonNullChain,
|
|
createMetaProperty: createMetaProperty,
|
|
updateMetaProperty: updateMetaProperty,
|
|
createTemplateSpan: createTemplateSpan,
|
|
updateTemplateSpan: updateTemplateSpan,
|
|
createSemicolonClassElement: createSemicolonClassElement,
|
|
createBlock: createBlock,
|
|
updateBlock: updateBlock,
|
|
createVariableStatement: createVariableStatement,
|
|
updateVariableStatement: updateVariableStatement,
|
|
createEmptyStatement: createEmptyStatement,
|
|
createExpressionStatement: createExpressionStatement,
|
|
updateExpressionStatement: updateExpressionStatement,
|
|
createIfStatement: createIfStatement,
|
|
updateIfStatement: updateIfStatement,
|
|
createDoStatement: createDoStatement,
|
|
updateDoStatement: updateDoStatement,
|
|
createWhileStatement: createWhileStatement,
|
|
updateWhileStatement: updateWhileStatement,
|
|
createForStatement: createForStatement,
|
|
updateForStatement: updateForStatement,
|
|
createForInStatement: createForInStatement,
|
|
updateForInStatement: updateForInStatement,
|
|
createForOfStatement: createForOfStatement,
|
|
updateForOfStatement: updateForOfStatement,
|
|
createContinueStatement: createContinueStatement,
|
|
updateContinueStatement: updateContinueStatement,
|
|
createBreakStatement: createBreakStatement,
|
|
updateBreakStatement: updateBreakStatement,
|
|
createReturnStatement: createReturnStatement,
|
|
updateReturnStatement: updateReturnStatement,
|
|
createWithStatement: createWithStatement,
|
|
updateWithStatement: updateWithStatement,
|
|
createSwitchStatement: createSwitchStatement,
|
|
updateSwitchStatement: updateSwitchStatement,
|
|
createLabeledStatement: createLabeledStatement,
|
|
updateLabeledStatement: updateLabeledStatement,
|
|
createThrowStatement: createThrowStatement,
|
|
updateThrowStatement: updateThrowStatement,
|
|
createTryStatement: createTryStatement,
|
|
updateTryStatement: updateTryStatement,
|
|
createDebuggerStatement: createDebuggerStatement,
|
|
createVariableDeclaration: createVariableDeclaration,
|
|
updateVariableDeclaration: updateVariableDeclaration,
|
|
createVariableDeclarationList: createVariableDeclarationList,
|
|
updateVariableDeclarationList: updateVariableDeclarationList,
|
|
createFunctionDeclaration: createFunctionDeclaration,
|
|
updateFunctionDeclaration: updateFunctionDeclaration,
|
|
createClassDeclaration: createClassDeclaration,
|
|
updateClassDeclaration: updateClassDeclaration,
|
|
createInterfaceDeclaration: createInterfaceDeclaration,
|
|
updateInterfaceDeclaration: updateInterfaceDeclaration,
|
|
createTypeAliasDeclaration: createTypeAliasDeclaration,
|
|
updateTypeAliasDeclaration: updateTypeAliasDeclaration,
|
|
createEnumDeclaration: createEnumDeclaration,
|
|
updateEnumDeclaration: updateEnumDeclaration,
|
|
createModuleDeclaration: createModuleDeclaration,
|
|
updateModuleDeclaration: updateModuleDeclaration,
|
|
createModuleBlock: createModuleBlock,
|
|
updateModuleBlock: updateModuleBlock,
|
|
createCaseBlock: createCaseBlock,
|
|
updateCaseBlock: updateCaseBlock,
|
|
createNamespaceExportDeclaration: createNamespaceExportDeclaration,
|
|
updateNamespaceExportDeclaration: updateNamespaceExportDeclaration,
|
|
createImportEqualsDeclaration: createImportEqualsDeclaration,
|
|
updateImportEqualsDeclaration: updateImportEqualsDeclaration,
|
|
createImportDeclaration: createImportDeclaration,
|
|
updateImportDeclaration: updateImportDeclaration,
|
|
createImportClause: createImportClause,
|
|
updateImportClause: updateImportClause,
|
|
createAssertClause: createAssertClause,
|
|
updateAssertClause: updateAssertClause,
|
|
createAssertEntry: createAssertEntry,
|
|
updateAssertEntry: updateAssertEntry,
|
|
createImportTypeAssertionContainer: createImportTypeAssertionContainer,
|
|
updateImportTypeAssertionContainer: updateImportTypeAssertionContainer,
|
|
createNamespaceImport: createNamespaceImport,
|
|
updateNamespaceImport: updateNamespaceImport,
|
|
createNamespaceExport: createNamespaceExport,
|
|
updateNamespaceExport: updateNamespaceExport,
|
|
createNamedImports: createNamedImports,
|
|
updateNamedImports: updateNamedImports,
|
|
createImportSpecifier: createImportSpecifier,
|
|
updateImportSpecifier: updateImportSpecifier,
|
|
createExportAssignment: createExportAssignment,
|
|
updateExportAssignment: updateExportAssignment,
|
|
createExportDeclaration: createExportDeclaration,
|
|
updateExportDeclaration: updateExportDeclaration,
|
|
createNamedExports: createNamedExports,
|
|
updateNamedExports: updateNamedExports,
|
|
createExportSpecifier: createExportSpecifier,
|
|
updateExportSpecifier: updateExportSpecifier,
|
|
createMissingDeclaration: createMissingDeclaration,
|
|
createExternalModuleReference: createExternalModuleReference,
|
|
updateExternalModuleReference: updateExternalModuleReference,
|
|
get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(312); },
|
|
get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(313); },
|
|
get createJSDocNonNullableType() { return getJSDocPrePostfixUnaryTypeCreateFunction(315); },
|
|
get updateJSDocNonNullableType() { return getJSDocPrePostfixUnaryTypeUpdateFunction(315); },
|
|
get createJSDocNullableType() { return getJSDocPrePostfixUnaryTypeCreateFunction(314); },
|
|
get updateJSDocNullableType() { return getJSDocPrePostfixUnaryTypeUpdateFunction(314); },
|
|
get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(316); },
|
|
get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(316); },
|
|
get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(318); },
|
|
get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(318); },
|
|
get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(319); },
|
|
get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(319); },
|
|
createJSDocFunctionType: createJSDocFunctionType,
|
|
updateJSDocFunctionType: updateJSDocFunctionType,
|
|
createJSDocTypeLiteral: createJSDocTypeLiteral,
|
|
updateJSDocTypeLiteral: updateJSDocTypeLiteral,
|
|
createJSDocTypeExpression: createJSDocTypeExpression,
|
|
updateJSDocTypeExpression: updateJSDocTypeExpression,
|
|
createJSDocSignature: createJSDocSignature,
|
|
updateJSDocSignature: updateJSDocSignature,
|
|
createJSDocTemplateTag: createJSDocTemplateTag,
|
|
updateJSDocTemplateTag: updateJSDocTemplateTag,
|
|
createJSDocTypedefTag: createJSDocTypedefTag,
|
|
updateJSDocTypedefTag: updateJSDocTypedefTag,
|
|
createJSDocParameterTag: createJSDocParameterTag,
|
|
updateJSDocParameterTag: updateJSDocParameterTag,
|
|
createJSDocPropertyTag: createJSDocPropertyTag,
|
|
updateJSDocPropertyTag: updateJSDocPropertyTag,
|
|
createJSDocCallbackTag: createJSDocCallbackTag,
|
|
updateJSDocCallbackTag: updateJSDocCallbackTag,
|
|
createJSDocAugmentsTag: createJSDocAugmentsTag,
|
|
updateJSDocAugmentsTag: updateJSDocAugmentsTag,
|
|
createJSDocImplementsTag: createJSDocImplementsTag,
|
|
updateJSDocImplementsTag: updateJSDocImplementsTag,
|
|
createJSDocSeeTag: createJSDocSeeTag,
|
|
updateJSDocSeeTag: updateJSDocSeeTag,
|
|
createJSDocNameReference: createJSDocNameReference,
|
|
updateJSDocNameReference: updateJSDocNameReference,
|
|
createJSDocMemberName: createJSDocMemberName,
|
|
updateJSDocMemberName: updateJSDocMemberName,
|
|
createJSDocLink: createJSDocLink,
|
|
updateJSDocLink: updateJSDocLink,
|
|
createJSDocLinkCode: createJSDocLinkCode,
|
|
updateJSDocLinkCode: updateJSDocLinkCode,
|
|
createJSDocLinkPlain: createJSDocLinkPlain,
|
|
updateJSDocLinkPlain: updateJSDocLinkPlain,
|
|
get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(343); },
|
|
get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(343); },
|
|
get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(341); },
|
|
get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(341); },
|
|
get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(342); },
|
|
get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(342); },
|
|
get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(339); },
|
|
get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(339); },
|
|
get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(330); },
|
|
get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(330); },
|
|
get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(332); },
|
|
get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(332); },
|
|
get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(333); },
|
|
get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(333); },
|
|
get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(334); },
|
|
get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(334); },
|
|
get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(335); },
|
|
get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(335); },
|
|
get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(336); },
|
|
get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(336); },
|
|
get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(337); },
|
|
get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(337); },
|
|
get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(331); },
|
|
get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(331); },
|
|
createJSDocUnknownTag: createJSDocUnknownTag,
|
|
updateJSDocUnknownTag: updateJSDocUnknownTag,
|
|
createJSDocText: createJSDocText,
|
|
updateJSDocText: updateJSDocText,
|
|
createJSDocComment: createJSDocComment,
|
|
updateJSDocComment: updateJSDocComment,
|
|
createJsxElement: createJsxElement,
|
|
updateJsxElement: updateJsxElement,
|
|
createJsxSelfClosingElement: createJsxSelfClosingElement,
|
|
updateJsxSelfClosingElement: updateJsxSelfClosingElement,
|
|
createJsxOpeningElement: createJsxOpeningElement,
|
|
updateJsxOpeningElement: updateJsxOpeningElement,
|
|
createJsxClosingElement: createJsxClosingElement,
|
|
updateJsxClosingElement: updateJsxClosingElement,
|
|
createJsxFragment: createJsxFragment,
|
|
createJsxText: createJsxText,
|
|
updateJsxText: updateJsxText,
|
|
createJsxOpeningFragment: createJsxOpeningFragment,
|
|
createJsxJsxClosingFragment: createJsxJsxClosingFragment,
|
|
updateJsxFragment: updateJsxFragment,
|
|
createJsxAttribute: createJsxAttribute,
|
|
updateJsxAttribute: updateJsxAttribute,
|
|
createJsxAttributes: createJsxAttributes,
|
|
updateJsxAttributes: updateJsxAttributes,
|
|
createJsxSpreadAttribute: createJsxSpreadAttribute,
|
|
updateJsxSpreadAttribute: updateJsxSpreadAttribute,
|
|
createJsxExpression: createJsxExpression,
|
|
updateJsxExpression: updateJsxExpression,
|
|
createCaseClause: createCaseClause,
|
|
updateCaseClause: updateCaseClause,
|
|
createDefaultClause: createDefaultClause,
|
|
updateDefaultClause: updateDefaultClause,
|
|
createHeritageClause: createHeritageClause,
|
|
updateHeritageClause: updateHeritageClause,
|
|
createCatchClause: createCatchClause,
|
|
updateCatchClause: updateCatchClause,
|
|
createPropertyAssignment: createPropertyAssignment,
|
|
updatePropertyAssignment: updatePropertyAssignment,
|
|
createShorthandPropertyAssignment: createShorthandPropertyAssignment,
|
|
updateShorthandPropertyAssignment: updateShorthandPropertyAssignment,
|
|
createSpreadAssignment: createSpreadAssignment,
|
|
updateSpreadAssignment: updateSpreadAssignment,
|
|
createEnumMember: createEnumMember,
|
|
updateEnumMember: updateEnumMember,
|
|
createSourceFile: createSourceFile,
|
|
updateSourceFile: updateSourceFile,
|
|
createBundle: createBundle,
|
|
updateBundle: updateBundle,
|
|
createUnparsedSource: createUnparsedSource,
|
|
createUnparsedPrologue: createUnparsedPrologue,
|
|
createUnparsedPrepend: createUnparsedPrepend,
|
|
createUnparsedTextLike: createUnparsedTextLike,
|
|
createUnparsedSyntheticReference: createUnparsedSyntheticReference,
|
|
createInputFiles: createInputFiles,
|
|
createSyntheticExpression: createSyntheticExpression,
|
|
createSyntaxList: createSyntaxList,
|
|
createNotEmittedStatement: createNotEmittedStatement,
|
|
createPartiallyEmittedExpression: createPartiallyEmittedExpression,
|
|
updatePartiallyEmittedExpression: updatePartiallyEmittedExpression,
|
|
createCommaListExpression: createCommaListExpression,
|
|
updateCommaListExpression: updateCommaListExpression,
|
|
createEndOfDeclarationMarker: createEndOfDeclarationMarker,
|
|
createMergeDeclarationMarker: createMergeDeclarationMarker,
|
|
createSyntheticReferenceExpression: createSyntheticReferenceExpression,
|
|
updateSyntheticReferenceExpression: updateSyntheticReferenceExpression,
|
|
cloneNode: cloneNode,
|
|
get createComma() { return getBinaryCreateFunction(27); },
|
|
get createAssignment() { return getBinaryCreateFunction(63); },
|
|
get createLogicalOr() { return getBinaryCreateFunction(56); },
|
|
get createLogicalAnd() { return getBinaryCreateFunction(55); },
|
|
get createBitwiseOr() { return getBinaryCreateFunction(51); },
|
|
get createBitwiseXor() { return getBinaryCreateFunction(52); },
|
|
get createBitwiseAnd() { return getBinaryCreateFunction(50); },
|
|
get createStrictEquality() { return getBinaryCreateFunction(36); },
|
|
get createStrictInequality() { return getBinaryCreateFunction(37); },
|
|
get createEquality() { return getBinaryCreateFunction(34); },
|
|
get createInequality() { return getBinaryCreateFunction(35); },
|
|
get createLessThan() { return getBinaryCreateFunction(29); },
|
|
get createLessThanEquals() { return getBinaryCreateFunction(32); },
|
|
get createGreaterThan() { return getBinaryCreateFunction(31); },
|
|
get createGreaterThanEquals() { return getBinaryCreateFunction(33); },
|
|
get createLeftShift() { return getBinaryCreateFunction(47); },
|
|
get createRightShift() { return getBinaryCreateFunction(48); },
|
|
get createUnsignedRightShift() { return getBinaryCreateFunction(49); },
|
|
get createAdd() { return getBinaryCreateFunction(39); },
|
|
get createSubtract() { return getBinaryCreateFunction(40); },
|
|
get createMultiply() { return getBinaryCreateFunction(41); },
|
|
get createDivide() { return getBinaryCreateFunction(43); },
|
|
get createModulo() { return getBinaryCreateFunction(44); },
|
|
get createExponent() { return getBinaryCreateFunction(42); },
|
|
get createPrefixPlus() { return getPrefixUnaryCreateFunction(39); },
|
|
get createPrefixMinus() { return getPrefixUnaryCreateFunction(40); },
|
|
get createPrefixIncrement() { return getPrefixUnaryCreateFunction(45); },
|
|
get createPrefixDecrement() { return getPrefixUnaryCreateFunction(46); },
|
|
get createBitwiseNot() { return getPrefixUnaryCreateFunction(54); },
|
|
get createLogicalNot() { return getPrefixUnaryCreateFunction(53); },
|
|
get createPostfixIncrement() { return getPostfixUnaryCreateFunction(45); },
|
|
get createPostfixDecrement() { return getPostfixUnaryCreateFunction(46); },
|
|
createImmediatelyInvokedFunctionExpression: createImmediatelyInvokedFunctionExpression,
|
|
createImmediatelyInvokedArrowFunction: createImmediatelyInvokedArrowFunction,
|
|
createVoidZero: createVoidZero,
|
|
createExportDefault: createExportDefault,
|
|
createExternalModuleExport: createExternalModuleExport,
|
|
createTypeCheck: createTypeCheck,
|
|
createMethodCall: createMethodCall,
|
|
createGlobalMethodCall: createGlobalMethodCall,
|
|
createFunctionBindCall: createFunctionBindCall,
|
|
createFunctionCallCall: createFunctionCallCall,
|
|
createFunctionApplyCall: createFunctionApplyCall,
|
|
createArraySliceCall: createArraySliceCall,
|
|
createArrayConcatCall: createArrayConcatCall,
|
|
createObjectDefinePropertyCall: createObjectDefinePropertyCall,
|
|
createReflectGetCall: createReflectGetCall,
|
|
createReflectSetCall: createReflectSetCall,
|
|
createPropertyDescriptor: createPropertyDescriptor,
|
|
createCallBinding: createCallBinding,
|
|
createAssignmentTargetWrapper: createAssignmentTargetWrapper,
|
|
inlineExpressions: inlineExpressions,
|
|
getInternalName: getInternalName,
|
|
getLocalName: getLocalName,
|
|
getExportName: getExportName,
|
|
getDeclarationName: getDeclarationName,
|
|
getNamespaceMemberName: getNamespaceMemberName,
|
|
getExternalModuleOrNamespaceExportName: getExternalModuleOrNamespaceExportName,
|
|
restoreOuterExpressions: restoreOuterExpressions,
|
|
restoreEnclosingLabel: restoreEnclosingLabel,
|
|
createUseStrictPrologue: createUseStrictPrologue,
|
|
copyPrologue: copyPrologue,
|
|
copyStandardPrologue: copyStandardPrologue,
|
|
copyCustomPrologue: copyCustomPrologue,
|
|
ensureUseStrict: ensureUseStrict,
|
|
liftToBlock: liftToBlock,
|
|
mergeLexicalEnvironment: mergeLexicalEnvironment,
|
|
updateModifiers: updateModifiers,
|
|
};
|
|
return factory;
|
|
function createNodeArray(elements, hasTrailingComma) {
|
|
if (elements === undefined || elements === ts.emptyArray) {
|
|
elements = [];
|
|
}
|
|
else if (ts.isNodeArray(elements)) {
|
|
if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
|
|
if (elements.transformFlags === undefined) {
|
|
aggregateChildrenFlags(elements);
|
|
}
|
|
ts.Debug.attachNodeArrayDebugInfo(elements);
|
|
return elements;
|
|
}
|
|
var array_8 = elements.slice();
|
|
array_8.pos = elements.pos;
|
|
array_8.end = elements.end;
|
|
array_8.hasTrailingComma = hasTrailingComma;
|
|
array_8.transformFlags = elements.transformFlags;
|
|
ts.Debug.attachNodeArrayDebugInfo(array_8);
|
|
return array_8;
|
|
}
|
|
var length = elements.length;
|
|
var array = (length >= 1 && length <= 4 ? elements.slice() : elements);
|
|
ts.setTextRangePosEnd(array, -1, -1);
|
|
array.hasTrailingComma = !!hasTrailingComma;
|
|
aggregateChildrenFlags(array);
|
|
ts.Debug.attachNodeArrayDebugInfo(array);
|
|
return array;
|
|
}
|
|
function createBaseNode(kind) {
|
|
return baseFactory.createBaseNode(kind);
|
|
}
|
|
function createBaseDeclaration(kind) {
|
|
var node = createBaseNode(kind);
|
|
node.symbol = undefined;
|
|
node.localSymbol = undefined;
|
|
node.locals = undefined;
|
|
node.nextContainer = undefined;
|
|
return node;
|
|
}
|
|
function createBaseNamedDeclaration(kind, modifiers, name) {
|
|
var node = createBaseDeclaration(kind);
|
|
name = asName(name);
|
|
node.name = name;
|
|
if (ts.canHaveModifiers(node)) {
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.transformFlags |= propagateChildrenFlags(node.modifiers);
|
|
}
|
|
if (name) {
|
|
switch (node.kind) {
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 167:
|
|
case 296:
|
|
if (ts.isIdentifier(name)) {
|
|
node.transformFlags |= propagateIdentifierNameFlags(name);
|
|
break;
|
|
}
|
|
default:
|
|
node.transformFlags |= propagateChildFlags(name);
|
|
break;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function createBaseGenericNamedDeclaration(kind, modifiers, name, typeParameters) {
|
|
var node = createBaseNamedDeclaration(kind, modifiers, name);
|
|
node.typeParameters = asNodeArray(typeParameters);
|
|
node.transformFlags |= propagateChildrenFlags(node.typeParameters);
|
|
if (typeParameters)
|
|
node.transformFlags |= 1;
|
|
return node;
|
|
}
|
|
function createBaseSignatureDeclaration(kind, modifiers, name, typeParameters, parameters, type) {
|
|
var node = createBaseGenericNamedDeclaration(kind, modifiers, name, typeParameters);
|
|
node.parameters = createNodeArray(parameters);
|
|
node.type = type;
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.parameters) |
|
|
propagateChildFlags(node.type);
|
|
if (type)
|
|
node.transformFlags |= 1;
|
|
node.typeArguments = undefined;
|
|
return node;
|
|
}
|
|
function finishUpdateBaseSignatureDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.typeArguments = original.typeArguments;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createBaseFunctionLikeDeclaration(kind, modifiers, name, typeParameters, parameters, type, body) {
|
|
var node = createBaseSignatureDeclaration(kind, modifiers, name, typeParameters, parameters, type);
|
|
node.body = body;
|
|
node.transformFlags |= propagateChildFlags(node.body) & ~67108864;
|
|
if (!body)
|
|
node.transformFlags |= 1;
|
|
return node;
|
|
}
|
|
function createBaseInterfaceOrClassLikeDeclaration(kind, modifiers, name, typeParameters, heritageClauses) {
|
|
var node = createBaseGenericNamedDeclaration(kind, modifiers, name, typeParameters);
|
|
node.heritageClauses = asNodeArray(heritageClauses);
|
|
node.transformFlags |= propagateChildrenFlags(node.heritageClauses);
|
|
return node;
|
|
}
|
|
function createBaseClassLikeDeclaration(kind, modifiers, name, typeParameters, heritageClauses, members) {
|
|
var node = createBaseInterfaceOrClassLikeDeclaration(kind, modifiers, name, typeParameters, heritageClauses);
|
|
node.members = createNodeArray(members);
|
|
node.transformFlags |= propagateChildrenFlags(node.members);
|
|
return node;
|
|
}
|
|
function createBaseBindingLikeDeclaration(kind, modifiers, name, initializer) {
|
|
var node = createBaseNamedDeclaration(kind, modifiers, name);
|
|
node.initializer = initializer;
|
|
node.transformFlags |= propagateChildFlags(node.initializer);
|
|
return node;
|
|
}
|
|
function createBaseVariableLikeDeclaration(kind, modifiers, name, type, initializer) {
|
|
var node = createBaseBindingLikeDeclaration(kind, modifiers, name, initializer);
|
|
node.type = type;
|
|
node.transformFlags |= propagateChildFlags(type);
|
|
if (type)
|
|
node.transformFlags |= 1;
|
|
return node;
|
|
}
|
|
function createBaseLiteral(kind, text) {
|
|
var node = createBaseToken(kind);
|
|
node.text = text;
|
|
return node;
|
|
}
|
|
function createNumericLiteral(value, numericLiteralFlags) {
|
|
if (numericLiteralFlags === void 0) { numericLiteralFlags = 0; }
|
|
var node = createBaseLiteral(8, typeof value === "number" ? value + "" : value);
|
|
node.numericLiteralFlags = numericLiteralFlags;
|
|
if (numericLiteralFlags & 384)
|
|
node.transformFlags |= 1024;
|
|
return node;
|
|
}
|
|
function createBigIntLiteral(value) {
|
|
var node = createBaseLiteral(9, typeof value === "string" ? value : ts.pseudoBigIntToString(value) + "n");
|
|
node.transformFlags |= 4;
|
|
return node;
|
|
}
|
|
function createBaseStringLiteral(text, isSingleQuote) {
|
|
var node = createBaseLiteral(10, text);
|
|
node.singleQuote = isSingleQuote;
|
|
return node;
|
|
}
|
|
function createStringLiteral(text, isSingleQuote, hasExtendedUnicodeEscape) {
|
|
var node = createBaseStringLiteral(text, isSingleQuote);
|
|
node.hasExtendedUnicodeEscape = hasExtendedUnicodeEscape;
|
|
if (hasExtendedUnicodeEscape)
|
|
node.transformFlags |= 1024;
|
|
return node;
|
|
}
|
|
function createStringLiteralFromNode(sourceNode) {
|
|
var node = createBaseStringLiteral(ts.getTextOfIdentifierOrLiteral(sourceNode), undefined);
|
|
node.textSourceNode = sourceNode;
|
|
return node;
|
|
}
|
|
function createRegularExpressionLiteral(text) {
|
|
var node = createBaseLiteral(13, text);
|
|
return node;
|
|
}
|
|
function createLiteralLikeNode(kind, text) {
|
|
switch (kind) {
|
|
case 8: return createNumericLiteral(text, 0);
|
|
case 9: return createBigIntLiteral(text);
|
|
case 10: return createStringLiteral(text, undefined);
|
|
case 11: return createJsxText(text, false);
|
|
case 12: return createJsxText(text, true);
|
|
case 13: return createRegularExpressionLiteral(text);
|
|
case 14: return createTemplateLiteralLikeNode(kind, text, undefined, 0);
|
|
}
|
|
}
|
|
function createBaseIdentifier(text, originalKeywordKind) {
|
|
if (originalKeywordKind === undefined && text) {
|
|
originalKeywordKind = ts.stringToToken(text);
|
|
}
|
|
if (originalKeywordKind === 79) {
|
|
originalKeywordKind = undefined;
|
|
}
|
|
var node = baseFactory.createBaseIdentifierNode(79);
|
|
node.originalKeywordKind = originalKeywordKind;
|
|
node.escapedText = ts.escapeLeadingUnderscores(text);
|
|
return node;
|
|
}
|
|
function createBaseGeneratedIdentifier(text, autoGenerateFlags) {
|
|
var node = createBaseIdentifier(text, undefined);
|
|
node.autoGenerateFlags = autoGenerateFlags;
|
|
node.autoGenerateId = nextAutoGenerateId;
|
|
nextAutoGenerateId++;
|
|
return node;
|
|
}
|
|
function createIdentifier(text, typeArguments, originalKeywordKind) {
|
|
var node = createBaseIdentifier(text, originalKeywordKind);
|
|
if (typeArguments) {
|
|
node.typeArguments = createNodeArray(typeArguments);
|
|
}
|
|
if (node.originalKeywordKind === 132) {
|
|
node.transformFlags |= 67108864;
|
|
}
|
|
return node;
|
|
}
|
|
function updateIdentifier(node, typeArguments) {
|
|
return node.typeArguments !== typeArguments
|
|
? update(createIdentifier(ts.idText(node), typeArguments), node)
|
|
: node;
|
|
}
|
|
function createTempVariable(recordTempVariable, reservedInNestedScopes) {
|
|
var flags = 1;
|
|
if (reservedInNestedScopes)
|
|
flags |= 8;
|
|
var name = createBaseGeneratedIdentifier("", flags);
|
|
if (recordTempVariable) {
|
|
recordTempVariable(name);
|
|
}
|
|
return name;
|
|
}
|
|
function createLoopVariable(reservedInNestedScopes) {
|
|
var flags = 2;
|
|
if (reservedInNestedScopes)
|
|
flags |= 8;
|
|
return createBaseGeneratedIdentifier("", flags);
|
|
}
|
|
function createUniqueName(text, flags) {
|
|
if (flags === void 0) { flags = 0; }
|
|
ts.Debug.assert(!(flags & 7), "Argument out of range: flags");
|
|
ts.Debug.assert((flags & (16 | 32)) !== 32, "GeneratedIdentifierFlags.FileLevel cannot be set without also setting GeneratedIdentifierFlags.Optimistic");
|
|
return createBaseGeneratedIdentifier(text, 3 | flags);
|
|
}
|
|
function getGeneratedNameForNode(node, flags) {
|
|
if (flags === void 0) { flags = 0; }
|
|
ts.Debug.assert(!(flags & 7), "Argument out of range: flags");
|
|
var name = createBaseGeneratedIdentifier(node && ts.isIdentifier(node) ? ts.idText(node) : "", 4 | flags);
|
|
name.original = node;
|
|
return name;
|
|
}
|
|
function createPrivateIdentifier(text) {
|
|
if (!ts.startsWith(text, "#"))
|
|
ts.Debug.fail("First character of private identifier must be #: " + text);
|
|
var node = baseFactory.createBasePrivateIdentifierNode(80);
|
|
node.escapedText = ts.escapeLeadingUnderscores(text);
|
|
node.transformFlags |= 16777216;
|
|
return node;
|
|
}
|
|
function createBaseToken(kind) {
|
|
return baseFactory.createBaseTokenNode(kind);
|
|
}
|
|
function createToken(token) {
|
|
ts.Debug.assert(token >= 0 && token <= 160, "Invalid token");
|
|
ts.Debug.assert(token <= 14 || token >= 17, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
|
|
ts.Debug.assert(token <= 8 || token >= 14, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
|
|
ts.Debug.assert(token !== 79, "Invalid token. Use 'createIdentifier' to create identifiers");
|
|
var node = createBaseToken(token);
|
|
var transformFlags = 0;
|
|
switch (token) {
|
|
case 131:
|
|
transformFlags =
|
|
256 |
|
|
128;
|
|
break;
|
|
case 123:
|
|
case 121:
|
|
case 122:
|
|
case 145:
|
|
case 126:
|
|
case 135:
|
|
case 85:
|
|
case 130:
|
|
case 147:
|
|
case 158:
|
|
case 143:
|
|
case 148:
|
|
case 101:
|
|
case 144:
|
|
case 159:
|
|
case 150:
|
|
case 133:
|
|
case 151:
|
|
case 114:
|
|
case 155:
|
|
case 153:
|
|
transformFlags = 1;
|
|
break;
|
|
case 106:
|
|
transformFlags = 1024 | 134217728;
|
|
break;
|
|
case 124:
|
|
transformFlags = 1024;
|
|
break;
|
|
case 108:
|
|
transformFlags = 16384;
|
|
break;
|
|
}
|
|
if (transformFlags) {
|
|
node.transformFlags |= transformFlags;
|
|
}
|
|
return node;
|
|
}
|
|
function createSuper() {
|
|
return createToken(106);
|
|
}
|
|
function createThis() {
|
|
return createToken(108);
|
|
}
|
|
function createNull() {
|
|
return createToken(104);
|
|
}
|
|
function createTrue() {
|
|
return createToken(110);
|
|
}
|
|
function createFalse() {
|
|
return createToken(95);
|
|
}
|
|
function createModifier(kind) {
|
|
return createToken(kind);
|
|
}
|
|
function createModifiersFromModifierFlags(flags) {
|
|
var result = [];
|
|
if (flags & 1)
|
|
result.push(createModifier(93));
|
|
if (flags & 2)
|
|
result.push(createModifier(135));
|
|
if (flags & 512)
|
|
result.push(createModifier(88));
|
|
if (flags & 2048)
|
|
result.push(createModifier(85));
|
|
if (flags & 4)
|
|
result.push(createModifier(123));
|
|
if (flags & 8)
|
|
result.push(createModifier(121));
|
|
if (flags & 16)
|
|
result.push(createModifier(122));
|
|
if (flags & 128)
|
|
result.push(createModifier(126));
|
|
if (flags & 32)
|
|
result.push(createModifier(124));
|
|
if (flags & 16384)
|
|
result.push(createModifier(159));
|
|
if (flags & 64)
|
|
result.push(createModifier(145));
|
|
if (flags & 256)
|
|
result.push(createModifier(131));
|
|
if (flags & 32768)
|
|
result.push(createModifier(101));
|
|
if (flags & 65536)
|
|
result.push(createModifier(144));
|
|
return result.length ? result : undefined;
|
|
}
|
|
function createQualifiedName(left, right) {
|
|
var node = createBaseNode(161);
|
|
node.left = left;
|
|
node.right = asName(right);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.left) |
|
|
propagateIdentifierNameFlags(node.right);
|
|
return node;
|
|
}
|
|
function updateQualifiedName(node, left, right) {
|
|
return node.left !== left
|
|
|| node.right !== right
|
|
? update(createQualifiedName(left, right), node)
|
|
: node;
|
|
}
|
|
function createComputedPropertyName(expression) {
|
|
var node = createBaseNode(162);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1024 |
|
|
131072;
|
|
return node;
|
|
}
|
|
function updateComputedPropertyName(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createComputedPropertyName(expression), node)
|
|
: node;
|
|
}
|
|
function createTypeParameterDeclaration(modifiers, name, constraint, defaultType) {
|
|
var node = createBaseNamedDeclaration(163, modifiers, name);
|
|
node.constraint = constraint;
|
|
node.default = defaultType;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypeParameterDeclaration(node, modifiers, name, constraint, defaultType) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.constraint !== constraint
|
|
|| node.default !== defaultType
|
|
? update(createTypeParameterDeclaration(modifiers, name, constraint, defaultType), node)
|
|
: node;
|
|
}
|
|
function createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) {
|
|
var node = createBaseVariableLikeDeclaration(164, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
|
|
node.dotDotDotToken = dotDotDotToken;
|
|
node.questionToken = questionToken;
|
|
if (ts.isThisIdentifier(node.name)) {
|
|
node.transformFlags = 1;
|
|
}
|
|
else {
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.dotDotDotToken) |
|
|
propagateChildFlags(node.questionToken);
|
|
if (questionToken)
|
|
node.transformFlags |= 1;
|
|
if (ts.modifiersToFlags(node.modifiers) & 16476)
|
|
node.transformFlags |= 8192;
|
|
if (initializer || dotDotDotToken)
|
|
node.transformFlags |= 1024;
|
|
}
|
|
return node;
|
|
}
|
|
function updateParameterDeclaration(node, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
|
|
return node.modifiers !== modifiers
|
|
|| node.dotDotDotToken !== dotDotDotToken
|
|
|| node.name !== name
|
|
|| node.questionToken !== questionToken
|
|
|| node.type !== type
|
|
|| node.initializer !== initializer
|
|
? update(createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer), node)
|
|
: node;
|
|
}
|
|
function createDecorator(expression) {
|
|
var node = createBaseNode(165);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1 |
|
|
8192 |
|
|
33554432;
|
|
return node;
|
|
}
|
|
function updateDecorator(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createDecorator(expression), node)
|
|
: node;
|
|
}
|
|
function createPropertySignature(modifiers, name, questionToken, type) {
|
|
var node = createBaseNamedDeclaration(166, modifiers, name);
|
|
node.type = type;
|
|
node.questionToken = questionToken;
|
|
node.transformFlags = 1;
|
|
node.initializer = undefined;
|
|
return node;
|
|
}
|
|
function updatePropertySignature(node, modifiers, name, questionToken, type) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.questionToken !== questionToken
|
|
|| node.type !== type
|
|
? finishUpdatePropertySignature(createPropertySignature(modifiers, name, questionToken, type), node)
|
|
: node;
|
|
}
|
|
function finishUpdatePropertySignature(updated, original) {
|
|
if (updated !== original) {
|
|
updated.initializer = original.initializer;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createPropertyDeclaration(modifiers, name, questionOrExclamationToken, type, initializer) {
|
|
var node = createBaseVariableLikeDeclaration(167, modifiers, name, type, initializer);
|
|
node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
|
|
node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.questionToken) |
|
|
propagateChildFlags(node.exclamationToken) |
|
|
16777216;
|
|
if (ts.isComputedPropertyName(node.name) || (ts.hasStaticModifier(node) && node.initializer)) {
|
|
node.transformFlags |= 8192;
|
|
}
|
|
if (questionOrExclamationToken || ts.modifiersToFlags(node.modifiers) & 2) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updatePropertyDeclaration(node, modifiers, name, questionOrExclamationToken, type, initializer) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.questionToken !== (questionOrExclamationToken !== undefined && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined)
|
|
|| node.exclamationToken !== (questionOrExclamationToken !== undefined && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined)
|
|
|| node.type !== type
|
|
|| node.initializer !== initializer
|
|
? update(createPropertyDeclaration(modifiers, name, questionOrExclamationToken, type, initializer), node)
|
|
: node;
|
|
}
|
|
function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(168, modifiers, name, typeParameters, parameters, type);
|
|
node.questionToken = questionToken;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateMethodSignature(node, modifiers, name, questionToken, typeParameters, parameters, type) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.questionToken !== questionToken
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? finishUpdateBaseSignatureDeclaration(createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function createMethodDeclaration(modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
|
|
var node = createBaseFunctionLikeDeclaration(169, modifiers, name, typeParameters, parameters, type, body);
|
|
node.asteriskToken = asteriskToken;
|
|
node.questionToken = questionToken;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.asteriskToken) |
|
|
propagateChildFlags(node.questionToken) |
|
|
1024;
|
|
if (questionToken) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
if (ts.modifiersToFlags(node.modifiers) & 256) {
|
|
if (asteriskToken) {
|
|
node.transformFlags |= 128;
|
|
}
|
|
else {
|
|
node.transformFlags |= 256;
|
|
}
|
|
}
|
|
else if (asteriskToken) {
|
|
node.transformFlags |= 2048;
|
|
}
|
|
node.exclamationToken = undefined;
|
|
return node;
|
|
}
|
|
function updateMethodDeclaration(node, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.asteriskToken !== asteriskToken
|
|
|| node.name !== name
|
|
|| node.questionToken !== questionToken
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
|| node.body !== body
|
|
? finishUpdateMethodDeclaration(createMethodDeclaration(modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateMethodDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.exclamationToken = original.exclamationToken;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createClassStaticBlockDeclaration(body) {
|
|
var node = createBaseGenericNamedDeclaration(170, undefined, undefined, undefined);
|
|
node.body = body;
|
|
node.transformFlags = propagateChildFlags(body) | 16777216;
|
|
node.illegalDecorators = undefined;
|
|
node.modifiers = undefined;
|
|
return node;
|
|
}
|
|
function updateClassStaticBlockDeclaration(node, body) {
|
|
return node.body !== body
|
|
? finishUpdateClassStaticBlockDeclaration(createClassStaticBlockDeclaration(body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateClassStaticBlockDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
updated.modifiers = original.modifiers;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createConstructorDeclaration(modifiers, parameters, body) {
|
|
var node = createBaseFunctionLikeDeclaration(171, modifiers, undefined, undefined, parameters, undefined, body);
|
|
node.transformFlags |= 1024;
|
|
node.illegalDecorators = undefined;
|
|
node.typeParameters = undefined;
|
|
node.type = undefined;
|
|
return node;
|
|
}
|
|
function updateConstructorDeclaration(node, modifiers, parameters, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.parameters !== parameters
|
|
|| node.body !== body
|
|
? finishUpdateConstructorDeclaration(createConstructorDeclaration(modifiers, parameters, body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateConstructorDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
updated.typeParameters = original.typeParameters;
|
|
updated.type = original.type;
|
|
}
|
|
return finishUpdateBaseSignatureDeclaration(updated, original);
|
|
}
|
|
function createGetAccessorDeclaration(modifiers, name, parameters, type, body) {
|
|
var node = createBaseFunctionLikeDeclaration(172, modifiers, name, undefined, parameters, type, body);
|
|
node.typeParameters = undefined;
|
|
return node;
|
|
}
|
|
function updateGetAccessorDeclaration(node, modifiers, name, parameters, type, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
|| node.body !== body
|
|
? finishUpdateGetAccessorDeclaration(createGetAccessorDeclaration(modifiers, name, parameters, type, body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateGetAccessorDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.typeParameters = original.typeParameters;
|
|
}
|
|
return finishUpdateBaseSignatureDeclaration(updated, original);
|
|
}
|
|
function createSetAccessorDeclaration(modifiers, name, parameters, body) {
|
|
var node = createBaseFunctionLikeDeclaration(173, modifiers, name, undefined, parameters, undefined, body);
|
|
node.typeParameters = undefined;
|
|
node.type = undefined;
|
|
return node;
|
|
}
|
|
function updateSetAccessorDeclaration(node, modifiers, name, parameters, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.parameters !== parameters
|
|
|| node.body !== body
|
|
? finishUpdateSetAccessorDeclaration(createSetAccessorDeclaration(modifiers, name, parameters, body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateSetAccessorDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.typeParameters = original.typeParameters;
|
|
updated.type = original.type;
|
|
}
|
|
return finishUpdateBaseSignatureDeclaration(updated, original);
|
|
}
|
|
function createCallSignature(typeParameters, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(174, undefined, undefined, typeParameters, parameters, type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateCallSignature(node, typeParameters, parameters, type) {
|
|
return node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? finishUpdateBaseSignatureDeclaration(createCallSignature(typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function createConstructSignature(typeParameters, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(175, undefined, undefined, typeParameters, parameters, type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateConstructSignature(node, typeParameters, parameters, type) {
|
|
return node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? finishUpdateBaseSignatureDeclaration(createConstructSignature(typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function createIndexSignature(modifiers, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(176, modifiers, undefined, undefined, parameters, type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateIndexSignature(node, modifiers, parameters, type) {
|
|
return node.parameters !== parameters
|
|
|| node.type !== type
|
|
|| node.modifiers !== modifiers
|
|
? finishUpdateBaseSignatureDeclaration(createIndexSignature(modifiers, parameters, type), node)
|
|
: node;
|
|
}
|
|
function createTemplateLiteralTypeSpan(type, literal) {
|
|
var node = createBaseNode(199);
|
|
node.type = type;
|
|
node.literal = literal;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTemplateLiteralTypeSpan(node, type, literal) {
|
|
return node.type !== type
|
|
|| node.literal !== literal
|
|
? update(createTemplateLiteralTypeSpan(type, literal), node)
|
|
: node;
|
|
}
|
|
function createKeywordTypeNode(kind) {
|
|
return createToken(kind);
|
|
}
|
|
function createTypePredicateNode(assertsModifier, parameterName, type) {
|
|
var node = createBaseNode(177);
|
|
node.assertsModifier = assertsModifier;
|
|
node.parameterName = asName(parameterName);
|
|
node.type = type;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypePredicateNode(node, assertsModifier, parameterName, type) {
|
|
return node.assertsModifier !== assertsModifier
|
|
|| node.parameterName !== parameterName
|
|
|| node.type !== type
|
|
? update(createTypePredicateNode(assertsModifier, parameterName, type), node)
|
|
: node;
|
|
}
|
|
function createTypeReferenceNode(typeName, typeArguments) {
|
|
var node = createBaseNode(178);
|
|
node.typeName = asName(typeName);
|
|
node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypeReferenceNode(node, typeName, typeArguments) {
|
|
return node.typeName !== typeName
|
|
|| node.typeArguments !== typeArguments
|
|
? update(createTypeReferenceNode(typeName, typeArguments), node)
|
|
: node;
|
|
}
|
|
function createFunctionTypeNode(typeParameters, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(179, undefined, undefined, typeParameters, parameters, type);
|
|
node.transformFlags = 1;
|
|
node.modifiers = undefined;
|
|
return node;
|
|
}
|
|
function updateFunctionTypeNode(node, typeParameters, parameters, type) {
|
|
return node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? finishUpdateFunctionTypeNode(createFunctionTypeNode(typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function finishUpdateFunctionTypeNode(updated, original) {
|
|
if (updated !== original) {
|
|
updated.modifiers = original.modifiers;
|
|
}
|
|
return finishUpdateBaseSignatureDeclaration(updated, original);
|
|
}
|
|
function createConstructorTypeNode() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return args.length === 4 ? createConstructorTypeNode1.apply(void 0, args) :
|
|
args.length === 3 ? createConstructorTypeNode2.apply(void 0, args) :
|
|
ts.Debug.fail("Incorrect number of arguments specified.");
|
|
}
|
|
function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
|
|
var node = createBaseSignatureDeclaration(180, modifiers, undefined, typeParameters, parameters, type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function createConstructorTypeNode2(typeParameters, parameters, type) {
|
|
return createConstructorTypeNode1(undefined, typeParameters, parameters, type);
|
|
}
|
|
function updateConstructorTypeNode() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return args.length === 5 ? updateConstructorTypeNode1.apply(void 0, args) :
|
|
args.length === 4 ? updateConstructorTypeNode2.apply(void 0, args) :
|
|
ts.Debug.fail("Incorrect number of arguments specified.");
|
|
}
|
|
function updateConstructorTypeNode1(node, modifiers, typeParameters, parameters, type) {
|
|
return node.modifiers !== modifiers
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? finishUpdateBaseSignatureDeclaration(createConstructorTypeNode(modifiers, typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function updateConstructorTypeNode2(node, typeParameters, parameters, type) {
|
|
return updateConstructorTypeNode1(node, node.modifiers, typeParameters, parameters, type);
|
|
}
|
|
function createTypeQueryNode(exprName, typeArguments) {
|
|
var node = createBaseNode(181);
|
|
node.exprName = exprName;
|
|
node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypeQueryNode(node, exprName, typeArguments) {
|
|
return node.exprName !== exprName
|
|
|| node.typeArguments !== typeArguments
|
|
? update(createTypeQueryNode(exprName, typeArguments), node)
|
|
: node;
|
|
}
|
|
function createTypeLiteralNode(members) {
|
|
var node = createBaseNode(182);
|
|
node.members = createNodeArray(members);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypeLiteralNode(node, members) {
|
|
return node.members !== members
|
|
? update(createTypeLiteralNode(members), node)
|
|
: node;
|
|
}
|
|
function createArrayTypeNode(elementType) {
|
|
var node = createBaseNode(183);
|
|
node.elementType = parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(elementType);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateArrayTypeNode(node, elementType) {
|
|
return node.elementType !== elementType
|
|
? update(createArrayTypeNode(elementType), node)
|
|
: node;
|
|
}
|
|
function createTupleTypeNode(elements) {
|
|
var node = createBaseNode(184);
|
|
node.elements = createNodeArray(parenthesizerRules().parenthesizeElementTypesOfTupleType(elements));
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTupleTypeNode(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createTupleTypeNode(elements), node)
|
|
: node;
|
|
}
|
|
function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
|
|
var node = createBaseNode(197);
|
|
node.dotDotDotToken = dotDotDotToken;
|
|
node.name = name;
|
|
node.questionToken = questionToken;
|
|
node.type = type;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateNamedTupleMember(node, dotDotDotToken, name, questionToken, type) {
|
|
return node.dotDotDotToken !== dotDotDotToken
|
|
|| node.name !== name
|
|
|| node.questionToken !== questionToken
|
|
|| node.type !== type
|
|
? update(createNamedTupleMember(dotDotDotToken, name, questionToken, type), node)
|
|
: node;
|
|
}
|
|
function createOptionalTypeNode(type) {
|
|
var node = createBaseNode(185);
|
|
node.type = parenthesizerRules().parenthesizeTypeOfOptionalType(type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateOptionalTypeNode(node, type) {
|
|
return node.type !== type
|
|
? update(createOptionalTypeNode(type), node)
|
|
: node;
|
|
}
|
|
function createRestTypeNode(type) {
|
|
var node = createBaseNode(186);
|
|
node.type = type;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateRestTypeNode(node, type) {
|
|
return node.type !== type
|
|
? update(createRestTypeNode(type), node)
|
|
: node;
|
|
}
|
|
function createUnionOrIntersectionTypeNode(kind, types, parenthesize) {
|
|
var node = createBaseNode(kind);
|
|
node.types = factory.createNodeArray(parenthesize(types));
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateUnionOrIntersectionTypeNode(node, types, parenthesize) {
|
|
return node.types !== types
|
|
? update(createUnionOrIntersectionTypeNode(node.kind, types, parenthesize), node)
|
|
: node;
|
|
}
|
|
function createUnionTypeNode(types) {
|
|
return createUnionOrIntersectionTypeNode(187, types, parenthesizerRules().parenthesizeConstituentTypesOfUnionType);
|
|
}
|
|
function updateUnionTypeNode(node, types) {
|
|
return updateUnionOrIntersectionTypeNode(node, types, parenthesizerRules().parenthesizeConstituentTypesOfUnionType);
|
|
}
|
|
function createIntersectionTypeNode(types) {
|
|
return createUnionOrIntersectionTypeNode(188, types, parenthesizerRules().parenthesizeConstituentTypesOfIntersectionType);
|
|
}
|
|
function updateIntersectionTypeNode(node, types) {
|
|
return updateUnionOrIntersectionTypeNode(node, types, parenthesizerRules().parenthesizeConstituentTypesOfIntersectionType);
|
|
}
|
|
function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
|
|
var node = createBaseNode(189);
|
|
node.checkType = parenthesizerRules().parenthesizeCheckTypeOfConditionalType(checkType);
|
|
node.extendsType = parenthesizerRules().parenthesizeExtendsTypeOfConditionalType(extendsType);
|
|
node.trueType = trueType;
|
|
node.falseType = falseType;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType) {
|
|
return node.checkType !== checkType
|
|
|| node.extendsType !== extendsType
|
|
|| node.trueType !== trueType
|
|
|| node.falseType !== falseType
|
|
? update(createConditionalTypeNode(checkType, extendsType, trueType, falseType), node)
|
|
: node;
|
|
}
|
|
function createInferTypeNode(typeParameter) {
|
|
var node = createBaseNode(190);
|
|
node.typeParameter = typeParameter;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateInferTypeNode(node, typeParameter) {
|
|
return node.typeParameter !== typeParameter
|
|
? update(createInferTypeNode(typeParameter), node)
|
|
: node;
|
|
}
|
|
function createTemplateLiteralType(head, templateSpans) {
|
|
var node = createBaseNode(198);
|
|
node.head = head;
|
|
node.templateSpans = createNodeArray(templateSpans);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTemplateLiteralType(node, head, templateSpans) {
|
|
return node.head !== head
|
|
|| node.templateSpans !== templateSpans
|
|
? update(createTemplateLiteralType(head, templateSpans), node)
|
|
: node;
|
|
}
|
|
function createImportTypeNode(argument, assertions, qualifier, typeArguments, isTypeOf) {
|
|
if (isTypeOf === void 0) { isTypeOf = false; }
|
|
var node = createBaseNode(200);
|
|
node.argument = argument;
|
|
node.assertions = assertions;
|
|
node.qualifier = qualifier;
|
|
node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
|
|
node.isTypeOf = isTypeOf;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateImportTypeNode(node, argument, assertions, qualifier, typeArguments, isTypeOf) {
|
|
if (isTypeOf === void 0) { isTypeOf = node.isTypeOf; }
|
|
return node.argument !== argument
|
|
|| node.assertions !== assertions
|
|
|| node.qualifier !== qualifier
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.isTypeOf !== isTypeOf
|
|
? update(createImportTypeNode(argument, assertions, qualifier, typeArguments, isTypeOf), node)
|
|
: node;
|
|
}
|
|
function createParenthesizedType(type) {
|
|
var node = createBaseNode(191);
|
|
node.type = type;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateParenthesizedType(node, type) {
|
|
return node.type !== type
|
|
? update(createParenthesizedType(type), node)
|
|
: node;
|
|
}
|
|
function createThisTypeNode() {
|
|
var node = createBaseNode(192);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function createTypeOperatorNode(operator, type) {
|
|
var node = createBaseNode(193);
|
|
node.operator = operator;
|
|
node.type = operator === 145 ?
|
|
parenthesizerRules().parenthesizeOperandOfReadonlyTypeOperator(type) :
|
|
parenthesizerRules().parenthesizeOperandOfTypeOperator(type);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateTypeOperatorNode(node, type) {
|
|
return node.type !== type
|
|
? update(createTypeOperatorNode(node.operator, type), node)
|
|
: node;
|
|
}
|
|
function createIndexedAccessTypeNode(objectType, indexType) {
|
|
var node = createBaseNode(194);
|
|
node.objectType = parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(objectType);
|
|
node.indexType = indexType;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateIndexedAccessTypeNode(node, objectType, indexType) {
|
|
return node.objectType !== objectType
|
|
|| node.indexType !== indexType
|
|
? update(createIndexedAccessTypeNode(objectType, indexType), node)
|
|
: node;
|
|
}
|
|
function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) {
|
|
var node = createBaseNode(195);
|
|
node.readonlyToken = readonlyToken;
|
|
node.typeParameter = typeParameter;
|
|
node.nameType = nameType;
|
|
node.questionToken = questionToken;
|
|
node.type = type;
|
|
node.members = members && createNodeArray(members);
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateMappedTypeNode(node, readonlyToken, typeParameter, nameType, questionToken, type, members) {
|
|
return node.readonlyToken !== readonlyToken
|
|
|| node.typeParameter !== typeParameter
|
|
|| node.nameType !== nameType
|
|
|| node.questionToken !== questionToken
|
|
|| node.type !== type
|
|
|| node.members !== members
|
|
? update(createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members), node)
|
|
: node;
|
|
}
|
|
function createLiteralTypeNode(literal) {
|
|
var node = createBaseNode(196);
|
|
node.literal = literal;
|
|
node.transformFlags = 1;
|
|
return node;
|
|
}
|
|
function updateLiteralTypeNode(node, literal) {
|
|
return node.literal !== literal
|
|
? update(createLiteralTypeNode(literal), node)
|
|
: node;
|
|
}
|
|
function createObjectBindingPattern(elements) {
|
|
var node = createBaseNode(201);
|
|
node.elements = createNodeArray(elements);
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.elements) |
|
|
1024 |
|
|
524288;
|
|
if (node.transformFlags & 32768) {
|
|
node.transformFlags |=
|
|
128 |
|
|
65536;
|
|
}
|
|
return node;
|
|
}
|
|
function updateObjectBindingPattern(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createObjectBindingPattern(elements), node)
|
|
: node;
|
|
}
|
|
function createArrayBindingPattern(elements) {
|
|
var node = createBaseNode(202);
|
|
node.elements = createNodeArray(elements);
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.elements) |
|
|
1024 |
|
|
524288;
|
|
return node;
|
|
}
|
|
function updateArrayBindingPattern(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createArrayBindingPattern(elements), node)
|
|
: node;
|
|
}
|
|
function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
|
|
var node = createBaseBindingLikeDeclaration(203, undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
|
|
node.propertyName = asName(propertyName);
|
|
node.dotDotDotToken = dotDotDotToken;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.dotDotDotToken) |
|
|
1024;
|
|
if (node.propertyName) {
|
|
node.transformFlags |= ts.isIdentifier(node.propertyName) ?
|
|
propagateIdentifierNameFlags(node.propertyName) :
|
|
propagateChildFlags(node.propertyName);
|
|
}
|
|
if (dotDotDotToken)
|
|
node.transformFlags |= 32768;
|
|
return node;
|
|
}
|
|
function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) {
|
|
return node.propertyName !== propertyName
|
|
|| node.dotDotDotToken !== dotDotDotToken
|
|
|| node.name !== name
|
|
|| node.initializer !== initializer
|
|
? update(createBindingElement(dotDotDotToken, propertyName, name, initializer), node)
|
|
: node;
|
|
}
|
|
function createBaseExpression(kind) {
|
|
var node = createBaseNode(kind);
|
|
return node;
|
|
}
|
|
function createArrayLiteralExpression(elements, multiLine) {
|
|
var node = createBaseExpression(204);
|
|
var lastElement = elements && ts.lastOrUndefined(elements);
|
|
var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
|
|
node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
|
|
node.multiLine = multiLine;
|
|
node.transformFlags |= propagateChildrenFlags(node.elements);
|
|
return node;
|
|
}
|
|
function updateArrayLiteralExpression(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createArrayLiteralExpression(elements, node.multiLine), node)
|
|
: node;
|
|
}
|
|
function createObjectLiteralExpression(properties, multiLine) {
|
|
var node = createBaseExpression(205);
|
|
node.properties = createNodeArray(properties);
|
|
node.multiLine = multiLine;
|
|
node.transformFlags |= propagateChildrenFlags(node.properties);
|
|
return node;
|
|
}
|
|
function updateObjectLiteralExpression(node, properties) {
|
|
return node.properties !== properties
|
|
? update(createObjectLiteralExpression(properties, node.multiLine), node)
|
|
: node;
|
|
}
|
|
function createPropertyAccessExpression(expression, name) {
|
|
var node = createBaseExpression(206);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.name = asName(name);
|
|
node.transformFlags =
|
|
propagateChildFlags(node.expression) |
|
|
(ts.isIdentifier(node.name) ?
|
|
propagateIdentifierNameFlags(node.name) :
|
|
propagateChildFlags(node.name) | 536870912);
|
|
if (ts.isSuperKeyword(expression)) {
|
|
node.transformFlags |=
|
|
256 |
|
|
128;
|
|
}
|
|
return node;
|
|
}
|
|
function updatePropertyAccessExpression(node, expression, name) {
|
|
if (ts.isPropertyAccessChain(node)) {
|
|
return updatePropertyAccessChain(node, expression, node.questionDotToken, ts.cast(name, ts.isIdentifier));
|
|
}
|
|
return node.expression !== expression
|
|
|| node.name !== name
|
|
? update(createPropertyAccessExpression(expression, name), node)
|
|
: node;
|
|
}
|
|
function createPropertyAccessChain(expression, questionDotToken, name) {
|
|
var node = createBaseExpression(206);
|
|
node.flags |= 32;
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, true);
|
|
node.questionDotToken = questionDotToken;
|
|
node.name = asName(name);
|
|
node.transformFlags |=
|
|
32 |
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.questionDotToken) |
|
|
(ts.isIdentifier(node.name) ?
|
|
propagateIdentifierNameFlags(node.name) :
|
|
propagateChildFlags(node.name) | 536870912);
|
|
return node;
|
|
}
|
|
function updatePropertyAccessChain(node, expression, questionDotToken, name) {
|
|
ts.Debug.assert(!!(node.flags & 32), "Cannot update a PropertyAccessExpression using updatePropertyAccessChain. Use updatePropertyAccess instead.");
|
|
return node.expression !== expression
|
|
|| node.questionDotToken !== questionDotToken
|
|
|| node.name !== name
|
|
? update(createPropertyAccessChain(expression, questionDotToken, name), node)
|
|
: node;
|
|
}
|
|
function createElementAccessExpression(expression, index) {
|
|
var node = createBaseExpression(207);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.argumentExpression = asExpression(index);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.argumentExpression);
|
|
if (ts.isSuperKeyword(expression)) {
|
|
node.transformFlags |=
|
|
256 |
|
|
128;
|
|
}
|
|
return node;
|
|
}
|
|
function updateElementAccessExpression(node, expression, argumentExpression) {
|
|
if (ts.isElementAccessChain(node)) {
|
|
return updateElementAccessChain(node, expression, node.questionDotToken, argumentExpression);
|
|
}
|
|
return node.expression !== expression
|
|
|| node.argumentExpression !== argumentExpression
|
|
? update(createElementAccessExpression(expression, argumentExpression), node)
|
|
: node;
|
|
}
|
|
function createElementAccessChain(expression, questionDotToken, index) {
|
|
var node = createBaseExpression(207);
|
|
node.flags |= 32;
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, true);
|
|
node.questionDotToken = questionDotToken;
|
|
node.argumentExpression = asExpression(index);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.questionDotToken) |
|
|
propagateChildFlags(node.argumentExpression) |
|
|
32;
|
|
return node;
|
|
}
|
|
function updateElementAccessChain(node, expression, questionDotToken, argumentExpression) {
|
|
ts.Debug.assert(!!(node.flags & 32), "Cannot update a ElementAccessExpression using updateElementAccessChain. Use updateElementAccess instead.");
|
|
return node.expression !== expression
|
|
|| node.questionDotToken !== questionDotToken
|
|
|| node.argumentExpression !== argumentExpression
|
|
? update(createElementAccessChain(expression, questionDotToken, argumentExpression), node)
|
|
: node;
|
|
}
|
|
function createCallExpression(expression, typeArguments, argumentsArray) {
|
|
var node = createBaseExpression(208);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildrenFlags(node.arguments);
|
|
if (node.typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
if (ts.isImportKeyword(node.expression)) {
|
|
node.transformFlags |= 8388608;
|
|
}
|
|
else if (ts.isSuperProperty(node.expression)) {
|
|
node.transformFlags |= 16384;
|
|
}
|
|
return node;
|
|
}
|
|
function updateCallExpression(node, expression, typeArguments, argumentsArray) {
|
|
if (ts.isCallChain(node)) {
|
|
return updateCallChain(node, expression, node.questionDotToken, typeArguments, argumentsArray);
|
|
}
|
|
return node.expression !== expression
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.arguments !== argumentsArray
|
|
? update(createCallExpression(expression, typeArguments, argumentsArray), node)
|
|
: node;
|
|
}
|
|
function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
|
|
var node = createBaseExpression(208);
|
|
node.flags |= 32;
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, true);
|
|
node.questionDotToken = questionDotToken;
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.questionDotToken) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildrenFlags(node.arguments) |
|
|
32;
|
|
if (node.typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
if (ts.isSuperProperty(node.expression)) {
|
|
node.transformFlags |= 16384;
|
|
}
|
|
return node;
|
|
}
|
|
function updateCallChain(node, expression, questionDotToken, typeArguments, argumentsArray) {
|
|
ts.Debug.assert(!!(node.flags & 32), "Cannot update a CallExpression using updateCallChain. Use updateCall instead.");
|
|
return node.expression !== expression
|
|
|| node.questionDotToken !== questionDotToken
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.arguments !== argumentsArray
|
|
? update(createCallChain(expression, questionDotToken, typeArguments, argumentsArray), node)
|
|
: node;
|
|
}
|
|
function createNewExpression(expression, typeArguments, argumentsArray) {
|
|
var node = createBaseExpression(209);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildrenFlags(node.arguments) |
|
|
32;
|
|
if (node.typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updateNewExpression(node, expression, typeArguments, argumentsArray) {
|
|
return node.expression !== expression
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.arguments !== argumentsArray
|
|
? update(createNewExpression(expression, typeArguments, argumentsArray), node)
|
|
: node;
|
|
}
|
|
function createTaggedTemplateExpression(tag, typeArguments, template) {
|
|
var node = createBaseExpression(210);
|
|
node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag, false);
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.template = template;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.tag) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildFlags(node.template) |
|
|
1024;
|
|
if (node.typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
if (ts.hasInvalidEscape(node.template)) {
|
|
node.transformFlags |= 128;
|
|
}
|
|
return node;
|
|
}
|
|
function updateTaggedTemplateExpression(node, tag, typeArguments, template) {
|
|
return node.tag !== tag
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.template !== template
|
|
? update(createTaggedTemplateExpression(tag, typeArguments, template), node)
|
|
: node;
|
|
}
|
|
function createTypeAssertion(type, expression) {
|
|
var node = createBaseExpression(211);
|
|
node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
|
|
node.type = type;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.type) |
|
|
1;
|
|
return node;
|
|
}
|
|
function updateTypeAssertion(node, type, expression) {
|
|
return node.type !== type
|
|
|| node.expression !== expression
|
|
? update(createTypeAssertion(type, expression), node)
|
|
: node;
|
|
}
|
|
function createParenthesizedExpression(expression) {
|
|
var node = createBaseExpression(212);
|
|
node.expression = expression;
|
|
node.transformFlags = propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateParenthesizedExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createParenthesizedExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
|
|
var node = createBaseFunctionLikeDeclaration(213, modifiers, name, typeParameters, parameters, type, body);
|
|
node.asteriskToken = asteriskToken;
|
|
node.transformFlags |= propagateChildFlags(node.asteriskToken);
|
|
if (node.typeParameters) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
if (ts.modifiersToFlags(node.modifiers) & 256) {
|
|
if (node.asteriskToken) {
|
|
node.transformFlags |= 128;
|
|
}
|
|
else {
|
|
node.transformFlags |= 256;
|
|
}
|
|
}
|
|
else if (node.asteriskToken) {
|
|
node.transformFlags |= 2048;
|
|
}
|
|
return node;
|
|
}
|
|
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
|
|
? finishUpdateBaseSignatureDeclaration(createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node)
|
|
: node;
|
|
}
|
|
function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
|
|
var node = createBaseFunctionLikeDeclaration(214, modifiers, undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
|
|
node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.equalsGreaterThanToken) |
|
|
1024;
|
|
if (ts.modifiersToFlags(node.modifiers) & 256) {
|
|
node.transformFlags |= 256 | 16384;
|
|
}
|
|
return node;
|
|
}
|
|
function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
|| node.equalsGreaterThanToken !== equalsGreaterThanToken
|
|
|| node.body !== body
|
|
? finishUpdateBaseSignatureDeclaration(createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body), node)
|
|
: node;
|
|
}
|
|
function createDeleteExpression(expression) {
|
|
var node = createBaseExpression(215);
|
|
node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateDeleteExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createDeleteExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createTypeOfExpression(expression) {
|
|
var node = createBaseExpression(216);
|
|
node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateTypeOfExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createTypeOfExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createVoidExpression(expression) {
|
|
var node = createBaseExpression(217);
|
|
node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateVoidExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createVoidExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createAwaitExpression(expression) {
|
|
var node = createBaseExpression(218);
|
|
node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
256 |
|
|
128 |
|
|
2097152;
|
|
return node;
|
|
}
|
|
function updateAwaitExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createAwaitExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createPrefixUnaryExpression(operator, operand) {
|
|
var node = createBaseExpression(219);
|
|
node.operator = operator;
|
|
node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
|
|
node.transformFlags |= propagateChildFlags(node.operand);
|
|
if ((operator === 45 || operator === 46) &&
|
|
ts.isIdentifier(node.operand) &&
|
|
!ts.isGeneratedIdentifier(node.operand) &&
|
|
!ts.isLocalName(node.operand)) {
|
|
node.transformFlags |= 268435456;
|
|
}
|
|
return node;
|
|
}
|
|
function updatePrefixUnaryExpression(node, operand) {
|
|
return node.operand !== operand
|
|
? update(createPrefixUnaryExpression(node.operator, operand), node)
|
|
: node;
|
|
}
|
|
function createPostfixUnaryExpression(operand, operator) {
|
|
var node = createBaseExpression(220);
|
|
node.operator = operator;
|
|
node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
|
|
node.transformFlags |= propagateChildFlags(node.operand);
|
|
if (ts.isIdentifier(node.operand) &&
|
|
!ts.isGeneratedIdentifier(node.operand) &&
|
|
!ts.isLocalName(node.operand)) {
|
|
node.transformFlags |= 268435456;
|
|
}
|
|
return node;
|
|
}
|
|
function updatePostfixUnaryExpression(node, operand) {
|
|
return node.operand !== operand
|
|
? update(createPostfixUnaryExpression(operand, node.operator), node)
|
|
: node;
|
|
}
|
|
function createBinaryExpression(left, operator, right) {
|
|
var node = createBaseExpression(221);
|
|
var operatorToken = asToken(operator);
|
|
var operatorKind = operatorToken.kind;
|
|
node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
|
|
node.operatorToken = operatorToken;
|
|
node.right = parenthesizerRules().parenthesizeRightSideOfBinary(operatorKind, node.left, right);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.left) |
|
|
propagateChildFlags(node.operatorToken) |
|
|
propagateChildFlags(node.right);
|
|
if (operatorKind === 60) {
|
|
node.transformFlags |= 32;
|
|
}
|
|
else if (operatorKind === 63) {
|
|
if (ts.isObjectLiteralExpression(node.left)) {
|
|
node.transformFlags |=
|
|
1024 |
|
|
128 |
|
|
4096 |
|
|
propagateAssignmentPatternFlags(node.left);
|
|
}
|
|
else if (ts.isArrayLiteralExpression(node.left)) {
|
|
node.transformFlags |=
|
|
1024 |
|
|
4096 |
|
|
propagateAssignmentPatternFlags(node.left);
|
|
}
|
|
}
|
|
else if (operatorKind === 42 || operatorKind === 67) {
|
|
node.transformFlags |= 512;
|
|
}
|
|
else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
|
|
node.transformFlags |= 16;
|
|
}
|
|
if (operatorKind === 101 && ts.isPrivateIdentifier(node.left)) {
|
|
node.transformFlags |= 536870912;
|
|
}
|
|
return node;
|
|
}
|
|
function propagateAssignmentPatternFlags(node) {
|
|
if (node.transformFlags & 65536)
|
|
return 65536;
|
|
if (node.transformFlags & 128) {
|
|
for (var _i = 0, _a = ts.getElementsOfBindingOrAssignmentPattern(node); _i < _a.length; _i++) {
|
|
var element = _a[_i];
|
|
var target = ts.getTargetOfBindingOrAssignmentElement(element);
|
|
if (target && ts.isAssignmentPattern(target)) {
|
|
if (target.transformFlags & 65536) {
|
|
return 65536;
|
|
}
|
|
if (target.transformFlags & 128) {
|
|
var flags_1 = propagateAssignmentPatternFlags(target);
|
|
if (flags_1)
|
|
return flags_1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
function updateBinaryExpression(node, left, operator, right) {
|
|
return node.left !== left
|
|
|| node.operatorToken !== operator
|
|
|| node.right !== right
|
|
? update(createBinaryExpression(left, operator, right), node)
|
|
: node;
|
|
}
|
|
function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
|
|
var node = createBaseExpression(222);
|
|
node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
|
|
node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57);
|
|
node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
|
|
node.colonToken = colonToken !== null && colonToken !== void 0 ? colonToken : createToken(58);
|
|
node.whenFalse = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenFalse);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.condition) |
|
|
propagateChildFlags(node.questionToken) |
|
|
propagateChildFlags(node.whenTrue) |
|
|
propagateChildFlags(node.colonToken) |
|
|
propagateChildFlags(node.whenFalse);
|
|
return node;
|
|
}
|
|
function updateConditionalExpression(node, condition, questionToken, whenTrue, colonToken, whenFalse) {
|
|
return node.condition !== condition
|
|
|| node.questionToken !== questionToken
|
|
|| node.whenTrue !== whenTrue
|
|
|| node.colonToken !== colonToken
|
|
|| node.whenFalse !== whenFalse
|
|
? update(createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse), node)
|
|
: node;
|
|
}
|
|
function createTemplateExpression(head, templateSpans) {
|
|
var node = createBaseExpression(223);
|
|
node.head = head;
|
|
node.templateSpans = createNodeArray(templateSpans);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.head) |
|
|
propagateChildrenFlags(node.templateSpans) |
|
|
1024;
|
|
return node;
|
|
}
|
|
function updateTemplateExpression(node, head, templateSpans) {
|
|
return node.head !== head
|
|
|| node.templateSpans !== templateSpans
|
|
? update(createTemplateExpression(head, templateSpans), node)
|
|
: node;
|
|
}
|
|
function createTemplateLiteralLikeNodeChecked(kind, text, rawText, templateFlags) {
|
|
if (templateFlags === void 0) { templateFlags = 0; }
|
|
ts.Debug.assert(!(templateFlags & ~2048), "Unsupported template flags.");
|
|
var cooked = undefined;
|
|
if (rawText !== undefined && rawText !== text) {
|
|
cooked = getCookedText(kind, rawText);
|
|
if (typeof cooked === "object") {
|
|
return ts.Debug.fail("Invalid raw text");
|
|
}
|
|
}
|
|
if (text === undefined) {
|
|
if (cooked === undefined) {
|
|
return ts.Debug.fail("Arguments 'text' and 'rawText' may not both be undefined.");
|
|
}
|
|
text = cooked;
|
|
}
|
|
else if (cooked !== undefined) {
|
|
ts.Debug.assert(text === cooked, "Expected argument 'text' to be the normalized (i.e. 'cooked') version of argument 'rawText'.");
|
|
}
|
|
return createTemplateLiteralLikeNode(kind, text, rawText, templateFlags);
|
|
}
|
|
function createTemplateLiteralLikeNode(kind, text, rawText, templateFlags) {
|
|
var node = createBaseToken(kind);
|
|
node.text = text;
|
|
node.rawText = rawText;
|
|
node.templateFlags = templateFlags & 2048;
|
|
node.transformFlags |= 1024;
|
|
if (node.templateFlags) {
|
|
node.transformFlags |= 128;
|
|
}
|
|
return node;
|
|
}
|
|
function createTemplateHead(text, rawText, templateFlags) {
|
|
return createTemplateLiteralLikeNodeChecked(15, text, rawText, templateFlags);
|
|
}
|
|
function createTemplateMiddle(text, rawText, templateFlags) {
|
|
return createTemplateLiteralLikeNodeChecked(16, text, rawText, templateFlags);
|
|
}
|
|
function createTemplateTail(text, rawText, templateFlags) {
|
|
return createTemplateLiteralLikeNodeChecked(17, text, rawText, templateFlags);
|
|
}
|
|
function createNoSubstitutionTemplateLiteral(text, rawText, templateFlags) {
|
|
return createTemplateLiteralLikeNodeChecked(14, text, rawText, templateFlags);
|
|
}
|
|
function createYieldExpression(asteriskToken, expression) {
|
|
ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
|
|
var node = createBaseExpression(224);
|
|
node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.asteriskToken = asteriskToken;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.asteriskToken) |
|
|
1024 |
|
|
128 |
|
|
1048576;
|
|
return node;
|
|
}
|
|
function updateYieldExpression(node, asteriskToken, expression) {
|
|
return node.expression !== expression
|
|
|| node.asteriskToken !== asteriskToken
|
|
? update(createYieldExpression(asteriskToken, expression), node)
|
|
: node;
|
|
}
|
|
function createSpreadElement(expression) {
|
|
var node = createBaseExpression(225);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1024 |
|
|
32768;
|
|
return node;
|
|
}
|
|
function updateSpreadElement(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createSpreadElement(expression), node)
|
|
: node;
|
|
}
|
|
function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) {
|
|
var node = createBaseClassLikeDeclaration(226, modifiers, name, typeParameters, heritageClauses, members);
|
|
node.transformFlags |= 1024;
|
|
return node;
|
|
}
|
|
function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.heritageClauses !== heritageClauses
|
|
|| node.members !== members
|
|
? update(createClassExpression(modifiers, name, typeParameters, heritageClauses, members), node)
|
|
: node;
|
|
}
|
|
function createOmittedExpression() {
|
|
return createBaseExpression(227);
|
|
}
|
|
function createExpressionWithTypeArguments(expression, typeArguments) {
|
|
var node = createBaseNode(228);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
1024;
|
|
return node;
|
|
}
|
|
function updateExpressionWithTypeArguments(node, expression, typeArguments) {
|
|
return node.expression !== expression
|
|
|| node.typeArguments !== typeArguments
|
|
? update(createExpressionWithTypeArguments(expression, typeArguments), node)
|
|
: node;
|
|
}
|
|
function createAsExpression(expression, type) {
|
|
var node = createBaseExpression(229);
|
|
node.expression = expression;
|
|
node.type = type;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.type) |
|
|
1;
|
|
return node;
|
|
}
|
|
function updateAsExpression(node, expression, type) {
|
|
return node.expression !== expression
|
|
|| node.type !== type
|
|
? update(createAsExpression(expression, type), node)
|
|
: node;
|
|
}
|
|
function createNonNullExpression(expression) {
|
|
var node = createBaseExpression(230);
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1;
|
|
return node;
|
|
}
|
|
function updateNonNullExpression(node, expression) {
|
|
if (ts.isNonNullChain(node)) {
|
|
return updateNonNullChain(node, expression);
|
|
}
|
|
return node.expression !== expression
|
|
? update(createNonNullExpression(expression), node)
|
|
: node;
|
|
}
|
|
function createNonNullChain(expression) {
|
|
var node = createBaseExpression(230);
|
|
node.flags |= 32;
|
|
node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, true);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1;
|
|
return node;
|
|
}
|
|
function updateNonNullChain(node, expression) {
|
|
ts.Debug.assert(!!(node.flags & 32), "Cannot update a NonNullExpression using updateNonNullChain. Use updateNonNullExpression instead.");
|
|
return node.expression !== expression
|
|
? update(createNonNullChain(expression), node)
|
|
: node;
|
|
}
|
|
function createMetaProperty(keywordToken, name) {
|
|
var node = createBaseExpression(231);
|
|
node.keywordToken = keywordToken;
|
|
node.name = name;
|
|
node.transformFlags |= propagateChildFlags(node.name);
|
|
switch (keywordToken) {
|
|
case 103:
|
|
node.transformFlags |= 1024;
|
|
break;
|
|
case 100:
|
|
node.transformFlags |= 4;
|
|
break;
|
|
default:
|
|
return ts.Debug.assertNever(keywordToken);
|
|
}
|
|
return node;
|
|
}
|
|
function updateMetaProperty(node, name) {
|
|
return node.name !== name
|
|
? update(createMetaProperty(node.keywordToken, name), node)
|
|
: node;
|
|
}
|
|
function createTemplateSpan(expression, literal) {
|
|
var node = createBaseNode(233);
|
|
node.expression = expression;
|
|
node.literal = literal;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.literal) |
|
|
1024;
|
|
return node;
|
|
}
|
|
function updateTemplateSpan(node, expression, literal) {
|
|
return node.expression !== expression
|
|
|| node.literal !== literal
|
|
? update(createTemplateSpan(expression, literal), node)
|
|
: node;
|
|
}
|
|
function createSemicolonClassElement() {
|
|
var node = createBaseNode(234);
|
|
node.transformFlags |= 1024;
|
|
return node;
|
|
}
|
|
function createBlock(statements, multiLine) {
|
|
var node = createBaseNode(235);
|
|
node.statements = createNodeArray(statements);
|
|
node.multiLine = multiLine;
|
|
node.transformFlags |= propagateChildrenFlags(node.statements);
|
|
return node;
|
|
}
|
|
function updateBlock(node, statements) {
|
|
return node.statements !== statements
|
|
? update(createBlock(statements, node.multiLine), node)
|
|
: node;
|
|
}
|
|
function createVariableStatement(modifiers, declarationList) {
|
|
var node = createBaseDeclaration(237);
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.modifiers) |
|
|
propagateChildFlags(node.declarationList);
|
|
if (ts.modifiersToFlags(node.modifiers) & 2) {
|
|
node.transformFlags = 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updateVariableStatement(node, modifiers, declarationList) {
|
|
return node.modifiers !== modifiers
|
|
|| node.declarationList !== declarationList
|
|
? update(createVariableStatement(modifiers, declarationList), node)
|
|
: node;
|
|
}
|
|
function createEmptyStatement() {
|
|
return createBaseNode(236);
|
|
}
|
|
function createExpressionStatement(expression) {
|
|
var node = createBaseNode(238);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateExpressionStatement(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createExpressionStatement(expression), node)
|
|
: node;
|
|
}
|
|
function createIfStatement(expression, thenStatement, elseStatement) {
|
|
var node = createBaseNode(239);
|
|
node.expression = expression;
|
|
node.thenStatement = asEmbeddedStatement(thenStatement);
|
|
node.elseStatement = asEmbeddedStatement(elseStatement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.thenStatement) |
|
|
propagateChildFlags(node.elseStatement);
|
|
return node;
|
|
}
|
|
function updateIfStatement(node, expression, thenStatement, elseStatement) {
|
|
return node.expression !== expression
|
|
|| node.thenStatement !== thenStatement
|
|
|| node.elseStatement !== elseStatement
|
|
? update(createIfStatement(expression, thenStatement, elseStatement), node)
|
|
: node;
|
|
}
|
|
function createDoStatement(statement, expression) {
|
|
var node = createBaseNode(240);
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.expression = expression;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.statement) |
|
|
propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateDoStatement(node, statement, expression) {
|
|
return node.statement !== statement
|
|
|| node.expression !== expression
|
|
? update(createDoStatement(statement, expression), node)
|
|
: node;
|
|
}
|
|
function createWhileStatement(expression, statement) {
|
|
var node = createBaseNode(241);
|
|
node.expression = expression;
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.statement);
|
|
return node;
|
|
}
|
|
function updateWhileStatement(node, expression, statement) {
|
|
return node.expression !== expression
|
|
|| node.statement !== statement
|
|
? update(createWhileStatement(expression, statement), node)
|
|
: node;
|
|
}
|
|
function createForStatement(initializer, condition, incrementor, statement) {
|
|
var node = createBaseNode(242);
|
|
node.initializer = initializer;
|
|
node.condition = condition;
|
|
node.incrementor = incrementor;
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.initializer) |
|
|
propagateChildFlags(node.condition) |
|
|
propagateChildFlags(node.incrementor) |
|
|
propagateChildFlags(node.statement);
|
|
return node;
|
|
}
|
|
function updateForStatement(node, initializer, condition, incrementor, statement) {
|
|
return node.initializer !== initializer
|
|
|| node.condition !== condition
|
|
|| node.incrementor !== incrementor
|
|
|| node.statement !== statement
|
|
? update(createForStatement(initializer, condition, incrementor, statement), node)
|
|
: node;
|
|
}
|
|
function createForInStatement(initializer, expression, statement) {
|
|
var node = createBaseNode(243);
|
|
node.initializer = initializer;
|
|
node.expression = expression;
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.initializer) |
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.statement);
|
|
return node;
|
|
}
|
|
function updateForInStatement(node, initializer, expression, statement) {
|
|
return node.initializer !== initializer
|
|
|| node.expression !== expression
|
|
|| node.statement !== statement
|
|
? update(createForInStatement(initializer, expression, statement), node)
|
|
: node;
|
|
}
|
|
function createForOfStatement(awaitModifier, initializer, expression, statement) {
|
|
var node = createBaseNode(244);
|
|
node.awaitModifier = awaitModifier;
|
|
node.initializer = initializer;
|
|
node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.awaitModifier) |
|
|
propagateChildFlags(node.initializer) |
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.statement) |
|
|
1024;
|
|
if (awaitModifier)
|
|
node.transformFlags |= 128;
|
|
return node;
|
|
}
|
|
function updateForOfStatement(node, awaitModifier, initializer, expression, statement) {
|
|
return node.awaitModifier !== awaitModifier
|
|
|| node.initializer !== initializer
|
|
|| node.expression !== expression
|
|
|| node.statement !== statement
|
|
? update(createForOfStatement(awaitModifier, initializer, expression, statement), node)
|
|
: node;
|
|
}
|
|
function createContinueStatement(label) {
|
|
var node = createBaseNode(245);
|
|
node.label = asName(label);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.label) |
|
|
4194304;
|
|
return node;
|
|
}
|
|
function updateContinueStatement(node, label) {
|
|
return node.label !== label
|
|
? update(createContinueStatement(label), node)
|
|
: node;
|
|
}
|
|
function createBreakStatement(label) {
|
|
var node = createBaseNode(246);
|
|
node.label = asName(label);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.label) |
|
|
4194304;
|
|
return node;
|
|
}
|
|
function updateBreakStatement(node, label) {
|
|
return node.label !== label
|
|
? update(createBreakStatement(label), node)
|
|
: node;
|
|
}
|
|
function createReturnStatement(expression) {
|
|
var node = createBaseNode(247);
|
|
node.expression = expression;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
128 |
|
|
4194304;
|
|
return node;
|
|
}
|
|
function updateReturnStatement(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createReturnStatement(expression), node)
|
|
: node;
|
|
}
|
|
function createWithStatement(expression, statement) {
|
|
var node = createBaseNode(248);
|
|
node.expression = expression;
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.statement);
|
|
return node;
|
|
}
|
|
function updateWithStatement(node, expression, statement) {
|
|
return node.expression !== expression
|
|
|| node.statement !== statement
|
|
? update(createWithStatement(expression, statement), node)
|
|
: node;
|
|
}
|
|
function createSwitchStatement(expression, caseBlock) {
|
|
var node = createBaseNode(249);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.caseBlock = caseBlock;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.caseBlock);
|
|
return node;
|
|
}
|
|
function updateSwitchStatement(node, expression, caseBlock) {
|
|
return node.expression !== expression
|
|
|| node.caseBlock !== caseBlock
|
|
? update(createSwitchStatement(expression, caseBlock), node)
|
|
: node;
|
|
}
|
|
function createLabeledStatement(label, statement) {
|
|
var node = createBaseNode(250);
|
|
node.label = asName(label);
|
|
node.statement = asEmbeddedStatement(statement);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.label) |
|
|
propagateChildFlags(node.statement);
|
|
return node;
|
|
}
|
|
function updateLabeledStatement(node, label, statement) {
|
|
return node.label !== label
|
|
|| node.statement !== statement
|
|
? update(createLabeledStatement(label, statement), node)
|
|
: node;
|
|
}
|
|
function createThrowStatement(expression) {
|
|
var node = createBaseNode(251);
|
|
node.expression = expression;
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
return node;
|
|
}
|
|
function updateThrowStatement(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createThrowStatement(expression), node)
|
|
: node;
|
|
}
|
|
function createTryStatement(tryBlock, catchClause, finallyBlock) {
|
|
var node = createBaseNode(252);
|
|
node.tryBlock = tryBlock;
|
|
node.catchClause = catchClause;
|
|
node.finallyBlock = finallyBlock;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.tryBlock) |
|
|
propagateChildFlags(node.catchClause) |
|
|
propagateChildFlags(node.finallyBlock);
|
|
return node;
|
|
}
|
|
function updateTryStatement(node, tryBlock, catchClause, finallyBlock) {
|
|
return node.tryBlock !== tryBlock
|
|
|| node.catchClause !== catchClause
|
|
|| node.finallyBlock !== finallyBlock
|
|
? update(createTryStatement(tryBlock, catchClause, finallyBlock), node)
|
|
: node;
|
|
}
|
|
function createDebuggerStatement() {
|
|
return createBaseNode(253);
|
|
}
|
|
function createVariableDeclaration(name, exclamationToken, type, initializer) {
|
|
var node = createBaseVariableLikeDeclaration(254, undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
|
|
node.exclamationToken = exclamationToken;
|
|
node.transformFlags |= propagateChildFlags(node.exclamationToken);
|
|
if (exclamationToken) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updateVariableDeclaration(node, name, exclamationToken, type, initializer) {
|
|
return node.name !== name
|
|
|| node.type !== type
|
|
|| node.exclamationToken !== exclamationToken
|
|
|| node.initializer !== initializer
|
|
? update(createVariableDeclaration(name, exclamationToken, type, initializer), node)
|
|
: node;
|
|
}
|
|
function createVariableDeclarationList(declarations, flags) {
|
|
if (flags === void 0) { flags = 0; }
|
|
var node = createBaseNode(255);
|
|
node.flags |= flags & 3;
|
|
node.declarations = createNodeArray(declarations);
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.declarations) |
|
|
4194304;
|
|
if (flags & 3) {
|
|
node.transformFlags |=
|
|
1024 |
|
|
262144;
|
|
}
|
|
return node;
|
|
}
|
|
function updateVariableDeclarationList(node, declarations) {
|
|
return node.declarations !== declarations
|
|
? update(createVariableDeclarationList(declarations, node.flags), node)
|
|
: node;
|
|
}
|
|
function createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
|
|
var node = createBaseFunctionLikeDeclaration(256, modifiers, name, typeParameters, parameters, type, body);
|
|
node.asteriskToken = asteriskToken;
|
|
if (!node.body || ts.modifiersToFlags(node.modifiers) & 2) {
|
|
node.transformFlags = 1;
|
|
}
|
|
else {
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.asteriskToken) |
|
|
4194304;
|
|
if (ts.modifiersToFlags(node.modifiers) & 256) {
|
|
if (node.asteriskToken) {
|
|
node.transformFlags |= 128;
|
|
}
|
|
else {
|
|
node.transformFlags |= 256;
|
|
}
|
|
}
|
|
else if (node.asteriskToken) {
|
|
node.transformFlags |= 2048;
|
|
}
|
|
}
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateFunctionDeclaration(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.asteriskToken !== asteriskToken
|
|
|| node.name !== name
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
|| node.body !== body
|
|
? finishUpdateFunctionDeclaration(createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node)
|
|
: node;
|
|
}
|
|
function finishUpdateFunctionDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return finishUpdateBaseSignatureDeclaration(updated, original);
|
|
}
|
|
function createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) {
|
|
var node = createBaseClassLikeDeclaration(257, modifiers, name, typeParameters, heritageClauses, members);
|
|
if (ts.modifiersToFlags(node.modifiers) & 2) {
|
|
node.transformFlags = 1;
|
|
}
|
|
else {
|
|
node.transformFlags |= 1024;
|
|
if (node.transformFlags & 8192) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function updateClassDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.heritageClauses !== heritageClauses
|
|
|| node.members !== members
|
|
? update(createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members), node)
|
|
: node;
|
|
}
|
|
function createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) {
|
|
var node = createBaseInterfaceOrClassLikeDeclaration(258, modifiers, name, typeParameters, heritageClauses);
|
|
node.members = createNodeArray(members);
|
|
node.transformFlags = 1;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateInterfaceDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.heritageClauses !== heritageClauses
|
|
|| node.members !== members
|
|
? finishUpdateInterfaceDeclaration(createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members), node)
|
|
: node;
|
|
}
|
|
function finishUpdateInterfaceDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createTypeAliasDeclaration(modifiers, name, typeParameters, type) {
|
|
var node = createBaseGenericNamedDeclaration(259, modifiers, name, typeParameters);
|
|
node.type = type;
|
|
node.transformFlags = 1;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateTypeAliasDeclaration(node, modifiers, name, typeParameters, type) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.type !== type
|
|
? finishUpdateTypeAliasDeclaration(createTypeAliasDeclaration(modifiers, name, typeParameters, type), node)
|
|
: node;
|
|
}
|
|
function finishUpdateTypeAliasDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createEnumDeclaration(modifiers, name, members) {
|
|
var node = createBaseNamedDeclaration(260, modifiers, name);
|
|
node.members = createNodeArray(members);
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.members) |
|
|
1;
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateEnumDeclaration(node, modifiers, name, members) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.members !== members
|
|
? finishUpdateEnumDeclaration(createEnumDeclaration(modifiers, name, members), node)
|
|
: node;
|
|
}
|
|
function finishUpdateEnumDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createModuleDeclaration(modifiers, name, body, flags) {
|
|
if (flags === void 0) { flags = 0; }
|
|
var node = createBaseDeclaration(261);
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.flags |= flags & (16 | 4 | 1024);
|
|
node.name = name;
|
|
node.body = body;
|
|
if (ts.modifiersToFlags(node.modifiers) & 2) {
|
|
node.transformFlags = 1;
|
|
}
|
|
else {
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.modifiers) |
|
|
propagateChildFlags(node.name) |
|
|
propagateChildFlags(node.body) |
|
|
1;
|
|
}
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateModuleDeclaration(node, modifiers, name, body) {
|
|
return node.modifiers !== modifiers
|
|
|| node.name !== name
|
|
|| node.body !== body
|
|
? finishUpdateModuleDeclaration(createModuleDeclaration(modifiers, name, body, node.flags), node)
|
|
: node;
|
|
}
|
|
function finishUpdateModuleDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createModuleBlock(statements) {
|
|
var node = createBaseNode(262);
|
|
node.statements = createNodeArray(statements);
|
|
node.transformFlags |= propagateChildrenFlags(node.statements);
|
|
return node;
|
|
}
|
|
function updateModuleBlock(node, statements) {
|
|
return node.statements !== statements
|
|
? update(createModuleBlock(statements), node)
|
|
: node;
|
|
}
|
|
function createCaseBlock(clauses) {
|
|
var node = createBaseNode(263);
|
|
node.clauses = createNodeArray(clauses);
|
|
node.transformFlags |= propagateChildrenFlags(node.clauses);
|
|
return node;
|
|
}
|
|
function updateCaseBlock(node, clauses) {
|
|
return node.clauses !== clauses
|
|
? update(createCaseBlock(clauses), node)
|
|
: node;
|
|
}
|
|
function createNamespaceExportDeclaration(name) {
|
|
var node = createBaseNamedDeclaration(264, undefined, name);
|
|
node.transformFlags = 1;
|
|
node.illegalDecorators = undefined;
|
|
node.modifiers = undefined;
|
|
return node;
|
|
}
|
|
function updateNamespaceExportDeclaration(node, name) {
|
|
return node.name !== name
|
|
? finishUpdateNamespaceExportDeclaration(createNamespaceExportDeclaration(name), node)
|
|
: node;
|
|
}
|
|
function finishUpdateNamespaceExportDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
updated.modifiers = original.modifiers;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createImportEqualsDeclaration(modifiers, isTypeOnly, name, moduleReference) {
|
|
var node = createBaseNamedDeclaration(265, modifiers, name);
|
|
node.isTypeOnly = isTypeOnly;
|
|
node.moduleReference = moduleReference;
|
|
node.transformFlags |= propagateChildFlags(node.moduleReference);
|
|
if (!ts.isExternalModuleReference(node.moduleReference))
|
|
node.transformFlags |= 1;
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateImportEqualsDeclaration(node, modifiers, isTypeOnly, name, moduleReference) {
|
|
return node.modifiers !== modifiers
|
|
|| node.isTypeOnly !== isTypeOnly
|
|
|| node.name !== name
|
|
|| node.moduleReference !== moduleReference
|
|
? finishUpdateImportEqualsDeclaration(createImportEqualsDeclaration(modifiers, isTypeOnly, name, moduleReference), node)
|
|
: node;
|
|
}
|
|
function finishUpdateImportEqualsDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createImportDeclaration(modifiers, importClause, moduleSpecifier, assertClause) {
|
|
var node = createBaseDeclaration(266);
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.importClause = importClause;
|
|
node.moduleSpecifier = moduleSpecifier;
|
|
node.assertClause = assertClause;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.importClause) |
|
|
propagateChildFlags(node.moduleSpecifier);
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateImportDeclaration(node, modifiers, importClause, moduleSpecifier, assertClause) {
|
|
return node.modifiers !== modifiers
|
|
|| node.importClause !== importClause
|
|
|| node.moduleSpecifier !== moduleSpecifier
|
|
|| node.assertClause !== assertClause
|
|
? finishUpdateImportDeclaration(createImportDeclaration(modifiers, importClause, moduleSpecifier, assertClause), node)
|
|
: node;
|
|
}
|
|
function finishUpdateImportDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createImportClause(isTypeOnly, name, namedBindings) {
|
|
var node = createBaseNode(267);
|
|
node.isTypeOnly = isTypeOnly;
|
|
node.name = name;
|
|
node.namedBindings = namedBindings;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.name) |
|
|
propagateChildFlags(node.namedBindings);
|
|
if (isTypeOnly) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateImportClause(node, isTypeOnly, name, namedBindings) {
|
|
return node.isTypeOnly !== isTypeOnly
|
|
|| node.name !== name
|
|
|| node.namedBindings !== namedBindings
|
|
? update(createImportClause(isTypeOnly, name, namedBindings), node)
|
|
: node;
|
|
}
|
|
function createAssertClause(elements, multiLine) {
|
|
var node = createBaseNode(293);
|
|
node.elements = createNodeArray(elements);
|
|
node.multiLine = multiLine;
|
|
node.transformFlags |= 4;
|
|
return node;
|
|
}
|
|
function updateAssertClause(node, elements, multiLine) {
|
|
return node.elements !== elements
|
|
|| node.multiLine !== multiLine
|
|
? update(createAssertClause(elements, multiLine), node)
|
|
: node;
|
|
}
|
|
function createAssertEntry(name, value) {
|
|
var node = createBaseNode(294);
|
|
node.name = name;
|
|
node.value = value;
|
|
node.transformFlags |= 4;
|
|
return node;
|
|
}
|
|
function updateAssertEntry(node, name, value) {
|
|
return node.name !== name
|
|
|| node.value !== value
|
|
? update(createAssertEntry(name, value), node)
|
|
: node;
|
|
}
|
|
function createImportTypeAssertionContainer(clause, multiLine) {
|
|
var node = createBaseNode(295);
|
|
node.assertClause = clause;
|
|
node.multiLine = multiLine;
|
|
return node;
|
|
}
|
|
function updateImportTypeAssertionContainer(node, clause, multiLine) {
|
|
return node.assertClause !== clause
|
|
|| node.multiLine !== multiLine
|
|
? update(createImportTypeAssertionContainer(clause, multiLine), node)
|
|
: node;
|
|
}
|
|
function createNamespaceImport(name) {
|
|
var node = createBaseNode(268);
|
|
node.name = name;
|
|
node.transformFlags |= propagateChildFlags(node.name);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateNamespaceImport(node, name) {
|
|
return node.name !== name
|
|
? update(createNamespaceImport(name), node)
|
|
: node;
|
|
}
|
|
function createNamespaceExport(name) {
|
|
var node = createBaseNode(274);
|
|
node.name = name;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.name) |
|
|
4;
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateNamespaceExport(node, name) {
|
|
return node.name !== name
|
|
? update(createNamespaceExport(name), node)
|
|
: node;
|
|
}
|
|
function createNamedImports(elements) {
|
|
var node = createBaseNode(269);
|
|
node.elements = createNodeArray(elements);
|
|
node.transformFlags |= propagateChildrenFlags(node.elements);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateNamedImports(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createNamedImports(elements), node)
|
|
: node;
|
|
}
|
|
function createImportSpecifier(isTypeOnly, propertyName, name) {
|
|
var node = createBaseNode(270);
|
|
node.isTypeOnly = isTypeOnly;
|
|
node.propertyName = propertyName;
|
|
node.name = name;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.propertyName) |
|
|
propagateChildFlags(node.name);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateImportSpecifier(node, isTypeOnly, propertyName, name) {
|
|
return node.isTypeOnly !== isTypeOnly
|
|
|| node.propertyName !== propertyName
|
|
|| node.name !== name
|
|
? update(createImportSpecifier(isTypeOnly, propertyName, name), node)
|
|
: node;
|
|
}
|
|
function createExportAssignment(modifiers, isExportEquals, expression) {
|
|
var node = createBaseDeclaration(271);
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.isExportEquals = isExportEquals;
|
|
node.expression = isExportEquals
|
|
? parenthesizerRules().parenthesizeRightSideOfBinary(63, undefined, expression)
|
|
: parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
|
|
node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.expression);
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateExportAssignment(node, modifiers, expression) {
|
|
return node.modifiers !== modifiers
|
|
|| node.expression !== expression
|
|
? finishUpdateExportAssignment(createExportAssignment(modifiers, node.isExportEquals, expression), node)
|
|
: node;
|
|
}
|
|
function finishUpdateExportAssignment(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, assertClause) {
|
|
var node = createBaseDeclaration(272);
|
|
node.modifiers = asNodeArray(modifiers);
|
|
node.isTypeOnly = isTypeOnly;
|
|
node.exportClause = exportClause;
|
|
node.moduleSpecifier = moduleSpecifier;
|
|
node.assertClause = assertClause;
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.modifiers) |
|
|
propagateChildFlags(node.exportClause) |
|
|
propagateChildFlags(node.moduleSpecifier);
|
|
node.transformFlags &= ~67108864;
|
|
node.illegalDecorators = undefined;
|
|
return node;
|
|
}
|
|
function updateExportDeclaration(node, modifiers, isTypeOnly, exportClause, moduleSpecifier, assertClause) {
|
|
return node.modifiers !== modifiers
|
|
|| node.isTypeOnly !== isTypeOnly
|
|
|| node.exportClause !== exportClause
|
|
|| node.moduleSpecifier !== moduleSpecifier
|
|
|| node.assertClause !== assertClause
|
|
? finishUpdateExportDeclaration(createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, assertClause), node)
|
|
: node;
|
|
}
|
|
function finishUpdateExportDeclaration(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createNamedExports(elements) {
|
|
var node = createBaseNode(273);
|
|
node.elements = createNodeArray(elements);
|
|
node.transformFlags |= propagateChildrenFlags(node.elements);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateNamedExports(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createNamedExports(elements), node)
|
|
: node;
|
|
}
|
|
function createExportSpecifier(isTypeOnly, propertyName, name) {
|
|
var node = createBaseNode(275);
|
|
node.isTypeOnly = isTypeOnly;
|
|
node.propertyName = asName(propertyName);
|
|
node.name = asName(name);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.propertyName) |
|
|
propagateChildFlags(node.name);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateExportSpecifier(node, isTypeOnly, propertyName, name) {
|
|
return node.isTypeOnly !== isTypeOnly
|
|
|| node.propertyName !== propertyName
|
|
|| node.name !== name
|
|
? update(createExportSpecifier(isTypeOnly, propertyName, name), node)
|
|
: node;
|
|
}
|
|
function createMissingDeclaration() {
|
|
var node = createBaseDeclaration(276);
|
|
return node;
|
|
}
|
|
function createExternalModuleReference(expression) {
|
|
var node = createBaseNode(277);
|
|
node.expression = expression;
|
|
node.transformFlags |= propagateChildFlags(node.expression);
|
|
node.transformFlags &= ~67108864;
|
|
return node;
|
|
}
|
|
function updateExternalModuleReference(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createExternalModuleReference(expression), node)
|
|
: node;
|
|
}
|
|
function createJSDocPrimaryTypeWorker(kind) {
|
|
return createBaseNode(kind);
|
|
}
|
|
function createJSDocPrePostfixUnaryTypeWorker(kind, type, postfix) {
|
|
if (postfix === void 0) { postfix = false; }
|
|
var node = createJSDocUnaryTypeWorker(kind, postfix ? type && parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(type) : type);
|
|
node.postfix = postfix;
|
|
return node;
|
|
}
|
|
function createJSDocUnaryTypeWorker(kind, type) {
|
|
var node = createBaseNode(kind);
|
|
node.type = type;
|
|
return node;
|
|
}
|
|
function updateJSDocPrePostfixUnaryTypeWorker(kind, node, type) {
|
|
return node.type !== type
|
|
? update(createJSDocPrePostfixUnaryTypeWorker(kind, type, node.postfix), node)
|
|
: node;
|
|
}
|
|
function updateJSDocUnaryTypeWorker(kind, node, type) {
|
|
return node.type !== type
|
|
? update(createJSDocUnaryTypeWorker(kind, type), node)
|
|
: node;
|
|
}
|
|
function createJSDocFunctionType(parameters, type) {
|
|
var node = createBaseSignatureDeclaration(317, undefined, undefined, undefined, parameters, type);
|
|
return node;
|
|
}
|
|
function updateJSDocFunctionType(node, parameters, type) {
|
|
return node.parameters !== parameters
|
|
|| node.type !== type
|
|
? update(createJSDocFunctionType(parameters, type), node)
|
|
: node;
|
|
}
|
|
function createJSDocTypeLiteral(propertyTags, isArrayType) {
|
|
if (isArrayType === void 0) { isArrayType = false; }
|
|
var node = createBaseNode(322);
|
|
node.jsDocPropertyTags = asNodeArray(propertyTags);
|
|
node.isArrayType = isArrayType;
|
|
return node;
|
|
}
|
|
function updateJSDocTypeLiteral(node, propertyTags, isArrayType) {
|
|
return node.jsDocPropertyTags !== propertyTags
|
|
|| node.isArrayType !== isArrayType
|
|
? update(createJSDocTypeLiteral(propertyTags, isArrayType), node)
|
|
: node;
|
|
}
|
|
function createJSDocTypeExpression(type) {
|
|
var node = createBaseNode(309);
|
|
node.type = type;
|
|
return node;
|
|
}
|
|
function updateJSDocTypeExpression(node, type) {
|
|
return node.type !== type
|
|
? update(createJSDocTypeExpression(type), node)
|
|
: node;
|
|
}
|
|
function createJSDocSignature(typeParameters, parameters, type) {
|
|
var node = createBaseNode(323);
|
|
node.typeParameters = asNodeArray(typeParameters);
|
|
node.parameters = createNodeArray(parameters);
|
|
node.type = type;
|
|
return node;
|
|
}
|
|
function updateJSDocSignature(node, typeParameters, parameters, type) {
|
|
return node.typeParameters !== typeParameters
|
|
|| node.parameters !== parameters
|
|
|| node.type !== type
|
|
? update(createJSDocSignature(typeParameters, parameters, type), node)
|
|
: node;
|
|
}
|
|
function getDefaultTagName(node) {
|
|
var defaultTagName = getDefaultTagNameForKind(node.kind);
|
|
return node.tagName.escapedText === ts.escapeLeadingUnderscores(defaultTagName)
|
|
? node.tagName
|
|
: createIdentifier(defaultTagName);
|
|
}
|
|
function createBaseJSDocTag(kind, tagName, comment) {
|
|
var node = createBaseNode(kind);
|
|
node.tagName = tagName;
|
|
node.comment = comment;
|
|
return node;
|
|
}
|
|
function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
|
|
var node = createBaseJSDocTag(344, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
|
|
node.constraint = constraint;
|
|
node.typeParameters = createNodeArray(typeParameters);
|
|
return node;
|
|
}
|
|
function updateJSDocTemplateTag(node, tagName, constraint, typeParameters, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.constraint !== constraint
|
|
|| node.typeParameters !== typeParameters
|
|
|| node.comment !== comment
|
|
? update(createJSDocTemplateTag(tagName, constraint, typeParameters, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
|
|
var node = createBaseJSDocTag(345, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
|
|
node.typeExpression = typeExpression;
|
|
node.fullName = fullName;
|
|
node.name = ts.getJSDocTypeAliasName(fullName);
|
|
return node;
|
|
}
|
|
function updateJSDocTypedefTag(node, tagName, typeExpression, fullName, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.typeExpression !== typeExpression
|
|
|| node.fullName !== fullName
|
|
|| node.comment !== comment
|
|
? update(createJSDocTypedefTag(tagName, typeExpression, fullName, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
|
|
var node = createBaseJSDocTag(340, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
|
|
node.typeExpression = typeExpression;
|
|
node.name = name;
|
|
node.isNameFirst = !!isNameFirst;
|
|
node.isBracketed = isBracketed;
|
|
return node;
|
|
}
|
|
function updateJSDocParameterTag(node, tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.name !== name
|
|
|| node.isBracketed !== isBracketed
|
|
|| node.typeExpression !== typeExpression
|
|
|| node.isNameFirst !== isNameFirst
|
|
|| node.comment !== comment
|
|
? update(createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
|
|
var node = createBaseJSDocTag(347, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
|
|
node.typeExpression = typeExpression;
|
|
node.name = name;
|
|
node.isNameFirst = !!isNameFirst;
|
|
node.isBracketed = isBracketed;
|
|
return node;
|
|
}
|
|
function updateJSDocPropertyTag(node, tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.name !== name
|
|
|| node.isBracketed !== isBracketed
|
|
|| node.typeExpression !== typeExpression
|
|
|| node.isNameFirst !== isNameFirst
|
|
|| node.comment !== comment
|
|
? update(createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
|
|
var node = createBaseJSDocTag(338, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
|
|
node.typeExpression = typeExpression;
|
|
node.fullName = fullName;
|
|
node.name = ts.getJSDocTypeAliasName(fullName);
|
|
return node;
|
|
}
|
|
function updateJSDocCallbackTag(node, tagName, typeExpression, fullName, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.typeExpression !== typeExpression
|
|
|| node.fullName !== fullName
|
|
|| node.comment !== comment
|
|
? update(createJSDocCallbackTag(tagName, typeExpression, fullName, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocAugmentsTag(tagName, className, comment) {
|
|
var node = createBaseJSDocTag(328, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
|
|
node.class = className;
|
|
return node;
|
|
}
|
|
function updateJSDocAugmentsTag(node, tagName, className, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.class !== className
|
|
|| node.comment !== comment
|
|
? update(createJSDocAugmentsTag(tagName, className, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocImplementsTag(tagName, className, comment) {
|
|
var node = createBaseJSDocTag(329, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
|
|
node.class = className;
|
|
return node;
|
|
}
|
|
function createJSDocSeeTag(tagName, name, comment) {
|
|
var node = createBaseJSDocTag(346, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
|
|
node.name = name;
|
|
return node;
|
|
}
|
|
function updateJSDocSeeTag(node, tagName, name, comment) {
|
|
return node.tagName !== tagName
|
|
|| node.name !== name
|
|
|| node.comment !== comment
|
|
? update(createJSDocSeeTag(tagName, name, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocNameReference(name) {
|
|
var node = createBaseNode(310);
|
|
node.name = name;
|
|
return node;
|
|
}
|
|
function updateJSDocNameReference(node, name) {
|
|
return node.name !== name
|
|
? update(createJSDocNameReference(name), node)
|
|
: node;
|
|
}
|
|
function createJSDocMemberName(left, right) {
|
|
var node = createBaseNode(311);
|
|
node.left = left;
|
|
node.right = right;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.left) |
|
|
propagateChildFlags(node.right);
|
|
return node;
|
|
}
|
|
function updateJSDocMemberName(node, left, right) {
|
|
return node.left !== left
|
|
|| node.right !== right
|
|
? update(createJSDocMemberName(left, right), node)
|
|
: node;
|
|
}
|
|
function createJSDocLink(name, text) {
|
|
var node = createBaseNode(324);
|
|
node.name = name;
|
|
node.text = text;
|
|
return node;
|
|
}
|
|
function updateJSDocLink(node, name, text) {
|
|
return node.name !== name
|
|
? update(createJSDocLink(name, text), node)
|
|
: node;
|
|
}
|
|
function createJSDocLinkCode(name, text) {
|
|
var node = createBaseNode(325);
|
|
node.name = name;
|
|
node.text = text;
|
|
return node;
|
|
}
|
|
function updateJSDocLinkCode(node, name, text) {
|
|
return node.name !== name
|
|
? update(createJSDocLinkCode(name, text), node)
|
|
: node;
|
|
}
|
|
function createJSDocLinkPlain(name, text) {
|
|
var node = createBaseNode(326);
|
|
node.name = name;
|
|
node.text = text;
|
|
return node;
|
|
}
|
|
function updateJSDocLinkPlain(node, name, text) {
|
|
return node.name !== name
|
|
? update(createJSDocLinkPlain(name, text), node)
|
|
: node;
|
|
}
|
|
function updateJSDocImplementsTag(node, tagName, className, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.class !== className
|
|
|| node.comment !== comment
|
|
? update(createJSDocImplementsTag(tagName, className, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocSimpleTagWorker(kind, tagName, comment) {
|
|
var node = createBaseJSDocTag(kind, tagName !== null && tagName !== void 0 ? tagName : createIdentifier(getDefaultTagNameForKind(kind)), comment);
|
|
return node;
|
|
}
|
|
function updateJSDocSimpleTagWorker(kind, node, tagName, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.comment !== comment
|
|
? update(createJSDocSimpleTagWorker(kind, tagName, comment), node) :
|
|
node;
|
|
}
|
|
function createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment) {
|
|
var node = createBaseJSDocTag(kind, tagName !== null && tagName !== void 0 ? tagName : createIdentifier(getDefaultTagNameForKind(kind)), comment);
|
|
node.typeExpression = typeExpression;
|
|
return node;
|
|
}
|
|
function updateJSDocTypeLikeTagWorker(kind, node, tagName, typeExpression, comment) {
|
|
if (tagName === void 0) { tagName = getDefaultTagName(node); }
|
|
return node.tagName !== tagName
|
|
|| node.typeExpression !== typeExpression
|
|
|| node.comment !== comment
|
|
? update(createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocUnknownTag(tagName, comment) {
|
|
var node = createBaseJSDocTag(327, tagName, comment);
|
|
return node;
|
|
}
|
|
function updateJSDocUnknownTag(node, tagName, comment) {
|
|
return node.tagName !== tagName
|
|
|| node.comment !== comment
|
|
? update(createJSDocUnknownTag(tagName, comment), node)
|
|
: node;
|
|
}
|
|
function createJSDocText(text) {
|
|
var node = createBaseNode(321);
|
|
node.text = text;
|
|
return node;
|
|
}
|
|
function updateJSDocText(node, text) {
|
|
return node.text !== text
|
|
? update(createJSDocText(text), node)
|
|
: node;
|
|
}
|
|
function createJSDocComment(comment, tags) {
|
|
var node = createBaseNode(320);
|
|
node.comment = comment;
|
|
node.tags = asNodeArray(tags);
|
|
return node;
|
|
}
|
|
function updateJSDocComment(node, comment, tags) {
|
|
return node.comment !== comment
|
|
|| node.tags !== tags
|
|
? update(createJSDocComment(comment, tags), node)
|
|
: node;
|
|
}
|
|
function createJsxElement(openingElement, children, closingElement) {
|
|
var node = createBaseNode(278);
|
|
node.openingElement = openingElement;
|
|
node.children = createNodeArray(children);
|
|
node.closingElement = closingElement;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.openingElement) |
|
|
propagateChildrenFlags(node.children) |
|
|
propagateChildFlags(node.closingElement) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxElement(node, openingElement, children, closingElement) {
|
|
return node.openingElement !== openingElement
|
|
|| node.children !== children
|
|
|| node.closingElement !== closingElement
|
|
? update(createJsxElement(openingElement, children, closingElement), node)
|
|
: node;
|
|
}
|
|
function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
|
|
var node = createBaseNode(279);
|
|
node.tagName = tagName;
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.attributes = attributes;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.tagName) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildFlags(node.attributes) |
|
|
2;
|
|
if (node.typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updateJsxSelfClosingElement(node, tagName, typeArguments, attributes) {
|
|
return node.tagName !== tagName
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.attributes !== attributes
|
|
? update(createJsxSelfClosingElement(tagName, typeArguments, attributes), node)
|
|
: node;
|
|
}
|
|
function createJsxOpeningElement(tagName, typeArguments, attributes) {
|
|
var node = createBaseNode(280);
|
|
node.tagName = tagName;
|
|
node.typeArguments = asNodeArray(typeArguments);
|
|
node.attributes = attributes;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.tagName) |
|
|
propagateChildrenFlags(node.typeArguments) |
|
|
propagateChildFlags(node.attributes) |
|
|
2;
|
|
if (typeArguments) {
|
|
node.transformFlags |= 1;
|
|
}
|
|
return node;
|
|
}
|
|
function updateJsxOpeningElement(node, tagName, typeArguments, attributes) {
|
|
return node.tagName !== tagName
|
|
|| node.typeArguments !== typeArguments
|
|
|| node.attributes !== attributes
|
|
? update(createJsxOpeningElement(tagName, typeArguments, attributes), node)
|
|
: node;
|
|
}
|
|
function createJsxClosingElement(tagName) {
|
|
var node = createBaseNode(281);
|
|
node.tagName = tagName;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.tagName) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxClosingElement(node, tagName) {
|
|
return node.tagName !== tagName
|
|
? update(createJsxClosingElement(tagName), node)
|
|
: node;
|
|
}
|
|
function createJsxFragment(openingFragment, children, closingFragment) {
|
|
var node = createBaseNode(282);
|
|
node.openingFragment = openingFragment;
|
|
node.children = createNodeArray(children);
|
|
node.closingFragment = closingFragment;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.openingFragment) |
|
|
propagateChildrenFlags(node.children) |
|
|
propagateChildFlags(node.closingFragment) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxFragment(node, openingFragment, children, closingFragment) {
|
|
return node.openingFragment !== openingFragment
|
|
|| node.children !== children
|
|
|| node.closingFragment !== closingFragment
|
|
? update(createJsxFragment(openingFragment, children, closingFragment), node)
|
|
: node;
|
|
}
|
|
function createJsxText(text, containsOnlyTriviaWhiteSpaces) {
|
|
var node = createBaseNode(11);
|
|
node.text = text;
|
|
node.containsOnlyTriviaWhiteSpaces = !!containsOnlyTriviaWhiteSpaces;
|
|
node.transformFlags |= 2;
|
|
return node;
|
|
}
|
|
function updateJsxText(node, text, containsOnlyTriviaWhiteSpaces) {
|
|
return node.text !== text
|
|
|| node.containsOnlyTriviaWhiteSpaces !== containsOnlyTriviaWhiteSpaces
|
|
? update(createJsxText(text, containsOnlyTriviaWhiteSpaces), node)
|
|
: node;
|
|
}
|
|
function createJsxOpeningFragment() {
|
|
var node = createBaseNode(283);
|
|
node.transformFlags |= 2;
|
|
return node;
|
|
}
|
|
function createJsxJsxClosingFragment() {
|
|
var node = createBaseNode(284);
|
|
node.transformFlags |= 2;
|
|
return node;
|
|
}
|
|
function createJsxAttribute(name, initializer) {
|
|
var node = createBaseNode(285);
|
|
node.name = name;
|
|
node.initializer = initializer;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.name) |
|
|
propagateChildFlags(node.initializer) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxAttribute(node, name, initializer) {
|
|
return node.name !== name
|
|
|| node.initializer !== initializer
|
|
? update(createJsxAttribute(name, initializer), node)
|
|
: node;
|
|
}
|
|
function createJsxAttributes(properties) {
|
|
var node = createBaseNode(286);
|
|
node.properties = createNodeArray(properties);
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.properties) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxAttributes(node, properties) {
|
|
return node.properties !== properties
|
|
? update(createJsxAttributes(properties), node)
|
|
: node;
|
|
}
|
|
function createJsxSpreadAttribute(expression) {
|
|
var node = createBaseNode(287);
|
|
node.expression = expression;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxSpreadAttribute(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createJsxSpreadAttribute(expression), node)
|
|
: node;
|
|
}
|
|
function createJsxExpression(dotDotDotToken, expression) {
|
|
var node = createBaseNode(288);
|
|
node.dotDotDotToken = dotDotDotToken;
|
|
node.expression = expression;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.dotDotDotToken) |
|
|
propagateChildFlags(node.expression) |
|
|
2;
|
|
return node;
|
|
}
|
|
function updateJsxExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createJsxExpression(node.dotDotDotToken, expression), node)
|
|
: node;
|
|
}
|
|
function createCaseClause(expression, statements) {
|
|
var node = createBaseNode(289);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.statements = createNodeArray(statements);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildrenFlags(node.statements);
|
|
return node;
|
|
}
|
|
function updateCaseClause(node, expression, statements) {
|
|
return node.expression !== expression
|
|
|| node.statements !== statements
|
|
? update(createCaseClause(expression, statements), node)
|
|
: node;
|
|
}
|
|
function createDefaultClause(statements) {
|
|
var node = createBaseNode(290);
|
|
node.statements = createNodeArray(statements);
|
|
node.transformFlags = propagateChildrenFlags(node.statements);
|
|
return node;
|
|
}
|
|
function updateDefaultClause(node, statements) {
|
|
return node.statements !== statements
|
|
? update(createDefaultClause(statements), node)
|
|
: node;
|
|
}
|
|
function createHeritageClause(token, types) {
|
|
var node = createBaseNode(291);
|
|
node.token = token;
|
|
node.types = createNodeArray(types);
|
|
node.transformFlags |= propagateChildrenFlags(node.types);
|
|
switch (token) {
|
|
case 94:
|
|
node.transformFlags |= 1024;
|
|
break;
|
|
case 117:
|
|
node.transformFlags |= 1;
|
|
break;
|
|
default:
|
|
return ts.Debug.assertNever(token);
|
|
}
|
|
return node;
|
|
}
|
|
function updateHeritageClause(node, types) {
|
|
return node.types !== types
|
|
? update(createHeritageClause(node.token, types), node)
|
|
: node;
|
|
}
|
|
function createCatchClause(variableDeclaration, block) {
|
|
var node = createBaseNode(292);
|
|
if (typeof variableDeclaration === "string" || variableDeclaration && !ts.isVariableDeclaration(variableDeclaration)) {
|
|
variableDeclaration = createVariableDeclaration(variableDeclaration, undefined, undefined, undefined);
|
|
}
|
|
node.variableDeclaration = variableDeclaration;
|
|
node.block = block;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.variableDeclaration) |
|
|
propagateChildFlags(node.block);
|
|
if (!variableDeclaration)
|
|
node.transformFlags |= 64;
|
|
return node;
|
|
}
|
|
function updateCatchClause(node, variableDeclaration, block) {
|
|
return node.variableDeclaration !== variableDeclaration
|
|
|| node.block !== block
|
|
? update(createCatchClause(variableDeclaration, block), node)
|
|
: node;
|
|
}
|
|
function createPropertyAssignment(name, initializer) {
|
|
var node = createBaseNamedDeclaration(296, undefined, name);
|
|
node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.name) |
|
|
propagateChildFlags(node.initializer);
|
|
node.illegalDecorators = undefined;
|
|
node.modifiers = undefined;
|
|
node.questionToken = undefined;
|
|
node.exclamationToken = undefined;
|
|
return node;
|
|
}
|
|
function updatePropertyAssignment(node, name, initializer) {
|
|
return node.name !== name
|
|
|| node.initializer !== initializer
|
|
? finishUpdatePropertyAssignment(createPropertyAssignment(name, initializer), node)
|
|
: node;
|
|
}
|
|
function finishUpdatePropertyAssignment(updated, original) {
|
|
if (updated !== original) {
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
updated.modifiers = original.modifiers;
|
|
updated.questionToken = original.questionToken;
|
|
updated.exclamationToken = original.exclamationToken;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
|
|
var node = createBaseNamedDeclaration(297, undefined, name);
|
|
node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.objectAssignmentInitializer) |
|
|
1024;
|
|
node.equalsToken = undefined;
|
|
node.illegalDecorators = undefined;
|
|
node.modifiers = undefined;
|
|
node.questionToken = undefined;
|
|
node.exclamationToken = undefined;
|
|
return node;
|
|
}
|
|
function updateShorthandPropertyAssignment(node, name, objectAssignmentInitializer) {
|
|
return node.name !== name
|
|
|| node.objectAssignmentInitializer !== objectAssignmentInitializer
|
|
? finishUpdateShorthandPropertyAssignment(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node)
|
|
: node;
|
|
}
|
|
function finishUpdateShorthandPropertyAssignment(updated, original) {
|
|
if (updated !== original) {
|
|
updated.equalsToken = original.equalsToken;
|
|
updated.illegalDecorators = original.illegalDecorators;
|
|
updated.modifiers = original.modifiers;
|
|
updated.questionToken = original.questionToken;
|
|
updated.exclamationToken = original.exclamationToken;
|
|
}
|
|
return update(updated, original);
|
|
}
|
|
function createSpreadAssignment(expression) {
|
|
var node = createBaseNode(298);
|
|
node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
128 |
|
|
65536;
|
|
return node;
|
|
}
|
|
function updateSpreadAssignment(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createSpreadAssignment(expression), node)
|
|
: node;
|
|
}
|
|
function createEnumMember(name, initializer) {
|
|
var node = createBaseNode(299);
|
|
node.name = asName(name);
|
|
node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.name) |
|
|
propagateChildFlags(node.initializer) |
|
|
1;
|
|
return node;
|
|
}
|
|
function updateEnumMember(node, name, initializer) {
|
|
return node.name !== name
|
|
|| node.initializer !== initializer
|
|
? update(createEnumMember(name, initializer), node)
|
|
: node;
|
|
}
|
|
function createSourceFile(statements, endOfFileToken, flags) {
|
|
var node = baseFactory.createBaseSourceFileNode(305);
|
|
node.statements = createNodeArray(statements);
|
|
node.endOfFileToken = endOfFileToken;
|
|
node.flags |= flags;
|
|
node.fileName = "";
|
|
node.text = "";
|
|
node.languageVersion = 0;
|
|
node.languageVariant = 0;
|
|
node.scriptKind = 0;
|
|
node.isDeclarationFile = false;
|
|
node.hasNoDefaultLib = false;
|
|
node.transformFlags |=
|
|
propagateChildrenFlags(node.statements) |
|
|
propagateChildFlags(node.endOfFileToken);
|
|
return node;
|
|
}
|
|
function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
|
|
var node = (source.redirectInfo ? Object.create(source.redirectInfo.redirectTarget) : baseFactory.createBaseSourceFileNode(305));
|
|
for (var p in source) {
|
|
if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
|
|
continue;
|
|
node[p] = source[p];
|
|
}
|
|
node.flags |= source.flags;
|
|
node.statements = createNodeArray(statements);
|
|
node.endOfFileToken = source.endOfFileToken;
|
|
node.isDeclarationFile = isDeclarationFile;
|
|
node.referencedFiles = referencedFiles;
|
|
node.typeReferenceDirectives = typeReferences;
|
|
node.hasNoDefaultLib = hasNoDefaultLib;
|
|
node.libReferenceDirectives = libReferences;
|
|
node.transformFlags =
|
|
propagateChildrenFlags(node.statements) |
|
|
propagateChildFlags(node.endOfFileToken);
|
|
node.impliedNodeFormat = source.impliedNodeFormat;
|
|
return node;
|
|
}
|
|
function updateSourceFile(node, statements, isDeclarationFile, referencedFiles, typeReferenceDirectives, hasNoDefaultLib, libReferenceDirectives) {
|
|
if (isDeclarationFile === void 0) { isDeclarationFile = node.isDeclarationFile; }
|
|
if (referencedFiles === void 0) { referencedFiles = node.referencedFiles; }
|
|
if (typeReferenceDirectives === void 0) { typeReferenceDirectives = node.typeReferenceDirectives; }
|
|
if (hasNoDefaultLib === void 0) { hasNoDefaultLib = node.hasNoDefaultLib; }
|
|
if (libReferenceDirectives === void 0) { libReferenceDirectives = node.libReferenceDirectives; }
|
|
return node.statements !== statements
|
|
|| node.isDeclarationFile !== isDeclarationFile
|
|
|| node.referencedFiles !== referencedFiles
|
|
|| node.typeReferenceDirectives !== typeReferenceDirectives
|
|
|| node.hasNoDefaultLib !== hasNoDefaultLib
|
|
|| node.libReferenceDirectives !== libReferenceDirectives
|
|
? update(cloneSourceFileWithChanges(node, statements, isDeclarationFile, referencedFiles, typeReferenceDirectives, hasNoDefaultLib, libReferenceDirectives), node)
|
|
: node;
|
|
}
|
|
function createBundle(sourceFiles, prepends) {
|
|
if (prepends === void 0) { prepends = ts.emptyArray; }
|
|
var node = createBaseNode(306);
|
|
node.prepends = prepends;
|
|
node.sourceFiles = sourceFiles;
|
|
return node;
|
|
}
|
|
function updateBundle(node, sourceFiles, prepends) {
|
|
if (prepends === void 0) { prepends = ts.emptyArray; }
|
|
return node.sourceFiles !== sourceFiles
|
|
|| node.prepends !== prepends
|
|
? update(createBundle(sourceFiles, prepends), node)
|
|
: node;
|
|
}
|
|
function createUnparsedSource(prologues, syntheticReferences, texts) {
|
|
var node = createBaseNode(307);
|
|
node.prologues = prologues;
|
|
node.syntheticReferences = syntheticReferences;
|
|
node.texts = texts;
|
|
node.fileName = "";
|
|
node.text = "";
|
|
node.referencedFiles = ts.emptyArray;
|
|
node.libReferenceDirectives = ts.emptyArray;
|
|
node.getLineAndCharacterOfPosition = function (pos) { return ts.getLineAndCharacterOfPosition(node, pos); };
|
|
return node;
|
|
}
|
|
function createBaseUnparsedNode(kind, data) {
|
|
var node = createBaseNode(kind);
|
|
node.data = data;
|
|
return node;
|
|
}
|
|
function createUnparsedPrologue(data) {
|
|
return createBaseUnparsedNode(300, data);
|
|
}
|
|
function createUnparsedPrepend(data, texts) {
|
|
var node = createBaseUnparsedNode(301, data);
|
|
node.texts = texts;
|
|
return node;
|
|
}
|
|
function createUnparsedTextLike(data, internal) {
|
|
return createBaseUnparsedNode(internal ? 303 : 302, data);
|
|
}
|
|
function createUnparsedSyntheticReference(section) {
|
|
var node = createBaseNode(304);
|
|
node.data = section.data;
|
|
node.section = section;
|
|
return node;
|
|
}
|
|
function createInputFiles() {
|
|
var node = createBaseNode(308);
|
|
node.javascriptText = "";
|
|
node.declarationText = "";
|
|
return node;
|
|
}
|
|
function createSyntheticExpression(type, isSpread, tupleNameSource) {
|
|
if (isSpread === void 0) { isSpread = false; }
|
|
var node = createBaseNode(232);
|
|
node.type = type;
|
|
node.isSpread = isSpread;
|
|
node.tupleNameSource = tupleNameSource;
|
|
return node;
|
|
}
|
|
function createSyntaxList(children) {
|
|
var node = createBaseNode(348);
|
|
node._children = children;
|
|
return node;
|
|
}
|
|
function createNotEmittedStatement(original) {
|
|
var node = createBaseNode(349);
|
|
node.original = original;
|
|
ts.setTextRange(node, original);
|
|
return node;
|
|
}
|
|
function createPartiallyEmittedExpression(expression, original) {
|
|
var node = createBaseNode(350);
|
|
node.expression = expression;
|
|
node.original = original;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
1;
|
|
ts.setTextRange(node, original);
|
|
return node;
|
|
}
|
|
function updatePartiallyEmittedExpression(node, expression) {
|
|
return node.expression !== expression
|
|
? update(createPartiallyEmittedExpression(expression, node.original), node)
|
|
: node;
|
|
}
|
|
function flattenCommaElements(node) {
|
|
if (ts.nodeIsSynthesized(node) && !ts.isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) {
|
|
if (ts.isCommaListExpression(node)) {
|
|
return node.elements;
|
|
}
|
|
if (ts.isBinaryExpression(node) && ts.isCommaToken(node.operatorToken)) {
|
|
return [node.left, node.right];
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function createCommaListExpression(elements) {
|
|
var node = createBaseNode(351);
|
|
node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
|
|
node.transformFlags |= propagateChildrenFlags(node.elements);
|
|
return node;
|
|
}
|
|
function updateCommaListExpression(node, elements) {
|
|
return node.elements !== elements
|
|
? update(createCommaListExpression(elements), node)
|
|
: node;
|
|
}
|
|
function createEndOfDeclarationMarker(original) {
|
|
var node = createBaseNode(353);
|
|
node.emitNode = {};
|
|
node.original = original;
|
|
return node;
|
|
}
|
|
function createMergeDeclarationMarker(original) {
|
|
var node = createBaseNode(352);
|
|
node.emitNode = {};
|
|
node.original = original;
|
|
return node;
|
|
}
|
|
function createSyntheticReferenceExpression(expression, thisArg) {
|
|
var node = createBaseNode(354);
|
|
node.expression = expression;
|
|
node.thisArg = thisArg;
|
|
node.transformFlags |=
|
|
propagateChildFlags(node.expression) |
|
|
propagateChildFlags(node.thisArg);
|
|
return node;
|
|
}
|
|
function updateSyntheticReferenceExpression(node, expression, thisArg) {
|
|
return node.expression !== expression
|
|
|| node.thisArg !== thisArg
|
|
? update(createSyntheticReferenceExpression(expression, thisArg), node)
|
|
: node;
|
|
}
|
|
function cloneNode(node) {
|
|
if (node === undefined) {
|
|
return node;
|
|
}
|
|
var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(305) :
|
|
ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79) :
|
|
ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80) :
|
|
!ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
|
|
baseFactory.createBaseNode(node.kind);
|
|
clone.flags |= (node.flags & ~8);
|
|
clone.transformFlags = node.transformFlags;
|
|
setOriginalNode(clone, node);
|
|
for (var key in node) {
|
|
if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) {
|
|
continue;
|
|
}
|
|
clone[key] = node[key];
|
|
}
|
|
return clone;
|
|
}
|
|
function createImmediatelyInvokedFunctionExpression(statements, param, paramValue) {
|
|
return createCallExpression(createFunctionExpression(undefined, undefined, undefined, undefined, param ? [param] : [], undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []);
|
|
}
|
|
function createImmediatelyInvokedArrowFunction(statements, param, paramValue) {
|
|
return createCallExpression(createArrowFunction(undefined, undefined, param ? [param] : [], undefined, undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []);
|
|
}
|
|
function createVoidZero() {
|
|
return createVoidExpression(createNumericLiteral("0"));
|
|
}
|
|
function createExportDefault(expression) {
|
|
return createExportAssignment(undefined, false, expression);
|
|
}
|
|
function createExternalModuleExport(exportName) {
|
|
return createExportDeclaration(undefined, false, createNamedExports([
|
|
createExportSpecifier(false, undefined, exportName)
|
|
]));
|
|
}
|
|
function createTypeCheck(value, tag) {
|
|
return tag === "undefined"
|
|
? factory.createStrictEquality(value, createVoidZero())
|
|
: factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
|
|
}
|
|
function createMethodCall(object, methodName, argumentsList) {
|
|
if (ts.isCallChain(object)) {
|
|
return createCallChain(createPropertyAccessChain(object, undefined, methodName), undefined, undefined, argumentsList);
|
|
}
|
|
return createCallExpression(createPropertyAccessExpression(object, methodName), undefined, argumentsList);
|
|
}
|
|
function createFunctionBindCall(target, thisArg, argumentsList) {
|
|
return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
|
|
}
|
|
function createFunctionCallCall(target, thisArg, argumentsList) {
|
|
return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
|
|
}
|
|
function createFunctionApplyCall(target, thisArg, argumentsExpression) {
|
|
return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
|
|
}
|
|
function createGlobalMethodCall(globalObjectName, methodName, argumentsList) {
|
|
return createMethodCall(createIdentifier(globalObjectName), methodName, argumentsList);
|
|
}
|
|
function createArraySliceCall(array, start) {
|
|
return createMethodCall(array, "slice", start === undefined ? [] : [asExpression(start)]);
|
|
}
|
|
function createArrayConcatCall(array, argumentsList) {
|
|
return createMethodCall(array, "concat", argumentsList);
|
|
}
|
|
function createObjectDefinePropertyCall(target, propertyName, attributes) {
|
|
return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
|
|
}
|
|
function createReflectGetCall(target, propertyKey, receiver) {
|
|
return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
|
|
}
|
|
function createReflectSetCall(target, propertyKey, value, receiver) {
|
|
return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
|
|
}
|
|
function tryAddPropertyAssignment(properties, propertyName, expression) {
|
|
if (expression) {
|
|
properties.push(createPropertyAssignment(propertyName, expression));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function createPropertyDescriptor(attributes, singleLine) {
|
|
var properties = [];
|
|
tryAddPropertyAssignment(properties, "enumerable", asExpression(attributes.enumerable));
|
|
tryAddPropertyAssignment(properties, "configurable", asExpression(attributes.configurable));
|
|
var isData = tryAddPropertyAssignment(properties, "writable", asExpression(attributes.writable));
|
|
isData = tryAddPropertyAssignment(properties, "value", attributes.value) || isData;
|
|
var isAccessor = tryAddPropertyAssignment(properties, "get", attributes.get);
|
|
isAccessor = tryAddPropertyAssignment(properties, "set", attributes.set) || isAccessor;
|
|
ts.Debug.assert(!(isData && isAccessor), "A PropertyDescriptor may not be both an accessor descriptor and a data descriptor.");
|
|
return createObjectLiteralExpression(properties, !singleLine);
|
|
}
|
|
function updateOuterExpression(outerExpression, expression) {
|
|
switch (outerExpression.kind) {
|
|
case 212: return updateParenthesizedExpression(outerExpression, expression);
|
|
case 211: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
|
|
case 229: return updateAsExpression(outerExpression, expression, outerExpression.type);
|
|
case 230: return updateNonNullExpression(outerExpression, expression);
|
|
case 350: return updatePartiallyEmittedExpression(outerExpression, expression);
|
|
}
|
|
}
|
|
function isIgnorableParen(node) {
|
|
return ts.isParenthesizedExpression(node)
|
|
&& ts.nodeIsSynthesized(node)
|
|
&& ts.nodeIsSynthesized(ts.getSourceMapRange(node))
|
|
&& ts.nodeIsSynthesized(ts.getCommentRange(node))
|
|
&& !ts.some(ts.getSyntheticLeadingComments(node))
|
|
&& !ts.some(ts.getSyntheticTrailingComments(node));
|
|
}
|
|
function restoreOuterExpressions(outerExpression, innerExpression, kinds) {
|
|
if (kinds === void 0) { kinds = 15; }
|
|
if (outerExpression && ts.isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) {
|
|
return updateOuterExpression(outerExpression, restoreOuterExpressions(outerExpression.expression, innerExpression));
|
|
}
|
|
return innerExpression;
|
|
}
|
|
function restoreEnclosingLabel(node, outermostLabeledStatement, afterRestoreLabelCallback) {
|
|
if (!outermostLabeledStatement) {
|
|
return node;
|
|
}
|
|
var updated = updateLabeledStatement(outermostLabeledStatement, outermostLabeledStatement.label, ts.isLabeledStatement(outermostLabeledStatement.statement)
|
|
? restoreEnclosingLabel(node, outermostLabeledStatement.statement)
|
|
: node);
|
|
if (afterRestoreLabelCallback) {
|
|
afterRestoreLabelCallback(outermostLabeledStatement);
|
|
}
|
|
return updated;
|
|
}
|
|
function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
|
|
var target = ts.skipParentheses(node);
|
|
switch (target.kind) {
|
|
case 79:
|
|
return cacheIdentifiers;
|
|
case 108:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
return false;
|
|
case 204:
|
|
var elements = target.elements;
|
|
if (elements.length === 0) {
|
|
return false;
|
|
}
|
|
return true;
|
|
case 205:
|
|
return target.properties.length > 0;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers) {
|
|
if (cacheIdentifiers === void 0) { cacheIdentifiers = false; }
|
|
var callee = ts.skipOuterExpressions(expression, 15);
|
|
var thisArg;
|
|
var target;
|
|
if (ts.isSuperProperty(callee)) {
|
|
thisArg = createThis();
|
|
target = callee;
|
|
}
|
|
else if (ts.isSuperKeyword(callee)) {
|
|
thisArg = createThis();
|
|
target = languageVersion !== undefined && languageVersion < 2
|
|
? ts.setTextRange(createIdentifier("_super"), callee)
|
|
: callee;
|
|
}
|
|
else if (ts.getEmitFlags(callee) & 4096) {
|
|
thisArg = createVoidZero();
|
|
target = parenthesizerRules().parenthesizeLeftSideOfAccess(callee, false);
|
|
}
|
|
else if (ts.isPropertyAccessExpression(callee)) {
|
|
if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) {
|
|
thisArg = createTempVariable(recordTempVariable);
|
|
target = createPropertyAccessExpression(ts.setTextRange(factory.createAssignment(thisArg, callee.expression), callee.expression), callee.name);
|
|
ts.setTextRange(target, callee);
|
|
}
|
|
else {
|
|
thisArg = callee.expression;
|
|
target = callee;
|
|
}
|
|
}
|
|
else if (ts.isElementAccessExpression(callee)) {
|
|
if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) {
|
|
thisArg = createTempVariable(recordTempVariable);
|
|
target = createElementAccessExpression(ts.setTextRange(factory.createAssignment(thisArg, callee.expression), callee.expression), callee.argumentExpression);
|
|
ts.setTextRange(target, callee);
|
|
}
|
|
else {
|
|
thisArg = callee.expression;
|
|
target = callee;
|
|
}
|
|
}
|
|
else {
|
|
thisArg = createVoidZero();
|
|
target = parenthesizerRules().parenthesizeLeftSideOfAccess(expression, false);
|
|
}
|
|
return { target: target, thisArg: thisArg };
|
|
}
|
|
function createAssignmentTargetWrapper(paramName, expression) {
|
|
return createPropertyAccessExpression(createParenthesizedExpression(createObjectLiteralExpression([
|
|
createSetAccessorDeclaration(undefined, "value", [createParameterDeclaration(undefined, undefined, paramName, undefined, undefined, undefined)], createBlock([
|
|
createExpressionStatement(expression)
|
|
]))
|
|
])), "value");
|
|
}
|
|
function inlineExpressions(expressions) {
|
|
return expressions.length > 10
|
|
? createCommaListExpression(expressions)
|
|
: ts.reduceLeft(expressions, factory.createComma);
|
|
}
|
|
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.setParent(ts.setTextRange(cloneNode(nodeName), nodeName), nodeName.parent);
|
|
emitFlags |= ts.getEmitFlags(nodeName);
|
|
if (!allowSourceMaps)
|
|
emitFlags |= 48;
|
|
if (!allowComments)
|
|
emitFlags |= 1536;
|
|
if (emitFlags)
|
|
ts.setEmitFlags(name, emitFlags);
|
|
return name;
|
|
}
|
|
return getGeneratedNameForNode(node);
|
|
}
|
|
function getInternalName(node, allowComments, allowSourceMaps) {
|
|
return getName(node, allowComments, allowSourceMaps, 16384 | 32768);
|
|
}
|
|
function getLocalName(node, allowComments, allowSourceMaps) {
|
|
return getName(node, allowComments, allowSourceMaps, 16384);
|
|
}
|
|
function getExportName(node, allowComments, allowSourceMaps) {
|
|
return getName(node, allowComments, allowSourceMaps, 8192);
|
|
}
|
|
function getDeclarationName(node, allowComments, allowSourceMaps) {
|
|
return getName(node, allowComments, allowSourceMaps);
|
|
}
|
|
function getNamespaceMemberName(ns, name, allowComments, allowSourceMaps) {
|
|
var qualifiedName = createPropertyAccessExpression(ns, ts.nodeIsSynthesized(name) ? name : cloneNode(name));
|
|
ts.setTextRange(qualifiedName, name);
|
|
var emitFlags = 0;
|
|
if (!allowSourceMaps)
|
|
emitFlags |= 48;
|
|
if (!allowComments)
|
|
emitFlags |= 1536;
|
|
if (emitFlags)
|
|
ts.setEmitFlags(qualifiedName, emitFlags);
|
|
return qualifiedName;
|
|
}
|
|
function getExternalModuleOrNamespaceExportName(ns, node, allowComments, allowSourceMaps) {
|
|
if (ns && ts.hasSyntacticModifier(node, 1)) {
|
|
return getNamespaceMemberName(ns, getName(node), allowComments, allowSourceMaps);
|
|
}
|
|
return getExportName(node, allowComments, allowSourceMaps);
|
|
}
|
|
function copyPrologue(source, target, ensureUseStrict, visitor) {
|
|
var offset = copyStandardPrologue(source, target, 0, ensureUseStrict);
|
|
return copyCustomPrologue(source, target, offset, visitor);
|
|
}
|
|
function isUseStrictPrologue(node) {
|
|
return ts.isStringLiteral(node.expression) && node.expression.text === "use strict";
|
|
}
|
|
function createUseStrictPrologue() {
|
|
return ts.startOnNewLine(createExpressionStatement(createStringLiteral("use strict")));
|
|
}
|
|
function copyStandardPrologue(source, target, statementOffset, ensureUseStrict) {
|
|
if (statementOffset === void 0) { statementOffset = 0; }
|
|
ts.Debug.assert(target.length === 0, "Prologue directives should be at the first statement in the target statements array");
|
|
var foundUseStrict = false;
|
|
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(createUseStrictPrologue());
|
|
}
|
|
return statementOffset;
|
|
}
|
|
function copyCustomPrologue(source, target, statementOffset, visitor, filter) {
|
|
if (filter === void 0) { filter = ts.returnTrue; }
|
|
var numStatements = source.length;
|
|
while (statementOffset !== undefined && statementOffset < numStatements) {
|
|
var statement = source[statementOffset];
|
|
if (ts.getEmitFlags(statement) & 1048576 && filter(statement)) {
|
|
ts.append(target, visitor ? ts.visitNode(statement, visitor, ts.isStatement) : statement);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
statementOffset++;
|
|
}
|
|
return statementOffset;
|
|
}
|
|
function ensureUseStrict(statements) {
|
|
var foundUseStrict = ts.findUseStrictPrologue(statements);
|
|
if (!foundUseStrict) {
|
|
return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
|
|
}
|
|
return statements;
|
|
}
|
|
function liftToBlock(nodes) {
|
|
ts.Debug.assert(ts.every(nodes, ts.isStatementOrBlock), "Cannot lift nodes to a Block.");
|
|
return ts.singleOrUndefined(nodes) || createBlock(nodes);
|
|
}
|
|
function findSpanEnd(array, test, start) {
|
|
var i = start;
|
|
while (i < array.length && test(array[i])) {
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
function mergeLexicalEnvironment(statements, declarations) {
|
|
if (!ts.some(declarations)) {
|
|
return statements;
|
|
}
|
|
var leftStandardPrologueEnd = findSpanEnd(statements, ts.isPrologueDirective, 0);
|
|
var leftHoistedFunctionsEnd = findSpanEnd(statements, ts.isHoistedFunction, leftStandardPrologueEnd);
|
|
var leftHoistedVariablesEnd = findSpanEnd(statements, ts.isHoistedVariableStatement, leftHoistedFunctionsEnd);
|
|
var rightStandardPrologueEnd = findSpanEnd(declarations, ts.isPrologueDirective, 0);
|
|
var rightHoistedFunctionsEnd = findSpanEnd(declarations, ts.isHoistedFunction, rightStandardPrologueEnd);
|
|
var rightHoistedVariablesEnd = findSpanEnd(declarations, ts.isHoistedVariableStatement, rightHoistedFunctionsEnd);
|
|
var rightCustomPrologueEnd = findSpanEnd(declarations, ts.isCustomPrologue, rightHoistedVariablesEnd);
|
|
ts.Debug.assert(rightCustomPrologueEnd === declarations.length, "Expected declarations to be valid standard or custom prologues");
|
|
var left = ts.isNodeArray(statements) ? statements.slice() : statements;
|
|
if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
|
|
left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
|
|
}
|
|
if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
|
|
left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
|
|
}
|
|
if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
|
|
left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
|
|
}
|
|
if (rightStandardPrologueEnd > 0) {
|
|
if (leftStandardPrologueEnd === 0) {
|
|
left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
|
|
}
|
|
else {
|
|
var leftPrologues = new ts.Map();
|
|
for (var i = 0; i < leftStandardPrologueEnd; i++) {
|
|
var leftPrologue = statements[i];
|
|
leftPrologues.set(leftPrologue.expression.text, true);
|
|
}
|
|
for (var i = rightStandardPrologueEnd - 1; i >= 0; i--) {
|
|
var rightPrologue = declarations[i];
|
|
if (!leftPrologues.has(rightPrologue.expression.text)) {
|
|
left.unshift(rightPrologue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.isNodeArray(statements)) {
|
|
return ts.setTextRange(createNodeArray(left, statements.hasTrailingComma), statements);
|
|
}
|
|
return statements;
|
|
}
|
|
function updateModifiers(node, modifiers) {
|
|
var _a;
|
|
var modifierArray;
|
|
if (typeof modifiers === "number") {
|
|
modifierArray = createModifiersFromModifierFlags(modifiers);
|
|
}
|
|
else {
|
|
modifierArray = modifiers;
|
|
}
|
|
return ts.isTypeParameterDeclaration(node) ? updateTypeParameterDeclaration(node, modifierArray, node.name, node.constraint, node.default) :
|
|
ts.isParameter(node) ? updateParameterDeclaration(node, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) :
|
|
ts.isConstructorTypeNode(node) ? updateConstructorTypeNode1(node, modifierArray, node.typeParameters, node.parameters, node.type) :
|
|
ts.isPropertySignature(node) ? updatePropertySignature(node, modifierArray, node.name, node.questionToken, node.type) :
|
|
ts.isPropertyDeclaration(node) ? updatePropertyDeclaration(node, modifierArray, node.name, (_a = node.questionToken) !== null && _a !== void 0 ? _a : node.exclamationToken, node.type, node.initializer) :
|
|
ts.isMethodSignature(node) ? updateMethodSignature(node, modifierArray, node.name, node.questionToken, node.typeParameters, node.parameters, node.type) :
|
|
ts.isMethodDeclaration(node) ? updateMethodDeclaration(node, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) :
|
|
ts.isConstructorDeclaration(node) ? updateConstructorDeclaration(node, modifierArray, node.parameters, node.body) :
|
|
ts.isGetAccessorDeclaration(node) ? updateGetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.type, node.body) :
|
|
ts.isSetAccessorDeclaration(node) ? updateSetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.body) :
|
|
ts.isIndexSignatureDeclaration(node) ? updateIndexSignature(node, modifierArray, node.parameters, node.type) :
|
|
ts.isFunctionExpression(node) ? updateFunctionExpression(node, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
|
|
ts.isArrowFunction(node) ? updateArrowFunction(node, modifierArray, node.typeParameters, node.parameters, node.type, node.equalsGreaterThanToken, node.body) :
|
|
ts.isClassExpression(node) ? updateClassExpression(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
|
|
ts.isVariableStatement(node) ? updateVariableStatement(node, modifierArray, node.declarationList) :
|
|
ts.isFunctionDeclaration(node) ? updateFunctionDeclaration(node, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
|
|
ts.isClassDeclaration(node) ? updateClassDeclaration(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
|
|
ts.isInterfaceDeclaration(node) ? updateInterfaceDeclaration(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
|
|
ts.isTypeAliasDeclaration(node) ? updateTypeAliasDeclaration(node, modifierArray, node.name, node.typeParameters, node.type) :
|
|
ts.isEnumDeclaration(node) ? updateEnumDeclaration(node, modifierArray, node.name, node.members) :
|
|
ts.isModuleDeclaration(node) ? updateModuleDeclaration(node, modifierArray, node.name, node.body) :
|
|
ts.isImportEqualsDeclaration(node) ? updateImportEqualsDeclaration(node, modifierArray, node.isTypeOnly, node.name, node.moduleReference) :
|
|
ts.isImportDeclaration(node) ? updateImportDeclaration(node, modifierArray, node.importClause, node.moduleSpecifier, node.assertClause) :
|
|
ts.isExportAssignment(node) ? updateExportAssignment(node, modifierArray, node.expression) :
|
|
ts.isExportDeclaration(node) ? updateExportDeclaration(node, modifierArray, node.isTypeOnly, node.exportClause, node.moduleSpecifier, node.assertClause) :
|
|
ts.Debug.assertNever(node);
|
|
}
|
|
function asNodeArray(array) {
|
|
return array ? createNodeArray(array) : undefined;
|
|
}
|
|
function asName(name) {
|
|
return typeof name === "string" ? createIdentifier(name) :
|
|
name;
|
|
}
|
|
function asExpression(value) {
|
|
return typeof value === "string" ? createStringLiteral(value) :
|
|
typeof value === "number" ? createNumericLiteral(value) :
|
|
typeof value === "boolean" ? value ? createTrue() : createFalse() :
|
|
value;
|
|
}
|
|
function asToken(value) {
|
|
return typeof value === "number" ? createToken(value) : value;
|
|
}
|
|
function asEmbeddedStatement(statement) {
|
|
return statement && ts.isNotEmittedStatement(statement) ? ts.setTextRange(setOriginalNode(createEmptyStatement(), statement), statement) : statement;
|
|
}
|
|
}
|
|
ts.createNodeFactory = createNodeFactory;
|
|
function updateWithoutOriginal(updated, original) {
|
|
if (updated !== original) {
|
|
ts.setTextRange(updated, original);
|
|
}
|
|
return updated;
|
|
}
|
|
function updateWithOriginal(updated, original) {
|
|
if (updated !== original) {
|
|
setOriginalNode(updated, original);
|
|
ts.setTextRange(updated, original);
|
|
}
|
|
return updated;
|
|
}
|
|
function getDefaultTagNameForKind(kind) {
|
|
switch (kind) {
|
|
case 343: return "type";
|
|
case 341: return "returns";
|
|
case 342: return "this";
|
|
case 339: return "enum";
|
|
case 330: return "author";
|
|
case 332: return "class";
|
|
case 333: return "public";
|
|
case 334: return "private";
|
|
case 335: return "protected";
|
|
case 336: return "readonly";
|
|
case 337: return "override";
|
|
case 344: return "template";
|
|
case 345: return "typedef";
|
|
case 340: return "param";
|
|
case 347: return "prop";
|
|
case 338: return "callback";
|
|
case 328: return "augments";
|
|
case 329: return "implements";
|
|
default:
|
|
return ts.Debug.fail("Unsupported kind: ".concat(ts.Debug.formatSyntaxKind(kind)));
|
|
}
|
|
}
|
|
var rawTextScanner;
|
|
var invalidValueSentinel = {};
|
|
function getCookedText(kind, rawText) {
|
|
if (!rawTextScanner) {
|
|
rawTextScanner = ts.createScanner(99, false, 0);
|
|
}
|
|
switch (kind) {
|
|
case 14:
|
|
rawTextScanner.setText("`" + rawText + "`");
|
|
break;
|
|
case 15:
|
|
rawTextScanner.setText("`" + rawText + "${");
|
|
break;
|
|
case 16:
|
|
rawTextScanner.setText("}" + rawText + "${");
|
|
break;
|
|
case 17:
|
|
rawTextScanner.setText("}" + rawText + "`");
|
|
break;
|
|
}
|
|
var token = rawTextScanner.scan();
|
|
if (token === 19) {
|
|
token = rawTextScanner.reScanTemplateToken(false);
|
|
}
|
|
if (rawTextScanner.isUnterminated()) {
|
|
rawTextScanner.setText(undefined);
|
|
return invalidValueSentinel;
|
|
}
|
|
var tokenValue;
|
|
switch (token) {
|
|
case 14:
|
|
case 15:
|
|
case 16:
|
|
case 17:
|
|
tokenValue = rawTextScanner.getTokenValue();
|
|
break;
|
|
}
|
|
if (tokenValue === undefined || rawTextScanner.scan() !== 1) {
|
|
rawTextScanner.setText(undefined);
|
|
return invalidValueSentinel;
|
|
}
|
|
rawTextScanner.setText(undefined);
|
|
return tokenValue;
|
|
}
|
|
function propagateIdentifierNameFlags(node) {
|
|
return propagateChildFlags(node) & ~67108864;
|
|
}
|
|
function propagatePropertyNameFlagsOfChild(node, transformFlags) {
|
|
return transformFlags | (node.transformFlags & 134234112);
|
|
}
|
|
function propagateChildFlags(child) {
|
|
if (!child)
|
|
return 0;
|
|
var childFlags = child.transformFlags & ~getTransformFlagsSubtreeExclusions(child.kind);
|
|
return ts.isNamedDeclaration(child) && ts.isPropertyName(child.name) ? propagatePropertyNameFlagsOfChild(child.name, childFlags) : childFlags;
|
|
}
|
|
function propagateChildrenFlags(children) {
|
|
return children ? children.transformFlags : 0;
|
|
}
|
|
function aggregateChildrenFlags(children) {
|
|
var subtreeFlags = 0;
|
|
for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {
|
|
var child = children_2[_i];
|
|
subtreeFlags |= propagateChildFlags(child);
|
|
}
|
|
children.transformFlags = subtreeFlags;
|
|
}
|
|
function getTransformFlagsSubtreeExclusions(kind) {
|
|
if (kind >= 177 && kind <= 200) {
|
|
return -2;
|
|
}
|
|
switch (kind) {
|
|
case 208:
|
|
case 209:
|
|
case 204:
|
|
return -2147450880;
|
|
case 261:
|
|
return -1941676032;
|
|
case 164:
|
|
return -2147483648;
|
|
case 214:
|
|
return -2072174592;
|
|
case 213:
|
|
case 256:
|
|
return -1937940480;
|
|
case 255:
|
|
return -2146893824;
|
|
case 257:
|
|
case 226:
|
|
return -2147344384;
|
|
case 171:
|
|
return -1937948672;
|
|
case 167:
|
|
return -2013249536;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return -2005057536;
|
|
case 130:
|
|
case 147:
|
|
case 158:
|
|
case 143:
|
|
case 150:
|
|
case 148:
|
|
case 133:
|
|
case 151:
|
|
case 114:
|
|
case 163:
|
|
case 166:
|
|
case 168:
|
|
case 174:
|
|
case 175:
|
|
case 176:
|
|
case 258:
|
|
case 259:
|
|
return -2;
|
|
case 205:
|
|
return -2147278848;
|
|
case 292:
|
|
return -2147418112;
|
|
case 201:
|
|
case 202:
|
|
return -2147450880;
|
|
case 211:
|
|
case 229:
|
|
case 350:
|
|
case 212:
|
|
case 106:
|
|
return -2147483648;
|
|
case 206:
|
|
case 207:
|
|
return -2147483648;
|
|
default:
|
|
return -2147483648;
|
|
}
|
|
}
|
|
ts.getTransformFlagsSubtreeExclusions = getTransformFlagsSubtreeExclusions;
|
|
var baseFactory = ts.createBaseNodeFactory();
|
|
function makeSynthetic(node) {
|
|
node.flags |= 8;
|
|
return node;
|
|
}
|
|
var syntheticFactory = {
|
|
createBaseSourceFileNode: function (kind) { return makeSynthetic(baseFactory.createBaseSourceFileNode(kind)); },
|
|
createBaseIdentifierNode: function (kind) { return makeSynthetic(baseFactory.createBaseIdentifierNode(kind)); },
|
|
createBasePrivateIdentifierNode: function (kind) { return makeSynthetic(baseFactory.createBasePrivateIdentifierNode(kind)); },
|
|
createBaseTokenNode: function (kind) { return makeSynthetic(baseFactory.createBaseTokenNode(kind)); },
|
|
createBaseNode: function (kind) { return makeSynthetic(baseFactory.createBaseNode(kind)); },
|
|
};
|
|
ts.factory = createNodeFactory(4, syntheticFactory);
|
|
function createUnparsedSourceFile(textOrInputFiles, mapPathOrType, mapTextOrStripInternal) {
|
|
var stripInternal;
|
|
var bundleFileInfo;
|
|
var fileName;
|
|
var text;
|
|
var length;
|
|
var sourceMapPath;
|
|
var sourceMapText;
|
|
var getText;
|
|
var getSourceMapText;
|
|
var oldFileOfCurrentEmit;
|
|
if (!ts.isString(textOrInputFiles)) {
|
|
ts.Debug.assert(mapPathOrType === "js" || mapPathOrType === "dts");
|
|
fileName = (mapPathOrType === "js" ? textOrInputFiles.javascriptPath : textOrInputFiles.declarationPath) || "";
|
|
sourceMapPath = mapPathOrType === "js" ? textOrInputFiles.javascriptMapPath : textOrInputFiles.declarationMapPath;
|
|
getText = function () { return mapPathOrType === "js" ? textOrInputFiles.javascriptText : textOrInputFiles.declarationText; };
|
|
getSourceMapText = function () { return mapPathOrType === "js" ? textOrInputFiles.javascriptMapText : textOrInputFiles.declarationMapText; };
|
|
length = function () { return getText().length; };
|
|
if (textOrInputFiles.buildInfo && textOrInputFiles.buildInfo.bundle) {
|
|
ts.Debug.assert(mapTextOrStripInternal === undefined || typeof mapTextOrStripInternal === "boolean");
|
|
stripInternal = mapTextOrStripInternal;
|
|
bundleFileInfo = mapPathOrType === "js" ? textOrInputFiles.buildInfo.bundle.js : textOrInputFiles.buildInfo.bundle.dts;
|
|
oldFileOfCurrentEmit = textOrInputFiles.oldFileOfCurrentEmit;
|
|
}
|
|
}
|
|
else {
|
|
fileName = "";
|
|
text = textOrInputFiles;
|
|
length = textOrInputFiles.length;
|
|
sourceMapPath = mapPathOrType;
|
|
sourceMapText = mapTextOrStripInternal;
|
|
}
|
|
var node = oldFileOfCurrentEmit ?
|
|
parseOldFileOfCurrentEmit(ts.Debug.checkDefined(bundleFileInfo)) :
|
|
parseUnparsedSourceFile(bundleFileInfo, stripInternal, length);
|
|
node.fileName = fileName;
|
|
node.sourceMapPath = sourceMapPath;
|
|
node.oldFileOfCurrentEmit = oldFileOfCurrentEmit;
|
|
if (getText && getSourceMapText) {
|
|
Object.defineProperty(node, "text", { get: getText });
|
|
Object.defineProperty(node, "sourceMapText", { get: getSourceMapText });
|
|
}
|
|
else {
|
|
ts.Debug.assert(!oldFileOfCurrentEmit);
|
|
node.text = text !== null && text !== void 0 ? text : "";
|
|
node.sourceMapText = sourceMapText;
|
|
}
|
|
return node;
|
|
}
|
|
ts.createUnparsedSourceFile = createUnparsedSourceFile;
|
|
function parseUnparsedSourceFile(bundleFileInfo, stripInternal, length) {
|
|
var prologues;
|
|
var helpers;
|
|
var referencedFiles;
|
|
var typeReferenceDirectives;
|
|
var libReferenceDirectives;
|
|
var prependChildren;
|
|
var texts;
|
|
var hasNoDefaultLib;
|
|
for (var _i = 0, _a = bundleFileInfo ? bundleFileInfo.sections : ts.emptyArray; _i < _a.length; _i++) {
|
|
var section = _a[_i];
|
|
switch (section.kind) {
|
|
case "prologue":
|
|
prologues = ts.append(prologues, ts.setTextRange(ts.factory.createUnparsedPrologue(section.data), section));
|
|
break;
|
|
case "emitHelpers":
|
|
helpers = ts.append(helpers, ts.getAllUnscopedEmitHelpers().get(section.data));
|
|
break;
|
|
case "no-default-lib":
|
|
hasNoDefaultLib = true;
|
|
break;
|
|
case "reference":
|
|
referencedFiles = ts.append(referencedFiles, { pos: -1, end: -1, fileName: section.data });
|
|
break;
|
|
case "type":
|
|
typeReferenceDirectives = ts.append(typeReferenceDirectives, { pos: -1, end: -1, fileName: section.data });
|
|
break;
|
|
case "type-import":
|
|
typeReferenceDirectives = ts.append(typeReferenceDirectives, { pos: -1, end: -1, fileName: section.data, resolutionMode: ts.ModuleKind.ESNext });
|
|
break;
|
|
case "type-require":
|
|
typeReferenceDirectives = ts.append(typeReferenceDirectives, { pos: -1, end: -1, fileName: section.data, resolutionMode: ts.ModuleKind.CommonJS });
|
|
break;
|
|
case "lib":
|
|
libReferenceDirectives = ts.append(libReferenceDirectives, { pos: -1, end: -1, fileName: section.data });
|
|
break;
|
|
case "prepend":
|
|
var prependTexts = void 0;
|
|
for (var _b = 0, _c = section.texts; _b < _c.length; _b++) {
|
|
var text = _c[_b];
|
|
if (!stripInternal || text.kind !== "internal") {
|
|
prependTexts = ts.append(prependTexts, ts.setTextRange(ts.factory.createUnparsedTextLike(text.data, text.kind === "internal"), text));
|
|
}
|
|
}
|
|
prependChildren = ts.addRange(prependChildren, prependTexts);
|
|
texts = ts.append(texts, ts.factory.createUnparsedPrepend(section.data, prependTexts !== null && prependTexts !== void 0 ? prependTexts : ts.emptyArray));
|
|
break;
|
|
case "internal":
|
|
if (stripInternal) {
|
|
if (!texts)
|
|
texts = [];
|
|
break;
|
|
}
|
|
case "text":
|
|
texts = ts.append(texts, ts.setTextRange(ts.factory.createUnparsedTextLike(section.data, section.kind === "internal"), section));
|
|
break;
|
|
default:
|
|
ts.Debug.assertNever(section);
|
|
}
|
|
}
|
|
if (!texts) {
|
|
var textNode = ts.factory.createUnparsedTextLike(undefined, false);
|
|
ts.setTextRangePosWidth(textNode, 0, typeof length === "function" ? length() : length);
|
|
texts = [textNode];
|
|
}
|
|
var node = ts.parseNodeFactory.createUnparsedSource(prologues !== null && prologues !== void 0 ? prologues : ts.emptyArray, undefined, texts);
|
|
ts.setEachParent(prologues, node);
|
|
ts.setEachParent(texts, node);
|
|
ts.setEachParent(prependChildren, node);
|
|
node.hasNoDefaultLib = hasNoDefaultLib;
|
|
node.helpers = helpers;
|
|
node.referencedFiles = referencedFiles || ts.emptyArray;
|
|
node.typeReferenceDirectives = typeReferenceDirectives;
|
|
node.libReferenceDirectives = libReferenceDirectives || ts.emptyArray;
|
|
return node;
|
|
}
|
|
function parseOldFileOfCurrentEmit(bundleFileInfo) {
|
|
var texts;
|
|
var syntheticReferences;
|
|
for (var _i = 0, _a = bundleFileInfo.sections; _i < _a.length; _i++) {
|
|
var section = _a[_i];
|
|
switch (section.kind) {
|
|
case "internal":
|
|
case "text":
|
|
texts = ts.append(texts, ts.setTextRange(ts.factory.createUnparsedTextLike(section.data, section.kind === "internal"), section));
|
|
break;
|
|
case "no-default-lib":
|
|
case "reference":
|
|
case "type":
|
|
case "type-import":
|
|
case "type-require":
|
|
case "lib":
|
|
syntheticReferences = ts.append(syntheticReferences, ts.setTextRange(ts.factory.createUnparsedSyntheticReference(section), section));
|
|
break;
|
|
case "prologue":
|
|
case "emitHelpers":
|
|
case "prepend":
|
|
break;
|
|
default:
|
|
ts.Debug.assertNever(section);
|
|
}
|
|
}
|
|
var node = ts.factory.createUnparsedSource(ts.emptyArray, syntheticReferences, texts !== null && texts !== void 0 ? texts : ts.emptyArray);
|
|
ts.setEachParent(syntheticReferences, node);
|
|
ts.setEachParent(texts, node);
|
|
node.helpers = ts.map(bundleFileInfo.sources && bundleFileInfo.sources.helpers, function (name) { return ts.getAllUnscopedEmitHelpers().get(name); });
|
|
return node;
|
|
}
|
|
function createInputFiles(javascriptTextOrReadFileText, declarationTextOrJavascriptPath, javascriptMapPath, javascriptMapTextOrDeclarationPath, declarationMapPath, declarationMapTextOrBuildInfoPath, javascriptPath, declarationPath, buildInfoPath, buildInfo, oldFileOfCurrentEmit) {
|
|
var node = ts.parseNodeFactory.createInputFiles();
|
|
if (!ts.isString(javascriptTextOrReadFileText)) {
|
|
var cache_1 = new ts.Map();
|
|
var textGetter_1 = function (path) {
|
|
if (path === undefined)
|
|
return undefined;
|
|
var value = cache_1.get(path);
|
|
if (value === undefined) {
|
|
value = javascriptTextOrReadFileText(path);
|
|
cache_1.set(path, value !== undefined ? value : false);
|
|
}
|
|
return value !== false ? value : undefined;
|
|
};
|
|
var definedTextGetter_1 = function (path) {
|
|
var result = textGetter_1(path);
|
|
return result !== undefined ? result : "/* Input file ".concat(path, " was missing */\r\n");
|
|
};
|
|
var buildInfo_1;
|
|
var getAndCacheBuildInfo_1 = function (getText) {
|
|
if (buildInfo_1 === undefined) {
|
|
var result = getText();
|
|
buildInfo_1 = result !== undefined ? ts.getBuildInfo(result) : false;
|
|
}
|
|
return buildInfo_1 || undefined;
|
|
};
|
|
node.javascriptPath = declarationTextOrJavascriptPath;
|
|
node.javascriptMapPath = javascriptMapPath;
|
|
node.declarationPath = ts.Debug.checkDefined(javascriptMapTextOrDeclarationPath);
|
|
node.declarationMapPath = declarationMapPath;
|
|
node.buildInfoPath = declarationMapTextOrBuildInfoPath;
|
|
Object.defineProperties(node, {
|
|
javascriptText: { get: function () { return definedTextGetter_1(declarationTextOrJavascriptPath); } },
|
|
javascriptMapText: { get: function () { return textGetter_1(javascriptMapPath); } },
|
|
declarationText: { get: function () { return definedTextGetter_1(ts.Debug.checkDefined(javascriptMapTextOrDeclarationPath)); } },
|
|
declarationMapText: { get: function () { return textGetter_1(declarationMapPath); } },
|
|
buildInfo: { get: function () { return getAndCacheBuildInfo_1(function () { return textGetter_1(declarationMapTextOrBuildInfoPath); }); } }
|
|
});
|
|
}
|
|
else {
|
|
node.javascriptText = javascriptTextOrReadFileText;
|
|
node.javascriptMapPath = javascriptMapPath;
|
|
node.javascriptMapText = javascriptMapTextOrDeclarationPath;
|
|
node.declarationText = declarationTextOrJavascriptPath;
|
|
node.declarationMapPath = declarationMapPath;
|
|
node.declarationMapText = declarationMapTextOrBuildInfoPath;
|
|
node.javascriptPath = javascriptPath;
|
|
node.declarationPath = declarationPath;
|
|
node.buildInfoPath = buildInfoPath;
|
|
node.buildInfo = buildInfo;
|
|
node.oldFileOfCurrentEmit = oldFileOfCurrentEmit;
|
|
}
|
|
return node;
|
|
}
|
|
ts.createInputFiles = createInputFiles;
|
|
var SourceMapSource;
|
|
function createSourceMapSource(fileName, text, skipTrivia) {
|
|
return new (SourceMapSource || (SourceMapSource = ts.objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia);
|
|
}
|
|
ts.createSourceMapSource = createSourceMapSource;
|
|
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 & ~268435456;
|
|
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) {
|
|
for (var _i = 0, helpers_1 = helpers; _i < helpers_1.length; _i++) {
|
|
var helper = helpers_1[_i];
|
|
destEmitNode.helpers = ts.appendIfUnique(destEmitNode.helpers, helper);
|
|
}
|
|
}
|
|
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 = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getOrCreateEmitNode(node) {
|
|
var _a;
|
|
if (!node.emitNode) {
|
|
if (ts.isParseTreeNode(node)) {
|
|
if (node.kind === 305) {
|
|
return node.emitNode = { annotatedNodes: [node] };
|
|
}
|
|
var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
|
|
getOrCreateEmitNode(sourceFile).annotatedNodes.push(node);
|
|
}
|
|
node.emitNode = {};
|
|
}
|
|
else {
|
|
ts.Debug.assert(!(node.emitNode.flags & 268435456), "Invalid attempt to mutate an immutable node.");
|
|
}
|
|
return node.emitNode;
|
|
}
|
|
ts.getOrCreateEmitNode = getOrCreateEmitNode;
|
|
function disposeEmitNodes(sourceFile) {
|
|
var _a, _b;
|
|
var annotatedNodes = (_b = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(sourceFile))) === null || _a === void 0 ? void 0 : _a.emitNode) === null || _b === void 0 ? void 0 : _b.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 removeAllComments(node) {
|
|
var emitNode = getOrCreateEmitNode(node);
|
|
emitNode.flags |= 1536;
|
|
emitNode.leadingComments = undefined;
|
|
emitNode.trailingComments = undefined;
|
|
return node;
|
|
}
|
|
ts.removeAllComments = removeAllComments;
|
|
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 _a, _b;
|
|
return (_b = (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.sourceMapRange) !== null && _b !== void 0 ? _b : node;
|
|
}
|
|
ts.getSourceMapRange = getSourceMapRange;
|
|
function setSourceMapRange(node, range) {
|
|
getOrCreateEmitNode(node).sourceMapRange = range;
|
|
return node;
|
|
}
|
|
ts.setSourceMapRange = setSourceMapRange;
|
|
function getTokenSourceMapRange(node, token) {
|
|
var _a, _b;
|
|
return (_b = (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.tokenSourceMapRanges) === null || _b === void 0 ? void 0 : _b[token];
|
|
}
|
|
ts.getTokenSourceMapRange = getTokenSourceMapRange;
|
|
function setTokenSourceMapRange(node, token, range) {
|
|
var _a;
|
|
var emitNode = getOrCreateEmitNode(node);
|
|
var tokenSourceMapRanges = (_a = emitNode.tokenSourceMapRanges) !== null && _a !== void 0 ? _a : (emitNode.tokenSourceMapRanges = []);
|
|
tokenSourceMapRanges[token] = range;
|
|
return node;
|
|
}
|
|
ts.setTokenSourceMapRange = setTokenSourceMapRange;
|
|
function getStartsOnNewLine(node) {
|
|
var _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.startsOnNewLine;
|
|
}
|
|
ts.getStartsOnNewLine = getStartsOnNewLine;
|
|
function setStartsOnNewLine(node, newLine) {
|
|
getOrCreateEmitNode(node).startsOnNewLine = newLine;
|
|
return node;
|
|
}
|
|
ts.setStartsOnNewLine = setStartsOnNewLine;
|
|
function getCommentRange(node) {
|
|
var _a, _b;
|
|
return (_b = (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.commentRange) !== null && _b !== void 0 ? _b : node;
|
|
}
|
|
ts.getCommentRange = getCommentRange;
|
|
function setCommentRange(node, range) {
|
|
getOrCreateEmitNode(node).commentRange = range;
|
|
return node;
|
|
}
|
|
ts.setCommentRange = setCommentRange;
|
|
function getSyntheticLeadingComments(node) {
|
|
var _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.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 _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.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 _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.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_2 = helpers; _i < helpers_2.length; _i++) {
|
|
var helper = helpers_2[_i];
|
|
emitNode.helpers = ts.appendIfUnique(emitNode.helpers, helper);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
ts.addEmitHelpers = addEmitHelpers;
|
|
function removeEmitHelper(node, helper) {
|
|
var _a;
|
|
var helpers = (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.helpers;
|
|
if (helpers) {
|
|
return ts.orderedRemoveItem(helpers, helper);
|
|
}
|
|
return false;
|
|
}
|
|
ts.removeEmitHelper = removeEmitHelper;
|
|
function getEmitHelpers(node) {
|
|
var _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.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 getSnippetElement(node) {
|
|
var _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.snippetElement;
|
|
}
|
|
ts.getSnippetElement = getSnippetElement;
|
|
function setSnippetElement(node, snippet) {
|
|
var emitNode = getOrCreateEmitNode(node);
|
|
emitNode.snippetElement = snippet;
|
|
return node;
|
|
}
|
|
ts.setSnippetElement = setSnippetElement;
|
|
function ignoreSourceNewlines(node) {
|
|
getOrCreateEmitNode(node).flags |= 134217728;
|
|
return node;
|
|
}
|
|
ts.ignoreSourceNewlines = ignoreSourceNewlines;
|
|
function setTypeNode(node, type) {
|
|
var emitNode = getOrCreateEmitNode(node);
|
|
emitNode.typeNode = type;
|
|
return node;
|
|
}
|
|
ts.setTypeNode = setTypeNode;
|
|
function getTypeNode(node) {
|
|
var _a;
|
|
return (_a = node.emitNode) === null || _a === void 0 ? void 0 : _a.typeNode;
|
|
}
|
|
ts.getTypeNode = getTypeNode;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createEmitHelperFactory(context) {
|
|
var factory = context.factory;
|
|
var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456); });
|
|
var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456); });
|
|
return {
|
|
getUnscopedHelperName: getUnscopedHelperName,
|
|
createDecorateHelper: createDecorateHelper,
|
|
createMetadataHelper: createMetadataHelper,
|
|
createParamHelper: createParamHelper,
|
|
createAssignHelper: createAssignHelper,
|
|
createAwaitHelper: createAwaitHelper,
|
|
createAsyncGeneratorHelper: createAsyncGeneratorHelper,
|
|
createAsyncDelegatorHelper: createAsyncDelegatorHelper,
|
|
createAsyncValuesHelper: createAsyncValuesHelper,
|
|
createRestHelper: createRestHelper,
|
|
createAwaiterHelper: createAwaiterHelper,
|
|
createExtendsHelper: createExtendsHelper,
|
|
createTemplateObjectHelper: createTemplateObjectHelper,
|
|
createSpreadArrayHelper: createSpreadArrayHelper,
|
|
createValuesHelper: createValuesHelper,
|
|
createReadHelper: createReadHelper,
|
|
createGeneratorHelper: createGeneratorHelper,
|
|
createCreateBindingHelper: createCreateBindingHelper,
|
|
createImportStarHelper: createImportStarHelper,
|
|
createImportStarCallbackHelper: createImportStarCallbackHelper,
|
|
createImportDefaultHelper: createImportDefaultHelper,
|
|
createExportStarHelper: createExportStarHelper,
|
|
createClassPrivateFieldGetHelper: createClassPrivateFieldGetHelper,
|
|
createClassPrivateFieldSetHelper: createClassPrivateFieldSetHelper,
|
|
createClassPrivateFieldInHelper: createClassPrivateFieldInHelper
|
|
};
|
|
function getUnscopedHelperName(name) {
|
|
return ts.setEmitFlags(factory.createIdentifier(name), 4096 | 2);
|
|
}
|
|
function createDecorateHelper(decoratorExpressions, target, memberName, descriptor) {
|
|
context.requestEmitHelper(ts.decorateHelper);
|
|
var argumentsArray = [];
|
|
argumentsArray.push(factory.createArrayLiteralExpression(decoratorExpressions, true));
|
|
argumentsArray.push(target);
|
|
if (memberName) {
|
|
argumentsArray.push(memberName);
|
|
if (descriptor) {
|
|
argumentsArray.push(descriptor);
|
|
}
|
|
}
|
|
return factory.createCallExpression(getUnscopedHelperName("__decorate"), undefined, argumentsArray);
|
|
}
|
|
function createMetadataHelper(metadataKey, metadataValue) {
|
|
context.requestEmitHelper(ts.metadataHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__metadata"), undefined, [
|
|
factory.createStringLiteral(metadataKey),
|
|
metadataValue
|
|
]);
|
|
}
|
|
function createParamHelper(expression, parameterOffset, location) {
|
|
context.requestEmitHelper(ts.paramHelper);
|
|
return ts.setTextRange(factory.createCallExpression(getUnscopedHelperName("__param"), undefined, [
|
|
factory.createNumericLiteral(parameterOffset + ""),
|
|
expression
|
|
]), location);
|
|
}
|
|
function createAssignHelper(attributesSegments) {
|
|
if (ts.getEmitScriptTarget(context.getCompilerOptions()) >= 2) {
|
|
return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "assign"), undefined, attributesSegments);
|
|
}
|
|
context.requestEmitHelper(ts.assignHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__assign"), undefined, attributesSegments);
|
|
}
|
|
function createAwaitHelper(expression) {
|
|
context.requestEmitHelper(ts.awaitHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__await"), undefined, [expression]);
|
|
}
|
|
function createAsyncGeneratorHelper(generatorFunc, hasLexicalThis) {
|
|
context.requestEmitHelper(ts.awaitHelper);
|
|
context.requestEmitHelper(ts.asyncGeneratorHelper);
|
|
(generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 | 524288;
|
|
return factory.createCallExpression(getUnscopedHelperName("__asyncGenerator"), undefined, [
|
|
hasLexicalThis ? factory.createThis() : factory.createVoidZero(),
|
|
factory.createIdentifier("arguments"),
|
|
generatorFunc
|
|
]);
|
|
}
|
|
function createAsyncDelegatorHelper(expression) {
|
|
context.requestEmitHelper(ts.awaitHelper);
|
|
context.requestEmitHelper(ts.asyncDelegator);
|
|
return factory.createCallExpression(getUnscopedHelperName("__asyncDelegator"), undefined, [expression]);
|
|
}
|
|
function createAsyncValuesHelper(expression) {
|
|
context.requestEmitHelper(ts.asyncValues);
|
|
return factory.createCallExpression(getUnscopedHelperName("__asyncValues"), undefined, [expression]);
|
|
}
|
|
function createRestHelper(value, elements, computedTempVariables, location) {
|
|
context.requestEmitHelper(ts.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)) {
|
|
ts.Debug.assertIsDefined(computedTempVariables, "Encountered computed property name but 'computedTempVariables' argument was not provided.");
|
|
var temp = computedTempVariables[computedTempVariableOffset];
|
|
computedTempVariableOffset++;
|
|
propertyNames.push(factory.createConditionalExpression(factory.createTypeCheck(temp, "symbol"), undefined, temp, undefined, factory.createAdd(temp, factory.createStringLiteral(""))));
|
|
}
|
|
else {
|
|
propertyNames.push(factory.createStringLiteralFromNode(propertyName));
|
|
}
|
|
}
|
|
}
|
|
return factory.createCallExpression(getUnscopedHelperName("__rest"), undefined, [
|
|
value,
|
|
ts.setTextRange(factory.createArrayLiteralExpression(propertyNames), location)
|
|
]);
|
|
}
|
|
function createAwaiterHelper(hasLexicalThis, hasLexicalArguments, promiseConstructor, body) {
|
|
context.requestEmitHelper(ts.awaiterHelper);
|
|
var generatorFunc = factory.createFunctionExpression(undefined, factory.createToken(41), undefined, undefined, [], undefined, body);
|
|
(generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 | 524288;
|
|
return factory.createCallExpression(getUnscopedHelperName("__awaiter"), undefined, [
|
|
hasLexicalThis ? factory.createThis() : factory.createVoidZero(),
|
|
hasLexicalArguments ? factory.createIdentifier("arguments") : factory.createVoidZero(),
|
|
promiseConstructor ? ts.createExpressionFromEntityName(factory, promiseConstructor) : factory.createVoidZero(),
|
|
generatorFunc
|
|
]);
|
|
}
|
|
function createExtendsHelper(name) {
|
|
context.requestEmitHelper(ts.extendsHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__extends"), undefined, [name, factory.createUniqueName("_super", 16 | 32)]);
|
|
}
|
|
function createTemplateObjectHelper(cooked, raw) {
|
|
context.requestEmitHelper(ts.templateObjectHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), undefined, [cooked, raw]);
|
|
}
|
|
function createSpreadArrayHelper(to, from, packFrom) {
|
|
context.requestEmitHelper(ts.spreadArrayHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
|
|
}
|
|
function createValuesHelper(expression) {
|
|
context.requestEmitHelper(ts.valuesHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__values"), undefined, [expression]);
|
|
}
|
|
function createReadHelper(iteratorRecord, count) {
|
|
context.requestEmitHelper(ts.readHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__read"), undefined, count !== undefined
|
|
? [iteratorRecord, factory.createNumericLiteral(count + "")]
|
|
: [iteratorRecord]);
|
|
}
|
|
function createGeneratorHelper(body) {
|
|
context.requestEmitHelper(ts.generatorHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__generator"), undefined, [factory.createThis(), body]);
|
|
}
|
|
function createCreateBindingHelper(module, inputName, outputName) {
|
|
context.requestEmitHelper(ts.createBindingHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__createBinding"), undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
|
|
}
|
|
function createImportStarHelper(expression) {
|
|
context.requestEmitHelper(ts.importStarHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__importStar"), undefined, [expression]);
|
|
}
|
|
function createImportStarCallbackHelper() {
|
|
context.requestEmitHelper(ts.importStarHelper);
|
|
return getUnscopedHelperName("__importStar");
|
|
}
|
|
function createImportDefaultHelper(expression) {
|
|
context.requestEmitHelper(ts.importDefaultHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__importDefault"), undefined, [expression]);
|
|
}
|
|
function createExportStarHelper(moduleExpression, exportsExpression) {
|
|
if (exportsExpression === void 0) { exportsExpression = factory.createIdentifier("exports"); }
|
|
context.requestEmitHelper(ts.exportStarHelper);
|
|
context.requestEmitHelper(ts.createBindingHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__exportStar"), undefined, [moduleExpression, exportsExpression]);
|
|
}
|
|
function createClassPrivateFieldGetHelper(receiver, state, kind, f) {
|
|
context.requestEmitHelper(ts.classPrivateFieldGetHelper);
|
|
var args;
|
|
if (!f) {
|
|
args = [receiver, state, factory.createStringLiteral(kind)];
|
|
}
|
|
else {
|
|
args = [receiver, state, factory.createStringLiteral(kind), f];
|
|
}
|
|
return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldGet"), undefined, args);
|
|
}
|
|
function createClassPrivateFieldSetHelper(receiver, state, value, kind, f) {
|
|
context.requestEmitHelper(ts.classPrivateFieldSetHelper);
|
|
var args;
|
|
if (!f) {
|
|
args = [receiver, state, value, factory.createStringLiteral(kind)];
|
|
}
|
|
else {
|
|
args = [receiver, state, value, factory.createStringLiteral(kind), f];
|
|
}
|
|
return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldSet"), undefined, args);
|
|
}
|
|
function createClassPrivateFieldInHelper(state, receiver) {
|
|
context.requestEmitHelper(ts.classPrivateFieldInHelper);
|
|
return factory.createCallExpression(getUnscopedHelperName("__classPrivateFieldIn"), undefined, [state, receiver]);
|
|
}
|
|
}
|
|
ts.createEmitHelperFactory = createEmitHelperFactory;
|
|
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 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.decorateHelper = {
|
|
name: "typescript:decorate",
|
|
importName: "__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 };"
|
|
};
|
|
ts.metadataHelper = {
|
|
name: "typescript:metadata",
|
|
importName: "__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 };"
|
|
};
|
|
ts.paramHelper = {
|
|
name: "typescript:param",
|
|
importName: "__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.assignHelper = {
|
|
name: "typescript:assign",
|
|
importName: "__assign",
|
|
scoped: false,
|
|
priority: 1,
|
|
text: "\n var __assign = (this && this.__assign) || function () {\n __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 };\n return __assign.apply(this, arguments);\n };"
|
|
};
|
|
ts.awaitHelper = {
|
|
name: "typescript:await",
|
|
importName: "__await",
|
|
scoped: false,
|
|
text: "\n var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }"
|
|
};
|
|
ts.asyncGeneratorHelper = {
|
|
name: "typescript:asyncGenerator",
|
|
importName: "__asyncGenerator",
|
|
scoped: false,
|
|
dependencies: [ts.awaitHelper],
|
|
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 };"
|
|
};
|
|
ts.asyncDelegator = {
|
|
name: "typescript:asyncDelegator",
|
|
importName: "__asyncDelegator",
|
|
scoped: false,
|
|
dependencies: [ts.awaitHelper],
|
|
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 };"
|
|
};
|
|
ts.asyncValues = {
|
|
name: "typescript:asyncValues",
|
|
importName: "__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 };"
|
|
};
|
|
ts.restHelper = {
|
|
name: "typescript:rest",
|
|
importName: "__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++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n };"
|
|
};
|
|
ts.awaiterHelper = {
|
|
name: "typescript:awaiter",
|
|
importName: "__awaiter",
|
|
scoped: false,
|
|
priority: 5,
|
|
text: "\n var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\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) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n };"
|
|
};
|
|
ts.extendsHelper = {
|
|
name: "typescript:extends",
|
|
importName: "__extends",
|
|
scoped: false,
|
|
priority: 0,
|
|
text: "\n var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n })();"
|
|
};
|
|
ts.templateObjectHelper = {
|
|
name: "typescript:makeTemplateObject",
|
|
importName: "__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.readHelper = {
|
|
name: "typescript:read",
|
|
importName: "__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 };"
|
|
};
|
|
ts.spreadArrayHelper = {
|
|
name: "typescript:spreadArray",
|
|
importName: "__spreadArray",
|
|
scoped: false,
|
|
text: "\n var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n };"
|
|
};
|
|
ts.valuesHelper = {
|
|
name: "typescript:values",
|
|
importName: "__values",
|
|
scoped: false,
|
|
text: "\n var __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n };"
|
|
};
|
|
ts.generatorHelper = {
|
|
name: "typescript:generator",
|
|
importName: "__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.createBindingHelper = {
|
|
name: "typescript:commonjscreatebinding",
|
|
importName: "__createBinding",
|
|
scoped: false,
|
|
priority: 1,
|
|
text: "\n var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n }) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n }));"
|
|
};
|
|
ts.setModuleDefaultHelper = {
|
|
name: "typescript:commonjscreatevalue",
|
|
importName: "__setModuleDefault",
|
|
scoped: false,
|
|
priority: 1,
|
|
text: "\n var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n }) : function(o, v) {\n o[\"default\"] = v;\n });"
|
|
};
|
|
ts.importStarHelper = {
|
|
name: "typescript:commonjsimportstar",
|
|
importName: "__importStar",
|
|
scoped: false,
|
|
dependencies: [ts.createBindingHelper, ts.setModuleDefaultHelper],
|
|
priority: 2,
|
|
text: "\n var __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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n };"
|
|
};
|
|
ts.importDefaultHelper = {
|
|
name: "typescript:commonjsimportdefault",
|
|
importName: "__importDefault",
|
|
scoped: false,
|
|
text: "\n var __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n };"
|
|
};
|
|
ts.exportStarHelper = {
|
|
name: "typescript:export-star",
|
|
importName: "__exportStar",
|
|
scoped: false,
|
|
dependencies: [ts.createBindingHelper],
|
|
priority: 2,
|
|
text: "\n var __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n };"
|
|
};
|
|
ts.classPrivateFieldGetHelper = {
|
|
name: "typescript:classPrivateFieldGet",
|
|
importName: "__classPrivateFieldGet",
|
|
scoped: false,
|
|
text: "\n var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n };"
|
|
};
|
|
ts.classPrivateFieldSetHelper = {
|
|
name: "typescript:classPrivateFieldSet",
|
|
importName: "__classPrivateFieldSet",
|
|
scoped: false,
|
|
text: "\n var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n };"
|
|
};
|
|
ts.classPrivateFieldInHelper = {
|
|
name: "typescript:classPrivateFieldIn",
|
|
importName: "__classPrivateFieldIn",
|
|
scoped: false,
|
|
text: "\n var __classPrivateFieldIn = (this && this.__classPrivateFieldIn) || function(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n };"
|
|
};
|
|
var allUnscopedEmitHelpers;
|
|
function getAllUnscopedEmitHelpers() {
|
|
return allUnscopedEmitHelpers || (allUnscopedEmitHelpers = ts.arrayToMap([
|
|
ts.decorateHelper,
|
|
ts.metadataHelper,
|
|
ts.paramHelper,
|
|
ts.assignHelper,
|
|
ts.awaitHelper,
|
|
ts.asyncGeneratorHelper,
|
|
ts.asyncDelegator,
|
|
ts.asyncValues,
|
|
ts.restHelper,
|
|
ts.awaiterHelper,
|
|
ts.extendsHelper,
|
|
ts.templateObjectHelper,
|
|
ts.spreadArrayHelper,
|
|
ts.valuesHelper,
|
|
ts.readHelper,
|
|
ts.generatorHelper,
|
|
ts.importStarHelper,
|
|
ts.importDefaultHelper,
|
|
ts.exportStarHelper,
|
|
ts.classPrivateFieldGetHelper,
|
|
ts.classPrivateFieldSetHelper,
|
|
ts.classPrivateFieldInHelper,
|
|
ts.createBindingHelper,
|
|
ts.setModuleDefaultHelper
|
|
], function (helper) { return helper.name; }));
|
|
}
|
|
ts.getAllUnscopedEmitHelpers = getAllUnscopedEmitHelpers;
|
|
ts.asyncSuperHelper = {
|
|
name: "typescript:async-super",
|
|
scoped: true,
|
|
text: helperString(__makeTemplateObject(["\n const ", " = name => super[name];"], ["\n const ", " = name => super[name];"]), "_superIndex")
|
|
};
|
|
ts.advancedAsyncSuperHelper = {
|
|
name: "typescript:advanced-async-super",
|
|
scoped: true,
|
|
text: 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);"]), "_superIndex")
|
|
};
|
|
function isCallToHelper(firstSegment, helperName) {
|
|
return ts.isCallExpression(firstSegment)
|
|
&& ts.isIdentifier(firstSegment.expression)
|
|
&& (ts.getEmitFlags(firstSegment.expression) & 4096) !== 0
|
|
&& firstSegment.expression.escapedText === helperName;
|
|
}
|
|
ts.isCallToHelper = isCallToHelper;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function isNumericLiteral(node) {
|
|
return node.kind === 8;
|
|
}
|
|
ts.isNumericLiteral = isNumericLiteral;
|
|
function isBigIntLiteral(node) {
|
|
return node.kind === 9;
|
|
}
|
|
ts.isBigIntLiteral = isBigIntLiteral;
|
|
function isStringLiteral(node) {
|
|
return node.kind === 10;
|
|
}
|
|
ts.isStringLiteral = isStringLiteral;
|
|
function isJsxText(node) {
|
|
return node.kind === 11;
|
|
}
|
|
ts.isJsxText = isJsxText;
|
|
function isRegularExpressionLiteral(node) {
|
|
return node.kind === 13;
|
|
}
|
|
ts.isRegularExpressionLiteral = isRegularExpressionLiteral;
|
|
function isNoSubstitutionTemplateLiteral(node) {
|
|
return node.kind === 14;
|
|
}
|
|
ts.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral;
|
|
function isTemplateHead(node) {
|
|
return node.kind === 15;
|
|
}
|
|
ts.isTemplateHead = isTemplateHead;
|
|
function isTemplateMiddle(node) {
|
|
return node.kind === 16;
|
|
}
|
|
ts.isTemplateMiddle = isTemplateMiddle;
|
|
function isTemplateTail(node) {
|
|
return node.kind === 17;
|
|
}
|
|
ts.isTemplateTail = isTemplateTail;
|
|
function isDotDotDotToken(node) {
|
|
return node.kind === 25;
|
|
}
|
|
ts.isDotDotDotToken = isDotDotDotToken;
|
|
function isCommaToken(node) {
|
|
return node.kind === 27;
|
|
}
|
|
ts.isCommaToken = isCommaToken;
|
|
function isPlusToken(node) {
|
|
return node.kind === 39;
|
|
}
|
|
ts.isPlusToken = isPlusToken;
|
|
function isMinusToken(node) {
|
|
return node.kind === 40;
|
|
}
|
|
ts.isMinusToken = isMinusToken;
|
|
function isAsteriskToken(node) {
|
|
return node.kind === 41;
|
|
}
|
|
ts.isAsteriskToken = isAsteriskToken;
|
|
function isExclamationToken(node) {
|
|
return node.kind === 53;
|
|
}
|
|
ts.isExclamationToken = isExclamationToken;
|
|
function isQuestionToken(node) {
|
|
return node.kind === 57;
|
|
}
|
|
ts.isQuestionToken = isQuestionToken;
|
|
function isColonToken(node) {
|
|
return node.kind === 58;
|
|
}
|
|
ts.isColonToken = isColonToken;
|
|
function isQuestionDotToken(node) {
|
|
return node.kind === 28;
|
|
}
|
|
ts.isQuestionDotToken = isQuestionDotToken;
|
|
function isEqualsGreaterThanToken(node) {
|
|
return node.kind === 38;
|
|
}
|
|
ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
|
|
function isIdentifier(node) {
|
|
return node.kind === 79;
|
|
}
|
|
ts.isIdentifier = isIdentifier;
|
|
function isPrivateIdentifier(node) {
|
|
return node.kind === 80;
|
|
}
|
|
ts.isPrivateIdentifier = isPrivateIdentifier;
|
|
function isExportModifier(node) {
|
|
return node.kind === 93;
|
|
}
|
|
ts.isExportModifier = isExportModifier;
|
|
function isAsyncModifier(node) {
|
|
return node.kind === 131;
|
|
}
|
|
ts.isAsyncModifier = isAsyncModifier;
|
|
function isAssertsKeyword(node) {
|
|
return node.kind === 128;
|
|
}
|
|
ts.isAssertsKeyword = isAssertsKeyword;
|
|
function isAwaitKeyword(node) {
|
|
return node.kind === 132;
|
|
}
|
|
ts.isAwaitKeyword = isAwaitKeyword;
|
|
function isReadonlyKeyword(node) {
|
|
return node.kind === 145;
|
|
}
|
|
ts.isReadonlyKeyword = isReadonlyKeyword;
|
|
function isStaticModifier(node) {
|
|
return node.kind === 124;
|
|
}
|
|
ts.isStaticModifier = isStaticModifier;
|
|
function isAbstractModifier(node) {
|
|
return node.kind === 126;
|
|
}
|
|
ts.isAbstractModifier = isAbstractModifier;
|
|
function isOverrideModifier(node) {
|
|
return node.kind === 159;
|
|
}
|
|
ts.isOverrideModifier = isOverrideModifier;
|
|
function isSuperKeyword(node) {
|
|
return node.kind === 106;
|
|
}
|
|
ts.isSuperKeyword = isSuperKeyword;
|
|
function isImportKeyword(node) {
|
|
return node.kind === 100;
|
|
}
|
|
ts.isImportKeyword = isImportKeyword;
|
|
function isQualifiedName(node) {
|
|
return node.kind === 161;
|
|
}
|
|
ts.isQualifiedName = isQualifiedName;
|
|
function isComputedPropertyName(node) {
|
|
return node.kind === 162;
|
|
}
|
|
ts.isComputedPropertyName = isComputedPropertyName;
|
|
function isTypeParameterDeclaration(node) {
|
|
return node.kind === 163;
|
|
}
|
|
ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
|
|
function isParameter(node) {
|
|
return node.kind === 164;
|
|
}
|
|
ts.isParameter = isParameter;
|
|
function isDecorator(node) {
|
|
return node.kind === 165;
|
|
}
|
|
ts.isDecorator = isDecorator;
|
|
function isPropertySignature(node) {
|
|
return node.kind === 166;
|
|
}
|
|
ts.isPropertySignature = isPropertySignature;
|
|
function isPropertyDeclaration(node) {
|
|
return node.kind === 167;
|
|
}
|
|
ts.isPropertyDeclaration = isPropertyDeclaration;
|
|
function isMethodSignature(node) {
|
|
return node.kind === 168;
|
|
}
|
|
ts.isMethodSignature = isMethodSignature;
|
|
function isMethodDeclaration(node) {
|
|
return node.kind === 169;
|
|
}
|
|
ts.isMethodDeclaration = isMethodDeclaration;
|
|
function isClassStaticBlockDeclaration(node) {
|
|
return node.kind === 170;
|
|
}
|
|
ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
|
|
function isConstructorDeclaration(node) {
|
|
return node.kind === 171;
|
|
}
|
|
ts.isConstructorDeclaration = isConstructorDeclaration;
|
|
function isGetAccessorDeclaration(node) {
|
|
return node.kind === 172;
|
|
}
|
|
ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
|
|
function isSetAccessorDeclaration(node) {
|
|
return node.kind === 173;
|
|
}
|
|
ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
|
|
function isCallSignatureDeclaration(node) {
|
|
return node.kind === 174;
|
|
}
|
|
ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
|
|
function isConstructSignatureDeclaration(node) {
|
|
return node.kind === 175;
|
|
}
|
|
ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
|
|
function isIndexSignatureDeclaration(node) {
|
|
return node.kind === 176;
|
|
}
|
|
ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
|
|
function isTypePredicateNode(node) {
|
|
return node.kind === 177;
|
|
}
|
|
ts.isTypePredicateNode = isTypePredicateNode;
|
|
function isTypeReferenceNode(node) {
|
|
return node.kind === 178;
|
|
}
|
|
ts.isTypeReferenceNode = isTypeReferenceNode;
|
|
function isFunctionTypeNode(node) {
|
|
return node.kind === 179;
|
|
}
|
|
ts.isFunctionTypeNode = isFunctionTypeNode;
|
|
function isConstructorTypeNode(node) {
|
|
return node.kind === 180;
|
|
}
|
|
ts.isConstructorTypeNode = isConstructorTypeNode;
|
|
function isTypeQueryNode(node) {
|
|
return node.kind === 181;
|
|
}
|
|
ts.isTypeQueryNode = isTypeQueryNode;
|
|
function isTypeLiteralNode(node) {
|
|
return node.kind === 182;
|
|
}
|
|
ts.isTypeLiteralNode = isTypeLiteralNode;
|
|
function isArrayTypeNode(node) {
|
|
return node.kind === 183;
|
|
}
|
|
ts.isArrayTypeNode = isArrayTypeNode;
|
|
function isTupleTypeNode(node) {
|
|
return node.kind === 184;
|
|
}
|
|
ts.isTupleTypeNode = isTupleTypeNode;
|
|
function isNamedTupleMember(node) {
|
|
return node.kind === 197;
|
|
}
|
|
ts.isNamedTupleMember = isNamedTupleMember;
|
|
function isOptionalTypeNode(node) {
|
|
return node.kind === 185;
|
|
}
|
|
ts.isOptionalTypeNode = isOptionalTypeNode;
|
|
function isRestTypeNode(node) {
|
|
return node.kind === 186;
|
|
}
|
|
ts.isRestTypeNode = isRestTypeNode;
|
|
function isUnionTypeNode(node) {
|
|
return node.kind === 187;
|
|
}
|
|
ts.isUnionTypeNode = isUnionTypeNode;
|
|
function isIntersectionTypeNode(node) {
|
|
return node.kind === 188;
|
|
}
|
|
ts.isIntersectionTypeNode = isIntersectionTypeNode;
|
|
function isConditionalTypeNode(node) {
|
|
return node.kind === 189;
|
|
}
|
|
ts.isConditionalTypeNode = isConditionalTypeNode;
|
|
function isInferTypeNode(node) {
|
|
return node.kind === 190;
|
|
}
|
|
ts.isInferTypeNode = isInferTypeNode;
|
|
function isParenthesizedTypeNode(node) {
|
|
return node.kind === 191;
|
|
}
|
|
ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
|
|
function isThisTypeNode(node) {
|
|
return node.kind === 192;
|
|
}
|
|
ts.isThisTypeNode = isThisTypeNode;
|
|
function isTypeOperatorNode(node) {
|
|
return node.kind === 193;
|
|
}
|
|
ts.isTypeOperatorNode = isTypeOperatorNode;
|
|
function isIndexedAccessTypeNode(node) {
|
|
return node.kind === 194;
|
|
}
|
|
ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
|
|
function isMappedTypeNode(node) {
|
|
return node.kind === 195;
|
|
}
|
|
ts.isMappedTypeNode = isMappedTypeNode;
|
|
function isLiteralTypeNode(node) {
|
|
return node.kind === 196;
|
|
}
|
|
ts.isLiteralTypeNode = isLiteralTypeNode;
|
|
function isImportTypeNode(node) {
|
|
return node.kind === 200;
|
|
}
|
|
ts.isImportTypeNode = isImportTypeNode;
|
|
function isTemplateLiteralTypeSpan(node) {
|
|
return node.kind === 199;
|
|
}
|
|
ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
|
|
function isTemplateLiteralTypeNode(node) {
|
|
return node.kind === 198;
|
|
}
|
|
ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
|
|
function isObjectBindingPattern(node) {
|
|
return node.kind === 201;
|
|
}
|
|
ts.isObjectBindingPattern = isObjectBindingPattern;
|
|
function isArrayBindingPattern(node) {
|
|
return node.kind === 202;
|
|
}
|
|
ts.isArrayBindingPattern = isArrayBindingPattern;
|
|
function isBindingElement(node) {
|
|
return node.kind === 203;
|
|
}
|
|
ts.isBindingElement = isBindingElement;
|
|
function isArrayLiteralExpression(node) {
|
|
return node.kind === 204;
|
|
}
|
|
ts.isArrayLiteralExpression = isArrayLiteralExpression;
|
|
function isObjectLiteralExpression(node) {
|
|
return node.kind === 205;
|
|
}
|
|
ts.isObjectLiteralExpression = isObjectLiteralExpression;
|
|
function isPropertyAccessExpression(node) {
|
|
return node.kind === 206;
|
|
}
|
|
ts.isPropertyAccessExpression = isPropertyAccessExpression;
|
|
function isElementAccessExpression(node) {
|
|
return node.kind === 207;
|
|
}
|
|
ts.isElementAccessExpression = isElementAccessExpression;
|
|
function isCallExpression(node) {
|
|
return node.kind === 208;
|
|
}
|
|
ts.isCallExpression = isCallExpression;
|
|
function isNewExpression(node) {
|
|
return node.kind === 209;
|
|
}
|
|
ts.isNewExpression = isNewExpression;
|
|
function isTaggedTemplateExpression(node) {
|
|
return node.kind === 210;
|
|
}
|
|
ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
|
|
function isTypeAssertionExpression(node) {
|
|
return node.kind === 211;
|
|
}
|
|
ts.isTypeAssertionExpression = isTypeAssertionExpression;
|
|
function isParenthesizedExpression(node) {
|
|
return node.kind === 212;
|
|
}
|
|
ts.isParenthesizedExpression = isParenthesizedExpression;
|
|
function isFunctionExpression(node) {
|
|
return node.kind === 213;
|
|
}
|
|
ts.isFunctionExpression = isFunctionExpression;
|
|
function isArrowFunction(node) {
|
|
return node.kind === 214;
|
|
}
|
|
ts.isArrowFunction = isArrowFunction;
|
|
function isDeleteExpression(node) {
|
|
return node.kind === 215;
|
|
}
|
|
ts.isDeleteExpression = isDeleteExpression;
|
|
function isTypeOfExpression(node) {
|
|
return node.kind === 216;
|
|
}
|
|
ts.isTypeOfExpression = isTypeOfExpression;
|
|
function isVoidExpression(node) {
|
|
return node.kind === 217;
|
|
}
|
|
ts.isVoidExpression = isVoidExpression;
|
|
function isAwaitExpression(node) {
|
|
return node.kind === 218;
|
|
}
|
|
ts.isAwaitExpression = isAwaitExpression;
|
|
function isPrefixUnaryExpression(node) {
|
|
return node.kind === 219;
|
|
}
|
|
ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
|
|
function isPostfixUnaryExpression(node) {
|
|
return node.kind === 220;
|
|
}
|
|
ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
|
|
function isBinaryExpression(node) {
|
|
return node.kind === 221;
|
|
}
|
|
ts.isBinaryExpression = isBinaryExpression;
|
|
function isConditionalExpression(node) {
|
|
return node.kind === 222;
|
|
}
|
|
ts.isConditionalExpression = isConditionalExpression;
|
|
function isTemplateExpression(node) {
|
|
return node.kind === 223;
|
|
}
|
|
ts.isTemplateExpression = isTemplateExpression;
|
|
function isYieldExpression(node) {
|
|
return node.kind === 224;
|
|
}
|
|
ts.isYieldExpression = isYieldExpression;
|
|
function isSpreadElement(node) {
|
|
return node.kind === 225;
|
|
}
|
|
ts.isSpreadElement = isSpreadElement;
|
|
function isClassExpression(node) {
|
|
return node.kind === 226;
|
|
}
|
|
ts.isClassExpression = isClassExpression;
|
|
function isOmittedExpression(node) {
|
|
return node.kind === 227;
|
|
}
|
|
ts.isOmittedExpression = isOmittedExpression;
|
|
function isExpressionWithTypeArguments(node) {
|
|
return node.kind === 228;
|
|
}
|
|
ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
|
|
function isAsExpression(node) {
|
|
return node.kind === 229;
|
|
}
|
|
ts.isAsExpression = isAsExpression;
|
|
function isNonNullExpression(node) {
|
|
return node.kind === 230;
|
|
}
|
|
ts.isNonNullExpression = isNonNullExpression;
|
|
function isMetaProperty(node) {
|
|
return node.kind === 231;
|
|
}
|
|
ts.isMetaProperty = isMetaProperty;
|
|
function isSyntheticExpression(node) {
|
|
return node.kind === 232;
|
|
}
|
|
ts.isSyntheticExpression = isSyntheticExpression;
|
|
function isPartiallyEmittedExpression(node) {
|
|
return node.kind === 350;
|
|
}
|
|
ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
|
|
function isCommaListExpression(node) {
|
|
return node.kind === 351;
|
|
}
|
|
ts.isCommaListExpression = isCommaListExpression;
|
|
function isTemplateSpan(node) {
|
|
return node.kind === 233;
|
|
}
|
|
ts.isTemplateSpan = isTemplateSpan;
|
|
function isSemicolonClassElement(node) {
|
|
return node.kind === 234;
|
|
}
|
|
ts.isSemicolonClassElement = isSemicolonClassElement;
|
|
function isBlock(node) {
|
|
return node.kind === 235;
|
|
}
|
|
ts.isBlock = isBlock;
|
|
function isVariableStatement(node) {
|
|
return node.kind === 237;
|
|
}
|
|
ts.isVariableStatement = isVariableStatement;
|
|
function isEmptyStatement(node) {
|
|
return node.kind === 236;
|
|
}
|
|
ts.isEmptyStatement = isEmptyStatement;
|
|
function isExpressionStatement(node) {
|
|
return node.kind === 238;
|
|
}
|
|
ts.isExpressionStatement = isExpressionStatement;
|
|
function isIfStatement(node) {
|
|
return node.kind === 239;
|
|
}
|
|
ts.isIfStatement = isIfStatement;
|
|
function isDoStatement(node) {
|
|
return node.kind === 240;
|
|
}
|
|
ts.isDoStatement = isDoStatement;
|
|
function isWhileStatement(node) {
|
|
return node.kind === 241;
|
|
}
|
|
ts.isWhileStatement = isWhileStatement;
|
|
function isForStatement(node) {
|
|
return node.kind === 242;
|
|
}
|
|
ts.isForStatement = isForStatement;
|
|
function isForInStatement(node) {
|
|
return node.kind === 243;
|
|
}
|
|
ts.isForInStatement = isForInStatement;
|
|
function isForOfStatement(node) {
|
|
return node.kind === 244;
|
|
}
|
|
ts.isForOfStatement = isForOfStatement;
|
|
function isContinueStatement(node) {
|
|
return node.kind === 245;
|
|
}
|
|
ts.isContinueStatement = isContinueStatement;
|
|
function isBreakStatement(node) {
|
|
return node.kind === 246;
|
|
}
|
|
ts.isBreakStatement = isBreakStatement;
|
|
function isReturnStatement(node) {
|
|
return node.kind === 247;
|
|
}
|
|
ts.isReturnStatement = isReturnStatement;
|
|
function isWithStatement(node) {
|
|
return node.kind === 248;
|
|
}
|
|
ts.isWithStatement = isWithStatement;
|
|
function isSwitchStatement(node) {
|
|
return node.kind === 249;
|
|
}
|
|
ts.isSwitchStatement = isSwitchStatement;
|
|
function isLabeledStatement(node) {
|
|
return node.kind === 250;
|
|
}
|
|
ts.isLabeledStatement = isLabeledStatement;
|
|
function isThrowStatement(node) {
|
|
return node.kind === 251;
|
|
}
|
|
ts.isThrowStatement = isThrowStatement;
|
|
function isTryStatement(node) {
|
|
return node.kind === 252;
|
|
}
|
|
ts.isTryStatement = isTryStatement;
|
|
function isDebuggerStatement(node) {
|
|
return node.kind === 253;
|
|
}
|
|
ts.isDebuggerStatement = isDebuggerStatement;
|
|
function isVariableDeclaration(node) {
|
|
return node.kind === 254;
|
|
}
|
|
ts.isVariableDeclaration = isVariableDeclaration;
|
|
function isVariableDeclarationList(node) {
|
|
return node.kind === 255;
|
|
}
|
|
ts.isVariableDeclarationList = isVariableDeclarationList;
|
|
function isFunctionDeclaration(node) {
|
|
return node.kind === 256;
|
|
}
|
|
ts.isFunctionDeclaration = isFunctionDeclaration;
|
|
function isClassDeclaration(node) {
|
|
return node.kind === 257;
|
|
}
|
|
ts.isClassDeclaration = isClassDeclaration;
|
|
function isInterfaceDeclaration(node) {
|
|
return node.kind === 258;
|
|
}
|
|
ts.isInterfaceDeclaration = isInterfaceDeclaration;
|
|
function isTypeAliasDeclaration(node) {
|
|
return node.kind === 259;
|
|
}
|
|
ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
|
|
function isEnumDeclaration(node) {
|
|
return node.kind === 260;
|
|
}
|
|
ts.isEnumDeclaration = isEnumDeclaration;
|
|
function isModuleDeclaration(node) {
|
|
return node.kind === 261;
|
|
}
|
|
ts.isModuleDeclaration = isModuleDeclaration;
|
|
function isModuleBlock(node) {
|
|
return node.kind === 262;
|
|
}
|
|
ts.isModuleBlock = isModuleBlock;
|
|
function isCaseBlock(node) {
|
|
return node.kind === 263;
|
|
}
|
|
ts.isCaseBlock = isCaseBlock;
|
|
function isNamespaceExportDeclaration(node) {
|
|
return node.kind === 264;
|
|
}
|
|
ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
|
|
function isImportEqualsDeclaration(node) {
|
|
return node.kind === 265;
|
|
}
|
|
ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
|
|
function isImportDeclaration(node) {
|
|
return node.kind === 266;
|
|
}
|
|
ts.isImportDeclaration = isImportDeclaration;
|
|
function isImportClause(node) {
|
|
return node.kind === 267;
|
|
}
|
|
ts.isImportClause = isImportClause;
|
|
function isImportTypeAssertionContainer(node) {
|
|
return node.kind === 295;
|
|
}
|
|
ts.isImportTypeAssertionContainer = isImportTypeAssertionContainer;
|
|
function isAssertClause(node) {
|
|
return node.kind === 293;
|
|
}
|
|
ts.isAssertClause = isAssertClause;
|
|
function isAssertEntry(node) {
|
|
return node.kind === 294;
|
|
}
|
|
ts.isAssertEntry = isAssertEntry;
|
|
function isNamespaceImport(node) {
|
|
return node.kind === 268;
|
|
}
|
|
ts.isNamespaceImport = isNamespaceImport;
|
|
function isNamespaceExport(node) {
|
|
return node.kind === 274;
|
|
}
|
|
ts.isNamespaceExport = isNamespaceExport;
|
|
function isNamedImports(node) {
|
|
return node.kind === 269;
|
|
}
|
|
ts.isNamedImports = isNamedImports;
|
|
function isImportSpecifier(node) {
|
|
return node.kind === 270;
|
|
}
|
|
ts.isImportSpecifier = isImportSpecifier;
|
|
function isExportAssignment(node) {
|
|
return node.kind === 271;
|
|
}
|
|
ts.isExportAssignment = isExportAssignment;
|
|
function isExportDeclaration(node) {
|
|
return node.kind === 272;
|
|
}
|
|
ts.isExportDeclaration = isExportDeclaration;
|
|
function isNamedExports(node) {
|
|
return node.kind === 273;
|
|
}
|
|
ts.isNamedExports = isNamedExports;
|
|
function isExportSpecifier(node) {
|
|
return node.kind === 275;
|
|
}
|
|
ts.isExportSpecifier = isExportSpecifier;
|
|
function isMissingDeclaration(node) {
|
|
return node.kind === 276;
|
|
}
|
|
ts.isMissingDeclaration = isMissingDeclaration;
|
|
function isNotEmittedStatement(node) {
|
|
return node.kind === 349;
|
|
}
|
|
ts.isNotEmittedStatement = isNotEmittedStatement;
|
|
function isSyntheticReference(node) {
|
|
return node.kind === 354;
|
|
}
|
|
ts.isSyntheticReference = isSyntheticReference;
|
|
function isMergeDeclarationMarker(node) {
|
|
return node.kind === 352;
|
|
}
|
|
ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
|
|
function isEndOfDeclarationMarker(node) {
|
|
return node.kind === 353;
|
|
}
|
|
ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
|
|
function isExternalModuleReference(node) {
|
|
return node.kind === 277;
|
|
}
|
|
ts.isExternalModuleReference = isExternalModuleReference;
|
|
function isJsxElement(node) {
|
|
return node.kind === 278;
|
|
}
|
|
ts.isJsxElement = isJsxElement;
|
|
function isJsxSelfClosingElement(node) {
|
|
return node.kind === 279;
|
|
}
|
|
ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
|
|
function isJsxOpeningElement(node) {
|
|
return node.kind === 280;
|
|
}
|
|
ts.isJsxOpeningElement = isJsxOpeningElement;
|
|
function isJsxClosingElement(node) {
|
|
return node.kind === 281;
|
|
}
|
|
ts.isJsxClosingElement = isJsxClosingElement;
|
|
function isJsxFragment(node) {
|
|
return node.kind === 282;
|
|
}
|
|
ts.isJsxFragment = isJsxFragment;
|
|
function isJsxOpeningFragment(node) {
|
|
return node.kind === 283;
|
|
}
|
|
ts.isJsxOpeningFragment = isJsxOpeningFragment;
|
|
function isJsxClosingFragment(node) {
|
|
return node.kind === 284;
|
|
}
|
|
ts.isJsxClosingFragment = isJsxClosingFragment;
|
|
function isJsxAttribute(node) {
|
|
return node.kind === 285;
|
|
}
|
|
ts.isJsxAttribute = isJsxAttribute;
|
|
function isJsxAttributes(node) {
|
|
return node.kind === 286;
|
|
}
|
|
ts.isJsxAttributes = isJsxAttributes;
|
|
function isJsxSpreadAttribute(node) {
|
|
return node.kind === 287;
|
|
}
|
|
ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
|
|
function isJsxExpression(node) {
|
|
return node.kind === 288;
|
|
}
|
|
ts.isJsxExpression = isJsxExpression;
|
|
function isCaseClause(node) {
|
|
return node.kind === 289;
|
|
}
|
|
ts.isCaseClause = isCaseClause;
|
|
function isDefaultClause(node) {
|
|
return node.kind === 290;
|
|
}
|
|
ts.isDefaultClause = isDefaultClause;
|
|
function isHeritageClause(node) {
|
|
return node.kind === 291;
|
|
}
|
|
ts.isHeritageClause = isHeritageClause;
|
|
function isCatchClause(node) {
|
|
return node.kind === 292;
|
|
}
|
|
ts.isCatchClause = isCatchClause;
|
|
function isPropertyAssignment(node) {
|
|
return node.kind === 296;
|
|
}
|
|
ts.isPropertyAssignment = isPropertyAssignment;
|
|
function isShorthandPropertyAssignment(node) {
|
|
return node.kind === 297;
|
|
}
|
|
ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
|
|
function isSpreadAssignment(node) {
|
|
return node.kind === 298;
|
|
}
|
|
ts.isSpreadAssignment = isSpreadAssignment;
|
|
function isEnumMember(node) {
|
|
return node.kind === 299;
|
|
}
|
|
ts.isEnumMember = isEnumMember;
|
|
function isUnparsedPrepend(node) {
|
|
return node.kind === 301;
|
|
}
|
|
ts.isUnparsedPrepend = isUnparsedPrepend;
|
|
function isSourceFile(node) {
|
|
return node.kind === 305;
|
|
}
|
|
ts.isSourceFile = isSourceFile;
|
|
function isBundle(node) {
|
|
return node.kind === 306;
|
|
}
|
|
ts.isBundle = isBundle;
|
|
function isUnparsedSource(node) {
|
|
return node.kind === 307;
|
|
}
|
|
ts.isUnparsedSource = isUnparsedSource;
|
|
function isJSDocTypeExpression(node) {
|
|
return node.kind === 309;
|
|
}
|
|
ts.isJSDocTypeExpression = isJSDocTypeExpression;
|
|
function isJSDocNameReference(node) {
|
|
return node.kind === 310;
|
|
}
|
|
ts.isJSDocNameReference = isJSDocNameReference;
|
|
function isJSDocMemberName(node) {
|
|
return node.kind === 311;
|
|
}
|
|
ts.isJSDocMemberName = isJSDocMemberName;
|
|
function isJSDocLink(node) {
|
|
return node.kind === 324;
|
|
}
|
|
ts.isJSDocLink = isJSDocLink;
|
|
function isJSDocLinkCode(node) {
|
|
return node.kind === 325;
|
|
}
|
|
ts.isJSDocLinkCode = isJSDocLinkCode;
|
|
function isJSDocLinkPlain(node) {
|
|
return node.kind === 326;
|
|
}
|
|
ts.isJSDocLinkPlain = isJSDocLinkPlain;
|
|
function isJSDocAllType(node) {
|
|
return node.kind === 312;
|
|
}
|
|
ts.isJSDocAllType = isJSDocAllType;
|
|
function isJSDocUnknownType(node) {
|
|
return node.kind === 313;
|
|
}
|
|
ts.isJSDocUnknownType = isJSDocUnknownType;
|
|
function isJSDocNullableType(node) {
|
|
return node.kind === 314;
|
|
}
|
|
ts.isJSDocNullableType = isJSDocNullableType;
|
|
function isJSDocNonNullableType(node) {
|
|
return node.kind === 315;
|
|
}
|
|
ts.isJSDocNonNullableType = isJSDocNonNullableType;
|
|
function isJSDocOptionalType(node) {
|
|
return node.kind === 316;
|
|
}
|
|
ts.isJSDocOptionalType = isJSDocOptionalType;
|
|
function isJSDocFunctionType(node) {
|
|
return node.kind === 317;
|
|
}
|
|
ts.isJSDocFunctionType = isJSDocFunctionType;
|
|
function isJSDocVariadicType(node) {
|
|
return node.kind === 318;
|
|
}
|
|
ts.isJSDocVariadicType = isJSDocVariadicType;
|
|
function isJSDocNamepathType(node) {
|
|
return node.kind === 319;
|
|
}
|
|
ts.isJSDocNamepathType = isJSDocNamepathType;
|
|
function isJSDoc(node) {
|
|
return node.kind === 320;
|
|
}
|
|
ts.isJSDoc = isJSDoc;
|
|
function isJSDocTypeLiteral(node) {
|
|
return node.kind === 322;
|
|
}
|
|
ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
|
|
function isJSDocSignature(node) {
|
|
return node.kind === 323;
|
|
}
|
|
ts.isJSDocSignature = isJSDocSignature;
|
|
function isJSDocAugmentsTag(node) {
|
|
return node.kind === 328;
|
|
}
|
|
ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
|
|
function isJSDocAuthorTag(node) {
|
|
return node.kind === 330;
|
|
}
|
|
ts.isJSDocAuthorTag = isJSDocAuthorTag;
|
|
function isJSDocClassTag(node) {
|
|
return node.kind === 332;
|
|
}
|
|
ts.isJSDocClassTag = isJSDocClassTag;
|
|
function isJSDocCallbackTag(node) {
|
|
return node.kind === 338;
|
|
}
|
|
ts.isJSDocCallbackTag = isJSDocCallbackTag;
|
|
function isJSDocPublicTag(node) {
|
|
return node.kind === 333;
|
|
}
|
|
ts.isJSDocPublicTag = isJSDocPublicTag;
|
|
function isJSDocPrivateTag(node) {
|
|
return node.kind === 334;
|
|
}
|
|
ts.isJSDocPrivateTag = isJSDocPrivateTag;
|
|
function isJSDocProtectedTag(node) {
|
|
return node.kind === 335;
|
|
}
|
|
ts.isJSDocProtectedTag = isJSDocProtectedTag;
|
|
function isJSDocReadonlyTag(node) {
|
|
return node.kind === 336;
|
|
}
|
|
ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
|
|
function isJSDocOverrideTag(node) {
|
|
return node.kind === 337;
|
|
}
|
|
ts.isJSDocOverrideTag = isJSDocOverrideTag;
|
|
function isJSDocDeprecatedTag(node) {
|
|
return node.kind === 331;
|
|
}
|
|
ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
|
|
function isJSDocSeeTag(node) {
|
|
return node.kind === 346;
|
|
}
|
|
ts.isJSDocSeeTag = isJSDocSeeTag;
|
|
function isJSDocEnumTag(node) {
|
|
return node.kind === 339;
|
|
}
|
|
ts.isJSDocEnumTag = isJSDocEnumTag;
|
|
function isJSDocParameterTag(node) {
|
|
return node.kind === 340;
|
|
}
|
|
ts.isJSDocParameterTag = isJSDocParameterTag;
|
|
function isJSDocReturnTag(node) {
|
|
return node.kind === 341;
|
|
}
|
|
ts.isJSDocReturnTag = isJSDocReturnTag;
|
|
function isJSDocThisTag(node) {
|
|
return node.kind === 342;
|
|
}
|
|
ts.isJSDocThisTag = isJSDocThisTag;
|
|
function isJSDocTypeTag(node) {
|
|
return node.kind === 343;
|
|
}
|
|
ts.isJSDocTypeTag = isJSDocTypeTag;
|
|
function isJSDocTemplateTag(node) {
|
|
return node.kind === 344;
|
|
}
|
|
ts.isJSDocTemplateTag = isJSDocTemplateTag;
|
|
function isJSDocTypedefTag(node) {
|
|
return node.kind === 345;
|
|
}
|
|
ts.isJSDocTypedefTag = isJSDocTypedefTag;
|
|
function isJSDocUnknownTag(node) {
|
|
return node.kind === 327;
|
|
}
|
|
ts.isJSDocUnknownTag = isJSDocUnknownTag;
|
|
function isJSDocPropertyTag(node) {
|
|
return node.kind === 347;
|
|
}
|
|
ts.isJSDocPropertyTag = isJSDocPropertyTag;
|
|
function isJSDocImplementsTag(node) {
|
|
return node.kind === 329;
|
|
}
|
|
ts.isJSDocImplementsTag = isJSDocImplementsTag;
|
|
function isSyntaxList(n) {
|
|
return n.kind === 348;
|
|
}
|
|
ts.isSyntaxList = isSyntaxList;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createEmptyExports(factory) {
|
|
return factory.createExportDeclaration(undefined, false, factory.createNamedExports([]), undefined);
|
|
}
|
|
ts.createEmptyExports = createEmptyExports;
|
|
function createMemberAccessForPropertyName(factory, target, memberName, location) {
|
|
if (ts.isComputedPropertyName(memberName)) {
|
|
return ts.setTextRange(factory.createElementAccessExpression(target, memberName.expression), location);
|
|
}
|
|
else {
|
|
var expression = ts.setTextRange(ts.isMemberName(memberName)
|
|
? factory.createPropertyAccessExpression(target, memberName)
|
|
: factory.createElementAccessExpression(target, memberName), memberName);
|
|
ts.getOrCreateEmitNode(expression).flags |= 64;
|
|
return expression;
|
|
}
|
|
}
|
|
ts.createMemberAccessForPropertyName = createMemberAccessForPropertyName;
|
|
function createReactNamespace(reactNamespace, parent) {
|
|
var react = ts.parseNodeFactory.createIdentifier(reactNamespace || "React");
|
|
ts.setParent(react, ts.getParseTreeNode(parent));
|
|
return react;
|
|
}
|
|
function createJsxFactoryExpressionFromEntityName(factory, jsxFactory, parent) {
|
|
if (ts.isQualifiedName(jsxFactory)) {
|
|
var left = createJsxFactoryExpressionFromEntityName(factory, jsxFactory.left, parent);
|
|
var right = factory.createIdentifier(ts.idText(jsxFactory.right));
|
|
right.escapedText = jsxFactory.right.escapedText;
|
|
return factory.createPropertyAccessExpression(left, right);
|
|
}
|
|
else {
|
|
return createReactNamespace(ts.idText(jsxFactory), parent);
|
|
}
|
|
}
|
|
function createJsxFactoryExpression(factory, jsxFactoryEntity, reactNamespace, parent) {
|
|
return jsxFactoryEntity ?
|
|
createJsxFactoryExpressionFromEntityName(factory, jsxFactoryEntity, parent) :
|
|
factory.createPropertyAccessExpression(createReactNamespace(reactNamespace, parent), "createElement");
|
|
}
|
|
ts.createJsxFactoryExpression = createJsxFactoryExpression;
|
|
function createJsxFragmentFactoryExpression(factory, jsxFragmentFactoryEntity, reactNamespace, parent) {
|
|
return jsxFragmentFactoryEntity ?
|
|
createJsxFactoryExpressionFromEntityName(factory, jsxFragmentFactoryEntity, parent) :
|
|
factory.createPropertyAccessExpression(createReactNamespace(reactNamespace, parent), "Fragment");
|
|
}
|
|
function createExpressionForJsxElement(factory, callee, tagName, props, children, location) {
|
|
var argumentsList = [tagName];
|
|
if (props) {
|
|
argumentsList.push(props);
|
|
}
|
|
if (children && children.length > 0) {
|
|
if (!props) {
|
|
argumentsList.push(factory.createNull());
|
|
}
|
|
if (children.length > 1) {
|
|
for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
|
|
var child = children_3[_i];
|
|
startOnNewLine(child);
|
|
argumentsList.push(child);
|
|
}
|
|
}
|
|
else {
|
|
argumentsList.push(children[0]);
|
|
}
|
|
}
|
|
return ts.setTextRange(factory.createCallExpression(callee, undefined, argumentsList), location);
|
|
}
|
|
ts.createExpressionForJsxElement = createExpressionForJsxElement;
|
|
function createExpressionForJsxFragment(factory, jsxFactoryEntity, jsxFragmentFactoryEntity, reactNamespace, children, parentElement, location) {
|
|
var tagName = createJsxFragmentFactoryExpression(factory, jsxFragmentFactoryEntity, reactNamespace, parentElement);
|
|
var argumentsList = [tagName, factory.createNull()];
|
|
if (children && children.length > 0) {
|
|
if (children.length > 1) {
|
|
for (var _i = 0, children_4 = children; _i < children_4.length; _i++) {
|
|
var child = children_4[_i];
|
|
startOnNewLine(child);
|
|
argumentsList.push(child);
|
|
}
|
|
}
|
|
else {
|
|
argumentsList.push(children[0]);
|
|
}
|
|
}
|
|
return ts.setTextRange(factory.createCallExpression(createJsxFactoryExpression(factory, jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location);
|
|
}
|
|
ts.createExpressionForJsxFragment = createExpressionForJsxFragment;
|
|
function createForOfBindingStatement(factory, node, boundValue) {
|
|
if (ts.isVariableDeclarationList(node)) {
|
|
var firstDeclaration = ts.first(node.declarations);
|
|
var updatedDeclaration = factory.updateVariableDeclaration(firstDeclaration, firstDeclaration.name, undefined, undefined, boundValue);
|
|
return ts.setTextRange(factory.createVariableStatement(undefined, factory.updateVariableDeclarationList(node, [updatedDeclaration])), node);
|
|
}
|
|
else {
|
|
var updatedExpression = ts.setTextRange(factory.createAssignment(node, boundValue), node);
|
|
return ts.setTextRange(factory.createExpressionStatement(updatedExpression), node);
|
|
}
|
|
}
|
|
ts.createForOfBindingStatement = createForOfBindingStatement;
|
|
function insertLeadingStatement(factory, dest, source) {
|
|
if (ts.isBlock(dest)) {
|
|
return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
|
|
}
|
|
else {
|
|
return factory.createBlock(factory.createNodeArray([dest, source]), true);
|
|
}
|
|
}
|
|
ts.insertLeadingStatement = insertLeadingStatement;
|
|
function createExpressionFromEntityName(factory, node) {
|
|
if (ts.isQualifiedName(node)) {
|
|
var left = createExpressionFromEntityName(factory, node.left);
|
|
var right = ts.setParent(ts.setTextRange(factory.cloneNode(node.right), node.right), node.right.parent);
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(left, right), node);
|
|
}
|
|
else {
|
|
return ts.setParent(ts.setTextRange(factory.cloneNode(node), node), node.parent);
|
|
}
|
|
}
|
|
ts.createExpressionFromEntityName = createExpressionFromEntityName;
|
|
function createExpressionForPropertyName(factory, memberName) {
|
|
if (ts.isIdentifier(memberName)) {
|
|
return factory.createStringLiteralFromNode(memberName);
|
|
}
|
|
else if (ts.isComputedPropertyName(memberName)) {
|
|
return ts.setParent(ts.setTextRange(factory.cloneNode(memberName.expression), memberName.expression), memberName.expression.parent);
|
|
}
|
|
else {
|
|
return ts.setParent(ts.setTextRange(factory.cloneNode(memberName), memberName), memberName.parent);
|
|
}
|
|
}
|
|
ts.createExpressionForPropertyName = createExpressionForPropertyName;
|
|
function createExpressionForAccessorDeclaration(factory, properties, property, receiver, multiLine) {
|
|
var _a = ts.getAllAccessorDeclarations(properties, property), firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor;
|
|
if (property === firstAccessor) {
|
|
return ts.setTextRange(factory.createObjectDefinePropertyCall(receiver, createExpressionForPropertyName(factory, property.name), factory.createPropertyDescriptor({
|
|
enumerable: factory.createFalse(),
|
|
configurable: true,
|
|
get: getAccessor && ts.setTextRange(ts.setOriginalNode(factory.createFunctionExpression(ts.getModifiers(getAccessor), undefined, undefined, undefined, getAccessor.parameters, undefined, getAccessor.body), getAccessor), getAccessor),
|
|
set: setAccessor && ts.setTextRange(ts.setOriginalNode(factory.createFunctionExpression(ts.getModifiers(setAccessor), undefined, undefined, undefined, setAccessor.parameters, undefined, setAccessor.body), setAccessor), setAccessor)
|
|
}, !multiLine)), firstAccessor);
|
|
}
|
|
return undefined;
|
|
}
|
|
function createExpressionForPropertyAssignment(factory, property, receiver) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createAssignment(createMemberAccessForPropertyName(factory, receiver, property.name, property.name), property.initializer), property), property);
|
|
}
|
|
function createExpressionForShorthandPropertyAssignment(factory, property, receiver) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createAssignment(createMemberAccessForPropertyName(factory, receiver, property.name, property.name), factory.cloneNode(property.name)), property), property);
|
|
}
|
|
function createExpressionForMethodDeclaration(factory, method, receiver) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createAssignment(createMemberAccessForPropertyName(factory, receiver, method.name, method.name), ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(ts.getModifiers(method), method.asteriskToken, undefined, undefined, method.parameters, undefined, method.body), method), method)), method), method);
|
|
}
|
|
function createExpressionForObjectLiteralElementLike(factory, node, property, receiver) {
|
|
if (property.name && ts.isPrivateIdentifier(property.name)) {
|
|
ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
|
|
}
|
|
switch (property.kind) {
|
|
case 172:
|
|
case 173:
|
|
return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
|
|
case 296:
|
|
return createExpressionForPropertyAssignment(factory, property, receiver);
|
|
case 297:
|
|
return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
|
|
case 169:
|
|
return createExpressionForMethodDeclaration(factory, property, receiver);
|
|
}
|
|
}
|
|
ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
|
|
function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
|
|
var operator = node.operator;
|
|
ts.Debug.assert(operator === 45 || operator === 46, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
|
|
var temp = factory.createTempVariable(recordTempVariable);
|
|
expression = factory.createAssignment(temp, expression);
|
|
ts.setTextRange(expression, node.operand);
|
|
var operation = ts.isPrefixUnaryExpression(node) ?
|
|
factory.createPrefixUnaryExpression(operator, temp) :
|
|
factory.createPostfixUnaryExpression(temp, operator);
|
|
ts.setTextRange(operation, node);
|
|
if (resultVariable) {
|
|
operation = factory.createAssignment(resultVariable, operation);
|
|
ts.setTextRange(operation, node);
|
|
}
|
|
expression = factory.createComma(expression, operation);
|
|
ts.setTextRange(expression, node);
|
|
if (ts.isPostfixUnaryExpression(node)) {
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
|
|
function isInternalName(node) {
|
|
return (ts.getEmitFlags(node) & 32768) !== 0;
|
|
}
|
|
ts.isInternalName = isInternalName;
|
|
function isLocalName(node) {
|
|
return (ts.getEmitFlags(node) & 16384) !== 0;
|
|
}
|
|
ts.isLocalName = isLocalName;
|
|
function isExportName(node) {
|
|
return (ts.getEmitFlags(node) & 8192) !== 0;
|
|
}
|
|
ts.isExportName = isExportName;
|
|
function isUseStrictPrologue(node) {
|
|
return ts.isStringLiteral(node.expression) && node.expression.text === "use strict";
|
|
}
|
|
function findUseStrictPrologue(statements) {
|
|
for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
|
|
var statement = statements_1[_i];
|
|
if (ts.isPrologueDirective(statement)) {
|
|
if (isUseStrictPrologue(statement)) {
|
|
return statement;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.findUseStrictPrologue = findUseStrictPrologue;
|
|
function startsWithUseStrict(statements) {
|
|
var firstStatement = ts.firstOrUndefined(statements);
|
|
return firstStatement !== undefined
|
|
&& ts.isPrologueDirective(firstStatement)
|
|
&& isUseStrictPrologue(firstStatement);
|
|
}
|
|
ts.startsWithUseStrict = startsWithUseStrict;
|
|
function isCommaSequence(node) {
|
|
return node.kind === 221 && node.operatorToken.kind === 27 ||
|
|
node.kind === 351;
|
|
}
|
|
ts.isCommaSequence = isCommaSequence;
|
|
function isJSDocTypeAssertion(node) {
|
|
return ts.isParenthesizedExpression(node)
|
|
&& ts.isInJSFile(node)
|
|
&& !!ts.getJSDocTypeTag(node);
|
|
}
|
|
ts.isJSDocTypeAssertion = isJSDocTypeAssertion;
|
|
function getJSDocTypeAssertionType(node) {
|
|
var type = ts.getJSDocType(node);
|
|
ts.Debug.assertIsDefined(type);
|
|
return type;
|
|
}
|
|
ts.getJSDocTypeAssertionType = getJSDocTypeAssertionType;
|
|
function isOuterExpression(node, kinds) {
|
|
if (kinds === void 0) { kinds = 15; }
|
|
switch (node.kind) {
|
|
case 212:
|
|
if (kinds & 16 && isJSDocTypeAssertion(node)) {
|
|
return false;
|
|
}
|
|
return (kinds & 1) !== 0;
|
|
case 211:
|
|
case 229:
|
|
return (kinds & 2) !== 0;
|
|
case 230:
|
|
return (kinds & 4) !== 0;
|
|
case 350:
|
|
return (kinds & 8) !== 0;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isOuterExpression = isOuterExpression;
|
|
function skipOuterExpressions(node, kinds) {
|
|
if (kinds === void 0) { kinds = 15; }
|
|
while (isOuterExpression(node, kinds)) {
|
|
node = node.expression;
|
|
}
|
|
return node;
|
|
}
|
|
ts.skipOuterExpressions = skipOuterExpressions;
|
|
function skipAssertions(node) {
|
|
return skipOuterExpressions(node, 6);
|
|
}
|
|
ts.skipAssertions = skipAssertions;
|
|
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 hasRecordedExternalHelpers(sourceFile) {
|
|
var parseNode = ts.getOriginalNode(sourceFile, ts.isSourceFile);
|
|
var emitNode = parseNode && parseNode.emitNode;
|
|
return !!emitNode && (!!emitNode.externalHelpersModuleName || !!emitNode.externalHelpers);
|
|
}
|
|
ts.hasRecordedExternalHelpers = hasRecordedExternalHelpers;
|
|
function createExternalHelpersImportDeclarationIfNeeded(nodeFactory, helperFactory, sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStar, hasImportDefault) {
|
|
if (compilerOptions.importHelpers && ts.isEffectiveExternalModule(sourceFile, compilerOptions)) {
|
|
var namedBindings = void 0;
|
|
var moduleKind = ts.getEmitModuleKind(compilerOptions);
|
|
if ((moduleKind >= ts.ModuleKind.ES2015 && moduleKind <= ts.ModuleKind.ESNext) || sourceFile.impliedNodeFormat === ts.ModuleKind.ESNext) {
|
|
var helpers = ts.getEmitHelpers(sourceFile);
|
|
if (helpers) {
|
|
var helperNames = [];
|
|
for (var _i = 0, helpers_3 = helpers; _i < helpers_3.length; _i++) {
|
|
var helper = helpers_3[_i];
|
|
if (!helper.scoped) {
|
|
var importName = helper.importName;
|
|
if (importName) {
|
|
ts.pushIfUnique(helperNames, importName);
|
|
}
|
|
}
|
|
}
|
|
if (ts.some(helperNames)) {
|
|
helperNames.sort(ts.compareStringsCaseSensitive);
|
|
namedBindings = nodeFactory.createNamedImports(ts.map(helperNames, function (name) { return ts.isFileLevelUniqueName(sourceFile, name)
|
|
? nodeFactory.createImportSpecifier(false, undefined, nodeFactory.createIdentifier(name))
|
|
: nodeFactory.createImportSpecifier(false, nodeFactory.createIdentifier(name), helperFactory.getUnscopedHelperName(name)); }));
|
|
var parseNode = ts.getOriginalNode(sourceFile, ts.isSourceFile);
|
|
var emitNode = ts.getOrCreateEmitNode(parseNode);
|
|
emitNode.externalHelpers = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var externalHelpersModuleName = getOrCreateExternalHelpersModuleNameIfNeeded(nodeFactory, sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStar || hasImportDefault);
|
|
if (externalHelpersModuleName) {
|
|
namedBindings = nodeFactory.createNamespaceImport(externalHelpersModuleName);
|
|
}
|
|
}
|
|
if (namedBindings) {
|
|
var externalHelpersImportDeclaration = nodeFactory.createImportDeclaration(undefined, nodeFactory.createImportClause(false, undefined, namedBindings), nodeFactory.createStringLiteral(ts.externalHelpersModuleNameText), undefined);
|
|
ts.addEmitFlags(externalHelpersImportDeclaration, 67108864);
|
|
return externalHelpersImportDeclaration;
|
|
}
|
|
}
|
|
}
|
|
ts.createExternalHelpersImportDeclarationIfNeeded = createExternalHelpersImportDeclarationIfNeeded;
|
|
function getOrCreateExternalHelpersModuleNameIfNeeded(factory, 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 || (ts.getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault))
|
|
&& moduleKind !== ts.ModuleKind.System
|
|
&& (moduleKind < ts.ModuleKind.ES2015 || node.impliedNodeFormat === ts.ModuleKind.CommonJS);
|
|
if (!create) {
|
|
var helpers = ts.getEmitHelpers(node);
|
|
if (helpers) {
|
|
for (var _i = 0, helpers_4 = helpers; _i < helpers_4.length; _i++) {
|
|
var helper = helpers_4[_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 = factory.createUniqueName(ts.externalHelpersModuleNameText));
|
|
}
|
|
}
|
|
}
|
|
ts.getOrCreateExternalHelpersModuleNameIfNeeded = getOrCreateExternalHelpersModuleNameIfNeeded;
|
|
function getLocalNameForExternalImport(factory, node, sourceFile) {
|
|
var namespaceDeclaration = ts.getNamespaceDeclarationNode(node);
|
|
if (namespaceDeclaration && !ts.isDefaultImport(node) && !ts.isExportNamespaceAsDefaultDeclaration(node)) {
|
|
var name = namespaceDeclaration.name;
|
|
return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
|
|
}
|
|
if (node.kind === 266 && node.importClause) {
|
|
return factory.getGeneratedNameForNode(node);
|
|
}
|
|
if (node.kind === 272 && node.moduleSpecifier) {
|
|
return factory.getGeneratedNameForNode(node);
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getLocalNameForExternalImport = getLocalNameForExternalImport;
|
|
function getExternalModuleNameLiteral(factory, importNode, sourceFile, host, resolver, compilerOptions) {
|
|
var moduleName = ts.getExternalModuleName(importNode);
|
|
if (moduleName && ts.isStringLiteral(moduleName)) {
|
|
return tryGetModuleNameFromDeclaration(importNode, host, factory, resolver, compilerOptions)
|
|
|| tryRenameExternalModule(factory, moduleName, sourceFile)
|
|
|| factory.cloneNode(moduleName);
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getExternalModuleNameLiteral = getExternalModuleNameLiteral;
|
|
function tryRenameExternalModule(factory, moduleName, sourceFile) {
|
|
var rename = sourceFile.renamedDependencies && sourceFile.renamedDependencies.get(moduleName.text);
|
|
return rename ? factory.createStringLiteral(rename) : undefined;
|
|
}
|
|
function tryGetModuleNameFromFile(factory, file, host, options) {
|
|
if (!file) {
|
|
return undefined;
|
|
}
|
|
if (file.moduleName) {
|
|
return factory.createStringLiteral(file.moduleName);
|
|
}
|
|
if (!file.isDeclarationFile && ts.outFile(options)) {
|
|
return factory.createStringLiteral(ts.getExternalModuleNameFromPath(host, file.fileName));
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.tryGetModuleNameFromFile = tryGetModuleNameFromFile;
|
|
function tryGetModuleNameFromDeclaration(declaration, host, factory, resolver, compilerOptions) {
|
|
return tryGetModuleNameFromFile(factory, 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 296:
|
|
return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
|
|
case 297:
|
|
return bindingElement.name;
|
|
case 298:
|
|
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 164:
|
|
case 203:
|
|
return bindingElement.dotDotDotToken;
|
|
case 225:
|
|
case 298:
|
|
return bindingElement;
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getRestIndicatorOfBindingOrAssignmentElement = getRestIndicatorOfBindingOrAssignmentElement;
|
|
function getPropertyNameOfBindingOrAssignmentElement(bindingElement) {
|
|
var propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement);
|
|
ts.Debug.assert(!!propertyName || ts.isSpreadAssignment(bindingElement), "Invalid property name for binding element.");
|
|
return propertyName;
|
|
}
|
|
ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
|
|
function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
|
|
switch (bindingElement.kind) {
|
|
case 203:
|
|
if (bindingElement.propertyName) {
|
|
var propertyName = bindingElement.propertyName;
|
|
if (ts.isPrivateIdentifier(propertyName)) {
|
|
return ts.Debug.failBadSyntaxKind(propertyName);
|
|
}
|
|
return ts.isComputedPropertyName(propertyName) && isStringOrNumericLiteral(propertyName.expression)
|
|
? propertyName.expression
|
|
: propertyName;
|
|
}
|
|
break;
|
|
case 296:
|
|
if (bindingElement.name) {
|
|
var propertyName = bindingElement.name;
|
|
if (ts.isPrivateIdentifier(propertyName)) {
|
|
return ts.Debug.failBadSyntaxKind(propertyName);
|
|
}
|
|
return ts.isComputedPropertyName(propertyName) && isStringOrNumericLiteral(propertyName.expression)
|
|
? propertyName.expression
|
|
: propertyName;
|
|
}
|
|
break;
|
|
case 298:
|
|
if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
|
|
return ts.Debug.failBadSyntaxKind(bindingElement.name);
|
|
}
|
|
return bindingElement.name;
|
|
}
|
|
var target = getTargetOfBindingOrAssignmentElement(bindingElement);
|
|
if (target && ts.isPropertyName(target)) {
|
|
return target;
|
|
}
|
|
}
|
|
ts.tryGetPropertyNameOfBindingOrAssignmentElement = tryGetPropertyNameOfBindingOrAssignmentElement;
|
|
function isStringOrNumericLiteral(node) {
|
|
var kind = node.kind;
|
|
return kind === 10
|
|
|| kind === 8;
|
|
}
|
|
function getElementsOfBindingOrAssignmentPattern(name) {
|
|
switch (name.kind) {
|
|
case 201:
|
|
case 202:
|
|
case 204:
|
|
return name.elements;
|
|
case 205:
|
|
return name.properties;
|
|
}
|
|
}
|
|
ts.getElementsOfBindingOrAssignmentPattern = getElementsOfBindingOrAssignmentPattern;
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
|
|
function canHaveIllegalType(node) {
|
|
var kind = node.kind;
|
|
return kind === 171
|
|
|| kind === 173;
|
|
}
|
|
ts.canHaveIllegalType = canHaveIllegalType;
|
|
function canHaveIllegalTypeParameters(node) {
|
|
var kind = node.kind;
|
|
return kind === 171
|
|
|| kind === 172
|
|
|| kind === 173;
|
|
}
|
|
ts.canHaveIllegalTypeParameters = canHaveIllegalTypeParameters;
|
|
function canHaveIllegalDecorators(node) {
|
|
var kind = node.kind;
|
|
return kind === 296
|
|
|| kind === 297
|
|
|| kind === 256
|
|
|| kind === 171
|
|
|| kind === 176
|
|
|| kind === 170
|
|
|| kind === 276
|
|
|| kind === 237
|
|
|| kind === 258
|
|
|| kind === 259
|
|
|| kind === 260
|
|
|| kind === 261
|
|
|| kind === 265
|
|
|| kind === 266
|
|
|| kind === 264
|
|
|| kind === 272
|
|
|| kind === 271;
|
|
}
|
|
ts.canHaveIllegalDecorators = canHaveIllegalDecorators;
|
|
function canHaveIllegalModifiers(node) {
|
|
var kind = node.kind;
|
|
return kind === 170
|
|
|| kind === 296
|
|
|| kind === 297
|
|
|| kind === 179
|
|
|| kind === 276
|
|
|| kind === 264;
|
|
}
|
|
ts.canHaveIllegalModifiers = canHaveIllegalModifiers;
|
|
ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
|
|
ts.isQuestionOrExclamationToken = ts.or(ts.isQuestionToken, ts.isExclamationToken);
|
|
ts.isIdentifierOrThisTypeNode = ts.or(ts.isIdentifier, ts.isThisTypeNode);
|
|
ts.isReadonlyKeywordOrPlusOrMinusToken = ts.or(ts.isReadonlyKeyword, ts.isPlusToken, ts.isMinusToken);
|
|
ts.isQuestionOrPlusOrMinusToken = ts.or(ts.isQuestionToken, ts.isPlusToken, ts.isMinusToken);
|
|
ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
|
|
function isLiteralTypeLikeExpression(node) {
|
|
var kind = node.kind;
|
|
return kind === 104
|
|
|| kind === 110
|
|
|| kind === 95
|
|
|| ts.isLiteralExpression(node)
|
|
|| ts.isPrefixUnaryExpression(node);
|
|
}
|
|
ts.isLiteralTypeLikeExpression = isLiteralTypeLikeExpression;
|
|
function isExponentiationOperator(kind) {
|
|
return kind === 42;
|
|
}
|
|
function isMultiplicativeOperator(kind) {
|
|
return kind === 41
|
|
|| kind === 43
|
|
|| kind === 44;
|
|
}
|
|
function isMultiplicativeOperatorOrHigher(kind) {
|
|
return isExponentiationOperator(kind)
|
|
|| isMultiplicativeOperator(kind);
|
|
}
|
|
function isAdditiveOperator(kind) {
|
|
return kind === 39
|
|
|| kind === 40;
|
|
}
|
|
function isAdditiveOperatorOrHigher(kind) {
|
|
return isAdditiveOperator(kind)
|
|
|| isMultiplicativeOperatorOrHigher(kind);
|
|
}
|
|
function isShiftOperator(kind) {
|
|
return kind === 47
|
|
|| kind === 48
|
|
|| kind === 49;
|
|
}
|
|
function isShiftOperatorOrHigher(kind) {
|
|
return isShiftOperator(kind)
|
|
|| isAdditiveOperatorOrHigher(kind);
|
|
}
|
|
function isRelationalOperator(kind) {
|
|
return kind === 29
|
|
|| kind === 32
|
|
|| kind === 31
|
|
|| kind === 33
|
|
|| kind === 102
|
|
|| kind === 101;
|
|
}
|
|
function isRelationalOperatorOrHigher(kind) {
|
|
return isRelationalOperator(kind)
|
|
|| isShiftOperatorOrHigher(kind);
|
|
}
|
|
function isEqualityOperator(kind) {
|
|
return kind === 34
|
|
|| kind === 36
|
|
|| kind === 35
|
|
|| kind === 37;
|
|
}
|
|
function isEqualityOperatorOrHigher(kind) {
|
|
return isEqualityOperator(kind)
|
|
|| isRelationalOperatorOrHigher(kind);
|
|
}
|
|
function isBitwiseOperator(kind) {
|
|
return kind === 50
|
|
|| kind === 51
|
|
|| kind === 52;
|
|
}
|
|
function isBitwiseOperatorOrHigher(kind) {
|
|
return isBitwiseOperator(kind)
|
|
|| isEqualityOperatorOrHigher(kind);
|
|
}
|
|
function isLogicalOperator(kind) {
|
|
return kind === 55
|
|
|| kind === 56;
|
|
}
|
|
function isLogicalOperatorOrHigher(kind) {
|
|
return isLogicalOperator(kind)
|
|
|| isBitwiseOperatorOrHigher(kind);
|
|
}
|
|
function isAssignmentOperatorOrHigher(kind) {
|
|
return kind === 60
|
|
|| isLogicalOperatorOrHigher(kind)
|
|
|| ts.isAssignmentOperator(kind);
|
|
}
|
|
function isBinaryOperator(kind) {
|
|
return isAssignmentOperatorOrHigher(kind)
|
|
|| kind === 27;
|
|
}
|
|
function isBinaryOperatorToken(node) {
|
|
return isBinaryOperator(node.kind);
|
|
}
|
|
ts.isBinaryOperatorToken = isBinaryOperatorToken;
|
|
var BinaryExpressionState;
|
|
(function (BinaryExpressionState) {
|
|
function enter(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, outerState) {
|
|
var prevUserState = stackIndex > 0 ? userStateStack[stackIndex - 1] : undefined;
|
|
ts.Debug.assertEqual(stateStack[stackIndex], enter);
|
|
userStateStack[stackIndex] = machine.onEnter(nodeStack[stackIndex], prevUserState, outerState);
|
|
stateStack[stackIndex] = nextState(machine, enter);
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.enter = enter;
|
|
function left(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) {
|
|
ts.Debug.assertEqual(stateStack[stackIndex], left);
|
|
ts.Debug.assertIsDefined(machine.onLeft);
|
|
stateStack[stackIndex] = nextState(machine, left);
|
|
var nextNode = machine.onLeft(nodeStack[stackIndex].left, userStateStack[stackIndex], nodeStack[stackIndex]);
|
|
if (nextNode) {
|
|
checkCircularity(stackIndex, nodeStack, nextNode);
|
|
return pushStack(stackIndex, stateStack, nodeStack, userStateStack, nextNode);
|
|
}
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.left = left;
|
|
function operator(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) {
|
|
ts.Debug.assertEqual(stateStack[stackIndex], operator);
|
|
ts.Debug.assertIsDefined(machine.onOperator);
|
|
stateStack[stackIndex] = nextState(machine, operator);
|
|
machine.onOperator(nodeStack[stackIndex].operatorToken, userStateStack[stackIndex], nodeStack[stackIndex]);
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.operator = operator;
|
|
function right(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) {
|
|
ts.Debug.assertEqual(stateStack[stackIndex], right);
|
|
ts.Debug.assertIsDefined(machine.onRight);
|
|
stateStack[stackIndex] = nextState(machine, right);
|
|
var nextNode = machine.onRight(nodeStack[stackIndex].right, userStateStack[stackIndex], nodeStack[stackIndex]);
|
|
if (nextNode) {
|
|
checkCircularity(stackIndex, nodeStack, nextNode);
|
|
return pushStack(stackIndex, stateStack, nodeStack, userStateStack, nextNode);
|
|
}
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.right = right;
|
|
function exit(machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, _outerState) {
|
|
ts.Debug.assertEqual(stateStack[stackIndex], exit);
|
|
stateStack[stackIndex] = nextState(machine, exit);
|
|
var result = machine.onExit(nodeStack[stackIndex], userStateStack[stackIndex]);
|
|
if (stackIndex > 0) {
|
|
stackIndex--;
|
|
if (machine.foldState) {
|
|
var side = stateStack[stackIndex] === exit ? "right" : "left";
|
|
userStateStack[stackIndex] = machine.foldState(userStateStack[stackIndex], result, side);
|
|
}
|
|
}
|
|
else {
|
|
resultHolder.value = result;
|
|
}
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.exit = exit;
|
|
function done(_machine, stackIndex, stateStack, _nodeStack, _userStateStack, _resultHolder, _outerState) {
|
|
ts.Debug.assertEqual(stateStack[stackIndex], done);
|
|
return stackIndex;
|
|
}
|
|
BinaryExpressionState.done = done;
|
|
function nextState(machine, currentState) {
|
|
switch (currentState) {
|
|
case enter:
|
|
if (machine.onLeft)
|
|
return left;
|
|
case left:
|
|
if (machine.onOperator)
|
|
return operator;
|
|
case operator:
|
|
if (machine.onRight)
|
|
return right;
|
|
case right: return exit;
|
|
case exit: return done;
|
|
case done: return done;
|
|
default: ts.Debug.fail("Invalid state");
|
|
}
|
|
}
|
|
BinaryExpressionState.nextState = nextState;
|
|
function pushStack(stackIndex, stateStack, nodeStack, userStateStack, node) {
|
|
stackIndex++;
|
|
stateStack[stackIndex] = enter;
|
|
nodeStack[stackIndex] = node;
|
|
userStateStack[stackIndex] = undefined;
|
|
return stackIndex;
|
|
}
|
|
function checkCircularity(stackIndex, nodeStack, node) {
|
|
if (ts.Debug.shouldAssert(2)) {
|
|
while (stackIndex >= 0) {
|
|
ts.Debug.assert(nodeStack[stackIndex] !== node, "Circular traversal detected.");
|
|
stackIndex--;
|
|
}
|
|
}
|
|
}
|
|
})(BinaryExpressionState || (BinaryExpressionState = {}));
|
|
var BinaryExpressionStateMachine = (function () {
|
|
function BinaryExpressionStateMachine(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
|
|
this.onEnter = onEnter;
|
|
this.onLeft = onLeft;
|
|
this.onOperator = onOperator;
|
|
this.onRight = onRight;
|
|
this.onExit = onExit;
|
|
this.foldState = foldState;
|
|
}
|
|
return BinaryExpressionStateMachine;
|
|
}());
|
|
function createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
|
|
var machine = new BinaryExpressionStateMachine(onEnter, onLeft, onOperator, onRight, onExit, foldState);
|
|
return trampoline;
|
|
function trampoline(node, outerState) {
|
|
var resultHolder = { value: undefined };
|
|
var stateStack = [BinaryExpressionState.enter];
|
|
var nodeStack = [node];
|
|
var userStateStack = [undefined];
|
|
var stackIndex = 0;
|
|
while (stateStack[stackIndex] !== BinaryExpressionState.done) {
|
|
stackIndex = stateStack[stackIndex](machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, outerState);
|
|
}
|
|
ts.Debug.assertEqual(stackIndex, 0);
|
|
return resultHolder.value;
|
|
}
|
|
}
|
|
ts.createBinaryExpressionTrampoline = createBinaryExpressionTrampoline;
|
|
function elideNodes(factory, nodes) {
|
|
if (nodes === undefined)
|
|
return undefined;
|
|
if (nodes.length === 0)
|
|
return nodes;
|
|
return ts.setTextRange(factory.createNodeArray([], nodes.hasTrailingComma), nodes);
|
|
}
|
|
ts.elideNodes = elideNodes;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function setTextRange(range, location) {
|
|
return location ? ts.setTextRangePosEnd(range, location.pos, location.end) : range;
|
|
}
|
|
ts.setTextRange = setTextRange;
|
|
function canHaveModifiers(node) {
|
|
var kind = node.kind;
|
|
return kind === 163
|
|
|| kind === 164
|
|
|| kind === 166
|
|
|| kind === 167
|
|
|| kind === 168
|
|
|| kind === 169
|
|
|| kind === 171
|
|
|| kind === 172
|
|
|| kind === 173
|
|
|| kind === 176
|
|
|| kind === 180
|
|
|| kind === 213
|
|
|| kind === 214
|
|
|| kind === 226
|
|
|| kind === 237
|
|
|| kind === 256
|
|
|| kind === 257
|
|
|| kind === 258
|
|
|| kind === 259
|
|
|| kind === 260
|
|
|| kind === 261
|
|
|| kind === 265
|
|
|| kind === 266
|
|
|| kind === 271
|
|
|| kind === 272;
|
|
}
|
|
ts.canHaveModifiers = canHaveModifiers;
|
|
function canHaveDecorators(node) {
|
|
var kind = node.kind;
|
|
return kind === 164
|
|
|| kind === 167
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173
|
|
|| kind === 226
|
|
|| kind === 257;
|
|
}
|
|
ts.canHaveDecorators = canHaveDecorators;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var NodeConstructor;
|
|
var TokenConstructor;
|
|
var IdentifierConstructor;
|
|
var PrivateIdentifierConstructor;
|
|
var SourceFileConstructor;
|
|
ts.parseBaseNodeFactory = {
|
|
createBaseSourceFileNode: function (kind) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, -1, -1); },
|
|
createBaseIdentifierNode: function (kind) { return new (IdentifierConstructor || (IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor()))(kind, -1, -1); },
|
|
createBasePrivateIdentifierNode: function (kind) { return new (PrivateIdentifierConstructor || (PrivateIdentifierConstructor = ts.objectAllocator.getPrivateIdentifierConstructor()))(kind, -1, -1); },
|
|
createBaseTokenNode: function (kind) { return new (TokenConstructor || (TokenConstructor = ts.objectAllocator.getTokenConstructor()))(kind, -1, -1); },
|
|
createBaseNode: function (kind) { return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, -1, -1); },
|
|
};
|
|
ts.parseNodeFactory = ts.createNodeFactory(1, ts.parseBaseNodeFactory);
|
|
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 isFileProbablyExternalModule(sourceFile) {
|
|
return ts.forEach(sourceFile.statements, isAnExternalModuleIndicatorNode) ||
|
|
getImportMetaIfNecessary(sourceFile);
|
|
}
|
|
ts.isFileProbablyExternalModule = isFileProbablyExternalModule;
|
|
function isAnExternalModuleIndicatorNode(node) {
|
|
return ts.canHaveModifiers(node) && hasModifierOfKind(node, 93)
|
|
|| ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
|
|
|| ts.isImportDeclaration(node)
|
|
|| ts.isExportAssignment(node)
|
|
|| ts.isExportDeclaration(node) ? node : undefined;
|
|
}
|
|
function getImportMetaIfNecessary(sourceFile) {
|
|
return sourceFile.flags & 4194304 ?
|
|
walkTreeForImportMeta(sourceFile) :
|
|
undefined;
|
|
}
|
|
function walkTreeForImportMeta(node) {
|
|
return isImportMeta(node) ? node : forEachChild(node, walkTreeForImportMeta);
|
|
}
|
|
function hasModifierOfKind(node, kind) {
|
|
return ts.some(node.modifiers, function (m) { return m.kind === kind; });
|
|
}
|
|
function isImportMeta(node) {
|
|
return ts.isMetaProperty(node) && node.keywordToken === 100 && node.name.escapedText === "meta";
|
|
}
|
|
function forEachChild(node, cbNode, cbNodes) {
|
|
if (!node || node.kind <= 160) {
|
|
return;
|
|
}
|
|
switch (node.kind) {
|
|
case 161:
|
|
return visitNode(cbNode, node.left) ||
|
|
visitNode(cbNode, node.right);
|
|
case 163:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.constraint) ||
|
|
visitNode(cbNode, node.default) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 297:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.exclamationToken) ||
|
|
visitNode(cbNode, node.equalsToken) ||
|
|
visitNode(cbNode, node.objectAssignmentInitializer);
|
|
case 298:
|
|
return visitNode(cbNode, node.expression);
|
|
case 164:
|
|
return 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 167:
|
|
return 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 166:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 296:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.exclamationToken) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 254:
|
|
return visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.exclamationToken) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 203:
|
|
return visitNode(cbNode, node.dotDotDotToken) ||
|
|
visitNode(cbNode, node.propertyName) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 176:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 180:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 179:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 174:
|
|
case 175:
|
|
return visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 169:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.asteriskToken) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.exclamationToken) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 168:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 171:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 172:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 173:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 256:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.asteriskToken) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 213:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.asteriskToken) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.body);
|
|
case 214:
|
|
return visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.equalsGreaterThanToken) ||
|
|
visitNode(cbNode, node.body);
|
|
case 170:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.body);
|
|
case 178:
|
|
return visitNode(cbNode, node.typeName) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments);
|
|
case 177:
|
|
return visitNode(cbNode, node.assertsModifier) ||
|
|
visitNode(cbNode, node.parameterName) ||
|
|
visitNode(cbNode, node.type);
|
|
case 181:
|
|
return visitNode(cbNode, node.exprName) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments);
|
|
case 182:
|
|
return visitNodes(cbNode, cbNodes, node.members);
|
|
case 183:
|
|
return visitNode(cbNode, node.elementType);
|
|
case 184:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 187:
|
|
case 188:
|
|
return visitNodes(cbNode, cbNodes, node.types);
|
|
case 189:
|
|
return visitNode(cbNode, node.checkType) ||
|
|
visitNode(cbNode, node.extendsType) ||
|
|
visitNode(cbNode, node.trueType) ||
|
|
visitNode(cbNode, node.falseType);
|
|
case 190:
|
|
return visitNode(cbNode, node.typeParameter);
|
|
case 200:
|
|
return visitNode(cbNode, node.argument) ||
|
|
visitNode(cbNode, node.assertions) ||
|
|
visitNode(cbNode, node.qualifier) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments);
|
|
case 295:
|
|
return visitNode(cbNode, node.assertClause);
|
|
case 191:
|
|
case 193:
|
|
return visitNode(cbNode, node.type);
|
|
case 194:
|
|
return visitNode(cbNode, node.objectType) ||
|
|
visitNode(cbNode, node.indexType);
|
|
case 195:
|
|
return visitNode(cbNode, node.readonlyToken) ||
|
|
visitNode(cbNode, node.typeParameter) ||
|
|
visitNode(cbNode, node.nameType) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.type) ||
|
|
visitNodes(cbNode, cbNodes, node.members);
|
|
case 196:
|
|
return visitNode(cbNode, node.literal);
|
|
case 197:
|
|
return visitNode(cbNode, node.dotDotDotToken) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.type);
|
|
case 201:
|
|
case 202:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 204:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 205:
|
|
return visitNodes(cbNode, cbNodes, node.properties);
|
|
case 206:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.questionDotToken) ||
|
|
visitNode(cbNode, node.name);
|
|
case 207:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.questionDotToken) ||
|
|
visitNode(cbNode, node.argumentExpression);
|
|
case 208:
|
|
case 209:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.questionDotToken) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments) ||
|
|
visitNodes(cbNode, cbNodes, node.arguments);
|
|
case 210:
|
|
return visitNode(cbNode, node.tag) ||
|
|
visitNode(cbNode, node.questionDotToken) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments) ||
|
|
visitNode(cbNode, node.template);
|
|
case 211:
|
|
return visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 212:
|
|
return visitNode(cbNode, node.expression);
|
|
case 215:
|
|
return visitNode(cbNode, node.expression);
|
|
case 216:
|
|
return visitNode(cbNode, node.expression);
|
|
case 217:
|
|
return visitNode(cbNode, node.expression);
|
|
case 219:
|
|
return visitNode(cbNode, node.operand);
|
|
case 224:
|
|
return visitNode(cbNode, node.asteriskToken) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 218:
|
|
return visitNode(cbNode, node.expression);
|
|
case 220:
|
|
return visitNode(cbNode, node.operand);
|
|
case 221:
|
|
return visitNode(cbNode, node.left) ||
|
|
visitNode(cbNode, node.operatorToken) ||
|
|
visitNode(cbNode, node.right);
|
|
case 229:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.type);
|
|
case 230:
|
|
return visitNode(cbNode, node.expression);
|
|
case 231:
|
|
return visitNode(cbNode, node.name);
|
|
case 222:
|
|
return visitNode(cbNode, node.condition) ||
|
|
visitNode(cbNode, node.questionToken) ||
|
|
visitNode(cbNode, node.whenTrue) ||
|
|
visitNode(cbNode, node.colonToken) ||
|
|
visitNode(cbNode, node.whenFalse);
|
|
case 225:
|
|
return visitNode(cbNode, node.expression);
|
|
case 235:
|
|
case 262:
|
|
return visitNodes(cbNode, cbNodes, node.statements);
|
|
case 305:
|
|
return visitNodes(cbNode, cbNodes, node.statements) ||
|
|
visitNode(cbNode, node.endOfFileToken);
|
|
case 237:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.declarationList);
|
|
case 255:
|
|
return visitNodes(cbNode, cbNodes, node.declarations);
|
|
case 238:
|
|
return visitNode(cbNode, node.expression);
|
|
case 239:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.thenStatement) ||
|
|
visitNode(cbNode, node.elseStatement);
|
|
case 240:
|
|
return visitNode(cbNode, node.statement) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 241:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 242:
|
|
return visitNode(cbNode, node.initializer) ||
|
|
visitNode(cbNode, node.condition) ||
|
|
visitNode(cbNode, node.incrementor) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 243:
|
|
return visitNode(cbNode, node.initializer) ||
|
|
visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 244:
|
|
return visitNode(cbNode, node.awaitModifier) ||
|
|
visitNode(cbNode, node.initializer) ||
|
|
visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 245:
|
|
case 246:
|
|
return visitNode(cbNode, node.label);
|
|
case 247:
|
|
return visitNode(cbNode, node.expression);
|
|
case 248:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 249:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.caseBlock);
|
|
case 263:
|
|
return visitNodes(cbNode, cbNodes, node.clauses);
|
|
case 289:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNodes(cbNode, cbNodes, node.statements);
|
|
case 290:
|
|
return visitNodes(cbNode, cbNodes, node.statements);
|
|
case 250:
|
|
return visitNode(cbNode, node.label) ||
|
|
visitNode(cbNode, node.statement);
|
|
case 251:
|
|
return visitNode(cbNode, node.expression);
|
|
case 252:
|
|
return visitNode(cbNode, node.tryBlock) ||
|
|
visitNode(cbNode, node.catchClause) ||
|
|
visitNode(cbNode, node.finallyBlock);
|
|
case 292:
|
|
return visitNode(cbNode, node.variableDeclaration) ||
|
|
visitNode(cbNode, node.block);
|
|
case 165:
|
|
return visitNode(cbNode, node.expression);
|
|
case 257:
|
|
case 226:
|
|
return 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 258:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
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 259:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 260:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNodes(cbNode, cbNodes, node.members);
|
|
case 299:
|
|
return visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 261:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.body);
|
|
case 265:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.moduleReference);
|
|
case 266:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.importClause) ||
|
|
visitNode(cbNode, node.moduleSpecifier) ||
|
|
visitNode(cbNode, node.assertClause);
|
|
case 267:
|
|
return visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.namedBindings);
|
|
case 293:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 294:
|
|
return visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.value);
|
|
case 264:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNode(cbNode, node.name);
|
|
case 268:
|
|
return visitNode(cbNode, node.name);
|
|
case 274:
|
|
return visitNode(cbNode, node.name);
|
|
case 269:
|
|
case 273:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 272:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.exportClause) ||
|
|
visitNode(cbNode, node.moduleSpecifier) ||
|
|
visitNode(cbNode, node.assertClause);
|
|
case 270:
|
|
case 275:
|
|
return visitNode(cbNode, node.propertyName) ||
|
|
visitNode(cbNode, node.name);
|
|
case 271:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 223:
|
|
return visitNode(cbNode, node.head) ||
|
|
visitNodes(cbNode, cbNodes, node.templateSpans);
|
|
case 233:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNode(cbNode, node.literal);
|
|
case 198:
|
|
return visitNode(cbNode, node.head) ||
|
|
visitNodes(cbNode, cbNodes, node.templateSpans);
|
|
case 199:
|
|
return visitNode(cbNode, node.type) ||
|
|
visitNode(cbNode, node.literal);
|
|
case 162:
|
|
return visitNode(cbNode, node.expression);
|
|
case 291:
|
|
return visitNodes(cbNode, cbNodes, node.types);
|
|
case 228:
|
|
return visitNode(cbNode, node.expression) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments);
|
|
case 277:
|
|
return visitNode(cbNode, node.expression);
|
|
case 276:
|
|
return visitNodes(cbNode, cbNodes, node.illegalDecorators) ||
|
|
visitNodes(cbNode, cbNodes, node.modifiers);
|
|
case 351:
|
|
return visitNodes(cbNode, cbNodes, node.elements);
|
|
case 278:
|
|
return visitNode(cbNode, node.openingElement) ||
|
|
visitNodes(cbNode, cbNodes, node.children) ||
|
|
visitNode(cbNode, node.closingElement);
|
|
case 282:
|
|
return visitNode(cbNode, node.openingFragment) ||
|
|
visitNodes(cbNode, cbNodes, node.children) ||
|
|
visitNode(cbNode, node.closingFragment);
|
|
case 279:
|
|
case 280:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNodes(cbNode, cbNodes, node.typeArguments) ||
|
|
visitNode(cbNode, node.attributes);
|
|
case 286:
|
|
return visitNodes(cbNode, cbNodes, node.properties);
|
|
case 285:
|
|
return visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.initializer);
|
|
case 287:
|
|
return visitNode(cbNode, node.expression);
|
|
case 288:
|
|
return visitNode(cbNode, node.dotDotDotToken) ||
|
|
visitNode(cbNode, node.expression);
|
|
case 281:
|
|
return visitNode(cbNode, node.tagName);
|
|
case 185:
|
|
case 186:
|
|
case 309:
|
|
case 315:
|
|
case 314:
|
|
case 316:
|
|
case 318:
|
|
return visitNode(cbNode, node.type);
|
|
case 317:
|
|
return visitNodes(cbNode, cbNodes, node.parameters) ||
|
|
visitNode(cbNode, node.type);
|
|
case 320:
|
|
return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
|
|
|| visitNodes(cbNode, cbNodes, node.tags);
|
|
case 346:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.name) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 310:
|
|
return visitNode(cbNode, node.name);
|
|
case 311:
|
|
return visitNode(cbNode, node.left) ||
|
|
visitNode(cbNode, node.right);
|
|
case 340:
|
|
case 347:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
(node.isNameFirst
|
|
? visitNode(cbNode, node.name) ||
|
|
visitNode(cbNode, node.typeExpression) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
|
|
: visitNode(cbNode, node.typeExpression) ||
|
|
visitNode(cbNode, node.name) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
|
|
case 330:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 329:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.class) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 328:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.class) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 344:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.constraint) ||
|
|
visitNodes(cbNode, cbNodes, node.typeParameters) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 345:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
(node.typeExpression &&
|
|
node.typeExpression.kind === 309
|
|
? visitNode(cbNode, node.typeExpression) ||
|
|
visitNode(cbNode, node.fullName) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
|
|
: visitNode(cbNode, node.fullName) ||
|
|
visitNode(cbNode, node.typeExpression) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
|
|
case 338:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.fullName) ||
|
|
visitNode(cbNode, node.typeExpression) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 341:
|
|
case 343:
|
|
case 342:
|
|
case 339:
|
|
return visitNode(cbNode, node.tagName) ||
|
|
visitNode(cbNode, node.typeExpression) ||
|
|
(typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 323:
|
|
return ts.forEach(node.typeParameters, cbNode) ||
|
|
ts.forEach(node.parameters, cbNode) ||
|
|
visitNode(cbNode, node.type);
|
|
case 324:
|
|
case 325:
|
|
case 326:
|
|
return visitNode(cbNode, node.name);
|
|
case 322:
|
|
return ts.forEach(node.jsDocPropertyTags, cbNode);
|
|
case 327:
|
|
case 332:
|
|
case 333:
|
|
case 334:
|
|
case 335:
|
|
case 336:
|
|
case 331:
|
|
return visitNode(cbNode, node.tagName)
|
|
|| (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
|
|
case 350:
|
|
return visitNode(cbNode, node.expression);
|
|
}
|
|
}
|
|
ts.forEachChild = forEachChild;
|
|
function forEachChildRecursively(rootNode, cbNode, cbNodes) {
|
|
var queue = gatherPossibleChildren(rootNode);
|
|
var parents = [];
|
|
while (parents.length < queue.length) {
|
|
parents.push(rootNode);
|
|
}
|
|
while (queue.length !== 0) {
|
|
var current = queue.pop();
|
|
var parent = parents.pop();
|
|
if (ts.isArray(current)) {
|
|
if (cbNodes) {
|
|
var res = cbNodes(current, parent);
|
|
if (res) {
|
|
if (res === "skip")
|
|
continue;
|
|
return res;
|
|
}
|
|
}
|
|
for (var i = current.length - 1; i >= 0; --i) {
|
|
queue.push(current[i]);
|
|
parents.push(parent);
|
|
}
|
|
}
|
|
else {
|
|
var res = cbNode(current, parent);
|
|
if (res) {
|
|
if (res === "skip")
|
|
continue;
|
|
return res;
|
|
}
|
|
if (current.kind >= 161) {
|
|
for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
|
|
var child = _a[_i];
|
|
queue.push(child);
|
|
parents.push(current);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ts.forEachChildRecursively = forEachChildRecursively;
|
|
function gatherPossibleChildren(node) {
|
|
var children = [];
|
|
forEachChild(node, addWorkItem, addWorkItem);
|
|
return children;
|
|
function addWorkItem(n) {
|
|
children.unshift(n);
|
|
}
|
|
}
|
|
function setExternalModuleIndicator(sourceFile) {
|
|
sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile);
|
|
}
|
|
function createSourceFile(fileName, sourceText, languageVersionOrOptions, setParentNodes, scriptKind) {
|
|
if (setParentNodes === void 0) { setParentNodes = false; }
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("parse", "createSourceFile", { path: fileName }, true);
|
|
ts.performance.mark("beforeParse");
|
|
var result;
|
|
ts.perfLogger.logStartParseSourceFile(fileName);
|
|
var _a = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : { languageVersion: languageVersionOrOptions }, languageVersion = _a.languageVersion, overrideSetExternalModuleIndicator = _a.setExternalModuleIndicator, format = _a.impliedNodeFormat;
|
|
if (languageVersion === 100) {
|
|
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, 6, ts.noop);
|
|
}
|
|
else {
|
|
var setIndicator = format === undefined ? overrideSetExternalModuleIndicator : function (file) {
|
|
file.impliedNodeFormat = format;
|
|
return (overrideSetExternalModuleIndicator || setExternalModuleIndicator)(file);
|
|
};
|
|
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind, setIndicator);
|
|
}
|
|
ts.perfLogger.logStopParseSourceFile();
|
|
ts.performance.mark("afterParse");
|
|
ts.performance.measure("Parse", "beforeParse", "afterParse");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
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 & 6291456);
|
|
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(99, true);
|
|
var disallowInAndDecoratorContext = 4096 | 16384;
|
|
var NodeConstructor;
|
|
var TokenConstructor;
|
|
var IdentifierConstructor;
|
|
var PrivateIdentifierConstructor;
|
|
var SourceFileConstructor;
|
|
function countNode(node) {
|
|
nodeCount++;
|
|
return node;
|
|
}
|
|
var baseNodeFactory = {
|
|
createBaseSourceFileNode: function (kind) { return countNode(new SourceFileConstructor(kind, 0, 0)); },
|
|
createBaseIdentifierNode: function (kind) { return countNode(new IdentifierConstructor(kind, 0, 0)); },
|
|
createBasePrivateIdentifierNode: function (kind) { return countNode(new PrivateIdentifierConstructor(kind, 0, 0)); },
|
|
createBaseTokenNode: function (kind) { return countNode(new TokenConstructor(kind, 0, 0)); },
|
|
createBaseNode: function (kind) { return countNode(new NodeConstructor(kind, 0, 0)); }
|
|
};
|
|
var factory = ts.createNodeFactory(1 | 2 | 8, baseNodeFactory);
|
|
var fileName;
|
|
var sourceFlags;
|
|
var sourceText;
|
|
var languageVersion;
|
|
var scriptKind;
|
|
var languageVariant;
|
|
var parseDiagnostics;
|
|
var jsDocDiagnostics;
|
|
var syntaxCursor;
|
|
var currentToken;
|
|
var nodeCount;
|
|
var identifiers;
|
|
var privateIdentifiers;
|
|
var identifierCount;
|
|
var parsingContext;
|
|
var notParenthesizedArrow;
|
|
var contextFlags;
|
|
var topLevel = true;
|
|
var parseErrorBeforeNextFinishedNode = false;
|
|
function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes, scriptKind, setExternalModuleIndicatorOverride) {
|
|
var _a;
|
|
if (setParentNodes === void 0) { setParentNodes = false; }
|
|
scriptKind = ts.ensureScriptKind(fileName, scriptKind);
|
|
if (scriptKind === 6) {
|
|
var result_3 = parseJsonText(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes);
|
|
ts.convertToObjectWorker(result_3, (_a = result_3.statements[0]) === null || _a === void 0 ? void 0 : _a.expression, result_3.parseDiagnostics, false, undefined, undefined);
|
|
result_3.referencedFiles = ts.emptyArray;
|
|
result_3.typeReferenceDirectives = ts.emptyArray;
|
|
result_3.libReferenceDirectives = ts.emptyArray;
|
|
result_3.amdDependencies = ts.emptyArray;
|
|
result_3.hasNoDefaultLib = false;
|
|
result_3.pragmas = ts.emptyMap;
|
|
return result_3;
|
|
}
|
|
initializeState(fileName, sourceText, languageVersion, syntaxCursor, scriptKind);
|
|
var result = parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicatorOverride || setExternalModuleIndicator);
|
|
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; }
|
|
if (setParentNodes === void 0) { setParentNodes = false; }
|
|
initializeState(fileName, sourceText, languageVersion, syntaxCursor, 6);
|
|
sourceFlags = contextFlags;
|
|
nextToken();
|
|
var pos = getNodePos();
|
|
var statements, endOfFileToken;
|
|
if (token() === 1) {
|
|
statements = createNodeArray([], pos, pos);
|
|
endOfFileToken = parseTokenNode();
|
|
}
|
|
else {
|
|
var expressions = void 0;
|
|
while (token() !== 1) {
|
|
var expression_1 = void 0;
|
|
switch (token()) {
|
|
case 22:
|
|
expression_1 = parseArrayLiteralExpression();
|
|
break;
|
|
case 110:
|
|
case 95:
|
|
case 104:
|
|
expression_1 = parseTokenNode();
|
|
break;
|
|
case 40:
|
|
if (lookAhead(function () { return nextToken() === 8 && nextToken() !== 58; })) {
|
|
expression_1 = parsePrefixUnaryExpression();
|
|
}
|
|
else {
|
|
expression_1 = parseObjectLiteralExpression();
|
|
}
|
|
break;
|
|
case 8:
|
|
case 10:
|
|
if (lookAhead(function () { return nextToken() !== 58; })) {
|
|
expression_1 = parseLiteralNode();
|
|
break;
|
|
}
|
|
default:
|
|
expression_1 = parseObjectLiteralExpression();
|
|
break;
|
|
}
|
|
if (expressions && ts.isArray(expressions)) {
|
|
expressions.push(expression_1);
|
|
}
|
|
else if (expressions) {
|
|
expressions = [expressions, expression_1];
|
|
}
|
|
else {
|
|
expressions = expression_1;
|
|
if (token() !== 1) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Unexpected_token);
|
|
}
|
|
}
|
|
}
|
|
var expression = ts.isArray(expressions) ? finishNode(factory.createArrayLiteralExpression(expressions), pos) : ts.Debug.checkDefined(expressions);
|
|
var statement = factory.createExpressionStatement(expression);
|
|
finishNode(statement, pos);
|
|
statements = createNodeArray([statement], pos);
|
|
endOfFileToken = parseExpectedToken(1, ts.Diagnostics.Unexpected_token);
|
|
}
|
|
var sourceFile = createSourceFile(fileName, 2, 6, false, statements, endOfFileToken, sourceFlags, ts.noop);
|
|
if (setParentNodes) {
|
|
fixupParentReferences(sourceFile);
|
|
}
|
|
sourceFile.nodeCount = nodeCount;
|
|
sourceFile.identifierCount = identifierCount;
|
|
sourceFile.identifiers = identifiers;
|
|
sourceFile.parseDiagnostics = ts.attachFileToDiagnostics(parseDiagnostics, sourceFile);
|
|
if (jsDocDiagnostics) {
|
|
sourceFile.jsDocDiagnostics = ts.attachFileToDiagnostics(jsDocDiagnostics, sourceFile);
|
|
}
|
|
var result = sourceFile;
|
|
clearState();
|
|
return result;
|
|
}
|
|
Parser.parseJsonText = parseJsonText;
|
|
function initializeState(_fileName, _sourceText, _languageVersion, _syntaxCursor, _scriptKind) {
|
|
NodeConstructor = ts.objectAllocator.getNodeConstructor();
|
|
TokenConstructor = ts.objectAllocator.getTokenConstructor();
|
|
IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor();
|
|
PrivateIdentifierConstructor = ts.objectAllocator.getPrivateIdentifierConstructor();
|
|
SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor();
|
|
fileName = ts.normalizePath(_fileName);
|
|
sourceText = _sourceText;
|
|
languageVersion = _languageVersion;
|
|
syntaxCursor = _syntaxCursor;
|
|
scriptKind = _scriptKind;
|
|
languageVariant = ts.getLanguageVariant(_scriptKind);
|
|
parseDiagnostics = [];
|
|
parsingContext = 0;
|
|
identifiers = new ts.Map();
|
|
privateIdentifiers = new ts.Map();
|
|
identifierCount = 0;
|
|
nodeCount = 0;
|
|
sourceFlags = 0;
|
|
topLevel = true;
|
|
switch (scriptKind) {
|
|
case 1:
|
|
case 2:
|
|
contextFlags = 262144;
|
|
break;
|
|
case 6:
|
|
contextFlags = 262144 | 67108864;
|
|
break;
|
|
default:
|
|
contextFlags = 0;
|
|
break;
|
|
}
|
|
parseErrorBeforeNextFinishedNode = false;
|
|
scanner.setText(sourceText);
|
|
scanner.setOnError(scanError);
|
|
scanner.setScriptTarget(languageVersion);
|
|
scanner.setLanguageVariant(languageVariant);
|
|
}
|
|
function clearState() {
|
|
scanner.clearCommentDirectives();
|
|
scanner.setText("");
|
|
scanner.setOnError(undefined);
|
|
sourceText = undefined;
|
|
languageVersion = undefined;
|
|
syntaxCursor = undefined;
|
|
scriptKind = undefined;
|
|
languageVariant = undefined;
|
|
sourceFlags = 0;
|
|
parseDiagnostics = undefined;
|
|
jsDocDiagnostics = undefined;
|
|
parsingContext = 0;
|
|
identifiers = undefined;
|
|
notParenthesizedArrow = undefined;
|
|
topLevel = true;
|
|
}
|
|
function parseSourceFileWorker(languageVersion, setParentNodes, scriptKind, setExternalModuleIndicator) {
|
|
var isDeclarationFile = isDeclarationFileName(fileName);
|
|
if (isDeclarationFile) {
|
|
contextFlags |= 16777216;
|
|
}
|
|
sourceFlags = contextFlags;
|
|
nextToken();
|
|
var statements = parseList(0, parseStatement);
|
|
ts.Debug.assert(token() === 1);
|
|
var endOfFileToken = addJSDocComment(parseTokenNode());
|
|
var sourceFile = createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile, statements, endOfFileToken, sourceFlags, setExternalModuleIndicator);
|
|
processCommentPragmas(sourceFile, sourceText);
|
|
processPragmasIntoFields(sourceFile, reportPragmaDiagnostic);
|
|
sourceFile.commentDirectives = scanner.getCommentDirectives();
|
|
sourceFile.nodeCount = nodeCount;
|
|
sourceFile.identifierCount = identifierCount;
|
|
sourceFile.identifiers = identifiers;
|
|
sourceFile.parseDiagnostics = ts.attachFileToDiagnostics(parseDiagnostics, sourceFile);
|
|
if (jsDocDiagnostics) {
|
|
sourceFile.jsDocDiagnostics = ts.attachFileToDiagnostics(jsDocDiagnostics, sourceFile);
|
|
}
|
|
if (setParentNodes) {
|
|
fixupParentReferences(sourceFile);
|
|
}
|
|
return sourceFile;
|
|
function reportPragmaDiagnostic(pos, end, diagnostic) {
|
|
parseDiagnostics.push(ts.createDetachedDiagnostic(fileName, pos, end, diagnostic));
|
|
}
|
|
}
|
|
function withJSDoc(node, hasJSDoc) {
|
|
return hasJSDoc ? addJSDocComment(node) : node;
|
|
}
|
|
var hasDeprecatedTag = false;
|
|
function addJSDocComment(node) {
|
|
ts.Debug.assert(!node.jsDoc);
|
|
var jsDoc = ts.mapDefined(ts.getJSDocCommentRanges(node, sourceText), function (comment) { return JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos); });
|
|
if (jsDoc.length)
|
|
node.jsDoc = jsDoc;
|
|
if (hasDeprecatedTag) {
|
|
hasDeprecatedTag = false;
|
|
node.flags |= 268435456;
|
|
}
|
|
return node;
|
|
}
|
|
function reparseTopLevelAwait(sourceFile) {
|
|
var savedSyntaxCursor = syntaxCursor;
|
|
var baseSyntaxCursor = IncrementalParser.createSyntaxCursor(sourceFile);
|
|
syntaxCursor = { currentNode: currentNode };
|
|
var statements = [];
|
|
var savedParseDiagnostics = parseDiagnostics;
|
|
parseDiagnostics = [];
|
|
var pos = 0;
|
|
var start = findNextStatementWithAwait(sourceFile.statements, 0);
|
|
var _loop_3 = function () {
|
|
var prevStatement = sourceFile.statements[pos];
|
|
var nextStatement = sourceFile.statements[start];
|
|
ts.addRange(statements, sourceFile.statements, pos, start);
|
|
pos = findNextStatementWithoutAwait(sourceFile.statements, start);
|
|
var diagnosticStart = ts.findIndex(savedParseDiagnostics, function (diagnostic) { return diagnostic.start >= prevStatement.pos; });
|
|
var diagnosticEnd = diagnosticStart >= 0 ? ts.findIndex(savedParseDiagnostics, function (diagnostic) { return diagnostic.start >= nextStatement.pos; }, diagnosticStart) : -1;
|
|
if (diagnosticStart >= 0) {
|
|
ts.addRange(parseDiagnostics, savedParseDiagnostics, diagnosticStart, diagnosticEnd >= 0 ? diagnosticEnd : undefined);
|
|
}
|
|
speculationHelper(function () {
|
|
var savedContextFlags = contextFlags;
|
|
contextFlags |= 32768;
|
|
scanner.setTextPos(nextStatement.pos);
|
|
nextToken();
|
|
while (token() !== 1) {
|
|
var startPos = scanner.getStartPos();
|
|
var statement = parseListElement(0, parseStatement);
|
|
statements.push(statement);
|
|
if (startPos === scanner.getStartPos()) {
|
|
nextToken();
|
|
}
|
|
if (pos >= 0) {
|
|
var nonAwaitStatement = sourceFile.statements[pos];
|
|
if (statement.end === nonAwaitStatement.pos) {
|
|
break;
|
|
}
|
|
if (statement.end > nonAwaitStatement.pos) {
|
|
pos = findNextStatementWithoutAwait(sourceFile.statements, pos + 1);
|
|
}
|
|
}
|
|
}
|
|
contextFlags = savedContextFlags;
|
|
}, 2);
|
|
start = pos >= 0 ? findNextStatementWithAwait(sourceFile.statements, pos) : -1;
|
|
};
|
|
while (start !== -1) {
|
|
_loop_3();
|
|
}
|
|
if (pos >= 0) {
|
|
var prevStatement_1 = sourceFile.statements[pos];
|
|
ts.addRange(statements, sourceFile.statements, pos);
|
|
var diagnosticStart = ts.findIndex(savedParseDiagnostics, function (diagnostic) { return diagnostic.start >= prevStatement_1.pos; });
|
|
if (diagnosticStart >= 0) {
|
|
ts.addRange(parseDiagnostics, savedParseDiagnostics, diagnosticStart);
|
|
}
|
|
}
|
|
syntaxCursor = savedSyntaxCursor;
|
|
return factory.updateSourceFile(sourceFile, ts.setTextRange(factory.createNodeArray(statements), sourceFile.statements));
|
|
function containsPossibleTopLevelAwait(node) {
|
|
return !(node.flags & 32768)
|
|
&& !!(node.transformFlags & 67108864);
|
|
}
|
|
function findNextStatementWithAwait(statements, start) {
|
|
for (var i = start; i < statements.length; i++) {
|
|
if (containsPossibleTopLevelAwait(statements[i])) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
function findNextStatementWithoutAwait(statements, start) {
|
|
for (var i = start; i < statements.length; i++) {
|
|
if (!containsPossibleTopLevelAwait(statements[i])) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
function currentNode(position) {
|
|
var node = baseSyntaxCursor.currentNode(position);
|
|
if (topLevel && node && containsPossibleTopLevelAwait(node)) {
|
|
node.intersectsChange = true;
|
|
}
|
|
return node;
|
|
}
|
|
}
|
|
function fixupParentReferences(rootNode) {
|
|
ts.setParentRecursive(rootNode, true);
|
|
}
|
|
Parser.fixupParentReferences = fixupParentReferences;
|
|
function createSourceFile(fileName, languageVersion, scriptKind, isDeclarationFile, statements, endOfFileToken, flags, setExternalModuleIndicator) {
|
|
var sourceFile = factory.createSourceFile(statements, endOfFileToken, flags);
|
|
ts.setTextRangePosWidth(sourceFile, 0, sourceText.length);
|
|
setFields(sourceFile);
|
|
if (!isDeclarationFile && isExternalModule(sourceFile) && sourceFile.transformFlags & 67108864) {
|
|
sourceFile = reparseTopLevelAwait(sourceFile);
|
|
setFields(sourceFile);
|
|
}
|
|
return sourceFile;
|
|
function setFields(sourceFile) {
|
|
sourceFile.text = sourceText;
|
|
sourceFile.bindDiagnostics = [];
|
|
sourceFile.bindSuggestionDiagnostics = undefined;
|
|
sourceFile.languageVersion = languageVersion;
|
|
sourceFile.fileName = fileName;
|
|
sourceFile.languageVariant = ts.getLanguageVariant(scriptKind);
|
|
sourceFile.isDeclarationFile = isDeclarationFile;
|
|
sourceFile.scriptKind = scriptKind;
|
|
setExternalModuleIndicator(sourceFile);
|
|
sourceFile.setExternalModuleIndicator = setExternalModuleIndicator;
|
|
}
|
|
}
|
|
function setContextFlag(val, flag) {
|
|
if (val) {
|
|
contextFlags |= flag;
|
|
}
|
|
else {
|
|
contextFlags &= ~flag;
|
|
}
|
|
}
|
|
function setDisallowInContext(val) {
|
|
setContextFlag(val, 4096);
|
|
}
|
|
function setYieldContext(val) {
|
|
setContextFlag(val, 8192);
|
|
}
|
|
function setDecoratorContext(val) {
|
|
setContextFlag(val, 16384);
|
|
}
|
|
function setAwaitContext(val) {
|
|
setContextFlag(val, 32768);
|
|
}
|
|
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(4096, func);
|
|
}
|
|
function disallowInAnd(func) {
|
|
return doInsideOfContext(4096, func);
|
|
}
|
|
function allowConditionalTypesAnd(func) {
|
|
return doOutsideOfContext(65536, func);
|
|
}
|
|
function disallowConditionalTypesAnd(func) {
|
|
return doInsideOfContext(65536, func);
|
|
}
|
|
function doInYieldContext(func) {
|
|
return doInsideOfContext(8192, func);
|
|
}
|
|
function doInDecoratorContext(func) {
|
|
return doInsideOfContext(16384, func);
|
|
}
|
|
function doInAwaitContext(func) {
|
|
return doInsideOfContext(32768, func);
|
|
}
|
|
function doOutsideOfAwaitContext(func) {
|
|
return doOutsideOfContext(32768, func);
|
|
}
|
|
function doInYieldAndAwaitContext(func) {
|
|
return doInsideOfContext(8192 | 32768, func);
|
|
}
|
|
function doOutsideOfYieldAndAwaitContext(func) {
|
|
return doOutsideOfContext(8192 | 32768, func);
|
|
}
|
|
function inContext(flags) {
|
|
return (contextFlags & flags) !== 0;
|
|
}
|
|
function inYieldContext() {
|
|
return inContext(8192);
|
|
}
|
|
function inDisallowInContext() {
|
|
return inContext(4096);
|
|
}
|
|
function inDisallowConditionalTypesContext() {
|
|
return inContext(65536);
|
|
}
|
|
function inDecoratorContext() {
|
|
return inContext(16384);
|
|
}
|
|
function inAwaitContext() {
|
|
return inContext(32768);
|
|
}
|
|
function parseErrorAtCurrentToken(message, arg0) {
|
|
return parseErrorAt(scanner.getTokenPos(), scanner.getTextPos(), message, arg0);
|
|
}
|
|
function parseErrorAtPosition(start, length, message, arg0) {
|
|
var lastError = ts.lastOrUndefined(parseDiagnostics);
|
|
var result;
|
|
if (!lastError || start !== lastError.start) {
|
|
result = ts.createDetachedDiagnostic(fileName, start, length, message, arg0);
|
|
parseDiagnostics.push(result);
|
|
}
|
|
parseErrorBeforeNextFinishedNode = true;
|
|
return result;
|
|
}
|
|
function parseErrorAt(start, end, message, arg0) {
|
|
return 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 hasPrecedingJSDocComment() {
|
|
return scanner.hasPrecedingJSDocComment();
|
|
}
|
|
function token() {
|
|
return currentToken;
|
|
}
|
|
function nextTokenWithoutCheck() {
|
|
return currentToken = scanner.scan();
|
|
}
|
|
function nextTokenAnd(func) {
|
|
nextToken();
|
|
return func();
|
|
}
|
|
function nextToken() {
|
|
if (ts.isKeyword(currentToken) && (scanner.hasUnicodeEscape() || scanner.hasExtendedUnicodeEscape())) {
|
|
parseErrorAt(scanner.getTokenPos(), scanner.getTextPos(), ts.Diagnostics.Keywords_cannot_contain_escape_characters);
|
|
}
|
|
return nextTokenWithoutCheck();
|
|
}
|
|
function nextTokenJSDoc() {
|
|
return currentToken = scanner.scanJsDocToken();
|
|
}
|
|
function reScanGreaterToken() {
|
|
return currentToken = scanner.reScanGreaterToken();
|
|
}
|
|
function reScanSlashToken() {
|
|
return currentToken = scanner.reScanSlashToken();
|
|
}
|
|
function reScanTemplateToken(isTaggedTemplate) {
|
|
return currentToken = scanner.reScanTemplateToken(isTaggedTemplate);
|
|
}
|
|
function reScanTemplateHeadOrNoSubstitutionTemplate() {
|
|
return currentToken = scanner.reScanTemplateHeadOrNoSubstitutionTemplate();
|
|
}
|
|
function reScanLessThanToken() {
|
|
return currentToken = scanner.reScanLessThanToken();
|
|
}
|
|
function reScanHashToken() {
|
|
return currentToken = scanner.reScanHashToken();
|
|
}
|
|
function scanJsxIdentifier() {
|
|
return currentToken = scanner.scanJsxIdentifier();
|
|
}
|
|
function scanJsxText() {
|
|
return currentToken = scanner.scanJsxToken();
|
|
}
|
|
function scanJsxAttributeValue() {
|
|
return currentToken = scanner.scanJsxAttributeValue();
|
|
}
|
|
function speculationHelper(callback, speculationKind) {
|
|
var saveToken = currentToken;
|
|
var saveParseDiagnosticsLength = parseDiagnostics.length;
|
|
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
|
|
var saveContextFlags = contextFlags;
|
|
var result = speculationKind !== 0
|
|
? scanner.lookAhead(callback)
|
|
: scanner.tryScan(callback);
|
|
ts.Debug.assert(saveContextFlags === contextFlags);
|
|
if (!result || speculationKind !== 0) {
|
|
currentToken = saveToken;
|
|
if (speculationKind !== 2) {
|
|
parseDiagnostics.length = saveParseDiagnosticsLength;
|
|
}
|
|
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
|
|
}
|
|
return result;
|
|
}
|
|
function lookAhead(callback) {
|
|
return speculationHelper(callback, 1);
|
|
}
|
|
function tryParse(callback) {
|
|
return speculationHelper(callback, 0);
|
|
}
|
|
function isBindingIdentifier() {
|
|
if (token() === 79) {
|
|
return true;
|
|
}
|
|
return token() > 116;
|
|
}
|
|
function isIdentifier() {
|
|
if (token() === 79) {
|
|
return true;
|
|
}
|
|
if (token() === 125 && inYieldContext()) {
|
|
return false;
|
|
}
|
|
if (token() === 132 && inAwaitContext()) {
|
|
return false;
|
|
}
|
|
return token() > 116;
|
|
}
|
|
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;
|
|
}
|
|
var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
|
|
function parseErrorForMissingSemicolonAfter(node) {
|
|
var _a;
|
|
if (ts.isTaggedTemplateExpression(node)) {
|
|
parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
|
|
return;
|
|
}
|
|
var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
|
|
if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
|
|
return;
|
|
}
|
|
var pos = ts.skipTrivia(sourceText, node.pos);
|
|
switch (expressionText) {
|
|
case "const":
|
|
case "let":
|
|
case "var":
|
|
parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
|
|
return;
|
|
case "declare":
|
|
return;
|
|
case "interface":
|
|
parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18);
|
|
return;
|
|
case "is":
|
|
parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
|
|
return;
|
|
case "module":
|
|
case "namespace":
|
|
parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18);
|
|
return;
|
|
case "type":
|
|
parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63);
|
|
return;
|
|
}
|
|
var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
|
|
if (suggestion) {
|
|
parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
|
|
return;
|
|
}
|
|
if (token() === 0) {
|
|
return;
|
|
}
|
|
parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
|
|
}
|
|
function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
|
|
if (token() === tokenIfBlankName) {
|
|
parseErrorAtCurrentToken(blankDiagnostic);
|
|
}
|
|
else {
|
|
parseErrorAtCurrentToken(nameDiagnostic, scanner.getTokenValue());
|
|
}
|
|
}
|
|
function getSpaceSuggestion(expressionText) {
|
|
for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
|
|
var keyword = viableKeywordSuggestions_1[_i];
|
|
if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
|
|
return "".concat(keyword, " ").concat(expressionText.slice(keyword.length));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseSemicolonAfterPropertyName(name, type, initializer) {
|
|
if (token() === 59 && !scanner.hasPrecedingLineBreak()) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
|
|
return;
|
|
}
|
|
if (token() === 20) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
|
|
nextToken();
|
|
return;
|
|
}
|
|
if (type && !canParseSemicolon()) {
|
|
if (initializer) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
|
|
}
|
|
else {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
|
|
}
|
|
return;
|
|
}
|
|
if (tryParseSemicolon()) {
|
|
return;
|
|
}
|
|
if (initializer) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
|
|
return;
|
|
}
|
|
parseErrorForMissingSemicolonAfter(name);
|
|
}
|
|
function parseExpectedJSDoc(kind) {
|
|
if (token() === kind) {
|
|
nextTokenJSDoc();
|
|
return true;
|
|
}
|
|
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind));
|
|
return false;
|
|
}
|
|
function parseExpectedMatchingBrackets(openKind, closeKind, openParsed, openPosition) {
|
|
if (token() === closeKind) {
|
|
nextToken();
|
|
return;
|
|
}
|
|
var lastError = parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(closeKind));
|
|
if (!openParsed) {
|
|
return;
|
|
}
|
|
if (lastError) {
|
|
ts.addRelatedInfo(lastError, ts.createDetachedDiagnostic(fileName, openPosition, 1, ts.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, ts.tokenToString(openKind), ts.tokenToString(closeKind)));
|
|
}
|
|
}
|
|
function parseOptional(t) {
|
|
if (token() === t) {
|
|
nextToken();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function parseOptionalToken(t) {
|
|
if (token() === t) {
|
|
return parseTokenNode();
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseOptionalTokenJSDoc(t) {
|
|
if (token() === t) {
|
|
return parseTokenNodeJSDoc();
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseExpectedToken(t, diagnosticMessage, arg0) {
|
|
return parseOptionalToken(t) ||
|
|
createMissingNode(t, false, diagnosticMessage || ts.Diagnostics._0_expected, arg0 || ts.tokenToString(t));
|
|
}
|
|
function parseExpectedTokenJSDoc(t) {
|
|
return parseOptionalTokenJSDoc(t) ||
|
|
createMissingNode(t, false, ts.Diagnostics._0_expected, ts.tokenToString(t));
|
|
}
|
|
function parseTokenNode() {
|
|
var pos = getNodePos();
|
|
var kind = token();
|
|
nextToken();
|
|
return finishNode(factory.createToken(kind), pos);
|
|
}
|
|
function parseTokenNodeJSDoc() {
|
|
var pos = getNodePos();
|
|
var kind = token();
|
|
nextTokenJSDoc();
|
|
return finishNode(factory.createToken(kind), pos);
|
|
}
|
|
function canParseSemicolon() {
|
|
if (token() === 26) {
|
|
return true;
|
|
}
|
|
return token() === 19 || token() === 1 || scanner.hasPrecedingLineBreak();
|
|
}
|
|
function tryParseSemicolon() {
|
|
if (!canParseSemicolon()) {
|
|
return false;
|
|
}
|
|
if (token() === 26) {
|
|
nextToken();
|
|
}
|
|
return true;
|
|
}
|
|
function parseSemicolon() {
|
|
return tryParseSemicolon() || parseExpected(26);
|
|
}
|
|
function createNodeArray(elements, pos, end, hasTrailingComma) {
|
|
var array = factory.createNodeArray(elements, hasTrailingComma);
|
|
ts.setTextRangePosEnd(array, pos, end !== null && end !== void 0 ? end : scanner.getStartPos());
|
|
return array;
|
|
}
|
|
function finishNode(node, pos, end) {
|
|
ts.setTextRangePosEnd(node, pos, end !== null && end !== void 0 ? end : scanner.getStartPos());
|
|
if (contextFlags) {
|
|
node.flags |= contextFlags;
|
|
}
|
|
if (parseErrorBeforeNextFinishedNode) {
|
|
parseErrorBeforeNextFinishedNode = false;
|
|
node.flags |= 131072;
|
|
}
|
|
return node;
|
|
}
|
|
function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) {
|
|
if (reportAtCurrentPosition) {
|
|
parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0);
|
|
}
|
|
else if (diagnosticMessage) {
|
|
parseErrorAtCurrentToken(diagnosticMessage, arg0);
|
|
}
|
|
var pos = getNodePos();
|
|
var result = kind === 79 ? factory.createIdentifier("", undefined, undefined) :
|
|
ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", undefined) :
|
|
kind === 8 ? factory.createNumericLiteral("", undefined) :
|
|
kind === 10 ? factory.createStringLiteral("", undefined) :
|
|
kind === 276 ? factory.createMissingDeclaration() :
|
|
factory.createToken(kind);
|
|
return finishNode(result, pos);
|
|
}
|
|
function internIdentifier(text) {
|
|
var identifier = identifiers.get(text);
|
|
if (identifier === undefined) {
|
|
identifiers.set(text, identifier = text);
|
|
}
|
|
return identifier;
|
|
}
|
|
function createIdentifier(isIdentifier, diagnosticMessage, privateIdentifierDiagnosticMessage) {
|
|
if (isIdentifier) {
|
|
identifierCount++;
|
|
var pos = getNodePos();
|
|
var originalKeywordKind = token();
|
|
var text = internIdentifier(scanner.getTokenValue());
|
|
nextTokenWithoutCheck();
|
|
return finishNode(factory.createIdentifier(text, undefined, originalKeywordKind), pos);
|
|
}
|
|
if (token() === 80) {
|
|
parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
return createIdentifier(true);
|
|
}
|
|
if (token() === 0 && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79; })) {
|
|
return createIdentifier(true);
|
|
}
|
|
identifierCount++;
|
|
var reportAtCurrentPosition = token() === 1;
|
|
var isReservedWord = scanner.isReservedWord();
|
|
var msgArg = scanner.getTokenText();
|
|
var defaultMessage = isReservedWord ?
|
|
ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
|
|
ts.Diagnostics.Identifier_expected;
|
|
return createMissingNode(79, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
|
|
}
|
|
function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
|
|
return createIdentifier(isBindingIdentifier(), undefined, privateIdentifierDiagnosticMessage);
|
|
}
|
|
function parseIdentifier(diagnosticMessage, privateIdentifierDiagnosticMessage) {
|
|
return createIdentifier(isIdentifier(), diagnosticMessage, privateIdentifierDiagnosticMessage);
|
|
}
|
|
function parseIdentifierName(diagnosticMessage) {
|
|
return createIdentifier(ts.tokenIsIdentifierOrKeyword(token()), diagnosticMessage);
|
|
}
|
|
function isLiteralPropertyName() {
|
|
return ts.tokenIsIdentifierOrKeyword(token()) ||
|
|
token() === 10 ||
|
|
token() === 8;
|
|
}
|
|
function isAssertionKey() {
|
|
return ts.tokenIsIdentifierOrKeyword(token()) ||
|
|
token() === 10;
|
|
}
|
|
function parsePropertyNameWorker(allowComputedPropertyNames) {
|
|
if (token() === 10 || token() === 8) {
|
|
var node = parseLiteralNode();
|
|
node.text = internIdentifier(node.text);
|
|
return node;
|
|
}
|
|
if (allowComputedPropertyNames && token() === 22) {
|
|
return parseComputedPropertyName();
|
|
}
|
|
if (token() === 80) {
|
|
return parsePrivateIdentifier();
|
|
}
|
|
return parseIdentifierName();
|
|
}
|
|
function parsePropertyName() {
|
|
return parsePropertyNameWorker(true);
|
|
}
|
|
function parseComputedPropertyName() {
|
|
var pos = getNodePos();
|
|
parseExpected(22);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpected(23);
|
|
return finishNode(factory.createComputedPropertyName(expression), pos);
|
|
}
|
|
function internPrivateIdentifier(text) {
|
|
var privateIdentifier = privateIdentifiers.get(text);
|
|
if (privateIdentifier === undefined) {
|
|
privateIdentifiers.set(text, privateIdentifier = text);
|
|
}
|
|
return privateIdentifier;
|
|
}
|
|
function parsePrivateIdentifier() {
|
|
var pos = getNodePos();
|
|
var node = factory.createPrivateIdentifier(internPrivateIdentifier(scanner.getTokenText()));
|
|
nextToken();
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseContextualModifier(t) {
|
|
return token() === t && tryParse(nextTokenCanFollowModifier);
|
|
}
|
|
function nextTokenIsOnSameLineAndCanFollowModifier() {
|
|
nextToken();
|
|
if (scanner.hasPrecedingLineBreak()) {
|
|
return false;
|
|
}
|
|
return canFollowModifier();
|
|
}
|
|
function nextTokenCanFollowModifier() {
|
|
switch (token()) {
|
|
case 85:
|
|
return nextToken() === 92;
|
|
case 93:
|
|
nextToken();
|
|
if (token() === 88) {
|
|
return lookAhead(nextTokenCanFollowDefaultKeyword);
|
|
}
|
|
if (token() === 152) {
|
|
return lookAhead(nextTokenCanFollowExportModifier);
|
|
}
|
|
return canFollowExportModifier();
|
|
case 88:
|
|
return nextTokenCanFollowDefaultKeyword();
|
|
case 124:
|
|
case 136:
|
|
case 149:
|
|
nextToken();
|
|
return canFollowModifier();
|
|
default:
|
|
return nextTokenIsOnSameLineAndCanFollowModifier();
|
|
}
|
|
}
|
|
function canFollowExportModifier() {
|
|
return token() !== 41
|
|
&& token() !== 127
|
|
&& token() !== 18
|
|
&& canFollowModifier();
|
|
}
|
|
function nextTokenCanFollowExportModifier() {
|
|
nextToken();
|
|
return canFollowExportModifier();
|
|
}
|
|
function parseAnyContextualModifier() {
|
|
return ts.isModifierKind(token()) && tryParse(nextTokenCanFollowModifier);
|
|
}
|
|
function canFollowModifier() {
|
|
return token() === 22
|
|
|| token() === 18
|
|
|| token() === 41
|
|
|| token() === 25
|
|
|| isLiteralPropertyName();
|
|
}
|
|
function nextTokenCanFollowDefaultKeyword() {
|
|
nextToken();
|
|
return token() === 84 || token() === 98 ||
|
|
token() === 118 ||
|
|
(token() === 126 && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
|
|
(token() === 131 && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
|
|
}
|
|
function isListElement(parsingContext, inErrorRecovery) {
|
|
var node = currentNode(parsingContext);
|
|
if (node) {
|
|
return true;
|
|
}
|
|
switch (parsingContext) {
|
|
case 0:
|
|
case 1:
|
|
case 3:
|
|
return !(token() === 26 && inErrorRecovery) && isStartOfStatement();
|
|
case 2:
|
|
return token() === 82 || token() === 88;
|
|
case 4:
|
|
return lookAhead(isTypeMemberStart);
|
|
case 5:
|
|
return lookAhead(isClassMemberStart) || (token() === 26 && !inErrorRecovery);
|
|
case 6:
|
|
return token() === 22 || isLiteralPropertyName();
|
|
case 12:
|
|
switch (token()) {
|
|
case 22:
|
|
case 41:
|
|
case 25:
|
|
case 24:
|
|
return true;
|
|
default:
|
|
return isLiteralPropertyName();
|
|
}
|
|
case 18:
|
|
return isLiteralPropertyName();
|
|
case 9:
|
|
return token() === 22 || token() === 25 || isLiteralPropertyName();
|
|
case 24:
|
|
return isAssertionKey();
|
|
case 7:
|
|
if (token() === 18) {
|
|
return lookAhead(isValidHeritageClauseObjectLiteral);
|
|
}
|
|
if (!inErrorRecovery) {
|
|
return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword();
|
|
}
|
|
else {
|
|
return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword();
|
|
}
|
|
case 8:
|
|
return isBindingIdentifierOrPrivateIdentifierOrPattern();
|
|
case 10:
|
|
return token() === 27 || token() === 25 || isBindingIdentifierOrPrivateIdentifierOrPattern();
|
|
case 19:
|
|
return token() === 101 || isIdentifier();
|
|
case 15:
|
|
switch (token()) {
|
|
case 27:
|
|
case 24:
|
|
return true;
|
|
}
|
|
case 11:
|
|
return token() === 25 || isStartOfExpression();
|
|
case 16:
|
|
return isStartOfParameter(false);
|
|
case 17:
|
|
return isStartOfParameter(true);
|
|
case 20:
|
|
case 21:
|
|
return token() === 27 || isStartOfType();
|
|
case 22:
|
|
return isHeritageClause();
|
|
case 23:
|
|
return ts.tokenIsIdentifierOrKeyword(token());
|
|
case 13:
|
|
return ts.tokenIsIdentifierOrKeyword(token()) || token() === 18;
|
|
case 14:
|
|
return true;
|
|
}
|
|
return ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
|
|
}
|
|
function isValidHeritageClauseObjectLiteral() {
|
|
ts.Debug.assert(token() === 18);
|
|
if (nextToken() === 19) {
|
|
var next = nextToken();
|
|
return next === 27 || next === 18 || next === 94 || next === 117;
|
|
}
|
|
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() === 117 ||
|
|
token() === 94) {
|
|
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 23:
|
|
case 24:
|
|
return token() === 19;
|
|
case 3:
|
|
return token() === 19 || token() === 82 || token() === 88;
|
|
case 7:
|
|
return token() === 18 || token() === 94 || token() === 117;
|
|
case 8:
|
|
return isVariableDeclaratorListTerminator();
|
|
case 19:
|
|
return token() === 31 || token() === 20 || token() === 18 || token() === 94 || token() === 117;
|
|
case 11:
|
|
return token() === 21 || token() === 26;
|
|
case 15:
|
|
case 21:
|
|
case 10:
|
|
return token() === 23;
|
|
case 17:
|
|
case 16:
|
|
case 18:
|
|
return token() === 21 || token() === 23;
|
|
case 20:
|
|
return token() !== 27;
|
|
case 22:
|
|
return token() === 18 || token() === 19;
|
|
case 13:
|
|
return token() === 31 || token() === 43;
|
|
case 14:
|
|
return token() === 29 && lookAhead(nextTokenIsSlash);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isVariableDeclaratorListTerminator() {
|
|
if (canParseSemicolon()) {
|
|
return true;
|
|
}
|
|
if (isInOrOfKeyword(token())) {
|
|
return true;
|
|
}
|
|
if (token() === 38) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isInSomeParsingContext() {
|
|
for (var kind = 0; kind < 25; 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)) {
|
|
list.push(parseListElement(kind, parseElement));
|
|
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, pos) {
|
|
if (!syntaxCursor || !isReusableParsingContext(parsingContext) || parseErrorBeforeNextFinishedNode) {
|
|
return undefined;
|
|
}
|
|
var node = syntaxCursor.currentNode(pos !== null && pos !== void 0 ? pos : scanner.getStartPos());
|
|
if (ts.nodeIsMissing(node) || node.intersectsChange || ts.containsParseError(node)) {
|
|
return undefined;
|
|
}
|
|
var nodeContextFlags = node.flags & 50720768;
|
|
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 isReusableParsingContext(parsingContext) {
|
|
switch (parsingContext) {
|
|
case 5:
|
|
case 2:
|
|
case 0:
|
|
case 1:
|
|
case 3:
|
|
case 6:
|
|
case 4:
|
|
case 8:
|
|
case 17:
|
|
case 16:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
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 17:
|
|
case 16:
|
|
return isReusableParameter(node);
|
|
}
|
|
return false;
|
|
}
|
|
function isReusableClassMember(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 171:
|
|
case 176:
|
|
case 172:
|
|
case 173:
|
|
case 167:
|
|
case 234:
|
|
return true;
|
|
case 169:
|
|
var methodDeclaration = node;
|
|
var nameIsConstructor = methodDeclaration.name.kind === 79 &&
|
|
methodDeclaration.name.originalKeywordKind === 134;
|
|
return !nameIsConstructor;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isReusableSwitchClause(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 289:
|
|
case 290:
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isReusableStatement(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 237:
|
|
case 235:
|
|
case 239:
|
|
case 238:
|
|
case 251:
|
|
case 247:
|
|
case 249:
|
|
case 246:
|
|
case 245:
|
|
case 243:
|
|
case 244:
|
|
case 242:
|
|
case 241:
|
|
case 248:
|
|
case 236:
|
|
case 252:
|
|
case 250:
|
|
case 240:
|
|
case 253:
|
|
case 266:
|
|
case 265:
|
|
case 272:
|
|
case 271:
|
|
case 261:
|
|
case 257:
|
|
case 258:
|
|
case 260:
|
|
case 259:
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isReusableEnumMember(node) {
|
|
return node.kind === 299;
|
|
}
|
|
function isReusableTypeMember(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 175:
|
|
case 168:
|
|
case 176:
|
|
case 166:
|
|
case 174:
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isReusableVariableDeclaration(node) {
|
|
if (node.kind !== 254) {
|
|
return false;
|
|
}
|
|
var variableDeclarator = node;
|
|
return variableDeclarator.initializer === undefined;
|
|
}
|
|
function isReusableParameter(node) {
|
|
if (node.kind !== 164) {
|
|
return false;
|
|
}
|
|
var parameter = node;
|
|
return parameter.initializer === undefined;
|
|
}
|
|
function abortParsingListOrMoveToNextToken(kind) {
|
|
parsingContextErrors(kind);
|
|
if (isInSomeParsingContext()) {
|
|
return true;
|
|
}
|
|
nextToken();
|
|
return false;
|
|
}
|
|
function parsingContextErrors(context) {
|
|
switch (context) {
|
|
case 0:
|
|
return token() === 88
|
|
? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93))
|
|
: parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
|
|
case 1: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
|
|
case 2: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
|
|
case 3: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
|
|
case 18:
|
|
case 4: return parseErrorAtCurrentToken(ts.Diagnostics.Property_or_signature_expected);
|
|
case 5: return parseErrorAtCurrentToken(ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected);
|
|
case 6: return parseErrorAtCurrentToken(ts.Diagnostics.Enum_member_expected);
|
|
case 7: return parseErrorAtCurrentToken(ts.Diagnostics.Expression_expected);
|
|
case 8:
|
|
return ts.isKeyword(token())
|
|
? parseErrorAtCurrentToken(ts.Diagnostics._0_is_not_allowed_as_a_variable_declaration_name, ts.tokenToString(token()))
|
|
: parseErrorAtCurrentToken(ts.Diagnostics.Variable_declaration_expected);
|
|
case 9: return parseErrorAtCurrentToken(ts.Diagnostics.Property_destructuring_pattern_expected);
|
|
case 10: return parseErrorAtCurrentToken(ts.Diagnostics.Array_element_destructuring_pattern_expected);
|
|
case 11: return parseErrorAtCurrentToken(ts.Diagnostics.Argument_expression_expected);
|
|
case 12: return parseErrorAtCurrentToken(ts.Diagnostics.Property_assignment_expected);
|
|
case 15: return parseErrorAtCurrentToken(ts.Diagnostics.Expression_or_comma_expected);
|
|
case 17: return parseErrorAtCurrentToken(ts.Diagnostics.Parameter_declaration_expected);
|
|
case 16:
|
|
return ts.isKeyword(token())
|
|
? parseErrorAtCurrentToken(ts.Diagnostics._0_is_not_allowed_as_a_parameter_name, ts.tokenToString(token()))
|
|
: parseErrorAtCurrentToken(ts.Diagnostics.Parameter_declaration_expected);
|
|
case 19: return parseErrorAtCurrentToken(ts.Diagnostics.Type_parameter_declaration_expected);
|
|
case 20: return parseErrorAtCurrentToken(ts.Diagnostics.Type_argument_expected);
|
|
case 21: return parseErrorAtCurrentToken(ts.Diagnostics.Type_expected);
|
|
case 22: return parseErrorAtCurrentToken(ts.Diagnostics.Unexpected_token_expected);
|
|
case 23: return parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected);
|
|
case 13: return parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected);
|
|
case 14: return parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected);
|
|
case 24: return parseErrorAtCurrentToken(ts.Diagnostics.Identifier_or_string_literal_expected);
|
|
case 25: return ts.Debug.fail("ParsingContext.Count used as a context");
|
|
default: ts.Debug.assertNever(context);
|
|
}
|
|
}
|
|
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();
|
|
var result = parseListElement(kind, parseElement);
|
|
if (!result) {
|
|
parsingContext = saveParsingContext;
|
|
return undefined;
|
|
}
|
|
list.push(result);
|
|
commaStart = scanner.getTokenPos();
|
|
if (parseOptional(27)) {
|
|
continue;
|
|
}
|
|
commaStart = -1;
|
|
if (isListTerminator(kind)) {
|
|
break;
|
|
}
|
|
parseExpected(27, getExpectedCommaDiagnostic(kind));
|
|
if (considerSemicolonAsDelimiter && token() === 26 && !scanner.hasPrecedingLineBreak()) {
|
|
nextToken();
|
|
}
|
|
if (startPos === scanner.getStartPos()) {
|
|
nextToken();
|
|
}
|
|
continue;
|
|
}
|
|
if (isListTerminator(kind)) {
|
|
break;
|
|
}
|
|
if (abortParsingListOrMoveToNextToken(kind)) {
|
|
break;
|
|
}
|
|
}
|
|
parsingContext = saveParsingContext;
|
|
return createNodeArray(list, listPos, undefined, commaStart >= 0);
|
|
}
|
|
function getExpectedCommaDiagnostic(kind) {
|
|
return kind === 6 ? ts.Diagnostics.An_enum_member_name_must_be_followed_by_a_or : undefined;
|
|
}
|
|
function createMissingList() {
|
|
var list = createNodeArray([], getNodePos());
|
|
list.isMissingList = true;
|
|
return list;
|
|
}
|
|
function isMissingList(arr) {
|
|
return !!arr.isMissingList;
|
|
}
|
|
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 pos = getNodePos();
|
|
var entity = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage);
|
|
var dotPos = getNodePos();
|
|
while (parseOptional(24)) {
|
|
if (token() === 29) {
|
|
entity.jsdocDotPos = dotPos;
|
|
break;
|
|
}
|
|
dotPos = getNodePos();
|
|
entity = finishNode(factory.createQualifiedName(entity, parseRightSideOfDot(allowReservedWords, false)), pos);
|
|
}
|
|
return entity;
|
|
}
|
|
function createQualifiedName(entity, name) {
|
|
return finishNode(factory.createQualifiedName(entity, name), entity.pos);
|
|
}
|
|
function parseRightSideOfDot(allowIdentifierNames, allowPrivateIdentifiers) {
|
|
if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token())) {
|
|
var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
|
|
if (matchesPattern) {
|
|
return createMissingNode(79, true, ts.Diagnostics.Identifier_expected);
|
|
}
|
|
}
|
|
if (token() === 80) {
|
|
var node = parsePrivateIdentifier();
|
|
return allowPrivateIdentifiers ? node : createMissingNode(79, true, ts.Diagnostics.Identifier_expected);
|
|
}
|
|
return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
|
|
}
|
|
function parseTemplateSpans(isTaggedTemplate) {
|
|
var pos = getNodePos();
|
|
var list = [];
|
|
var node;
|
|
do {
|
|
node = parseTemplateSpan(isTaggedTemplate);
|
|
list.push(node);
|
|
} while (node.literal.kind === 16);
|
|
return createNodeArray(list, pos);
|
|
}
|
|
function parseTemplateExpression(isTaggedTemplate) {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTemplateExpression(parseTemplateHead(isTaggedTemplate), parseTemplateSpans(isTaggedTemplate)), pos);
|
|
}
|
|
function parseTemplateType() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTemplateLiteralType(parseTemplateHead(false), parseTemplateTypeSpans()), pos);
|
|
}
|
|
function parseTemplateTypeSpans() {
|
|
var pos = getNodePos();
|
|
var list = [];
|
|
var node;
|
|
do {
|
|
node = parseTemplateTypeSpan();
|
|
list.push(node);
|
|
} while (node.literal.kind === 16);
|
|
return createNodeArray(list, pos);
|
|
}
|
|
function parseTemplateTypeSpan() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTemplateLiteralTypeSpan(parseType(), parseLiteralOfTemplateSpan(false)), pos);
|
|
}
|
|
function parseLiteralOfTemplateSpan(isTaggedTemplate) {
|
|
if (token() === 19) {
|
|
reScanTemplateToken(isTaggedTemplate);
|
|
return parseTemplateMiddleOrTemplateTail();
|
|
}
|
|
else {
|
|
return parseExpectedToken(17, ts.Diagnostics._0_expected, ts.tokenToString(19));
|
|
}
|
|
}
|
|
function parseTemplateSpan(isTaggedTemplate) {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTemplateSpan(allowInAnd(parseExpression), parseLiteralOfTemplateSpan(isTaggedTemplate)), pos);
|
|
}
|
|
function parseLiteralNode() {
|
|
return parseLiteralLikeNode(token());
|
|
}
|
|
function parseTemplateHead(isTaggedTemplate) {
|
|
if (isTaggedTemplate) {
|
|
reScanTemplateHeadOrNoSubstitutionTemplate();
|
|
}
|
|
var fragment = parseLiteralLikeNode(token());
|
|
ts.Debug.assert(fragment.kind === 15, "Template head has wrong token kind");
|
|
return fragment;
|
|
}
|
|
function parseTemplateMiddleOrTemplateTail() {
|
|
var fragment = parseLiteralLikeNode(token());
|
|
ts.Debug.assert(fragment.kind === 16 || fragment.kind === 17, "Template fragment has wrong token kind");
|
|
return fragment;
|
|
}
|
|
function getTemplateLiteralRawText(kind) {
|
|
var isLast = kind === 14 || kind === 17;
|
|
var tokenText = scanner.getTokenText();
|
|
return tokenText.substring(1, tokenText.length - (scanner.isUnterminated() ? 0 : isLast ? 1 : 2));
|
|
}
|
|
function parseLiteralLikeNode(kind) {
|
|
var pos = getNodePos();
|
|
var node = ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, scanner.getTokenValue(), getTemplateLiteralRawText(kind), scanner.getTokenFlags() & 2048) :
|
|
kind === 8 ? factory.createNumericLiteral(scanner.getTokenValue(), scanner.getNumericLiteralFlags()) :
|
|
kind === 10 ? factory.createStringLiteral(scanner.getTokenValue(), undefined, scanner.hasExtendedUnicodeEscape()) :
|
|
ts.isLiteralKind(kind) ? factory.createLiteralLikeNode(kind, scanner.getTokenValue()) :
|
|
ts.Debug.fail();
|
|
if (scanner.hasExtendedUnicodeEscape()) {
|
|
node.hasExtendedUnicodeEscape = true;
|
|
}
|
|
if (scanner.isUnterminated()) {
|
|
node.isUnterminated = true;
|
|
}
|
|
nextToken();
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseEntityNameOfTypeReference() {
|
|
return parseEntityName(true, ts.Diagnostics.Type_expected);
|
|
}
|
|
function parseTypeArgumentsOfTypeReference() {
|
|
if (!scanner.hasPrecedingLineBreak() && reScanLessThanToken() === 29) {
|
|
return parseBracketedList(20, parseType, 29, 31);
|
|
}
|
|
}
|
|
function parseTypeReference() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTypeReferenceNode(parseEntityNameOfTypeReference(), parseTypeArgumentsOfTypeReference()), pos);
|
|
}
|
|
function typeHasArrowFunctionBlockingParseError(node) {
|
|
switch (node.kind) {
|
|
case 178:
|
|
return ts.nodeIsMissing(node.typeName);
|
|
case 179:
|
|
case 180: {
|
|
var _a = node, parameters = _a.parameters, type = _a.type;
|
|
return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
|
|
}
|
|
case 191:
|
|
return typeHasArrowFunctionBlockingParseError(node.type);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function parseThisTypePredicate(lhs) {
|
|
nextToken();
|
|
return finishNode(factory.createTypePredicateNode(undefined, lhs, parseType()), lhs.pos);
|
|
}
|
|
function parseThisTypeNode() {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
return finishNode(factory.createThisTypeNode(), pos);
|
|
}
|
|
function parseJSDocAllType() {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
return finishNode(factory.createJSDocAllType(), pos);
|
|
}
|
|
function parseJSDocNonNullableType() {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
return finishNode(factory.createJSDocNonNullableType(parseNonArrayType(), false), pos);
|
|
}
|
|
function parseJSDocUnknownOrNullableType() {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
if (token() === 27 ||
|
|
token() === 19 ||
|
|
token() === 21 ||
|
|
token() === 31 ||
|
|
token() === 63 ||
|
|
token() === 51) {
|
|
return finishNode(factory.createJSDocUnknownType(), pos);
|
|
}
|
|
else {
|
|
return finishNode(factory.createJSDocNullableType(parseType(), false), pos);
|
|
}
|
|
}
|
|
function parseJSDocFunctionType() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
if (lookAhead(nextTokenIsOpenParen)) {
|
|
nextToken();
|
|
var parameters = parseParameters(4 | 32);
|
|
var type = parseReturnType(58, false);
|
|
return withJSDoc(finishNode(factory.createJSDocFunctionType(parameters, type), pos), hasJSDoc);
|
|
}
|
|
return finishNode(factory.createTypeReferenceNode(parseIdentifierName(), undefined), pos);
|
|
}
|
|
function parseJSDocParameter() {
|
|
var pos = getNodePos();
|
|
var name;
|
|
if (token() === 108 || token() === 103) {
|
|
name = parseIdentifierName();
|
|
parseExpected(58);
|
|
}
|
|
return finishNode(factory.createParameterDeclaration(undefined, undefined, name, undefined, parseJSDocType(), undefined), pos);
|
|
}
|
|
function parseJSDocType() {
|
|
scanner.setInJSDocType(true);
|
|
var pos = getNodePos();
|
|
if (parseOptional(141)) {
|
|
var moduleTag = factory.createJSDocNamepathType(undefined);
|
|
terminate: while (true) {
|
|
switch (token()) {
|
|
case 19:
|
|
case 1:
|
|
case 27:
|
|
case 5:
|
|
break terminate;
|
|
default:
|
|
nextTokenJSDoc();
|
|
}
|
|
}
|
|
scanner.setInJSDocType(false);
|
|
return finishNode(moduleTag, pos);
|
|
}
|
|
var hasDotDotDot = parseOptional(25);
|
|
var type = parseTypeOrTypePredicate();
|
|
scanner.setInJSDocType(false);
|
|
if (hasDotDotDot) {
|
|
type = finishNode(factory.createJSDocVariadicType(type), pos);
|
|
}
|
|
if (token() === 63) {
|
|
nextToken();
|
|
return finishNode(factory.createJSDocOptionalType(type), pos);
|
|
}
|
|
return type;
|
|
}
|
|
function parseTypeQuery() {
|
|
var pos = getNodePos();
|
|
parseExpected(112);
|
|
var entityName = parseEntityName(true);
|
|
var typeArguments = !scanner.hasPrecedingLineBreak() ? tryParseTypeArguments() : undefined;
|
|
return finishNode(factory.createTypeQueryNode(entityName, typeArguments), pos);
|
|
}
|
|
function parseTypeParameter() {
|
|
var pos = getNodePos();
|
|
var modifiers = parseModifiers();
|
|
var name = parseIdentifier();
|
|
var constraint;
|
|
var expression;
|
|
if (parseOptional(94)) {
|
|
if (isStartOfType() || !isStartOfExpression()) {
|
|
constraint = parseType();
|
|
}
|
|
else {
|
|
expression = parseUnaryExpressionOrHigher();
|
|
}
|
|
}
|
|
var defaultType = parseOptional(63) ? parseType() : undefined;
|
|
var node = factory.createTypeParameterDeclaration(modifiers, name, constraint, defaultType);
|
|
node.expression = expression;
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseTypeParameters() {
|
|
if (token() === 29) {
|
|
return parseBracketedList(19, parseTypeParameter, 29, 31);
|
|
}
|
|
}
|
|
function isStartOfParameter(isJSDocParameter) {
|
|
return token() === 25 ||
|
|
isBindingIdentifierOrPrivateIdentifierOrPattern() ||
|
|
ts.isModifierKind(token()) ||
|
|
token() === 59 ||
|
|
isStartOfType(!isJSDocParameter);
|
|
}
|
|
function parseNameOfParameter(modifiers) {
|
|
var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_cannot_be_used_as_parameters);
|
|
if (ts.getFullWidth(name) === 0 && !ts.some(modifiers) && ts.isModifierKind(token())) {
|
|
nextToken();
|
|
}
|
|
return name;
|
|
}
|
|
function isParameterNameStart() {
|
|
return isBindingIdentifier() || token() === 22 || token() === 18;
|
|
}
|
|
function parseParameter(inOuterAwaitContext) {
|
|
return parseParameterWorker(inOuterAwaitContext);
|
|
}
|
|
function parseParameterForSpeculation(inOuterAwaitContext) {
|
|
return parseParameterWorker(inOuterAwaitContext, false);
|
|
}
|
|
function parseParameterWorker(inOuterAwaitContext, allowAmbiguity) {
|
|
if (allowAmbiguity === void 0) { allowAmbiguity = true; }
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : doOutsideOfAwaitContext(parseDecorators);
|
|
if (token() === 108) {
|
|
var node_1 = factory.createParameterDeclaration(decorators, undefined, createIdentifier(true), undefined, parseTypeAnnotation(), undefined);
|
|
if (decorators) {
|
|
parseErrorAtRange(decorators[0], ts.Diagnostics.Decorators_may_not_be_applied_to_this_parameters);
|
|
}
|
|
return withJSDoc(finishNode(node_1, pos), hasJSDoc);
|
|
}
|
|
var savedTopLevel = topLevel;
|
|
topLevel = false;
|
|
var modifiers = combineDecoratorsAndModifiers(decorators, parseModifiers());
|
|
var dotDotDotToken = parseOptionalToken(25);
|
|
if (!allowAmbiguity && !isParameterNameStart()) {
|
|
return undefined;
|
|
}
|
|
var node = withJSDoc(finishNode(factory.createParameterDeclaration(modifiers, dotDotDotToken, parseNameOfParameter(modifiers), parseOptionalToken(57), parseTypeAnnotation(), parseInitializer()), pos), hasJSDoc);
|
|
topLevel = savedTopLevel;
|
|
return node;
|
|
}
|
|
function parseReturnType(returnToken, isType) {
|
|
if (shouldParseReturnType(returnToken, isType)) {
|
|
return allowConditionalTypesAnd(parseTypeOrTypePredicate);
|
|
}
|
|
}
|
|
function shouldParseReturnType(returnToken, isType) {
|
|
if (returnToken === 38) {
|
|
parseExpected(returnToken);
|
|
return true;
|
|
}
|
|
else if (parseOptional(58)) {
|
|
return true;
|
|
}
|
|
else if (isType && token() === 38) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(58));
|
|
nextToken();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function parseParametersWorker(flags, allowAmbiguity) {
|
|
var savedYieldContext = inYieldContext();
|
|
var savedAwaitContext = inAwaitContext();
|
|
setYieldContext(!!(flags & 1));
|
|
setAwaitContext(!!(flags & 2));
|
|
var parameters = flags & 32 ?
|
|
parseDelimitedList(17, parseJSDocParameter) :
|
|
parseDelimitedList(16, function () { return allowAmbiguity ? parseParameter(savedAwaitContext) : parseParameterForSpeculation(savedAwaitContext); });
|
|
setYieldContext(savedYieldContext);
|
|
setAwaitContext(savedAwaitContext);
|
|
return parameters;
|
|
}
|
|
function parseParameters(flags) {
|
|
if (!parseExpected(20)) {
|
|
return createMissingList();
|
|
}
|
|
var parameters = parseParametersWorker(flags, true);
|
|
parseExpected(21);
|
|
return parameters;
|
|
}
|
|
function parseTypeMemberSemicolon() {
|
|
if (parseOptional(27)) {
|
|
return;
|
|
}
|
|
parseSemicolon();
|
|
}
|
|
function parseSignatureMember(kind) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
if (kind === 175) {
|
|
parseExpected(103);
|
|
}
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(4);
|
|
var type = parseReturnType(58, true);
|
|
parseTypeMemberSemicolon();
|
|
var node = kind === 174
|
|
? factory.createCallSignature(typeParameters, parameters, type)
|
|
: factory.createConstructSignature(typeParameters, parameters, type);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function isIndexSignature() {
|
|
return token() === 22 && lookAhead(isUnambiguouslyIndexSignature);
|
|
}
|
|
function isUnambiguouslyIndexSignature() {
|
|
nextToken();
|
|
if (token() === 25 || token() === 23) {
|
|
return true;
|
|
}
|
|
if (ts.isModifierKind(token())) {
|
|
nextToken();
|
|
if (isIdentifier()) {
|
|
return true;
|
|
}
|
|
}
|
|
else if (!isIdentifier()) {
|
|
return false;
|
|
}
|
|
else {
|
|
nextToken();
|
|
}
|
|
if (token() === 58 || token() === 27) {
|
|
return true;
|
|
}
|
|
if (token() !== 57) {
|
|
return false;
|
|
}
|
|
nextToken();
|
|
return token() === 58 || token() === 27 || token() === 23;
|
|
}
|
|
function parseIndexSignatureDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var parameters = parseBracketedList(16, function () { return parseParameter(false); }, 22, 23);
|
|
var type = parseTypeAnnotation();
|
|
parseTypeMemberSemicolon();
|
|
var node = factory.createIndexSignature(modifiers, parameters, type);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parsePropertyOrMethodSignature(pos, hasJSDoc, modifiers) {
|
|
var name = parsePropertyName();
|
|
var questionToken = parseOptionalToken(57);
|
|
var node;
|
|
if (token() === 20 || token() === 29) {
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(4);
|
|
var type = parseReturnType(58, true);
|
|
node = factory.createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type);
|
|
}
|
|
else {
|
|
var type = parseTypeAnnotation();
|
|
node = factory.createPropertySignature(modifiers, name, questionToken, type);
|
|
if (token() === 63)
|
|
node.initializer = parseInitializer();
|
|
}
|
|
parseTypeMemberSemicolon();
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function isTypeMemberStart() {
|
|
if (token() === 20 ||
|
|
token() === 29 ||
|
|
token() === 136 ||
|
|
token() === 149) {
|
|
return true;
|
|
}
|
|
var idToken = false;
|
|
while (ts.isModifierKind(token())) {
|
|
idToken = true;
|
|
nextToken();
|
|
}
|
|
if (token() === 22) {
|
|
return true;
|
|
}
|
|
if (isLiteralPropertyName()) {
|
|
idToken = true;
|
|
nextToken();
|
|
}
|
|
if (idToken) {
|
|
return token() === 20 ||
|
|
token() === 29 ||
|
|
token() === 57 ||
|
|
token() === 58 ||
|
|
token() === 27 ||
|
|
canParseSemicolon();
|
|
}
|
|
return false;
|
|
}
|
|
function parseTypeMember() {
|
|
if (token() === 20 || token() === 29) {
|
|
return parseSignatureMember(174);
|
|
}
|
|
if (token() === 103 && lookAhead(nextTokenIsOpenParenOrLessThan)) {
|
|
return parseSignatureMember(175);
|
|
}
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var modifiers = parseModifiers();
|
|
if (parseContextualModifier(136)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 172, 4);
|
|
}
|
|
if (parseContextualModifier(149)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 173, 4);
|
|
}
|
|
if (isIndexSignature()) {
|
|
return parseIndexSignatureDeclaration(pos, hasJSDoc, undefined, modifiers);
|
|
}
|
|
return parsePropertyOrMethodSignature(pos, hasJSDoc, modifiers);
|
|
}
|
|
function nextTokenIsOpenParenOrLessThan() {
|
|
nextToken();
|
|
return token() === 20 || token() === 29;
|
|
}
|
|
function nextTokenIsDot() {
|
|
return nextToken() === 24;
|
|
}
|
|
function nextTokenIsOpenParenOrLessThanOrDot() {
|
|
switch (nextToken()) {
|
|
case 20:
|
|
case 29:
|
|
case 24:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function parseTypeLiteral() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTypeLiteralNode(parseObjectTypeMembers()), pos);
|
|
}
|
|
function parseObjectTypeMembers() {
|
|
var members;
|
|
if (parseExpected(18)) {
|
|
members = parseList(4, parseTypeMember);
|
|
parseExpected(19);
|
|
}
|
|
else {
|
|
members = createMissingList();
|
|
}
|
|
return members;
|
|
}
|
|
function isStartOfMappedType() {
|
|
nextToken();
|
|
if (token() === 39 || token() === 40) {
|
|
return nextToken() === 145;
|
|
}
|
|
if (token() === 145) {
|
|
nextToken();
|
|
}
|
|
return token() === 22 && nextTokenIsIdentifier() && nextToken() === 101;
|
|
}
|
|
function parseMappedTypeParameter() {
|
|
var pos = getNodePos();
|
|
var name = parseIdentifierName();
|
|
parseExpected(101);
|
|
var type = parseType();
|
|
return finishNode(factory.createTypeParameterDeclaration(undefined, name, type, undefined), pos);
|
|
}
|
|
function parseMappedType() {
|
|
var pos = getNodePos();
|
|
parseExpected(18);
|
|
var readonlyToken;
|
|
if (token() === 145 || token() === 39 || token() === 40) {
|
|
readonlyToken = parseTokenNode();
|
|
if (readonlyToken.kind !== 145) {
|
|
parseExpected(145);
|
|
}
|
|
}
|
|
parseExpected(22);
|
|
var typeParameter = parseMappedTypeParameter();
|
|
var nameType = parseOptional(127) ? parseType() : undefined;
|
|
parseExpected(23);
|
|
var questionToken;
|
|
if (token() === 57 || token() === 39 || token() === 40) {
|
|
questionToken = parseTokenNode();
|
|
if (questionToken.kind !== 57) {
|
|
parseExpected(57);
|
|
}
|
|
}
|
|
var type = parseTypeAnnotation();
|
|
parseSemicolon();
|
|
var members = parseList(4, parseTypeMember);
|
|
parseExpected(19);
|
|
return finishNode(factory.createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members), pos);
|
|
}
|
|
function parseTupleElementType() {
|
|
var pos = getNodePos();
|
|
if (parseOptional(25)) {
|
|
return finishNode(factory.createRestTypeNode(parseType()), pos);
|
|
}
|
|
var type = parseType();
|
|
if (ts.isJSDocNullableType(type) && type.pos === type.type.pos) {
|
|
var node = factory.createOptionalTypeNode(type.type);
|
|
ts.setTextRange(node, type);
|
|
node.flags = type.flags;
|
|
return node;
|
|
}
|
|
return type;
|
|
}
|
|
function isNextTokenColonOrQuestionColon() {
|
|
return nextToken() === 58 || (token() === 57 && nextToken() === 58);
|
|
}
|
|
function isTupleElementName() {
|
|
if (token() === 25) {
|
|
return ts.tokenIsIdentifierOrKeyword(nextToken()) && isNextTokenColonOrQuestionColon();
|
|
}
|
|
return ts.tokenIsIdentifierOrKeyword(token()) && isNextTokenColonOrQuestionColon();
|
|
}
|
|
function parseTupleElementNameOrTupleElementType() {
|
|
if (lookAhead(isTupleElementName)) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var dotDotDotToken = parseOptionalToken(25);
|
|
var name = parseIdentifierName();
|
|
var questionToken = parseOptionalToken(57);
|
|
parseExpected(58);
|
|
var type = parseTupleElementType();
|
|
var node = factory.createNamedTupleMember(dotDotDotToken, name, questionToken, type);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
return parseTupleElementType();
|
|
}
|
|
function parseTupleType() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTupleTypeNode(parseBracketedList(21, parseTupleElementNameOrTupleElementType, 22, 23)), pos);
|
|
}
|
|
function parseParenthesizedType() {
|
|
var pos = getNodePos();
|
|
parseExpected(20);
|
|
var type = parseType();
|
|
parseExpected(21);
|
|
return finishNode(factory.createParenthesizedType(type), pos);
|
|
}
|
|
function parseModifiersForConstructorType() {
|
|
var modifiers;
|
|
if (token() === 126) {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
var modifier = finishNode(factory.createToken(126), pos);
|
|
modifiers = createNodeArray([modifier], pos);
|
|
}
|
|
return modifiers;
|
|
}
|
|
function parseFunctionOrConstructorType() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var modifiers = parseModifiersForConstructorType();
|
|
var isConstructorType = parseOptional(103);
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(4);
|
|
var type = parseReturnType(38, false);
|
|
var node = isConstructorType
|
|
? factory.createConstructorTypeNode(modifiers, typeParameters, parameters, type)
|
|
: factory.createFunctionTypeNode(typeParameters, parameters, type);
|
|
if (!isConstructorType)
|
|
node.modifiers = modifiers;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseKeywordAndNoDot() {
|
|
var node = parseTokenNode();
|
|
return token() === 24 ? undefined : node;
|
|
}
|
|
function parseLiteralTypeNode(negative) {
|
|
var pos = getNodePos();
|
|
if (negative) {
|
|
nextToken();
|
|
}
|
|
var expression = token() === 110 || token() === 95 || token() === 104 ?
|
|
parseTokenNode() :
|
|
parseLiteralLikeNode(token());
|
|
if (negative) {
|
|
expression = finishNode(factory.createPrefixUnaryExpression(40, expression), pos);
|
|
}
|
|
return finishNode(factory.createLiteralTypeNode(expression), pos);
|
|
}
|
|
function isStartOfTypeOfImportType() {
|
|
nextToken();
|
|
return token() === 100;
|
|
}
|
|
function parseImportTypeAssertions() {
|
|
var pos = getNodePos();
|
|
var openBracePosition = scanner.getTokenPos();
|
|
parseExpected(18);
|
|
var multiLine = scanner.hasPrecedingLineBreak();
|
|
parseExpected(129);
|
|
parseExpected(58);
|
|
var clause = parseAssertClause(true);
|
|
if (!parseExpected(19)) {
|
|
var lastError = ts.lastOrUndefined(parseDiagnostics);
|
|
if (lastError && lastError.code === ts.Diagnostics._0_expected.code) {
|
|
ts.addRelatedInfo(lastError, ts.createDetachedDiagnostic(fileName, openBracePosition, 1, ts.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, "{", "}"));
|
|
}
|
|
}
|
|
return finishNode(factory.createImportTypeAssertionContainer(clause, multiLine), pos);
|
|
}
|
|
function parseImportType() {
|
|
sourceFlags |= 2097152;
|
|
var pos = getNodePos();
|
|
var isTypeOf = parseOptional(112);
|
|
parseExpected(100);
|
|
parseExpected(20);
|
|
var type = parseType();
|
|
var assertions;
|
|
if (parseOptional(27)) {
|
|
assertions = parseImportTypeAssertions();
|
|
}
|
|
parseExpected(21);
|
|
var qualifier = parseOptional(24) ? parseEntityNameOfTypeReference() : undefined;
|
|
var typeArguments = parseTypeArgumentsOfTypeReference();
|
|
return finishNode(factory.createImportTypeNode(type, assertions, qualifier, typeArguments, isTypeOf), pos);
|
|
}
|
|
function nextTokenIsNumericOrBigIntLiteral() {
|
|
nextToken();
|
|
return token() === 8 || token() === 9;
|
|
}
|
|
function parseNonArrayType() {
|
|
switch (token()) {
|
|
case 130:
|
|
case 155:
|
|
case 150:
|
|
case 147:
|
|
case 158:
|
|
case 151:
|
|
case 133:
|
|
case 153:
|
|
case 143:
|
|
case 148:
|
|
return tryParse(parseKeywordAndNoDot) || parseTypeReference();
|
|
case 66:
|
|
scanner.reScanAsteriskEqualsToken();
|
|
case 41:
|
|
return parseJSDocAllType();
|
|
case 60:
|
|
scanner.reScanQuestionToken();
|
|
case 57:
|
|
return parseJSDocUnknownOrNullableType();
|
|
case 98:
|
|
return parseJSDocFunctionType();
|
|
case 53:
|
|
return parseJSDocNonNullableType();
|
|
case 14:
|
|
case 10:
|
|
case 8:
|
|
case 9:
|
|
case 110:
|
|
case 95:
|
|
case 104:
|
|
return parseLiteralTypeNode();
|
|
case 40:
|
|
return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(true) : parseTypeReference();
|
|
case 114:
|
|
return parseTokenNode();
|
|
case 108: {
|
|
var thisKeyword = parseThisTypeNode();
|
|
if (token() === 139 && !scanner.hasPrecedingLineBreak()) {
|
|
return parseThisTypePredicate(thisKeyword);
|
|
}
|
|
else {
|
|
return thisKeyword;
|
|
}
|
|
}
|
|
case 112:
|
|
return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
|
|
case 18:
|
|
return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
|
|
case 22:
|
|
return parseTupleType();
|
|
case 20:
|
|
return parseParenthesizedType();
|
|
case 100:
|
|
return parseImportType();
|
|
case 128:
|
|
return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
|
|
case 15:
|
|
return parseTemplateType();
|
|
default:
|
|
return parseTypeReference();
|
|
}
|
|
}
|
|
function isStartOfType(inStartOfParameter) {
|
|
switch (token()) {
|
|
case 130:
|
|
case 155:
|
|
case 150:
|
|
case 147:
|
|
case 158:
|
|
case 133:
|
|
case 145:
|
|
case 151:
|
|
case 154:
|
|
case 114:
|
|
case 153:
|
|
case 104:
|
|
case 108:
|
|
case 112:
|
|
case 143:
|
|
case 18:
|
|
case 22:
|
|
case 29:
|
|
case 51:
|
|
case 50:
|
|
case 103:
|
|
case 10:
|
|
case 8:
|
|
case 9:
|
|
case 110:
|
|
case 95:
|
|
case 148:
|
|
case 41:
|
|
case 57:
|
|
case 53:
|
|
case 25:
|
|
case 137:
|
|
case 100:
|
|
case 128:
|
|
case 14:
|
|
case 15:
|
|
return true;
|
|
case 98:
|
|
return !inStartOfParameter;
|
|
case 40:
|
|
return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
|
|
case 20:
|
|
return !inStartOfParameter && lookAhead(isStartOfParenthesizedOrFunctionType);
|
|
default:
|
|
return isIdentifier();
|
|
}
|
|
}
|
|
function isStartOfParenthesizedOrFunctionType() {
|
|
nextToken();
|
|
return token() === 21 || isStartOfParameter(false) || isStartOfType();
|
|
}
|
|
function parsePostfixTypeOrHigher() {
|
|
var pos = getNodePos();
|
|
var type = parseNonArrayType();
|
|
while (!scanner.hasPrecedingLineBreak()) {
|
|
switch (token()) {
|
|
case 53:
|
|
nextToken();
|
|
type = finishNode(factory.createJSDocNonNullableType(type, true), pos);
|
|
break;
|
|
case 57:
|
|
if (lookAhead(nextTokenIsStartOfType)) {
|
|
return type;
|
|
}
|
|
nextToken();
|
|
type = finishNode(factory.createJSDocNullableType(type, true), pos);
|
|
break;
|
|
case 22:
|
|
parseExpected(22);
|
|
if (isStartOfType()) {
|
|
var indexType = parseType();
|
|
parseExpected(23);
|
|
type = finishNode(factory.createIndexedAccessTypeNode(type, indexType), pos);
|
|
}
|
|
else {
|
|
parseExpected(23);
|
|
type = finishNode(factory.createArrayTypeNode(type), pos);
|
|
}
|
|
break;
|
|
default:
|
|
return type;
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function parseTypeOperator(operator) {
|
|
var pos = getNodePos();
|
|
parseExpected(operator);
|
|
return finishNode(factory.createTypeOperatorNode(operator, parseTypeOperatorOrHigher()), pos);
|
|
}
|
|
function tryParseConstraintOfInferType() {
|
|
if (parseOptional(94)) {
|
|
var constraint = disallowConditionalTypesAnd(parseType);
|
|
if (inDisallowConditionalTypesContext() || token() !== 57) {
|
|
return constraint;
|
|
}
|
|
}
|
|
}
|
|
function parseTypeParameterOfInferType() {
|
|
var pos = getNodePos();
|
|
var name = parseIdentifier();
|
|
var constraint = tryParse(tryParseConstraintOfInferType);
|
|
var node = factory.createTypeParameterDeclaration(undefined, name, constraint);
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseInferType() {
|
|
var pos = getNodePos();
|
|
parseExpected(137);
|
|
return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
|
|
}
|
|
function parseTypeOperatorOrHigher() {
|
|
var operator = token();
|
|
switch (operator) {
|
|
case 140:
|
|
case 154:
|
|
case 145:
|
|
return parseTypeOperator(operator);
|
|
case 137:
|
|
return parseInferType();
|
|
}
|
|
return allowConditionalTypesAnd(parsePostfixTypeOrHigher);
|
|
}
|
|
function parseFunctionOrConstructorTypeToError(isInUnionType) {
|
|
if (isStartOfFunctionTypeOrConstructorType()) {
|
|
var type = parseFunctionOrConstructorType();
|
|
var diagnostic = void 0;
|
|
if (ts.isFunctionTypeNode(type)) {
|
|
diagnostic = isInUnionType
|
|
? ts.Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_a_union_type
|
|
: ts.Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type;
|
|
}
|
|
else {
|
|
diagnostic = isInUnionType
|
|
? ts.Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type
|
|
: ts.Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type;
|
|
}
|
|
parseErrorAtRange(type, diagnostic);
|
|
return type;
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseUnionOrIntersectionType(operator, parseConstituentType, createTypeNode) {
|
|
var pos = getNodePos();
|
|
var isUnionType = operator === 51;
|
|
var hasLeadingOperator = parseOptional(operator);
|
|
var type = hasLeadingOperator && parseFunctionOrConstructorTypeToError(isUnionType)
|
|
|| parseConstituentType();
|
|
if (token() === operator || hasLeadingOperator) {
|
|
var types = [type];
|
|
while (parseOptional(operator)) {
|
|
types.push(parseFunctionOrConstructorTypeToError(isUnionType) || parseConstituentType());
|
|
}
|
|
type = finishNode(createTypeNode(createNodeArray(types, pos)), pos);
|
|
}
|
|
return type;
|
|
}
|
|
function parseIntersectionTypeOrHigher() {
|
|
return parseUnionOrIntersectionType(50, parseTypeOperatorOrHigher, factory.createIntersectionTypeNode);
|
|
}
|
|
function parseUnionTypeOrHigher() {
|
|
return parseUnionOrIntersectionType(51, parseIntersectionTypeOrHigher, factory.createUnionTypeNode);
|
|
}
|
|
function nextTokenIsNewKeyword() {
|
|
nextToken();
|
|
return token() === 103;
|
|
}
|
|
function isStartOfFunctionTypeOrConstructorType() {
|
|
if (token() === 29) {
|
|
return true;
|
|
}
|
|
if (token() === 20 && lookAhead(isUnambiguouslyStartOfFunctionType)) {
|
|
return true;
|
|
}
|
|
return token() === 103 ||
|
|
token() === 126 && lookAhead(nextTokenIsNewKeyword);
|
|
}
|
|
function skipParameterStart() {
|
|
if (ts.isModifierKind(token())) {
|
|
parseModifiers();
|
|
}
|
|
if (isIdentifier() || token() === 108) {
|
|
nextToken();
|
|
return true;
|
|
}
|
|
if (token() === 22 || token() === 18) {
|
|
var previousErrorCount = parseDiagnostics.length;
|
|
parseIdentifierOrPattern();
|
|
return previousErrorCount === parseDiagnostics.length;
|
|
}
|
|
return false;
|
|
}
|
|
function isUnambiguouslyStartOfFunctionType() {
|
|
nextToken();
|
|
if (token() === 21 || token() === 25) {
|
|
return true;
|
|
}
|
|
if (skipParameterStart()) {
|
|
if (token() === 58 || token() === 27 ||
|
|
token() === 57 || token() === 63) {
|
|
return true;
|
|
}
|
|
if (token() === 21) {
|
|
nextToken();
|
|
if (token() === 38) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function parseTypeOrTypePredicate() {
|
|
var pos = getNodePos();
|
|
var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix);
|
|
var type = parseType();
|
|
if (typePredicateVariable) {
|
|
return finishNode(factory.createTypePredicateNode(undefined, typePredicateVariable, type), pos);
|
|
}
|
|
else {
|
|
return type;
|
|
}
|
|
}
|
|
function parseTypePredicatePrefix() {
|
|
var id = parseIdentifier();
|
|
if (token() === 139 && !scanner.hasPrecedingLineBreak()) {
|
|
nextToken();
|
|
return id;
|
|
}
|
|
}
|
|
function parseAssertsTypePredicate() {
|
|
var pos = getNodePos();
|
|
var assertsModifier = parseExpectedToken(128);
|
|
var parameterName = token() === 108 ? parseThisTypeNode() : parseIdentifier();
|
|
var type = parseOptional(139) ? parseType() : undefined;
|
|
return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
|
|
}
|
|
function parseType() {
|
|
if (contextFlags & 40960) {
|
|
return doOutsideOfContext(40960, parseType);
|
|
}
|
|
if (isStartOfFunctionTypeOrConstructorType()) {
|
|
return parseFunctionOrConstructorType();
|
|
}
|
|
var pos = getNodePos();
|
|
var type = parseUnionTypeOrHigher();
|
|
if (!inDisallowConditionalTypesContext() && !scanner.hasPrecedingLineBreak() && parseOptional(94)) {
|
|
var extendsType = disallowConditionalTypesAnd(parseType);
|
|
parseExpected(57);
|
|
var trueType = allowConditionalTypesAnd(parseType);
|
|
parseExpected(58);
|
|
var falseType = allowConditionalTypesAnd(parseType);
|
|
return finishNode(factory.createConditionalTypeNode(type, extendsType, trueType, falseType), pos);
|
|
}
|
|
return type;
|
|
}
|
|
function parseTypeAnnotation() {
|
|
return parseOptional(58) ? parseType() : undefined;
|
|
}
|
|
function isStartOfLeftHandSideExpression() {
|
|
switch (token()) {
|
|
case 108:
|
|
case 106:
|
|
case 104:
|
|
case 110:
|
|
case 95:
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 14:
|
|
case 15:
|
|
case 20:
|
|
case 22:
|
|
case 18:
|
|
case 98:
|
|
case 84:
|
|
case 103:
|
|
case 43:
|
|
case 68:
|
|
case 79:
|
|
return true;
|
|
case 100:
|
|
return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
|
|
default:
|
|
return isIdentifier();
|
|
}
|
|
}
|
|
function isStartOfExpression() {
|
|
if (isStartOfLeftHandSideExpression()) {
|
|
return true;
|
|
}
|
|
switch (token()) {
|
|
case 39:
|
|
case 40:
|
|
case 54:
|
|
case 53:
|
|
case 89:
|
|
case 112:
|
|
case 114:
|
|
case 45:
|
|
case 46:
|
|
case 29:
|
|
case 132:
|
|
case 125:
|
|
case 80:
|
|
return true;
|
|
default:
|
|
if (isBinaryOperator()) {
|
|
return true;
|
|
}
|
|
return isIdentifier();
|
|
}
|
|
}
|
|
function isStartOfExpressionStatement() {
|
|
return token() !== 18 &&
|
|
token() !== 98 &&
|
|
token() !== 84 &&
|
|
token() !== 59 &&
|
|
isStartOfExpression();
|
|
}
|
|
function parseExpression() {
|
|
var saveDecoratorContext = inDecoratorContext();
|
|
if (saveDecoratorContext) {
|
|
setDecoratorContext(false);
|
|
}
|
|
var pos = getNodePos();
|
|
var expr = parseAssignmentExpressionOrHigher(true);
|
|
var operatorToken;
|
|
while ((operatorToken = parseOptionalToken(27))) {
|
|
expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher(true), pos);
|
|
}
|
|
if (saveDecoratorContext) {
|
|
setDecoratorContext(true);
|
|
}
|
|
return expr;
|
|
}
|
|
function parseInitializer() {
|
|
return parseOptional(63) ? parseAssignmentExpressionOrHigher(true) : undefined;
|
|
}
|
|
function parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction) {
|
|
if (isYieldExpression()) {
|
|
return parseYieldExpression();
|
|
}
|
|
var arrowExpression = tryParseParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) || tryParseAsyncSimpleArrowFunctionExpression(allowReturnTypeInArrowFunction);
|
|
if (arrowExpression) {
|
|
return arrowExpression;
|
|
}
|
|
var pos = getNodePos();
|
|
var expr = parseBinaryExpressionOrHigher(0);
|
|
if (expr.kind === 79 && token() === 38) {
|
|
return parseSimpleArrowFunctionExpression(pos, expr, allowReturnTypeInArrowFunction, undefined);
|
|
}
|
|
if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
|
|
return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction), pos);
|
|
}
|
|
return parseConditionalExpressionRest(expr, pos, allowReturnTypeInArrowFunction);
|
|
}
|
|
function isYieldExpression() {
|
|
if (token() === 125) {
|
|
if (inYieldContext()) {
|
|
return true;
|
|
}
|
|
return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine);
|
|
}
|
|
return false;
|
|
}
|
|
function nextTokenIsIdentifierOnSameLine() {
|
|
nextToken();
|
|
return !scanner.hasPrecedingLineBreak() && isIdentifier();
|
|
}
|
|
function parseYieldExpression() {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
if (!scanner.hasPrecedingLineBreak() &&
|
|
(token() === 41 || isStartOfExpression())) {
|
|
return finishNode(factory.createYieldExpression(parseOptionalToken(41), parseAssignmentExpressionOrHigher(true)), pos);
|
|
}
|
|
else {
|
|
return finishNode(factory.createYieldExpression(undefined, undefined), pos);
|
|
}
|
|
}
|
|
function parseSimpleArrowFunctionExpression(pos, identifier, allowReturnTypeInArrowFunction, asyncModifier) {
|
|
ts.Debug.assert(token() === 38, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
|
|
var parameter = factory.createParameterDeclaration(undefined, undefined, identifier, undefined, undefined, undefined);
|
|
finishNode(parameter, identifier.pos);
|
|
var parameters = createNodeArray([parameter], parameter.pos, parameter.end);
|
|
var equalsGreaterThanToken = parseExpectedToken(38);
|
|
var body = parseArrowFunctionExpressionBody(!!asyncModifier, allowReturnTypeInArrowFunction);
|
|
var node = factory.createArrowFunction(asyncModifier, undefined, parameters, undefined, equalsGreaterThanToken, body);
|
|
return addJSDocComment(finishNode(node, pos));
|
|
}
|
|
function tryParseParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) {
|
|
var triState = isParenthesizedArrowFunctionExpression();
|
|
if (triState === 0) {
|
|
return undefined;
|
|
}
|
|
return triState === 1 ?
|
|
parseParenthesizedArrowFunctionExpression(true, true) :
|
|
tryParse(function () { return parsePossibleParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction); });
|
|
}
|
|
function isParenthesizedArrowFunctionExpression() {
|
|
if (token() === 20 || token() === 29 || token() === 131) {
|
|
return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
|
|
}
|
|
if (token() === 38) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function isParenthesizedArrowFunctionExpressionWorker() {
|
|
if (token() === 131) {
|
|
nextToken();
|
|
if (scanner.hasPrecedingLineBreak()) {
|
|
return 0;
|
|
}
|
|
if (token() !== 20 && token() !== 29) {
|
|
return 0;
|
|
}
|
|
}
|
|
var first = token();
|
|
var second = nextToken();
|
|
if (first === 20) {
|
|
if (second === 21) {
|
|
var third = nextToken();
|
|
switch (third) {
|
|
case 38:
|
|
case 58:
|
|
case 18:
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
if (second === 22 || second === 18) {
|
|
return 2;
|
|
}
|
|
if (second === 25) {
|
|
return 1;
|
|
}
|
|
if (ts.isModifierKind(second) && second !== 131 && lookAhead(nextTokenIsIdentifier)) {
|
|
if (nextToken() === 127) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
if (!isIdentifier() && second !== 108) {
|
|
return 0;
|
|
}
|
|
switch (nextToken()) {
|
|
case 58:
|
|
return 1;
|
|
case 57:
|
|
nextToken();
|
|
if (token() === 58 || token() === 27 || token() === 63 || token() === 21) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
case 27:
|
|
case 63:
|
|
case 21:
|
|
return 2;
|
|
}
|
|
return 0;
|
|
}
|
|
else {
|
|
ts.Debug.assert(first === 29);
|
|
if (!isIdentifier()) {
|
|
return 0;
|
|
}
|
|
if (languageVariant === 1) {
|
|
var isArrowFunctionInJsx = lookAhead(function () {
|
|
var third = nextToken();
|
|
if (third === 94) {
|
|
var fourth = nextToken();
|
|
switch (fourth) {
|
|
case 63:
|
|
case 31:
|
|
return false;
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
else if (third === 27 || third === 63) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
if (isArrowFunctionInJsx) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
return 2;
|
|
}
|
|
}
|
|
function parsePossibleParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) {
|
|
var tokenPos = scanner.getTokenPos();
|
|
if (notParenthesizedArrow === null || notParenthesizedArrow === void 0 ? void 0 : notParenthesizedArrow.has(tokenPos)) {
|
|
return undefined;
|
|
}
|
|
var result = parseParenthesizedArrowFunctionExpression(false, allowReturnTypeInArrowFunction);
|
|
if (!result) {
|
|
(notParenthesizedArrow || (notParenthesizedArrow = new ts.Set())).add(tokenPos);
|
|
}
|
|
return result;
|
|
}
|
|
function tryParseAsyncSimpleArrowFunctionExpression(allowReturnTypeInArrowFunction) {
|
|
if (token() === 131) {
|
|
if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1) {
|
|
var pos = getNodePos();
|
|
var asyncModifier = parseModifiersForArrowFunction();
|
|
var expr = parseBinaryExpressionOrHigher(0);
|
|
return parseSimpleArrowFunctionExpression(pos, expr, allowReturnTypeInArrowFunction, asyncModifier);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function isUnParenthesizedAsyncArrowFunctionWorker() {
|
|
if (token() === 131) {
|
|
nextToken();
|
|
if (scanner.hasPrecedingLineBreak() || token() === 38) {
|
|
return 0;
|
|
}
|
|
var expr = parseBinaryExpressionOrHigher(0);
|
|
if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 && token() === 38) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
function parseParenthesizedArrowFunctionExpression(allowAmbiguity, allowReturnTypeInArrowFunction) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var modifiers = parseModifiersForArrowFunction();
|
|
var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 : 0;
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters;
|
|
if (!parseExpected(20)) {
|
|
if (!allowAmbiguity) {
|
|
return undefined;
|
|
}
|
|
parameters = createMissingList();
|
|
}
|
|
else {
|
|
if (!allowAmbiguity) {
|
|
var maybeParameters = parseParametersWorker(isAsync, allowAmbiguity);
|
|
if (!maybeParameters) {
|
|
return undefined;
|
|
}
|
|
parameters = maybeParameters;
|
|
}
|
|
else {
|
|
parameters = parseParametersWorker(isAsync, allowAmbiguity);
|
|
}
|
|
if (!parseExpected(21) && !allowAmbiguity) {
|
|
return undefined;
|
|
}
|
|
}
|
|
var hasReturnColon = token() === 58;
|
|
var type = parseReturnType(58, false);
|
|
if (type && !allowAmbiguity && typeHasArrowFunctionBlockingParseError(type)) {
|
|
return undefined;
|
|
}
|
|
var unwrappedType = type;
|
|
while ((unwrappedType === null || unwrappedType === void 0 ? void 0 : unwrappedType.kind) === 191) {
|
|
unwrappedType = unwrappedType.type;
|
|
}
|
|
var hasJSDocFunctionType = unwrappedType && ts.isJSDocFunctionType(unwrappedType);
|
|
if (!allowAmbiguity && token() !== 38 && (hasJSDocFunctionType || token() !== 18)) {
|
|
return undefined;
|
|
}
|
|
var lastToken = token();
|
|
var equalsGreaterThanToken = parseExpectedToken(38);
|
|
var body = (lastToken === 38 || lastToken === 18)
|
|
? parseArrowFunctionExpressionBody(ts.some(modifiers, ts.isAsyncModifier), allowReturnTypeInArrowFunction)
|
|
: parseIdentifier();
|
|
if (!allowReturnTypeInArrowFunction && hasReturnColon) {
|
|
if (token() !== 58) {
|
|
return undefined;
|
|
}
|
|
}
|
|
var node = factory.createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseArrowFunctionExpressionBody(isAsync, allowReturnTypeInArrowFunction) {
|
|
if (token() === 18) {
|
|
return parseFunctionBlock(isAsync ? 2 : 0);
|
|
}
|
|
if (token() !== 26 &&
|
|
token() !== 98 &&
|
|
token() !== 84 &&
|
|
isStartOfStatement() &&
|
|
!isStartOfExpressionStatement()) {
|
|
return parseFunctionBlock(16 | (isAsync ? 2 : 0));
|
|
}
|
|
var savedTopLevel = topLevel;
|
|
topLevel = false;
|
|
var node = isAsync
|
|
? doInAwaitContext(function () { return parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction); })
|
|
: doOutsideOfAwaitContext(function () { return parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction); });
|
|
topLevel = savedTopLevel;
|
|
return node;
|
|
}
|
|
function parseConditionalExpressionRest(leftOperand, pos, allowReturnTypeInArrowFunction) {
|
|
var questionToken = parseOptionalToken(57);
|
|
if (!questionToken) {
|
|
return leftOperand;
|
|
}
|
|
var colonToken;
|
|
return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, function () { return parseAssignmentExpressionOrHigher(false); }), colonToken = parseExpectedToken(58), ts.nodeIsPresent(colonToken)
|
|
? parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction)
|
|
: createMissingNode(79, false, ts.Diagnostics._0_expected, ts.tokenToString(58))), pos);
|
|
}
|
|
function parseBinaryExpressionOrHigher(precedence) {
|
|
var pos = getNodePos();
|
|
var leftOperand = parseUnaryExpressionOrHigher();
|
|
return parseBinaryExpressionRest(precedence, leftOperand, pos);
|
|
}
|
|
function isInOrOfKeyword(t) {
|
|
return t === 101 || t === 160;
|
|
}
|
|
function parseBinaryExpressionRest(precedence, leftOperand, pos) {
|
|
while (true) {
|
|
reScanGreaterToken();
|
|
var newPrecedence = ts.getBinaryOperatorPrecedence(token());
|
|
var consumeCurrentOperator = token() === 42 ?
|
|
newPrecedence >= precedence :
|
|
newPrecedence > precedence;
|
|
if (!consumeCurrentOperator) {
|
|
break;
|
|
}
|
|
if (token() === 101 && inDisallowInContext()) {
|
|
break;
|
|
}
|
|
if (token() === 127) {
|
|
if (scanner.hasPrecedingLineBreak()) {
|
|
break;
|
|
}
|
|
else {
|
|
nextToken();
|
|
leftOperand = makeAsExpression(leftOperand, parseType());
|
|
}
|
|
}
|
|
else {
|
|
leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence), pos);
|
|
}
|
|
}
|
|
return leftOperand;
|
|
}
|
|
function isBinaryOperator() {
|
|
if (inDisallowInContext() && token() === 101) {
|
|
return false;
|
|
}
|
|
return ts.getBinaryOperatorPrecedence(token()) > 0;
|
|
}
|
|
function makeBinaryExpression(left, operatorToken, right, pos) {
|
|
return finishNode(factory.createBinaryExpression(left, operatorToken, right), pos);
|
|
}
|
|
function makeAsExpression(left, right) {
|
|
return finishNode(factory.createAsExpression(left, right), left.pos);
|
|
}
|
|
function parsePrefixUnaryExpression() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createPrefixUnaryExpression(token(), nextTokenAnd(parseSimpleUnaryExpression)), pos);
|
|
}
|
|
function parseDeleteExpression() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createDeleteExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
|
|
}
|
|
function parseTypeOfExpression() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createTypeOfExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
|
|
}
|
|
function parseVoidExpression() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
|
|
}
|
|
function isAwaitExpression() {
|
|
if (token() === 132) {
|
|
if (inAwaitContext()) {
|
|
return true;
|
|
}
|
|
return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine);
|
|
}
|
|
return false;
|
|
}
|
|
function parseAwaitExpression() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createAwaitExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
|
|
}
|
|
function parseUnaryExpressionOrHigher() {
|
|
if (isUpdateExpression()) {
|
|
var pos = getNodePos();
|
|
var updateExpression = parseUpdateExpression();
|
|
return token() === 42 ?
|
|
parseBinaryExpressionRest(ts.getBinaryOperatorPrecedence(token()), updateExpression, pos) :
|
|
updateExpression;
|
|
}
|
|
var unaryOperator = token();
|
|
var simpleUnaryExpression = parseSimpleUnaryExpression();
|
|
if (token() === 42) {
|
|
var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
|
|
var end = simpleUnaryExpression.end;
|
|
if (simpleUnaryExpression.kind === 211) {
|
|
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 39:
|
|
case 40:
|
|
case 54:
|
|
case 53:
|
|
return parsePrefixUnaryExpression();
|
|
case 89:
|
|
return parseDeleteExpression();
|
|
case 112:
|
|
return parseTypeOfExpression();
|
|
case 114:
|
|
return parseVoidExpression();
|
|
case 29:
|
|
return parseTypeAssertion();
|
|
case 132:
|
|
if (isAwaitExpression()) {
|
|
return parseAwaitExpression();
|
|
}
|
|
default:
|
|
return parseUpdateExpression();
|
|
}
|
|
}
|
|
function isUpdateExpression() {
|
|
switch (token()) {
|
|
case 39:
|
|
case 40:
|
|
case 54:
|
|
case 53:
|
|
case 89:
|
|
case 112:
|
|
case 114:
|
|
case 132:
|
|
return false;
|
|
case 29:
|
|
if (languageVariant !== 1) {
|
|
return false;
|
|
}
|
|
default:
|
|
return true;
|
|
}
|
|
}
|
|
function parseUpdateExpression() {
|
|
if (token() === 45 || token() === 46) {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createPrefixUnaryExpression(token(), nextTokenAnd(parseLeftHandSideExpressionOrHigher)), pos);
|
|
}
|
|
else if (languageVariant === 1 && token() === 29 && lookAhead(nextTokenIsIdentifierOrKeywordOrGreaterThan)) {
|
|
return parseJsxElementOrSelfClosingElementOrFragment(true);
|
|
}
|
|
var expression = parseLeftHandSideExpressionOrHigher();
|
|
ts.Debug.assert(ts.isLeftHandSideExpression(expression));
|
|
if ((token() === 45 || token() === 46) && !scanner.hasPrecedingLineBreak()) {
|
|
var operator = token();
|
|
nextToken();
|
|
return finishNode(factory.createPostfixUnaryExpression(expression, operator), expression.pos);
|
|
}
|
|
return expression;
|
|
}
|
|
function parseLeftHandSideExpressionOrHigher() {
|
|
var pos = getNodePos();
|
|
var expression;
|
|
if (token() === 100) {
|
|
if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
|
|
sourceFlags |= 2097152;
|
|
expression = parseTokenNode();
|
|
}
|
|
else if (lookAhead(nextTokenIsDot)) {
|
|
nextToken();
|
|
nextToken();
|
|
expression = finishNode(factory.createMetaProperty(100, parseIdentifierName()), pos);
|
|
sourceFlags |= 4194304;
|
|
}
|
|
else {
|
|
expression = parseMemberExpressionOrHigher();
|
|
}
|
|
}
|
|
else {
|
|
expression = token() === 106 ? parseSuperExpression() : parseMemberExpressionOrHigher();
|
|
}
|
|
return parseCallExpressionRest(pos, expression);
|
|
}
|
|
function parseMemberExpressionOrHigher() {
|
|
var pos = getNodePos();
|
|
var expression = parsePrimaryExpression();
|
|
return parseMemberExpressionRest(pos, expression, true);
|
|
}
|
|
function parseSuperExpression() {
|
|
var pos = getNodePos();
|
|
var expression = parseTokenNode();
|
|
if (token() === 29) {
|
|
var startPos = getNodePos();
|
|
var typeArguments = tryParse(parseTypeArgumentsInExpression);
|
|
if (typeArguments !== undefined) {
|
|
parseErrorAt(startPos, getNodePos(), ts.Diagnostics.super_may_not_use_type_arguments);
|
|
if (!isTemplateStartOfTaggedTemplate()) {
|
|
expression = factory.createExpressionWithTypeArguments(expression, typeArguments);
|
|
}
|
|
}
|
|
}
|
|
if (token() === 20 || token() === 24 || token() === 22) {
|
|
return expression;
|
|
}
|
|
parseExpectedToken(24, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
|
|
return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(true, true)), pos);
|
|
}
|
|
function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
|
|
var pos = getNodePos();
|
|
var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
|
|
var result;
|
|
if (opening.kind === 280) {
|
|
var children = parseJsxChildren(opening);
|
|
var closingElement = void 0;
|
|
var lastChild = children[children.length - 1];
|
|
if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 278
|
|
&& !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
|
|
&& tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
|
|
var end = lastChild.children.end;
|
|
var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, lastChild.children, finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
|
|
children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
|
|
closingElement = lastChild.closingElement;
|
|
}
|
|
else {
|
|
closingElement = parseJsxClosingElement(opening, inExpressionContext);
|
|
if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
|
|
if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
|
|
parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
|
|
}
|
|
else {
|
|
parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
|
|
}
|
|
}
|
|
}
|
|
result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
|
|
}
|
|
else if (opening.kind === 283) {
|
|
result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
|
|
}
|
|
else {
|
|
ts.Debug.assert(opening.kind === 279);
|
|
result = opening;
|
|
}
|
|
if (inExpressionContext && token() === 29) {
|
|
var topBadPos_1 = typeof topInvalidNodePosition === "undefined" ? result.pos : topInvalidNodePosition;
|
|
var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElementOrFragment(true, topBadPos_1); });
|
|
if (invalidElement) {
|
|
var operatorToken = createMissingNode(27, false);
|
|
ts.setTextRangePosWidth(operatorToken, invalidElement.pos, 0);
|
|
parseErrorAt(ts.skipTrivia(sourceText, topBadPos_1), invalidElement.end, ts.Diagnostics.JSX_expressions_must_have_one_parent_element);
|
|
return finishNode(factory.createBinaryExpression(result, operatorToken, invalidElement), pos);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function parseJsxText() {
|
|
var pos = getNodePos();
|
|
var node = factory.createJsxText(scanner.getTokenValue(), currentToken === 12);
|
|
currentToken = scanner.scanJsxToken();
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseJsxChild(openingTag, token) {
|
|
switch (token) {
|
|
case 1:
|
|
if (ts.isJsxOpeningFragment(openingTag)) {
|
|
parseErrorAtRange(openingTag, ts.Diagnostics.JSX_fragment_has_no_corresponding_closing_tag);
|
|
}
|
|
else {
|
|
var tag = openingTag.tagName;
|
|
var start = ts.skipTrivia(sourceText, tag.pos);
|
|
parseErrorAt(start, tag.end, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, openingTag.tagName));
|
|
}
|
|
return undefined;
|
|
case 30:
|
|
case 7:
|
|
return undefined;
|
|
case 11:
|
|
case 12:
|
|
return parseJsxText();
|
|
case 18:
|
|
return parseJsxExpression(false);
|
|
case 29:
|
|
return parseJsxElementOrSelfClosingElementOrFragment(false, undefined, openingTag);
|
|
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);
|
|
if (ts.isJsxOpeningElement(openingTag)
|
|
&& (child === null || child === void 0 ? void 0 : child.kind) === 278
|
|
&& !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
|
|
&& tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
|
|
break;
|
|
}
|
|
}
|
|
parsingContext = saveParsingContext;
|
|
return createNodeArray(list, listPos);
|
|
}
|
|
function parseJsxAttributes() {
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createJsxAttributes(parseList(13, parseJsxAttribute)), pos);
|
|
}
|
|
function parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext) {
|
|
var pos = getNodePos();
|
|
parseExpected(29);
|
|
if (token() === 31) {
|
|
scanJsxText();
|
|
return finishNode(factory.createJsxOpeningFragment(), pos);
|
|
}
|
|
var tagName = parseJsxElementName();
|
|
var typeArguments = (contextFlags & 262144) === 0 ? tryParseTypeArguments() : undefined;
|
|
var attributes = parseJsxAttributes();
|
|
var node;
|
|
if (token() === 31) {
|
|
scanJsxText();
|
|
node = factory.createJsxOpeningElement(tagName, typeArguments, attributes);
|
|
}
|
|
else {
|
|
parseExpected(43);
|
|
if (parseExpected(31, undefined, false)) {
|
|
if (inExpressionContext) {
|
|
nextToken();
|
|
}
|
|
else {
|
|
scanJsxText();
|
|
}
|
|
}
|
|
node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
|
|
}
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseJsxElementName() {
|
|
var pos = getNodePos();
|
|
scanJsxIdentifier();
|
|
var expression = token() === 108 ?
|
|
parseTokenNode() : parseIdentifierName();
|
|
while (parseOptional(24)) {
|
|
expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(true, false)), pos);
|
|
}
|
|
return expression;
|
|
}
|
|
function parseJsxExpression(inExpressionContext) {
|
|
var pos = getNodePos();
|
|
if (!parseExpected(18)) {
|
|
return undefined;
|
|
}
|
|
var dotDotDotToken;
|
|
var expression;
|
|
if (token() !== 19) {
|
|
dotDotDotToken = parseOptionalToken(25);
|
|
expression = parseExpression();
|
|
}
|
|
if (inExpressionContext) {
|
|
parseExpected(19);
|
|
}
|
|
else {
|
|
if (parseExpected(19, undefined, false)) {
|
|
scanJsxText();
|
|
}
|
|
}
|
|
return finishNode(factory.createJsxExpression(dotDotDotToken, expression), pos);
|
|
}
|
|
function parseJsxAttribute() {
|
|
if (token() === 18) {
|
|
return parseJsxSpreadAttribute();
|
|
}
|
|
scanJsxIdentifier();
|
|
var pos = getNodePos();
|
|
return finishNode(factory.createJsxAttribute(parseIdentifierName(), parseJsxAttributeValue()), pos);
|
|
}
|
|
function parseJsxAttributeValue() {
|
|
if (token() === 63) {
|
|
if (scanJsxAttributeValue() === 10) {
|
|
return parseLiteralNode();
|
|
}
|
|
if (token() === 18) {
|
|
return parseJsxExpression(true);
|
|
}
|
|
if (token() === 29) {
|
|
return parseJsxElementOrSelfClosingElementOrFragment(true);
|
|
}
|
|
parseErrorAtCurrentToken(ts.Diagnostics.or_JSX_element_expected);
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseJsxSpreadAttribute() {
|
|
var pos = getNodePos();
|
|
parseExpected(18);
|
|
parseExpected(25);
|
|
var expression = parseExpression();
|
|
parseExpected(19);
|
|
return finishNode(factory.createJsxSpreadAttribute(expression), pos);
|
|
}
|
|
function parseJsxClosingElement(open, inExpressionContext) {
|
|
var pos = getNodePos();
|
|
parseExpected(30);
|
|
var tagName = parseJsxElementName();
|
|
if (parseExpected(31, undefined, false)) {
|
|
if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
|
|
nextToken();
|
|
}
|
|
else {
|
|
scanJsxText();
|
|
}
|
|
}
|
|
return finishNode(factory.createJsxClosingElement(tagName), pos);
|
|
}
|
|
function parseJsxClosingFragment(inExpressionContext) {
|
|
var pos = getNodePos();
|
|
parseExpected(30);
|
|
if (ts.tokenIsIdentifierOrKeyword(token())) {
|
|
parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
|
|
}
|
|
if (parseExpected(31, undefined, false)) {
|
|
if (inExpressionContext) {
|
|
nextToken();
|
|
}
|
|
else {
|
|
scanJsxText();
|
|
}
|
|
}
|
|
return finishNode(factory.createJsxJsxClosingFragment(), pos);
|
|
}
|
|
function parseTypeAssertion() {
|
|
var pos = getNodePos();
|
|
parseExpected(29);
|
|
var type = parseType();
|
|
parseExpected(31);
|
|
var expression = parseSimpleUnaryExpression();
|
|
return finishNode(factory.createTypeAssertion(type, expression), pos);
|
|
}
|
|
function nextTokenIsIdentifierOrKeywordOrOpenBracketOrTemplate() {
|
|
nextToken();
|
|
return ts.tokenIsIdentifierOrKeyword(token())
|
|
|| token() === 22
|
|
|| isTemplateStartOfTaggedTemplate();
|
|
}
|
|
function isStartOfOptionalPropertyOrElementAccessChain() {
|
|
return token() === 28
|
|
&& lookAhead(nextTokenIsIdentifierOrKeywordOrOpenBracketOrTemplate);
|
|
}
|
|
function tryReparseOptionalChain(node) {
|
|
if (node.flags & 32) {
|
|
return true;
|
|
}
|
|
if (ts.isNonNullExpression(node)) {
|
|
var expr = node.expression;
|
|
while (ts.isNonNullExpression(expr) && !(expr.flags & 32)) {
|
|
expr = expr.expression;
|
|
}
|
|
if (expr.flags & 32) {
|
|
while (ts.isNonNullExpression(node)) {
|
|
node.flags |= 32;
|
|
node = node.expression;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function parsePropertyAccessExpressionRest(pos, expression, questionDotToken) {
|
|
var name = parseRightSideOfDot(true, true);
|
|
var isOptionalChain = questionDotToken || tryReparseOptionalChain(expression);
|
|
var propertyAccess = isOptionalChain ?
|
|
factory.createPropertyAccessChain(expression, questionDotToken, name) :
|
|
factory.createPropertyAccessExpression(expression, name);
|
|
if (isOptionalChain && ts.isPrivateIdentifier(propertyAccess.name)) {
|
|
parseErrorAtRange(propertyAccess.name, ts.Diagnostics.An_optional_chain_cannot_contain_private_identifiers);
|
|
}
|
|
if (ts.isExpressionWithTypeArguments(expression) && expression.typeArguments) {
|
|
var pos_2 = expression.typeArguments.pos - 1;
|
|
var end = ts.skipTrivia(sourceText, expression.typeArguments.end) + 1;
|
|
parseErrorAt(pos_2, end, ts.Diagnostics.An_instantiation_expression_cannot_be_followed_by_a_property_access);
|
|
}
|
|
return finishNode(propertyAccess, pos);
|
|
}
|
|
function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
|
|
var argumentExpression;
|
|
if (token() === 23) {
|
|
argumentExpression = createMissingNode(79, true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
|
|
}
|
|
else {
|
|
var argument = allowInAnd(parseExpression);
|
|
if (ts.isStringOrNumericLiteralLike(argument)) {
|
|
argument.text = internIdentifier(argument.text);
|
|
}
|
|
argumentExpression = argument;
|
|
}
|
|
parseExpected(23);
|
|
var indexedAccess = questionDotToken || tryReparseOptionalChain(expression) ?
|
|
factory.createElementAccessChain(expression, questionDotToken, argumentExpression) :
|
|
factory.createElementAccessExpression(expression, argumentExpression);
|
|
return finishNode(indexedAccess, pos);
|
|
}
|
|
function parseMemberExpressionRest(pos, expression, allowOptionalChain) {
|
|
while (true) {
|
|
var questionDotToken = void 0;
|
|
var isPropertyAccess = false;
|
|
if (allowOptionalChain && isStartOfOptionalPropertyOrElementAccessChain()) {
|
|
questionDotToken = parseExpectedToken(28);
|
|
isPropertyAccess = ts.tokenIsIdentifierOrKeyword(token());
|
|
}
|
|
else {
|
|
isPropertyAccess = parseOptional(24);
|
|
}
|
|
if (isPropertyAccess) {
|
|
expression = parsePropertyAccessExpressionRest(pos, expression, questionDotToken);
|
|
continue;
|
|
}
|
|
if ((questionDotToken || !inDecoratorContext()) && parseOptional(22)) {
|
|
expression = parseElementAccessExpressionRest(pos, expression, questionDotToken);
|
|
continue;
|
|
}
|
|
if (isTemplateStartOfTaggedTemplate()) {
|
|
expression = !questionDotToken && expression.kind === 228 ?
|
|
parseTaggedTemplateRest(pos, expression.expression, questionDotToken, expression.typeArguments) :
|
|
parseTaggedTemplateRest(pos, expression, questionDotToken, undefined);
|
|
continue;
|
|
}
|
|
if (!questionDotToken) {
|
|
if (token() === 53 && !scanner.hasPrecedingLineBreak()) {
|
|
nextToken();
|
|
expression = finishNode(factory.createNonNullExpression(expression), pos);
|
|
continue;
|
|
}
|
|
var typeArguments = tryParse(parseTypeArgumentsInExpression);
|
|
if (typeArguments) {
|
|
expression = finishNode(factory.createExpressionWithTypeArguments(expression, typeArguments), pos);
|
|
continue;
|
|
}
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
function isTemplateStartOfTaggedTemplate() {
|
|
return token() === 14 || token() === 15;
|
|
}
|
|
function parseTaggedTemplateRest(pos, tag, questionDotToken, typeArguments) {
|
|
var tagExpression = factory.createTaggedTemplateExpression(tag, typeArguments, token() === 14 ?
|
|
(reScanTemplateHeadOrNoSubstitutionTemplate(), parseLiteralNode()) :
|
|
parseTemplateExpression(true));
|
|
if (questionDotToken || tag.flags & 32) {
|
|
tagExpression.flags |= 32;
|
|
}
|
|
tagExpression.questionDotToken = questionDotToken;
|
|
return finishNode(tagExpression, pos);
|
|
}
|
|
function parseCallExpressionRest(pos, expression) {
|
|
while (true) {
|
|
expression = parseMemberExpressionRest(pos, expression, true);
|
|
var typeArguments = void 0;
|
|
var questionDotToken = parseOptionalToken(28);
|
|
if (questionDotToken) {
|
|
typeArguments = tryParse(parseTypeArgumentsInExpression);
|
|
if (isTemplateStartOfTaggedTemplate()) {
|
|
expression = parseTaggedTemplateRest(pos, expression, questionDotToken, typeArguments);
|
|
continue;
|
|
}
|
|
}
|
|
if (typeArguments || token() === 20) {
|
|
if (!questionDotToken && expression.kind === 228) {
|
|
typeArguments = expression.typeArguments;
|
|
expression = expression.expression;
|
|
}
|
|
var argumentList = parseArgumentList();
|
|
var callExpr = questionDotToken || tryReparseOptionalChain(expression) ?
|
|
factory.createCallChain(expression, questionDotToken, typeArguments, argumentList) :
|
|
factory.createCallExpression(expression, typeArguments, argumentList);
|
|
expression = finishNode(callExpr, pos);
|
|
continue;
|
|
}
|
|
if (questionDotToken) {
|
|
var name = createMissingNode(79, false, ts.Diagnostics.Identifier_expected);
|
|
expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
|
|
}
|
|
break;
|
|
}
|
|
return expression;
|
|
}
|
|
function parseArgumentList() {
|
|
parseExpected(20);
|
|
var result = parseDelimitedList(11, parseArgumentExpression);
|
|
parseExpected(21);
|
|
return result;
|
|
}
|
|
function parseTypeArgumentsInExpression() {
|
|
if ((contextFlags & 262144) !== 0) {
|
|
return undefined;
|
|
}
|
|
if (reScanLessThanToken() !== 29) {
|
|
return undefined;
|
|
}
|
|
nextToken();
|
|
var typeArguments = parseDelimitedList(20, parseType);
|
|
if (reScanGreaterToken() !== 31) {
|
|
return undefined;
|
|
}
|
|
nextToken();
|
|
return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : undefined;
|
|
}
|
|
function canFollowTypeArgumentsInExpression() {
|
|
switch (token()) {
|
|
case 20:
|
|
case 14:
|
|
case 15:
|
|
return true;
|
|
case 29:
|
|
case 31:
|
|
case 39:
|
|
case 40:
|
|
return false;
|
|
}
|
|
return scanner.hasPrecedingLineBreak() || isBinaryOperator() || !isStartOfExpression();
|
|
}
|
|
function parsePrimaryExpression() {
|
|
switch (token()) {
|
|
case 8:
|
|
case 9:
|
|
case 10:
|
|
case 14:
|
|
return parseLiteralNode();
|
|
case 108:
|
|
case 106:
|
|
case 104:
|
|
case 110:
|
|
case 95:
|
|
return parseTokenNode();
|
|
case 20:
|
|
return parseParenthesizedExpression();
|
|
case 22:
|
|
return parseArrayLiteralExpression();
|
|
case 18:
|
|
return parseObjectLiteralExpression();
|
|
case 131:
|
|
if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) {
|
|
break;
|
|
}
|
|
return parseFunctionExpression();
|
|
case 84:
|
|
return parseClassExpression();
|
|
case 98:
|
|
return parseFunctionExpression();
|
|
case 103:
|
|
return parseNewExpressionOrNewDotTarget();
|
|
case 43:
|
|
case 68:
|
|
if (reScanSlashToken() === 13) {
|
|
return parseLiteralNode();
|
|
}
|
|
break;
|
|
case 15:
|
|
return parseTemplateExpression(false);
|
|
case 80:
|
|
return parsePrivateIdentifier();
|
|
}
|
|
return parseIdentifier(ts.Diagnostics.Expression_expected);
|
|
}
|
|
function parseParenthesizedExpression() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpected(21);
|
|
return withJSDoc(finishNode(factory.createParenthesizedExpression(expression), pos), hasJSDoc);
|
|
}
|
|
function parseSpreadElement() {
|
|
var pos = getNodePos();
|
|
parseExpected(25);
|
|
var expression = parseAssignmentExpressionOrHigher(true);
|
|
return finishNode(factory.createSpreadElement(expression), pos);
|
|
}
|
|
function parseArgumentOrArrayLiteralElement() {
|
|
return token() === 25 ? parseSpreadElement() :
|
|
token() === 27 ? finishNode(factory.createOmittedExpression(), getNodePos()) :
|
|
parseAssignmentExpressionOrHigher(true);
|
|
}
|
|
function parseArgumentExpression() {
|
|
return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement);
|
|
}
|
|
function parseArrayLiteralExpression() {
|
|
var pos = getNodePos();
|
|
var openBracketPosition = scanner.getTokenPos();
|
|
var openBracketParsed = parseExpected(22);
|
|
var multiLine = scanner.hasPrecedingLineBreak();
|
|
var elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement);
|
|
parseExpectedMatchingBrackets(22, 23, openBracketParsed, openBracketPosition);
|
|
return finishNode(factory.createArrayLiteralExpression(elements, multiLine), pos);
|
|
}
|
|
function parseObjectLiteralElement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
if (parseOptionalToken(25)) {
|
|
var expression = parseAssignmentExpressionOrHigher(true);
|
|
return withJSDoc(finishNode(factory.createSpreadAssignment(expression), pos), hasJSDoc);
|
|
}
|
|
var decorators = parseDecorators();
|
|
var modifiers = parseModifiers();
|
|
if (parseContextualModifier(136)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 172, 0);
|
|
}
|
|
if (parseContextualModifier(149)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 173, 0);
|
|
}
|
|
var asteriskToken = parseOptionalToken(41);
|
|
var tokenIsIdentifier = isIdentifier();
|
|
var name = parsePropertyName();
|
|
var questionToken = parseOptionalToken(57);
|
|
var exclamationToken = parseOptionalToken(53);
|
|
if (asteriskToken || token() === 20 || token() === 29) {
|
|
return parseMethodDeclaration(pos, hasJSDoc, decorators, modifiers, asteriskToken, name, questionToken, exclamationToken);
|
|
}
|
|
var node;
|
|
var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58);
|
|
if (isShorthandPropertyAssignment) {
|
|
var equalsToken = parseOptionalToken(63);
|
|
var objectAssignmentInitializer = equalsToken ? allowInAnd(function () { return parseAssignmentExpressionOrHigher(true); }) : undefined;
|
|
node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
|
|
node.equalsToken = equalsToken;
|
|
}
|
|
else {
|
|
parseExpected(58);
|
|
var initializer = allowInAnd(function () { return parseAssignmentExpressionOrHigher(true); });
|
|
node = factory.createPropertyAssignment(name, initializer);
|
|
}
|
|
node.illegalDecorators = decorators;
|
|
node.modifiers = modifiers;
|
|
node.questionToken = questionToken;
|
|
node.exclamationToken = exclamationToken;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseObjectLiteralExpression() {
|
|
var pos = getNodePos();
|
|
var openBracePosition = scanner.getTokenPos();
|
|
var openBraceParsed = parseExpected(18);
|
|
var multiLine = scanner.hasPrecedingLineBreak();
|
|
var properties = parseDelimitedList(12, parseObjectLiteralElement, true);
|
|
parseExpectedMatchingBrackets(18, 19, openBraceParsed, openBracePosition);
|
|
return finishNode(factory.createObjectLiteralExpression(properties, multiLine), pos);
|
|
}
|
|
function parseFunctionExpression() {
|
|
var savedDecoratorContext = inDecoratorContext();
|
|
setDecoratorContext(false);
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var modifiers = parseModifiers();
|
|
parseExpected(98);
|
|
var asteriskToken = parseOptionalToken(41);
|
|
var isGenerator = asteriskToken ? 1 : 0;
|
|
var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 : 0;
|
|
var name = isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalBindingIdentifier) :
|
|
isGenerator ? doInYieldContext(parseOptionalBindingIdentifier) :
|
|
isAsync ? doInAwaitContext(parseOptionalBindingIdentifier) :
|
|
parseOptionalBindingIdentifier();
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(isGenerator | isAsync);
|
|
var type = parseReturnType(58, false);
|
|
var body = parseFunctionBlock(isGenerator | isAsync);
|
|
setDecoratorContext(savedDecoratorContext);
|
|
var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseOptionalBindingIdentifier() {
|
|
return isBindingIdentifier() ? parseBindingIdentifier() : undefined;
|
|
}
|
|
function parseNewExpressionOrNewDotTarget() {
|
|
var pos = getNodePos();
|
|
parseExpected(103);
|
|
if (parseOptional(24)) {
|
|
var name = parseIdentifierName();
|
|
return finishNode(factory.createMetaProperty(103, name), pos);
|
|
}
|
|
var expressionPos = getNodePos();
|
|
var expression = parseMemberExpressionRest(expressionPos, parsePrimaryExpression(), false);
|
|
var typeArguments;
|
|
if (expression.kind === 228) {
|
|
typeArguments = expression.typeArguments;
|
|
expression = expression.expression;
|
|
}
|
|
if (token() === 28) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0, ts.getTextOfNodeFromSourceText(sourceText, expression));
|
|
}
|
|
var argumentList = token() === 20 ? parseArgumentList() : undefined;
|
|
return finishNode(factory.createNewExpression(expression, typeArguments, argumentList), pos);
|
|
}
|
|
function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var openBracePosition = scanner.getTokenPos();
|
|
var openBraceParsed = parseExpected(18, diagnosticMessage);
|
|
if (openBraceParsed || ignoreMissingOpenBrace) {
|
|
var multiLine = scanner.hasPrecedingLineBreak();
|
|
var statements = parseList(1, parseStatement);
|
|
parseExpectedMatchingBrackets(18, 19, openBraceParsed, openBracePosition);
|
|
var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
|
|
if (token() === 63) {
|
|
parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
|
|
nextToken();
|
|
}
|
|
return result;
|
|
}
|
|
else {
|
|
var statements = createMissingList();
|
|
return withJSDoc(finishNode(factory.createBlock(statements, undefined), pos), hasJSDoc);
|
|
}
|
|
}
|
|
function parseFunctionBlock(flags, diagnosticMessage) {
|
|
var savedYieldContext = inYieldContext();
|
|
setYieldContext(!!(flags & 1));
|
|
var savedAwaitContext = inAwaitContext();
|
|
setAwaitContext(!!(flags & 2));
|
|
var savedTopLevel = topLevel;
|
|
topLevel = false;
|
|
var saveDecoratorContext = inDecoratorContext();
|
|
if (saveDecoratorContext) {
|
|
setDecoratorContext(false);
|
|
}
|
|
var block = parseBlock(!!(flags & 16), diagnosticMessage);
|
|
if (saveDecoratorContext) {
|
|
setDecoratorContext(true);
|
|
}
|
|
topLevel = savedTopLevel;
|
|
setYieldContext(savedYieldContext);
|
|
setAwaitContext(savedAwaitContext);
|
|
return block;
|
|
}
|
|
function parseEmptyStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(26);
|
|
return withJSDoc(finishNode(factory.createEmptyStatement(), pos), hasJSDoc);
|
|
}
|
|
function parseIfStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(99);
|
|
var openParenPosition = scanner.getTokenPos();
|
|
var openParenParsed = parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpectedMatchingBrackets(20, 21, openParenParsed, openParenPosition);
|
|
var thenStatement = parseStatement();
|
|
var elseStatement = parseOptional(91) ? parseStatement() : undefined;
|
|
return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
|
|
}
|
|
function parseDoStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(90);
|
|
var statement = parseStatement();
|
|
parseExpected(115);
|
|
var openParenPosition = scanner.getTokenPos();
|
|
var openParenParsed = parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpectedMatchingBrackets(20, 21, openParenParsed, openParenPosition);
|
|
parseOptional(26);
|
|
return withJSDoc(finishNode(factory.createDoStatement(statement, expression), pos), hasJSDoc);
|
|
}
|
|
function parseWhileStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(115);
|
|
var openParenPosition = scanner.getTokenPos();
|
|
var openParenParsed = parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpectedMatchingBrackets(20, 21, openParenParsed, openParenPosition);
|
|
var statement = parseStatement();
|
|
return withJSDoc(finishNode(factory.createWhileStatement(expression, statement), pos), hasJSDoc);
|
|
}
|
|
function parseForOrForInOrForOfStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(97);
|
|
var awaitToken = parseOptionalToken(132);
|
|
parseExpected(20);
|
|
var initializer;
|
|
if (token() !== 26) {
|
|
if (token() === 113 || token() === 119 || token() === 85) {
|
|
initializer = parseVariableDeclarationList(true);
|
|
}
|
|
else {
|
|
initializer = disallowInAnd(parseExpression);
|
|
}
|
|
}
|
|
var node;
|
|
if (awaitToken ? parseExpected(160) : parseOptional(160)) {
|
|
var expression = allowInAnd(function () { return parseAssignmentExpressionOrHigher(true); });
|
|
parseExpected(21);
|
|
node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
|
|
}
|
|
else if (parseOptional(101)) {
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpected(21);
|
|
node = factory.createForInStatement(initializer, expression, parseStatement());
|
|
}
|
|
else {
|
|
parseExpected(26);
|
|
var condition = token() !== 26 && token() !== 21
|
|
? allowInAnd(parseExpression)
|
|
: undefined;
|
|
parseExpected(26);
|
|
var incrementor = token() !== 21
|
|
? allowInAnd(parseExpression)
|
|
: undefined;
|
|
parseExpected(21);
|
|
node = factory.createForStatement(initializer, condition, incrementor, parseStatement());
|
|
}
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseBreakOrContinueStatement(kind) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(kind === 246 ? 81 : 86);
|
|
var label = canParseSemicolon() ? undefined : parseIdentifier();
|
|
parseSemicolon();
|
|
var node = kind === 246
|
|
? factory.createBreakStatement(label)
|
|
: factory.createContinueStatement(label);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseReturnStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(105);
|
|
var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
|
|
parseSemicolon();
|
|
return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
|
|
}
|
|
function parseWithStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(116);
|
|
var openParenPosition = scanner.getTokenPos();
|
|
var openParenParsed = parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpectedMatchingBrackets(20, 21, openParenParsed, openParenPosition);
|
|
var statement = doInsideOfContext(33554432, parseStatement);
|
|
return withJSDoc(finishNode(factory.createWithStatement(expression, statement), pos), hasJSDoc);
|
|
}
|
|
function parseCaseClause() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(82);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpected(58);
|
|
var statements = parseList(3, parseStatement);
|
|
return withJSDoc(finishNode(factory.createCaseClause(expression, statements), pos), hasJSDoc);
|
|
}
|
|
function parseDefaultClause() {
|
|
var pos = getNodePos();
|
|
parseExpected(88);
|
|
parseExpected(58);
|
|
var statements = parseList(3, parseStatement);
|
|
return finishNode(factory.createDefaultClause(statements), pos);
|
|
}
|
|
function parseCaseOrDefaultClause() {
|
|
return token() === 82 ? parseCaseClause() : parseDefaultClause();
|
|
}
|
|
function parseCaseBlock() {
|
|
var pos = getNodePos();
|
|
parseExpected(18);
|
|
var clauses = parseList(2, parseCaseOrDefaultClause);
|
|
parseExpected(19);
|
|
return finishNode(factory.createCaseBlock(clauses), pos);
|
|
}
|
|
function parseSwitchStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(107);
|
|
parseExpected(20);
|
|
var expression = allowInAnd(parseExpression);
|
|
parseExpected(21);
|
|
var caseBlock = parseCaseBlock();
|
|
return withJSDoc(finishNode(factory.createSwitchStatement(expression, caseBlock), pos), hasJSDoc);
|
|
}
|
|
function parseThrowStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(109);
|
|
var expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
|
|
if (expression === undefined) {
|
|
identifierCount++;
|
|
expression = finishNode(factory.createIdentifier(""), getNodePos());
|
|
}
|
|
if (!tryParseSemicolon()) {
|
|
parseErrorForMissingSemicolonAfter(expression);
|
|
}
|
|
return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
|
|
}
|
|
function parseTryStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(111);
|
|
var tryBlock = parseBlock(false);
|
|
var catchClause = token() === 83 ? parseCatchClause() : undefined;
|
|
var finallyBlock;
|
|
if (!catchClause || token() === 96) {
|
|
parseExpected(96, ts.Diagnostics.catch_or_finally_expected);
|
|
finallyBlock = parseBlock(false);
|
|
}
|
|
return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
|
|
}
|
|
function parseCatchClause() {
|
|
var pos = getNodePos();
|
|
parseExpected(83);
|
|
var variableDeclaration;
|
|
if (parseOptional(20)) {
|
|
variableDeclaration = parseVariableDeclaration();
|
|
parseExpected(21);
|
|
}
|
|
else {
|
|
variableDeclaration = undefined;
|
|
}
|
|
var block = parseBlock(false);
|
|
return finishNode(factory.createCatchClause(variableDeclaration, block), pos);
|
|
}
|
|
function parseDebuggerStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
parseExpected(87);
|
|
parseSemicolon();
|
|
return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
|
|
}
|
|
function parseExpressionOrLabeledStatement() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var node;
|
|
var hasParen = token() === 20;
|
|
var expression = allowInAnd(parseExpression);
|
|
if (ts.isIdentifier(expression) && parseOptional(58)) {
|
|
node = factory.createLabeledStatement(expression, parseStatement());
|
|
}
|
|
else {
|
|
if (!tryParseSemicolon()) {
|
|
parseErrorForMissingSemicolonAfter(expression);
|
|
}
|
|
node = factory.createExpressionStatement(expression);
|
|
if (hasParen) {
|
|
hasJSDoc = false;
|
|
}
|
|
}
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function nextTokenIsIdentifierOrKeywordOnSameLine() {
|
|
nextToken();
|
|
return ts.tokenIsIdentifierOrKeyword(token()) && !scanner.hasPrecedingLineBreak();
|
|
}
|
|
function nextTokenIsClassKeywordOnSameLine() {
|
|
nextToken();
|
|
return token() === 84 && !scanner.hasPrecedingLineBreak();
|
|
}
|
|
function nextTokenIsFunctionKeywordOnSameLine() {
|
|
nextToken();
|
|
return token() === 98 && !scanner.hasPrecedingLineBreak();
|
|
}
|
|
function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
|
|
nextToken();
|
|
return (ts.tokenIsIdentifierOrKeyword(token()) || token() === 8 || token() === 9 || token() === 10) && !scanner.hasPrecedingLineBreak();
|
|
}
|
|
function isDeclaration() {
|
|
while (true) {
|
|
switch (token()) {
|
|
case 113:
|
|
case 119:
|
|
case 85:
|
|
case 98:
|
|
case 84:
|
|
case 92:
|
|
return true;
|
|
case 118:
|
|
case 152:
|
|
return nextTokenIsIdentifierOnSameLine();
|
|
case 141:
|
|
case 142:
|
|
return nextTokenIsIdentifierOrStringLiteralOnSameLine();
|
|
case 126:
|
|
case 131:
|
|
case 135:
|
|
case 121:
|
|
case 122:
|
|
case 123:
|
|
case 145:
|
|
nextToken();
|
|
if (scanner.hasPrecedingLineBreak()) {
|
|
return false;
|
|
}
|
|
continue;
|
|
case 157:
|
|
nextToken();
|
|
return token() === 18 || token() === 79 || token() === 93;
|
|
case 100:
|
|
nextToken();
|
|
return token() === 10 || token() === 41 ||
|
|
token() === 18 || ts.tokenIsIdentifierOrKeyword(token());
|
|
case 93:
|
|
var currentToken_1 = nextToken();
|
|
if (currentToken_1 === 152) {
|
|
currentToken_1 = lookAhead(nextToken);
|
|
}
|
|
if (currentToken_1 === 63 || currentToken_1 === 41 ||
|
|
currentToken_1 === 18 || currentToken_1 === 88 ||
|
|
currentToken_1 === 127) {
|
|
return true;
|
|
}
|
|
continue;
|
|
case 124:
|
|
nextToken();
|
|
continue;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
function isStartOfDeclaration() {
|
|
return lookAhead(isDeclaration);
|
|
}
|
|
function isStartOfStatement() {
|
|
switch (token()) {
|
|
case 59:
|
|
case 26:
|
|
case 18:
|
|
case 113:
|
|
case 119:
|
|
case 98:
|
|
case 84:
|
|
case 92:
|
|
case 99:
|
|
case 90:
|
|
case 115:
|
|
case 97:
|
|
case 86:
|
|
case 81:
|
|
case 105:
|
|
case 116:
|
|
case 107:
|
|
case 109:
|
|
case 111:
|
|
case 87:
|
|
case 83:
|
|
case 96:
|
|
return true;
|
|
case 100:
|
|
return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
|
|
case 85:
|
|
case 93:
|
|
return isStartOfDeclaration();
|
|
case 131:
|
|
case 135:
|
|
case 118:
|
|
case 141:
|
|
case 142:
|
|
case 152:
|
|
case 157:
|
|
return true;
|
|
case 123:
|
|
case 121:
|
|
case 122:
|
|
case 124:
|
|
case 145:
|
|
return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
|
|
default:
|
|
return isStartOfExpression();
|
|
}
|
|
}
|
|
function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
|
|
nextToken();
|
|
return isBindingIdentifier() || token() === 18 || token() === 22;
|
|
}
|
|
function isLetDeclaration() {
|
|
return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
|
|
}
|
|
function parseStatement() {
|
|
switch (token()) {
|
|
case 26:
|
|
return parseEmptyStatement();
|
|
case 18:
|
|
return parseBlock(false);
|
|
case 113:
|
|
return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
|
|
case 119:
|
|
if (isLetDeclaration()) {
|
|
return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
|
|
}
|
|
break;
|
|
case 98:
|
|
return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
|
|
case 84:
|
|
return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
|
|
case 99:
|
|
return parseIfStatement();
|
|
case 90:
|
|
return parseDoStatement();
|
|
case 115:
|
|
return parseWhileStatement();
|
|
case 97:
|
|
return parseForOrForInOrForOfStatement();
|
|
case 86:
|
|
return parseBreakOrContinueStatement(245);
|
|
case 81:
|
|
return parseBreakOrContinueStatement(246);
|
|
case 105:
|
|
return parseReturnStatement();
|
|
case 116:
|
|
return parseWithStatement();
|
|
case 107:
|
|
return parseSwitchStatement();
|
|
case 109:
|
|
return parseThrowStatement();
|
|
case 111:
|
|
case 83:
|
|
case 96:
|
|
return parseTryStatement();
|
|
case 87:
|
|
return parseDebuggerStatement();
|
|
case 59:
|
|
return parseDeclaration();
|
|
case 131:
|
|
case 118:
|
|
case 152:
|
|
case 141:
|
|
case 142:
|
|
case 135:
|
|
case 85:
|
|
case 92:
|
|
case 93:
|
|
case 100:
|
|
case 121:
|
|
case 122:
|
|
case 123:
|
|
case 126:
|
|
case 124:
|
|
case 145:
|
|
case 157:
|
|
if (isStartOfDeclaration()) {
|
|
return parseDeclaration();
|
|
}
|
|
break;
|
|
}
|
|
return parseExpressionOrLabeledStatement();
|
|
}
|
|
function isDeclareModifier(modifier) {
|
|
return modifier.kind === 135;
|
|
}
|
|
function parseDeclaration() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var decorators = parseDecorators();
|
|
var modifiers = parseModifiers();
|
|
var isAmbient = ts.some(modifiers, isDeclareModifier);
|
|
if (isAmbient) {
|
|
var node = tryReuseAmbientDeclaration(pos);
|
|
if (node) {
|
|
return node;
|
|
}
|
|
for (var _i = 0, _a = modifiers; _i < _a.length; _i++) {
|
|
var m = _a[_i];
|
|
m.flags |= 16777216;
|
|
}
|
|
return doInsideOfContext(16777216, function () { return parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers); });
|
|
}
|
|
else {
|
|
return parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
}
|
|
function tryReuseAmbientDeclaration(pos) {
|
|
return doInsideOfContext(16777216, function () {
|
|
var node = currentNode(parsingContext, pos);
|
|
if (node) {
|
|
return consumeNode(node);
|
|
}
|
|
});
|
|
}
|
|
function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
|
|
switch (token()) {
|
|
case 113:
|
|
case 119:
|
|
case 85:
|
|
return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
|
|
case 98:
|
|
return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 84:
|
|
return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 118:
|
|
return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 152:
|
|
return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 92:
|
|
return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 157:
|
|
case 141:
|
|
case 142:
|
|
return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 100:
|
|
return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
case 93:
|
|
nextToken();
|
|
switch (token()) {
|
|
case 88:
|
|
case 63:
|
|
return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
|
|
case 127:
|
|
return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
default:
|
|
return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
default:
|
|
if (decorators || modifiers) {
|
|
var missing = createMissingNode(276, true, ts.Diagnostics.Declaration_expected);
|
|
ts.setTextRangePos(missing, pos);
|
|
missing.illegalDecorators = decorators;
|
|
missing.modifiers = modifiers;
|
|
return missing;
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function nextTokenIsIdentifierOrStringLiteralOnSameLine() {
|
|
nextToken();
|
|
return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token() === 10);
|
|
}
|
|
function parseFunctionBlockOrSemicolon(flags, diagnosticMessage) {
|
|
if (token() !== 18) {
|
|
if (flags & 4) {
|
|
parseTypeMemberSemicolon();
|
|
return;
|
|
}
|
|
if (canParseSemicolon()) {
|
|
parseSemicolon();
|
|
return;
|
|
}
|
|
}
|
|
return parseFunctionBlock(flags, diagnosticMessage);
|
|
}
|
|
function parseArrayBindingElement() {
|
|
var pos = getNodePos();
|
|
if (token() === 27) {
|
|
return finishNode(factory.createOmittedExpression(), pos);
|
|
}
|
|
var dotDotDotToken = parseOptionalToken(25);
|
|
var name = parseIdentifierOrPattern();
|
|
var initializer = parseInitializer();
|
|
return finishNode(factory.createBindingElement(dotDotDotToken, undefined, name, initializer), pos);
|
|
}
|
|
function parseObjectBindingElement() {
|
|
var pos = getNodePos();
|
|
var dotDotDotToken = parseOptionalToken(25);
|
|
var tokenIsIdentifier = isBindingIdentifier();
|
|
var propertyName = parsePropertyName();
|
|
var name;
|
|
if (tokenIsIdentifier && token() !== 58) {
|
|
name = propertyName;
|
|
propertyName = undefined;
|
|
}
|
|
else {
|
|
parseExpected(58);
|
|
name = parseIdentifierOrPattern();
|
|
}
|
|
var initializer = parseInitializer();
|
|
return finishNode(factory.createBindingElement(dotDotDotToken, propertyName, name, initializer), pos);
|
|
}
|
|
function parseObjectBindingPattern() {
|
|
var pos = getNodePos();
|
|
parseExpected(18);
|
|
var elements = parseDelimitedList(9, parseObjectBindingElement);
|
|
parseExpected(19);
|
|
return finishNode(factory.createObjectBindingPattern(elements), pos);
|
|
}
|
|
function parseArrayBindingPattern() {
|
|
var pos = getNodePos();
|
|
parseExpected(22);
|
|
var elements = parseDelimitedList(10, parseArrayBindingElement);
|
|
parseExpected(23);
|
|
return finishNode(factory.createArrayBindingPattern(elements), pos);
|
|
}
|
|
function isBindingIdentifierOrPrivateIdentifierOrPattern() {
|
|
return token() === 18
|
|
|| token() === 22
|
|
|| token() === 80
|
|
|| isBindingIdentifier();
|
|
}
|
|
function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
|
|
if (token() === 22) {
|
|
return parseArrayBindingPattern();
|
|
}
|
|
if (token() === 18) {
|
|
return parseObjectBindingPattern();
|
|
}
|
|
return parseBindingIdentifier(privateIdentifierDiagnosticMessage);
|
|
}
|
|
function parseVariableDeclarationAllowExclamation() {
|
|
return parseVariableDeclaration(true);
|
|
}
|
|
function parseVariableDeclaration(allowExclamation) {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
|
|
var exclamationToken;
|
|
if (allowExclamation && name.kind === 79 &&
|
|
token() === 53 && !scanner.hasPrecedingLineBreak()) {
|
|
exclamationToken = parseTokenNode();
|
|
}
|
|
var type = parseTypeAnnotation();
|
|
var initializer = isInOrOfKeyword(token()) ? undefined : parseInitializer();
|
|
var node = factory.createVariableDeclaration(name, exclamationToken, type, initializer);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseVariableDeclarationList(inForStatementInitializer) {
|
|
var pos = getNodePos();
|
|
var flags = 0;
|
|
switch (token()) {
|
|
case 113:
|
|
break;
|
|
case 119:
|
|
flags |= 1;
|
|
break;
|
|
case 85:
|
|
flags |= 2;
|
|
break;
|
|
default:
|
|
ts.Debug.fail();
|
|
}
|
|
nextToken();
|
|
var declarations;
|
|
if (token() === 160 && lookAhead(canFollowContextualOfKeyword)) {
|
|
declarations = createMissingList();
|
|
}
|
|
else {
|
|
var savedDisallowIn = inDisallowInContext();
|
|
setDisallowInContext(inForStatementInitializer);
|
|
declarations = parseDelimitedList(8, inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation);
|
|
setDisallowInContext(savedDisallowIn);
|
|
}
|
|
return finishNode(factory.createVariableDeclarationList(declarations, flags), pos);
|
|
}
|
|
function canFollowContextualOfKeyword() {
|
|
return nextTokenIsIdentifier() && nextToken() === 21;
|
|
}
|
|
function parseVariableStatement(pos, hasJSDoc, decorators, modifiers) {
|
|
var declarationList = parseVariableDeclarationList(false);
|
|
parseSemicolon();
|
|
var node = factory.createVariableStatement(modifiers, declarationList);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var savedAwaitContext = inAwaitContext();
|
|
var modifierFlags = ts.modifiersToFlags(modifiers);
|
|
parseExpected(98);
|
|
var asteriskToken = parseOptionalToken(41);
|
|
var name = modifierFlags & 512 ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
|
|
var isGenerator = asteriskToken ? 1 : 0;
|
|
var isAsync = modifierFlags & 256 ? 2 : 0;
|
|
var typeParameters = parseTypeParameters();
|
|
if (modifierFlags & 1)
|
|
setAwaitContext(true);
|
|
var parameters = parseParameters(isGenerator | isAsync);
|
|
var type = parseReturnType(58, false);
|
|
var body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, ts.Diagnostics.or_expected);
|
|
setAwaitContext(savedAwaitContext);
|
|
var node = factory.createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseConstructorName() {
|
|
if (token() === 134) {
|
|
return parseExpected(134);
|
|
}
|
|
if (token() === 10 && lookAhead(nextToken) === 20) {
|
|
return tryParse(function () {
|
|
var literalNode = parseLiteralNode();
|
|
return literalNode.text === "constructor" ? literalNode : undefined;
|
|
});
|
|
}
|
|
}
|
|
function tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
return tryParse(function () {
|
|
if (parseConstructorName()) {
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(0);
|
|
var type = parseReturnType(58, false);
|
|
var body = parseFunctionBlockOrSemicolon(0, ts.Diagnostics.or_expected);
|
|
var node = factory.createConstructorDeclaration(modifiers, parameters, body);
|
|
node.illegalDecorators = decorators;
|
|
node.typeParameters = typeParameters;
|
|
node.type = type;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
});
|
|
}
|
|
function parseMethodDeclaration(pos, hasJSDoc, decorators, modifiers, asteriskToken, name, questionToken, exclamationToken, diagnosticMessage) {
|
|
var isGenerator = asteriskToken ? 1 : 0;
|
|
var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 : 0;
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(isGenerator | isAsync);
|
|
var type = parseReturnType(58, false);
|
|
var body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, diagnosticMessage);
|
|
var node = factory.createMethodDeclaration(combineDecoratorsAndModifiers(decorators, modifiers), asteriskToken, name, questionToken, typeParameters, parameters, type, body);
|
|
node.exclamationToken = exclamationToken;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, questionToken) {
|
|
var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53) : undefined;
|
|
var type = parseTypeAnnotation();
|
|
var initializer = doOutsideOfContext(8192 | 32768 | 4096, parseInitializer);
|
|
parseSemicolonAfterPropertyName(name, type, initializer);
|
|
var node = factory.createPropertyDeclaration(combineDecoratorsAndModifiers(decorators, modifiers), name, questionToken || exclamationToken, type, initializer);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parsePropertyOrMethodDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var asteriskToken = parseOptionalToken(41);
|
|
var name = parsePropertyName();
|
|
var questionToken = parseOptionalToken(57);
|
|
if (asteriskToken || token() === 20 || token() === 29) {
|
|
return parseMethodDeclaration(pos, hasJSDoc, decorators, modifiers, asteriskToken, name, questionToken, undefined, ts.Diagnostics.or_expected);
|
|
}
|
|
return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, questionToken);
|
|
}
|
|
function parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, kind, flags) {
|
|
var name = parsePropertyName();
|
|
var typeParameters = parseTypeParameters();
|
|
var parameters = parseParameters(0);
|
|
var type = parseReturnType(58, false);
|
|
var body = parseFunctionBlockOrSemicolon(flags);
|
|
var node = kind === 172
|
|
? factory.createGetAccessorDeclaration(combineDecoratorsAndModifiers(decorators, modifiers), name, parameters, type, body)
|
|
: factory.createSetAccessorDeclaration(combineDecoratorsAndModifiers(decorators, modifiers), name, parameters, body);
|
|
node.typeParameters = typeParameters;
|
|
if (ts.isSetAccessorDeclaration(node))
|
|
node.type = type;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function isClassMemberStart() {
|
|
var idToken;
|
|
if (token() === 59) {
|
|
return true;
|
|
}
|
|
while (ts.isModifierKind(token())) {
|
|
idToken = token();
|
|
if (ts.isClassMemberModifier(idToken)) {
|
|
return true;
|
|
}
|
|
nextToken();
|
|
}
|
|
if (token() === 41) {
|
|
return true;
|
|
}
|
|
if (isLiteralPropertyName()) {
|
|
idToken = token();
|
|
nextToken();
|
|
}
|
|
if (token() === 22) {
|
|
return true;
|
|
}
|
|
if (idToken !== undefined) {
|
|
if (!ts.isKeyword(idToken) || idToken === 149 || idToken === 136) {
|
|
return true;
|
|
}
|
|
switch (token()) {
|
|
case 20:
|
|
case 29:
|
|
case 53:
|
|
case 58:
|
|
case 63:
|
|
case 57:
|
|
return true;
|
|
default:
|
|
return canParseSemicolon();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpectedToken(124);
|
|
var body = parseClassStaticBlockBody();
|
|
var node = withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(body), pos), hasJSDoc);
|
|
node.illegalDecorators = decorators;
|
|
node.modifiers = modifiers;
|
|
return node;
|
|
}
|
|
function parseClassStaticBlockBody() {
|
|
var savedYieldContext = inYieldContext();
|
|
var savedAwaitContext = inAwaitContext();
|
|
setYieldContext(false);
|
|
setAwaitContext(true);
|
|
var body = parseBlock(false);
|
|
setYieldContext(savedYieldContext);
|
|
setAwaitContext(savedAwaitContext);
|
|
return body;
|
|
}
|
|
function parseDecoratorExpression() {
|
|
if (inAwaitContext() && token() === 132) {
|
|
var pos = getNodePos();
|
|
var awaitExpression = parseIdentifier(ts.Diagnostics.Expression_expected);
|
|
nextToken();
|
|
var memberExpression = parseMemberExpressionRest(pos, awaitExpression, true);
|
|
return parseCallExpressionRest(pos, memberExpression);
|
|
}
|
|
return parseLeftHandSideExpressionOrHigher();
|
|
}
|
|
function tryParseDecorator() {
|
|
var pos = getNodePos();
|
|
if (!parseOptional(59)) {
|
|
return undefined;
|
|
}
|
|
var expression = doInDecoratorContext(parseDecoratorExpression);
|
|
return finishNode(factory.createDecorator(expression), pos);
|
|
}
|
|
function parseDecorators() {
|
|
var pos = getNodePos();
|
|
var list, decorator;
|
|
while (decorator = tryParseDecorator()) {
|
|
list = ts.append(list, decorator);
|
|
}
|
|
return list && createNodeArray(list, pos);
|
|
}
|
|
function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock, hasSeenStaticModifier) {
|
|
var pos = getNodePos();
|
|
var kind = token();
|
|
if (token() === 85 && permitInvalidConstAsModifier) {
|
|
if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
|
|
return undefined;
|
|
}
|
|
}
|
|
else if (stopOnStartOfClassStaticBlock && token() === 124 && lookAhead(nextTokenIsOpenBrace)) {
|
|
return undefined;
|
|
}
|
|
else if (hasSeenStaticModifier && token() === 124) {
|
|
return undefined;
|
|
}
|
|
else {
|
|
if (!parseAnyContextualModifier()) {
|
|
return undefined;
|
|
}
|
|
}
|
|
return finishNode(factory.createToken(kind), pos);
|
|
}
|
|
function combineDecoratorsAndModifiers(decorators, modifiers) {
|
|
if (!decorators)
|
|
return modifiers;
|
|
if (!modifiers)
|
|
return decorators;
|
|
var decoratorsAndModifiers = factory.createNodeArray(ts.concatenate(decorators, modifiers));
|
|
ts.setTextRangePosEnd(decoratorsAndModifiers, decorators.pos, modifiers.end);
|
|
return decoratorsAndModifiers;
|
|
}
|
|
function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
|
|
var pos = getNodePos();
|
|
var list, modifier, hasSeenStatic = false;
|
|
while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock, hasSeenStatic)) {
|
|
if (modifier.kind === 124)
|
|
hasSeenStatic = true;
|
|
list = ts.append(list, modifier);
|
|
}
|
|
return list && createNodeArray(list, pos);
|
|
}
|
|
function parseModifiersForArrowFunction() {
|
|
var modifiers;
|
|
if (token() === 131) {
|
|
var pos = getNodePos();
|
|
nextToken();
|
|
var modifier = finishNode(factory.createToken(131), pos);
|
|
modifiers = createNodeArray([modifier], pos);
|
|
}
|
|
return modifiers;
|
|
}
|
|
function parseClassElement() {
|
|
var pos = getNodePos();
|
|
if (token() === 26) {
|
|
nextToken();
|
|
return finishNode(factory.createSemicolonClassElement(), pos);
|
|
}
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var decorators = parseDecorators();
|
|
var modifiers = parseModifiers(true, true);
|
|
if (token() === 124 && lookAhead(nextTokenIsOpenBrace)) {
|
|
return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
if (parseContextualModifier(136)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 172, 0);
|
|
}
|
|
if (parseContextualModifier(149)) {
|
|
return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 173, 0);
|
|
}
|
|
if (token() === 134 || token() === 10) {
|
|
var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
if (constructorDeclaration) {
|
|
return constructorDeclaration;
|
|
}
|
|
}
|
|
if (isIndexSignature()) {
|
|
return parseIndexSignatureDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
if (ts.tokenIsIdentifierOrKeyword(token()) ||
|
|
token() === 10 ||
|
|
token() === 8 ||
|
|
token() === 41 ||
|
|
token() === 22) {
|
|
var isAmbient = ts.some(modifiers, isDeclareModifier);
|
|
if (isAmbient) {
|
|
for (var _i = 0, _a = modifiers; _i < _a.length; _i++) {
|
|
var m = _a[_i];
|
|
m.flags |= 16777216;
|
|
}
|
|
return doInsideOfContext(16777216, function () { return parsePropertyOrMethodDeclaration(pos, hasJSDoc, decorators, modifiers); });
|
|
}
|
|
else {
|
|
return parsePropertyOrMethodDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
}
|
|
if (decorators || modifiers) {
|
|
var name = createMissingNode(79, true, ts.Diagnostics.Declaration_expected);
|
|
return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, undefined);
|
|
}
|
|
return ts.Debug.fail("Should not have attempted to parse class member declaration.");
|
|
}
|
|
function parseClassExpression() {
|
|
return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined, 226);
|
|
}
|
|
function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 257);
|
|
}
|
|
function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
|
|
var savedAwaitContext = inAwaitContext();
|
|
parseExpected(84);
|
|
var name = parseNameOfClassDeclarationOrExpression();
|
|
var typeParameters = parseTypeParameters();
|
|
if (ts.some(modifiers, ts.isExportModifier))
|
|
setAwaitContext(true);
|
|
var heritageClauses = parseHeritageClauses();
|
|
var members;
|
|
if (parseExpected(18)) {
|
|
members = parseClassMembers();
|
|
parseExpected(19);
|
|
}
|
|
else {
|
|
members = createMissingList();
|
|
}
|
|
setAwaitContext(savedAwaitContext);
|
|
var node = kind === 257
|
|
? factory.createClassDeclaration(combineDecoratorsAndModifiers(decorators, modifiers), name, typeParameters, heritageClauses, members)
|
|
: factory.createClassExpression(combineDecoratorsAndModifiers(decorators, modifiers), name, typeParameters, heritageClauses, members);
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseNameOfClassDeclarationOrExpression() {
|
|
return isBindingIdentifier() && !isImplementsClause()
|
|
? createIdentifier(isBindingIdentifier())
|
|
: undefined;
|
|
}
|
|
function isImplementsClause() {
|
|
return token() === 117 && lookAhead(nextTokenIsIdentifierOrKeyword);
|
|
}
|
|
function parseHeritageClauses() {
|
|
if (isHeritageClause()) {
|
|
return parseList(22, parseHeritageClause);
|
|
}
|
|
return undefined;
|
|
}
|
|
function parseHeritageClause() {
|
|
var pos = getNodePos();
|
|
var tok = token();
|
|
ts.Debug.assert(tok === 94 || tok === 117);
|
|
nextToken();
|
|
var types = parseDelimitedList(7, parseExpressionWithTypeArguments);
|
|
return finishNode(factory.createHeritageClause(tok, types), pos);
|
|
}
|
|
function parseExpressionWithTypeArguments() {
|
|
var pos = getNodePos();
|
|
var expression = parseLeftHandSideExpressionOrHigher();
|
|
if (expression.kind === 228) {
|
|
return expression;
|
|
}
|
|
var typeArguments = tryParseTypeArguments();
|
|
return finishNode(factory.createExpressionWithTypeArguments(expression, typeArguments), pos);
|
|
}
|
|
function tryParseTypeArguments() {
|
|
return token() === 29 ?
|
|
parseBracketedList(20, parseType, 29, 31) : undefined;
|
|
}
|
|
function isHeritageClause() {
|
|
return token() === 94 || token() === 117;
|
|
}
|
|
function parseClassMembers() {
|
|
return parseList(5, parseClassElement);
|
|
}
|
|
function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpected(118);
|
|
var name = parseIdentifier();
|
|
var typeParameters = parseTypeParameters();
|
|
var heritageClauses = parseHeritageClauses();
|
|
var members = parseObjectTypeMembers();
|
|
var node = factory.createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpected(152);
|
|
var name = parseIdentifier();
|
|
var typeParameters = parseTypeParameters();
|
|
parseExpected(63);
|
|
var type = token() === 138 && tryParse(parseKeywordAndNoDot) || parseType();
|
|
parseSemicolon();
|
|
var node = factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseEnumMember() {
|
|
var pos = getNodePos();
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
var name = parsePropertyName();
|
|
var initializer = allowInAnd(parseInitializer);
|
|
return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
|
|
}
|
|
function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpected(92);
|
|
var name = parseIdentifier();
|
|
var members;
|
|
if (parseExpected(18)) {
|
|
members = doOutsideOfYieldAndAwaitContext(function () { return parseDelimitedList(6, parseEnumMember); });
|
|
parseExpected(19);
|
|
}
|
|
else {
|
|
members = createMissingList();
|
|
}
|
|
var node = factory.createEnumDeclaration(modifiers, name, members);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseModuleBlock() {
|
|
var pos = getNodePos();
|
|
var statements;
|
|
if (parseExpected(18)) {
|
|
statements = parseList(1, parseStatement);
|
|
parseExpected(19);
|
|
}
|
|
else {
|
|
statements = createMissingList();
|
|
}
|
|
return finishNode(factory.createModuleBlock(statements), pos);
|
|
}
|
|
function parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags) {
|
|
var namespaceFlag = flags & 16;
|
|
var name = parseIdentifier();
|
|
var body = parseOptional(24)
|
|
? parseModuleOrNamespaceDeclaration(getNodePos(), false, undefined, undefined, 4 | namespaceFlag)
|
|
: parseModuleBlock();
|
|
var node = factory.createModuleDeclaration(modifiers, name, body, flags);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var flags = 0;
|
|
var name;
|
|
if (token() === 157) {
|
|
name = parseIdentifier();
|
|
flags |= 1024;
|
|
}
|
|
else {
|
|
name = parseLiteralNode();
|
|
name.text = internIdentifier(name.text);
|
|
}
|
|
var body;
|
|
if (token() === 18) {
|
|
body = parseModuleBlock();
|
|
}
|
|
else {
|
|
parseSemicolon();
|
|
}
|
|
var node = factory.createModuleDeclaration(modifiers, name, body, flags);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var flags = 0;
|
|
if (token() === 157) {
|
|
return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
else if (parseOptional(142)) {
|
|
flags |= 16;
|
|
}
|
|
else {
|
|
parseExpected(141);
|
|
if (token() === 10) {
|
|
return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
|
|
}
|
|
}
|
|
return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
|
|
}
|
|
function isExternalModuleReference() {
|
|
return token() === 146 &&
|
|
lookAhead(nextTokenIsOpenParen);
|
|
}
|
|
function nextTokenIsOpenParen() {
|
|
return nextToken() === 20;
|
|
}
|
|
function nextTokenIsOpenBrace() {
|
|
return nextToken() === 18;
|
|
}
|
|
function nextTokenIsSlash() {
|
|
return nextToken() === 43;
|
|
}
|
|
function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpected(127);
|
|
parseExpected(142);
|
|
var name = parseIdentifier();
|
|
parseSemicolon();
|
|
var node = factory.createNamespaceExportDeclaration(name);
|
|
node.illegalDecorators = decorators;
|
|
node.modifiers = modifiers;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
parseExpected(100);
|
|
var afterImportPos = scanner.getStartPos();
|
|
var identifier;
|
|
if (isIdentifier()) {
|
|
identifier = parseIdentifier();
|
|
}
|
|
var isTypeOnly = false;
|
|
if (token() !== 156 &&
|
|
(identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
|
|
(isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
|
|
isTypeOnly = true;
|
|
identifier = isIdentifier() ? parseIdentifier() : undefined;
|
|
}
|
|
if (identifier && !tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration()) {
|
|
return parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly);
|
|
}
|
|
var importClause;
|
|
if (identifier ||
|
|
token() === 41 ||
|
|
token() === 18) {
|
|
importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
|
|
parseExpected(156);
|
|
}
|
|
var moduleSpecifier = parseModuleSpecifier();
|
|
var assertClause;
|
|
if (token() === 129 && !scanner.hasPrecedingLineBreak()) {
|
|
assertClause = parseAssertClause();
|
|
}
|
|
parseSemicolon();
|
|
var node = factory.createImportDeclaration(modifiers, importClause, moduleSpecifier, assertClause);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseAssertEntry() {
|
|
var pos = getNodePos();
|
|
var name = ts.tokenIsIdentifierOrKeyword(token()) ? parseIdentifierName() : parseLiteralLikeNode(10);
|
|
parseExpected(58);
|
|
var value = parseAssignmentExpressionOrHigher(true);
|
|
return finishNode(factory.createAssertEntry(name, value), pos);
|
|
}
|
|
function parseAssertClause(skipAssertKeyword) {
|
|
var pos = getNodePos();
|
|
if (!skipAssertKeyword) {
|
|
parseExpected(129);
|
|
}
|
|
var openBracePosition = scanner.getTokenPos();
|
|
if (parseExpected(18)) {
|
|
var multiLine = scanner.hasPrecedingLineBreak();
|
|
var elements = parseDelimitedList(24, parseAssertEntry, true);
|
|
if (!parseExpected(19)) {
|
|
var lastError = ts.lastOrUndefined(parseDiagnostics);
|
|
if (lastError && lastError.code === ts.Diagnostics._0_expected.code) {
|
|
ts.addRelatedInfo(lastError, ts.createDetachedDiagnostic(fileName, openBracePosition, 1, ts.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, "{", "}"));
|
|
}
|
|
}
|
|
return finishNode(factory.createAssertClause(elements, multiLine), pos);
|
|
}
|
|
else {
|
|
var elements = createNodeArray([], getNodePos(), undefined, false);
|
|
return finishNode(factory.createAssertClause(elements, false), pos);
|
|
}
|
|
}
|
|
function tokenAfterImportDefinitelyProducesImportDeclaration() {
|
|
return token() === 41 || token() === 18;
|
|
}
|
|
function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
|
|
return token() === 27 || token() === 156;
|
|
}
|
|
function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
|
|
parseExpected(63);
|
|
var moduleReference = parseModuleReference();
|
|
parseSemicolon();
|
|
var node = factory.createImportEqualsDeclaration(modifiers, isTypeOnly, identifier, moduleReference);
|
|
node.illegalDecorators = decorators;
|
|
var finished = withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
return finished;
|
|
}
|
|
function parseImportClause(identifier, pos, isTypeOnly) {
|
|
var namedBindings;
|
|
if (!identifier ||
|
|
parseOptional(27)) {
|
|
namedBindings = token() === 41 ? parseNamespaceImport() : parseNamedImportsOrExports(269);
|
|
}
|
|
return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
|
|
}
|
|
function parseModuleReference() {
|
|
return isExternalModuleReference()
|
|
? parseExternalModuleReference()
|
|
: parseEntityName(false);
|
|
}
|
|
function parseExternalModuleReference() {
|
|
var pos = getNodePos();
|
|
parseExpected(146);
|
|
parseExpected(20);
|
|
var expression = parseModuleSpecifier();
|
|
parseExpected(21);
|
|
return finishNode(factory.createExternalModuleReference(expression), pos);
|
|
}
|
|
function parseModuleSpecifier() {
|
|
if (token() === 10) {
|
|
var result = parseLiteralNode();
|
|
result.text = internIdentifier(result.text);
|
|
return result;
|
|
}
|
|
else {
|
|
return parseExpression();
|
|
}
|
|
}
|
|
function parseNamespaceImport() {
|
|
var pos = getNodePos();
|
|
parseExpected(41);
|
|
parseExpected(127);
|
|
var name = parseIdentifier();
|
|
return finishNode(factory.createNamespaceImport(name), pos);
|
|
}
|
|
function parseNamedImportsOrExports(kind) {
|
|
var pos = getNodePos();
|
|
var node = kind === 269
|
|
? factory.createNamedImports(parseBracketedList(23, parseImportSpecifier, 18, 19))
|
|
: factory.createNamedExports(parseBracketedList(23, parseExportSpecifier, 18, 19));
|
|
return finishNode(node, pos);
|
|
}
|
|
function parseExportSpecifier() {
|
|
var hasJSDoc = hasPrecedingJSDocComment();
|
|
return withJSDoc(parseImportOrExportSpecifier(275), hasJSDoc);
|
|
}
|
|
function parseImportSpecifier() {
|
|
return parseImportOrExportSpecifier(270);
|
|
}
|
|
function parseImportOrExportSpecifier(kind) {
|
|
var pos = getNodePos();
|
|
var checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
|
|
var checkIdentifierStart = scanner.getTokenPos();
|
|
var checkIdentifierEnd = scanner.getTextPos();
|
|
var isTypeOnly = false;
|
|
var propertyName;
|
|
var canParseAsKeyword = true;
|
|
var name = parseIdentifierName();
|
|
if (name.escapedText === "type") {
|
|
if (token() === 127) {
|
|
var firstAs = parseIdentifierName();
|
|
if (token() === 127) {
|
|
var secondAs = parseIdentifierName();
|
|
if (ts.tokenIsIdentifierOrKeyword(token())) {
|
|
isTypeOnly = true;
|
|
propertyName = firstAs;
|
|
name = parseNameWithKeywordCheck();
|
|
canParseAsKeyword = false;
|
|
}
|
|
else {
|
|
propertyName = name;
|
|
name = secondAs;
|
|
canParseAsKeyword = false;
|
|
}
|
|
}
|
|
else if (ts.tokenIsIdentifierOrKeyword(token())) {
|
|
propertyName = name;
|
|
canParseAsKeyword = false;
|
|
name = parseNameWithKeywordCheck();
|
|
}
|
|
else {
|
|
isTypeOnly = true;
|
|
name = firstAs;
|
|
}
|
|
}
|
|
else if (ts.tokenIsIdentifierOrKeyword(token())) {
|
|
isTypeOnly = true;
|
|
name = parseNameWithKeywordCheck();
|
|
}
|
|
}
|
|
if (canParseAsKeyword && token() === 127) {
|
|
propertyName = name;
|
|
parseExpected(127);
|
|
name = parseNameWithKeywordCheck();
|
|
}
|
|
if (kind === 270 && checkIdentifierIsKeyword) {
|
|
parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
|
|
}
|
|
var node = kind === 270
|
|
? factory.createImportSpecifier(isTypeOnly, propertyName, name)
|
|
: factory.createExportSpecifier(isTypeOnly, propertyName, name);
|
|
return finishNode(node, pos);
|
|
function parseNameWithKeywordCheck() {
|
|
checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
|
|
checkIdentifierStart = scanner.getTokenPos();
|
|
checkIdentifierEnd = scanner.getTextPos();
|
|
return parseIdentifierName();
|
|
}
|
|
}
|
|
function parseNamespaceExport(pos) {
|
|
return finishNode(factory.createNamespaceExport(parseIdentifierName()), pos);
|
|
}
|
|
function parseExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
|
|
var savedAwaitContext = inAwaitContext();
|
|
setAwaitContext(true);
|
|
var exportClause;
|
|
var moduleSpecifier;
|
|
var assertClause;
|
|
var isTypeOnly = parseOptional(152);
|
|
var namespaceExportPos = getNodePos();
|
|
if (parseOptional(41)) {
|
|
if (parseOptional(127)) {
|
|
exportClause = parseNamespaceExport(namespaceExportPos);
|
|
}
|
|
parseExpected(156);
|
|
moduleSpecifier = parseModuleSpecifier();
|
|
}
|
|
else {
|
|
exportClause = parseNamedImportsOrExports(273);
|
|
if (token() === 156 || (token() === 10 && !scanner.hasPrecedingLineBreak())) {
|
|
parseExpected(156);
|
|
moduleSpecifier = parseModuleSpecifier();
|
|
}
|
|
}
|
|
if (moduleSpecifier && token() === 129 && !scanner.hasPrecedingLineBreak()) {
|
|
assertClause = parseAssertClause();
|
|
}
|
|
parseSemicolon();
|
|
setAwaitContext(savedAwaitContext);
|
|
var node = factory.createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, assertClause);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
function parseExportAssignment(pos, hasJSDoc, decorators, modifiers) {
|
|
var savedAwaitContext = inAwaitContext();
|
|
setAwaitContext(true);
|
|
var isExportEquals;
|
|
if (parseOptional(63)) {
|
|
isExportEquals = true;
|
|
}
|
|
else {
|
|
parseExpected(88);
|
|
}
|
|
var expression = parseAssignmentExpressionOrHigher(true);
|
|
parseSemicolon();
|
|
setAwaitContext(savedAwaitContext);
|
|
var node = factory.createExportAssignment(modifiers, isExportEquals, expression);
|
|
node.illegalDecorators = decorators;
|
|
return withJSDoc(finishNode(node, pos), hasJSDoc);
|
|
}
|
|
var JSDocParser;
|
|
(function (JSDocParser) {
|
|
function parseJSDocTypeExpressionForTests(content, start, length) {
|
|
initializeState("file.js", content, 99, undefined, 1);
|
|
scanner.setText(content, start, length);
|
|
currentToken = scanner.scan();
|
|
var jsDocTypeExpression = parseJSDocTypeExpression();
|
|
var sourceFile = createSourceFile("file.js", 99, 1, false, [], factory.createToken(1), 0, ts.noop);
|
|
var diagnostics = ts.attachFileToDiagnostics(parseDiagnostics, sourceFile);
|
|
if (jsDocDiagnostics) {
|
|
sourceFile.jsDocDiagnostics = ts.attachFileToDiagnostics(jsDocDiagnostics, sourceFile);
|
|
}
|
|
clearState();
|
|
return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined;
|
|
}
|
|
JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests;
|
|
function parseJSDocTypeExpression(mayOmitBraces) {
|
|
var pos = getNodePos();
|
|
var hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(18);
|
|
var type = doInsideOfContext(8388608, parseJSDocType);
|
|
if (!mayOmitBraces || hasBrace) {
|
|
parseExpectedJSDoc(19);
|
|
}
|
|
var result = factory.createJSDocTypeExpression(type);
|
|
fixupParentReferences(result);
|
|
return finishNode(result, pos);
|
|
}
|
|
JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression;
|
|
function parseJSDocNameReference() {
|
|
var pos = getNodePos();
|
|
var hasBrace = parseOptional(18);
|
|
var p2 = getNodePos();
|
|
var entityName = parseEntityName(false);
|
|
while (token() === 80) {
|
|
reScanHashToken();
|
|
nextTokenJSDoc();
|
|
entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
|
|
}
|
|
if (hasBrace) {
|
|
parseExpectedJSDoc(19);
|
|
}
|
|
var result = factory.createJSDocNameReference(entityName);
|
|
fixupParentReferences(result);
|
|
return finishNode(result, pos);
|
|
}
|
|
JSDocParser.parseJSDocNameReference = parseJSDocNameReference;
|
|
function parseIsolatedJSDocComment(content, start, length) {
|
|
initializeState("", content, 99, undefined, 1);
|
|
var jsDoc = doInsideOfContext(8388608, function () { return parseJSDocCommentWorker(start, length); });
|
|
var sourceFile = { languageVariant: 0, text: content };
|
|
var diagnostics = ts.attachFileToDiagnostics(parseDiagnostics, sourceFile);
|
|
clearState();
|
|
return jsDoc ? { jsDoc: jsDoc, diagnostics: diagnostics } : undefined;
|
|
}
|
|
JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment;
|
|
function parseJSDocComment(parent, start, length) {
|
|
var saveToken = currentToken;
|
|
var saveParseDiagnosticsLength = parseDiagnostics.length;
|
|
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
|
|
var comment = doInsideOfContext(8388608, function () { return parseJSDocCommentWorker(start, length); });
|
|
ts.setParent(comment, parent);
|
|
if (contextFlags & 262144) {
|
|
if (!jsDocDiagnostics) {
|
|
jsDocDiagnostics = [];
|
|
}
|
|
jsDocDiagnostics.push.apply(jsDocDiagnostics, parseDiagnostics);
|
|
}
|
|
currentToken = saveToken;
|
|
parseDiagnostics.length = saveParseDiagnosticsLength;
|
|
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
|
|
return comment;
|
|
}
|
|
JSDocParser.parseJSDocComment = parseJSDocComment;
|
|
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);
|
|
if (!isJSDocLikeText(content, start)) {
|
|
return undefined;
|
|
}
|
|
var tags;
|
|
var tagsPos;
|
|
var tagsEnd;
|
|
var linkEnd;
|
|
var commentsPos;
|
|
var comments = [];
|
|
var parts = [];
|
|
return scanner.scanRange(start + 3, length - 5, function () {
|
|
var state = 1;
|
|
var margin;
|
|
var indent = start - (content.lastIndexOf("\n", start) + 1) + 4;
|
|
function pushComment(text) {
|
|
if (!margin) {
|
|
margin = indent;
|
|
}
|
|
comments.push(text);
|
|
indent += text.length;
|
|
}
|
|
nextTokenJSDoc();
|
|
while (parseOptionalJsdoc(5))
|
|
;
|
|
if (parseOptionalJsdoc(4)) {
|
|
state = 0;
|
|
indent = 0;
|
|
}
|
|
loop: while (true) {
|
|
switch (token()) {
|
|
case 59:
|
|
if (state === 0 || state === 1) {
|
|
removeTrailingWhitespace(comments);
|
|
if (!commentsPos)
|
|
commentsPos = getNodePos();
|
|
addTag(parseTag(indent));
|
|
state = 0;
|
|
margin = undefined;
|
|
}
|
|
else {
|
|
pushComment(scanner.getTokenText());
|
|
}
|
|
break;
|
|
case 4:
|
|
comments.push(scanner.getTokenText());
|
|
state = 0;
|
|
indent = 0;
|
|
break;
|
|
case 41:
|
|
var asterisk = scanner.getTokenText();
|
|
if (state === 1 || state === 2) {
|
|
state = 2;
|
|
pushComment(asterisk);
|
|
}
|
|
else {
|
|
state = 1;
|
|
indent += asterisk.length;
|
|
}
|
|
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));
|
|
}
|
|
indent += whitespace.length;
|
|
break;
|
|
case 1:
|
|
break loop;
|
|
case 18:
|
|
state = 2;
|
|
var commentEnd = scanner.getStartPos();
|
|
var linkStart = scanner.getTextPos() - 1;
|
|
var link = parseJSDocLink(linkStart);
|
|
if (link) {
|
|
if (!linkEnd) {
|
|
removeLeadingNewlines(comments);
|
|
}
|
|
parts.push(finishNode(factory.createJSDocText(comments.join("")), linkEnd !== null && linkEnd !== void 0 ? linkEnd : start, commentEnd));
|
|
parts.push(link);
|
|
comments = [];
|
|
linkEnd = scanner.getTextPos();
|
|
break;
|
|
}
|
|
default:
|
|
state = 2;
|
|
pushComment(scanner.getTokenText());
|
|
break;
|
|
}
|
|
nextTokenJSDoc();
|
|
}
|
|
removeTrailingWhitespace(comments);
|
|
if (parts.length && comments.length) {
|
|
parts.push(finishNode(factory.createJSDocText(comments.join("")), linkEnd !== null && linkEnd !== void 0 ? linkEnd : start, commentsPos));
|
|
}
|
|
if (parts.length && tags)
|
|
ts.Debug.assertIsDefined(commentsPos, "having parsed tags implies that the end of the comment span should be set");
|
|
var tagsArray = tags && createNodeArray(tags, tagsPos, tagsEnd);
|
|
return finishNode(factory.createJSDocComment(parts.length ? createNodeArray(parts, start, commentsPos) : comments.length ? comments.join("") : undefined, tagsArray), start, end);
|
|
});
|
|
function removeLeadingNewlines(comments) {
|
|
while (comments.length && (comments[0] === "\n" || comments[0] === "\r")) {
|
|
comments.shift();
|
|
}
|
|
}
|
|
function removeTrailingWhitespace(comments) {
|
|
while (comments.length && comments[comments.length - 1].trim() === "") {
|
|
comments.pop();
|
|
}
|
|
}
|
|
function isNextNonwhitespaceTokenEndOfFile() {
|
|
while (true) {
|
|
nextTokenJSDoc();
|
|
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) {
|
|
nextTokenJSDoc();
|
|
}
|
|
}
|
|
function skipWhitespaceOrAsterisk() {
|
|
if (token() === 5 || token() === 4) {
|
|
if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) {
|
|
return "";
|
|
}
|
|
}
|
|
var precedingLineBreak = scanner.hasPrecedingLineBreak();
|
|
var seenLineBreak = false;
|
|
var indentText = "";
|
|
while ((precedingLineBreak && token() === 41) || token() === 5 || token() === 4) {
|
|
indentText += scanner.getTokenText();
|
|
if (token() === 4) {
|
|
precedingLineBreak = true;
|
|
seenLineBreak = true;
|
|
indentText = "";
|
|
}
|
|
else if (token() === 41) {
|
|
precedingLineBreak = false;
|
|
}
|
|
nextTokenJSDoc();
|
|
}
|
|
return seenLineBreak ? indentText : "";
|
|
}
|
|
function parseTag(margin) {
|
|
ts.Debug.assert(token() === 59);
|
|
var start = scanner.getTokenPos();
|
|
nextTokenJSDoc();
|
|
var tagName = parseJSDocIdentifierName(undefined);
|
|
var indentText = skipWhitespaceOrAsterisk();
|
|
var tag;
|
|
switch (tagName.escapedText) {
|
|
case "author":
|
|
tag = parseAuthorTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "implements":
|
|
tag = parseImplementsTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "augments":
|
|
case "extends":
|
|
tag = parseAugmentsTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "class":
|
|
case "constructor":
|
|
tag = parseSimpleTag(start, factory.createJSDocClassTag, tagName, margin, indentText);
|
|
break;
|
|
case "public":
|
|
tag = parseSimpleTag(start, factory.createJSDocPublicTag, tagName, margin, indentText);
|
|
break;
|
|
case "private":
|
|
tag = parseSimpleTag(start, factory.createJSDocPrivateTag, tagName, margin, indentText);
|
|
break;
|
|
case "protected":
|
|
tag = parseSimpleTag(start, factory.createJSDocProtectedTag, tagName, margin, indentText);
|
|
break;
|
|
case "readonly":
|
|
tag = parseSimpleTag(start, factory.createJSDocReadonlyTag, tagName, margin, indentText);
|
|
break;
|
|
case "override":
|
|
tag = parseSimpleTag(start, factory.createJSDocOverrideTag, tagName, margin, indentText);
|
|
break;
|
|
case "deprecated":
|
|
hasDeprecatedTag = true;
|
|
tag = parseSimpleTag(start, factory.createJSDocDeprecatedTag, tagName, margin, indentText);
|
|
break;
|
|
case "this":
|
|
tag = parseThisTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "enum":
|
|
tag = parseEnumTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "arg":
|
|
case "argument":
|
|
case "param":
|
|
return parseParameterOrPropertyTag(start, tagName, 2, margin);
|
|
case "return":
|
|
case "returns":
|
|
tag = parseReturnTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "template":
|
|
tag = parseTemplateTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "type":
|
|
tag = parseTypeTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "typedef":
|
|
tag = parseTypedefTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "callback":
|
|
tag = parseCallbackTag(start, tagName, margin, indentText);
|
|
break;
|
|
case "see":
|
|
tag = parseSeeTag(start, tagName, margin, indentText);
|
|
break;
|
|
default:
|
|
tag = parseUnknownTag(start, tagName, margin, indentText);
|
|
break;
|
|
}
|
|
return tag;
|
|
}
|
|
function parseTrailingTagComments(pos, end, margin, indentText) {
|
|
if (!indentText) {
|
|
margin += end - pos;
|
|
}
|
|
return parseTagComments(margin, indentText.slice(margin));
|
|
}
|
|
function parseTagComments(indent, initialMargin) {
|
|
var commentsPos = getNodePos();
|
|
var comments = [];
|
|
var parts = [];
|
|
var linkEnd;
|
|
var state = 0;
|
|
var previousWhitespace = true;
|
|
var margin;
|
|
function pushComment(text) {
|
|
if (!margin) {
|
|
margin = indent;
|
|
}
|
|
comments.push(text);
|
|
indent += text.length;
|
|
}
|
|
if (initialMargin !== undefined) {
|
|
if (initialMargin !== "") {
|
|
pushComment(initialMargin);
|
|
}
|
|
state = 1;
|
|
}
|
|
var tok = token();
|
|
loop: while (true) {
|
|
switch (tok) {
|
|
case 4:
|
|
state = 0;
|
|
comments.push(scanner.getTokenText());
|
|
indent = 0;
|
|
break;
|
|
case 59:
|
|
if (state === 3
|
|
|| state === 2 && (!previousWhitespace || lookAhead(isNextJSDocTokenWhitespace))) {
|
|
comments.push(scanner.getTokenText());
|
|
break;
|
|
}
|
|
scanner.setTextPos(scanner.getTextPos() - 1);
|
|
case 1:
|
|
break loop;
|
|
case 5:
|
|
if (state === 2 || state === 3) {
|
|
pushComment(scanner.getTokenText());
|
|
}
|
|
else {
|
|
var whitespace = scanner.getTokenText();
|
|
if (margin !== undefined && indent + whitespace.length > margin) {
|
|
comments.push(whitespace.slice(margin - indent));
|
|
}
|
|
indent += whitespace.length;
|
|
}
|
|
break;
|
|
case 18:
|
|
state = 2;
|
|
var commentEnd = scanner.getStartPos();
|
|
var linkStart = scanner.getTextPos() - 1;
|
|
var link = parseJSDocLink(linkStart);
|
|
if (link) {
|
|
parts.push(finishNode(factory.createJSDocText(comments.join("")), linkEnd !== null && linkEnd !== void 0 ? linkEnd : commentsPos, commentEnd));
|
|
parts.push(link);
|
|
comments = [];
|
|
linkEnd = scanner.getTextPos();
|
|
}
|
|
else {
|
|
pushComment(scanner.getTokenText());
|
|
}
|
|
break;
|
|
case 61:
|
|
if (state === 3) {
|
|
state = 2;
|
|
}
|
|
else {
|
|
state = 3;
|
|
}
|
|
pushComment(scanner.getTokenText());
|
|
break;
|
|
case 41:
|
|
if (state === 0) {
|
|
state = 1;
|
|
indent += 1;
|
|
break;
|
|
}
|
|
default:
|
|
if (state !== 3) {
|
|
state = 2;
|
|
}
|
|
pushComment(scanner.getTokenText());
|
|
break;
|
|
}
|
|
previousWhitespace = token() === 5;
|
|
tok = nextTokenJSDoc();
|
|
}
|
|
removeLeadingNewlines(comments);
|
|
removeTrailingWhitespace(comments);
|
|
if (parts.length) {
|
|
if (comments.length) {
|
|
parts.push(finishNode(factory.createJSDocText(comments.join("")), linkEnd !== null && linkEnd !== void 0 ? linkEnd : commentsPos));
|
|
}
|
|
return createNodeArray(parts, commentsPos, scanner.getTextPos());
|
|
}
|
|
else if (comments.length) {
|
|
return comments.join("");
|
|
}
|
|
}
|
|
function isNextJSDocTokenWhitespace() {
|
|
var next = nextTokenJSDoc();
|
|
return next === 5 || next === 4;
|
|
}
|
|
function parseJSDocLink(start) {
|
|
var linkType = tryParse(parseJSDocLinkPrefix);
|
|
if (!linkType) {
|
|
return undefined;
|
|
}
|
|
nextTokenJSDoc();
|
|
skipWhitespace();
|
|
var p2 = getNodePos();
|
|
var name = ts.tokenIsIdentifierOrKeyword(token())
|
|
? parseEntityName(true)
|
|
: undefined;
|
|
if (name) {
|
|
while (token() === 80) {
|
|
reScanHashToken();
|
|
nextTokenJSDoc();
|
|
name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
|
|
}
|
|
}
|
|
var text = [];
|
|
while (token() !== 19 && token() !== 4 && token() !== 1) {
|
|
text.push(scanner.getTokenText());
|
|
nextTokenJSDoc();
|
|
}
|
|
var create = linkType === "link" ? factory.createJSDocLink
|
|
: linkType === "linkcode" ? factory.createJSDocLinkCode
|
|
: factory.createJSDocLinkPlain;
|
|
return finishNode(create(name, text.join("")), start, scanner.getTextPos());
|
|
}
|
|
function parseJSDocLinkPrefix() {
|
|
skipWhitespaceOrAsterisk();
|
|
if (token() === 18
|
|
&& nextTokenJSDoc() === 59
|
|
&& ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
|
|
var kind = scanner.getTokenValue();
|
|
if (isJSDocLinkTag(kind))
|
|
return kind;
|
|
}
|
|
}
|
|
function isJSDocLinkTag(kind) {
|
|
return kind === "link" || kind === "linkcode" || kind === "linkplain";
|
|
}
|
|
function parseUnknownTag(start, tagName, indent, indentText) {
|
|
return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
|
|
}
|
|
function addTag(tag) {
|
|
if (!tag) {
|
|
return;
|
|
}
|
|
if (!tags) {
|
|
tags = [tag];
|
|
tagsPos = tag.pos;
|
|
}
|
|
else {
|
|
tags.push(tag);
|
|
}
|
|
tagsEnd = tag.end;
|
|
}
|
|
function tryParseTypeExpression() {
|
|
skipWhitespaceOrAsterisk();
|
|
return token() === 18 ? parseJSDocTypeExpression() : undefined;
|
|
}
|
|
function parseBracketNameInPropertyAndParamTag() {
|
|
var isBracketed = parseOptionalJsdoc(22);
|
|
if (isBracketed) {
|
|
skipWhitespace();
|
|
}
|
|
var isBackquoted = parseOptionalJsdoc(61);
|
|
var name = parseJSDocEntityName();
|
|
if (isBackquoted) {
|
|
parseExpectedTokenJSDoc(61);
|
|
}
|
|
if (isBracketed) {
|
|
skipWhitespace();
|
|
if (parseOptionalToken(63)) {
|
|
parseExpression();
|
|
}
|
|
parseExpected(23);
|
|
}
|
|
return { name: name, isBracketed: isBracketed };
|
|
}
|
|
function isObjectOrObjectArrayTypeReference(node) {
|
|
switch (node.kind) {
|
|
case 148:
|
|
return true;
|
|
case 183:
|
|
return isObjectOrObjectArrayTypeReference(node.elementType);
|
|
default:
|
|
return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
|
|
}
|
|
}
|
|
function parseParameterOrPropertyTag(start, tagName, target, indent) {
|
|
var typeExpression = tryParseTypeExpression();
|
|
var isNameFirst = !typeExpression;
|
|
skipWhitespaceOrAsterisk();
|
|
var _a = parseBracketNameInPropertyAndParamTag(), name = _a.name, isBracketed = _a.isBracketed;
|
|
var indentText = skipWhitespaceOrAsterisk();
|
|
if (isNameFirst && !lookAhead(parseJSDocLinkPrefix)) {
|
|
typeExpression = tryParseTypeExpression();
|
|
}
|
|
var comment = parseTrailingTagComments(start, getNodePos(), indent, indentText);
|
|
var nestedTypeLiteral = target !== 4 && parseNestedTypeLiteral(typeExpression, name, target, indent);
|
|
if (nestedTypeLiteral) {
|
|
typeExpression = nestedTypeLiteral;
|
|
isNameFirst = true;
|
|
}
|
|
var result = target === 1
|
|
? factory.createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment)
|
|
: factory.createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment);
|
|
return finishNode(result, start);
|
|
}
|
|
function parseNestedTypeLiteral(typeExpression, name, target, indent) {
|
|
if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) {
|
|
var pos = getNodePos();
|
|
var child = void 0;
|
|
var children = void 0;
|
|
while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
|
|
if (child.kind === 340 || child.kind === 347) {
|
|
children = ts.append(children, child);
|
|
}
|
|
}
|
|
if (children) {
|
|
var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 183), pos);
|
|
return finishNode(factory.createJSDocTypeExpression(literal), pos);
|
|
}
|
|
}
|
|
}
|
|
function parseReturnTag(start, tagName, indent, indentText) {
|
|
if (ts.some(tags, ts.isJSDocReturnTag)) {
|
|
parseErrorAt(tagName.pos, scanner.getTokenPos(), ts.Diagnostics._0_tag_already_specified, tagName.escapedText);
|
|
}
|
|
var typeExpression = tryParseTypeExpression();
|
|
return finishNode(factory.createJSDocReturnTag(tagName, typeExpression, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
|
|
}
|
|
function parseTypeTag(start, tagName, indent, indentText) {
|
|
if (ts.some(tags, ts.isJSDocTypeTag)) {
|
|
parseErrorAt(tagName.pos, scanner.getTokenPos(), ts.Diagnostics._0_tag_already_specified, tagName.escapedText);
|
|
}
|
|
var typeExpression = parseJSDocTypeExpression(true);
|
|
var comments = indent !== undefined && indentText !== undefined ? parseTrailingTagComments(start, getNodePos(), indent, indentText) : undefined;
|
|
return finishNode(factory.createJSDocTypeTag(tagName, typeExpression, comments), start);
|
|
}
|
|
function parseSeeTag(start, tagName, indent, indentText) {
|
|
var isMarkdownOrJSDocLink = token() === 22
|
|
|| lookAhead(function () { return nextTokenJSDoc() === 59 && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc()) && isJSDocLinkTag(scanner.getTokenValue()); });
|
|
var nameExpression = isMarkdownOrJSDocLink ? undefined : parseJSDocNameReference();
|
|
var comments = indent !== undefined && indentText !== undefined ? parseTrailingTagComments(start, getNodePos(), indent, indentText) : undefined;
|
|
return finishNode(factory.createJSDocSeeTag(tagName, nameExpression, comments), start);
|
|
}
|
|
function parseAuthorTag(start, tagName, indent, indentText) {
|
|
var commentStart = getNodePos();
|
|
var textOnly = parseAuthorNameAndEmail();
|
|
var commentEnd = scanner.getStartPos();
|
|
var comments = parseTrailingTagComments(start, commentEnd, indent, indentText);
|
|
if (!comments) {
|
|
commentEnd = scanner.getStartPos();
|
|
}
|
|
var allParts = typeof comments !== "string"
|
|
? createNodeArray(ts.concatenate([finishNode(textOnly, commentStart, commentEnd)], comments), commentStart)
|
|
: textOnly.text + comments;
|
|
return finishNode(factory.createJSDocAuthorTag(tagName, allParts), start);
|
|
}
|
|
function parseAuthorNameAndEmail() {
|
|
var comments = [];
|
|
var inEmail = false;
|
|
var token = scanner.getToken();
|
|
while (token !== 1 && token !== 4) {
|
|
if (token === 29) {
|
|
inEmail = true;
|
|
}
|
|
else if (token === 59 && !inEmail) {
|
|
break;
|
|
}
|
|
else if (token === 31 && inEmail) {
|
|
comments.push(scanner.getTokenText());
|
|
scanner.setTextPos(scanner.getTokenPos() + 1);
|
|
break;
|
|
}
|
|
comments.push(scanner.getTokenText());
|
|
token = nextTokenJSDoc();
|
|
}
|
|
return factory.createJSDocText(comments.join(""));
|
|
}
|
|
function parseImplementsTag(start, tagName, margin, indentText) {
|
|
var className = parseExpressionWithTypeArgumentsForAugments();
|
|
return finishNode(factory.createJSDocImplementsTag(tagName, className, parseTrailingTagComments(start, getNodePos(), margin, indentText)), start);
|
|
}
|
|
function parseAugmentsTag(start, tagName, margin, indentText) {
|
|
var className = parseExpressionWithTypeArgumentsForAugments();
|
|
return finishNode(factory.createJSDocAugmentsTag(tagName, className, parseTrailingTagComments(start, getNodePos(), margin, indentText)), start);
|
|
}
|
|
function parseExpressionWithTypeArgumentsForAugments() {
|
|
var usedBrace = parseOptional(18);
|
|
var pos = getNodePos();
|
|
var expression = parsePropertyAccessEntityNameExpression();
|
|
var typeArguments = tryParseTypeArguments();
|
|
var node = factory.createExpressionWithTypeArguments(expression, typeArguments);
|
|
var res = finishNode(node, pos);
|
|
if (usedBrace) {
|
|
parseExpected(19);
|
|
}
|
|
return res;
|
|
}
|
|
function parsePropertyAccessEntityNameExpression() {
|
|
var pos = getNodePos();
|
|
var node = parseJSDocIdentifierName();
|
|
while (parseOptional(24)) {
|
|
var name = parseJSDocIdentifierName();
|
|
node = finishNode(factory.createPropertyAccessExpression(node, name), pos);
|
|
}
|
|
return node;
|
|
}
|
|
function parseSimpleTag(start, createTag, tagName, margin, indentText) {
|
|
return finishNode(createTag(tagName, parseTrailingTagComments(start, getNodePos(), margin, indentText)), start);
|
|
}
|
|
function parseThisTag(start, tagName, margin, indentText) {
|
|
var typeExpression = parseJSDocTypeExpression(true);
|
|
skipWhitespace();
|
|
return finishNode(factory.createJSDocThisTag(tagName, typeExpression, parseTrailingTagComments(start, getNodePos(), margin, indentText)), start);
|
|
}
|
|
function parseEnumTag(start, tagName, margin, indentText) {
|
|
var typeExpression = parseJSDocTypeExpression(true);
|
|
skipWhitespace();
|
|
return finishNode(factory.createJSDocEnumTag(tagName, typeExpression, parseTrailingTagComments(start, getNodePos(), margin, indentText)), start);
|
|
}
|
|
function parseTypedefTag(start, tagName, indent, indentText) {
|
|
var _a;
|
|
var typeExpression = tryParseTypeExpression();
|
|
skipWhitespaceOrAsterisk();
|
|
var fullName = parseJSDocTypeNameWithNamespace();
|
|
skipWhitespace();
|
|
var comment = parseTagComments(indent);
|
|
var end;
|
|
if (!typeExpression || isObjectOrObjectArrayTypeReference(typeExpression.type)) {
|
|
var child = void 0;
|
|
var childTypeTag = void 0;
|
|
var jsDocPropertyTags = void 0;
|
|
var hasChildren = false;
|
|
while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
|
|
hasChildren = true;
|
|
if (child.kind === 343) {
|
|
if (childTypeTag) {
|
|
var lastError = parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
|
|
if (lastError) {
|
|
ts.addRelatedInfo(lastError, ts.createDetachedDiagnostic(fileName, 0, 0, ts.Diagnostics.The_tag_was_first_specified_here));
|
|
}
|
|
break;
|
|
}
|
|
else {
|
|
childTypeTag = child;
|
|
}
|
|
}
|
|
else {
|
|
jsDocPropertyTags = ts.append(jsDocPropertyTags, child);
|
|
}
|
|
}
|
|
if (hasChildren) {
|
|
var isArrayType = typeExpression && typeExpression.type.kind === 183;
|
|
var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
|
|
typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
|
|
childTypeTag.typeExpression :
|
|
finishNode(jsdocTypeLiteral, start);
|
|
end = typeExpression.end;
|
|
}
|
|
}
|
|
end = end || comment !== undefined ?
|
|
getNodePos() :
|
|
((_a = fullName !== null && fullName !== void 0 ? fullName : typeExpression) !== null && _a !== void 0 ? _a : tagName).end;
|
|
if (!comment) {
|
|
comment = parseTrailingTagComments(start, end, indent, indentText);
|
|
}
|
|
var typedefTag = factory.createJSDocTypedefTag(tagName, typeExpression, fullName, comment);
|
|
return finishNode(typedefTag, start, end);
|
|
}
|
|
function parseJSDocTypeNameWithNamespace(nested) {
|
|
var pos = scanner.getTokenPos();
|
|
if (!ts.tokenIsIdentifierOrKeyword(token())) {
|
|
return undefined;
|
|
}
|
|
var typeNameOrNamespaceName = parseJSDocIdentifierName();
|
|
if (parseOptional(24)) {
|
|
var body = parseJSDocTypeNameWithNamespace(true);
|
|
var jsDocNamespaceNode = factory.createModuleDeclaration(undefined, typeNameOrNamespaceName, body, nested ? 4 : undefined);
|
|
return finishNode(jsDocNamespaceNode, pos);
|
|
}
|
|
if (nested) {
|
|
typeNameOrNamespaceName.isInJSDocNamespace = true;
|
|
}
|
|
return typeNameOrNamespaceName;
|
|
}
|
|
function parseCallbackTagParameters(indent) {
|
|
var pos = getNodePos();
|
|
var child;
|
|
var parameters;
|
|
while (child = tryParse(function () { return parseChildParameterOrPropertyTag(4, indent); })) {
|
|
parameters = ts.append(parameters, child);
|
|
}
|
|
return createNodeArray(parameters || [], pos);
|
|
}
|
|
function parseCallbackTag(start, tagName, indent, indentText) {
|
|
var fullName = parseJSDocTypeNameWithNamespace();
|
|
skipWhitespace();
|
|
var comment = parseTagComments(indent);
|
|
var parameters = parseCallbackTagParameters(indent);
|
|
var returnTag = tryParse(function () {
|
|
if (parseOptionalJsdoc(59)) {
|
|
var tag = parseTag(indent);
|
|
if (tag && tag.kind === 341) {
|
|
return tag;
|
|
}
|
|
}
|
|
});
|
|
var typeExpression = finishNode(factory.createJSDocSignature(undefined, parameters, returnTag), start);
|
|
if (!comment) {
|
|
comment = parseTrailingTagComments(start, getNodePos(), indent, indentText);
|
|
}
|
|
var end = comment !== undefined ? getNodePos() : typeExpression.end;
|
|
return finishNode(factory.createJSDocCallbackTag(tagName, typeExpression, fullName, comment), start, end);
|
|
}
|
|
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(indent) {
|
|
return parseChildParameterOrPropertyTag(1, indent);
|
|
}
|
|
function parseChildParameterOrPropertyTag(target, indent, name) {
|
|
var canParseTag = true;
|
|
var seenAsterisk = false;
|
|
while (true) {
|
|
switch (nextTokenJSDoc()) {
|
|
case 59:
|
|
if (canParseTag) {
|
|
var child = tryParseChildTag(target, indent);
|
|
if (child && (child.kind === 340 || child.kind === 347) &&
|
|
target !== 4 &&
|
|
name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
|
|
return false;
|
|
}
|
|
return child;
|
|
}
|
|
seenAsterisk = false;
|
|
break;
|
|
case 4:
|
|
canParseTag = true;
|
|
seenAsterisk = false;
|
|
break;
|
|
case 41:
|
|
if (seenAsterisk) {
|
|
canParseTag = false;
|
|
}
|
|
seenAsterisk = true;
|
|
break;
|
|
case 79:
|
|
canParseTag = false;
|
|
break;
|
|
case 1:
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
function tryParseChildTag(target, indent) {
|
|
ts.Debug.assert(token() === 59);
|
|
var start = scanner.getStartPos();
|
|
nextTokenJSDoc();
|
|
var tagName = parseJSDocIdentifierName();
|
|
skipWhitespace();
|
|
var t;
|
|
switch (tagName.escapedText) {
|
|
case "type":
|
|
return target === 1 && parseTypeTag(start, 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;
|
|
}
|
|
return parseParameterOrPropertyTag(start, tagName, target, indent);
|
|
}
|
|
function parseTemplateTagTypeParameter() {
|
|
var typeParameterPos = getNodePos();
|
|
var isBracketed = parseOptionalJsdoc(22);
|
|
if (isBracketed) {
|
|
skipWhitespace();
|
|
}
|
|
var name = parseJSDocIdentifierName(ts.Diagnostics.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces);
|
|
var defaultType;
|
|
if (isBracketed) {
|
|
skipWhitespace();
|
|
parseExpected(63);
|
|
defaultType = doInsideOfContext(8388608, parseJSDocType);
|
|
parseExpected(23);
|
|
}
|
|
if (ts.nodeIsMissing(name)) {
|
|
return undefined;
|
|
}
|
|
return finishNode(factory.createTypeParameterDeclaration(undefined, name, undefined, defaultType), typeParameterPos);
|
|
}
|
|
function parseTemplateTagTypeParameters() {
|
|
var pos = getNodePos();
|
|
var typeParameters = [];
|
|
do {
|
|
skipWhitespace();
|
|
var node = parseTemplateTagTypeParameter();
|
|
if (node !== undefined) {
|
|
typeParameters.push(node);
|
|
}
|
|
skipWhitespaceOrAsterisk();
|
|
} while (parseOptionalJsdoc(27));
|
|
return createNodeArray(typeParameters, pos);
|
|
}
|
|
function parseTemplateTag(start, tagName, indent, indentText) {
|
|
var constraint = token() === 18 ? parseJSDocTypeExpression() : undefined;
|
|
var typeParameters = parseTemplateTagTypeParameters();
|
|
return finishNode(factory.createJSDocTemplateTag(tagName, constraint, typeParameters, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
|
|
}
|
|
function parseOptionalJsdoc(t) {
|
|
if (token() === t) {
|
|
nextTokenJSDoc();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function parseJSDocEntityName() {
|
|
var entity = parseJSDocIdentifierName();
|
|
if (parseOptional(22)) {
|
|
parseExpected(23);
|
|
}
|
|
while (parseOptional(24)) {
|
|
var name = parseJSDocIdentifierName();
|
|
if (parseOptional(22)) {
|
|
parseExpected(23);
|
|
}
|
|
entity = createQualifiedName(entity, name);
|
|
}
|
|
return entity;
|
|
}
|
|
function parseJSDocIdentifierName(message) {
|
|
if (!ts.tokenIsIdentifierOrKeyword(token())) {
|
|
return createMissingNode(79, !message, message || ts.Diagnostics.Identifier_expected);
|
|
}
|
|
identifierCount++;
|
|
var pos = scanner.getTokenPos();
|
|
var end = scanner.getTextPos();
|
|
var originalKeywordKind = token();
|
|
var text = internIdentifier(scanner.getTokenValue());
|
|
var result = finishNode(factory.createIdentifier(text, undefined, originalKeywordKind), pos, end);
|
|
nextTokenJSDoc();
|
|
return result;
|
|
}
|
|
}
|
|
})(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, sourceFile.setExternalModuleIndicator);
|
|
}
|
|
var incrementalSourceFile = sourceFile;
|
|
ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed);
|
|
incrementalSourceFile.hasBeenIncrementallyParsed = true;
|
|
Parser.fixupParentReferences(incrementalSourceFile);
|
|
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, sourceFile.setExternalModuleIndicator);
|
|
result.commentDirectives = getNewCommentDirectives(sourceFile.commentDirectives, result.commentDirectives, changeRange.span.start, ts.textSpanEnd(changeRange.span), delta, oldText, newText, aggressiveChecks);
|
|
result.impliedNodeFormat = sourceFile.impliedNodeFormat;
|
|
return result;
|
|
}
|
|
IncrementalParser.updateSourceFile = updateSourceFile;
|
|
function getNewCommentDirectives(oldDirectives, newDirectives, changeStart, changeRangeOldEnd, delta, oldText, newText, aggressiveChecks) {
|
|
if (!oldDirectives)
|
|
return newDirectives;
|
|
var commentDirectives;
|
|
var addedNewlyScannedDirectives = false;
|
|
for (var _i = 0, oldDirectives_1 = oldDirectives; _i < oldDirectives_1.length; _i++) {
|
|
var directive = oldDirectives_1[_i];
|
|
var range = directive.range, type = directive.type;
|
|
if (range.end < changeStart) {
|
|
commentDirectives = ts.append(commentDirectives, directive);
|
|
}
|
|
else if (range.pos > changeRangeOldEnd) {
|
|
addNewlyScannedDirectives();
|
|
var updatedDirective = {
|
|
range: { pos: range.pos + delta, end: range.end + delta },
|
|
type: type
|
|
};
|
|
commentDirectives = ts.append(commentDirectives, updatedDirective);
|
|
if (aggressiveChecks) {
|
|
ts.Debug.assert(oldText.substring(range.pos, range.end) === newText.substring(updatedDirective.range.pos, updatedDirective.range.end));
|
|
}
|
|
}
|
|
}
|
|
addNewlyScannedDirectives();
|
|
return commentDirectives;
|
|
function addNewlyScannedDirectives() {
|
|
if (addedNewlyScannedDirectives)
|
|
return;
|
|
addedNewlyScannedDirectives = true;
|
|
if (!commentDirectives) {
|
|
commentDirectives = newDirectives;
|
|
}
|
|
else if (newDirectives) {
|
|
commentDirectives.push.apply(commentDirectives, newDirectives);
|
|
}
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
ts.setTextRangePosEnd(node, 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;
|
|
ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
|
|
for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
|
|
var node = array_9[_i];
|
|
visitNode(node);
|
|
}
|
|
}
|
|
}
|
|
function shouldCheckNode(node) {
|
|
switch (node.kind) {
|
|
case 10:
|
|
case 8:
|
|
case 79:
|
|
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);
|
|
var pos = Math.min(element.pos, changeRangeNewEnd);
|
|
var end = element.end >= changeRangeOldEnd ?
|
|
element.end + delta :
|
|
Math.min(element.end, changeRangeNewEnd);
|
|
ts.Debug.assert(pos <= end);
|
|
if (element.parent) {
|
|
ts.Debug.assertGreaterThanOrEqual(pos, element.parent.pos);
|
|
ts.Debug.assertLessThanOrEqual(end, element.parent.end);
|
|
}
|
|
ts.setTextRangePosEnd(element, pos, end);
|
|
}
|
|
function checkNodePositions(node, aggressiveChecks) {
|
|
if (aggressiveChecks) {
|
|
var pos_3 = node.pos;
|
|
var visitNode_1 = function (child) {
|
|
ts.Debug.assert(child.pos >= pos_3);
|
|
pos_3 = 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_3 <= 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_10 = array; _i < array_10.length; _i++) {
|
|
var node = array_10[_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;
|
|
}
|
|
}
|
|
}
|
|
IncrementalParser.createSyntaxCursor = createSyntaxCursor;
|
|
})(IncrementalParser || (IncrementalParser = {}));
|
|
function isDeclarationFileName(fileName) {
|
|
return ts.fileExtensionIsOneOf(fileName, ts.supportedDeclarationExtensions);
|
|
}
|
|
ts.isDeclarationFileName = isDeclarationFileName;
|
|
function parseResolutionMode(mode, pos, end, reportDiagnostic) {
|
|
if (!mode) {
|
|
return undefined;
|
|
}
|
|
if (mode === "import") {
|
|
return ts.ModuleKind.ESNext;
|
|
}
|
|
if (mode === "require") {
|
|
return ts.ModuleKind.CommonJS;
|
|
}
|
|
reportDiagnostic(pos, end - pos, ts.Diagnostics.resolution_mode_should_be_either_require_or_import);
|
|
return undefined;
|
|
}
|
|
function processCommentPragmas(context, sourceText) {
|
|
var pragmas = [];
|
|
for (var _i = 0, _a = ts.getLeadingCommentRanges(sourceText, 0) || ts.emptyArray; _i < _a.length; _i++) {
|
|
var range = _a[_i];
|
|
var comment = sourceText.substring(range.pos, range.end);
|
|
extractPragmas(pragmas, range, comment);
|
|
}
|
|
context.pragmas = new ts.Map();
|
|
for (var _b = 0, pragmas_1 = pragmas; _b < pragmas_1.length; _b++) {
|
|
var pragma = pragmas_1[_b];
|
|
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) {
|
|
var _a = arg.arguments, types = _a.types, lib = _a.lib, path = _a.path, res = _a["resolution-mode"];
|
|
if (arg.arguments["no-default-lib"]) {
|
|
context.hasNoDefaultLib = true;
|
|
}
|
|
else if (types) {
|
|
var parsed = parseResolutionMode(res, types.pos, types.end, reportDiagnostic);
|
|
typeReferenceDirectives_1.push(__assign({ pos: types.pos, end: types.end, fileName: types.value }, (parsed ? { resolutionMode: parsed } : {})));
|
|
}
|
|
else if (lib) {
|
|
libReferenceDirectives_1.push({ pos: lib.pos, end: lib.end, fileName: lib.value });
|
|
}
|
|
else if (path) {
|
|
referencedFiles_1.push({ pos: path.pos, end: path.end, fileName: 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":
|
|
case "jsxfrag":
|
|
case "jsximportsource":
|
|
case "jsxruntime":
|
|
return;
|
|
default: ts.Debug.fail("Unhandled pragma kind");
|
|
}
|
|
});
|
|
}
|
|
ts.processPragmasIntoFields = processPragmasIntoFields;
|
|
var namedArgRegExCache = new ts.Map();
|
|
function getNamedArgRegEx(name) {
|
|
if (namedArgRegExCache.has(name)) {
|
|
return namedArgRegExCache.get(name);
|
|
}
|
|
var result = new RegExp("(\\s".concat(name, "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))"), "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) {
|
|
var value = matchResult[2] || matchResult[3];
|
|
if (arg.captureSpan) {
|
|
var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
|
|
argument[arg.name] = {
|
|
value: value,
|
|
pos: startPos,
|
|
end: startPos + value.length
|
|
};
|
|
}
|
|
else {
|
|
argument[arg.name] = value;
|
|
}
|
|
}
|
|
}
|
|
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+.*)?$/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 = ts.trimString(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 === 79) {
|
|
return lhs.escapedText === rhs.escapedText;
|
|
}
|
|
if (lhs.kind === 108) {
|
|
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",
|
|
defaultValueDescription: false,
|
|
};
|
|
var jsxOptionMap = new ts.Map(ts.getEntries({
|
|
"preserve": 1,
|
|
"react-native": 3,
|
|
"react": 2,
|
|
"react-jsx": 4,
|
|
"react-jsxdev": 5,
|
|
}));
|
|
ts.inverseJsxOptionMap = new ts.Map(ts.arrayFrom(ts.mapIterator(jsxOptionMap.entries(), function (_a) {
|
|
var key = _a[0], value = _a[1];
|
|
return ["" + value, key];
|
|
})));
|
|
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"],
|
|
["es2019", "lib.es2019.d.ts"],
|
|
["es2020", "lib.es2020.d.ts"],
|
|
["es2021", "lib.es2021.d.ts"],
|
|
["es2022", "lib.es2022.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"],
|
|
["webworker.iterable", "lib.webworker.iterable.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.asyncgenerator", "lib.es2018.asyncgenerator.d.ts"],
|
|
["es2018.asynciterable", "lib.es2018.asynciterable.d.ts"],
|
|
["es2018.intl", "lib.es2018.intl.d.ts"],
|
|
["es2018.promise", "lib.es2018.promise.d.ts"],
|
|
["es2018.regexp", "lib.es2018.regexp.d.ts"],
|
|
["es2019.array", "lib.es2019.array.d.ts"],
|
|
["es2019.object", "lib.es2019.object.d.ts"],
|
|
["es2019.string", "lib.es2019.string.d.ts"],
|
|
["es2019.symbol", "lib.es2019.symbol.d.ts"],
|
|
["es2020.bigint", "lib.es2020.bigint.d.ts"],
|
|
["es2020.date", "lib.es2020.date.d.ts"],
|
|
["es2020.promise", "lib.es2020.promise.d.ts"],
|
|
["es2020.sharedmemory", "lib.es2020.sharedmemory.d.ts"],
|
|
["es2020.string", "lib.es2020.string.d.ts"],
|
|
["es2020.symbol.wellknown", "lib.es2020.symbol.wellknown.d.ts"],
|
|
["es2020.intl", "lib.es2020.intl.d.ts"],
|
|
["es2020.number", "lib.es2020.number.d.ts"],
|
|
["es2021.promise", "lib.es2021.promise.d.ts"],
|
|
["es2021.string", "lib.es2021.string.d.ts"],
|
|
["es2021.weakref", "lib.es2021.weakref.d.ts"],
|
|
["es2021.intl", "lib.es2021.intl.d.ts"],
|
|
["es2022.array", "lib.es2022.array.d.ts"],
|
|
["es2022.error", "lib.es2022.error.d.ts"],
|
|
["es2022.intl", "lib.es2022.intl.d.ts"],
|
|
["es2022.object", "lib.es2022.object.d.ts"],
|
|
["es2022.sharedmemory", "lib.es2022.sharedmemory.d.ts"],
|
|
["es2022.string", "lib.es2022.string.d.ts"],
|
|
["esnext.array", "lib.es2022.array.d.ts"],
|
|
["esnext.symbol", "lib.es2019.symbol.d.ts"],
|
|
["esnext.asynciterable", "lib.es2018.asynciterable.d.ts"],
|
|
["esnext.intl", "lib.esnext.intl.d.ts"],
|
|
["esnext.bigint", "lib.es2020.bigint.d.ts"],
|
|
["esnext.string", "lib.es2022.string.d.ts"],
|
|
["esnext.promise", "lib.es2021.promise.d.ts"],
|
|
["esnext.weakref", "lib.es2021.weakref.d.ts"]
|
|
];
|
|
ts.libs = libEntries.map(function (entry) { return entry[0]; });
|
|
ts.libMap = new ts.Map(libEntries);
|
|
ts.optionsForWatch = [
|
|
{
|
|
name: "watchFile",
|
|
type: new ts.Map(ts.getEntries({
|
|
fixedpollinginterval: ts.WatchFileKind.FixedPollingInterval,
|
|
prioritypollinginterval: ts.WatchFileKind.PriorityPollingInterval,
|
|
dynamicprioritypolling: ts.WatchFileKind.DynamicPriorityPolling,
|
|
fixedchunksizepolling: ts.WatchFileKind.FixedChunkSizePolling,
|
|
usefsevents: ts.WatchFileKind.UseFsEvents,
|
|
usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
|
|
})),
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
|
|
defaultValueDescription: ts.WatchFileKind.UseFsEvents,
|
|
},
|
|
{
|
|
name: "watchDirectory",
|
|
type: new ts.Map(ts.getEntries({
|
|
usefsevents: ts.WatchDirectoryKind.UseFsEvents,
|
|
fixedpollinginterval: ts.WatchDirectoryKind.FixedPollingInterval,
|
|
dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
|
|
fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
|
|
})),
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
|
|
defaultValueDescription: ts.WatchDirectoryKind.UseFsEvents,
|
|
},
|
|
{
|
|
name: "fallbackPolling",
|
|
type: new ts.Map(ts.getEntries({
|
|
fixedinterval: ts.PollingWatchKind.FixedInterval,
|
|
priorityinterval: ts.PollingWatchKind.PriorityInterval,
|
|
dynamicpriority: ts.PollingWatchKind.DynamicPriority,
|
|
fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
|
|
})),
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
|
|
defaultValueDescription: ts.PollingWatchKind.PriorityInterval,
|
|
},
|
|
{
|
|
name: "synchronousWatchDirectory",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "excludeDirectories",
|
|
type: "list",
|
|
element: {
|
|
name: "excludeDirectory",
|
|
type: "string",
|
|
isFilePath: true,
|
|
extraValidation: specToDiagnostic
|
|
},
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
|
|
},
|
|
{
|
|
name: "excludeFiles",
|
|
type: "list",
|
|
element: {
|
|
name: "excludeFile",
|
|
type: "string",
|
|
isFilePath: true,
|
|
extraValidation: specToDiagnostic
|
|
},
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
|
|
},
|
|
];
|
|
ts.commonOptionsWithBuild = [
|
|
{
|
|
name: "help",
|
|
shortName: "h",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Print_this_message,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "help",
|
|
shortName: "?",
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "watch",
|
|
shortName: "w",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
isCommandLineOnly: true,
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Watch_input_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "preserveWatchOutput",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: false,
|
|
category: ts.Diagnostics.Output_Formatting,
|
|
description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "listFiles",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "explainFiles",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "listEmittedFiles",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "pretty",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Output_Formatting,
|
|
description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
|
|
defaultValueDescription: true,
|
|
},
|
|
{
|
|
name: "traceResolution",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "diagnostics",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Output_compiler_performance_information_after_building,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "extendedDiagnostics",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "generateCpuProfile",
|
|
type: "string",
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
|
|
defaultValueDescription: "profile.cpuprofile"
|
|
},
|
|
{
|
|
name: "generateTrace",
|
|
type: "string",
|
|
isFilePath: true,
|
|
isCommandLineOnly: true,
|
|
paramType: ts.Diagnostics.DIRECTORY,
|
|
category: ts.Diagnostics.Compiler_Diagnostics,
|
|
description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
|
|
},
|
|
{
|
|
name: "incremental",
|
|
shortName: "i",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Projects,
|
|
description: ts.Diagnostics.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
|
|
},
|
|
{
|
|
name: "assumeChangesOnlyAffectDirectDependencies",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Watch_and_Build_Modes,
|
|
description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "locale",
|
|
type: "string",
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
isCommandLineOnly: true,
|
|
description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
|
|
defaultValueDescription: ts.Diagnostics.Platform_specific
|
|
},
|
|
];
|
|
ts.targetOptionDeclaration = {
|
|
name: "target",
|
|
shortName: "t",
|
|
type: new ts.Map(ts.getEntries({
|
|
es3: 0,
|
|
es5: 1,
|
|
es6: 2,
|
|
es2015: 2,
|
|
es2016: 3,
|
|
es2017: 4,
|
|
es2018: 5,
|
|
es2019: 6,
|
|
es2020: 7,
|
|
es2021: 8,
|
|
es2022: 9,
|
|
esnext: 99,
|
|
})),
|
|
affectsSourceFile: true,
|
|
affectsModuleResolution: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
paramType: ts.Diagnostics.VERSION,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
|
|
defaultValueDescription: 0,
|
|
};
|
|
ts.moduleOptionDeclaration = {
|
|
name: "module",
|
|
shortName: "m",
|
|
type: new ts.Map(ts.getEntries({
|
|
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,
|
|
es2020: ts.ModuleKind.ES2020,
|
|
es2022: ts.ModuleKind.ES2022,
|
|
esnext: ts.ModuleKind.ESNext,
|
|
node16: ts.ModuleKind.Node16,
|
|
nodenext: ts.ModuleKind.NodeNext,
|
|
})),
|
|
affectsModuleResolution: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
paramType: ts.Diagnostics.KIND,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_what_module_code_is_generated,
|
|
defaultValueDescription: undefined,
|
|
};
|
|
var commandOptionsWithoutBuild = [
|
|
{
|
|
name: "all",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Show_all_compiler_options,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "version",
|
|
shortName: "v",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Print_the_compiler_s_version,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
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,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
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,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "showConfig",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
isCommandLineOnly: true,
|
|
description: ts.Diagnostics.Print_the_final_configuration_instead_of_building,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "listFilesOnly",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
isCommandLineOnly: true,
|
|
description: ts.Diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing,
|
|
defaultValueDescription: false,
|
|
},
|
|
ts.targetOptionDeclaration,
|
|
ts.moduleOptionDeclaration,
|
|
{
|
|
name: "lib",
|
|
type: "list",
|
|
element: {
|
|
name: "lib",
|
|
type: ts.libMap,
|
|
defaultValueDescription: undefined,
|
|
},
|
|
affectsProgramStructure: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
|
|
transpileOptionValue: undefined
|
|
},
|
|
{
|
|
name: "allowJs",
|
|
type: "boolean",
|
|
affectsModuleResolution: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.JavaScript_Support,
|
|
description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "checkJs",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.JavaScript_Support,
|
|
description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "jsx",
|
|
type: jsxOptionMap,
|
|
affectsSourceFile: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsModuleResolution: true,
|
|
paramType: ts.Diagnostics.KIND,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
|
|
defaultValueDescription: undefined,
|
|
},
|
|
{
|
|
name: "declaration",
|
|
shortName: "d",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
transpileOptionValue: undefined,
|
|
description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
|
|
},
|
|
{
|
|
name: "declarationMap",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: false,
|
|
description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
|
|
},
|
|
{
|
|
name: "emitDeclarationOnly",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "sourceMap",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
defaultValueDescription: false,
|
|
description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
|
|
},
|
|
{
|
|
name: "outFile",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsDeclarationPath: true,
|
|
affectsBundleEmitBuildInfo: true,
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.FILE,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
|
|
transpileOptionValue: undefined,
|
|
},
|
|
{
|
|
name: "outDir",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsDeclarationPath: true,
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.DIRECTORY,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
|
|
},
|
|
{
|
|
name: "rootDir",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsDeclarationPath: true,
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.LOCATION,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
|
|
defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
|
|
},
|
|
{
|
|
name: "composite",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsBundleEmitBuildInfo: true,
|
|
isTSConfigOnly: true,
|
|
category: ts.Diagnostics.Projects,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: false,
|
|
description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
|
|
},
|
|
{
|
|
name: "tsBuildInfoFile",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsBundleEmitBuildInfo: true,
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.FILE,
|
|
category: ts.Diagnostics.Projects,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: ".tsbuildinfo",
|
|
description: ts.Diagnostics.Specify_the_path_to_tsbuildinfo_incremental_compilation_file,
|
|
},
|
|
{
|
|
name: "removeComments",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
defaultValueDescription: false,
|
|
description: ts.Diagnostics.Disable_emitting_comments,
|
|
},
|
|
{
|
|
name: "noEmit",
|
|
type: "boolean",
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "importHelpers",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "importsNotUsedAsValues",
|
|
type: new ts.Map(ts.getEntries({
|
|
remove: 0,
|
|
preserve: 1,
|
|
error: 2,
|
|
})),
|
|
affectsEmit: true,
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types,
|
|
defaultValueDescription: 0,
|
|
},
|
|
{
|
|
name: "downlevelIteration",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "isolatedModules",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Interop_Constraints,
|
|
description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
|
|
transpileOptionValue: true,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "strict",
|
|
type: "boolean",
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_all_strict_type_checking_options,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noImplicitAny",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "strictNullChecks",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "strictFunctionTypes",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "strictBindCallApply",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "strictPropertyInitialization",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "noImplicitThis",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "useUnknownInCatchVariables",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "alwaysStrict",
|
|
type: "boolean",
|
|
affectsSourceFile: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
strictFlag: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
|
|
defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
|
|
},
|
|
{
|
|
name: "noUnusedLocals",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_error_reporting_when_local_variables_aren_t_read,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noUnusedParameters",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "exactOptionalPropertyTypes",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noImplicitReturns",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noFallthroughCasesInSwitch",
|
|
type: "boolean",
|
|
affectsBindDiagnostics: true,
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noUncheckedIndexedAccess",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Add_undefined_to_a_type_when_accessed_using_an_index,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noImplicitOverride",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noPropertyAccessFromIndexSignature",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: false,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "moduleResolution",
|
|
type: new ts.Map(ts.getEntries({
|
|
node: ts.ModuleResolutionKind.NodeJs,
|
|
classic: ts.ModuleResolutionKind.Classic,
|
|
node16: ts.ModuleResolutionKind.Node16,
|
|
nodenext: ts.ModuleResolutionKind.NodeNext,
|
|
})),
|
|
affectsModuleResolution: true,
|
|
paramType: ts.Diagnostics.STRATEGY,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
|
|
defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
|
|
},
|
|
{
|
|
name: "baseUrl",
|
|
type: "string",
|
|
affectsModuleResolution: true,
|
|
isFilePath: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
|
|
},
|
|
{
|
|
name: "paths",
|
|
type: "object",
|
|
affectsModuleResolution: true,
|
|
isTSConfigOnly: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
|
|
transpileOptionValue: undefined
|
|
},
|
|
{
|
|
name: "rootDirs",
|
|
type: "list",
|
|
isTSConfigOnly: true,
|
|
element: {
|
|
name: "rootDirs",
|
|
type: "string",
|
|
isFilePath: true
|
|
},
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
|
|
transpileOptionValue: undefined,
|
|
defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
|
|
},
|
|
{
|
|
name: "typeRoots",
|
|
type: "list",
|
|
element: {
|
|
name: "typeRoots",
|
|
type: "string",
|
|
isFilePath: true
|
|
},
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
|
|
},
|
|
{
|
|
name: "types",
|
|
type: "list",
|
|
element: {
|
|
name: "types",
|
|
type: "string"
|
|
},
|
|
affectsProgramStructure: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
|
|
transpileOptionValue: undefined
|
|
},
|
|
{
|
|
name: "allowSyntheticDefaultImports",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Interop_Constraints,
|
|
description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
|
|
defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
|
|
},
|
|
{
|
|
name: "esModuleInterop",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
showInSimplifiedHelpView: true,
|
|
category: ts.Diagnostics.Interop_Constraints,
|
|
description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "preserveSymlinks",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Interop_Constraints,
|
|
description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "allowUmdGlobalAccess",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "moduleSuffixes",
|
|
type: "list",
|
|
element: {
|
|
name: "suffix",
|
|
type: "string",
|
|
},
|
|
listPreserveFalsyValues: true,
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.List_of_file_name_suffixes_to_search_when_resolving_a_module,
|
|
},
|
|
{
|
|
name: "sourceRoot",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
paramType: ts.Diagnostics.LOCATION,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
|
|
},
|
|
{
|
|
name: "mapRoot",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
paramType: ts.Diagnostics.LOCATION,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
|
|
},
|
|
{
|
|
name: "inlineSourceMap",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "inlineSources",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "experimentalDecorators",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "emitDecoratorMetadata",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "jsxFactory",
|
|
type: "string",
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
|
|
defaultValueDescription: "`React.createElement`"
|
|
},
|
|
{
|
|
name: "jsxFragmentFactory",
|
|
type: "string",
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment,
|
|
defaultValueDescription: "React.Fragment",
|
|
},
|
|
{
|
|
name: "jsxImportSource",
|
|
type: "string",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
|
|
defaultValueDescription: "react"
|
|
},
|
|
{
|
|
name: "resolveJsonModule",
|
|
type: "boolean",
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Enable_importing_json_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "out",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsDeclarationPath: true,
|
|
affectsBundleEmitBuildInfo: true,
|
|
isFilePath: false,
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
paramType: ts.Diagnostics.FILE,
|
|
transpileOptionValue: undefined,
|
|
description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
|
|
},
|
|
{
|
|
name: "reactNamespace",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
|
|
defaultValueDescription: "`React`",
|
|
},
|
|
{
|
|
name: "skipDefaultLibCheck",
|
|
type: "boolean",
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Completeness,
|
|
description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "charset",
|
|
type: "string",
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
|
|
defaultValueDescription: "utf8"
|
|
},
|
|
{
|
|
name: "emitBOM",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "newLine",
|
|
type: new ts.Map(ts.getEntries({
|
|
crlf: 0,
|
|
lf: 1
|
|
})),
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
paramType: ts.Diagnostics.NEWLINE,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
|
|
defaultValueDescription: ts.Diagnostics.Platform_specific
|
|
},
|
|
{
|
|
name: "noErrorTruncation",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Output_Formatting,
|
|
description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noLib",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
affectsProgramStructure: true,
|
|
description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
|
|
transpileOptionValue: true,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noResolve",
|
|
type: "boolean",
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Modules,
|
|
description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
|
|
transpileOptionValue: true,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "stripInternal",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "disableSizeLimit",
|
|
type: "boolean",
|
|
affectsProgramStructure: true,
|
|
category: ts.Diagnostics.Editor_Support,
|
|
description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "disableSourceOfProjectReferenceRedirect",
|
|
type: "boolean",
|
|
isTSConfigOnly: true,
|
|
category: ts.Diagnostics.Projects,
|
|
description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "disableSolutionSearching",
|
|
type: "boolean",
|
|
isTSConfigOnly: true,
|
|
category: ts.Diagnostics.Projects,
|
|
description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "disableReferencedProjectLoad",
|
|
type: "boolean",
|
|
isTSConfigOnly: true,
|
|
category: ts.Diagnostics.Projects,
|
|
description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noImplicitUseStrict",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noEmitHelpers",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "noEmitOnError",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
transpileOptionValue: undefined,
|
|
description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "preserveConstEnums",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "declarationDir",
|
|
type: "string",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
affectsDeclarationPath: true,
|
|
isFilePath: true,
|
|
paramType: ts.Diagnostics.DIRECTORY,
|
|
category: ts.Diagnostics.Emit,
|
|
transpileOptionValue: undefined,
|
|
description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
|
|
},
|
|
{
|
|
name: "skipLibCheck",
|
|
type: "boolean",
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Completeness,
|
|
description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "allowUnusedLabels",
|
|
type: "boolean",
|
|
affectsBindDiagnostics: true,
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
|
|
defaultValueDescription: undefined,
|
|
},
|
|
{
|
|
name: "allowUnreachableCode",
|
|
type: "boolean",
|
|
affectsBindDiagnostics: true,
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Type_Checking,
|
|
description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
|
|
defaultValueDescription: undefined,
|
|
},
|
|
{
|
|
name: "suppressExcessPropertyErrors",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "suppressImplicitAnyIndexErrors",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "forceConsistentCasingInFileNames",
|
|
type: "boolean",
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.Interop_Constraints,
|
|
description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "maxNodeModuleJsDepth",
|
|
type: "number",
|
|
affectsModuleResolution: true,
|
|
category: ts.Diagnostics.JavaScript_Support,
|
|
description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
|
|
defaultValueDescription: 0,
|
|
},
|
|
{
|
|
name: "noStrictGenericChecks",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "useDefineForClassFields",
|
|
type: "boolean",
|
|
affectsSemanticDiagnostics: true,
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
|
|
defaultValueDescription: ts.Diagnostics.true_for_ES2022_and_above_including_ESNext
|
|
},
|
|
{
|
|
name: "preserveValueImports",
|
|
type: "boolean",
|
|
affectsEmit: true,
|
|
affectsMultiFileEmitBuildInfo: true,
|
|
category: ts.Diagnostics.Emit,
|
|
description: ts.Diagnostics.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "keyofStringsOnly",
|
|
type: "boolean",
|
|
category: ts.Diagnostics.Backwards_Compatibility,
|
|
description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "plugins",
|
|
type: "list",
|
|
isTSConfigOnly: true,
|
|
element: {
|
|
name: "plugin",
|
|
type: "object"
|
|
},
|
|
description: ts.Diagnostics.Specify_a_list_of_language_service_plugins_to_include,
|
|
category: ts.Diagnostics.Editor_Support,
|
|
},
|
|
{
|
|
name: "moduleDetection",
|
|
type: new ts.Map(ts.getEntries({
|
|
auto: ts.ModuleDetectionKind.Auto,
|
|
legacy: ts.ModuleDetectionKind.Legacy,
|
|
force: ts.ModuleDetectionKind.Force,
|
|
})),
|
|
affectsModuleResolution: true,
|
|
description: ts.Diagnostics.Control_what_method_is_used_to_detect_module_format_JS_files,
|
|
category: ts.Diagnostics.Language_and_Environment,
|
|
defaultValueDescription: ts.Diagnostics.auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules,
|
|
}
|
|
];
|
|
ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
|
|
ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
|
|
ts.affectsEmitOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsEmit; });
|
|
ts.affectsDeclarationPathOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsDeclarationPath; });
|
|
ts.moduleResolutionOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsModuleResolution; });
|
|
ts.sourceFileAffectingCompilerOptions = ts.optionDeclarations.filter(function (option) {
|
|
return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
|
|
});
|
|
ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
|
|
ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
|
|
return ts.hasProperty(option, "transpileOptionValue");
|
|
});
|
|
ts.optionsForBuild = [
|
|
{
|
|
name: "verbose",
|
|
shortName: "v",
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Enable_verbose_logging,
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
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",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
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",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "clean",
|
|
category: ts.Diagnostics.Command_line_Options,
|
|
description: ts.Diagnostics.Delete_the_outputs_of_all_projects,
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
}
|
|
];
|
|
ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
|
|
ts.typeAcquisitionDeclarations = [
|
|
{
|
|
name: "enableAutoDiscovery",
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "enable",
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
},
|
|
{
|
|
name: "include",
|
|
type: "list",
|
|
element: {
|
|
name: "include",
|
|
type: "string"
|
|
}
|
|
},
|
|
{
|
|
name: "exclude",
|
|
type: "list",
|
|
element: {
|
|
name: "exclude",
|
|
type: "string"
|
|
}
|
|
},
|
|
{
|
|
name: "disableFilenameBasedTypeAcquisition",
|
|
type: "boolean",
|
|
defaultValueDescription: false,
|
|
},
|
|
];
|
|
function createOptionNameMap(optionDeclarations) {
|
|
var optionsNameMap = new ts.Map();
|
|
var shortOptionNames = new ts.Map();
|
|
ts.forEach(optionDeclarations, function (option) {
|
|
optionsNameMap.set(option.name.toLowerCase(), option);
|
|
if (option.shortName) {
|
|
shortOptionNames.set(option.shortName, option.name);
|
|
}
|
|
});
|
|
return { optionsNameMap: optionsNameMap, shortOptionNames: shortOptionNames };
|
|
}
|
|
ts.createOptionNameMap = createOptionNameMap;
|
|
var optionsNameMapCache;
|
|
function getOptionsNameMap() {
|
|
return optionsNameMapCache || (optionsNameMapCache = createOptionNameMap(ts.optionDeclarations));
|
|
}
|
|
ts.getOptionsNameMap = getOptionsNameMap;
|
|
var compilerOptionsAlternateMode = {
|
|
diagnostic: ts.Diagnostics.Compiler_option_0_may_only_be_used_with_build,
|
|
getOptionsNameMap: getBuildOptionsNameMap
|
|
};
|
|
ts.defaultInitCompilerOptions = {
|
|
module: ts.ModuleKind.CommonJS,
|
|
target: 3,
|
|
strict: true,
|
|
esModuleInterop: true,
|
|
forceConsistentCasingInFileNames: true,
|
|
skipLibCheck: true
|
|
};
|
|
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 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 "'".concat(key, "'"); }).join(", ");
|
|
return createDiagnostic(ts.Diagnostics.Argument_for_0_option_must_be_Colon_1, "--".concat(opt.name), namesOfType);
|
|
}
|
|
function parseCustomTypeOption(opt, value, errors) {
|
|
return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
|
|
}
|
|
ts.parseCustomTypeOption = parseCustomTypeOption;
|
|
function parseListTypeOption(opt, value, errors) {
|
|
if (value === void 0) { value = ""; }
|
|
value = ts.trimString(value);
|
|
if (ts.startsWith(value, "-")) {
|
|
return undefined;
|
|
}
|
|
if (value === "") {
|
|
return [];
|
|
}
|
|
var values = value.split(",");
|
|
switch (opt.element.type) {
|
|
case "number":
|
|
return ts.mapDefined(values, function (v) { return validateJsonOptionValue(opt.element, parseInt(v), errors); });
|
|
case "string":
|
|
return ts.mapDefined(values, function (v) { return validateJsonOptionValue(opt.element, v || "", errors); });
|
|
default:
|
|
return ts.mapDefined(values, function (v) { return parseCustomTypeOption(opt.element, v, errors); });
|
|
}
|
|
}
|
|
ts.parseListTypeOption = parseListTypeOption;
|
|
function getOptionName(option) {
|
|
return option.name;
|
|
}
|
|
function createUnknownOptionError(unknownOption, diagnostics, createDiagnostics, unknownOptionErrorText) {
|
|
var _a;
|
|
if ((_a = diagnostics.alternateMode) === null || _a === void 0 ? void 0 : _a.getOptionsNameMap().optionsNameMap.has(unknownOption.toLowerCase())) {
|
|
return createDiagnostics(diagnostics.alternateMode.diagnostic, unknownOption);
|
|
}
|
|
var possibleOption = ts.getSpellingSuggestion(unknownOption, diagnostics.optionDeclarations, getOptionName);
|
|
return possibleOption ?
|
|
createDiagnostics(diagnostics.unknownDidYouMeanDiagnostic, unknownOptionErrorText || unknownOption, possibleOption.name) :
|
|
createDiagnostics(diagnostics.unknownOptionDiagnostic, unknownOptionErrorText || unknownOption);
|
|
}
|
|
function parseCommandLineWorker(diagnostics, commandLine, readFile) {
|
|
var options = {};
|
|
var watchOptions;
|
|
var fileNames = [];
|
|
var errors = [];
|
|
parseStrings(commandLine);
|
|
return {
|
|
options: options,
|
|
watchOptions: watchOptions,
|
|
fileNames: fileNames,
|
|
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 inputOptionName = s.slice(s.charCodeAt(1) === 45 ? 2 : 1);
|
|
var opt = getOptionDeclarationFromName(diagnostics.getOptionsNameMap, inputOptionName, true);
|
|
if (opt) {
|
|
i = parseOptionValue(args, i, diagnostics, opt, options, errors);
|
|
}
|
|
else {
|
|
var watchOpt = getOptionDeclarationFromName(watchOptionsDidYouMeanDiagnostics.getOptionsNameMap, inputOptionName, true);
|
|
if (watchOpt) {
|
|
i = parseOptionValue(args, i, watchOptionsDidYouMeanDiagnostics, watchOpt, watchOptions || (watchOptions = {}), errors);
|
|
}
|
|
else {
|
|
errors.push(createUnknownOptionError(inputOptionName, diagnostics, ts.createCompilerDiagnostic, s));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
fileNames.push(s);
|
|
}
|
|
}
|
|
}
|
|
function parseResponseFile(fileName) {
|
|
var text = tryReadFile(fileName, readFile || (function (fileName) { return ts.sys.readFile(fileName); }));
|
|
if (!ts.isString(text)) {
|
|
errors.push(text);
|
|
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.parseCommandLineWorker = parseCommandLineWorker;
|
|
function parseOptionValue(args, i, diagnostics, opt, options, errors) {
|
|
if (opt.isTSConfigOnly) {
|
|
var optValue = args[i];
|
|
if (optValue === "null") {
|
|
options[opt.name] = undefined;
|
|
i++;
|
|
}
|
|
else if (opt.type === "boolean") {
|
|
if (optValue === "false") {
|
|
options[opt.name] = validateJsonOptionValue(opt, false, errors);
|
|
i++;
|
|
}
|
|
else {
|
|
if (optValue === "true")
|
|
i++;
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line, opt.name));
|
|
}
|
|
}
|
|
else {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line, opt.name));
|
|
if (optValue && !ts.startsWith(optValue, "-"))
|
|
i++;
|
|
}
|
|
}
|
|
else {
|
|
if (!args[i] && opt.type !== "boolean") {
|
|
errors.push(ts.createCompilerDiagnostic(diagnostics.optionTypeMismatchDiagnostic, opt.name, getCompilerOptionValueTypeString(opt)));
|
|
}
|
|
if (args[i] !== "null") {
|
|
switch (opt.type) {
|
|
case "number":
|
|
options[opt.name] = validateJsonOptionValue(opt, parseInt(args[i]), errors);
|
|
i++;
|
|
break;
|
|
case "boolean":
|
|
var optValue = args[i];
|
|
options[opt.name] = validateJsonOptionValue(opt, optValue !== "false", errors);
|
|
if (optValue === "false" || optValue === "true") {
|
|
i++;
|
|
}
|
|
break;
|
|
case "string":
|
|
options[opt.name] = validateJsonOptionValue(opt, args[i] || "", errors);
|
|
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 {
|
|
options[opt.name] = undefined;
|
|
i++;
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
ts.compilerOptionsDidYouMeanDiagnostics = {
|
|
alternateMode: compilerOptionsAlternateMode,
|
|
getOptionsNameMap: getOptionsNameMap,
|
|
optionDeclarations: ts.optionDeclarations,
|
|
unknownOptionDiagnostic: ts.Diagnostics.Unknown_compiler_option_0,
|
|
unknownDidYouMeanDiagnostic: ts.Diagnostics.Unknown_compiler_option_0_Did_you_mean_1,
|
|
optionTypeMismatchDiagnostic: ts.Diagnostics.Compiler_option_0_expects_an_argument
|
|
};
|
|
function parseCommandLine(commandLine, readFile) {
|
|
return parseCommandLineWorker(ts.compilerOptionsDidYouMeanDiagnostics, commandLine, readFile);
|
|
}
|
|
ts.parseCommandLine = parseCommandLine;
|
|
function getOptionFromName(optionName, allowShort) {
|
|
return getOptionDeclarationFromName(getOptionsNameMap, optionName, allowShort);
|
|
}
|
|
ts.getOptionFromName = getOptionFromName;
|
|
function getOptionDeclarationFromName(getOptionNameMap, optionName, allowShort) {
|
|
if (allowShort === void 0) { allowShort = false; }
|
|
optionName = optionName.toLowerCase();
|
|
var _a = getOptionNameMap(), optionsNameMap = _a.optionsNameMap, shortOptionNames = _a.shortOptionNames;
|
|
if (allowShort) {
|
|
var short = shortOptionNames.get(optionName);
|
|
if (short !== undefined) {
|
|
optionName = short;
|
|
}
|
|
}
|
|
return optionsNameMap.get(optionName);
|
|
}
|
|
var buildOptionsNameMapCache;
|
|
function getBuildOptionsNameMap() {
|
|
return buildOptionsNameMapCache || (buildOptionsNameMapCache = createOptionNameMap(ts.buildOpts));
|
|
}
|
|
var buildOptionsAlternateMode = {
|
|
diagnostic: ts.Diagnostics.Compiler_option_0_may_not_be_used_with_build,
|
|
getOptionsNameMap: getOptionsNameMap
|
|
};
|
|
var buildOptionsDidYouMeanDiagnostics = {
|
|
alternateMode: buildOptionsAlternateMode,
|
|
getOptionsNameMap: getBuildOptionsNameMap,
|
|
optionDeclarations: ts.buildOpts,
|
|
unknownOptionDiagnostic: ts.Diagnostics.Unknown_build_option_0,
|
|
unknownDidYouMeanDiagnostic: ts.Diagnostics.Unknown_build_option_0_Did_you_mean_1,
|
|
optionTypeMismatchDiagnostic: ts.Diagnostics.Build_option_0_requires_a_value_of_type_1
|
|
};
|
|
function parseBuildCommand(args) {
|
|
var _a = parseCommandLineWorker(buildOptionsDidYouMeanDiagnostics, args), options = _a.options, watchOptions = _a.watchOptions, projects = _a.fileNames, errors = _a.errors;
|
|
var buildOptions = options;
|
|
if (projects.length === 0) {
|
|
projects.push(".");
|
|
}
|
|
if (buildOptions.clean && buildOptions.force) {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "force"));
|
|
}
|
|
if (buildOptions.clean && buildOptions.verbose) {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "verbose"));
|
|
}
|
|
if (buildOptions.clean && buildOptions.watch) {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "watch"));
|
|
}
|
|
if (buildOptions.watch && buildOptions.dry) {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "watch", "dry"));
|
|
}
|
|
return { buildOptions: buildOptions, watchOptions: watchOptions, projects: projects, errors: errors };
|
|
}
|
|
ts.parseBuildCommand = parseBuildCommand;
|
|
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;
|
|
}
|
|
ts.getDiagnosticText = getDiagnosticText;
|
|
function getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host, extendedConfigCache, watchOptionsToExtend, extraFileExtensions) {
|
|
var configFileText = tryReadFile(configFileName, function (fileName) { return host.readFile(fileName); });
|
|
if (!ts.isString(configFileText)) {
|
|
host.onUnRecoverableConfigFileDiagnostic(configFileText);
|
|
return undefined;
|
|
}
|
|
var result = ts.parseJsonText(configFileName, configFileText);
|
|
var cwd = host.getCurrentDirectory();
|
|
result.path = ts.toPath(configFileName, cwd, ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames));
|
|
result.resolvedPath = result.path;
|
|
result.originalFileName = result.fileName;
|
|
return parseJsonSourceFileConfigFileContent(result, host, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), cwd), optionsToExtend, ts.getNormalizedAbsolutePath(configFileName, cwd), undefined, extraFileExtensions, extendedConfigCache, watchOptionsToExtend);
|
|
}
|
|
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: convertConfigFileToObject(jsonSourceFile, jsonSourceFile.parseDiagnostics, false, undefined),
|
|
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) : { fileName: fileName, 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.Cannot_read_file_0, fileName) : text;
|
|
}
|
|
ts.tryReadFile = tryReadFile;
|
|
function commandLineOptionsToMap(options) {
|
|
return ts.arrayToMap(options, getOptionName);
|
|
}
|
|
var typeAcquisitionDidYouMeanDiagnostics = {
|
|
optionDeclarations: ts.typeAcquisitionDeclarations,
|
|
unknownOptionDiagnostic: ts.Diagnostics.Unknown_type_acquisition_option_0,
|
|
unknownDidYouMeanDiagnostic: ts.Diagnostics.Unknown_type_acquisition_option_0_Did_you_mean_1,
|
|
};
|
|
var watchOptionsNameMapCache;
|
|
function getWatchOptionsNameMap() {
|
|
return watchOptionsNameMapCache || (watchOptionsNameMapCache = createOptionNameMap(ts.optionsForWatch));
|
|
}
|
|
var watchOptionsDidYouMeanDiagnostics = {
|
|
getOptionsNameMap: getWatchOptionsNameMap,
|
|
optionDeclarations: ts.optionsForWatch,
|
|
unknownOptionDiagnostic: ts.Diagnostics.Unknown_watch_option_0,
|
|
unknownDidYouMeanDiagnostic: ts.Diagnostics.Unknown_watch_option_0_Did_you_mean_1,
|
|
optionTypeMismatchDiagnostic: ts.Diagnostics.Watch_option_0_requires_a_value_of_type_1
|
|
};
|
|
var commandLineCompilerOptionsMapCache;
|
|
function getCommandLineCompilerOptionsMap() {
|
|
return commandLineCompilerOptionsMapCache || (commandLineCompilerOptionsMapCache = commandLineOptionsToMap(ts.optionDeclarations));
|
|
}
|
|
var commandLineWatchOptionsMapCache;
|
|
function getCommandLineWatchOptionsMap() {
|
|
return commandLineWatchOptionsMapCache || (commandLineWatchOptionsMapCache = commandLineOptionsToMap(ts.optionsForWatch));
|
|
}
|
|
var commandLineTypeAcquisitionMapCache;
|
|
function getCommandLineTypeAcquisitionMap() {
|
|
return commandLineTypeAcquisitionMapCache || (commandLineTypeAcquisitionMapCache = commandLineOptionsToMap(ts.typeAcquisitionDeclarations));
|
|
}
|
|
var _tsconfigRootOptions;
|
|
function getTsconfigRootOptionsMap() {
|
|
if (_tsconfigRootOptions === undefined) {
|
|
_tsconfigRootOptions = {
|
|
name: undefined,
|
|
type: "object",
|
|
elementOptions: commandLineOptionsToMap([
|
|
{
|
|
name: "compilerOptions",
|
|
type: "object",
|
|
elementOptions: getCommandLineCompilerOptionsMap(),
|
|
extraKeyDiagnostics: ts.compilerOptionsDidYouMeanDiagnostics,
|
|
},
|
|
{
|
|
name: "watchOptions",
|
|
type: "object",
|
|
elementOptions: getCommandLineWatchOptionsMap(),
|
|
extraKeyDiagnostics: watchOptionsDidYouMeanDiagnostics,
|
|
},
|
|
{
|
|
name: "typingOptions",
|
|
type: "object",
|
|
elementOptions: getCommandLineTypeAcquisitionMap(),
|
|
extraKeyDiagnostics: typeAcquisitionDidYouMeanDiagnostics,
|
|
},
|
|
{
|
|
name: "typeAcquisition",
|
|
type: "object",
|
|
elementOptions: getCommandLineTypeAcquisitionMap(),
|
|
extraKeyDiagnostics: typeAcquisitionDidYouMeanDiagnostics
|
|
},
|
|
{
|
|
name: "extends",
|
|
type: "string",
|
|
category: ts.Diagnostics.File_Management,
|
|
},
|
|
{
|
|
name: "references",
|
|
type: "list",
|
|
element: {
|
|
name: "references",
|
|
type: "object"
|
|
},
|
|
category: ts.Diagnostics.Projects,
|
|
},
|
|
{
|
|
name: "files",
|
|
type: "list",
|
|
element: {
|
|
name: "files",
|
|
type: "string"
|
|
},
|
|
category: ts.Diagnostics.File_Management,
|
|
},
|
|
{
|
|
name: "include",
|
|
type: "list",
|
|
element: {
|
|
name: "include",
|
|
type: "string"
|
|
},
|
|
category: ts.Diagnostics.File_Management,
|
|
defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
|
|
},
|
|
{
|
|
name: "exclude",
|
|
type: "list",
|
|
element: {
|
|
name: "exclude",
|
|
type: "string"
|
|
},
|
|
category: ts.Diagnostics.File_Management,
|
|
defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
|
|
},
|
|
ts.compileOnSaveCommandLineOption
|
|
])
|
|
};
|
|
}
|
|
return _tsconfigRootOptions;
|
|
}
|
|
function convertConfigFileToObject(sourceFile, errors, reportOptionsErrors, optionsIterator) {
|
|
var _a;
|
|
var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
|
|
var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
|
|
if (rootExpression && rootExpression.kind !== 205) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
|
|
if (ts.isArrayLiteralExpression(rootExpression)) {
|
|
var firstObject = ts.find(rootExpression.elements, ts.isObjectLiteralExpression);
|
|
if (firstObject) {
|
|
return convertToObjectWorker(sourceFile, firstObject, errors, true, knownRootOptions, optionsIterator);
|
|
}
|
|
}
|
|
return {};
|
|
}
|
|
return convertToObjectWorker(sourceFile, rootExpression, errors, true, knownRootOptions, optionsIterator);
|
|
}
|
|
function convertToObject(sourceFile, errors) {
|
|
var _a;
|
|
return convertToObjectWorker(sourceFile, (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression, errors, true, undefined, undefined);
|
|
}
|
|
ts.convertToObject = convertToObject;
|
|
function convertToObjectWorker(sourceFile, rootExpression, errors, returnValue, knownRootOptions, jsonConversionNotifier) {
|
|
if (!rootExpression) {
|
|
return returnValue ? {} : undefined;
|
|
}
|
|
return convertPropertyValueToJson(rootExpression, knownRootOptions);
|
|
function isRootOptionMap(knownOptions) {
|
|
return knownRootOptions && knownRootOptions.elementOptions === knownOptions;
|
|
}
|
|
function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
|
|
var result = returnValue ? {} : undefined;
|
|
var _loop_4 = function (element) {
|
|
if (element.kind !== 296) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
|
|
return "continue";
|
|
}
|
|
if (element.questionToken) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.questionToken, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
|
|
}
|
|
if (!isDoubleQuotedString(element.name)) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, ts.Diagnostics.String_literal_with_double_quotes_expected));
|
|
}
|
|
var textOfKey = ts.isComputedNonLiteralName(element.name) ? undefined : ts.getTextOfPropertyName(element.name);
|
|
var keyText = textOfKey && ts.unescapeLeadingUnderscores(textOfKey);
|
|
var option = keyText && knownOptions ? knownOptions.get(keyText) : undefined;
|
|
if (keyText && extraKeyDiagnostics && !option) {
|
|
if (knownOptions) {
|
|
errors.push(createUnknownOptionError(keyText, extraKeyDiagnostics, function (message, arg0, arg1) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, message, arg0, arg1); }));
|
|
}
|
|
else {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, extraKeyDiagnostics.unknownOptionDiagnostic, 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
|
|
var element = _a[_i];
|
|
_loop_4(element);
|
|
}
|
|
return result;
|
|
}
|
|
function convertArrayLiteralExpressionToJson(elements, elementOption) {
|
|
if (!returnValue) {
|
|
elements.forEach(function (element) { return convertPropertyValueToJson(element, elementOption); });
|
|
return undefined;
|
|
}
|
|
return ts.filter(elements.map(function (element) { return convertPropertyValueToJson(element, elementOption); }), function (v) { return v !== undefined; });
|
|
}
|
|
function convertPropertyValueToJson(valueExpression, option) {
|
|
var invalidReported;
|
|
switch (valueExpression.kind) {
|
|
case 110:
|
|
reportInvalidOptionValue(option && option.type !== "boolean");
|
|
return validateValue(true);
|
|
case 95:
|
|
reportInvalidOptionValue(option && option.type !== "boolean");
|
|
return validateValue(false);
|
|
case 104:
|
|
reportInvalidOptionValue(option && option.name === "extends");
|
|
return validateValue(null);
|
|
case 10:
|
|
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); }));
|
|
invalidReported = true;
|
|
}
|
|
}
|
|
return validateValue(text);
|
|
case 8:
|
|
reportInvalidOptionValue(option && option.type !== "number");
|
|
return validateValue(Number(valueExpression.text));
|
|
case 219:
|
|
if (valueExpression.operator !== 40 || valueExpression.operand.kind !== 8) {
|
|
break;
|
|
}
|
|
reportInvalidOptionValue(option && option.type !== "number");
|
|
return validateValue(-Number(valueExpression.operand.text));
|
|
case 205:
|
|
reportInvalidOptionValue(option && option.type !== "object");
|
|
var objectLiteralExpression = valueExpression;
|
|
if (option) {
|
|
var _a = option, elementOptions = _a.elementOptions, extraKeyDiagnostics = _a.extraKeyDiagnostics, optionName = _a.name;
|
|
return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, elementOptions, extraKeyDiagnostics, optionName));
|
|
}
|
|
else {
|
|
return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, undefined, undefined, undefined));
|
|
}
|
|
case 204:
|
|
reportInvalidOptionValue(option && option.type !== "list");
|
|
return validateValue(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 validateValue(value) {
|
|
var _a;
|
|
if (!invalidReported) {
|
|
var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
|
|
if (diagnostic) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
|
|
return undefined;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
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)));
|
|
invalidReported = true;
|
|
}
|
|
}
|
|
}
|
|
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 convertToTSConfig(configParseResult, configFileName, host) {
|
|
var _a, _b, _c;
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames);
|
|
var files = ts.map(ts.filter(configParseResult.fileNames, !((_b = (_a = configParseResult.options.configFile) === null || _a === void 0 ? void 0 : _a.configFileSpecs) === null || _b === void 0 ? void 0 : _b.validatedIncludeSpecs) ? ts.returnTrue : matchesSpecs(configFileName, configParseResult.options.configFile.configFileSpecs.validatedIncludeSpecs, configParseResult.options.configFile.configFileSpecs.validatedExcludeSpecs, host)), function (f) { return ts.getRelativePathFromFile(ts.getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), ts.getNormalizedAbsolutePath(f, host.getCurrentDirectory()), getCanonicalFileName); });
|
|
var optionMap = serializeCompilerOptions(configParseResult.options, { configFilePath: ts.getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), useCaseSensitiveFileNames: host.useCaseSensitiveFileNames });
|
|
var watchOptionMap = configParseResult.watchOptions && serializeWatchOptions(configParseResult.watchOptions);
|
|
var config = __assign(__assign({ compilerOptions: __assign(__assign({}, optionMapToObject(optionMap)), { showConfig: undefined, configFile: undefined, configFilePath: undefined, help: undefined, init: undefined, listFiles: undefined, listEmittedFiles: undefined, project: undefined, build: undefined, version: undefined }), watchOptions: watchOptionMap && optionMapToObject(watchOptionMap), references: ts.map(configParseResult.projectReferences, function (r) { return (__assign(__assign({}, r), { path: r.originalPath ? r.originalPath : "", originalPath: undefined })); }), files: ts.length(files) ? files : undefined }, (((_c = configParseResult.options.configFile) === null || _c === void 0 ? void 0 : _c.configFileSpecs) ? {
|
|
include: filterSameAsDefaultInclude(configParseResult.options.configFile.configFileSpecs.validatedIncludeSpecs),
|
|
exclude: configParseResult.options.configFile.configFileSpecs.validatedExcludeSpecs
|
|
} : {})), { compileOnSave: !!configParseResult.compileOnSave ? true : undefined });
|
|
return config;
|
|
}
|
|
ts.convertToTSConfig = convertToTSConfig;
|
|
function optionMapToObject(optionMap) {
|
|
return __assign({}, ts.arrayFrom(optionMap.entries()).reduce(function (prev, cur) {
|
|
var _a;
|
|
return (__assign(__assign({}, prev), (_a = {}, _a[cur[0]] = cur[1], _a)));
|
|
}, {}));
|
|
}
|
|
function filterSameAsDefaultInclude(specs) {
|
|
if (!ts.length(specs))
|
|
return undefined;
|
|
if (ts.length(specs) !== 1)
|
|
return specs;
|
|
if (specs[0] === ts.defaultIncludeSpec)
|
|
return undefined;
|
|
return specs;
|
|
}
|
|
function matchesSpecs(path, includeSpecs, excludeSpecs, host) {
|
|
if (!includeSpecs)
|
|
return ts.returnTrue;
|
|
var patterns = ts.getFileMatcherPatterns(path, excludeSpecs, includeSpecs, host.useCaseSensitiveFileNames, host.getCurrentDirectory());
|
|
var excludeRe = patterns.excludePattern && ts.getRegexFromPattern(patterns.excludePattern, host.useCaseSensitiveFileNames);
|
|
var includeRe = patterns.includeFilePattern && ts.getRegexFromPattern(patterns.includeFilePattern, host.useCaseSensitiveFileNames);
|
|
if (includeRe) {
|
|
if (excludeRe) {
|
|
return function (path) { return !(includeRe.test(path) && !excludeRe.test(path)); };
|
|
}
|
|
return function (path) { return !includeRe.test(path); };
|
|
}
|
|
if (excludeRe) {
|
|
return function (path) { return excludeRe.test(path); };
|
|
}
|
|
return ts.returnTrue;
|
|
}
|
|
function getCustomTypeMapOfCommandLineOption(optionDefinition) {
|
|
if (optionDefinition.type === "string" || optionDefinition.type === "number" || optionDefinition.type === "boolean" || optionDefinition.type === "object") {
|
|
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;
|
|
}
|
|
});
|
|
}
|
|
ts.getNameOfCompilerOptionValue = getNameOfCompilerOptionValue;
|
|
function serializeCompilerOptions(options, pathOptions) {
|
|
return serializeOptionBaseObject(options, getOptionsNameMap(), pathOptions);
|
|
}
|
|
function serializeWatchOptions(options) {
|
|
return serializeOptionBaseObject(options, getWatchOptionsNameMap());
|
|
}
|
|
function serializeOptionBaseObject(options, _a, pathOptions) {
|
|
var optionsNameMap = _a.optionsNameMap;
|
|
var result = new ts.Map();
|
|
var getCanonicalFileName = pathOptions && ts.createGetCanonicalFileName(pathOptions.useCaseSensitiveFileNames);
|
|
var _loop_5 = function (name) {
|
|
if (ts.hasProperty(options, name)) {
|
|
if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
|
|
return "continue";
|
|
}
|
|
var value = options[name];
|
|
var optionDefinition = optionsNameMap.get(name.toLowerCase());
|
|
if (optionDefinition) {
|
|
var customTypeMap_1 = getCustomTypeMapOfCommandLineOption(optionDefinition);
|
|
if (!customTypeMap_1) {
|
|
if (pathOptions && optionDefinition.isFilePath) {
|
|
result.set(name, ts.getRelativePathFromFile(pathOptions.configFilePath, ts.getNormalizedAbsolutePath(value, ts.getDirectoryPath(pathOptions.configFilePath)), getCanonicalFileName));
|
|
}
|
|
else {
|
|
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_5(name);
|
|
}
|
|
return result;
|
|
}
|
|
function getCompilerOptionsDiffValue(options, newLine) {
|
|
var compilerOptionsMap = getSerializedCompilerOption(options);
|
|
return getOverwrittenDefaultOptions();
|
|
function makePadding(paddingLength) {
|
|
return Array(paddingLength + 1).join(" ");
|
|
}
|
|
function getOverwrittenDefaultOptions() {
|
|
var result = [];
|
|
var tab = makePadding(2);
|
|
commandOptionsWithoutBuild.forEach(function (cmd) {
|
|
if (!compilerOptionsMap.has(cmd.name)) {
|
|
return;
|
|
}
|
|
var newValue = compilerOptionsMap.get(cmd.name);
|
|
var defaultValue = getDefaultValueForOption(cmd);
|
|
if (newValue !== defaultValue) {
|
|
result.push("".concat(tab).concat(cmd.name, ": ").concat(newValue));
|
|
}
|
|
else if (ts.hasProperty(ts.defaultInitCompilerOptions, cmd.name)) {
|
|
result.push("".concat(tab).concat(cmd.name, ": ").concat(defaultValue));
|
|
}
|
|
});
|
|
return result.join(newLine) + newLine;
|
|
}
|
|
}
|
|
ts.getCompilerOptionsDiffValue = getCompilerOptionsDiffValue;
|
|
function getSerializedCompilerOption(options) {
|
|
var compilerOptions = ts.extend(options, ts.defaultInitCompilerOptions);
|
|
return serializeCompilerOptions(compilerOptions);
|
|
}
|
|
function generateTSConfig(options, fileNames, newLine) {
|
|
var compilerOptionsMap = getSerializedCompilerOption(options);
|
|
return writeConfigurations();
|
|
function makePadding(paddingLength) {
|
|
return Array(paddingLength + 1).join(" ");
|
|
}
|
|
function isAllowedOptionForOutput(_a) {
|
|
var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
|
|
var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
|
|
return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || 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 (isAllowedOptionForOutput(option)) {
|
|
categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
|
|
}
|
|
}
|
|
var marginLength = 0;
|
|
var seenKnownKeys = 0;
|
|
var entries = [];
|
|
categorizedOptions.forEach(function (options, category) {
|
|
if (entries.length !== 0) {
|
|
entries.push({ value: "" });
|
|
}
|
|
entries.push({ value: "/* ".concat(category, " */") });
|
|
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 = "\"".concat(option.name, "\": ").concat(JSON.stringify(compilerOptionsMap.get(option.name))).concat((seenKnownKeys += 1) === compilerOptionsMap.size ? "" : ",");
|
|
}
|
|
else {
|
|
optionName = "// \"".concat(option.name, "\": ").concat(JSON.stringify(getDefaultValueForOption(option)), ",");
|
|
}
|
|
entries.push({
|
|
value: optionName,
|
|
description: "/* ".concat(option.description && ts.getLocaleSpecificMessage(option.description) || option.name, " */")
|
|
});
|
|
marginLength = Math.max(optionName.length, marginLength);
|
|
}
|
|
});
|
|
var tab = makePadding(2);
|
|
var result = [];
|
|
result.push("{");
|
|
result.push("".concat(tab, "\"compilerOptions\": {"));
|
|
result.push("".concat(tab).concat(tab, "/* ").concat(ts.getLocaleSpecificMessage(ts.Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file), " */"));
|
|
result.push("");
|
|
for (var _a = 0, entries_2 = entries; _a < entries_2.length; _a++) {
|
|
var entry = entries_2[_a];
|
|
var value = entry.value, _b = entry.description, description = _b === void 0 ? "" : _b;
|
|
result.push(value && "".concat(tab).concat(tab).concat(value).concat(description && (makePadding(marginLength - value.length + 2) + description)));
|
|
}
|
|
if (fileNames.length) {
|
|
result.push("".concat(tab, "},"));
|
|
result.push("".concat(tab, "\"files\": ["));
|
|
for (var i = 0; i < fileNames.length; i++) {
|
|
result.push("".concat(tab).concat(tab).concat(JSON.stringify(fileNames[i])).concat(i === fileNames.length - 1 ? "" : ","));
|
|
}
|
|
result.push("".concat(tab, "]"));
|
|
}
|
|
else {
|
|
result.push("".concat(tab, "}"));
|
|
}
|
|
result.push("}");
|
|
return result.join(newLine) + newLine;
|
|
}
|
|
}
|
|
ts.generateTSConfig = generateTSConfig;
|
|
function convertToOptionsWithAbsolutePaths(options, toAbsolutePath) {
|
|
var result = {};
|
|
var optionsNameMap = getOptionsNameMap().optionsNameMap;
|
|
for (var name in options) {
|
|
if (ts.hasProperty(options, name)) {
|
|
result[name] = convertToOptionValueWithAbsolutePaths(optionsNameMap.get(name.toLowerCase()), options[name], toAbsolutePath);
|
|
}
|
|
}
|
|
if (result.configFilePath) {
|
|
result.configFilePath = toAbsolutePath(result.configFilePath);
|
|
}
|
|
return result;
|
|
}
|
|
ts.convertToOptionsWithAbsolutePaths = convertToOptionsWithAbsolutePaths;
|
|
function convertToOptionValueWithAbsolutePaths(option, value, toAbsolutePath) {
|
|
if (option && !isNullOrUndefined(value)) {
|
|
if (option.type === "list") {
|
|
var values = value;
|
|
if (option.element.isFilePath && values.length) {
|
|
return values.map(toAbsolutePath);
|
|
}
|
|
}
|
|
else if (option.isFilePath) {
|
|
return toAbsolutePath(value);
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache, existingWatchOptions) {
|
|
return parseJsonConfigFileContentWorker(json, undefined, host, basePath, existingOptions, existingWatchOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache);
|
|
}
|
|
ts.parseJsonConfigFileContent = parseJsonConfigFileContent;
|
|
function parseJsonSourceFileConfigFileContent(sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache, existingWatchOptions) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("parse", "parseJsonSourceFileConfigFileContent", { path: sourceFile.fileName });
|
|
var result = parseJsonConfigFileContentWorker(undefined, sourceFile, host, basePath, existingOptions, existingWatchOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return result;
|
|
}
|
|
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));
|
|
}
|
|
ts.defaultIncludeSpec = "**/*";
|
|
function parseJsonConfigFileContentWorker(json, sourceFile, host, basePath, existingOptions, existingWatchOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache) {
|
|
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, extendedConfigCache);
|
|
var raw = parsedConfig.raw;
|
|
var options = ts.extend(existingOptions, parsedConfig.options || {});
|
|
var watchOptions = existingWatchOptions && parsedConfig.watchOptions ?
|
|
ts.extend(existingWatchOptions, parsedConfig.watchOptions) :
|
|
parsedConfig.watchOptions || existingWatchOptions;
|
|
options.configFilePath = configFileName && ts.normalizeSlashes(configFileName);
|
|
var configFileSpecs = getConfigFileSpecs();
|
|
if (sourceFile)
|
|
sourceFile.configFileSpecs = configFileSpecs;
|
|
setConfigFileInOptions(options, sourceFile);
|
|
var basePathForFileNames = ts.normalizePath(configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath);
|
|
return {
|
|
options: options,
|
|
watchOptions: watchOptions,
|
|
fileNames: getFileNames(basePathForFileNames),
|
|
projectReferences: getProjectReferences(basePathForFileNames),
|
|
typeAcquisition: parsedConfig.typeAcquisition || getDefaultTypeAcquisition(),
|
|
raw: raw,
|
|
errors: errors,
|
|
wildcardDirectories: getWildcardDirectories(configFileSpecs, basePathForFileNames, host.useCaseSensitiveFileNames),
|
|
compileOnSave: !!raw.compileOnSave,
|
|
};
|
|
function getConfigFileSpecs() {
|
|
var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object");
|
|
var filesSpecs = toPropValue(getSpecsFromRaw("files"));
|
|
if (filesSpecs) {
|
|
var hasZeroOrNoReferences = referencesOfRaw === "no-prop" || ts.isArray(referencesOfRaw) && referencesOfRaw.length === 0;
|
|
var hasExtends = ts.hasProperty(raw, "extends");
|
|
if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) {
|
|
if (sourceFile) {
|
|
var fileName = configFileName || "tsconfig.json";
|
|
var diagnosticMessage = ts.Diagnostics.The_files_list_in_config_file_0_is_empty;
|
|
var nodeValue = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "files"), function (property) { return property.initializer; });
|
|
var error = nodeValue
|
|
? ts.createDiagnosticForNodeInSourceFile(sourceFile, nodeValue, diagnosticMessage, fileName)
|
|
: ts.createCompilerDiagnostic(diagnosticMessage, fileName);
|
|
errors.push(error);
|
|
}
|
|
else {
|
|
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json");
|
|
}
|
|
}
|
|
}
|
|
var includeSpecs = toPropValue(getSpecsFromRaw("include"));
|
|
var excludeOfRaw = getSpecsFromRaw("exclude");
|
|
var isDefaultIncludeSpec = false;
|
|
var excludeSpecs = toPropValue(excludeOfRaw);
|
|
if (excludeOfRaw === "no-prop" && 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 = [ts.defaultIncludeSpec];
|
|
isDefaultIncludeSpec = true;
|
|
}
|
|
var validatedIncludeSpecs, validatedExcludeSpecs;
|
|
if (includeSpecs) {
|
|
validatedIncludeSpecs = validateSpecs(includeSpecs, errors, true, sourceFile, "include");
|
|
}
|
|
if (excludeSpecs) {
|
|
validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, false, sourceFile, "exclude");
|
|
}
|
|
return {
|
|
filesSpecs: filesSpecs,
|
|
includeSpecs: includeSpecs,
|
|
excludeSpecs: excludeSpecs,
|
|
validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
|
|
validatedIncludeSpecs: validatedIncludeSpecs,
|
|
validatedExcludeSpecs: validatedExcludeSpecs,
|
|
pathPatterns: undefined,
|
|
isDefaultIncludeSpec: isDefaultIncludeSpec,
|
|
};
|
|
}
|
|
function getFileNames(basePath) {
|
|
var fileNames = getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions);
|
|
if (shouldReportNoInputFiles(fileNames, canJsonReportNoInputFiles(raw), resolutionStack)) {
|
|
errors.push(getErrorForNoInputFiles(configFileSpecs, configFileName));
|
|
}
|
|
return fileNames;
|
|
}
|
|
function getProjectReferences(basePath) {
|
|
var projectReferences;
|
|
var referencesOfRaw = getPropFromRaw("references", function (element) { return typeof element === "object"; }, "object");
|
|
if (ts.isArray(referencesOfRaw)) {
|
|
for (var _i = 0, referencesOfRaw_1 = referencesOfRaw; _i < referencesOfRaw_1.length; _i++) {
|
|
var ref = referencesOfRaw_1[_i];
|
|
if (typeof ref.path !== "string") {
|
|
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string");
|
|
}
|
|
else {
|
|
(projectReferences || (projectReferences = [])).push({
|
|
path: ts.getNormalizedAbsolutePath(ref.path, basePath),
|
|
originalPath: ref.path,
|
|
prepend: ref.prepend,
|
|
circular: ref.circular
|
|
});
|
|
}
|
|
}
|
|
}
|
|
return projectReferences;
|
|
}
|
|
function toPropValue(specResult) {
|
|
return ts.isArray(specResult) ? specResult : undefined;
|
|
}
|
|
function getSpecsFromRaw(prop) {
|
|
return getPropFromRaw(prop, ts.isString, "string");
|
|
}
|
|
function getPropFromRaw(prop, validateElement, elementTypeName) {
|
|
if (ts.hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) {
|
|
if (ts.isArray(raw[prop])) {
|
|
var result = raw[prop];
|
|
if (!sourceFile && !ts.every(result, validateElement)) {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName));
|
|
}
|
|
return result;
|
|
}
|
|
else {
|
|
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array");
|
|
return "not-array";
|
|
}
|
|
}
|
|
return "no-prop";
|
|
}
|
|
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;
|
|
}
|
|
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 || []));
|
|
}
|
|
function shouldReportNoInputFiles(fileNames, canJsonReportNoInutFiles, resolutionStack) {
|
|
return fileNames.length === 0 && canJsonReportNoInutFiles && (!resolutionStack || resolutionStack.length === 0);
|
|
}
|
|
function canJsonReportNoInputFiles(raw) {
|
|
return !ts.hasProperty(raw, "files") && !ts.hasProperty(raw, "references");
|
|
}
|
|
ts.canJsonReportNoInputFiles = canJsonReportNoInputFiles;
|
|
function updateErrorForNoInputFiles(fileNames, configFileName, configFileSpecs, configParseDiagnostics, canJsonReportNoInutFiles) {
|
|
var existingErrors = configParseDiagnostics.length;
|
|
if (shouldReportNoInputFiles(fileNames, canJsonReportNoInutFiles)) {
|
|
configParseDiagnostics.push(getErrorForNoInputFiles(configFileSpecs, configFileName));
|
|
}
|
|
else {
|
|
ts.filterMutate(configParseDiagnostics, function (error) { return !isErrorNoInputFiles(error); });
|
|
}
|
|
return existingErrors !== configParseDiagnostics.length;
|
|
}
|
|
ts.updateErrorForNoInputFiles = updateErrorForNoInputFiles;
|
|
function isSuccessfulParsedTsconfig(value) {
|
|
return !!value.options;
|
|
}
|
|
function parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors, extendedConfigCache) {
|
|
var _a;
|
|
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, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
|
|
return { raw: json || convertToObject(sourceFile, errors) };
|
|
}
|
|
var ownConfig = json ?
|
|
parseOwnConfigOfJson(json, host, basePath, configFileName, errors) :
|
|
parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors);
|
|
if ((_a = ownConfig.options) === null || _a === void 0 ? void 0 : _a.paths) {
|
|
ownConfig.options.pathsBasePath = basePath;
|
|
}
|
|
if (ownConfig.extendedConfigPath) {
|
|
resolutionStack = resolutionStack.concat([resolvedPath]);
|
|
var extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, resolutionStack, errors, extendedConfigCache);
|
|
if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) {
|
|
var baseRaw_1 = extendedConfig.raw;
|
|
var raw_1 = ownConfig.raw;
|
|
var relativeDifference_1;
|
|
var setPropertyInRawIfNotUndefined = function (propertyName) {
|
|
if (!raw_1[propertyName] && baseRaw_1[propertyName]) {
|
|
raw_1[propertyName] = ts.map(baseRaw_1[propertyName], function (path) { return ts.isRootedDiskPath(path) ? path : ts.combinePaths(relativeDifference_1 || (relativeDifference_1 = ts.convertToRelativePath(ts.getDirectoryPath(ownConfig.extendedConfigPath), basePath, ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames))), path); });
|
|
}
|
|
};
|
|
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);
|
|
ownConfig.watchOptions = ownConfig.watchOptions && extendedConfig.watchOptions ?
|
|
ts.assign({}, extendedConfig.watchOptions, ownConfig.watchOptions) :
|
|
ownConfig.watchOptions || extendedConfig.watchOptions;
|
|
}
|
|
}
|
|
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);
|
|
var watchOptions = convertWatchOptionsFromJsonWorker(json.watchOptions, basePath, errors);
|
|
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, watchOptions: watchOptions, typeAcquisition: typeAcquisition, extendedConfigPath: extendedConfigPath };
|
|
}
|
|
function parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors) {
|
|
var options = getDefaultCompilerOptions(configFileName);
|
|
var typeAcquisition, typingOptionstypeAcquisition;
|
|
var watchOptions;
|
|
var extendedConfigPath;
|
|
var rootCompilerOptions;
|
|
var optionsIterator = {
|
|
onSetValidOptionKeyValueInParent: function (parentOption, option, value) {
|
|
var currentOption;
|
|
switch (parentOption) {
|
|
case "compilerOptions":
|
|
currentOption = options;
|
|
break;
|
|
case "watchOptions":
|
|
currentOption = (watchOptions || (watchOptions = {}));
|
|
break;
|
|
case "typeAcquisition":
|
|
currentOption = (typeAcquisition || (typeAcquisition = getDefaultTypeAcquisition(configFileName)));
|
|
break;
|
|
case "typingOptions":
|
|
currentOption = (typingOptionstypeAcquisition || (typingOptionstypeAcquisition = getDefaultTypeAcquisition(configFileName)));
|
|
break;
|
|
default:
|
|
ts.Debug.fail("Unknown option");
|
|
}
|
|
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;
|
|
}
|
|
},
|
|
onSetUnknownOptionKeyValueInRoot: function (key, keyNode, _value, _valueNode) {
|
|
if (key === "excludes") {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, keyNode, ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
|
|
}
|
|
if (ts.find(commandOptionsWithoutBuild, function (opt) { return opt.name === key; })) {
|
|
rootCompilerOptions = ts.append(rootCompilerOptions, keyNode);
|
|
}
|
|
}
|
|
};
|
|
var json = convertConfigFileToObject(sourceFile, errors, true, optionsIterator);
|
|
if (!typeAcquisition) {
|
|
if (typingOptionstypeAcquisition) {
|
|
typeAcquisition = (typingOptionstypeAcquisition.enableAutoDiscovery !== undefined) ?
|
|
{
|
|
enable: typingOptionstypeAcquisition.enableAutoDiscovery,
|
|
include: typingOptionstypeAcquisition.include,
|
|
exclude: typingOptionstypeAcquisition.exclude
|
|
} :
|
|
typingOptionstypeAcquisition;
|
|
}
|
|
else {
|
|
typeAcquisition = getDefaultTypeAcquisition(configFileName);
|
|
}
|
|
}
|
|
if (rootCompilerOptions && json && json.compilerOptions === undefined) {
|
|
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootCompilerOptions[0], ts.Diagnostics._0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file, ts.getTextOfPropertyName(rootCompilerOptions[0])));
|
|
}
|
|
return { raw: json, options: options, watchOptions: watchOptions, 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, "../")) {
|
|
var extendedConfigPath = ts.getNormalizedAbsolutePath(extendedConfig, basePath);
|
|
if (!host.fileExists(extendedConfigPath) && !ts.endsWith(extendedConfigPath, ".json")) {
|
|
extendedConfigPath = "".concat(extendedConfigPath, ".json");
|
|
if (!host.fileExists(extendedConfigPath)) {
|
|
errors.push(createDiagnostic(ts.Diagnostics.File_0_not_found, extendedConfig));
|
|
return undefined;
|
|
}
|
|
}
|
|
return extendedConfigPath;
|
|
}
|
|
var resolved = ts.nodeModuleNameResolver(extendedConfig, ts.combinePaths(basePath, "tsconfig.json"), { moduleResolution: ts.ModuleResolutionKind.NodeJs }, host, undefined, undefined, true);
|
|
if (resolved.resolvedModule) {
|
|
return resolved.resolvedModule.resolvedFileName;
|
|
}
|
|
errors.push(createDiagnostic(ts.Diagnostics.File_0_not_found, extendedConfig));
|
|
return undefined;
|
|
}
|
|
function getExtendedConfig(sourceFile, extendedConfigPath, host, resolutionStack, errors, extendedConfigCache) {
|
|
var _a;
|
|
var path = host.useCaseSensitiveFileNames ? extendedConfigPath : ts.toFileNameLowerCase(extendedConfigPath);
|
|
var value;
|
|
var extendedResult;
|
|
var extendedConfig;
|
|
if (extendedConfigCache && (value = extendedConfigCache.get(path))) {
|
|
(extendedResult = value.extendedResult, extendedConfig = value.extendedConfig);
|
|
}
|
|
else {
|
|
extendedResult = readJsonConfigFile(extendedConfigPath, function (path) { return host.readFile(path); });
|
|
if (!extendedResult.parseDiagnostics.length) {
|
|
extendedConfig = parseConfig(undefined, extendedResult, host, ts.getDirectoryPath(extendedConfigPath), ts.getBaseFileName(extendedConfigPath), resolutionStack, errors, extendedConfigCache);
|
|
}
|
|
if (extendedConfigCache) {
|
|
extendedConfigCache.set(path, { extendedResult: extendedResult, extendedConfig: extendedConfig });
|
|
}
|
|
}
|
|
if (sourceFile) {
|
|
sourceFile.extendedSourceFiles = [extendedResult.fileName];
|
|
if (extendedResult.extendedSourceFiles) {
|
|
(_a = sourceFile.extendedSourceFiles).push.apply(_a, extendedResult.extendedSourceFiles);
|
|
}
|
|
}
|
|
if (extendedResult.parseDiagnostics.length) {
|
|
errors.push.apply(errors, extendedResult.parseDiagnostics);
|
|
return undefined;
|
|
}
|
|
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(getCommandLineCompilerOptionsMap(), jsonOptions, basePath, options, ts.compilerOptionsDidYouMeanDiagnostics, 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(getCommandLineTypeAcquisitionMap(), typeAcquisition, basePath, options, typeAcquisitionDidYouMeanDiagnostics, errors);
|
|
return options;
|
|
}
|
|
function convertWatchOptionsFromJsonWorker(jsonOptions, basePath, errors) {
|
|
return convertOptionsFromJson(getCommandLineWatchOptionsMap(), jsonOptions, basePath, undefined, watchOptionsDidYouMeanDiagnostics, errors);
|
|
}
|
|
function convertOptionsFromJson(optionsNameMap, jsonOptions, basePath, defaultOptions, diagnostics, errors) {
|
|
if (!jsonOptions) {
|
|
return;
|
|
}
|
|
for (var id in jsonOptions) {
|
|
var opt = optionsNameMap.get(id);
|
|
if (opt) {
|
|
(defaultOptions || (defaultOptions = {}))[opt.name] = convertJsonOption(opt, jsonOptions[id], basePath, errors);
|
|
}
|
|
else {
|
|
errors.push(createUnknownOptionError(id, diagnostics, ts.createCompilerDiagnostic));
|
|
}
|
|
}
|
|
return defaultOptions;
|
|
}
|
|
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);
|
|
}
|
|
var validatedValue = validateJsonOptionValue(opt, value, errors);
|
|
return isNullOrUndefined(validatedValue) ? validatedValue : normalizeNonListOptionValue(opt, basePath, validatedValue);
|
|
}
|
|
else {
|
|
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, opt.name, getCompilerOptionValueTypeString(opt)));
|
|
}
|
|
}
|
|
ts.convertJsonOption = convertJsonOption;
|
|
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 listOption_1.listPreserveFalsyValues ? true : !!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.getNormalizedAbsolutePath(value, basePath);
|
|
if (value === "") {
|
|
value = ".";
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
function validateJsonOptionValue(opt, value, errors) {
|
|
var _a;
|
|
if (isNullOrUndefined(value))
|
|
return undefined;
|
|
var d = (_a = opt.extraValidation) === null || _a === void 0 ? void 0 : _a.call(opt, value);
|
|
if (!d)
|
|
return value;
|
|
errors.push(ts.createCompilerDiagnostic.apply(void 0, d));
|
|
return undefined;
|
|
}
|
|
function convertJsonOptionOfCustomType(opt, value, errors) {
|
|
if (isNullOrUndefined(value))
|
|
return undefined;
|
|
var key = value.toLowerCase();
|
|
var val = opt.type.get(key);
|
|
if (val !== undefined) {
|
|
return validateJsonOptionValue(opt, val, errors);
|
|
}
|
|
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 option.listPreserveFalsyValues ? true : !!v; });
|
|
}
|
|
var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
|
|
var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/;
|
|
function getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions) {
|
|
if (extraFileExtensions === void 0) { extraFileExtensions = ts.emptyArray; }
|
|
basePath = ts.normalizePath(basePath);
|
|
var keyMapper = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames);
|
|
var literalFileMap = new ts.Map();
|
|
var wildcardFileMap = new ts.Map();
|
|
var wildCardJsonFileMap = new ts.Map();
|
|
var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
|
|
var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
|
|
var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
|
|
if (validatedFilesSpec) {
|
|
for (var _i = 0, validatedFilesSpec_1 = validatedFilesSpec; _i < validatedFilesSpec_1.length; _i++) {
|
|
var fileName = validatedFilesSpec_1[_i];
|
|
var file = ts.getNormalizedAbsolutePath(fileName, basePath);
|
|
literalFileMap.set(keyMapper(file), file);
|
|
}
|
|
}
|
|
var jsonOnlyIncludeRegexes;
|
|
if (validatedIncludeSpecs && validatedIncludeSpecs.length > 0) {
|
|
var _loop_6 = function (file) {
|
|
if (ts.fileExtensionIs(file, ".json")) {
|
|
if (!jsonOnlyIncludeRegexes) {
|
|
var includes = validatedIncludeSpecs.filter(function (s) { return ts.endsWith(s, ".json"); });
|
|
var includeFilePatterns = ts.map(ts.getRegularExpressionsForWildcards(includes, basePath, "files"), function (pattern) { return "^".concat(pattern, "$"); });
|
|
jsonOnlyIncludeRegexes = includeFilePatterns ? includeFilePatterns.map(function (pattern) { return ts.getRegexFromPattern(pattern, host.useCaseSensitiveFileNames); }) : ts.emptyArray;
|
|
}
|
|
var includeIndex = ts.findIndex(jsonOnlyIncludeRegexes, function (re) { return re.test(file); });
|
|
if (includeIndex !== -1) {
|
|
var key_1 = keyMapper(file);
|
|
if (!literalFileMap.has(key_1) && !wildCardJsonFileMap.has(key_1)) {
|
|
wildCardJsonFileMap.set(key_1, file);
|
|
}
|
|
}
|
|
return "continue";
|
|
}
|
|
if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) {
|
|
return "continue";
|
|
}
|
|
removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper);
|
|
var key = keyMapper(file);
|
|
if (!literalFileMap.has(key) && !wildcardFileMap.has(key)) {
|
|
wildcardFileMap.set(key, file);
|
|
}
|
|
};
|
|
for (var _a = 0, _b = host.readDirectory(basePath, ts.flatten(supportedExtensionsWithJsonIfResolveJsonModule), validatedExcludeSpecs, validatedIncludeSpecs, undefined); _a < _b.length; _a++) {
|
|
var file = _b[_a];
|
|
_loop_6(file);
|
|
}
|
|
}
|
|
var literalFiles = ts.arrayFrom(literalFileMap.values());
|
|
var wildcardFiles = ts.arrayFrom(wildcardFileMap.values());
|
|
return literalFiles.concat(wildcardFiles, ts.arrayFrom(wildCardJsonFileMap.values()));
|
|
}
|
|
ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs;
|
|
function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames, currentDirectory) {
|
|
var validatedFilesSpec = spec.validatedFilesSpec, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs;
|
|
if (!ts.length(validatedIncludeSpecs) || !ts.length(validatedExcludeSpecs))
|
|
return false;
|
|
basePath = ts.normalizePath(basePath);
|
|
var keyMapper = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
if (validatedFilesSpec) {
|
|
for (var _i = 0, validatedFilesSpec_2 = validatedFilesSpec; _i < validatedFilesSpec_2.length; _i++) {
|
|
var fileName = validatedFilesSpec_2[_i];
|
|
if (keyMapper(ts.getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck)
|
|
return false;
|
|
}
|
|
}
|
|
return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
|
|
}
|
|
ts.isExcludedFile = isExcludedFile;
|
|
function invalidDotDotAfterRecursiveWildcard(s) {
|
|
var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
|
|
if (wildcardIndex === -1) {
|
|
return false;
|
|
}
|
|
var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
|
|
return lastDotIndex > wildcardIndex;
|
|
}
|
|
function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
|
|
return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
|
|
}
|
|
ts.matchesExclude = matchesExclude;
|
|
function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
|
|
var excludePattern = ts.getRegularExpressionForWildcard(excludeSpecs, ts.combinePaths(ts.normalizePath(currentDirectory), basePath), "exclude");
|
|
var excludeRegex = excludePattern && ts.getRegexFromPattern(excludePattern, useCaseSensitiveFileNames);
|
|
if (!excludeRegex)
|
|
return false;
|
|
if (excludeRegex.test(pathToCheck))
|
|
return true;
|
|
return !ts.hasExtension(pathToCheck) && excludeRegex.test(ts.ensureTrailingDirectorySeparator(pathToCheck));
|
|
}
|
|
function validateSpecs(specs, errors, disallowTrailingRecursion, jsonSourceFile, specKey) {
|
|
return specs.filter(function (spec) {
|
|
if (!ts.isString(spec))
|
|
return false;
|
|
var diag = specToDiagnostic(spec, disallowTrailingRecursion);
|
|
if (diag !== undefined) {
|
|
errors.push(createDiagnostic.apply(void 0, diag));
|
|
}
|
|
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, disallowTrailingRecursion) {
|
|
if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
|
|
return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
|
|
}
|
|
else if (invalidDotDotAfterRecursiveWildcard(spec)) {
|
|
return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
|
|
}
|
|
}
|
|
function getWildcardDirectories(_a, path, useCaseSensitiveFileNames) {
|
|
var include = _a.validatedIncludeSpecs, exclude = _a.validatedExcludeSpecs;
|
|
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 _b = 0, recursiveKeys_1 = recursiveKeys; _b < recursiveKeys_1.length; _b++) {
|
|
var recursiveKey = recursiveKeys_1[_b];
|
|
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) {
|
|
var questionWildcardIndex = spec.indexOf("?");
|
|
var starWildcardIndex = spec.indexOf("*");
|
|
var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
|
|
return {
|
|
key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
|
|
flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
|
|
|| (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
|
|
? 1 : 0
|
|
};
|
|
}
|
|
if (ts.isImplicitGlob(spec.substring(spec.lastIndexOf(ts.directorySeparator) + 1))) {
|
|
return {
|
|
key: ts.removeTrailingDirectorySeparator(useCaseSensitiveFileNames ? spec : ts.toFileNameLowerCase(spec)),
|
|
flags: 1
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|
|
function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) {
|
|
var extensionGroup = ts.forEach(extensions, function (group) { return ts.fileExtensionIsOneOf(file, group) ? group : undefined; });
|
|
if (!extensionGroup) {
|
|
return false;
|
|
}
|
|
for (var _i = 0, extensionGroup_1 = extensionGroup; _i < extensionGroup_1.length; _i++) {
|
|
var ext = extensionGroup_1[_i];
|
|
if (ts.fileExtensionIs(file, ext)) {
|
|
return false;
|
|
}
|
|
var higherPriorityPath = keyMapper(ts.changeExtension(file, ext));
|
|
if (literalFiles.has(higherPriorityPath) || wildcardFiles.has(higherPriorityPath)) {
|
|
if (ext === ".d.ts" && (ts.fileExtensionIs(file, ".js") || ts.fileExtensionIs(file, ".jsx"))) {
|
|
continue;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) {
|
|
var extensionGroup = ts.forEach(extensions, function (group) { return ts.fileExtensionIsOneOf(file, group) ? group : undefined; });
|
|
if (!extensionGroup) {
|
|
return;
|
|
}
|
|
for (var i = extensionGroup.length - 1; i >= 0; i--) {
|
|
var ext = extensionGroup[i];
|
|
if (ts.fileExtensionIs(file, ext)) {
|
|
return;
|
|
}
|
|
var lowerPriorityPath = keyMapper(ts.changeExtension(file, ext));
|
|
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;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function getDefaultValueForOption(option) {
|
|
switch (option.type) {
|
|
case "number":
|
|
return 1;
|
|
case "boolean":
|
|
return true;
|
|
case "string":
|
|
var defaultValue = option.defaultValueDescription;
|
|
return option.isFilePath ? "./".concat(defaultValue && typeof defaultValue === "string" ? defaultValue : "") : "";
|
|
case "list":
|
|
return [];
|
|
case "object":
|
|
return {};
|
|
default:
|
|
var iterResult = option.type.keys().next();
|
|
if (!iterResult.done)
|
|
return iterResult.value;
|
|
return ts.Debug.fail("Expected 'option.type' to have entries.");
|
|
}
|
|
}
|
|
})(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(packageInfo, r) {
|
|
var packageId;
|
|
if (r && packageInfo) {
|
|
var packageJsonContent = packageInfo.packageJsonContent;
|
|
if (typeof packageJsonContent.name === "string" && typeof packageJsonContent.version === "string") {
|
|
packageId = {
|
|
name: packageJsonContent.name,
|
|
subModuleName: r.path.slice(packageInfo.packageDirectory.length + ts.directorySeparator.length),
|
|
version: packageJsonContent.version
|
|
};
|
|
}
|
|
}
|
|
return r && { path: r.path, extension: r.ext, packageId: packageId };
|
|
}
|
|
function noPackageId(r) {
|
|
return withPackageId(undefined, r);
|
|
}
|
|
function removeIgnoredPackageId(r) {
|
|
if (r) {
|
|
ts.Debug.assert(r.packageId === undefined);
|
|
return { path: r.path, ext: r.extension };
|
|
}
|
|
}
|
|
var Extensions;
|
|
(function (Extensions) {
|
|
Extensions[Extensions["TypeScript"] = 0] = "TypeScript";
|
|
Extensions[Extensions["JavaScript"] = 1] = "JavaScript";
|
|
Extensions[Extensions["Json"] = 2] = "Json";
|
|
Extensions[Extensions["TSConfig"] = 3] = "TSConfig";
|
|
Extensions[Extensions["DtsOnly"] = 4] = "DtsOnly";
|
|
Extensions[Extensions["TsOnly"] = 5] = "TsOnly";
|
|
})(Extensions || (Extensions = {}));
|
|
function resolvedTypeScriptOnly(resolved) {
|
|
if (!resolved) {
|
|
return undefined;
|
|
}
|
|
ts.Debug.assert(ts.extensionIsTS(resolved.extension));
|
|
return { fileName: resolved.path, packageId: resolved.packageId };
|
|
}
|
|
function createResolvedModuleWithFailedLookupLocations(resolved, isExternalLibraryImport, failedLookupLocations, affectingLocations, diagnostics, resultFromCache) {
|
|
var _a, _b;
|
|
if (resultFromCache) {
|
|
(_a = resultFromCache.failedLookupLocations).push.apply(_a, failedLookupLocations);
|
|
(_b = resultFromCache.affectingLocations).push.apply(_b, affectingLocations);
|
|
return resultFromCache;
|
|
}
|
|
return {
|
|
resolvedModule: resolved && { resolvedFileName: resolved.path, originalPath: resolved.originalPath === true ? undefined : resolved.originalPath, extension: resolved.extension, isExternalLibraryImport: isExternalLibraryImport, packageId: resolved.packageId },
|
|
failedLookupLocations: failedLookupLocations,
|
|
affectingLocations: affectingLocations,
|
|
resolutionDiagnostics: diagnostics,
|
|
};
|
|
}
|
|
function readPackageJsonField(jsonContent, fieldName, typeOfTag, state) {
|
|
if (!ts.hasProperty(jsonContent, fieldName)) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_does_not_have_a_0_field, fieldName);
|
|
}
|
|
return;
|
|
}
|
|
var value = jsonContent[fieldName];
|
|
if (typeof value !== typeOfTag || value === null) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, fieldName, typeOfTag, value === null ? "null" : typeof value);
|
|
}
|
|
return;
|
|
}
|
|
return value;
|
|
}
|
|
function readPackageJsonPathField(jsonContent, fieldName, baseDirectory, state) {
|
|
var fileName = readPackageJsonField(jsonContent, fieldName, "string", state);
|
|
if (fileName === undefined) {
|
|
return;
|
|
}
|
|
if (!fileName) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_had_a_falsy_0_field, fieldName);
|
|
}
|
|
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 readPackageJsonTypesFields(jsonContent, baseDirectory, state) {
|
|
return readPackageJsonPathField(jsonContent, "typings", baseDirectory, state)
|
|
|| readPackageJsonPathField(jsonContent, "types", baseDirectory, state);
|
|
}
|
|
function readPackageJsonTSConfigField(jsonContent, baseDirectory, state) {
|
|
return readPackageJsonPathField(jsonContent, "tsconfig", baseDirectory, state);
|
|
}
|
|
function readPackageJsonMainField(jsonContent, baseDirectory, state) {
|
|
return readPackageJsonPathField(jsonContent, "main", baseDirectory, state);
|
|
}
|
|
function readPackageJsonTypesVersionsField(jsonContent, state) {
|
|
var typesVersions = readPackageJsonField(jsonContent, "typesVersions", "object", state);
|
|
if (typesVersions === undefined)
|
|
return;
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_field_with_version_specific_path_mappings);
|
|
}
|
|
return typesVersions;
|
|
}
|
|
function readPackageJsonTypesVersionPaths(jsonContent, state) {
|
|
var typesVersions = readPackageJsonTypesVersionsField(jsonContent, state);
|
|
if (typesVersions === undefined)
|
|
return;
|
|
if (state.traceEnabled) {
|
|
for (var key in typesVersions) {
|
|
if (ts.hasProperty(typesVersions, key) && !ts.VersionRange.tryParse(key)) {
|
|
trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range, key);
|
|
}
|
|
}
|
|
}
|
|
var result = getPackageJsonTypesVersionsPaths(typesVersions);
|
|
if (!result) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_does_not_have_a_typesVersions_entry_that_matches_version_0, ts.versionMajorMinor);
|
|
}
|
|
return;
|
|
}
|
|
var bestVersionKey = result.version, bestVersionPaths = result.paths;
|
|
if (typeof bestVersionPaths !== "object") {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, "typesVersions['".concat(bestVersionKey, "']"), "object", typeof bestVersionPaths);
|
|
}
|
|
return;
|
|
}
|
|
return result;
|
|
}
|
|
var typeScriptVersion;
|
|
function getPackageJsonTypesVersionsPaths(typesVersions) {
|
|
if (!typeScriptVersion)
|
|
typeScriptVersion = new ts.Version(ts.version);
|
|
for (var key in typesVersions) {
|
|
if (!ts.hasProperty(typesVersions, key))
|
|
continue;
|
|
var keyRange = ts.VersionRange.tryParse(key);
|
|
if (keyRange === undefined) {
|
|
continue;
|
|
}
|
|
if (keyRange.test(typeScriptVersion)) {
|
|
return { version: key, paths: typesVersions[key] };
|
|
}
|
|
}
|
|
}
|
|
ts.getPackageJsonTypesVersionsPaths = getPackageJsonTypesVersionsPaths;
|
|
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 arePathsEqual(path1, path2, host) {
|
|
var useCaseSensitiveFileNames = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames;
|
|
return ts.comparePaths(path1, path2, !useCaseSensitiveFileNames) === 0;
|
|
}
|
|
function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, cache, resolutionMode) {
|
|
ts.Debug.assert(typeof typeReferenceDirectiveName === "string", "Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.");
|
|
var traceEnabled = isTraceEnabled(options, host);
|
|
if (redirectedReference) {
|
|
options = redirectedReference.commandLine.options;
|
|
}
|
|
var containingDirectory = containingFile ? ts.getDirectoryPath(containingFile) : undefined;
|
|
var perFolderCache = containingDirectory ? cache && cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference) : undefined;
|
|
var result = perFolderCache && perFolderCache.get(typeReferenceDirectiveName, resolutionMode);
|
|
if (result) {
|
|
if (traceEnabled) {
|
|
trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1, typeReferenceDirectiveName, containingFile);
|
|
if (redirectedReference)
|
|
trace(host, ts.Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName);
|
|
trace(host, ts.Diagnostics.Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1, typeReferenceDirectiveName, containingDirectory);
|
|
traceResult(result);
|
|
}
|
|
return result;
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
if (redirectedReference) {
|
|
trace(host, ts.Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName);
|
|
}
|
|
}
|
|
var failedLookupLocations = [];
|
|
var affectingLocations = [];
|
|
var features = getDefaultNodeResolutionFeatures(options);
|
|
if (resolutionMode === ts.ModuleKind.ESNext && (ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.Node16 || ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.NodeNext)) {
|
|
features |= NodeResolutionFeatures.EsmMode;
|
|
}
|
|
var conditions = features & NodeResolutionFeatures.Exports ? features & NodeResolutionFeatures.EsmMode ? ["node", "import", "types"] : ["node", "require", "types"] : [];
|
|
var diagnostics = [];
|
|
var moduleResolutionState = {
|
|
compilerOptions: options,
|
|
host: host,
|
|
traceEnabled: traceEnabled,
|
|
failedLookupLocations: failedLookupLocations,
|
|
affectingLocations: affectingLocations,
|
|
packageJsonInfoCache: cache,
|
|
features: features,
|
|
conditions: conditions,
|
|
requestContainingDirectory: containingDirectory,
|
|
reportDiagnostic: function (diag) { return void diagnostics.push(diag); },
|
|
};
|
|
var resolved = primaryLookup();
|
|
var primary = true;
|
|
if (!resolved) {
|
|
resolved = secondaryLookup();
|
|
primary = false;
|
|
}
|
|
var resolvedTypeReferenceDirective;
|
|
if (resolved) {
|
|
var fileName = resolved.fileName, packageId = resolved.packageId;
|
|
var resolvedFileName = options.preserveSymlinks ? fileName : realPath(fileName, host, traceEnabled);
|
|
var pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host);
|
|
resolvedTypeReferenceDirective = {
|
|
primary: primary,
|
|
resolvedFileName: pathsAreEqual ? fileName : resolvedFileName,
|
|
originalPath: pathsAreEqual ? undefined : fileName,
|
|
packageId: packageId,
|
|
isExternalLibraryImport: pathContainsNodeModules(fileName),
|
|
};
|
|
}
|
|
result = { resolvedTypeReferenceDirective: resolvedTypeReferenceDirective, failedLookupLocations: failedLookupLocations, affectingLocations: affectingLocations, resolutionDiagnostics: diagnostics };
|
|
perFolderCache === null || perFolderCache === void 0 ? void 0 : perFolderCache.set(typeReferenceDirectiveName, resolutionMode, result);
|
|
if (traceEnabled)
|
|
traceResult(result);
|
|
return result;
|
|
function traceResult(result) {
|
|
var _a;
|
|
if (!((_a = result.resolvedTypeReferenceDirective) === null || _a === void 0 ? void 0 : _a.resolvedFileName)) {
|
|
trace(host, ts.Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName);
|
|
}
|
|
else if (result.resolvedTypeReferenceDirective.packageId) {
|
|
trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3, typeReferenceDirectiveName, result.resolvedTypeReferenceDirective.resolvedFileName, ts.packageIdToString(result.resolvedTypeReferenceDirective.packageId), result.resolvedTypeReferenceDirective.primary);
|
|
}
|
|
else {
|
|
trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, result.resolvedTypeReferenceDirective.resolvedFileName, result.resolvedTypeReferenceDirective.primary);
|
|
}
|
|
}
|
|
function primaryLookup() {
|
|
if (typeRoots && typeRoots.length) {
|
|
if (traceEnabled) {
|
|
trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", "));
|
|
}
|
|
return ts.firstDefined(typeRoots, function (typeRoot) {
|
|
var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName);
|
|
var candidateDirectory = ts.getDirectoryPath(candidate);
|
|
var directoryExists = ts.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, !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_4;
|
|
if (!ts.isExternalModuleNameRelative(typeReferenceDirectiveName)) {
|
|
var searchResult = loadModuleFromNearestNodeModulesDirectory(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, moduleResolutionState, undefined, undefined);
|
|
result_4 = searchResult && searchResult.value;
|
|
}
|
|
else {
|
|
var candidate = normalizePathForCJSResolution(initialLocationForSecondaryLookup, typeReferenceDirectiveName).path;
|
|
result_4 = nodeLoadModuleByRelativeName(Extensions.DtsOnly, candidate, false, moduleResolutionState, true);
|
|
}
|
|
return resolvedTypeScriptOnly(result_4);
|
|
}
|
|
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 getDefaultNodeResolutionFeatures(options) {
|
|
return ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.Node16 ? NodeResolutionFeatures.Node16Default :
|
|
ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.NodeNext ? NodeResolutionFeatures.NodeNextDefault :
|
|
NodeResolutionFeatures.None;
|
|
}
|
|
function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) {
|
|
var moduleResolutionState = getTemporaryModuleResolutionState(cache === null || cache === void 0 ? void 0 : cache.getPackageJsonInfoCache(), host, options);
|
|
return ts.forEachAncestorDirectory(containingDirectory, function (ancestorDirectory) {
|
|
if (ts.getBaseFileName(ancestorDirectory) !== "node_modules") {
|
|
var nodeModulesFolder = ts.combinePaths(ancestorDirectory, "node_modules");
|
|
var candidate = ts.combinePaths(nodeModulesFolder, packageName);
|
|
return getPackageJsonInfo(candidate, false, moduleResolutionState);
|
|
}
|
|
});
|
|
}
|
|
ts.resolvePackageNameToPackageJson = resolvePackageNameToPackageJson;
|
|
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 = ts.combinePaths(root, normalized, "package.json");
|
|
var isNotNeededPackage = host.fileExists(packageJsonPath) && ts.readJson(packageJsonPath, host).typings === null;
|
|
if (!isNotNeededPackage) {
|
|
var baseFileName = ts.getBaseFileName(normalized);
|
|
if (baseFileName.charCodeAt(0) !== 46) {
|
|
result.push(baseFileName);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames;
|
|
function createCacheWithRedirects(options) {
|
|
var ownMap = new ts.Map();
|
|
var redirectsMap = new ts.Map();
|
|
return {
|
|
getOwnMap: getOwnMap,
|
|
redirectsMap: redirectsMap,
|
|
getOrCreateMapOfCacheRedirects: getOrCreateMapOfCacheRedirects,
|
|
clear: clear,
|
|
setOwnOptions: setOwnOptions,
|
|
setOwnMap: setOwnMap
|
|
};
|
|
function getOwnMap() {
|
|
return ownMap;
|
|
}
|
|
function setOwnOptions(newOptions) {
|
|
options = newOptions;
|
|
}
|
|
function setOwnMap(newOwnMap) {
|
|
ownMap = newOwnMap;
|
|
}
|
|
function getOrCreateMapOfCacheRedirects(redirectedReference) {
|
|
if (!redirectedReference) {
|
|
return ownMap;
|
|
}
|
|
var path = redirectedReference.sourceFile.path;
|
|
var redirects = redirectsMap.get(path);
|
|
if (!redirects) {
|
|
redirects = !options || ts.optionsHaveModuleResolutionChanges(options, redirectedReference.commandLine.options) ? new ts.Map() : ownMap;
|
|
redirectsMap.set(path, redirects);
|
|
}
|
|
return redirects;
|
|
}
|
|
function clear() {
|
|
ownMap.clear();
|
|
redirectsMap.clear();
|
|
}
|
|
}
|
|
ts.createCacheWithRedirects = createCacheWithRedirects;
|
|
function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
|
|
var cache;
|
|
return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries, getInternalMap: getInternalMap };
|
|
function getPackageJsonInfo(packageJsonPath) {
|
|
return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
|
|
}
|
|
function setPackageJsonInfo(packageJsonPath, info) {
|
|
(cache || (cache = new ts.Map())).set(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName), info);
|
|
}
|
|
function clear() {
|
|
cache = undefined;
|
|
}
|
|
function entries() {
|
|
var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
|
|
return iter ? ts.arrayFrom(iter) : [];
|
|
}
|
|
function getInternalMap() {
|
|
return cache;
|
|
}
|
|
}
|
|
function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
|
|
var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
|
|
var result = cache.get(key);
|
|
if (!result) {
|
|
result = create();
|
|
cache.set(key, result);
|
|
}
|
|
return result;
|
|
}
|
|
function updateRedirectsMap(options, directoryToModuleNameMap, moduleNameToDirectoryMap) {
|
|
if (!options.configFile)
|
|
return;
|
|
if (directoryToModuleNameMap.redirectsMap.size === 0) {
|
|
ts.Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.redirectsMap.size === 0);
|
|
ts.Debug.assert(directoryToModuleNameMap.getOwnMap().size === 0);
|
|
ts.Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.getOwnMap().size === 0);
|
|
directoryToModuleNameMap.redirectsMap.set(options.configFile.path, directoryToModuleNameMap.getOwnMap());
|
|
moduleNameToDirectoryMap === null || moduleNameToDirectoryMap === void 0 ? void 0 : moduleNameToDirectoryMap.redirectsMap.set(options.configFile.path, moduleNameToDirectoryMap.getOwnMap());
|
|
}
|
|
else {
|
|
ts.Debug.assert(!moduleNameToDirectoryMap || moduleNameToDirectoryMap.redirectsMap.size > 0);
|
|
var ref = {
|
|
sourceFile: options.configFile,
|
|
commandLine: { options: options }
|
|
};
|
|
directoryToModuleNameMap.setOwnMap(directoryToModuleNameMap.getOrCreateMapOfCacheRedirects(ref));
|
|
moduleNameToDirectoryMap === null || moduleNameToDirectoryMap === void 0 ? void 0 : moduleNameToDirectoryMap.setOwnMap(moduleNameToDirectoryMap.getOrCreateMapOfCacheRedirects(ref));
|
|
}
|
|
directoryToModuleNameMap.setOwnOptions(options);
|
|
moduleNameToDirectoryMap === null || moduleNameToDirectoryMap === void 0 ? void 0 : moduleNameToDirectoryMap.setOwnOptions(options);
|
|
}
|
|
function createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap) {
|
|
return {
|
|
getOrCreateCacheForDirectory: getOrCreateCacheForDirectory,
|
|
clear: clear,
|
|
update: update,
|
|
};
|
|
function clear() {
|
|
directoryToModuleNameMap.clear();
|
|
}
|
|
function update(options) {
|
|
updateRedirectsMap(options, directoryToModuleNameMap);
|
|
}
|
|
function getOrCreateCacheForDirectory(directoryName, redirectedReference) {
|
|
var path = ts.toPath(directoryName, currentDirectory, getCanonicalFileName);
|
|
return getOrCreateCache(directoryToModuleNameMap, redirectedReference, path, function () { return createModeAwareCache(); });
|
|
}
|
|
}
|
|
function createModeAwareCache() {
|
|
var underlying = new ts.Map();
|
|
var memoizedReverseKeys = new ts.Map();
|
|
var cache = {
|
|
get: function (specifier, mode) {
|
|
return underlying.get(getUnderlyingCacheKey(specifier, mode));
|
|
},
|
|
set: function (specifier, mode, value) {
|
|
underlying.set(getUnderlyingCacheKey(specifier, mode), value);
|
|
return cache;
|
|
},
|
|
delete: function (specifier, mode) {
|
|
underlying.delete(getUnderlyingCacheKey(specifier, mode));
|
|
return cache;
|
|
},
|
|
has: function (specifier, mode) {
|
|
return underlying.has(getUnderlyingCacheKey(specifier, mode));
|
|
},
|
|
forEach: function (cb) {
|
|
return underlying.forEach(function (elem, key) {
|
|
var _a = memoizedReverseKeys.get(key), specifier = _a[0], mode = _a[1];
|
|
return cb(elem, specifier, mode);
|
|
});
|
|
},
|
|
size: function () {
|
|
return underlying.size;
|
|
}
|
|
};
|
|
return cache;
|
|
function getUnderlyingCacheKey(specifier, mode) {
|
|
var result = mode === undefined ? specifier : "".concat(mode, "|").concat(specifier);
|
|
memoizedReverseKeys.set(result, [specifier, mode]);
|
|
return result;
|
|
}
|
|
}
|
|
ts.createModeAwareCache = createModeAwareCache;
|
|
function zipToModeAwareCache(file, keys, values) {
|
|
ts.Debug.assert(keys.length === values.length);
|
|
var map = createModeAwareCache();
|
|
for (var i = 0; i < keys.length; ++i) {
|
|
var entry = keys[i];
|
|
var name = !ts.isString(entry) ? entry.fileName.toLowerCase() : entry;
|
|
var mode = !ts.isString(entry) ? entry.resolutionMode || file.impliedNodeFormat : ts.getModeForResolutionAtIndex(file, i);
|
|
map.set(name, mode, values[i]);
|
|
}
|
|
return map;
|
|
}
|
|
ts.zipToModeAwareCache = zipToModeAwareCache;
|
|
function createModuleResolutionCache(currentDirectory, getCanonicalFileName, options, directoryToModuleNameMap, moduleNameToDirectoryMap) {
|
|
var perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap || (directoryToModuleNameMap = createCacheWithRedirects(options)));
|
|
moduleNameToDirectoryMap || (moduleNameToDirectoryMap = createCacheWithRedirects(options));
|
|
var packageJsonInfoCache = createPackageJsonInfoCache(currentDirectory, getCanonicalFileName);
|
|
return __assign(__assign(__assign({}, packageJsonInfoCache), perDirectoryResolutionCache), { getOrCreateCacheForModuleName: getOrCreateCacheForModuleName, clear: clear, update: update, getPackageJsonInfoCache: function () { return packageJsonInfoCache; }, clearAllExceptPackageJsonInfoCache: clearAllExceptPackageJsonInfoCache });
|
|
function clear() {
|
|
clearAllExceptPackageJsonInfoCache();
|
|
packageJsonInfoCache.clear();
|
|
}
|
|
function clearAllExceptPackageJsonInfoCache() {
|
|
perDirectoryResolutionCache.clear();
|
|
moduleNameToDirectoryMap.clear();
|
|
}
|
|
function update(options) {
|
|
updateRedirectsMap(options, directoryToModuleNameMap, moduleNameToDirectoryMap);
|
|
}
|
|
function getOrCreateCacheForModuleName(nonRelativeModuleName, mode, redirectedReference) {
|
|
ts.Debug.assert(!ts.isExternalModuleNameRelative(nonRelativeModuleName));
|
|
return getOrCreateCache(moduleNameToDirectoryMap, redirectedReference, mode === undefined ? nonRelativeModuleName : "".concat(mode, "|").concat(nonRelativeModuleName), createPerModuleNameCache);
|
|
}
|
|
function createPerModuleNameCache() {
|
|
var directoryPathMap = new ts.Map();
|
|
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.originalPath || result.resolvedModule.resolvedFileName);
|
|
var commonPrefix = resolvedFileName && getCommonPrefix(path, resolvedFileName);
|
|
var current = path;
|
|
while (current !== commonPrefix) {
|
|
var parent = ts.getDirectoryPath(current);
|
|
if (parent === current || directoryPathMap.has(parent)) {
|
|
break;
|
|
}
|
|
directoryPathMap.set(parent, result);
|
|
current = parent;
|
|
}
|
|
}
|
|
function getCommonPrefix(directory, resolution) {
|
|
var resolutionDirectory = ts.toPath(ts.getDirectoryPath(resolution), currentDirectory, getCanonicalFileName);
|
|
var i = 0;
|
|
var limit = Math.min(directory.length, resolutionDirectory.length);
|
|
while (i < limit && directory.charCodeAt(i) === resolutionDirectory.charCodeAt(i)) {
|
|
i++;
|
|
}
|
|
if (i === directory.length && (resolutionDirectory.length === i || resolutionDirectory[i] === ts.directorySeparator)) {
|
|
return directory;
|
|
}
|
|
var rootLength = ts.getRootLength(directory);
|
|
if (i < rootLength) {
|
|
return undefined;
|
|
}
|
|
var sep = directory.lastIndexOf(ts.directorySeparator, i - 1);
|
|
if (sep === -1) {
|
|
return undefined;
|
|
}
|
|
return directory.substr(0, Math.max(sep, rootLength));
|
|
}
|
|
}
|
|
}
|
|
ts.createModuleResolutionCache = createModuleResolutionCache;
|
|
function createTypeReferenceDirectiveResolutionCache(currentDirectory, getCanonicalFileName, options, packageJsonInfoCache, directoryToModuleNameMap) {
|
|
var perDirectoryResolutionCache = createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, directoryToModuleNameMap || (directoryToModuleNameMap = createCacheWithRedirects(options)));
|
|
packageJsonInfoCache || (packageJsonInfoCache = createPackageJsonInfoCache(currentDirectory, getCanonicalFileName));
|
|
return __assign(__assign(__assign({}, packageJsonInfoCache), perDirectoryResolutionCache), { clear: clear, clearAllExceptPackageJsonInfoCache: clearAllExceptPackageJsonInfoCache });
|
|
function clear() {
|
|
clearAllExceptPackageJsonInfoCache();
|
|
packageJsonInfoCache.clear();
|
|
}
|
|
function clearAllExceptPackageJsonInfoCache() {
|
|
perDirectoryResolutionCache.clear();
|
|
}
|
|
}
|
|
ts.createTypeReferenceDirectiveResolutionCache = createTypeReferenceDirectiveResolutionCache;
|
|
function resolveModuleNameFromCache(moduleName, containingFile, cache, mode) {
|
|
var containingDirectory = ts.getDirectoryPath(containingFile);
|
|
var perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory);
|
|
if (!perFolderCache)
|
|
return undefined;
|
|
return perFolderCache.get(moduleName, mode);
|
|
}
|
|
ts.resolveModuleNameFromCache = resolveModuleNameFromCache;
|
|
function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) {
|
|
var traceEnabled = isTraceEnabled(compilerOptions, host);
|
|
if (redirectedReference) {
|
|
compilerOptions = redirectedReference.commandLine.options;
|
|
}
|
|
if (traceEnabled) {
|
|
trace(host, ts.Diagnostics.Resolving_module_0_from_1, moduleName, containingFile);
|
|
if (redirectedReference) {
|
|
trace(host, ts.Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName);
|
|
}
|
|
}
|
|
var containingDirectory = ts.getDirectoryPath(containingFile);
|
|
var perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference);
|
|
var result = perFolderCache && perFolderCache.get(moduleName, resolutionMode);
|
|
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) {
|
|
switch (ts.getEmitModuleKind(compilerOptions)) {
|
|
case ts.ModuleKind.CommonJS:
|
|
moduleResolution = ts.ModuleResolutionKind.NodeJs;
|
|
break;
|
|
case ts.ModuleKind.Node16:
|
|
moduleResolution = ts.ModuleResolutionKind.Node16;
|
|
break;
|
|
case ts.ModuleKind.NodeNext:
|
|
moduleResolution = ts.ModuleResolutionKind.NodeNext;
|
|
break;
|
|
default:
|
|
moduleResolution = ts.ModuleResolutionKind.Classic;
|
|
break;
|
|
}
|
|
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]);
|
|
}
|
|
}
|
|
ts.perfLogger.logStartResolveModule(moduleName);
|
|
switch (moduleResolution) {
|
|
case ts.ModuleResolutionKind.Node16:
|
|
result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode);
|
|
break;
|
|
case ts.ModuleResolutionKind.NodeNext:
|
|
result = nodeNextModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode);
|
|
break;
|
|
case ts.ModuleResolutionKind.NodeJs:
|
|
result = nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference);
|
|
break;
|
|
case ts.ModuleResolutionKind.Classic:
|
|
result = classicNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference);
|
|
break;
|
|
default:
|
|
return ts.Debug.fail("Unexpected moduleResolution: ".concat(moduleResolution));
|
|
}
|
|
if (result && result.resolvedModule)
|
|
ts.perfLogger.logInfoEvent("Module \"".concat(moduleName, "\" resolved to \"").concat(result.resolvedModule.resolvedFileName, "\""));
|
|
ts.perfLogger.logStopResolveModule((result && result.resolvedModule) ? "" + result.resolvedModule.resolvedFileName : "null");
|
|
if (perFolderCache) {
|
|
perFolderCache.set(moduleName, resolutionMode, result);
|
|
if (!ts.isExternalModuleNameRelative(moduleName)) {
|
|
cache.getOrCreateCacheForModuleName(moduleName, resolutionMode, redirectedReference).set(containingDirectory, result);
|
|
}
|
|
}
|
|
}
|
|
if (traceEnabled) {
|
|
if (result.resolvedModule) {
|
|
if (result.resolvedModule.packageId) {
|
|
trace(host, ts.Diagnostics.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2, moduleName, result.resolvedModule.resolvedFileName, ts.packageIdToString(result.resolvedModule.packageId));
|
|
}
|
|
else {
|
|
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, state) {
|
|
var resolved = tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state);
|
|
if (resolved)
|
|
return resolved.value;
|
|
if (!ts.isExternalModuleNameRelative(moduleName)) {
|
|
return tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, state);
|
|
}
|
|
else {
|
|
return tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state);
|
|
}
|
|
}
|
|
function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
|
|
var _a;
|
|
var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
|
|
if (paths && !ts.pathIsRelative(moduleName)) {
|
|
if (state.traceEnabled) {
|
|
if (baseUrl) {
|
|
trace(state.host, ts.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1, baseUrl, moduleName);
|
|
}
|
|
trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
|
|
}
|
|
var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host);
|
|
var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
|
|
return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, false, state);
|
|
}
|
|
}
|
|
function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, 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, !ts.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, !ts.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, state) {
|
|
var baseUrl = state.compilerOptions.baseUrl;
|
|
if (!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, baseUrl, moduleName);
|
|
}
|
|
var candidate = ts.normalizePath(ts.combinePaths(baseUrl, moduleName));
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2, moduleName, baseUrl, candidate);
|
|
}
|
|
return loader(extensions, candidate, !ts.directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state);
|
|
}
|
|
function resolveJSModule(moduleName, initialDir, host) {
|
|
var _a = tryResolveJSModuleWorker(moduleName, initialDir, host), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations;
|
|
if (!resolvedModule) {
|
|
throw new Error("Could not resolve JS module '".concat(moduleName, "' starting at '").concat(initialDir, "'. Looked in: ").concat(failedLookupLocations.join(", ")));
|
|
}
|
|
return resolvedModule.resolvedFileName;
|
|
}
|
|
ts.resolveJSModule = resolveJSModule;
|
|
var NodeResolutionFeatures;
|
|
(function (NodeResolutionFeatures) {
|
|
NodeResolutionFeatures[NodeResolutionFeatures["None"] = 0] = "None";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["Imports"] = 2] = "Imports";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["SelfName"] = 4] = "SelfName";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["Exports"] = 8] = "Exports";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["ExportsPatternTrailers"] = 16] = "ExportsPatternTrailers";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["AllFeatures"] = 30] = "AllFeatures";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["Node16Default"] = 30] = "Node16Default";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["NodeNextDefault"] = 30] = "NodeNextDefault";
|
|
NodeResolutionFeatures[NodeResolutionFeatures["EsmMode"] = 32] = "EsmMode";
|
|
})(NodeResolutionFeatures || (NodeResolutionFeatures = {}));
|
|
function node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) {
|
|
return nodeNextModuleNameResolverWorker(NodeResolutionFeatures.Node16Default, moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode);
|
|
}
|
|
function nodeNextModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) {
|
|
return nodeNextModuleNameResolverWorker(NodeResolutionFeatures.NodeNextDefault, moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode);
|
|
}
|
|
var jsOnlyExtensions = [Extensions.JavaScript];
|
|
var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
|
|
var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
|
|
var tsconfigExtensions = [Extensions.TSConfig];
|
|
function nodeNextModuleNameResolverWorker(features, moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) {
|
|
var containingDirectory = ts.getDirectoryPath(containingFile);
|
|
var esmMode = resolutionMode === ts.ModuleKind.ESNext ? NodeResolutionFeatures.EsmMode : 0;
|
|
var extensions = compilerOptions.noDtsResolution ? [Extensions.TsOnly, Extensions.JavaScript] : tsExtensions;
|
|
if (compilerOptions.resolveJsonModule) {
|
|
extensions = __spreadArray(__spreadArray([], extensions, true), [Extensions.Json], false);
|
|
}
|
|
return nodeModuleNameResolverWorker(features | esmMode, moduleName, containingDirectory, compilerOptions, host, cache, extensions, redirectedReference);
|
|
}
|
|
function tryResolveJSModuleWorker(moduleName, initialDir, host) {
|
|
return nodeModuleNameResolverWorker(NodeResolutionFeatures.None, moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, undefined, jsOnlyExtensions, undefined);
|
|
}
|
|
function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, lookupConfig) {
|
|
var extensions;
|
|
if (lookupConfig) {
|
|
extensions = tsconfigExtensions;
|
|
}
|
|
else if (compilerOptions.noDtsResolution) {
|
|
extensions = [Extensions.TsOnly];
|
|
if (compilerOptions.allowJs)
|
|
extensions.push(Extensions.JavaScript);
|
|
if (compilerOptions.resolveJsonModule)
|
|
extensions.push(Extensions.Json);
|
|
}
|
|
else {
|
|
extensions = compilerOptions.resolveJsonModule ? tsPlusJsonExtensions : tsExtensions;
|
|
}
|
|
return nodeModuleNameResolverWorker(NodeResolutionFeatures.None, moduleName, ts.getDirectoryPath(containingFile), compilerOptions, host, cache, extensions, redirectedReference);
|
|
}
|
|
ts.nodeModuleNameResolver = nodeModuleNameResolver;
|
|
function nodeModuleNameResolverWorker(features, moduleName, containingDirectory, compilerOptions, host, cache, extensions, redirectedReference) {
|
|
var _a, _b;
|
|
var traceEnabled = isTraceEnabled(compilerOptions, host);
|
|
var failedLookupLocations = [];
|
|
var affectingLocations = [];
|
|
var conditions = features & NodeResolutionFeatures.EsmMode ? ["node", "import", "types"] : ["node", "require", "types"];
|
|
if (compilerOptions.noDtsResolution) {
|
|
conditions.pop();
|
|
}
|
|
var diagnostics = [];
|
|
var state = {
|
|
compilerOptions: compilerOptions,
|
|
host: host,
|
|
traceEnabled: traceEnabled,
|
|
failedLookupLocations: failedLookupLocations,
|
|
affectingLocations: affectingLocations,
|
|
packageJsonInfoCache: cache,
|
|
features: features,
|
|
conditions: conditions,
|
|
requestContainingDirectory: containingDirectory,
|
|
reportDiagnostic: function (diag) { return void diagnostics.push(diag); },
|
|
};
|
|
var result = ts.forEach(extensions, function (ext) { return tryResolve(ext); });
|
|
return createResolvedModuleWithFailedLookupLocations((_a = result === null || result === void 0 ? void 0 : result.value) === null || _a === void 0 ? void 0 : _a.resolved, (_b = result === null || result === void 0 ? void 0 : result.value) === null || _b === void 0 ? void 0 : _b.isExternalLibraryImport, failedLookupLocations, affectingLocations, diagnostics, state.resultFromCache);
|
|
function tryResolve(extensions) {
|
|
var loader = function (extensions, candidate, onlyRecordFailures, state) { return nodeLoadModuleByRelativeName(extensions, candidate, onlyRecordFailures, state, true); };
|
|
var resolved = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, state);
|
|
if (resolved) {
|
|
return toSearchResult({ resolved: resolved, isExternalLibraryImport: pathContainsNodeModules(resolved.path) });
|
|
}
|
|
if (!ts.isExternalModuleNameRelative(moduleName)) {
|
|
var resolved_1;
|
|
if (features & NodeResolutionFeatures.Imports && ts.startsWith(moduleName, "#")) {
|
|
resolved_1 = loadModuleFromImports(extensions, moduleName, containingDirectory, state, cache, redirectedReference);
|
|
}
|
|
if (!resolved_1 && features & NodeResolutionFeatures.SelfName) {
|
|
resolved_1 = loadModuleFromSelfNameReference(extensions, moduleName, containingDirectory, state, cache, redirectedReference);
|
|
}
|
|
if (!resolved_1) {
|
|
if (traceEnabled) {
|
|
trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]);
|
|
}
|
|
resolved_1 = loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, containingDirectory, state, cache, redirectedReference);
|
|
}
|
|
if (!resolved_1)
|
|
return undefined;
|
|
var resolvedValue = resolved_1.value;
|
|
if (!compilerOptions.preserveSymlinks && resolvedValue && !resolvedValue.originalPath) {
|
|
var path = realPath(resolvedValue.path, host, traceEnabled);
|
|
var pathsAreEqual = arePathsEqual(path, resolvedValue.path, host);
|
|
var originalPath = pathsAreEqual ? undefined : resolvedValue.path;
|
|
resolvedValue = __assign(__assign({}, resolvedValue), { path: pathsAreEqual ? resolvedValue.path : path, originalPath: originalPath });
|
|
}
|
|
return { value: resolvedValue && { resolved: resolvedValue, isExternalLibraryImport: true } };
|
|
}
|
|
else {
|
|
var _a = normalizePathForCJSResolution(containingDirectory, moduleName), candidate = _a.path, parts = _a.parts;
|
|
var resolved_2 = nodeLoadModuleByRelativeName(extensions, candidate, false, state, true);
|
|
return resolved_2 && toSearchResult({ resolved: resolved_2, isExternalLibraryImport: ts.contains(parts, "node_modules") });
|
|
}
|
|
}
|
|
}
|
|
function normalizePathForCJSResolution(containingDirectory, moduleName) {
|
|
var combined = ts.combinePaths(containingDirectory, moduleName);
|
|
var parts = ts.getPathComponents(combined);
|
|
var lastPart = ts.lastOrUndefined(parts);
|
|
var path = lastPart === "." || lastPart === ".." ? ts.ensureTrailingDirectorySeparator(ts.normalizePath(combined)) : ts.normalizePath(combined);
|
|
return { path: path, parts: parts };
|
|
}
|
|
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), "".concat(path, " linked to nonexistent file ").concat(real));
|
|
return real;
|
|
}
|
|
function nodeLoadModuleByRelativeName(extensions, candidate, 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 (!ts.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, onlyRecordFailures, state);
|
|
if (resolvedFromFile) {
|
|
var packageDirectory = considerPackageJson ? parseNodeModuleFromPath(resolvedFromFile.path) : undefined;
|
|
var packageInfo = packageDirectory ? getPackageJsonInfo(packageDirectory, false, state) : undefined;
|
|
return withPackageId(packageInfo, resolvedFromFile);
|
|
}
|
|
}
|
|
if (!onlyRecordFailures) {
|
|
var candidateExists = ts.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;
|
|
}
|
|
}
|
|
if (!(state.features & NodeResolutionFeatures.EsmMode)) {
|
|
return loadNodeModuleFromDirectory(extensions, candidate, onlyRecordFailures, state, considerPackageJson);
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.nodeModulesPathPart = "/node_modules/";
|
|
function pathContainsNodeModules(path) {
|
|
return ts.stringContains(path, ts.nodeModulesPathPart);
|
|
}
|
|
ts.pathContainsNodeModules = pathContainsNodeModules;
|
|
function parseNodeModuleFromPath(resolved) {
|
|
var path = ts.normalizePath(resolved);
|
|
var idx = path.lastIndexOf(ts.nodeModulesPathPart);
|
|
if (idx === -1) {
|
|
return undefined;
|
|
}
|
|
var indexAfterNodeModules = idx + ts.nodeModulesPathPart.length;
|
|
var indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterNodeModules);
|
|
if (path.charCodeAt(indexAfterNodeModules) === 64) {
|
|
indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterPackageName);
|
|
}
|
|
return path.slice(0, indexAfterPackageName);
|
|
}
|
|
ts.parseNodeModuleFromPath = parseNodeModuleFromPath;
|
|
function moveToNextDirectorySeparatorIfAvailable(path, prevSeparatorIndex) {
|
|
var nextSeparatorIndex = path.indexOf(ts.directorySeparator, prevSeparatorIndex + 1);
|
|
return nextSeparatorIndex === -1 ? prevSeparatorIndex : nextSeparatorIndex;
|
|
}
|
|
function loadModuleFromFileNoPackageId(extensions, candidate, onlyRecordFailures, state) {
|
|
return noPackageId(loadModuleFromFile(extensions, candidate, onlyRecordFailures, state));
|
|
}
|
|
function loadModuleFromFile(extensions, candidate, onlyRecordFailures, state) {
|
|
if (extensions === Extensions.Json || extensions === Extensions.TSConfig) {
|
|
var extensionLess = ts.tryRemoveExtension(candidate, ".json");
|
|
var extension = extensionLess ? candidate.substring(extensionLess.length) : "";
|
|
return (extensionLess === undefined && extensions === Extensions.Json) ? undefined : tryAddingExtensions(extensionLess || candidate, extensions, extension, onlyRecordFailures, state);
|
|
}
|
|
if (!(state.features & NodeResolutionFeatures.EsmMode)) {
|
|
var resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, "", onlyRecordFailures, state);
|
|
if (resolvedByAddingExtension) {
|
|
return resolvedByAddingExtension;
|
|
}
|
|
}
|
|
return loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state);
|
|
}
|
|
function loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state) {
|
|
if (ts.hasJSFileExtension(candidate) || (ts.fileExtensionIs(candidate, ".json") && state.compilerOptions.resolveJsonModule)) {
|
|
var extensionless = ts.removeFileExtension(candidate);
|
|
var extension = candidate.substring(extensionless.length);
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.File_name_0_has_a_1_extension_stripping_it, candidate, extension);
|
|
}
|
|
return tryAddingExtensions(extensionless, extensions, extension, onlyRecordFailures, state);
|
|
}
|
|
}
|
|
function loadJSOrExactTSFileName(extensions, candidate, onlyRecordFailures, state) {
|
|
if ((extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) && ts.fileExtensionIsOneOf(candidate, ts.supportedTSExtensionsFlat)) {
|
|
var result = tryFile(candidate, onlyRecordFailures, state);
|
|
return result !== undefined ? { path: candidate, ext: ts.tryExtractTSExtension(candidate) } : undefined;
|
|
}
|
|
return loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state);
|
|
}
|
|
function tryAddingExtensions(candidate, extensions, originalExtension, onlyRecordFailures, state) {
|
|
if (!onlyRecordFailures) {
|
|
var directory = ts.getDirectoryPath(candidate);
|
|
if (directory) {
|
|
onlyRecordFailures = !ts.directoryProbablyExists(directory, state.host);
|
|
}
|
|
}
|
|
switch (extensions) {
|
|
case Extensions.DtsOnly:
|
|
switch (originalExtension) {
|
|
case ".mjs":
|
|
case ".mts":
|
|
case ".d.mts":
|
|
return tryExtension(".d.mts");
|
|
case ".cjs":
|
|
case ".cts":
|
|
case ".d.cts":
|
|
return tryExtension(".d.cts");
|
|
case ".json":
|
|
candidate += ".json";
|
|
return tryExtension(".d.ts");
|
|
default: return tryExtension(".d.ts");
|
|
}
|
|
case Extensions.TypeScript:
|
|
case Extensions.TsOnly:
|
|
var useDts = extensions === Extensions.TypeScript;
|
|
switch (originalExtension) {
|
|
case ".mjs":
|
|
case ".mts":
|
|
case ".d.mts":
|
|
return tryExtension(".mts") || (useDts ? tryExtension(".d.mts") : undefined);
|
|
case ".cjs":
|
|
case ".cts":
|
|
case ".d.cts":
|
|
return tryExtension(".cts") || (useDts ? tryExtension(".d.cts") : undefined);
|
|
case ".json":
|
|
candidate += ".json";
|
|
return useDts ? tryExtension(".d.ts") : undefined;
|
|
default:
|
|
return tryExtension(".ts") || tryExtension(".tsx") || (useDts ? tryExtension(".d.ts") : undefined);
|
|
}
|
|
case Extensions.JavaScript:
|
|
switch (originalExtension) {
|
|
case ".mjs":
|
|
case ".mts":
|
|
case ".d.mts":
|
|
return tryExtension(".mjs");
|
|
case ".cjs":
|
|
case ".cts":
|
|
case ".d.cts":
|
|
return tryExtension(".cjs");
|
|
case ".json":
|
|
return tryExtension(".json");
|
|
default:
|
|
return tryExtension(".js") || tryExtension(".jsx");
|
|
}
|
|
case Extensions.TSConfig:
|
|
case Extensions.Json:
|
|
return tryExtension(".json");
|
|
}
|
|
function tryExtension(ext) {
|
|
var path = tryFile(candidate + ext, onlyRecordFailures, state);
|
|
return path === undefined ? undefined : { path: path, ext: ext };
|
|
}
|
|
}
|
|
function tryFile(fileName, onlyRecordFailures, state) {
|
|
var _a, _b;
|
|
if (!((_a = state.compilerOptions.moduleSuffixes) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
return tryFileLookup(fileName, onlyRecordFailures, state);
|
|
}
|
|
var ext = (_b = ts.tryGetExtensionFromPath(fileName)) !== null && _b !== void 0 ? _b : "";
|
|
var fileNameNoExtension = ext ? ts.removeExtension(fileName, ext) : fileName;
|
|
return ts.forEach(state.compilerOptions.moduleSuffixes, function (suffix) { return tryFileLookup(fileNameNoExtension + suffix + ext, onlyRecordFailures, state); });
|
|
}
|
|
function tryFileLookup(fileName, 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);
|
|
}
|
|
}
|
|
}
|
|
state.failedLookupLocations.push(fileName);
|
|
return undefined;
|
|
}
|
|
function loadNodeModuleFromDirectory(extensions, candidate, onlyRecordFailures, state, considerPackageJson) {
|
|
if (considerPackageJson === void 0) { considerPackageJson = true; }
|
|
var packageInfo = considerPackageJson ? getPackageJsonInfo(candidate, onlyRecordFailures, state) : undefined;
|
|
var packageJsonContent = packageInfo && packageInfo.packageJsonContent;
|
|
var versionPaths = packageInfo && packageInfo.versionPaths;
|
|
return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageJsonContent, versionPaths));
|
|
}
|
|
function getEntrypointsFromPackageJsonInfo(packageJsonInfo, options, host, cache, resolveJs) {
|
|
if (!resolveJs && packageJsonInfo.resolvedEntrypoints !== undefined) {
|
|
return packageJsonInfo.resolvedEntrypoints;
|
|
}
|
|
var entrypoints;
|
|
var extensions = resolveJs ? Extensions.JavaScript : Extensions.TypeScript;
|
|
var features = getDefaultNodeResolutionFeatures(options);
|
|
var requireState = getTemporaryModuleResolutionState(cache === null || cache === void 0 ? void 0 : cache.getPackageJsonInfoCache(), host, options);
|
|
requireState.conditions = ["node", "require", "types"];
|
|
requireState.requestContainingDirectory = packageJsonInfo.packageDirectory;
|
|
var requireResolution = loadNodeModuleFromDirectoryWorker(extensions, packageJsonInfo.packageDirectory, false, requireState, packageJsonInfo.packageJsonContent, packageJsonInfo.versionPaths);
|
|
entrypoints = ts.append(entrypoints, requireResolution === null || requireResolution === void 0 ? void 0 : requireResolution.path);
|
|
if (features & NodeResolutionFeatures.Exports && packageJsonInfo.packageJsonContent.exports) {
|
|
for (var _i = 0, _a = [["node", "import", "types"], ["node", "require", "types"]]; _i < _a.length; _i++) {
|
|
var conditions = _a[_i];
|
|
var exportState = __assign(__assign({}, requireState), { failedLookupLocations: [], conditions: conditions });
|
|
var exportResolutions = loadEntrypointsFromExportMap(packageJsonInfo, packageJsonInfo.packageJsonContent.exports, exportState, extensions);
|
|
if (exportResolutions) {
|
|
for (var _b = 0, exportResolutions_1 = exportResolutions; _b < exportResolutions_1.length; _b++) {
|
|
var resolution = exportResolutions_1[_b];
|
|
entrypoints = ts.appendIfUnique(entrypoints, resolution.path);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return packageJsonInfo.resolvedEntrypoints = entrypoints || false;
|
|
}
|
|
ts.getEntrypointsFromPackageJsonInfo = getEntrypointsFromPackageJsonInfo;
|
|
function loadEntrypointsFromExportMap(scope, exports, state, extensions) {
|
|
var entrypoints;
|
|
if (ts.isArray(exports)) {
|
|
for (var _i = 0, exports_1 = exports; _i < exports_1.length; _i++) {
|
|
var target = exports_1[_i];
|
|
loadEntrypointsFromTargetExports(target);
|
|
}
|
|
}
|
|
else if (typeof exports === "object" && exports !== null && allKeysStartWithDot(exports)) {
|
|
for (var key in exports) {
|
|
loadEntrypointsFromTargetExports(exports[key]);
|
|
}
|
|
}
|
|
else {
|
|
loadEntrypointsFromTargetExports(exports);
|
|
}
|
|
return entrypoints;
|
|
function loadEntrypointsFromTargetExports(target) {
|
|
var _a, _b;
|
|
if (typeof target === "string" && ts.startsWith(target, "./") && target.indexOf("*") === -1) {
|
|
var partsAfterFirst = ts.getPathComponents(target).slice(2);
|
|
if (partsAfterFirst.indexOf("..") >= 0 || partsAfterFirst.indexOf(".") >= 0 || partsAfterFirst.indexOf("node_modules") >= 0) {
|
|
return false;
|
|
}
|
|
var resolvedTarget = ts.combinePaths(scope.packageDirectory, target);
|
|
var finalPath = ts.getNormalizedAbsolutePath(resolvedTarget, (_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a));
|
|
var result = loadJSOrExactTSFileName(extensions, finalPath, false, state);
|
|
if (result) {
|
|
entrypoints = ts.appendIfUnique(entrypoints, result, function (a, b) { return a.path === b.path; });
|
|
return true;
|
|
}
|
|
}
|
|
else if (Array.isArray(target)) {
|
|
for (var _i = 0, target_1 = target; _i < target_1.length; _i++) {
|
|
var t = target_1[_i];
|
|
var success = loadEntrypointsFromTargetExports(t);
|
|
if (success) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else if (typeof target === "object" && target !== null) {
|
|
return ts.forEach(ts.getOwnKeys(target), function (key) {
|
|
if (key === "default" || ts.contains(state.conditions, key) || isApplicableVersionedTypesKey(state.conditions, key)) {
|
|
loadEntrypointsFromTargetExports(target[key]);
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
function getTemporaryModuleResolutionState(packageJsonInfoCache, host, options) {
|
|
return {
|
|
host: host,
|
|
compilerOptions: options,
|
|
traceEnabled: isTraceEnabled(options, host),
|
|
failedLookupLocations: ts.noopPush,
|
|
affectingLocations: ts.noopPush,
|
|
packageJsonInfoCache: packageJsonInfoCache,
|
|
features: NodeResolutionFeatures.None,
|
|
conditions: ts.emptyArray,
|
|
requestContainingDirectory: undefined,
|
|
reportDiagnostic: ts.noop
|
|
};
|
|
}
|
|
ts.getTemporaryModuleResolutionState = getTemporaryModuleResolutionState;
|
|
function getPackageScopeForPath(fileName, state) {
|
|
var parts = ts.getPathComponents(fileName);
|
|
parts.pop();
|
|
while (parts.length > 0) {
|
|
var pkg = getPackageJsonInfo(ts.getPathFromPathComponents(parts), false, state);
|
|
if (pkg) {
|
|
return pkg;
|
|
}
|
|
parts.pop();
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.getPackageScopeForPath = getPackageScopeForPath;
|
|
function getPackageJsonInfo(packageDirectory, onlyRecordFailures, state) {
|
|
var _a, _b, _c;
|
|
var host = state.host, traceEnabled = state.traceEnabled;
|
|
var packageJsonPath = ts.combinePaths(packageDirectory, "package.json");
|
|
if (onlyRecordFailures) {
|
|
state.failedLookupLocations.push(packageJsonPath);
|
|
return undefined;
|
|
}
|
|
var existing = (_a = state.packageJsonInfoCache) === null || _a === void 0 ? void 0 : _a.getPackageJsonInfo(packageJsonPath);
|
|
if (existing !== undefined) {
|
|
if (typeof existing !== "boolean") {
|
|
if (traceEnabled)
|
|
trace(host, ts.Diagnostics.File_0_exists_according_to_earlier_cached_lookups, packageJsonPath);
|
|
state.affectingLocations.push(packageJsonPath);
|
|
return existing;
|
|
}
|
|
else {
|
|
if (existing && traceEnabled)
|
|
trace(host, ts.Diagnostics.File_0_does_not_exist_according_to_earlier_cached_lookups, packageJsonPath);
|
|
state.failedLookupLocations.push(packageJsonPath);
|
|
return undefined;
|
|
}
|
|
}
|
|
var directoryExists = ts.directoryProbablyExists(packageDirectory, host);
|
|
if (directoryExists && host.fileExists(packageJsonPath)) {
|
|
var packageJsonContent = ts.readJson(packageJsonPath, host);
|
|
if (traceEnabled) {
|
|
trace(host, ts.Diagnostics.Found_package_json_at_0, packageJsonPath);
|
|
}
|
|
var versionPaths = readPackageJsonTypesVersionPaths(packageJsonContent, state);
|
|
var result = { packageDirectory: packageDirectory, packageJsonContent: packageJsonContent, versionPaths: versionPaths, resolvedEntrypoints: undefined };
|
|
(_b = state.packageJsonInfoCache) === null || _b === void 0 ? void 0 : _b.setPackageJsonInfo(packageJsonPath, result);
|
|
state.affectingLocations.push(packageJsonPath);
|
|
return result;
|
|
}
|
|
else {
|
|
if (directoryExists && traceEnabled) {
|
|
trace(host, ts.Diagnostics.File_0_does_not_exist, packageJsonPath);
|
|
}
|
|
(_c = state.packageJsonInfoCache) === null || _c === void 0 ? void 0 : _c.setPackageJsonInfo(packageJsonPath, directoryExists);
|
|
state.failedLookupLocations.push(packageJsonPath);
|
|
}
|
|
}
|
|
ts.getPackageJsonInfo = getPackageJsonInfo;
|
|
function loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, jsonContent, versionPaths) {
|
|
var packageFile;
|
|
if (jsonContent) {
|
|
switch (extensions) {
|
|
case Extensions.JavaScript:
|
|
case Extensions.Json:
|
|
case Extensions.TsOnly:
|
|
packageFile = readPackageJsonMainField(jsonContent, candidate, state);
|
|
break;
|
|
case Extensions.TypeScript:
|
|
packageFile = readPackageJsonTypesFields(jsonContent, candidate, state) || readPackageJsonMainField(jsonContent, candidate, state);
|
|
break;
|
|
case Extensions.DtsOnly:
|
|
packageFile = readPackageJsonTypesFields(jsonContent, candidate, state);
|
|
break;
|
|
case Extensions.TSConfig:
|
|
packageFile = readPackageJsonTSConfigField(jsonContent, candidate, state);
|
|
break;
|
|
default:
|
|
return ts.Debug.assertNever(extensions);
|
|
}
|
|
}
|
|
var loader = function (extensions, candidate, onlyRecordFailures, state) {
|
|
var fromFile = tryFile(candidate, onlyRecordFailures, state);
|
|
if (fromFile) {
|
|
var resolved = resolvedIfExtensionMatches(extensions, fromFile);
|
|
if (resolved) {
|
|
return noPackageId(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 features = state.features;
|
|
if ((jsonContent === null || jsonContent === void 0 ? void 0 : jsonContent.type) !== "module") {
|
|
state.features &= ~NodeResolutionFeatures.EsmMode;
|
|
}
|
|
var result = nodeLoadModuleByRelativeName(nextExtensions, candidate, onlyRecordFailures, state, false);
|
|
state.features = features;
|
|
return result;
|
|
};
|
|
var onlyRecordFailuresForPackageFile = packageFile ? !ts.directoryProbablyExists(ts.getDirectoryPath(packageFile), state.host) : undefined;
|
|
var onlyRecordFailuresForIndex = onlyRecordFailures || !ts.directoryProbablyExists(candidate, state.host);
|
|
var indexPath = ts.combinePaths(candidate, extensions === Extensions.TSConfig ? "tsconfig" : "index");
|
|
if (versionPaths && (!packageFile || ts.containsPath(candidate, packageFile))) {
|
|
var moduleName = ts.getRelativePathFromDirectory(candidate, packageFile || indexPath, false);
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
|
|
}
|
|
var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
|
|
if (result) {
|
|
return removeIgnoredPackageId(result.value);
|
|
}
|
|
}
|
|
var packageFileResult = packageFile && removeIgnoredPackageId(loader(extensions, packageFile, onlyRecordFailuresForPackageFile, state));
|
|
if (packageFileResult)
|
|
return packageFileResult;
|
|
if (!(state.features & NodeResolutionFeatures.EsmMode)) {
|
|
return loadModuleFromFile(extensions, indexPath, onlyRecordFailuresForIndex, state);
|
|
}
|
|
}
|
|
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" || extension === ".mjs" || extension === ".cjs";
|
|
case Extensions.TSConfig:
|
|
case Extensions.Json:
|
|
return extension === ".json";
|
|
case Extensions.TypeScript:
|
|
return extension === ".ts" || extension === ".tsx" || extension === ".mts" || extension === ".cts" || extension === ".d.ts" || extension === ".d.mts" || extension === ".d.cts";
|
|
case Extensions.TsOnly:
|
|
return extension === ".ts" || extension === ".tsx" || extension === ".mts" || extension === ".cts";
|
|
case Extensions.DtsOnly:
|
|
return extension === ".d.ts" || extension === ".d.mts" || extension === ".d.cts";
|
|
}
|
|
}
|
|
function parsePackageName(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.parsePackageName = parsePackageName;
|
|
function allKeysStartWithDot(obj) {
|
|
return ts.every(ts.getOwnKeys(obj), function (k) { return ts.startsWith(k, "."); });
|
|
}
|
|
ts.allKeysStartWithDot = allKeysStartWithDot;
|
|
function noKeyStartsWithDot(obj) {
|
|
return !ts.some(ts.getOwnKeys(obj), function (k) { return ts.startsWith(k, "."); });
|
|
}
|
|
function loadModuleFromSelfNameReference(extensions, moduleName, directory, state, cache, redirectedReference) {
|
|
var _a, _b;
|
|
var useCaseSensitiveFileNames = typeof state.host.useCaseSensitiveFileNames === "function" ? state.host.useCaseSensitiveFileNames() : state.host.useCaseSensitiveFileNames;
|
|
var directoryPath = ts.toPath(ts.combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a), ts.createGetCanonicalFileName(useCaseSensitiveFileNames === undefined ? true : useCaseSensitiveFileNames));
|
|
var scope = getPackageScopeForPath(directoryPath, state);
|
|
if (!scope || !scope.packageJsonContent.exports) {
|
|
return undefined;
|
|
}
|
|
if (typeof scope.packageJsonContent.name !== "string") {
|
|
return undefined;
|
|
}
|
|
var parts = ts.getPathComponents(moduleName);
|
|
var nameParts = ts.getPathComponents(scope.packageJsonContent.name);
|
|
if (!ts.every(nameParts, function (p, i) { return parts[i] === p; })) {
|
|
return undefined;
|
|
}
|
|
var trailingParts = parts.slice(nameParts.length);
|
|
return loadModuleFromExports(scope, extensions, !ts.length(trailingParts) ? "." : ".".concat(ts.directorySeparator).concat(trailingParts.join(ts.directorySeparator)), state, cache, redirectedReference);
|
|
}
|
|
function loadModuleFromExports(scope, extensions, subpath, state, cache, redirectedReference) {
|
|
if (!scope.packageJsonContent.exports) {
|
|
return undefined;
|
|
}
|
|
if (subpath === ".") {
|
|
var mainExport = void 0;
|
|
if (typeof scope.packageJsonContent.exports === "string" || Array.isArray(scope.packageJsonContent.exports) || (typeof scope.packageJsonContent.exports === "object" && noKeyStartsWithDot(scope.packageJsonContent.exports))) {
|
|
mainExport = scope.packageJsonContent.exports;
|
|
}
|
|
else if (ts.hasProperty(scope.packageJsonContent.exports, ".")) {
|
|
mainExport = scope.packageJsonContent.exports["."];
|
|
}
|
|
if (mainExport) {
|
|
var loadModuleFromTargetImportOrExport = getLoadModuleFromTargetImportOrExport(extensions, state, cache, redirectedReference, subpath, scope, false);
|
|
return loadModuleFromTargetImportOrExport(mainExport, "", false);
|
|
}
|
|
}
|
|
else if (allKeysStartWithDot(scope.packageJsonContent.exports)) {
|
|
if (typeof scope.packageJsonContent.exports !== "object") {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, scope.packageDirectory);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var result = loadModuleFromImportsOrExports(extensions, state, cache, redirectedReference, subpath, scope.packageJsonContent.exports, scope, false);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, scope.packageDirectory);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
function loadModuleFromImports(extensions, moduleName, directory, state, cache, redirectedReference) {
|
|
var _a, _b;
|
|
if (moduleName === "#" || ts.startsWith(moduleName, "#/")) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var useCaseSensitiveFileNames = typeof state.host.useCaseSensitiveFileNames === "function" ? state.host.useCaseSensitiveFileNames() : state.host.useCaseSensitiveFileNames;
|
|
var directoryPath = ts.toPath(ts.combinePaths(directory, "dummy"), (_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a), ts.createGetCanonicalFileName(useCaseSensitiveFileNames === undefined ? true : useCaseSensitiveFileNames));
|
|
var scope = getPackageScopeForPath(directoryPath, state);
|
|
if (!scope) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve, directoryPath);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
if (!scope.packageJsonContent.imports) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_no_imports_defined, scope.packageDirectory);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var result = loadModuleFromImportsOrExports(extensions, state, cache, redirectedReference, moduleName, scope.packageJsonContent.imports, scope, true);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1, moduleName, scope.packageDirectory);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
function comparePatternKeys(a, b) {
|
|
var aPatternIndex = a.indexOf("*");
|
|
var bPatternIndex = b.indexOf("*");
|
|
var baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;
|
|
var baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;
|
|
if (baseLenA > baseLenB)
|
|
return -1;
|
|
if (baseLenB > baseLenA)
|
|
return 1;
|
|
if (aPatternIndex === -1)
|
|
return 1;
|
|
if (bPatternIndex === -1)
|
|
return -1;
|
|
if (a.length > b.length)
|
|
return -1;
|
|
if (b.length > a.length)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
ts.comparePatternKeys = comparePatternKeys;
|
|
function loadModuleFromImportsOrExports(extensions, state, cache, redirectedReference, moduleName, lookupTable, scope, isImports) {
|
|
var loadModuleFromTargetImportOrExport = getLoadModuleFromTargetImportOrExport(extensions, state, cache, redirectedReference, moduleName, scope, isImports);
|
|
if (!ts.endsWith(moduleName, ts.directorySeparator) && moduleName.indexOf("*") === -1 && ts.hasProperty(lookupTable, moduleName)) {
|
|
var target = lookupTable[moduleName];
|
|
return loadModuleFromTargetImportOrExport(target, "", false);
|
|
}
|
|
var expandingKeys = ts.sort(ts.filter(ts.getOwnKeys(lookupTable), function (k) { return k.indexOf("*") !== -1 || ts.endsWith(k, "/"); }), comparePatternKeys);
|
|
for (var _i = 0, expandingKeys_1 = expandingKeys; _i < expandingKeys_1.length; _i++) {
|
|
var potentialTarget = expandingKeys_1[_i];
|
|
if (state.features & NodeResolutionFeatures.ExportsPatternTrailers && matchesPatternWithTrailer(potentialTarget, moduleName)) {
|
|
var target = lookupTable[potentialTarget];
|
|
var starPos = potentialTarget.indexOf("*");
|
|
var subpath = moduleName.substring(potentialTarget.substring(0, starPos).length, moduleName.length - (potentialTarget.length - 1 - starPos));
|
|
return loadModuleFromTargetImportOrExport(target, subpath, true);
|
|
}
|
|
else if (ts.endsWith(potentialTarget, "*") && ts.startsWith(moduleName, potentialTarget.substring(0, potentialTarget.length - 1))) {
|
|
var target = lookupTable[potentialTarget];
|
|
var subpath = moduleName.substring(potentialTarget.length - 1);
|
|
return loadModuleFromTargetImportOrExport(target, subpath, true);
|
|
}
|
|
else if (ts.startsWith(moduleName, potentialTarget)) {
|
|
var target = lookupTable[potentialTarget];
|
|
var subpath = moduleName.substring(potentialTarget.length);
|
|
return loadModuleFromTargetImportOrExport(target, subpath, false);
|
|
}
|
|
}
|
|
function matchesPatternWithTrailer(target, name) {
|
|
if (ts.endsWith(target, "*"))
|
|
return false;
|
|
var starPos = target.indexOf("*");
|
|
if (starPos === -1)
|
|
return false;
|
|
return ts.startsWith(name, target.substring(0, starPos)) && ts.endsWith(name, target.substring(starPos + 1));
|
|
}
|
|
}
|
|
function getLoadModuleFromTargetImportOrExport(extensions, state, cache, redirectedReference, moduleName, scope, isImports) {
|
|
return loadModuleFromTargetImportOrExport;
|
|
function loadModuleFromTargetImportOrExport(target, subpath, pattern) {
|
|
if (typeof target === "string") {
|
|
if (!pattern && subpath.length > 0 && !ts.endsWith(target, "/")) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
if (!ts.startsWith(target, "./")) {
|
|
if (isImports && !ts.startsWith(target, "../") && !ts.startsWith(target, "/") && !ts.isRootedDiskPath(target)) {
|
|
var combinedLookup = pattern ? target.replace(/\*/g, subpath) : target + subpath;
|
|
var result = nodeModuleNameResolverWorker(state.features, combinedLookup, scope.packageDirectory + "/", state.compilerOptions, state.host, cache, [extensions], redirectedReference);
|
|
return toSearchResult(result.resolvedModule ? { path: result.resolvedModule.resolvedFileName, extension: result.resolvedModule.extension, packageId: result.resolvedModule.packageId, originalPath: result.resolvedModule.originalPath } : undefined);
|
|
}
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var parts = ts.pathIsRelative(target) ? ts.getPathComponents(target).slice(1) : ts.getPathComponents(target);
|
|
var partsAfterFirst = parts.slice(1);
|
|
if (partsAfterFirst.indexOf("..") >= 0 || partsAfterFirst.indexOf(".") >= 0 || partsAfterFirst.indexOf("node_modules") >= 0) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var resolvedTarget = ts.combinePaths(scope.packageDirectory, target);
|
|
var subpathParts = ts.getPathComponents(subpath);
|
|
if (subpathParts.indexOf("..") >= 0 || subpathParts.indexOf(".") >= 0 || subpathParts.indexOf("node_modules") >= 0) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
var finalPath = toAbsolutePath(pattern ? resolvedTarget.replace(/\*/g, subpath) : resolvedTarget + subpath);
|
|
var inputLink = tryLoadInputFileForPath(finalPath, subpath, ts.combinePaths(scope.packageDirectory, "package.json"), isImports);
|
|
if (inputLink)
|
|
return inputLink;
|
|
return toSearchResult(withPackageId(scope, loadJSOrExactTSFileName(extensions, finalPath, false, state)));
|
|
}
|
|
else if (typeof target === "object" && target !== null) {
|
|
if (!Array.isArray(target)) {
|
|
for (var _i = 0, _a = ts.getOwnKeys(target); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
if (key === "default" || state.conditions.indexOf(key) >= 0 || isApplicableVersionedTypesKey(state.conditions, key)) {
|
|
var subTarget = target[key];
|
|
var result = loadModuleFromTargetImportOrExport(subTarget, subpath, pattern);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
else {
|
|
if (!ts.length(target)) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
for (var _b = 0, target_2 = target; _b < target_2.length; _b++) {
|
|
var elem = target_2[_b];
|
|
var result = loadModuleFromTargetImportOrExport(elem, subpath, pattern);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (target === null) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_explicitly_maps_specifier_1_to_null, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
}
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName);
|
|
}
|
|
return toSearchResult(undefined);
|
|
function toAbsolutePath(path) {
|
|
var _a, _b;
|
|
if (path === undefined)
|
|
return path;
|
|
return ts.hostGetCanonicalFileName({ useCaseSensitiveFileNames: useCaseSensitiveFileNames })(ts.getNormalizedAbsolutePath(path, (_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a)));
|
|
}
|
|
function combineDirectoryPath(root, dir) {
|
|
return ts.ensureTrailingDirectorySeparator(ts.combinePaths(root, dir));
|
|
}
|
|
function useCaseSensitiveFileNames() {
|
|
return !state.host.useCaseSensitiveFileNames ? true :
|
|
typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames :
|
|
state.host.useCaseSensitiveFileNames();
|
|
}
|
|
function tryLoadInputFileForPath(finalPath, entry, packagePath, isImports) {
|
|
var _a, _b, _c, _d;
|
|
if ((extensions === Extensions.TypeScript || extensions === Extensions.JavaScript || extensions === Extensions.Json)
|
|
&& (state.compilerOptions.declarationDir || state.compilerOptions.outDir)
|
|
&& finalPath.indexOf("/node_modules/") === -1
|
|
&& (state.compilerOptions.configFile ? ts.startsWith(toAbsolutePath(state.compilerOptions.configFile.fileName), scope.packageDirectory) : true)) {
|
|
var getCanonicalFileName = ts.hostGetCanonicalFileName({ useCaseSensitiveFileNames: useCaseSensitiveFileNames });
|
|
var commonSourceDirGuesses = [];
|
|
if (state.compilerOptions.rootDir || (state.compilerOptions.composite && state.compilerOptions.configFilePath)) {
|
|
var commonDir = toAbsolutePath(ts.getCommonSourceDirectory(state.compilerOptions, function () { return []; }, ((_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a)) || "", getCanonicalFileName));
|
|
commonSourceDirGuesses.push(commonDir);
|
|
}
|
|
else if (state.requestContainingDirectory) {
|
|
var requestingFile_1 = toAbsolutePath(ts.combinePaths(state.requestContainingDirectory, "index.ts"));
|
|
var commonDir = toAbsolutePath(ts.getCommonSourceDirectory(state.compilerOptions, function () { return [requestingFile_1, toAbsolutePath(packagePath)]; }, ((_d = (_c = state.host).getCurrentDirectory) === null || _d === void 0 ? void 0 : _d.call(_c)) || "", getCanonicalFileName));
|
|
commonSourceDirGuesses.push(commonDir);
|
|
var fragment = ts.ensureTrailingDirectorySeparator(commonDir);
|
|
while (fragment && fragment.length > 1) {
|
|
var parts = ts.getPathComponents(fragment);
|
|
parts.pop();
|
|
var commonDir_1 = ts.getPathFromPathComponents(parts);
|
|
commonSourceDirGuesses.unshift(commonDir_1);
|
|
fragment = ts.ensureTrailingDirectorySeparator(commonDir_1);
|
|
}
|
|
}
|
|
if (commonSourceDirGuesses.length > 1) {
|
|
state.reportDiagnostic(ts.createCompilerDiagnostic(isImports
|
|
? ts.Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate
|
|
: ts.Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate, entry === "" ? "." : entry, packagePath));
|
|
}
|
|
for (var _i = 0, commonSourceDirGuesses_1 = commonSourceDirGuesses; _i < commonSourceDirGuesses_1.length; _i++) {
|
|
var commonSourceDirGuess = commonSourceDirGuesses_1[_i];
|
|
var candidateDirectories = getOutputDirectoriesForBaseDirectory(commonSourceDirGuess);
|
|
for (var _e = 0, candidateDirectories_1 = candidateDirectories; _e < candidateDirectories_1.length; _e++) {
|
|
var candidateDir = candidateDirectories_1[_e];
|
|
if (ts.startsWith(finalPath, candidateDir)) {
|
|
var pathFragment = finalPath.slice(candidateDir.length + 1);
|
|
var possibleInputBase = ts.combinePaths(commonSourceDirGuess, pathFragment);
|
|
var jsAndDtsExtensions = [".mjs", ".cjs", ".js", ".json", ".d.mts", ".d.cts", ".d.ts"];
|
|
for (var _f = 0, jsAndDtsExtensions_1 = jsAndDtsExtensions; _f < jsAndDtsExtensions_1.length; _f++) {
|
|
var ext = jsAndDtsExtensions_1[_f];
|
|
if (ts.fileExtensionIs(possibleInputBase, ext)) {
|
|
var inputExts = ts.getPossibleOriginalInputExtensionForExtension(possibleInputBase);
|
|
for (var _g = 0, inputExts_1 = inputExts; _g < inputExts_1.length; _g++) {
|
|
var possibleExt = inputExts_1[_g];
|
|
var possibleInputWithInputExtension = ts.changeAnyExtension(possibleInputBase, possibleExt, ext, !useCaseSensitiveFileNames());
|
|
if ((extensions === Extensions.TypeScript && ts.hasJSFileExtension(possibleInputWithInputExtension)) ||
|
|
(extensions === Extensions.JavaScript && ts.hasTSFileExtension(possibleInputWithInputExtension))) {
|
|
continue;
|
|
}
|
|
if (state.host.fileExists(possibleInputWithInputExtension)) {
|
|
return toSearchResult(withPackageId(scope, loadJSOrExactTSFileName(extensions, possibleInputWithInputExtension, false, state)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
function getOutputDirectoriesForBaseDirectory(commonSourceDirGuess) {
|
|
var _a, _b;
|
|
var currentDir = state.compilerOptions.configFile ? ((_b = (_a = state.host).getCurrentDirectory) === null || _b === void 0 ? void 0 : _b.call(_a)) || "" : commonSourceDirGuess;
|
|
var candidateDirectories = [];
|
|
if (state.compilerOptions.declarationDir) {
|
|
candidateDirectories.push(toAbsolutePath(combineDirectoryPath(currentDir, state.compilerOptions.declarationDir)));
|
|
}
|
|
if (state.compilerOptions.outDir && state.compilerOptions.outDir !== state.compilerOptions.declarationDir) {
|
|
candidateDirectories.push(toAbsolutePath(combineDirectoryPath(currentDir, state.compilerOptions.outDir)));
|
|
}
|
|
return candidateDirectories;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isApplicableVersionedTypesKey(conditions, key) {
|
|
if (conditions.indexOf("types") === -1)
|
|
return false;
|
|
if (!ts.startsWith(key, "types@"))
|
|
return false;
|
|
var range = ts.VersionRange.tryParse(key.substring("types@".length));
|
|
if (!range)
|
|
return false;
|
|
return range.test(ts.version);
|
|
}
|
|
ts.isApplicableVersionedTypesKey = isApplicableVersionedTypesKey;
|
|
function loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, directory, state, cache, redirectedReference) {
|
|
return loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, directory, state, false, cache, redirectedReference);
|
|
}
|
|
function loadModuleFromNearestNodeModulesDirectoryTypesScope(moduleName, directory, state) {
|
|
return loadModuleFromNearestNodeModulesDirectoryWorker(Extensions.DtsOnly, moduleName, directory, state, true, undefined, undefined);
|
|
}
|
|
function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, directory, state, typesScopeOnly, cache, redirectedReference) {
|
|
var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName, state.features === 0 ? undefined : state.features & NodeResolutionFeatures.EsmMode ? ts.ModuleKind.ESNext : ts.ModuleKind.CommonJS, redirectedReference);
|
|
return ts.forEachAncestorDirectory(ts.normalizeSlashes(directory), function (ancestorDirectory) {
|
|
if (ts.getBaseFileName(ancestorDirectory) !== "node_modules") {
|
|
var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache, moduleName, ancestorDirectory, state);
|
|
if (resolutionFromCache) {
|
|
return resolutionFromCache;
|
|
}
|
|
return toSearchResult(loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, ancestorDirectory, state, typesScopeOnly, cache, redirectedReference));
|
|
}
|
|
});
|
|
}
|
|
function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, directory, state, typesScopeOnly, cache, redirectedReference) {
|
|
var nodeModulesFolder = ts.combinePaths(directory, "node_modules");
|
|
var nodeModulesFolderExists = ts.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 = typesScopeOnly ? undefined : loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, state, cache, redirectedReference);
|
|
if (packageResult) {
|
|
return packageResult;
|
|
}
|
|
if (extensions === Extensions.TypeScript || extensions === Extensions.DtsOnly) {
|
|
var nodeModulesAtTypes_1 = ts.combinePaths(nodeModulesFolder, "@types");
|
|
var nodeModulesAtTypesExists = nodeModulesFolderExists;
|
|
if (nodeModulesFolderExists && !ts.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 loadModuleFromSpecificNodeModulesDirectory(Extensions.DtsOnly, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes_1, nodeModulesAtTypesExists, state, cache, redirectedReference);
|
|
}
|
|
}
|
|
function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, cache, redirectedReference) {
|
|
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesDirectory, moduleName));
|
|
var packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state);
|
|
if (!(state.features & NodeResolutionFeatures.Exports)) {
|
|
if (packageInfo) {
|
|
var fromFile = loadModuleFromFile(extensions, candidate, !nodeModulesDirectoryExists, state);
|
|
if (fromFile) {
|
|
return noPackageId(fromFile);
|
|
}
|
|
var fromDirectory = loadNodeModuleFromDirectoryWorker(extensions, candidate, !nodeModulesDirectoryExists, state, packageInfo.packageJsonContent, packageInfo.versionPaths);
|
|
return withPackageId(packageInfo, fromDirectory);
|
|
}
|
|
}
|
|
var _a = parsePackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
|
|
var loader = function (extensions, candidate, onlyRecordFailures, state) {
|
|
var _a;
|
|
if (packageInfo && packageInfo.packageJsonContent.exports && state.features & NodeResolutionFeatures.Exports) {
|
|
return (_a = loadModuleFromExports(packageInfo, extensions, ts.combinePaths(".", rest), state, cache, redirectedReference)) === null || _a === void 0 ? void 0 : _a.value;
|
|
}
|
|
var pathAndExtension = loadModuleFromFile(extensions, candidate, onlyRecordFailures, state) ||
|
|
loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo && packageInfo.packageJsonContent, packageInfo && packageInfo.versionPaths);
|
|
if (!pathAndExtension && packageInfo
|
|
&& (packageInfo.packageJsonContent.exports === undefined || packageInfo.packageJsonContent.exports === null)
|
|
&& state.features & NodeResolutionFeatures.EsmMode) {
|
|
pathAndExtension = loadModuleFromFile(extensions, ts.combinePaths(candidate, "index.js"), onlyRecordFailures, state);
|
|
}
|
|
return withPackageId(packageInfo, pathAndExtension);
|
|
};
|
|
if (rest !== "") {
|
|
var packageDirectory = ts.combinePaths(nodeModulesDirectory, packageName);
|
|
packageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state);
|
|
if (packageInfo && packageInfo.versionPaths) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
|
|
}
|
|
var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
|
|
var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, undefined, loader, !packageDirectoryExists, state);
|
|
if (fromPaths) {
|
|
return fromPaths.value;
|
|
}
|
|
}
|
|
}
|
|
return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
|
|
}
|
|
function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
|
|
pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
|
|
var matchedPattern = ts.matchPatternOrExact(pathPatterns, 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);
|
|
}
|
|
var resolved = ts.forEach(paths[matchedPatternText], function (subst) {
|
|
var path = matchedStar_1 ? subst.replace("*", matchedStar_1) : subst;
|
|
var candidate = ts.normalizePath(ts.combinePaths(baseDirectory, path));
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path);
|
|
}
|
|
var extension = ts.tryGetExtensionFromPath(subst);
|
|
if (extension !== undefined) {
|
|
var path_1 = tryFile(candidate, onlyRecordFailures, state);
|
|
if (path_1 !== undefined) {
|
|
return noPackageId({ path: path_1, ext: extension });
|
|
}
|
|
}
|
|
return loader(extensions, candidate, onlyRecordFailures || !ts.directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state);
|
|
});
|
|
return { value: resolved };
|
|
}
|
|
}
|
|
var mangledScopedPackageSeparator = "__";
|
|
function mangleScopedPackageNameWithTrace(packageName, state) {
|
|
var mangled = mangleScopedPackageName(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/".concat(mangleScopedPackageName(packageName));
|
|
}
|
|
ts.getTypesPackageName = getTypesPackageName;
|
|
function mangleScopedPackageName(packageName) {
|
|
if (ts.startsWith(packageName, "@")) {
|
|
var replaceSlash = packageName.replace(ts.directorySeparator, mangledScopedPackageSeparator);
|
|
if (replaceSlash !== packageName) {
|
|
return replaceSlash.slice(1);
|
|
}
|
|
}
|
|
return packageName;
|
|
}
|
|
ts.mangleScopedPackageName = mangleScopedPackageName;
|
|
function getPackageNameFromTypesPackageName(mangledName) {
|
|
var withoutAtTypePrefix = ts.removePrefix(mangledName, "@types/");
|
|
if (withoutAtTypePrefix !== mangledName) {
|
|
return unmangleScopedPackageName(withoutAtTypePrefix);
|
|
}
|
|
return mangledName;
|
|
}
|
|
ts.getPackageNameFromTypesPackageName = getPackageNameFromTypesPackageName;
|
|
function unmangleScopedPackageName(typesPackageName) {
|
|
return ts.stringContains(typesPackageName, mangledScopedPackageSeparator) ?
|
|
"@" + typesPackageName.replace(mangledScopedPackageSeparator, ts.directorySeparator) :
|
|
typesPackageName;
|
|
}
|
|
ts.unmangleScopedPackageName = unmangleScopedPackageName;
|
|
function tryFindNonRelativeModuleNameInCache(cache, moduleName, containingDirectory, state) {
|
|
var result = cache && cache.get(containingDirectory);
|
|
if (result) {
|
|
if (state.traceEnabled) {
|
|
trace(state.host, ts.Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1, moduleName, containingDirectory);
|
|
}
|
|
state.resultFromCache = result;
|
|
return { value: result.resolvedModule && { path: result.resolvedModule.resolvedFileName, originalPath: result.resolvedModule.originalPath || true, extension: result.resolvedModule.extension, packageId: result.resolvedModule.packageId } };
|
|
}
|
|
}
|
|
function classicNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference) {
|
|
var traceEnabled = isTraceEnabled(compilerOptions, host);
|
|
var failedLookupLocations = [];
|
|
var affectingLocations = [];
|
|
var containingDirectory = ts.getDirectoryPath(containingFile);
|
|
var diagnostics = [];
|
|
var state = {
|
|
compilerOptions: compilerOptions,
|
|
host: host,
|
|
traceEnabled: traceEnabled,
|
|
failedLookupLocations: failedLookupLocations,
|
|
affectingLocations: affectingLocations,
|
|
packageJsonInfoCache: cache,
|
|
features: NodeResolutionFeatures.None,
|
|
conditions: [],
|
|
requestContainingDirectory: containingDirectory,
|
|
reportDiagnostic: function (diag) { return void diagnostics.push(diag); },
|
|
};
|
|
var resolved = tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript);
|
|
return createResolvedModuleWithFailedLookupLocations(resolved && resolved.value, false, failedLookupLocations, affectingLocations, diagnostics, state.resultFromCache);
|
|
function tryResolve(extensions) {
|
|
var resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loadModuleFromFileNoPackageId, state);
|
|
if (resolvedUsingSettings) {
|
|
return { value: resolvedUsingSettings };
|
|
}
|
|
if (!ts.isExternalModuleNameRelative(moduleName)) {
|
|
var perModuleNameCache_1 = cache && cache.getOrCreateCacheForModuleName(moduleName, undefined, redirectedReference);
|
|
var resolved_3 = ts.forEachAncestorDirectory(containingDirectory, function (directory) {
|
|
var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache_1, moduleName, directory, state);
|
|
if (resolutionFromCache) {
|
|
return resolutionFromCache;
|
|
}
|
|
var searchName = ts.normalizePath(ts.combinePaths(directory, moduleName));
|
|
return toSearchResult(loadModuleFromFileNoPackageId(extensions, searchName, false, state));
|
|
});
|
|
if (resolved_3) {
|
|
return resolved_3;
|
|
}
|
|
if (extensions === Extensions.TypeScript) {
|
|
return loadModuleFromNearestNodeModulesDirectoryTypesScope(moduleName, containingDirectory, state);
|
|
}
|
|
}
|
|
else {
|
|
var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
|
|
return toSearchResult(loadModuleFromFileNoPackageId(extensions, candidate, false, state));
|
|
}
|
|
}
|
|
}
|
|
ts.classicNameResolver = classicNameResolver;
|
|
function loadModuleFromGlobalCache(moduleName, projectName, compilerOptions, host, globalCache, packageJsonInfoCache) {
|
|
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 failedLookupLocations = [];
|
|
var affectingLocations = [];
|
|
var diagnostics = [];
|
|
var state = {
|
|
compilerOptions: compilerOptions,
|
|
host: host,
|
|
traceEnabled: traceEnabled,
|
|
failedLookupLocations: failedLookupLocations,
|
|
affectingLocations: affectingLocations,
|
|
packageJsonInfoCache: packageJsonInfoCache,
|
|
features: NodeResolutionFeatures.None,
|
|
conditions: [],
|
|
requestContainingDirectory: undefined,
|
|
reportDiagnostic: function (diag) { return void diagnostics.push(diag); },
|
|
};
|
|
var resolved = loadModuleFromImmediateNodeModulesDirectory(Extensions.DtsOnly, moduleName, globalCache, state, false, undefined, undefined);
|
|
return createResolvedModuleWithFailedLookupLocations(resolved, true, failedLookupLocations, affectingLocations, diagnostics, state.resultFromCache);
|
|
}
|
|
ts.loadModuleFromGlobalCache = loadModuleFromGlobalCache;
|
|
function toSearchResult(value) {
|
|
return value !== undefined ? { value: value } : undefined;
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getModuleInstanceState(node, visited) {
|
|
if (node.body && !node.body.parent) {
|
|
ts.setParent(node.body, node);
|
|
ts.setParentRecursive(node.body, false);
|
|
}
|
|
return node.body ? getModuleInstanceStateCached(node.body, visited) : 1;
|
|
}
|
|
ts.getModuleInstanceState = getModuleInstanceState;
|
|
function getModuleInstanceStateCached(node, visited) {
|
|
if (visited === void 0) { visited = new ts.Map(); }
|
|
var nodeId = ts.getNodeId(node);
|
|
if (visited.has(nodeId)) {
|
|
return visited.get(nodeId) || 0;
|
|
}
|
|
visited.set(nodeId, undefined);
|
|
var result = getModuleInstanceStateWorker(node, visited);
|
|
visited.set(nodeId, result);
|
|
return result;
|
|
}
|
|
function getModuleInstanceStateWorker(node, visited) {
|
|
switch (node.kind) {
|
|
case 258:
|
|
case 259:
|
|
return 0;
|
|
case 260:
|
|
if (ts.isEnumConst(node)) {
|
|
return 2;
|
|
}
|
|
break;
|
|
case 266:
|
|
case 265:
|
|
if (!(ts.hasSyntacticModifier(node, 1))) {
|
|
return 0;
|
|
}
|
|
break;
|
|
case 272:
|
|
var exportDeclaration = node;
|
|
if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 273) {
|
|
var state = 0;
|
|
for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
|
|
var specifier = _a[_i];
|
|
var specifierState = getModuleInstanceStateForAliasTarget(specifier, visited);
|
|
if (specifierState > state) {
|
|
state = specifierState;
|
|
}
|
|
if (state === 1) {
|
|
return state;
|
|
}
|
|
}
|
|
return state;
|
|
}
|
|
break;
|
|
case 262: {
|
|
var state_1 = 0;
|
|
ts.forEachChild(node, function (n) {
|
|
var childState = getModuleInstanceStateCached(n, visited);
|
|
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 261:
|
|
return getModuleInstanceState(node, visited);
|
|
case 79:
|
|
if (node.isInJSDocNamespace) {
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
function getModuleInstanceStateForAliasTarget(specifier, visited) {
|
|
var name = specifier.propertyName || specifier.name;
|
|
var p = specifier.parent;
|
|
while (p) {
|
|
if (ts.isBlock(p) || ts.isModuleBlock(p) || ts.isSourceFile(p)) {
|
|
var statements = p.statements;
|
|
var found = void 0;
|
|
for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) {
|
|
var statement = statements_2[_i];
|
|
if (ts.nodeHasName(statement, name)) {
|
|
if (!statement.parent) {
|
|
ts.setParent(statement, p);
|
|
ts.setParentRecursive(statement, false);
|
|
}
|
|
var state = getModuleInstanceStateCached(statement, visited);
|
|
if (found === undefined || state > found) {
|
|
found = state;
|
|
}
|
|
if (found === 1) {
|
|
return found;
|
|
}
|
|
}
|
|
}
|
|
if (found !== undefined) {
|
|
return found;
|
|
}
|
|
}
|
|
p = p.parent;
|
|
}
|
|
return 1;
|
|
}
|
|
function initFlowNode(node) {
|
|
ts.Debug.attachFlowNodeDebugInfo(node);
|
|
return node;
|
|
}
|
|
var binder = createBinder();
|
|
function bindSourceFile(file, options) {
|
|
ts.performance.mark("beforeBind");
|
|
ts.perfLogger.logStartBindFile("" + file.fileName);
|
|
binder(file, options);
|
|
ts.perfLogger.logStopBindFile();
|
|
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 currentExceptionTarget;
|
|
var preSwitchCaseFlow;
|
|
var activeLabelList;
|
|
var hasExplicitReturn;
|
|
var emitFlags;
|
|
var inStrictMode;
|
|
var inAssignmentPattern = false;
|
|
var symbolCount = 0;
|
|
var Symbol;
|
|
var classifiableNames;
|
|
var unreachableFlow = { flags: 1 };
|
|
var reportedUnreachableFlow = { flags: 1 };
|
|
var bindBinaryExpressionFlow = createBindBinaryExpressionFlow();
|
|
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 = new ts.Set();
|
|
symbolCount = 0;
|
|
Symbol = ts.objectAllocator.getSymbolConstructor();
|
|
ts.Debug.attachFlowNodeDebugInfo(unreachableFlow);
|
|
ts.Debug.attachFlowNodeDebugInfo(reportedUnreachableFlow);
|
|
if (!file.locals) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("bind", "bindSourceFile", { path: file.path }, true);
|
|
bind(file);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
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;
|
|
currentExceptionTarget = undefined;
|
|
activeLabelList = undefined;
|
|
hasExplicitReturn = false;
|
|
inAssignmentPattern = false;
|
|
emitFlags = 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.appendIfUnique(symbol.declarations, node);
|
|
if (symbolFlags & (32 | 384 | 1536 | 3) && !symbol.exports) {
|
|
symbol.exports = ts.createSymbolTable();
|
|
}
|
|
if (symbolFlags & (32 | 64 | 2048 | 4096) && !symbol.members) {
|
|
symbol.members = ts.createSymbolTable();
|
|
}
|
|
if (symbol.constEnumOnlyModule && (symbol.flags & (16 | 32 | 256))) {
|
|
symbol.constEnumOnlyModule = false;
|
|
}
|
|
if (symbolFlags & 111551) {
|
|
ts.setValueDeclaration(symbol, node);
|
|
}
|
|
}
|
|
function getDeclarationName(node) {
|
|
if (node.kind === 271) {
|
|
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" : "\"".concat(moduleName, "\""));
|
|
}
|
|
if (name.kind === 162) {
|
|
var nameExpression = name.expression;
|
|
if (ts.isStringOrNumericLiteralLike(nameExpression)) {
|
|
return ts.escapeLeadingUnderscores(nameExpression.text);
|
|
}
|
|
if (ts.isSignedNumericLiteral(nameExpression)) {
|
|
return ts.tokenToString(nameExpression.operator) + nameExpression.operand.text;
|
|
}
|
|
else {
|
|
ts.Debug.fail("Only computed properties with literal names have declaration names");
|
|
}
|
|
}
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
var containingClass = ts.getContainingClass(node);
|
|
if (!containingClass) {
|
|
return undefined;
|
|
}
|
|
var containingClassSymbol = containingClass.symbol;
|
|
return ts.getSymbolNameForPrivateIdentifier(containingClassSymbol, name.escapedText);
|
|
}
|
|
return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
|
|
}
|
|
switch (node.kind) {
|
|
case 171:
|
|
return "__constructor";
|
|
case 179:
|
|
case 174:
|
|
case 323:
|
|
return "__call";
|
|
case 180:
|
|
case 175:
|
|
return "__new";
|
|
case 176:
|
|
return "__index";
|
|
case 272:
|
|
return "__export";
|
|
case 305:
|
|
return "export=";
|
|
case 221:
|
|
if (ts.getAssignmentDeclarationKind(node) === 2) {
|
|
return "export=";
|
|
}
|
|
ts.Debug.fail("Unknown binary declaration kind");
|
|
break;
|
|
case 317:
|
|
return (ts.isJSDocConstructSignature(node) ? "__new" : "__call");
|
|
case 164:
|
|
ts.Debug.assert(node.parent.kind === 317, "Impossible parameter parent kind", function () { return "parent is: ".concat(ts.Debug.formatSyntaxKind(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(ts.Debug.checkDefined(getDeclarationName(node)));
|
|
}
|
|
function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
|
|
ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
|
|
var isDefaultExport = ts.hasSyntacticModifier(node, 512) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
|
|
var name = isComputedName ? "__computed"
|
|
: isDefaultExport && parent ? "default"
|
|
: getDeclarationName(node);
|
|
var symbol;
|
|
if (name === undefined) {
|
|
symbol = createSymbol(0, "__missing");
|
|
}
|
|
else {
|
|
symbol = symbolTable.get(name);
|
|
if (includes & 2885600) {
|
|
classifiableNames.add(name);
|
|
}
|
|
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 (!(includes & 3 && symbol.flags & 67108864)) {
|
|
if (ts.isNamedDeclaration(node)) {
|
|
ts.setParent(node.name, node);
|
|
}
|
|
var message_1 = symbol.flags & 2
|
|
? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0
|
|
: ts.Diagnostics.Duplicate_identifier_0;
|
|
var messageNeedsName_1 = true;
|
|
if (symbol.flags & 384 || includes & 384) {
|
|
message_1 = ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations;
|
|
messageNeedsName_1 = false;
|
|
}
|
|
var multipleDefaultExports_1 = false;
|
|
if (ts.length(symbol.declarations)) {
|
|
if (isDefaultExport) {
|
|
message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
|
|
messageNeedsName_1 = false;
|
|
multipleDefaultExports_1 = true;
|
|
}
|
|
else {
|
|
if (symbol.declarations && symbol.declarations.length &&
|
|
(node.kind === 271 && !node.isExportEquals)) {
|
|
message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
|
|
messageNeedsName_1 = false;
|
|
multipleDefaultExports_1 = true;
|
|
}
|
|
}
|
|
}
|
|
var relatedInformation_1 = [];
|
|
if (ts.isTypeAliasDeclaration(node) && ts.nodeIsMissing(node.type) && ts.hasSyntacticModifier(node, 1) && symbol.flags & (2097152 | 788968 | 1920)) {
|
|
relatedInformation_1.push(createDiagnosticForNode(node, ts.Diagnostics.Did_you_mean_0, "export type { ".concat(ts.unescapeLeadingUnderscores(node.name.escapedText), " }")));
|
|
}
|
|
var declarationName_1 = ts.getNameOfDeclaration(node) || node;
|
|
ts.forEach(symbol.declarations, function (declaration, index) {
|
|
var decl = ts.getNameOfDeclaration(declaration) || declaration;
|
|
var diag = createDiagnosticForNode(decl, message_1, messageNeedsName_1 ? getDisplayName(declaration) : undefined);
|
|
file.bindDiagnostics.push(multipleDefaultExports_1 ? ts.addRelatedInfo(diag, createDiagnosticForNode(declarationName_1, index === 0 ? ts.Diagnostics.Another_export_default_is_here : ts.Diagnostics.and_here)) : diag);
|
|
if (multipleDefaultExports_1) {
|
|
relatedInformation_1.push(createDiagnosticForNode(decl, ts.Diagnostics.The_first_export_default_is_here));
|
|
}
|
|
});
|
|
var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
|
|
file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
|
|
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) || jsdocTreatAsExported(node);
|
|
if (symbolFlags & 2097152) {
|
|
if (node.kind === 275 || (node.kind === 265 && 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.isInJSFile(node));
|
|
if (!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 64)) {
|
|
if (!container.locals || (ts.hasSyntacticModifier(node, 512) && !getDeclarationName(node))) {
|
|
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
}
|
|
var exportKind = symbolFlags & 111551 ? 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 jsdocTreatAsExported(node) {
|
|
if (node.parent && ts.isModuleDeclaration(node)) {
|
|
node = node.parent;
|
|
}
|
|
if (!ts.isJSDocTypeAlias(node))
|
|
return false;
|
|
if (!ts.isJSDocEnumTag(node) && !!node.fullName)
|
|
return true;
|
|
var declName = ts.getNameOfDeclaration(node);
|
|
if (!declName)
|
|
return false;
|
|
if (ts.isPropertyAccessEntityNameExpression(declName.parent) && isTopLevelNamespaceAssignment(declName.parent))
|
|
return true;
|
|
if (ts.isDeclaration(declName.parent) && ts.getCombinedModifierFlags(declName.parent) & 1)
|
|
return true;
|
|
return false;
|
|
}
|
|
function bindContainer(node, containerFlags) {
|
|
var saveContainer = container;
|
|
var saveThisParentContainer = thisParentContainer;
|
|
var savedBlockScopeContainer = blockScopeContainer;
|
|
if (containerFlags & 1) {
|
|
if (node.kind !== 214) {
|
|
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 saveExceptionTarget = currentExceptionTarget;
|
|
var saveActiveLabelList = activeLabelList;
|
|
var saveHasExplicitReturn = hasExplicitReturn;
|
|
var isImmediatelyInvoked = (containerFlags & 16 &&
|
|
!ts.hasSyntacticModifier(node, 256) &&
|
|
!node.asteriskToken &&
|
|
!!ts.getImmediatelyInvokedFunctionExpression(node)) ||
|
|
node.kind === 170;
|
|
if (!isImmediatelyInvoked) {
|
|
currentFlow = initFlowNode({ flags: 2 });
|
|
if (containerFlags & (16 | 128)) {
|
|
currentFlow.node = node;
|
|
}
|
|
}
|
|
currentReturnTarget = isImmediatelyInvoked || node.kind === 171 || (ts.isInJSFile(node) && (node.kind === 256 || node.kind === 213)) ? createBranchLabel() : undefined;
|
|
currentExceptionTarget = undefined;
|
|
currentBreakTarget = undefined;
|
|
currentContinueTarget = undefined;
|
|
activeLabelList = undefined;
|
|
hasExplicitReturn = false;
|
|
bindChildren(node);
|
|
node.flags &= ~2816;
|
|
if (!(currentFlow.flags & 1) && containerFlags & 8 && ts.nodeIsPresent(node.body)) {
|
|
node.flags |= 256;
|
|
if (hasExplicitReturn)
|
|
node.flags |= 512;
|
|
node.endFlowNode = currentFlow;
|
|
}
|
|
if (node.kind === 305) {
|
|
node.flags |= emitFlags;
|
|
node.endFlowNode = currentFlow;
|
|
}
|
|
if (currentReturnTarget) {
|
|
addAntecedent(currentReturnTarget, currentFlow);
|
|
currentFlow = finishFlowLabel(currentReturnTarget);
|
|
if (node.kind === 171 || node.kind === 170 || (ts.isInJSFile(node) && (node.kind === 256 || node.kind === 213))) {
|
|
node.returnFlowNode = currentFlow;
|
|
}
|
|
}
|
|
if (!isImmediatelyInvoked) {
|
|
currentFlow = saveCurrentFlow;
|
|
}
|
|
currentBreakTarget = saveBreakTarget;
|
|
currentContinueTarget = saveContinueTarget;
|
|
currentReturnTarget = saveReturnTarget;
|
|
currentExceptionTarget = saveExceptionTarget;
|
|
activeLabelList = saveActiveLabelList;
|
|
hasExplicitReturn = saveHasExplicitReturn;
|
|
}
|
|
else if (containerFlags & 64) {
|
|
seenThisKeyword = false;
|
|
bindChildren(node);
|
|
node.flags = seenThisKeyword ? node.flags | 128 : node.flags & ~128;
|
|
}
|
|
else {
|
|
bindChildren(node);
|
|
}
|
|
container = saveContainer;
|
|
thisParentContainer = saveThisParentContainer;
|
|
blockScopeContainer = savedBlockScopeContainer;
|
|
}
|
|
function bindEachFunctionsFirst(nodes) {
|
|
bindEach(nodes, function (n) { return n.kind === 256 ? bind(n) : undefined; });
|
|
bindEach(nodes, function (n) { return n.kind !== 256 ? bind(n) : undefined; });
|
|
}
|
|
function bindEach(nodes, bindFunction) {
|
|
if (bindFunction === void 0) { bindFunction = bind; }
|
|
if (nodes === undefined) {
|
|
return;
|
|
}
|
|
ts.forEach(nodes, bindFunction);
|
|
}
|
|
function bindEachChild(node) {
|
|
ts.forEachChild(node, bind, bindEach);
|
|
}
|
|
function bindChildren(node) {
|
|
var saveInAssignmentPattern = inAssignmentPattern;
|
|
inAssignmentPattern = false;
|
|
if (checkUnreachable(node)) {
|
|
bindEachChild(node);
|
|
bindJSDoc(node);
|
|
inAssignmentPattern = saveInAssignmentPattern;
|
|
return;
|
|
}
|
|
if (node.kind >= 237 && node.kind <= 253 && !options.allowUnreachableCode) {
|
|
node.flowNode = currentFlow;
|
|
}
|
|
switch (node.kind) {
|
|
case 241:
|
|
bindWhileStatement(node);
|
|
break;
|
|
case 240:
|
|
bindDoStatement(node);
|
|
break;
|
|
case 242:
|
|
bindForStatement(node);
|
|
break;
|
|
case 243:
|
|
case 244:
|
|
bindForInOrForOfStatement(node);
|
|
break;
|
|
case 239:
|
|
bindIfStatement(node);
|
|
break;
|
|
case 247:
|
|
case 251:
|
|
bindReturnOrThrow(node);
|
|
break;
|
|
case 246:
|
|
case 245:
|
|
bindBreakOrContinueStatement(node);
|
|
break;
|
|
case 252:
|
|
bindTryStatement(node);
|
|
break;
|
|
case 249:
|
|
bindSwitchStatement(node);
|
|
break;
|
|
case 263:
|
|
bindCaseBlock(node);
|
|
break;
|
|
case 289:
|
|
bindCaseClause(node);
|
|
break;
|
|
case 238:
|
|
bindExpressionStatement(node);
|
|
break;
|
|
case 250:
|
|
bindLabeledStatement(node);
|
|
break;
|
|
case 219:
|
|
bindPrefixUnaryExpressionFlow(node);
|
|
break;
|
|
case 220:
|
|
bindPostfixUnaryExpressionFlow(node);
|
|
break;
|
|
case 221:
|
|
if (ts.isDestructuringAssignment(node)) {
|
|
inAssignmentPattern = saveInAssignmentPattern;
|
|
bindDestructuringAssignmentFlow(node);
|
|
return;
|
|
}
|
|
bindBinaryExpressionFlow(node);
|
|
break;
|
|
case 215:
|
|
bindDeleteExpressionFlow(node);
|
|
break;
|
|
case 222:
|
|
bindConditionalExpressionFlow(node);
|
|
break;
|
|
case 254:
|
|
bindVariableDeclarationFlow(node);
|
|
break;
|
|
case 206:
|
|
case 207:
|
|
bindAccessExpressionFlow(node);
|
|
break;
|
|
case 208:
|
|
bindCallExpressionFlow(node);
|
|
break;
|
|
case 230:
|
|
bindNonNullExpressionFlow(node);
|
|
break;
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
bindJSDocTypeAlias(node);
|
|
break;
|
|
case 305: {
|
|
bindEachFunctionsFirst(node.statements);
|
|
bind(node.endOfFileToken);
|
|
break;
|
|
}
|
|
case 235:
|
|
case 262:
|
|
bindEachFunctionsFirst(node.statements);
|
|
break;
|
|
case 203:
|
|
bindBindingElementFlow(node);
|
|
break;
|
|
case 205:
|
|
case 204:
|
|
case 296:
|
|
case 225:
|
|
inAssignmentPattern = saveInAssignmentPattern;
|
|
default:
|
|
bindEachChild(node);
|
|
break;
|
|
}
|
|
bindJSDoc(node);
|
|
inAssignmentPattern = saveInAssignmentPattern;
|
|
}
|
|
function isNarrowingExpression(expr) {
|
|
switch (expr.kind) {
|
|
case 79:
|
|
case 80:
|
|
case 108:
|
|
case 206:
|
|
case 207:
|
|
return containsNarrowableReference(expr);
|
|
case 208:
|
|
return hasNarrowableArgument(expr);
|
|
case 212:
|
|
case 230:
|
|
return isNarrowingExpression(expr.expression);
|
|
case 221:
|
|
return isNarrowingBinaryExpression(expr);
|
|
case 219:
|
|
return expr.operator === 53 && isNarrowingExpression(expr.operand);
|
|
case 216:
|
|
return isNarrowingExpression(expr.expression);
|
|
}
|
|
return false;
|
|
}
|
|
function isNarrowableReference(expr) {
|
|
return ts.isDottedName(expr)
|
|
|| (ts.isPropertyAccessExpression(expr) || ts.isNonNullExpression(expr) || ts.isParenthesizedExpression(expr)) && isNarrowableReference(expr.expression)
|
|
|| ts.isBinaryExpression(expr) && expr.operatorToken.kind === 27 && isNarrowableReference(expr.right)
|
|
|| ts.isElementAccessExpression(expr) && (ts.isStringOrNumericLiteralLike(expr.argumentExpression) || ts.isEntityNameExpression(expr.argumentExpression)) && isNarrowableReference(expr.expression)
|
|
|| ts.isAssignmentExpression(expr) && isNarrowableReference(expr.left);
|
|
}
|
|
function containsNarrowableReference(expr) {
|
|
return isNarrowableReference(expr) || ts.isOptionalChain(expr) && containsNarrowableReference(expr.expression);
|
|
}
|
|
function hasNarrowableArgument(expr) {
|
|
if (expr.arguments) {
|
|
for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) {
|
|
var argument = _a[_i];
|
|
if (containsNarrowableReference(argument)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
if (expr.expression.kind === 206 &&
|
|
containsNarrowableReference(expr.expression.expression)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isNarrowingTypeofOperands(expr1, expr2) {
|
|
return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
|
|
}
|
|
function isNarrowingBinaryExpression(expr) {
|
|
switch (expr.operatorToken.kind) {
|
|
case 63:
|
|
case 75:
|
|
case 76:
|
|
case 77:
|
|
return containsNarrowableReference(expr.left);
|
|
case 34:
|
|
case 35:
|
|
case 36:
|
|
case 37:
|
|
return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
|
|
isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
|
|
case 102:
|
|
return isNarrowableOperand(expr.left);
|
|
case 101:
|
|
return isNarrowingExpression(expr.right);
|
|
case 27:
|
|
return isNarrowingExpression(expr.right);
|
|
}
|
|
return false;
|
|
}
|
|
function isNarrowableOperand(expr) {
|
|
switch (expr.kind) {
|
|
case 212:
|
|
return isNarrowableOperand(expr.expression);
|
|
case 221:
|
|
switch (expr.operatorToken.kind) {
|
|
case 63:
|
|
return isNarrowableOperand(expr.left);
|
|
case 27:
|
|
return isNarrowableOperand(expr.right);
|
|
}
|
|
}
|
|
return containsNarrowableReference(expr);
|
|
}
|
|
function createBranchLabel() {
|
|
return initFlowNode({ flags: 4, antecedents: undefined });
|
|
}
|
|
function createLoopLabel() {
|
|
return initFlowNode({ flags: 8, antecedents: undefined });
|
|
}
|
|
function createReduceLabel(target, antecedents, antecedent) {
|
|
return initFlowNode({ flags: 1024, target: target, antecedents: antecedents, antecedent: antecedent });
|
|
}
|
|
function setFlowNodeReferenced(flow) {
|
|
flow.flags |= flow.flags & 2048 ? 4096 : 2048;
|
|
}
|
|
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 === 110 && flags & 64 ||
|
|
expression.kind === 95 && flags & 32) &&
|
|
!ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
|
|
return unreachableFlow;
|
|
}
|
|
if (!isNarrowingExpression(expression)) {
|
|
return antecedent;
|
|
}
|
|
setFlowNodeReferenced(antecedent);
|
|
return initFlowNode({ flags: flags, antecedent: antecedent, node: expression });
|
|
}
|
|
function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) {
|
|
setFlowNodeReferenced(antecedent);
|
|
return initFlowNode({ flags: 128, antecedent: antecedent, switchStatement: switchStatement, clauseStart: clauseStart, clauseEnd: clauseEnd });
|
|
}
|
|
function createFlowMutation(flags, antecedent, node) {
|
|
setFlowNodeReferenced(antecedent);
|
|
var result = initFlowNode({ flags: flags, antecedent: antecedent, node: node });
|
|
if (currentExceptionTarget) {
|
|
addAntecedent(currentExceptionTarget, result);
|
|
}
|
|
return result;
|
|
}
|
|
function createFlowCall(antecedent, node) {
|
|
setFlowNodeReferenced(antecedent);
|
|
return initFlowNode({ flags: 512, antecedent: antecedent, node: node });
|
|
}
|
|
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 239:
|
|
case 241:
|
|
case 240:
|
|
return parent.expression === node;
|
|
case 242:
|
|
case 222:
|
|
return parent.condition === node;
|
|
}
|
|
return false;
|
|
}
|
|
function isLogicalExpression(node) {
|
|
while (true) {
|
|
if (node.kind === 212) {
|
|
node = node.expression;
|
|
}
|
|
else if (node.kind === 219 && node.operator === 53) {
|
|
node = node.operand;
|
|
}
|
|
else {
|
|
return node.kind === 221 && (node.operatorToken.kind === 55 ||
|
|
node.operatorToken.kind === 56 ||
|
|
node.operatorToken.kind === 60);
|
|
}
|
|
}
|
|
}
|
|
function isLogicalAssignmentExpression(node) {
|
|
node = ts.skipParentheses(node);
|
|
return ts.isBinaryExpression(node) && ts.isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind);
|
|
}
|
|
function isTopLevelLogicalExpression(node) {
|
|
while (ts.isParenthesizedExpression(node.parent) ||
|
|
ts.isPrefixUnaryExpression(node.parent) && node.parent.operator === 53) {
|
|
node = node.parent;
|
|
}
|
|
return !isStatementCondition(node) &&
|
|
!isLogicalExpression(node.parent) &&
|
|
!(ts.isOptionalChain(node.parent) && node.parent.expression === node);
|
|
}
|
|
function doWithConditionalBranches(action, value, trueTarget, falseTarget) {
|
|
var savedTrueTarget = currentTrueTarget;
|
|
var savedFalseTarget = currentFalseTarget;
|
|
currentTrueTarget = trueTarget;
|
|
currentFalseTarget = falseTarget;
|
|
action(value);
|
|
currentTrueTarget = savedTrueTarget;
|
|
currentFalseTarget = savedFalseTarget;
|
|
}
|
|
function bindCondition(node, trueTarget, falseTarget) {
|
|
doWithConditionalBranches(bind, node, trueTarget, falseTarget);
|
|
if (!node || !isLogicalAssignmentExpression(node) && !isLogicalExpression(node) && !(ts.isOptionalChain(node) && ts.isOutermostOptionalChain(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 setContinueTarget(node, target) {
|
|
var label = activeLabelList;
|
|
while (label && node.parent.kind === 250) {
|
|
label.continueTarget = target;
|
|
label = label.next;
|
|
node = node.parent;
|
|
}
|
|
return target;
|
|
}
|
|
function bindWhileStatement(node) {
|
|
var preWhileLabel = setContinueTarget(node, 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 preConditionLabel = setContinueTarget(node, createBranchLabel());
|
|
var postDoLabel = 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 = setContinueTarget(node, 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 = setContinueTarget(node, createLoopLabel());
|
|
var postLoopLabel = createBranchLabel();
|
|
bind(node.expression);
|
|
addAntecedent(preLoopLabel, currentFlow);
|
|
currentFlow = preLoopLabel;
|
|
if (node.kind === 244) {
|
|
bind(node.awaitModifier);
|
|
}
|
|
addAntecedent(postLoopLabel, currentFlow);
|
|
bind(node.initializer);
|
|
if (node.initializer.kind !== 255) {
|
|
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 === 247) {
|
|
hasExplicitReturn = true;
|
|
if (currentReturnTarget) {
|
|
addAntecedent(currentReturnTarget, currentFlow);
|
|
}
|
|
}
|
|
currentFlow = unreachableFlow;
|
|
}
|
|
function findActiveLabel(name) {
|
|
for (var label = activeLabelList; label; label = label.next) {
|
|
if (label.name === name) {
|
|
return label;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
|
|
var flowLabel = node.kind === 246 ? 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 saveReturnTarget = currentReturnTarget;
|
|
var saveExceptionTarget = currentExceptionTarget;
|
|
var normalExitLabel = createBranchLabel();
|
|
var returnLabel = createBranchLabel();
|
|
var exceptionLabel = createBranchLabel();
|
|
if (node.finallyBlock) {
|
|
currentReturnTarget = returnLabel;
|
|
}
|
|
addAntecedent(exceptionLabel, currentFlow);
|
|
currentExceptionTarget = exceptionLabel;
|
|
bind(node.tryBlock);
|
|
addAntecedent(normalExitLabel, currentFlow);
|
|
if (node.catchClause) {
|
|
currentFlow = finishFlowLabel(exceptionLabel);
|
|
exceptionLabel = createBranchLabel();
|
|
addAntecedent(exceptionLabel, currentFlow);
|
|
currentExceptionTarget = exceptionLabel;
|
|
bind(node.catchClause);
|
|
addAntecedent(normalExitLabel, currentFlow);
|
|
}
|
|
currentReturnTarget = saveReturnTarget;
|
|
currentExceptionTarget = saveExceptionTarget;
|
|
if (node.finallyBlock) {
|
|
var finallyLabel = createBranchLabel();
|
|
finallyLabel.antecedents = ts.concatenate(ts.concatenate(normalExitLabel.antecedents, exceptionLabel.antecedents), returnLabel.antecedents);
|
|
currentFlow = finallyLabel;
|
|
bind(node.finallyBlock);
|
|
if (currentFlow.flags & 1) {
|
|
currentFlow = unreachableFlow;
|
|
}
|
|
else {
|
|
if (currentReturnTarget && returnLabel.antecedents) {
|
|
addAntecedent(currentReturnTarget, createReduceLabel(finallyLabel, returnLabel.antecedents, currentFlow));
|
|
}
|
|
if (currentExceptionTarget && exceptionLabel.antecedents) {
|
|
addAntecedent(currentExceptionTarget, createReduceLabel(finallyLabel, exceptionLabel.antecedents, currentFlow));
|
|
}
|
|
currentFlow = normalExitLabel.antecedents ? createReduceLabel(finallyLabel, normalExitLabel.antecedents, currentFlow) : unreachableFlow;
|
|
}
|
|
}
|
|
else {
|
|
currentFlow = finishFlowLabel(normalExitLabel);
|
|
}
|
|
}
|
|
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 === 290; });
|
|
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 clauses = node.clauses;
|
|
var isNarrowingSwitch = isNarrowingExpression(node.parent.expression);
|
|
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, isNarrowingSwitch ? createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1) : preSwitchCaseFlow);
|
|
addAntecedent(preCaseLabel, fallthroughFlow);
|
|
currentFlow = finishFlowLabel(preCaseLabel);
|
|
var clause = clauses[i];
|
|
bind(clause);
|
|
fallthroughFlow = currentFlow;
|
|
if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) {
|
|
clause.fallthroughFlowNode = currentFlow;
|
|
}
|
|
}
|
|
}
|
|
function bindCaseClause(node) {
|
|
var saveCurrentFlow = currentFlow;
|
|
currentFlow = preSwitchCaseFlow;
|
|
bind(node.expression);
|
|
currentFlow = saveCurrentFlow;
|
|
bindEach(node.statements);
|
|
}
|
|
function bindExpressionStatement(node) {
|
|
bind(node.expression);
|
|
maybeBindExpressionFlowIfCall(node.expression);
|
|
}
|
|
function maybeBindExpressionFlowIfCall(node) {
|
|
if (node.kind === 208) {
|
|
var call = node;
|
|
if (call.expression.kind !== 106 && ts.isDottedName(call.expression)) {
|
|
currentFlow = createFlowCall(currentFlow, call);
|
|
}
|
|
}
|
|
}
|
|
function bindLabeledStatement(node) {
|
|
var postStatementLabel = createBranchLabel();
|
|
activeLabelList = {
|
|
next: activeLabelList,
|
|
name: node.label.escapedText,
|
|
breakTarget: postStatementLabel,
|
|
continueTarget: undefined,
|
|
referenced: false
|
|
};
|
|
bind(node.label);
|
|
bind(node.statement);
|
|
if (!activeLabelList.referenced && !options.allowUnusedLabels) {
|
|
errorOrSuggestionOnNode(ts.unusedLabelIsError(options), node.label, ts.Diagnostics.Unused_label);
|
|
}
|
|
activeLabelList = activeLabelList.next;
|
|
addAntecedent(postStatementLabel, currentFlow);
|
|
currentFlow = finishFlowLabel(postStatementLabel);
|
|
}
|
|
function bindDestructuringTargetFlow(node) {
|
|
if (node.kind === 221 && node.operatorToken.kind === 63) {
|
|
bindAssignmentTargetFlow(node.left);
|
|
}
|
|
else {
|
|
bindAssignmentTargetFlow(node);
|
|
}
|
|
}
|
|
function bindAssignmentTargetFlow(node) {
|
|
if (isNarrowableReference(node)) {
|
|
currentFlow = createFlowMutation(16, currentFlow, node);
|
|
}
|
|
else if (node.kind === 204) {
|
|
for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
|
|
var e = _a[_i];
|
|
if (e.kind === 225) {
|
|
bindAssignmentTargetFlow(e.expression);
|
|
}
|
|
else {
|
|
bindDestructuringTargetFlow(e);
|
|
}
|
|
}
|
|
}
|
|
else if (node.kind === 205) {
|
|
for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
|
|
var p = _c[_b];
|
|
if (p.kind === 296) {
|
|
bindDestructuringTargetFlow(p.initializer);
|
|
}
|
|
else if (p.kind === 297) {
|
|
bindAssignmentTargetFlow(p.name);
|
|
}
|
|
else if (p.kind === 298) {
|
|
bindAssignmentTargetFlow(p.expression);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
|
|
var preRightLabel = createBranchLabel();
|
|
if (node.operatorToken.kind === 55 || node.operatorToken.kind === 76) {
|
|
bindCondition(node.left, preRightLabel, falseTarget);
|
|
}
|
|
else {
|
|
bindCondition(node.left, trueTarget, preRightLabel);
|
|
}
|
|
currentFlow = finishFlowLabel(preRightLabel);
|
|
bind(node.operatorToken);
|
|
if (ts.isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind)) {
|
|
doWithConditionalBranches(bind, node.right, trueTarget, falseTarget);
|
|
bindAssignmentTargetFlow(node.left);
|
|
addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node));
|
|
addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node));
|
|
}
|
|
else {
|
|
bindCondition(node.right, trueTarget, falseTarget);
|
|
}
|
|
}
|
|
function bindPrefixUnaryExpressionFlow(node) {
|
|
if (node.operator === 53) {
|
|
var saveTrueTarget = currentTrueTarget;
|
|
currentTrueTarget = currentFalseTarget;
|
|
currentFalseTarget = saveTrueTarget;
|
|
bindEachChild(node);
|
|
currentFalseTarget = currentTrueTarget;
|
|
currentTrueTarget = saveTrueTarget;
|
|
}
|
|
else {
|
|
bindEachChild(node);
|
|
if (node.operator === 45 || node.operator === 46) {
|
|
bindAssignmentTargetFlow(node.operand);
|
|
}
|
|
}
|
|
}
|
|
function bindPostfixUnaryExpressionFlow(node) {
|
|
bindEachChild(node);
|
|
if (node.operator === 45 || node.operator === 46) {
|
|
bindAssignmentTargetFlow(node.operand);
|
|
}
|
|
}
|
|
function bindDestructuringAssignmentFlow(node) {
|
|
if (inAssignmentPattern) {
|
|
inAssignmentPattern = false;
|
|
bind(node.operatorToken);
|
|
bind(node.right);
|
|
inAssignmentPattern = true;
|
|
bind(node.left);
|
|
}
|
|
else {
|
|
inAssignmentPattern = true;
|
|
bind(node.left);
|
|
inAssignmentPattern = false;
|
|
bind(node.operatorToken);
|
|
bind(node.right);
|
|
}
|
|
bindAssignmentTargetFlow(node.left);
|
|
}
|
|
function createBindBinaryExpressionFlow() {
|
|
return ts.createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, undefined);
|
|
function onEnter(node, state) {
|
|
if (state) {
|
|
state.stackIndex++;
|
|
ts.setParent(node, parent);
|
|
var saveInStrictMode = inStrictMode;
|
|
bindWorker(node);
|
|
var saveParent = parent;
|
|
parent = node;
|
|
state.skip = false;
|
|
state.inStrictModeStack[state.stackIndex] = saveInStrictMode;
|
|
state.parentStack[state.stackIndex] = saveParent;
|
|
}
|
|
else {
|
|
state = {
|
|
stackIndex: 0,
|
|
skip: false,
|
|
inStrictModeStack: [undefined],
|
|
parentStack: [undefined]
|
|
};
|
|
}
|
|
var operator = node.operatorToken.kind;
|
|
if (operator === 55 ||
|
|
operator === 56 ||
|
|
operator === 60 ||
|
|
ts.isLogicalOrCoalescingAssignmentOperator(operator)) {
|
|
if (isTopLevelLogicalExpression(node)) {
|
|
var postExpressionLabel = createBranchLabel();
|
|
bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel);
|
|
currentFlow = finishFlowLabel(postExpressionLabel);
|
|
}
|
|
else {
|
|
bindLogicalLikeExpression(node, currentTrueTarget, currentFalseTarget);
|
|
}
|
|
state.skip = true;
|
|
}
|
|
return state;
|
|
}
|
|
function onLeft(left, state, node) {
|
|
if (!state.skip) {
|
|
var maybeBound = maybeBind(left);
|
|
if (node.operatorToken.kind === 27) {
|
|
maybeBindExpressionFlowIfCall(left);
|
|
}
|
|
return maybeBound;
|
|
}
|
|
}
|
|
function onOperator(operatorToken, state, _node) {
|
|
if (!state.skip) {
|
|
bind(operatorToken);
|
|
}
|
|
}
|
|
function onRight(right, state, node) {
|
|
if (!state.skip) {
|
|
var maybeBound = maybeBind(right);
|
|
if (node.operatorToken.kind === 27) {
|
|
maybeBindExpressionFlowIfCall(right);
|
|
}
|
|
return maybeBound;
|
|
}
|
|
}
|
|
function onExit(node, state) {
|
|
if (!state.skip) {
|
|
var operator = node.operatorToken.kind;
|
|
if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
|
|
bindAssignmentTargetFlow(node.left);
|
|
if (operator === 63 && node.left.kind === 207) {
|
|
var elementAccess = node.left;
|
|
if (isNarrowableOperand(elementAccess.expression)) {
|
|
currentFlow = createFlowMutation(256, currentFlow, node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var savedInStrictMode = state.inStrictModeStack[state.stackIndex];
|
|
var savedParent = state.parentStack[state.stackIndex];
|
|
if (savedInStrictMode !== undefined) {
|
|
inStrictMode = savedInStrictMode;
|
|
}
|
|
if (savedParent !== undefined) {
|
|
parent = savedParent;
|
|
}
|
|
state.skip = false;
|
|
state.stackIndex--;
|
|
}
|
|
function maybeBind(node) {
|
|
if (node && ts.isBinaryExpression(node) && !ts.isDestructuringAssignment(node)) {
|
|
return node;
|
|
}
|
|
bind(node);
|
|
}
|
|
}
|
|
function bindDeleteExpressionFlow(node) {
|
|
bindEachChild(node);
|
|
if (node.expression.kind === 206) {
|
|
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 = createFlowMutation(16, currentFlow, node);
|
|
}
|
|
}
|
|
function bindVariableDeclarationFlow(node) {
|
|
bindEachChild(node);
|
|
if (node.initializer || ts.isForInOrOfStatement(node.parent.parent)) {
|
|
bindInitializedVariableFlow(node);
|
|
}
|
|
}
|
|
function bindBindingElementFlow(node) {
|
|
if (ts.isBindingPattern(node.name)) {
|
|
bind(node.dotDotDotToken);
|
|
bind(node.propertyName);
|
|
bind(node.initializer);
|
|
bind(node.name);
|
|
}
|
|
else {
|
|
bindEachChild(node);
|
|
}
|
|
}
|
|
function bindJSDocTypeAlias(node) {
|
|
bind(node.tagName);
|
|
if (node.kind !== 339 && node.fullName) {
|
|
ts.setParent(node.fullName, node);
|
|
ts.setParentRecursive(node.fullName, false);
|
|
}
|
|
if (typeof node.comment !== "string") {
|
|
bindEach(node.comment);
|
|
}
|
|
}
|
|
function bindJSDocClassTag(node) {
|
|
bindEachChild(node);
|
|
var host = ts.getHostSignatureFromJSDoc(node);
|
|
if (host && host.kind !== 169) {
|
|
addDeclarationToSymbol(host.symbol, host, 32);
|
|
}
|
|
}
|
|
function bindOptionalExpression(node, trueTarget, falseTarget) {
|
|
doWithConditionalBranches(bind, node, trueTarget, falseTarget);
|
|
if (!ts.isOptionalChain(node) || ts.isOutermostOptionalChain(node)) {
|
|
addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node));
|
|
addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node));
|
|
}
|
|
}
|
|
function bindOptionalChainRest(node) {
|
|
switch (node.kind) {
|
|
case 206:
|
|
bind(node.questionDotToken);
|
|
bind(node.name);
|
|
break;
|
|
case 207:
|
|
bind(node.questionDotToken);
|
|
bind(node.argumentExpression);
|
|
break;
|
|
case 208:
|
|
bind(node.questionDotToken);
|
|
bindEach(node.typeArguments);
|
|
bindEach(node.arguments);
|
|
break;
|
|
}
|
|
}
|
|
function bindOptionalChain(node, trueTarget, falseTarget) {
|
|
var preChainLabel = ts.isOptionalChainRoot(node) ? createBranchLabel() : undefined;
|
|
bindOptionalExpression(node.expression, preChainLabel || trueTarget, falseTarget);
|
|
if (preChainLabel) {
|
|
currentFlow = finishFlowLabel(preChainLabel);
|
|
}
|
|
doWithConditionalBranches(bindOptionalChainRest, node, trueTarget, falseTarget);
|
|
if (ts.isOutermostOptionalChain(node)) {
|
|
addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node));
|
|
addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node));
|
|
}
|
|
}
|
|
function bindOptionalChainFlow(node) {
|
|
if (isTopLevelLogicalExpression(node)) {
|
|
var postExpressionLabel = createBranchLabel();
|
|
bindOptionalChain(node, postExpressionLabel, postExpressionLabel);
|
|
currentFlow = finishFlowLabel(postExpressionLabel);
|
|
}
|
|
else {
|
|
bindOptionalChain(node, currentTrueTarget, currentFalseTarget);
|
|
}
|
|
}
|
|
function bindNonNullExpressionFlow(node) {
|
|
if (ts.isOptionalChain(node)) {
|
|
bindOptionalChainFlow(node);
|
|
}
|
|
else {
|
|
bindEachChild(node);
|
|
}
|
|
}
|
|
function bindAccessExpressionFlow(node) {
|
|
if (ts.isOptionalChain(node)) {
|
|
bindOptionalChainFlow(node);
|
|
}
|
|
else {
|
|
bindEachChild(node);
|
|
}
|
|
}
|
|
function bindCallExpressionFlow(node) {
|
|
if (ts.isOptionalChain(node)) {
|
|
bindOptionalChainFlow(node);
|
|
}
|
|
else {
|
|
var expr = ts.skipParentheses(node.expression);
|
|
if (expr.kind === 213 || expr.kind === 214) {
|
|
bindEach(node.typeArguments);
|
|
bindEach(node.arguments);
|
|
bind(node.expression);
|
|
}
|
|
else {
|
|
bindEachChild(node);
|
|
if (node.expression.kind === 106) {
|
|
currentFlow = createFlowCall(currentFlow, node);
|
|
}
|
|
}
|
|
}
|
|
if (node.expression.kind === 206) {
|
|
var propertyAccess = node.expression;
|
|
if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
|
|
currentFlow = createFlowMutation(256, currentFlow, node);
|
|
}
|
|
}
|
|
}
|
|
function getContainerFlags(node) {
|
|
switch (node.kind) {
|
|
case 226:
|
|
case 257:
|
|
case 260:
|
|
case 205:
|
|
case 182:
|
|
case 322:
|
|
case 286:
|
|
return 1;
|
|
case 258:
|
|
return 1 | 64;
|
|
case 261:
|
|
case 259:
|
|
case 195:
|
|
case 176:
|
|
return 1 | 32;
|
|
case 305:
|
|
return 1 | 4 | 32;
|
|
case 172:
|
|
case 173:
|
|
case 169:
|
|
if (ts.isObjectLiteralOrClassExpressionMethodOrAccessor(node)) {
|
|
return 1 | 4 | 32 | 8 | 128;
|
|
}
|
|
case 171:
|
|
case 256:
|
|
case 168:
|
|
case 174:
|
|
case 323:
|
|
case 317:
|
|
case 179:
|
|
case 175:
|
|
case 180:
|
|
case 170:
|
|
return 1 | 4 | 32 | 8;
|
|
case 213:
|
|
case 214:
|
|
return 1 | 4 | 32 | 8 | 16;
|
|
case 262:
|
|
return 4;
|
|
case 167:
|
|
return node.initializer ? 4 : 0;
|
|
case 292:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
case 263:
|
|
return 2;
|
|
case 235:
|
|
return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(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 261:
|
|
return declareModuleMember(node, symbolFlags, symbolExcludes);
|
|
case 305:
|
|
return declareSourceFileMember(node, symbolFlags, symbolExcludes);
|
|
case 226:
|
|
case 257:
|
|
return declareClassMember(node, symbolFlags, symbolExcludes);
|
|
case 260:
|
|
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
|
|
case 182:
|
|
case 322:
|
|
case 205:
|
|
case 258:
|
|
case 286:
|
|
return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
|
|
case 179:
|
|
case 180:
|
|
case 174:
|
|
case 175:
|
|
case 323:
|
|
case 176:
|
|
case 169:
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
case 317:
|
|
case 345:
|
|
case 338:
|
|
case 170:
|
|
case 259:
|
|
case 195:
|
|
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
|
|
}
|
|
}
|
|
function declareClassMember(node, symbolFlags, symbolExcludes) {
|
|
return ts.isStatic(node)
|
|
? 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 = ts.isSourceFile(node) ? node : ts.tryCast(node.body, ts.isModuleBlock);
|
|
return !!body && body.statements.some(function (s) { return ts.isExportDeclaration(s) || ts.isExportAssignment(s); });
|
|
}
|
|
function setExportContextFlag(node) {
|
|
if (node.flags & 16777216 && !hasExportDeclarations(node)) {
|
|
node.flags |= 64;
|
|
}
|
|
else {
|
|
node.flags &= ~64;
|
|
}
|
|
}
|
|
function bindModuleDeclaration(node) {
|
|
setExportContextFlag(node);
|
|
if (ts.isAmbientModule(node)) {
|
|
if (ts.hasSyntacticModifier(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 === 10) {
|
|
var text = node.name.text;
|
|
pattern = ts.tryParsePattern(text);
|
|
if (pattern === undefined) {
|
|
errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
|
|
}
|
|
}
|
|
var symbol = declareSymbolAndAddToSymbolTable(node, 512, 110735);
|
|
file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
|
|
}
|
|
}
|
|
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 ? 110735 : 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) {
|
|
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 261:
|
|
declareModuleMember(node, symbolFlags, symbolExcludes);
|
|
break;
|
|
case 305:
|
|
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 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 = typeAlias.parent.parent;
|
|
container = ts.findAncestor(host.parent, function (n) { return !!(getContainerFlags(n) & 1); }) || file;
|
|
blockScopeContainer = ts.getEnclosingBlockScopeContainer(host) || file;
|
|
currentFlow = initFlowNode({ flags: 2 });
|
|
parent = typeAlias;
|
|
bind(typeAlias.typeExpression);
|
|
var declName = ts.getNameOfDeclaration(typeAlias);
|
|
if ((ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName) && declName && ts.isPropertyAccessEntityNameExpression(declName.parent)) {
|
|
var isTopLevel = isTopLevelNamespaceAssignment(declName.parent);
|
|
if (isTopLevel) {
|
|
bindPotentiallyMissingNamespaces(file.symbol, declName.parent, isTopLevel, !!ts.findAncestor(declName, function (d) { return ts.isPropertyAccessExpression(d) && d.name.escapedText === "prototype"; }), false);
|
|
var oldContainer = container;
|
|
switch (ts.getAssignmentDeclarationPropertyAccessKind(declName.parent)) {
|
|
case 1:
|
|
case 2:
|
|
if (!ts.isExternalOrCommonJsModule(file)) {
|
|
container = undefined;
|
|
}
|
|
else {
|
|
container = file;
|
|
}
|
|
break;
|
|
case 4:
|
|
container = declName.parent.expression;
|
|
break;
|
|
case 3:
|
|
container = declName.parent.expression.name;
|
|
break;
|
|
case 5:
|
|
container = isExportsOrModuleExportsOrAlias(file, declName.parent.expression) ? file
|
|
: ts.isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name
|
|
: declName.parent.expression;
|
|
break;
|
|
case 0:
|
|
return ts.Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration");
|
|
}
|
|
if (container) {
|
|
declareModuleMember(typeAlias, 524288, 788968);
|
|
}
|
|
container = oldContainer;
|
|
}
|
|
}
|
|
else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79) {
|
|
parent = typeAlias.parent;
|
|
bindBlockScopedDeclaration(typeAlias, 524288, 788968);
|
|
}
|
|
else {
|
|
bind(typeAlias.fullName);
|
|
}
|
|
}
|
|
container = saveContainer;
|
|
lastContainer = saveLastContainer;
|
|
blockScopeContainer = saveBlockScopeContainer;
|
|
parent = saveParent;
|
|
currentFlow = saveCurrentFlow;
|
|
}
|
|
function checkContextualIdentifier(node) {
|
|
if (!file.parseDiagnostics.length &&
|
|
!(node.flags & 16777216) &&
|
|
!(node.flags & 8388608) &&
|
|
!ts.isIdentifierName(node)) {
|
|
if (inStrictMode &&
|
|
node.originalKeywordKind >= 117 &&
|
|
node.originalKeywordKind <= 125) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
|
|
}
|
|
else if (node.originalKeywordKind === 132) {
|
|
if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
|
|
}
|
|
else if (node.flags & 32768) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
|
|
}
|
|
}
|
|
else if (node.originalKeywordKind === 125 && node.flags & 8192) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, 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 checkPrivateIdentifier(node) {
|
|
if (node.escapedText === "#constructor") {
|
|
if (!file.parseDiagnostics.length) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.constructor_is_a_reserved_word, ts.declarationNameToString(node)));
|
|
}
|
|
}
|
|
}
|
|
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 === 79) {
|
|
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 === 79) {
|
|
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.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_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 !== 305 &&
|
|
blockScopeContainer.kind !== 261 &&
|
|
!ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
|
|
var errorSpan = ts.getErrorSpanForNode(file, node);
|
|
file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node)));
|
|
}
|
|
}
|
|
}
|
|
function checkStrictModeNumericLiteral(node) {
|
|
if (languageVersion < 1 && 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 === 45 || node.operator === 46) {
|
|
checkStrictModeEvalOrArguments(node, node.operand);
|
|
}
|
|
}
|
|
}
|
|
function checkStrictModeWithStatement(node) {
|
|
if (inStrictMode) {
|
|
errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
|
|
}
|
|
}
|
|
function checkStrictModeLabeledStatement(node) {
|
|
if (inStrictMode && ts.getEmitScriptTarget(options) >= 2) {
|
|
if (ts.isDeclarationStatement(node.statement) || ts.isVariableStatement(node.statement)) {
|
|
errorOnFirstToken(node.label, ts.Diagnostics.A_label_is_not_allowed_here);
|
|
}
|
|
}
|
|
}
|
|
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 errorOrSuggestionOnNode(isError, node, message) {
|
|
errorOrSuggestionOnRange(isError, node, node, message);
|
|
}
|
|
function errorOrSuggestionOnRange(isError, startNode, endNode, message) {
|
|
addErrorOrSuggestionDiagnostic(isError, { pos: ts.getTokenPosOfNode(startNode, file), end: endNode.end }, message);
|
|
}
|
|
function addErrorOrSuggestionDiagnostic(isError, range, message) {
|
|
var diag = ts.createFileDiagnostic(file, range.pos, range.end - range.pos, message);
|
|
if (isError) {
|
|
file.bindDiagnostics.push(diag);
|
|
}
|
|
else {
|
|
file.bindSuggestionDiagnostics = ts.append(file.bindSuggestionDiagnostics, __assign(__assign({}, diag), { category: ts.DiagnosticCategory.Suggestion }));
|
|
}
|
|
}
|
|
function bind(node) {
|
|
if (!node) {
|
|
return;
|
|
}
|
|
ts.setParent(node, parent);
|
|
if (ts.tracing)
|
|
node.tracingPath = file.path;
|
|
var saveInStrictMode = inStrictMode;
|
|
bindWorker(node);
|
|
if (node.kind > 160) {
|
|
var saveParent = parent;
|
|
parent = node;
|
|
var containerFlags = getContainerFlags(node);
|
|
if (containerFlags === 0) {
|
|
bindChildren(node);
|
|
}
|
|
else {
|
|
bindContainer(node, containerFlags);
|
|
}
|
|
parent = saveParent;
|
|
}
|
|
else {
|
|
var saveParent = parent;
|
|
if (node.kind === 1)
|
|
parent = node;
|
|
bindJSDoc(node);
|
|
parent = saveParent;
|
|
}
|
|
inStrictMode = saveInStrictMode;
|
|
}
|
|
function bindJSDoc(node) {
|
|
if (ts.hasJSDocNodes(node)) {
|
|
if (ts.isInJSFile(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];
|
|
ts.setParent(j, node);
|
|
ts.setParentRecursive(j, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function updateStrictModeStatementList(statements) {
|
|
if (!inStrictMode) {
|
|
for (var _i = 0, statements_3 = statements; _i < statements_3.length; _i++) {
|
|
var statement = statements_3[_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 79:
|
|
if (node.isInJSDocNamespace) {
|
|
var parentNode = node.parent;
|
|
while (parentNode && !ts.isJSDocTypeAlias(parentNode)) {
|
|
parentNode = parentNode.parent;
|
|
}
|
|
bindBlockScopedDeclaration(parentNode, 524288, 788968);
|
|
break;
|
|
}
|
|
case 108:
|
|
if (currentFlow && (ts.isExpression(node) || parent.kind === 297)) {
|
|
node.flowNode = currentFlow;
|
|
}
|
|
return checkContextualIdentifier(node);
|
|
case 161:
|
|
if (currentFlow && ts.isPartOfTypeQuery(node)) {
|
|
node.flowNode = currentFlow;
|
|
}
|
|
break;
|
|
case 231:
|
|
case 106:
|
|
node.flowNode = currentFlow;
|
|
break;
|
|
case 80:
|
|
return checkPrivateIdentifier(node);
|
|
case 206:
|
|
case 207:
|
|
var expr = node;
|
|
if (currentFlow && isNarrowableReference(expr)) {
|
|
expr.flowNode = currentFlow;
|
|
}
|
|
if (ts.isSpecialPropertyDeclaration(expr)) {
|
|
bindSpecialPropertyDeclaration(expr);
|
|
}
|
|
if (ts.isInJSFile(expr) &&
|
|
file.commonJsModuleIndicator &&
|
|
ts.isModuleExportsAccessExpression(expr) &&
|
|
!lookupSymbolForName(blockScopeContainer, "module")) {
|
|
declareSymbol(file.locals, undefined, expr.expression, 1 | 134217728, 111550);
|
|
}
|
|
break;
|
|
case 221:
|
|
var specialKind = ts.getAssignmentDeclarationKind(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:
|
|
var expression = node.left.expression;
|
|
if (ts.isInJSFile(node) && ts.isIdentifier(expression)) {
|
|
var symbol = lookupSymbolForName(blockScopeContainer, expression.escapedText);
|
|
if (ts.isThisInitializedDeclaration(symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration)) {
|
|
bindThisPropertyAssignment(node);
|
|
break;
|
|
}
|
|
}
|
|
bindSpecialPropertyAssignment(node);
|
|
break;
|
|
case 0:
|
|
break;
|
|
default:
|
|
ts.Debug.fail("Unknown binary expression special property assignment kind");
|
|
}
|
|
return checkStrictModeBinaryExpression(node);
|
|
case 292:
|
|
return checkStrictModeCatchClause(node);
|
|
case 215:
|
|
return checkStrictModeDeleteExpression(node);
|
|
case 8:
|
|
return checkStrictModeNumericLiteral(node);
|
|
case 220:
|
|
return checkStrictModePostfixUnaryExpression(node);
|
|
case 219:
|
|
return checkStrictModePrefixUnaryExpression(node);
|
|
case 248:
|
|
return checkStrictModeWithStatement(node);
|
|
case 250:
|
|
return checkStrictModeLabeledStatement(node);
|
|
case 192:
|
|
seenThisKeyword = true;
|
|
return;
|
|
case 177:
|
|
break;
|
|
case 163:
|
|
return bindTypeParameter(node);
|
|
case 164:
|
|
return bindParameter(node);
|
|
case 254:
|
|
return bindVariableDeclarationOrBindingElement(node);
|
|
case 203:
|
|
node.flowNode = currentFlow;
|
|
return bindVariableDeclarationOrBindingElement(node);
|
|
case 167:
|
|
case 166:
|
|
return bindPropertyWorker(node);
|
|
case 296:
|
|
case 297:
|
|
return bindPropertyOrMethodOrAccessor(node, 4, 0);
|
|
case 299:
|
|
return bindPropertyOrMethodOrAccessor(node, 8, 900095);
|
|
case 174:
|
|
case 175:
|
|
case 176:
|
|
return declareSymbolAndAddToSymbolTable(node, 131072, 0);
|
|
case 169:
|
|
case 168:
|
|
return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 16777216 : 0), ts.isObjectLiteralMethod(node) ? 0 : 103359);
|
|
case 256:
|
|
return bindFunctionDeclaration(node);
|
|
case 171:
|
|
return declareSymbolAndAddToSymbolTable(node, 16384, 0);
|
|
case 172:
|
|
return bindPropertyOrMethodOrAccessor(node, 32768, 46015);
|
|
case 173:
|
|
return bindPropertyOrMethodOrAccessor(node, 65536, 78783);
|
|
case 179:
|
|
case 317:
|
|
case 323:
|
|
case 180:
|
|
return bindFunctionOrConstructorType(node);
|
|
case 182:
|
|
case 322:
|
|
case 195:
|
|
return bindAnonymousTypeWorker(node);
|
|
case 332:
|
|
return bindJSDocClassTag(node);
|
|
case 205:
|
|
return bindObjectLiteralExpression(node);
|
|
case 213:
|
|
case 214:
|
|
return bindFunctionExpression(node);
|
|
case 208:
|
|
var assignmentKind = ts.getAssignmentDeclarationKind(node);
|
|
switch (assignmentKind) {
|
|
case 7:
|
|
return bindObjectDefinePropertyAssignment(node);
|
|
case 8:
|
|
return bindObjectDefinePropertyExport(node);
|
|
case 9:
|
|
return bindObjectDefinePrototypeProperty(node);
|
|
case 0:
|
|
break;
|
|
default:
|
|
return ts.Debug.fail("Unknown call expression assignment declaration kind");
|
|
}
|
|
if (ts.isInJSFile(node)) {
|
|
bindCallExpression(node);
|
|
}
|
|
break;
|
|
case 226:
|
|
case 257:
|
|
inStrictMode = true;
|
|
return bindClassLikeDeclaration(node);
|
|
case 258:
|
|
return bindBlockScopedDeclaration(node, 64, 788872);
|
|
case 259:
|
|
return bindBlockScopedDeclaration(node, 524288, 788968);
|
|
case 260:
|
|
return bindEnumDeclaration(node);
|
|
case 261:
|
|
return bindModuleDeclaration(node);
|
|
case 286:
|
|
return bindJsxAttributes(node);
|
|
case 285:
|
|
return bindJsxAttribute(node, 4, 0);
|
|
case 265:
|
|
case 268:
|
|
case 270:
|
|
case 275:
|
|
return declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
|
|
case 264:
|
|
return bindNamespaceExportDeclaration(node);
|
|
case 267:
|
|
return bindImportClause(node);
|
|
case 272:
|
|
return bindExportDeclaration(node);
|
|
case 271:
|
|
return bindExportAssignment(node);
|
|
case 305:
|
|
updateStrictModeStatementList(node.statements);
|
|
return bindSourceFileIfExternalModule();
|
|
case 235:
|
|
if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
|
|
return;
|
|
}
|
|
case 262:
|
|
return updateStrictModeStatementList(node.statements);
|
|
case 340:
|
|
if (node.parent.kind === 323) {
|
|
return bindParameter(node);
|
|
}
|
|
if (node.parent.kind !== 322) {
|
|
break;
|
|
}
|
|
case 347:
|
|
var propTag = node;
|
|
var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 316 ?
|
|
4 | 16777216 :
|
|
4;
|
|
return declareSymbolAndAddToSymbolTable(propTag, flags, 0);
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
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, "\"".concat(ts.removeFileExtension(file.fileName), "\""));
|
|
}
|
|
function bindExportAssignment(node) {
|
|
if (!container.symbol || !container.symbol.exports) {
|
|
bindAnonymousDeclaration(node, 111551, getDeclarationName(node));
|
|
}
|
|
else {
|
|
var flags = ts.exportAssignmentIsAlias(node)
|
|
? 2097152
|
|
: 4;
|
|
var symbol = declareSymbol(container.symbol.exports, container.symbol, node, flags, 67108863);
|
|
if (node.isExportEquals) {
|
|
ts.setValueDeclaration(symbol, node);
|
|
}
|
|
}
|
|
}
|
|
function bindNamespaceExportDeclaration(node) {
|
|
if (ts.some(node.modifiers)) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here));
|
|
}
|
|
var diag = !ts.isSourceFile(node.parent) ? ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level
|
|
: !ts.isExternalModule(node.parent) ? ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files
|
|
: !node.parent.isDeclarationFile ? ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files
|
|
: undefined;
|
|
if (diag) {
|
|
file.bindDiagnostics.push(createDiagnosticForNode(node, diag));
|
|
}
|
|
else {
|
|
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);
|
|
}
|
|
else if (ts.isNamespaceExport(node.exportClause)) {
|
|
ts.setParent(node.exportClause, node);
|
|
declareSymbol(container.symbol.exports, container.symbol, node.exportClause, 2097152, 2097152);
|
|
}
|
|
}
|
|
function bindImportClause(node) {
|
|
if (node.name) {
|
|
declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
|
|
}
|
|
}
|
|
function setCommonJsModuleIndicator(node) {
|
|
if (file.externalModuleIndicator && file.externalModuleIndicator !== true) {
|
|
return false;
|
|
}
|
|
if (!file.commonJsModuleIndicator) {
|
|
file.commonJsModuleIndicator = node;
|
|
if (!file.externalModuleIndicator) {
|
|
bindSourceFileAsExternalModule();
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function bindObjectDefinePropertyExport(node) {
|
|
if (!setCommonJsModuleIndicator(node)) {
|
|
return;
|
|
}
|
|
var symbol = forEachIdentifierInEntityName(node.arguments[0], undefined, function (id, symbol) {
|
|
if (symbol) {
|
|
addDeclarationToSymbol(symbol, id, 1536 | 67108864);
|
|
}
|
|
return symbol;
|
|
});
|
|
if (symbol) {
|
|
var flags = 4 | 1048576;
|
|
declareSymbol(symbol.exports, symbol, node, flags, 0);
|
|
}
|
|
}
|
|
function bindExportsPropertyAssignment(node) {
|
|
if (!setCommonJsModuleIndicator(node)) {
|
|
return;
|
|
}
|
|
var symbol = forEachIdentifierInEntityName(node.left.expression, undefined, function (id, symbol) {
|
|
if (symbol) {
|
|
addDeclarationToSymbol(symbol, id, 1536 | 67108864);
|
|
}
|
|
return symbol;
|
|
});
|
|
if (symbol) {
|
|
var isAlias = ts.isAliasableExpression(node.right) && (ts.isExportsIdentifier(node.left.expression) || ts.isModuleExportsAccessExpression(node.left.expression));
|
|
var flags = isAlias ? 2097152 : 4 | 1048576;
|
|
ts.setParent(node.left, node);
|
|
declareSymbol(symbol.exports, symbol, node.left, 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;
|
|
}
|
|
if (ts.isObjectLiteralExpression(assignedExpression) && ts.every(assignedExpression.properties, ts.isShorthandPropertyAssignment)) {
|
|
ts.forEach(assignedExpression.properties, bindExportAssignedObjectMemberAlias);
|
|
return;
|
|
}
|
|
var flags = ts.exportAssignmentIsAlias(node)
|
|
? 2097152
|
|
: 4 | 1048576 | 512;
|
|
var symbol = declareSymbol(file.symbol.exports, file.symbol, node, flags | 67108864, 0);
|
|
ts.setValueDeclaration(symbol, node);
|
|
}
|
|
function bindExportAssignedObjectMemberAlias(node) {
|
|
declareSymbol(file.symbol.exports, file.symbol, node, 2097152 | 67108864, 0);
|
|
}
|
|
function bindThisPropertyAssignment(node) {
|
|
ts.Debug.assert(ts.isInJSFile(node));
|
|
var hasPrivateIdentifier = (ts.isBinaryExpression(node) && ts.isPropertyAccessExpression(node.left) && ts.isPrivateIdentifier(node.left.name))
|
|
|| (ts.isPropertyAccessExpression(node) && ts.isPrivateIdentifier(node.name));
|
|
if (hasPrivateIdentifier) {
|
|
return;
|
|
}
|
|
var thisContainer = ts.getThisContainer(node, false);
|
|
switch (thisContainer.kind) {
|
|
case 256:
|
|
case 213:
|
|
var constructorSymbol = thisContainer.symbol;
|
|
if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63) {
|
|
var l = thisContainer.parent.left;
|
|
if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
|
|
constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
|
|
}
|
|
}
|
|
if (constructorSymbol && constructorSymbol.valueDeclaration) {
|
|
constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
|
|
if (ts.hasDynamicName(node)) {
|
|
bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
|
|
}
|
|
else {
|
|
declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 | 67108864, 0 & ~4);
|
|
}
|
|
addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32);
|
|
}
|
|
break;
|
|
case 171:
|
|
case 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 170:
|
|
var containingClass = thisContainer.parent;
|
|
var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
|
|
if (ts.hasDynamicName(node)) {
|
|
bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
|
|
}
|
|
else {
|
|
declareSymbol(symbolTable, containingClass.symbol, node, 4 | 67108864, 0, true);
|
|
}
|
|
break;
|
|
case 305:
|
|
if (ts.hasDynamicName(node)) {
|
|
break;
|
|
}
|
|
else if (thisContainer.commonJsModuleIndicator) {
|
|
declareSymbol(thisContainer.symbol.exports, thisContainer.symbol, node, 4 | 1048576, 0);
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 1, 111550);
|
|
}
|
|
break;
|
|
default:
|
|
ts.Debug.failBadSyntaxKind(thisContainer);
|
|
}
|
|
}
|
|
function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
|
|
declareSymbol(symbolTable, symbol, node, 4, 0, true, true);
|
|
addLateBoundAssignmentDeclarationToSymbol(node, symbol);
|
|
}
|
|
function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
|
|
if (symbol) {
|
|
(symbol.assignmentDeclarationMembers || (symbol.assignmentDeclarationMembers = new ts.Map())).set(ts.getNodeId(node), node);
|
|
}
|
|
}
|
|
function bindSpecialPropertyDeclaration(node) {
|
|
if (node.expression.kind === 108) {
|
|
bindThisPropertyAssignment(node);
|
|
}
|
|
else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 305) {
|
|
if (ts.isPrototypeAccess(node.expression)) {
|
|
bindPrototypePropertyAssignment(node, node.parent);
|
|
}
|
|
else {
|
|
bindStaticPropertyAssignment(node);
|
|
}
|
|
}
|
|
}
|
|
function bindPrototypeAssignment(node) {
|
|
ts.setParent(node.left, node);
|
|
ts.setParent(node.right, node);
|
|
bindPropertyAssignment(node.left.expression, node.left, false, true);
|
|
}
|
|
function bindObjectDefinePrototypeProperty(node) {
|
|
var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0].expression);
|
|
if (namespaceSymbol && namespaceSymbol.valueDeclaration) {
|
|
addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32);
|
|
}
|
|
bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, true);
|
|
}
|
|
function bindPrototypePropertyAssignment(lhs, parent) {
|
|
var classPrototype = lhs.expression;
|
|
var constructorFunction = classPrototype.expression;
|
|
ts.setParent(constructorFunction, classPrototype);
|
|
ts.setParent(classPrototype, lhs);
|
|
ts.setParent(lhs, parent);
|
|
bindPropertyAssignment(constructorFunction, lhs, true, true);
|
|
}
|
|
function bindObjectDefinePropertyAssignment(node) {
|
|
var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
|
|
var isToplevel = node.parent.parent.kind === 305;
|
|
namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, false, false);
|
|
bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, false);
|
|
}
|
|
function bindSpecialPropertyAssignment(node) {
|
|
var _a;
|
|
var parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, container) || lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer);
|
|
if (!ts.isInJSFile(node) && !ts.isFunctionSymbol(parentSymbol)) {
|
|
return;
|
|
}
|
|
var rootExpr = ts.getLeftmostAccessExpression(node.left);
|
|
if (ts.isIdentifier(rootExpr) && ((_a = lookupSymbolForName(container, rootExpr.escapedText)) === null || _a === void 0 ? void 0 : _a.flags) & 2097152) {
|
|
return;
|
|
}
|
|
ts.setParent(node.left, node);
|
|
ts.setParent(node.right, node);
|
|
if (ts.isIdentifier(node.left.expression) && container === file && isExportsOrModuleExportsOrAlias(file, node.left.expression)) {
|
|
bindExportsPropertyAssignment(node);
|
|
}
|
|
else if (ts.hasDynamicName(node)) {
|
|
bindAnonymousDeclaration(node, 4 | 67108864, "__computed");
|
|
var sym = bindPotentiallyMissingNamespaces(parentSymbol, node.left.expression, isTopLevelNamespaceAssignment(node.left), false, false);
|
|
addLateBoundAssignmentDeclarationToSymbol(node, sym);
|
|
}
|
|
else {
|
|
bindStaticPropertyAssignment(ts.cast(node.left, ts.isBindableStaticNameExpression));
|
|
}
|
|
}
|
|
function bindStaticPropertyAssignment(node) {
|
|
ts.Debug.assert(!ts.isIdentifier(node));
|
|
ts.setParent(node.expression, node);
|
|
bindPropertyAssignment(node.expression, node, false, false);
|
|
}
|
|
function bindPotentiallyMissingNamespaces(namespaceSymbol, entityName, isToplevel, isPrototypeProperty, containerIsClass) {
|
|
if ((namespaceSymbol === null || namespaceSymbol === void 0 ? void 0 : namespaceSymbol.flags) & 2097152) {
|
|
return namespaceSymbol;
|
|
}
|
|
if (isToplevel && !isPrototypeProperty) {
|
|
var flags_2 = 1536 | 67108864;
|
|
var excludeFlags_1 = 110735 & ~67108864;
|
|
namespaceSymbol = forEachIdentifierInEntityName(entityName, namespaceSymbol, function (id, symbol, parent) {
|
|
if (symbol) {
|
|
addDeclarationToSymbol(symbol, id, flags_2);
|
|
return symbol;
|
|
}
|
|
else {
|
|
var table = parent ? parent.exports :
|
|
file.jsGlobalAugmentations || (file.jsGlobalAugmentations = ts.createSymbolTable());
|
|
return declareSymbol(table, parent, id, flags_2, excludeFlags_1);
|
|
}
|
|
});
|
|
}
|
|
if (containerIsClass && namespaceSymbol && namespaceSymbol.valueDeclaration) {
|
|
addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32);
|
|
}
|
|
return namespaceSymbol;
|
|
}
|
|
function bindPotentiallyNewExpandoMemberToNamespace(declaration, namespaceSymbol, isPrototypeProperty) {
|
|
if (!namespaceSymbol || !isExpandoSymbol(namespaceSymbol)) {
|
|
return;
|
|
}
|
|
var symbolTable = isPrototypeProperty ?
|
|
(namespaceSymbol.members || (namespaceSymbol.members = ts.createSymbolTable())) :
|
|
(namespaceSymbol.exports || (namespaceSymbol.exports = ts.createSymbolTable()));
|
|
var includes = 0;
|
|
var excludes = 0;
|
|
if (ts.isFunctionLikeDeclaration(ts.getAssignedExpandoInitializer(declaration))) {
|
|
includes = 8192;
|
|
excludes = 103359;
|
|
}
|
|
else if (ts.isCallExpression(declaration) && ts.isBindableObjectDefinePropertyCall(declaration)) {
|
|
if (ts.some(declaration.arguments[2].properties, function (p) {
|
|
var id = ts.getNameOfDeclaration(p);
|
|
return !!id && ts.isIdentifier(id) && ts.idText(id) === "set";
|
|
})) {
|
|
includes |= 65536 | 4;
|
|
excludes |= 78783;
|
|
}
|
|
if (ts.some(declaration.arguments[2].properties, function (p) {
|
|
var id = ts.getNameOfDeclaration(p);
|
|
return !!id && ts.isIdentifier(id) && ts.idText(id) === "get";
|
|
})) {
|
|
includes |= 32768 | 4;
|
|
excludes |= 46015;
|
|
}
|
|
}
|
|
if (includes === 0) {
|
|
includes = 4;
|
|
excludes = 0;
|
|
}
|
|
declareSymbol(symbolTable, namespaceSymbol, declaration, includes | 67108864, excludes & ~67108864);
|
|
}
|
|
function isTopLevelNamespaceAssignment(propertyAccess) {
|
|
return ts.isBinaryExpression(propertyAccess.parent)
|
|
? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 305
|
|
: propertyAccess.parent.parent.kind === 305;
|
|
}
|
|
function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
|
|
var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
|
|
var isToplevel = isTopLevelNamespaceAssignment(propertyAccess);
|
|
namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, propertyAccess.expression, isToplevel, isPrototypeProperty, containerIsClass);
|
|
bindPotentiallyNewExpandoMemberToNamespace(propertyAccess, namespaceSymbol, isPrototypeProperty);
|
|
}
|
|
function isExpandoSymbol(symbol) {
|
|
if (symbol.flags & (16 | 32 | 1024)) {
|
|
return true;
|
|
}
|
|
var node = symbol.valueDeclaration;
|
|
if (node && ts.isCallExpression(node)) {
|
|
return !!ts.getAssignedExpandoInitializer(node);
|
|
}
|
|
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.getExpandoInitializer(ts.isBinaryExpression(init) && (init.operatorToken.kind === 56 || init.operatorToken.kind === 60) ? 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 lookupSymbolForName(lookupContainer, node.escapedText);
|
|
}
|
|
else {
|
|
var symbol = lookupSymbolForPropertyAccess(node.expression);
|
|
return symbol && symbol.exports && symbol.exports.get(ts.getElementOrPropertyAccessName(node));
|
|
}
|
|
}
|
|
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);
|
|
var name = ts.getNameOrArgument(e);
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
ts.Debug.fail("unexpected PrivateIdentifier");
|
|
}
|
|
return action(name, s && s.exports && s.exports.get(ts.getElementOrPropertyAccessName(e)), s);
|
|
}
|
|
}
|
|
function bindCallExpression(node) {
|
|
if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) {
|
|
setCommonJsModuleIndicator(node);
|
|
}
|
|
}
|
|
function bindClassLikeDeclaration(node) {
|
|
if (node.kind === 257) {
|
|
bindBlockScopedDeclaration(node, 32, 899503);
|
|
}
|
|
else {
|
|
var bindingName = node.name ? node.name.escapedText : "__class";
|
|
bindAnonymousDeclaration(node, 32, bindingName);
|
|
if (node.name) {
|
|
classifiableNames.add(node.name.escapedText);
|
|
}
|
|
}
|
|
var symbol = node.symbol;
|
|
var prototypeSymbol = createSymbol(4 | 4194304, "prototype");
|
|
var symbolExport = symbol.exports.get(prototypeSymbol.escapedName);
|
|
if (symbolExport) {
|
|
if (node.name) {
|
|
ts.setParent(node.name, 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.isEnumConst(node)
|
|
? bindBlockScopedDeclaration(node, 128, 899967)
|
|
: bindBlockScopedDeclaration(node, 256, 899327);
|
|
}
|
|
function bindVariableDeclarationOrBindingElement(node) {
|
|
if (inStrictMode) {
|
|
checkStrictModeEvalOrArguments(node, node.name);
|
|
}
|
|
if (!ts.isBindingPattern(node.name)) {
|
|
var possibleVariableDecl = node.kind === 254 ? node : node.parent.parent;
|
|
if (ts.isInJSFile(node) &&
|
|
ts.isVariableDeclarationInitializedToBareOrAccessedRequire(possibleVariableDecl) &&
|
|
!ts.getJSDocTypeTag(node) &&
|
|
!(ts.getCombinedModifierFlags(node) & 1)) {
|
|
declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
|
|
}
|
|
else if (ts.isBlockOrCatchScoped(node)) {
|
|
bindBlockScopedDeclaration(node, 2, 111551);
|
|
}
|
|
else if (ts.isParameterDeclaration(node)) {
|
|
declareSymbolAndAddToSymbolTable(node, 1, 111551);
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 1, 111550);
|
|
}
|
|
}
|
|
}
|
|
function bindParameter(node) {
|
|
if (node.kind === 340 && container.kind !== 323) {
|
|
return;
|
|
}
|
|
if (inStrictMode && !(node.flags & 16777216)) {
|
|
checkStrictModeEvalOrArguments(node, node.name);
|
|
}
|
|
if (ts.isBindingPattern(node.name)) {
|
|
bindAnonymousDeclaration(node, 1, "__" + node.parent.parameters.indexOf(node));
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 1, 111551);
|
|
}
|
|
if (ts.isParameterPropertyDeclaration(node, node.parent)) {
|
|
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 & 16777216)) {
|
|
if (ts.isAsyncFunction(node)) {
|
|
emitFlags |= 2048;
|
|
}
|
|
}
|
|
checkStrictModeFunctionName(node);
|
|
if (inStrictMode) {
|
|
checkStrictModeFunctionDeclaration(node);
|
|
bindBlockScopedDeclaration(node, 16, 110991);
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 16, 110991);
|
|
}
|
|
}
|
|
function bindFunctionExpression(node) {
|
|
if (!file.isDeclarationFile && !(node.flags & 16777216)) {
|
|
if (ts.isAsyncFunction(node)) {
|
|
emitFlags |= 2048;
|
|
}
|
|
}
|
|
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 & 16777216) && ts.isAsyncFunction(node)) {
|
|
emitFlags |= 2048;
|
|
}
|
|
if (currentFlow && ts.isObjectLiteralOrClassExpressionMethodOrAccessor(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.getEffectiveContainerForJSDocTemplateTag(node.parent);
|
|
if (container_1) {
|
|
if (!container_1.locals) {
|
|
container_1.locals = ts.createSymbolTable();
|
|
}
|
|
declareSymbol(container_1.locals, undefined, node, 262144, 526824);
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 262144, 526824);
|
|
}
|
|
}
|
|
else if (node.parent.kind === 190) {
|
|
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, 526824);
|
|
}
|
|
else {
|
|
bindAnonymousDeclaration(node, 262144, getDeclarationName(node));
|
|
}
|
|
}
|
|
else {
|
|
declareSymbolAndAddToSymbolTable(node, 262144, 526824);
|
|
}
|
|
}
|
|
function shouldReportErrorOnModuleDeclaration(node) {
|
|
var instanceState = getModuleInstanceState(node);
|
|
return instanceState === 1 || (instanceState === 2 && ts.shouldPreserveConstEnums(options));
|
|
}
|
|
function checkUnreachable(node) {
|
|
if (!(currentFlow.flags & 1)) {
|
|
return false;
|
|
}
|
|
if (currentFlow === unreachableFlow) {
|
|
var reportError = (ts.isStatementButNotDeclaration(node) && node.kind !== 236) ||
|
|
node.kind === 257 ||
|
|
(node.kind === 261 && shouldReportErrorOnModuleDeclaration(node));
|
|
if (reportError) {
|
|
currentFlow = reportedUnreachableFlow;
|
|
if (!options.allowUnreachableCode) {
|
|
var isError_1 = ts.unreachableCodeIsError(options) &&
|
|
!(node.flags & 16777216) &&
|
|
(!ts.isVariableStatement(node) ||
|
|
!!(ts.getCombinedNodeFlags(node.declarationList) & 3) ||
|
|
node.declarationList.declarations.some(function (d) { return !!d.initializer; }));
|
|
eachUnreachableRange(node, function (start, end) { return errorOrSuggestionOnRange(isError_1, start, end, ts.Diagnostics.Unreachable_code_detected); });
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
function eachUnreachableRange(node, cb) {
|
|
if (ts.isStatement(node) && isExecutableStatement(node) && ts.isBlock(node.parent)) {
|
|
var statements = node.parent.statements;
|
|
var slice_1 = ts.sliceAfter(statements, node);
|
|
ts.getRangesWhere(slice_1, isExecutableStatement, function (start, afterEnd) { return cb(slice_1[start], slice_1[afterEnd - 1]); });
|
|
}
|
|
else {
|
|
cb(node, node);
|
|
}
|
|
}
|
|
function isExecutableStatement(s) {
|
|
return !ts.isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !ts.isEnumDeclaration(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 258:
|
|
case 259:
|
|
return true;
|
|
case 261:
|
|
return getModuleInstanceState(s) !== 1;
|
|
case 260:
|
|
return ts.hasSyntacticModifier(s, 2048);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isExportsOrModuleExportsOrAlias(sourceFile, node) {
|
|
var i = 0;
|
|
var q = ts.createQueue();
|
|
q.enqueue(node);
|
|
while (!q.isEmpty() && i < 100) {
|
|
i++;
|
|
node = q.dequeue();
|
|
if (ts.isExportsIdentifier(node) || ts.isModuleExportsAccessExpression(node)) {
|
|
return true;
|
|
}
|
|
else if (ts.isIdentifier(node)) {
|
|
var symbol = lookupSymbolForName(sourceFile, node.escapedText);
|
|
if (!!symbol && !!symbol.valueDeclaration && ts.isVariableDeclaration(symbol.valueDeclaration) && !!symbol.valueDeclaration.initializer) {
|
|
var init = symbol.valueDeclaration.initializer;
|
|
q.enqueue(init);
|
|
if (ts.isAssignmentExpression(init, true)) {
|
|
q.enqueue(init.left);
|
|
q.enqueue(init.right);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
ts.isExportsOrModuleExportsOrAlias = isExportsOrModuleExportsOrAlias;
|
|
function lookupSymbolForName(container, name) {
|
|
var local = container.locals && container.locals.get(name);
|
|
if (local) {
|
|
return local.exportSymbol || local;
|
|
}
|
|
if (ts.isSourceFile(container) && container.jsGlobalAugmentations && container.jsGlobalAugmentations.has(name)) {
|
|
return container.jsGlobalAugmentations.get(name);
|
|
}
|
|
return container.symbol && container.symbol.exports && container.symbol.exports.get(name);
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
|
|
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 & 524288) {
|
|
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 & 262144) {
|
|
visitTypeParameter(type);
|
|
}
|
|
if (type.flags & 3145728) {
|
|
visitUnionOrIntersectionType(type);
|
|
}
|
|
if (type.flags & 4194304) {
|
|
visitIndexType(type);
|
|
}
|
|
if (type.flags & 8388608) {
|
|
visitIndexedAccessType(type);
|
|
}
|
|
}
|
|
function visitTypeReference(type) {
|
|
visitType(type.target);
|
|
ts.forEach(getTypeArguments(type), visitType);
|
|
}
|
|
function visitTypeParameter(type) {
|
|
visitType(getConstraintOfTypeParameter(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 resolved = resolveStructuredTypeMembers(type);
|
|
for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
|
|
var info = _a[_i];
|
|
visitType(info.keyType);
|
|
visitType(info.type);
|
|
}
|
|
for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
|
|
var signature = _c[_b];
|
|
visitSignature(signature);
|
|
}
|
|
for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
|
|
var signature = _e[_d];
|
|
visitSignature(signature);
|
|
}
|
|
for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
|
|
var p = _g[_f];
|
|
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.exports) {
|
|
symbol.exports.forEach(visitSymbol);
|
|
}
|
|
ts.forEach(symbol.declarations, function (d) {
|
|
if (d.type && d.type.kind === 181) {
|
|
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 anon = "(anonymous)";
|
|
var nextSymbolId = 1;
|
|
var nextNodeId = 1;
|
|
var nextMergeId = 1;
|
|
var nextFlowId = 1;
|
|
var typeofNEFacts = new ts.Map(ts.getEntries({
|
|
string: 256,
|
|
number: 512,
|
|
bigint: 1024,
|
|
boolean: 2048,
|
|
symbol: 4096,
|
|
undefined: 524288,
|
|
object: 8192,
|
|
function: 16384
|
|
}));
|
|
var isNotOverloadAndNotAccessor = ts.and(isNotOverload, isNotAccessor);
|
|
var intrinsicTypeKinds = new ts.Map(ts.getEntries({
|
|
Uppercase: 0,
|
|
Lowercase: 1,
|
|
Capitalize: 2,
|
|
Uncapitalize: 3
|
|
}));
|
|
function SymbolLinks() {
|
|
}
|
|
function NodeLinks() {
|
|
this.flags = 0;
|
|
}
|
|
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) {
|
|
var getPackagesMap = ts.memoize(function () {
|
|
var map = new ts.Map();
|
|
host.getSourceFiles().forEach(function (sf) {
|
|
if (!sf.resolvedModules)
|
|
return;
|
|
sf.resolvedModules.forEach(function (r) {
|
|
if (r && r.packageId)
|
|
map.set(r.packageId.name, r.extension === ".d.ts" || !!map.get(r.packageId.name));
|
|
});
|
|
});
|
|
return map;
|
|
});
|
|
var deferredDiagnosticsCallbacks = [];
|
|
var addLazyDiagnostic = function (arg) {
|
|
deferredDiagnosticsCallbacks.push(arg);
|
|
};
|
|
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 totalInstantiationCount = 0;
|
|
var instantiationCount = 0;
|
|
var instantiationDepth = 0;
|
|
var inlineLevel = 0;
|
|
var currentNode;
|
|
var varianceTypeParameter;
|
|
var emptySymbols = ts.createSymbolTable();
|
|
var arrayVariances = [1];
|
|
var compilerOptions = host.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var moduleKind = ts.getEmitModuleKind(compilerOptions);
|
|
var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
|
|
var allowSyntheticDefaultImports = ts.getAllowSyntheticDefaultImports(compilerOptions);
|
|
var strictNullChecks = ts.getStrictOptionValue(compilerOptions, "strictNullChecks");
|
|
var strictFunctionTypes = ts.getStrictOptionValue(compilerOptions, "strictFunctionTypes");
|
|
var strictBindCallApply = ts.getStrictOptionValue(compilerOptions, "strictBindCallApply");
|
|
var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
|
|
var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
|
|
var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
|
|
var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
|
|
var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
|
|
var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 8192;
|
|
var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
|
|
var checkBinaryExpression = createCheckBinaryExpression();
|
|
var emitResolver = createResolver();
|
|
var nodeBuilder = createNodeBuilder();
|
|
var globals = ts.createSymbolTable();
|
|
var undefinedSymbol = createSymbol(4, "undefined");
|
|
undefinedSymbol.declarations = [];
|
|
var globalThisSymbol = createSymbol(1536, "globalThis", 8);
|
|
globalThisSymbol.exports = globals;
|
|
globalThisSymbol.declarations = [];
|
|
globals.set(globalThisSymbol.escapedName, globalThisSymbol);
|
|
var argumentsSymbol = createSymbol(4, "arguments");
|
|
var requireSymbol = createSymbol(4, "require");
|
|
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; },
|
|
getInstantiationCount: function () { return totalInstantiationCount; },
|
|
getRelationCacheSizes: function () { return ({
|
|
assignable: assignableRelation.size,
|
|
identity: identityRelation.size,
|
|
subtype: subtypeRelation.size,
|
|
strictSubtype: strictSubtypeRelation.size,
|
|
}); },
|
|
isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
|
|
isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
|
|
isUnknownSymbol: function (symbol) { return symbol === unknownSymbol; },
|
|
getMergedSymbol: getMergedSymbol,
|
|
getDiagnostics: getDiagnostics,
|
|
getGlobalDiagnostics: getGlobalDiagnostics,
|
|
getRecursionIdentity: getRecursionIdentity,
|
|
getUnmatchedProperties: getUnmatchedProperties,
|
|
getTypeOfSymbolAtLocation: function (symbol, locationIn) {
|
|
var location = ts.getParseTreeNode(locationIn);
|
|
return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
|
|
},
|
|
getTypeOfSymbol: getTypeOfSymbol,
|
|
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)); },
|
|
getPrivateIdentifierPropertyOfType: function (leftType, name, location) {
|
|
var node = ts.getParseTreeNode(location);
|
|
if (!node) {
|
|
return undefined;
|
|
}
|
|
var propName = ts.escapeLeadingUnderscores(name);
|
|
var lexicallyScopedIdentifier = lookupSymbolForPrivateIdentifierDeclaration(propName, node);
|
|
return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
|
|
},
|
|
getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
|
|
getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 ? stringType : numberType); },
|
|
getIndexInfosOfType: getIndexInfosOfType,
|
|
getSignaturesOfType: getSignaturesOfType,
|
|
getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 ? stringType : numberType); },
|
|
getIndexType: function (type) { return getIndexType(type); },
|
|
getBaseTypes: getBaseTypes,
|
|
getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
|
|
getWidenedType: getWidenedType,
|
|
getTypeFromTypeNode: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isTypeNode);
|
|
return node ? getTypeFromTypeNode(node) : errorType;
|
|
},
|
|
getParameterType: getTypeAtPosition,
|
|
getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
|
|
getPromisedTypeOfPromise: getPromisedTypeOfPromise,
|
|
getAwaitedType: function (type) { return getAwaitedType(type); },
|
|
getReturnTypeOfSignature: getReturnTypeOfSignature,
|
|
isNullableType: isNullableType,
|
|
getNullableType: getNullableType,
|
|
getNonNullableType: getNonNullableType,
|
|
getNonOptionalType: removeOptionalTypeMarker,
|
|
getTypeArguments: getTypeArguments,
|
|
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 (locationIn, meaning) {
|
|
var location = ts.getParseTreeNode(locationIn);
|
|
return location ? getSymbolsInScope(location, meaning) : [];
|
|
},
|
|
getSymbolAtLocation: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? getSymbolAtLocation(node, true) : undefined;
|
|
},
|
|
getIndexInfosAtLocation: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? getIndexInfosAtLocation(node) : undefined;
|
|
},
|
|
getShorthandAssignmentValueSymbol: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
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 (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? getTypeOfNode(node) : errorType;
|
|
},
|
|
getTypeOfAssignmentPattern: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isAssignmentPattern);
|
|
return node && getTypeOfAssignmentPattern(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);
|
|
},
|
|
getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
|
|
getRootSymbols: getRootSymbols,
|
|
getSymbolOfExpando: getSymbolOfExpando,
|
|
getContextualType: function (nodeIn, contextFlags) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isExpression);
|
|
if (!node) {
|
|
return undefined;
|
|
}
|
|
if (contextFlags & 4) {
|
|
return runWithInferenceBlockedFromSourceNode(node, function () { return getContextualType(node, contextFlags); });
|
|
}
|
|
return getContextualType(node, contextFlags);
|
|
},
|
|
getContextualTypeForObjectLiteralElement: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isObjectLiteralElementLike);
|
|
return node ? getContextualTypeForObjectLiteralElement(node, undefined) : 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, undefined);
|
|
},
|
|
isContextSensitive: isContextSensitive,
|
|
getTypeOfPropertyOfContextualType: getTypeOfPropertyOfContextualType,
|
|
getFullyQualifiedName: getFullyQualifiedName,
|
|
getResolvedSignature: function (node, candidatesOutArray, argumentCount) {
|
|
return getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, 0);
|
|
},
|
|
getResolvedSignatureForStringLiteralCompletions: function (call, editingArgument, candidatesOutArray) {
|
|
return getResolvedSignatureWorker(call, candidatesOutArray, undefined, 32, editingArgument);
|
|
},
|
|
getResolvedSignatureForSignatureHelp: function (node, candidatesOutArray, argumentCount) {
|
|
return getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, 16);
|
|
},
|
|
getExpandedParameters: getExpandedParameters,
|
|
hasEffectiveRestParameter: hasEffectiveRestParameter,
|
|
containsArgumentsReference: containsArgumentsReference,
|
|
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 (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isFunctionLike);
|
|
return node ? isImplementationOfOverload(node) : undefined;
|
|
},
|
|
getImmediateAliasedSymbol: getImmediateAliasedSymbol,
|
|
getAliasedSymbol: resolveAlias,
|
|
getEmitResolver: getEmitResolver,
|
|
getExportsOfModule: getExportsOfModuleAsArray,
|
|
getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
|
|
forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
|
|
getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
|
|
getAmbientModules: getAmbientModules,
|
|
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); },
|
|
tryFindAmbientModule: function (moduleName) { return tryFindAmbientModule(moduleName, true); },
|
|
tryFindAmbientModuleWithoutAugmentations: function (moduleName) {
|
|
return tryFindAmbientModule(moduleName, false);
|
|
},
|
|
getApparentType: getApparentType,
|
|
getUnionType: getUnionType,
|
|
isTypeAssignableTo: isTypeAssignableTo,
|
|
createAnonymousType: createAnonymousType,
|
|
createSignature: createSignature,
|
|
createSymbol: createSymbol,
|
|
createIndexInfo: createIndexInfo,
|
|
getAnyType: function () { return anyType; },
|
|
getStringType: function () { return stringType; },
|
|
getNumberType: function () { return numberType; },
|
|
createPromiseType: createPromiseType,
|
|
createArrayType: createArrayType,
|
|
getElementTypeOfArrayType: getElementTypeOfArrayType,
|
|
getBooleanType: function () { return booleanType; },
|
|
getFalseType: function (fresh) { return fresh ? falseType : regularFalseType; },
|
|
getTrueType: function (fresh) { return fresh ? trueType : regularTrueType; },
|
|
getVoidType: function () { return voidType; },
|
|
getUndefinedType: function () { return undefinedType; },
|
|
getNullType: function () { return nullType; },
|
|
getESSymbolType: function () { return esSymbolType; },
|
|
getNeverType: function () { return neverType; },
|
|
getOptionalType: function () { return optionalType; },
|
|
getPromiseType: function () { return getGlobalPromiseType(false); },
|
|
getPromiseLikeType: function () { return getGlobalPromiseLikeType(false); },
|
|
isSymbolAccessible: isSymbolAccessible,
|
|
isArrayType: isArrayType,
|
|
isTupleType: isTupleType,
|
|
isArrayLikeType: isArrayLikeType,
|
|
isTypeInvalidDueToUnionDiscriminant: isTypeInvalidDueToUnionDiscriminant,
|
|
getExactOptionalProperties: getExactOptionalProperties,
|
|
getAllPossiblePropertiesOfTypes: getAllPossiblePropertiesOfTypes,
|
|
getSuggestedSymbolForNonexistentProperty: getSuggestedSymbolForNonexistentProperty,
|
|
getSuggestionForNonexistentProperty: getSuggestionForNonexistentProperty,
|
|
getSuggestedSymbolForNonexistentJSXAttribute: getSuggestedSymbolForNonexistentJSXAttribute,
|
|
getSuggestedSymbolForNonexistentSymbol: function (location, name, meaning) { return getSuggestedSymbolForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
|
|
getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
|
|
getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
|
|
getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
|
|
getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
|
|
getBaseConstraintOfType: getBaseConstraintOfType,
|
|
getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 ? 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)); },
|
|
getJsxFragmentFactory: function (n) {
|
|
var jsxFragmentFactory = getJsxFragmentFactoryEntity(n);
|
|
return jsxFragmentFactory && ts.unescapeLeadingUnderscores(ts.getFirstIdentifier(jsxFragmentFactory).escapedText);
|
|
},
|
|
getAccessibleSymbolChain: getAccessibleSymbolChain,
|
|
getTypePredicateOfSignature: getTypePredicateOfSignature,
|
|
resolveExternalModuleName: function (moduleSpecifierIn) {
|
|
var moduleSpecifier = ts.getParseTreeNode(moduleSpecifierIn, ts.isExpression);
|
|
return moduleSpecifier && resolveExternalModuleName(moduleSpecifier, moduleSpecifier, true);
|
|
},
|
|
resolveExternalModuleSymbol: resolveExternalModuleSymbol,
|
|
tryGetThisTypeAt: function (nodeIn, includeGlobalThis, container) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node && tryGetThisTypeAt(node, includeGlobalThis, container);
|
|
},
|
|
getTypeArgumentConstraint: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isTypeNode);
|
|
return node && getTypeArgumentConstraint(node);
|
|
},
|
|
getSuggestionDiagnostics: function (fileIn, ct) {
|
|
var file = ts.getParseTreeNode(fileIn, ts.isSourceFile) || ts.Debug.fail("Could not determine parsed source file.");
|
|
if (ts.skipTypeChecking(file, compilerOptions, host)) {
|
|
return ts.emptyArray;
|
|
}
|
|
var diagnostics;
|
|
try {
|
|
cancellationToken = ct;
|
|
checkSourceFileWithEagerDiagnostics(file);
|
|
ts.Debug.assert(!!(getNodeLinks(file).flags & 1));
|
|
diagnostics = ts.addRange(diagnostics, suggestionDiagnostics.getDiagnostics(file.fileName));
|
|
checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(file), function (containingNode, kind, diag) {
|
|
if (!ts.containsParseError(containingNode) && !unusedIsError(kind, !!(containingNode.flags & 16777216))) {
|
|
(diagnostics || (diagnostics = [])).push(__assign(__assign({}, diag), { category: ts.DiagnosticCategory.Suggestion }));
|
|
}
|
|
});
|
|
return diagnostics || ts.emptyArray;
|
|
}
|
|
finally {
|
|
cancellationToken = undefined;
|
|
}
|
|
},
|
|
runWithCancellationToken: function (token, callback) {
|
|
try {
|
|
cancellationToken = token;
|
|
return callback(checker);
|
|
}
|
|
finally {
|
|
cancellationToken = undefined;
|
|
}
|
|
},
|
|
getLocalTypeParametersOfClassOrInterfaceOrTypeAlias: getLocalTypeParametersOfClassOrInterfaceOrTypeAlias,
|
|
isDeclarationVisible: isDeclarationVisible,
|
|
isPropertyAccessible: isPropertyAccessible,
|
|
getTypeOnlyAliasDeclaration: getTypeOnlyAliasDeclaration,
|
|
getMemberOverrideModifierStatus: getMemberOverrideModifierStatus,
|
|
};
|
|
function runWithInferenceBlockedFromSourceNode(node, fn) {
|
|
var containingCall = ts.findAncestor(node, ts.isCallLikeExpression);
|
|
var containingCallResolvedSignature = containingCall && getNodeLinks(containingCall).resolvedSignature;
|
|
if (containingCall) {
|
|
var toMarkSkip = node;
|
|
do {
|
|
getNodeLinks(toMarkSkip).skipDirectInference = true;
|
|
toMarkSkip = toMarkSkip.parent;
|
|
} while (toMarkSkip && toMarkSkip !== containingCall);
|
|
getNodeLinks(containingCall).resolvedSignature = undefined;
|
|
}
|
|
var result = fn();
|
|
if (containingCall) {
|
|
var toMarkSkip = node;
|
|
do {
|
|
getNodeLinks(toMarkSkip).skipDirectInference = undefined;
|
|
toMarkSkip = toMarkSkip.parent;
|
|
} while (toMarkSkip && toMarkSkip !== containingCall);
|
|
getNodeLinks(containingCall).resolvedSignature = containingCallResolvedSignature;
|
|
}
|
|
return result;
|
|
}
|
|
function getResolvedSignatureWorker(nodeIn, candidatesOutArray, argumentCount, checkMode, editingArgument) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isCallLikeExpression);
|
|
apparentArgumentCount = argumentCount;
|
|
var res = !node ? undefined :
|
|
editingArgument ? runWithInferenceBlockedFromSourceNode(editingArgument, function () { return getResolvedSignature(node, candidatesOutArray, checkMode); }) :
|
|
getResolvedSignature(node, candidatesOutArray, checkMode);
|
|
apparentArgumentCount = undefined;
|
|
return res;
|
|
}
|
|
var tupleTypes = new ts.Map();
|
|
var unionTypes = new ts.Map();
|
|
var intersectionTypes = new ts.Map();
|
|
var stringLiteralTypes = new ts.Map();
|
|
var numberLiteralTypes = new ts.Map();
|
|
var bigIntLiteralTypes = new ts.Map();
|
|
var enumLiteralTypes = new ts.Map();
|
|
var indexedAccessTypes = new ts.Map();
|
|
var templateLiteralTypes = new ts.Map();
|
|
var stringMappingTypes = new ts.Map();
|
|
var substitutionTypes = new ts.Map();
|
|
var subtypeReductionCache = new ts.Map();
|
|
var cachedTypes = new ts.Map();
|
|
var evolvingArrayTypes = [];
|
|
var undefinedProperties = new ts.Map();
|
|
var markerTypes = new ts.Set();
|
|
var unknownSymbol = createSymbol(4, "unknown");
|
|
var resolvingSymbol = createSymbol(0, "__resolving__");
|
|
var unresolvedSymbols = new ts.Map();
|
|
var errorTypes = new ts.Map();
|
|
var anyType = createIntrinsicType(1, "any");
|
|
var autoType = createIntrinsicType(1, "any", 262144);
|
|
var wildcardType = createIntrinsicType(1, "any");
|
|
var errorType = createIntrinsicType(1, "error");
|
|
var unresolvedType = createIntrinsicType(1, "unresolved");
|
|
var intrinsicMarkerType = createIntrinsicType(1, "intrinsic");
|
|
var unknownType = createIntrinsicType(2, "unknown");
|
|
var nonNullUnknownType = createIntrinsicType(2, "unknown");
|
|
var undefinedType = createIntrinsicType(32768, "undefined");
|
|
var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768, "undefined", 65536);
|
|
var optionalType = createIntrinsicType(32768, "undefined");
|
|
var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768, "undefined") : undefinedType;
|
|
var nullType = createIntrinsicType(65536, "null");
|
|
var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536, "null", 65536);
|
|
var stringType = createIntrinsicType(4, "string");
|
|
var numberType = createIntrinsicType(8, "number");
|
|
var bigintType = createIntrinsicType(64, "bigint");
|
|
var falseType = createIntrinsicType(512, "false");
|
|
var regularFalseType = createIntrinsicType(512, "false");
|
|
var trueType = createIntrinsicType(512, "true");
|
|
var regularTrueType = createIntrinsicType(512, "true");
|
|
trueType.regularType = regularTrueType;
|
|
trueType.freshType = trueType;
|
|
regularTrueType.regularType = regularTrueType;
|
|
regularTrueType.freshType = trueType;
|
|
falseType.regularType = regularFalseType;
|
|
falseType.freshType = falseType;
|
|
regularFalseType.regularType = regularFalseType;
|
|
regularFalseType.freshType = falseType;
|
|
var booleanType = getUnionType([regularFalseType, regularTrueType]);
|
|
var esSymbolType = createIntrinsicType(4096, "symbol");
|
|
var voidType = createIntrinsicType(16384, "void");
|
|
var neverType = createIntrinsicType(131072, "never");
|
|
var silentNeverType = createIntrinsicType(131072, "never", 262144);
|
|
var implicitNeverType = createIntrinsicType(131072, "never");
|
|
var unreachableNeverType = createIntrinsicType(131072, "never");
|
|
var nonPrimitiveType = createIntrinsicType(67108864, "object");
|
|
var stringOrNumberType = getUnionType([stringType, numberType]);
|
|
var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
|
|
var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
|
|
var numberOrBigIntType = getUnionType([numberType, bigintType]);
|
|
var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
|
|
var numericStringType = getTemplateLiteralType(["", ""], [numberType]);
|
|
var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 ? getRestrictiveTypeParameter(t) : t; }, function () { return "(restrictive mapper)"; });
|
|
var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 ? wildcardType : t; }, function () { return "(permissive mapper)"; });
|
|
var uniqueLiteralType = createIntrinsicType(131072, "never");
|
|
var uniqueLiteralMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 ? uniqueLiteralType : t; }, function () { return "(unique literal mapper)"; });
|
|
var outofbandVarianceMarkerHandler;
|
|
var reportUnreliableMapper = makeFunctionTypeMapper(function (t) {
|
|
if (outofbandVarianceMarkerHandler && (t === markerSuperType || t === markerSubType || t === markerOtherType)) {
|
|
outofbandVarianceMarkerHandler(true);
|
|
}
|
|
return t;
|
|
}, function () { return "(unmeasurable reporter)"; });
|
|
var reportUnmeasurableMapper = makeFunctionTypeMapper(function (t) {
|
|
if (outofbandVarianceMarkerHandler && (t === markerSuperType || t === markerSubType || t === markerOtherType)) {
|
|
outofbandVarianceMarkerHandler(false);
|
|
}
|
|
return t;
|
|
}, function () { return "(unreliable reporter)"; });
|
|
var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
emptyJsxObjectType.objectFlags |= 2048;
|
|
var emptyTypeLiteralSymbol = createSymbol(2048, "__type");
|
|
emptyTypeLiteralSymbol.members = ts.createSymbolTable();
|
|
var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var unknownUnionType = strictNullChecks ? getUnionType([undefinedType, nullType, createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray)]) : unknownType;
|
|
var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
emptyGenericType.instantiations = new ts.Map();
|
|
var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
anyFunctionType.objectFlags |= 262144;
|
|
var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var markerSuperType = createTypeParameter();
|
|
var markerSubType = createTypeParameter();
|
|
markerSubType.constraint = markerSuperType;
|
|
var markerOtherType = createTypeParameter();
|
|
var markerSuperTypeForCheck = createTypeParameter();
|
|
var markerSubTypeForCheck = createTypeParameter();
|
|
markerSubTypeForCheck.constraint = markerSuperTypeForCheck;
|
|
var noTypePredicate = createTypePredicate(1, "<<unresolved>>", 0, anyType);
|
|
var anySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, 0);
|
|
var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, undefined, 0, 0);
|
|
var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, 0);
|
|
var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, undefined, 0, 0);
|
|
var enumNumberIndexInfo = createIndexInfo(numberType, stringType, true);
|
|
var iterationTypesCache = new ts.Map();
|
|
var noIterationTypes = {
|
|
get yieldType() { return ts.Debug.fail("Not supported"); },
|
|
get returnType() { return ts.Debug.fail("Not supported"); },
|
|
get nextType() { return ts.Debug.fail("Not supported"); },
|
|
};
|
|
var anyIterationTypes = createIterationTypes(anyType, anyType, anyType);
|
|
var anyIterationTypesExceptNext = createIterationTypes(anyType, anyType, unknownType);
|
|
var defaultIterationTypes = createIterationTypes(neverType, anyType, undefinedType);
|
|
var asyncIterationTypesResolver = {
|
|
iterableCacheKey: "iterationTypesOfAsyncIterable",
|
|
iteratorCacheKey: "iterationTypesOfAsyncIterator",
|
|
iteratorSymbolName: "asyncIterator",
|
|
getGlobalIteratorType: getGlobalAsyncIteratorType,
|
|
getGlobalIterableType: getGlobalAsyncIterableType,
|
|
getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType,
|
|
getGlobalGeneratorType: getGlobalAsyncGeneratorType,
|
|
resolveIterationType: getAwaitedType,
|
|
mustHaveANextMethodDiagnostic: ts.Diagnostics.An_async_iterator_must_have_a_next_method,
|
|
mustBeAMethodDiagnostic: ts.Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method,
|
|
mustHaveAValueDiagnostic: ts.Diagnostics.The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property,
|
|
};
|
|
var syncIterationTypesResolver = {
|
|
iterableCacheKey: "iterationTypesOfIterable",
|
|
iteratorCacheKey: "iterationTypesOfIterator",
|
|
iteratorSymbolName: "iterator",
|
|
getGlobalIteratorType: getGlobalIteratorType,
|
|
getGlobalIterableType: getGlobalIterableType,
|
|
getGlobalIterableIteratorType: getGlobalIterableIteratorType,
|
|
getGlobalGeneratorType: getGlobalGeneratorType,
|
|
resolveIterationType: function (type, _errorNode) { return type; },
|
|
mustHaveANextMethodDiagnostic: ts.Diagnostics.An_iterator_must_have_a_next_method,
|
|
mustBeAMethodDiagnostic: ts.Diagnostics.The_0_property_of_an_iterator_must_be_a_method,
|
|
mustHaveAValueDiagnostic: ts.Diagnostics.The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property,
|
|
};
|
|
var amalgamatedDuplicates;
|
|
var reverseMappedCache = new ts.Map();
|
|
var inInferTypeForHomomorphicMappedType = false;
|
|
var ambientModulesCache;
|
|
var patternAmbientModules;
|
|
var patternAmbientModuleAugmentations;
|
|
var globalObjectType;
|
|
var globalFunctionType;
|
|
var globalCallableFunctionType;
|
|
var globalNewableFunctionType;
|
|
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 deferredGlobalESSymbolConstructorTypeSymbol;
|
|
var deferredGlobalESSymbolType;
|
|
var deferredGlobalTypedPropertyDescriptorType;
|
|
var deferredGlobalPromiseType;
|
|
var deferredGlobalPromiseLikeType;
|
|
var deferredGlobalPromiseConstructorSymbol;
|
|
var deferredGlobalPromiseConstructorLikeType;
|
|
var deferredGlobalIterableType;
|
|
var deferredGlobalIteratorType;
|
|
var deferredGlobalIterableIteratorType;
|
|
var deferredGlobalGeneratorType;
|
|
var deferredGlobalIteratorYieldResultType;
|
|
var deferredGlobalIteratorReturnResultType;
|
|
var deferredGlobalAsyncIterableType;
|
|
var deferredGlobalAsyncIteratorType;
|
|
var deferredGlobalAsyncIterableIteratorType;
|
|
var deferredGlobalAsyncGeneratorType;
|
|
var deferredGlobalTemplateStringsArrayType;
|
|
var deferredGlobalImportMetaType;
|
|
var deferredGlobalImportMetaExpressionType;
|
|
var deferredGlobalImportCallOptionsType;
|
|
var deferredGlobalExtractSymbol;
|
|
var deferredGlobalOmitSymbol;
|
|
var deferredGlobalAwaitedSymbol;
|
|
var deferredGlobalBigIntType;
|
|
var allPotentiallyUnusedIdentifiers = new ts.Map();
|
|
var flowLoopStart = 0;
|
|
var flowLoopCount = 0;
|
|
var sharedFlowCount = 0;
|
|
var flowAnalysisDisabled = false;
|
|
var flowInvocationCount = 0;
|
|
var lastFlowNode;
|
|
var lastFlowNodeReachable;
|
|
var flowTypeCache;
|
|
var emptyStringType = getStringLiteralType("");
|
|
var zeroType = getNumberLiteralType(0);
|
|
var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "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 flowNodeReachable = [];
|
|
var flowNodePostSuper = [];
|
|
var potentialThisCollisions = [];
|
|
var potentialNewTargetCollisions = [];
|
|
var potentialWeakMapSetCollisions = [];
|
|
var potentialReflectCollisions = [];
|
|
var potentialUnusedRenamedBindingElementsInTypes = [];
|
|
var awaitedTypeStack = [];
|
|
var diagnostics = ts.createDiagnosticCollection();
|
|
var suggestionDiagnostics = ts.createDiagnosticCollection();
|
|
var typeofType = createTypeofType();
|
|
var _jsxNamespace;
|
|
var _jsxFactoryEntity;
|
|
var subtypeRelation = new ts.Map();
|
|
var strictSubtypeRelation = new ts.Map();
|
|
var assignableRelation = new ts.Map();
|
|
var comparableRelation = new ts.Map();
|
|
var identityRelation = new ts.Map();
|
|
var enumRelation = new ts.Map();
|
|
var builtinGlobals = ts.createSymbolTable();
|
|
builtinGlobals.set(undefinedSymbol.escapedName, undefinedSymbol);
|
|
var suggestedExtensions = [
|
|
[".mts", ".mjs"],
|
|
[".ts", ".js"],
|
|
[".cts", ".cjs"],
|
|
[".mjs", ".mjs"],
|
|
[".js", ".js"],
|
|
[".cjs", ".cjs"],
|
|
[".tsx", compilerOptions.jsx === 1 ? ".jsx" : ".js"],
|
|
[".jsx", ".jsx"],
|
|
[".json", ".json"],
|
|
];
|
|
initializeTypeChecker();
|
|
return checker;
|
|
function getCachedType(key) {
|
|
return key ? cachedTypes.get(key) : undefined;
|
|
}
|
|
function setCachedType(key, type) {
|
|
if (key)
|
|
cachedTypes.set(key, type);
|
|
return type;
|
|
}
|
|
function getJsxNamespace(location) {
|
|
if (location) {
|
|
var file = ts.getSourceFileOfNode(location);
|
|
if (file) {
|
|
if (ts.isJsxOpeningFragment(location)) {
|
|
if (file.localJsxFragmentNamespace) {
|
|
return file.localJsxFragmentNamespace;
|
|
}
|
|
var jsxFragmentPragma = file.pragmas.get("jsxfrag");
|
|
if (jsxFragmentPragma) {
|
|
var chosenPragma = ts.isArray(jsxFragmentPragma) ? jsxFragmentPragma[0] : jsxFragmentPragma;
|
|
file.localJsxFragmentFactory = ts.parseIsolatedEntityName(chosenPragma.arguments.factory, languageVersion);
|
|
ts.visitNode(file.localJsxFragmentFactory, markAsSynthetic);
|
|
if (file.localJsxFragmentFactory) {
|
|
return file.localJsxFragmentNamespace = ts.getFirstIdentifier(file.localJsxFragmentFactory).escapedText;
|
|
}
|
|
}
|
|
var entity = getJsxFragmentFactoryEntity(location);
|
|
if (entity) {
|
|
file.localJsxFragmentFactory = entity;
|
|
return file.localJsxFragmentNamespace = ts.getFirstIdentifier(entity).escapedText;
|
|
}
|
|
}
|
|
else {
|
|
var localJsxNamespace = getLocalJsxNamespace(file);
|
|
if (localJsxNamespace) {
|
|
return file.localJsxNamespace = localJsxNamespace;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!_jsxNamespace) {
|
|
_jsxNamespace = "React";
|
|
if (compilerOptions.jsxFactory) {
|
|
_jsxFactoryEntity = ts.parseIsolatedEntityName(compilerOptions.jsxFactory, languageVersion);
|
|
ts.visitNode(_jsxFactoryEntity, markAsSynthetic);
|
|
if (_jsxFactoryEntity) {
|
|
_jsxNamespace = ts.getFirstIdentifier(_jsxFactoryEntity).escapedText;
|
|
}
|
|
}
|
|
else if (compilerOptions.reactNamespace) {
|
|
_jsxNamespace = ts.escapeLeadingUnderscores(compilerOptions.reactNamespace);
|
|
}
|
|
}
|
|
if (!_jsxFactoryEntity) {
|
|
_jsxFactoryEntity = ts.factory.createQualifiedName(ts.factory.createIdentifier(ts.unescapeLeadingUnderscores(_jsxNamespace)), "createElement");
|
|
}
|
|
return _jsxNamespace;
|
|
}
|
|
function getLocalJsxNamespace(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);
|
|
ts.visitNode(file.localJsxFactory, markAsSynthetic);
|
|
if (file.localJsxFactory) {
|
|
return file.localJsxNamespace = ts.getFirstIdentifier(file.localJsxFactory).escapedText;
|
|
}
|
|
}
|
|
}
|
|
function markAsSynthetic(node) {
|
|
ts.setTextRangePosEnd(node, -1, -1);
|
|
return ts.visitEachChild(node, markAsSynthetic, ts.nullTransformationContext);
|
|
}
|
|
function getEmitResolver(sourceFile, cancellationToken) {
|
|
getDiagnostics(sourceFile, cancellationToken);
|
|
return emitResolver;
|
|
}
|
|
function lookupOrIssueError(location, message, arg0, arg1, arg2, arg3) {
|
|
var diagnostic = location
|
|
? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
|
|
: ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
|
|
var existing = diagnostics.lookup(diagnostic);
|
|
if (existing) {
|
|
return existing;
|
|
}
|
|
else {
|
|
diagnostics.add(diagnostic);
|
|
return diagnostic;
|
|
}
|
|
}
|
|
function errorSkippedOn(key, location, message, arg0, arg1, arg2, arg3) {
|
|
var diagnostic = error(location, message, arg0, arg1, arg2, arg3);
|
|
diagnostic.skippedOn = key;
|
|
return diagnostic;
|
|
}
|
|
function createError(location, message, arg0, arg1, arg2, arg3) {
|
|
return location
|
|
? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
|
|
: ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
|
|
}
|
|
function error(location, message, arg0, arg1, arg2, arg3) {
|
|
var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
|
|
diagnostics.add(diagnostic);
|
|
return diagnostic;
|
|
}
|
|
function addErrorOrSuggestion(isError, diagnostic) {
|
|
if (isError) {
|
|
diagnostics.add(diagnostic);
|
|
}
|
|
else {
|
|
suggestionDiagnostics.add(__assign(__assign({}, diagnostic), { category: ts.DiagnosticCategory.Suggestion }));
|
|
}
|
|
}
|
|
function errorOrSuggestion(isError, location, message, arg0, arg1, arg2, arg3) {
|
|
if (location.pos < 0 || location.end < 0) {
|
|
if (!isError) {
|
|
return;
|
|
}
|
|
var file = ts.getSourceFileOfNode(location);
|
|
addErrorOrSuggestion(isError, "message" in message ? ts.createFileDiagnostic(file, 0, 0, message, arg0, arg1, arg2, arg3) : ts.createDiagnosticForFileFromMessageChain(file, message));
|
|
return;
|
|
}
|
|
addErrorOrSuggestion(isError, "message" in message ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3) : ts.createDiagnosticForNodeFromMessageChain(location, message));
|
|
}
|
|
function errorAndMaybeSuggestAwait(location, maybeMissingAwait, message, arg0, arg1, arg2, arg3) {
|
|
var diagnostic = error(location, message, arg0, arg1, arg2, arg3);
|
|
if (maybeMissingAwait) {
|
|
var related = ts.createDiagnosticForNode(location, ts.Diagnostics.Did_you_forget_to_use_await);
|
|
ts.addRelatedInfo(diagnostic, related);
|
|
}
|
|
return diagnostic;
|
|
}
|
|
function addDeprecatedSuggestionWorker(declarations, diagnostic) {
|
|
var deprecatedTag = Array.isArray(declarations) ? ts.forEach(declarations, ts.getJSDocDeprecatedTag) : ts.getJSDocDeprecatedTag(declarations);
|
|
if (deprecatedTag) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(deprecatedTag, ts.Diagnostics.The_declaration_was_marked_as_deprecated_here));
|
|
}
|
|
suggestionDiagnostics.add(diagnostic);
|
|
return diagnostic;
|
|
}
|
|
function isDeprecatedSymbol(symbol) {
|
|
return !!(getDeclarationNodeFlagsFromSymbol(symbol) & 268435456);
|
|
}
|
|
function addDeprecatedSuggestion(location, declarations, deprecatedEntity) {
|
|
var diagnostic = ts.createDiagnosticForNode(location, ts.Diagnostics._0_is_deprecated, deprecatedEntity);
|
|
return addDeprecatedSuggestionWorker(declarations, diagnostic);
|
|
}
|
|
function addDeprecatedSuggestionWithSignature(location, declaration, deprecatedEntity, signatureString) {
|
|
var diagnostic = deprecatedEntity
|
|
? ts.createDiagnosticForNode(location, ts.Diagnostics.The_signature_0_of_1_is_deprecated, signatureString, deprecatedEntity)
|
|
: ts.createDiagnosticForNode(location, ts.Diagnostics._0_is_deprecated, signatureString);
|
|
return addDeprecatedSuggestionWorker(declaration, diagnostic);
|
|
}
|
|
function createSymbol(flags, name, checkFlags) {
|
|
symbolCount++;
|
|
var symbol = new Symbol(flags | 33554432, name);
|
|
symbol.checkFlags = checkFlags || 0;
|
|
return symbol;
|
|
}
|
|
function getExcludedSymbolFlags(flags) {
|
|
var result = 0;
|
|
if (flags & 2)
|
|
result |= 111551;
|
|
if (flags & 1)
|
|
result |= 111550;
|
|
if (flags & 4)
|
|
result |= 0;
|
|
if (flags & 8)
|
|
result |= 900095;
|
|
if (flags & 16)
|
|
result |= 110991;
|
|
if (flags & 32)
|
|
result |= 899503;
|
|
if (flags & 64)
|
|
result |= 788872;
|
|
if (flags & 256)
|
|
result |= 899327;
|
|
if (flags & 128)
|
|
result |= 899967;
|
|
if (flags & 512)
|
|
result |= 110735;
|
|
if (flags & 8192)
|
|
result |= 103359;
|
|
if (flags & 32768)
|
|
result |= 46015;
|
|
if (flags & 65536)
|
|
result |= 78783;
|
|
if (flags & 262144)
|
|
result |= 526824;
|
|
if (flags & 524288)
|
|
result |= 788968;
|
|
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 = new ts.Map(symbol.members);
|
|
if (symbol.exports)
|
|
result.exports = new ts.Map(symbol.exports);
|
|
recordMergedSymbol(result, symbol);
|
|
return result;
|
|
}
|
|
function mergeSymbol(target, source, unidirectional) {
|
|
if (unidirectional === void 0) { unidirectional = false; }
|
|
if (!(target.flags & getExcludedSymbolFlags(source.flags)) ||
|
|
(source.flags | target.flags) & 67108864) {
|
|
if (source === target) {
|
|
return target;
|
|
}
|
|
if (!(target.flags & 33554432)) {
|
|
var resolvedTarget = resolveSymbol(target);
|
|
if (resolvedTarget === unknownSymbol) {
|
|
return source;
|
|
}
|
|
target = cloneSymbol(resolvedTarget);
|
|
}
|
|
if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
|
|
target.constEnumOnlyModule = false;
|
|
}
|
|
target.flags |= source.flags;
|
|
if (source.valueDeclaration) {
|
|
ts.setValueDeclaration(target, source.valueDeclaration);
|
|
}
|
|
ts.addRange(target.declarations, source.declarations);
|
|
if (source.members) {
|
|
if (!target.members)
|
|
target.members = ts.createSymbolTable();
|
|
mergeSymbolTable(target.members, source.members, unidirectional);
|
|
}
|
|
if (source.exports) {
|
|
if (!target.exports)
|
|
target.exports = ts.createSymbolTable();
|
|
mergeSymbolTable(target.exports, source.exports, unidirectional);
|
|
}
|
|
if (!unidirectional) {
|
|
recordMergedSymbol(target, source);
|
|
}
|
|
}
|
|
else if (target.flags & 1024) {
|
|
if (target !== globalThisSymbol) {
|
|
error(source.declarations && 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 isEitherEnum = !!(target.flags & 384 || source.flags & 384);
|
|
var isEitherBlockScoped_1 = !!(target.flags & 2 || source.flags & 2);
|
|
var message = isEitherEnum ? ts.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations
|
|
: isEitherBlockScoped_1 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0
|
|
: ts.Diagnostics.Duplicate_identifier_0;
|
|
var sourceSymbolFile = source.declarations && ts.getSourceFileOfNode(source.declarations[0]);
|
|
var targetSymbolFile = target.declarations && ts.getSourceFileOfNode(target.declarations[0]);
|
|
var isSourcePlainJs = ts.isPlainJsFile(sourceSymbolFile, compilerOptions.checkJs);
|
|
var isTargetPlainJs = ts.isPlainJsFile(targetSymbolFile, compilerOptions.checkJs);
|
|
var symbolName_1 = symbolToString(source);
|
|
if (sourceSymbolFile && targetSymbolFile && amalgamatedDuplicates && !isEitherEnum && sourceSymbolFile !== targetSymbolFile) {
|
|
var firstFile_1 = ts.comparePaths(sourceSymbolFile.path, targetSymbolFile.path) === -1 ? sourceSymbolFile : targetSymbolFile;
|
|
var secondFile_1 = firstFile_1 === sourceSymbolFile ? targetSymbolFile : sourceSymbolFile;
|
|
var filesDuplicates = ts.getOrUpdate(amalgamatedDuplicates, "".concat(firstFile_1.path, "|").concat(secondFile_1.path), function () {
|
|
return ({ firstFile: firstFile_1, secondFile: secondFile_1, conflictingSymbols: new ts.Map() });
|
|
});
|
|
var conflictingSymbolInfo = ts.getOrUpdate(filesDuplicates.conflictingSymbols, symbolName_1, function () {
|
|
return ({ isBlockScoped: isEitherBlockScoped_1, firstFileLocations: [], secondFileLocations: [] });
|
|
});
|
|
if (!isSourcePlainJs)
|
|
addDuplicateLocations(conflictingSymbolInfo.firstFileLocations, source);
|
|
if (!isTargetPlainJs)
|
|
addDuplicateLocations(conflictingSymbolInfo.secondFileLocations, target);
|
|
}
|
|
else {
|
|
if (!isSourcePlainJs)
|
|
addDuplicateDeclarationErrorsForSymbols(source, message, symbolName_1, target);
|
|
if (!isTargetPlainJs)
|
|
addDuplicateDeclarationErrorsForSymbols(target, message, symbolName_1, source);
|
|
}
|
|
}
|
|
return target;
|
|
function addDuplicateLocations(locs, symbol) {
|
|
if (symbol.declarations) {
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
ts.pushIfUnique(locs, decl);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function addDuplicateDeclarationErrorsForSymbols(target, message, symbolName, source) {
|
|
ts.forEach(target.declarations, function (node) {
|
|
addDuplicateDeclarationError(node, message, symbolName, source.declarations);
|
|
});
|
|
}
|
|
function addDuplicateDeclarationError(node, message, symbolName, relatedNodes) {
|
|
var errorNode = (ts.getExpandoInitializer(node, false) ? ts.getNameOfExpando(node) : ts.getNameOfDeclaration(node)) || node;
|
|
var err = lookupOrIssueError(errorNode, message, symbolName);
|
|
var _loop_7 = function (relatedNode) {
|
|
var adjustedNode = (ts.getExpandoInitializer(relatedNode, false) ? ts.getNameOfExpando(relatedNode) : ts.getNameOfDeclaration(relatedNode)) || relatedNode;
|
|
if (adjustedNode === errorNode)
|
|
return "continue";
|
|
err.relatedInformation = err.relatedInformation || [];
|
|
var leadingMessage = ts.createDiagnosticForNode(adjustedNode, ts.Diagnostics._0_was_also_declared_here, symbolName);
|
|
var followOnMessage = ts.createDiagnosticForNode(adjustedNode, ts.Diagnostics.and_here);
|
|
if (ts.length(err.relatedInformation) >= 5 || ts.some(err.relatedInformation, function (r) { return ts.compareDiagnostics(r, followOnMessage) === 0 || ts.compareDiagnostics(r, leadingMessage) === 0; }))
|
|
return "continue";
|
|
ts.addRelatedInfo(err, !ts.length(err.relatedInformation) ? leadingMessage : followOnMessage);
|
|
};
|
|
for (var _i = 0, _a = relatedNodes || ts.emptyArray; _i < _a.length; _i++) {
|
|
var relatedNode = _a[_i];
|
|
_loop_7(relatedNode);
|
|
}
|
|
}
|
|
function combineSymbolTables(first, second) {
|
|
if (!(first === null || first === void 0 ? void 0 : first.size))
|
|
return second;
|
|
if (!(second === null || second === void 0 ? void 0 : second.size))
|
|
return first;
|
|
var combined = ts.createSymbolTable();
|
|
mergeSymbolTable(combined, first);
|
|
mergeSymbolTable(combined, second);
|
|
return combined;
|
|
}
|
|
function mergeSymbolTable(target, source, unidirectional) {
|
|
if (unidirectional === void 0) { unidirectional = false; }
|
|
source.forEach(function (sourceSymbol, id) {
|
|
var targetSymbol = target.get(id);
|
|
target.set(id, targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : sourceSymbol);
|
|
});
|
|
}
|
|
function mergeModuleAugmentation(moduleName) {
|
|
var _a, _b, _c;
|
|
var moduleAugmentation = moduleName.parent;
|
|
if (((_a = moduleAugmentation.symbol.declarations) === null || _a === void 0 ? void 0 : _a[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 & 16777216)
|
|
? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found
|
|
: undefined;
|
|
var mainModule_1 = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, true);
|
|
if (!mainModule_1) {
|
|
return;
|
|
}
|
|
mainModule_1 = resolveExternalModuleSymbol(mainModule_1);
|
|
if (mainModule_1.flags & 1920) {
|
|
if (ts.some(patternAmbientModules, function (module) { return mainModule_1 === module.symbol; })) {
|
|
var merged = mergeSymbol(moduleAugmentation.symbol, mainModule_1, true);
|
|
if (!patternAmbientModuleAugmentations) {
|
|
patternAmbientModuleAugmentations = new ts.Map();
|
|
}
|
|
patternAmbientModuleAugmentations.set(moduleName.text, merged);
|
|
}
|
|
else {
|
|
if (((_b = mainModule_1.exports) === null || _b === void 0 ? void 0 : _b.get("__export")) && ((_c = moduleAugmentation.symbol.exports) === null || _c === void 0 ? void 0 : _c.size)) {
|
|
var resolvedExports = getResolvedMembersOrExportsOfSymbol(mainModule_1, "resolvedExports");
|
|
for (var _i = 0, _d = ts.arrayFrom(moduleAugmentation.symbol.exports.entries()); _i < _d.length; _i++) {
|
|
var _e = _d[_i], key = _e[0], value = _e[1];
|
|
if (resolvedExports.has(key) && !mainModule_1.exports.has(key)) {
|
|
mergeSymbol(resolvedExports.get(key), value);
|
|
}
|
|
}
|
|
}
|
|
mergeSymbol(mainModule_1, 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] = new SymbolLinks());
|
|
}
|
|
function getNodeLinks(node) {
|
|
var nodeId = getNodeId(node);
|
|
return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
|
|
}
|
|
function isGlobalSourceFile(node) {
|
|
return node.kind === 305 && !ts.isExternalOrCommonJsModule(node);
|
|
}
|
|
function getSymbol(symbols, name, meaning) {
|
|
if (meaning) {
|
|
var symbol = getMergedSymbol(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, 111551);
|
|
var propertySymbol = getSymbol(getMembersOfSymbol(classDeclaration.symbol), parameterName, 111551);
|
|
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);
|
|
var declContainer = ts.getEnclosingBlockScopeContainer(declaration);
|
|
if (declarationFile !== useFile) {
|
|
if ((moduleKind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) ||
|
|
(!ts.outFile(compilerOptions)) ||
|
|
isInTypeQuery(usage) ||
|
|
declaration.flags & 16777216) {
|
|
return true;
|
|
}
|
|
if (isUsedInFunctionOrInstanceProperty(usage, declaration)) {
|
|
return true;
|
|
}
|
|
var sourceFiles = host.getSourceFiles();
|
|
return sourceFiles.indexOf(declarationFile) <= sourceFiles.indexOf(useFile);
|
|
}
|
|
if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
|
|
if (declaration.kind === 203) {
|
|
var errorBindingElement = ts.getAncestor(usage, 203);
|
|
if (errorBindingElement) {
|
|
return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
|
|
declaration.pos < errorBindingElement.pos;
|
|
}
|
|
return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 254), usage);
|
|
}
|
|
else if (declaration.kind === 254) {
|
|
return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
|
|
}
|
|
else if (ts.isClassDeclaration(declaration)) {
|
|
return !ts.findAncestor(usage, function (n) { return ts.isComputedPropertyName(n) && n.parent.parent === declaration; });
|
|
}
|
|
else if (ts.isPropertyDeclaration(declaration)) {
|
|
return !isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, false);
|
|
}
|
|
else if (ts.isParameterPropertyDeclaration(declaration, declaration.parent)) {
|
|
return !(ts.getEmitScriptTarget(compilerOptions) === 99 && useDefineForClassFields
|
|
&& ts.getContainingClass(declaration) === ts.getContainingClass(usage)
|
|
&& isUsedInFunctionOrInstanceProperty(usage, declaration));
|
|
}
|
|
return true;
|
|
}
|
|
if (usage.parent.kind === 275 || (usage.parent.kind === 271 && usage.parent.isExportEquals)) {
|
|
return true;
|
|
}
|
|
if (usage.kind === 271 && usage.isExportEquals) {
|
|
return true;
|
|
}
|
|
if (!!(usage.flags & 8388608) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
|
|
return true;
|
|
}
|
|
if (isUsedInFunctionOrInstanceProperty(usage, declaration)) {
|
|
if (ts.getEmitScriptTarget(compilerOptions) === 99 && useDefineForClassFields
|
|
&& ts.getContainingClass(declaration)
|
|
&& (ts.isPropertyDeclaration(declaration) || ts.isParameterPropertyDeclaration(declaration, declaration.parent))) {
|
|
return !isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, true);
|
|
}
|
|
else {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
function usageInTypeDeclaration() {
|
|
return !!ts.findAncestor(usage, function (node) { return ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node); });
|
|
}
|
|
function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
|
|
switch (declaration.parent.parent.kind) {
|
|
case 237:
|
|
case 242:
|
|
case 244:
|
|
if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
var grandparent = declaration.parent.parent;
|
|
return ts.isForInOrOfStatement(grandparent) && isSameScopeDescendentOf(usage, grandparent.expression, declContainer);
|
|
}
|
|
function isUsedInFunctionOrInstanceProperty(usage, declaration) {
|
|
return !!ts.findAncestor(usage, function (current) {
|
|
if (current === declContainer) {
|
|
return "quit";
|
|
}
|
|
if (ts.isFunctionLike(current)) {
|
|
return true;
|
|
}
|
|
if (ts.isClassStaticBlockDeclaration(current)) {
|
|
return declaration.pos < usage.pos;
|
|
}
|
|
var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
|
|
if (propertyDeclaration) {
|
|
var initializerOfProperty = propertyDeclaration.initializer === current;
|
|
if (initializerOfProperty) {
|
|
if (ts.isStatic(current.parent)) {
|
|
if (declaration.kind === 169) {
|
|
return true;
|
|
}
|
|
if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
|
|
var propName = declaration.name;
|
|
if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
|
|
var type = getTypeOfSymbol(getSymbolOfNode(declaration));
|
|
var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
|
|
if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var isDeclarationInstanceProperty = declaration.kind === 167 && !ts.isStatic(declaration);
|
|
if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
function isPropertyImmediatelyReferencedWithinDeclaration(declaration, usage, stopAtAnyPropertyDeclaration) {
|
|
if (usage.end > declaration.end) {
|
|
return false;
|
|
}
|
|
var ancestorChangingReferenceScope = ts.findAncestor(usage, function (node) {
|
|
if (node === declaration) {
|
|
return "quit";
|
|
}
|
|
switch (node.kind) {
|
|
case 214:
|
|
return true;
|
|
case 167:
|
|
return stopAtAnyPropertyDeclaration &&
|
|
(ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
|
|
|| ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
|
|
? "quit" : true;
|
|
case 235:
|
|
switch (node.parent.kind) {
|
|
case 172:
|
|
case 169:
|
|
case 173:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
default:
|
|
return false;
|
|
}
|
|
});
|
|
return ancestorChangingReferenceScope === undefined;
|
|
}
|
|
}
|
|
function useOuterVariableScopeInParameter(result, location, lastLocation) {
|
|
var target = ts.getEmitScriptTarget(compilerOptions);
|
|
var functionLocation = location;
|
|
if (ts.isParameter(lastLocation)
|
|
&& functionLocation.body
|
|
&& result.valueDeclaration
|
|
&& result.valueDeclaration.pos >= functionLocation.body.pos
|
|
&& result.valueDeclaration.end <= functionLocation.body.end) {
|
|
if (target >= 2) {
|
|
var links = getNodeLinks(functionLocation);
|
|
if (links.declarationRequiresScopeChange === undefined) {
|
|
links.declarationRequiresScopeChange = ts.forEach(functionLocation.parameters, requiresScopeChange) || false;
|
|
}
|
|
return !links.declarationRequiresScopeChange;
|
|
}
|
|
}
|
|
return false;
|
|
function requiresScopeChange(node) {
|
|
return requiresScopeChangeWorker(node.name)
|
|
|| !!node.initializer && requiresScopeChangeWorker(node.initializer);
|
|
}
|
|
function requiresScopeChangeWorker(node) {
|
|
switch (node.kind) {
|
|
case 214:
|
|
case 213:
|
|
case 256:
|
|
case 171:
|
|
return false;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 296:
|
|
return requiresScopeChangeWorker(node.name);
|
|
case 167:
|
|
if (ts.hasStaticModifier(node)) {
|
|
return target < 99 || !useDefineForClassFields;
|
|
}
|
|
return requiresScopeChangeWorker(node.name);
|
|
default:
|
|
if (ts.isNullishCoalesce(node) || ts.isOptionalChain(node)) {
|
|
return target < 7;
|
|
}
|
|
if (ts.isBindingElement(node) && node.dotDotDotToken && ts.isObjectBindingPattern(node.parent)) {
|
|
return target < 4;
|
|
}
|
|
if (ts.isTypeNode(node))
|
|
return false;
|
|
return ts.forEachChild(node, requiresScopeChangeWorker) || false;
|
|
}
|
|
}
|
|
}
|
|
function isConstAssertion(location) {
|
|
return (ts.isAssertionExpression(location) && ts.isConstTypeReference(location.type))
|
|
|| (ts.isJSDocTypeTag(location) && ts.isConstTypeReference(location.typeExpression));
|
|
}
|
|
function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSpellingSuggstions) {
|
|
if (excludeGlobals === void 0) { excludeGlobals = false; }
|
|
if (getSpellingSuggstions === void 0) { getSpellingSuggstions = true; }
|
|
return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSpellingSuggstions, getSymbol);
|
|
}
|
|
function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSpellingSuggestions, lookup) {
|
|
var _a, _b, _c;
|
|
var originalLocation = location;
|
|
var result;
|
|
var lastLocation;
|
|
var lastSelfReferenceLocation;
|
|
var propertyWithInvalidInitializer;
|
|
var associatedDeclarationForContainingInitializerOrBindingName;
|
|
var withinDeferredContext = false;
|
|
var errorLocation = location;
|
|
var grandparent;
|
|
var isInExternalModule = false;
|
|
loop: while (location) {
|
|
if (name === "const" && isConstAssertion(location)) {
|
|
return undefined;
|
|
}
|
|
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 & 788968 && lastLocation.kind !== 320) {
|
|
useResult = result.flags & 262144
|
|
? lastLocation === location.type ||
|
|
lastLocation.kind === 164 ||
|
|
lastLocation.kind === 340 ||
|
|
lastLocation.kind === 341 ||
|
|
lastLocation.kind === 163
|
|
: false;
|
|
}
|
|
if (meaning & result.flags & 3) {
|
|
if (useOuterVariableScopeInParameter(result, location, lastLocation)) {
|
|
useResult = false;
|
|
}
|
|
else if (result.flags & 1) {
|
|
useResult =
|
|
lastLocation.kind === 164 ||
|
|
(lastLocation === location.type &&
|
|
!!ts.findAncestor(result.valueDeclaration, ts.isParameter));
|
|
}
|
|
}
|
|
}
|
|
else if (location.kind === 189) {
|
|
useResult = lastLocation === location.trueType;
|
|
}
|
|
if (useResult) {
|
|
break loop;
|
|
}
|
|
else {
|
|
result = undefined;
|
|
}
|
|
}
|
|
}
|
|
withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
|
|
switch (location.kind) {
|
|
case 305:
|
|
if (!ts.isExternalOrCommonJsModule(location))
|
|
break;
|
|
isInExternalModule = true;
|
|
case 261:
|
|
var moduleExports = ((_a = getSymbolOfNode(location)) === null || _a === void 0 ? void 0 : _a.exports) || emptySymbols;
|
|
if (location.kind === 305 || (ts.isModuleDeclaration(location) && location.flags & 16777216 && !ts.isGlobalScopeAugmentation(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, 275) || ts.getDeclarationOfKind(moduleExport, 274))) {
|
|
break;
|
|
}
|
|
}
|
|
if (name !== "default" && (result = lookup(moduleExports, name, meaning & 2623475))) {
|
|
if (ts.isSourceFile(location) && location.commonJsModuleIndicator && !((_b = result.declarations) === null || _b === void 0 ? void 0 : _b.some(ts.isJSDocTypeAlias))) {
|
|
result = undefined;
|
|
}
|
|
else {
|
|
break loop;
|
|
}
|
|
}
|
|
break;
|
|
case 260:
|
|
if (result = lookup(((_c = getSymbolOfNode(location)) === null || _c === void 0 ? void 0 : _c.exports) || emptySymbols, name, meaning & 8)) {
|
|
break loop;
|
|
}
|
|
break;
|
|
case 167:
|
|
if (!ts.isStatic(location)) {
|
|
var ctor = findConstructorDeclaration(location.parent);
|
|
if (ctor && ctor.locals) {
|
|
if (lookup(ctor.locals, name, meaning & 111551)) {
|
|
ts.Debug.assertNode(location, ts.isPropertyDeclaration);
|
|
propertyWithInvalidInitializer = location;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 257:
|
|
case 226:
|
|
case 258:
|
|
if (result = lookup(getSymbolOfNode(location).members || emptySymbols, name, meaning & 788968)) {
|
|
if (!isTypeParameterSymbolDeclaredInContainer(result, location)) {
|
|
result = undefined;
|
|
break;
|
|
}
|
|
if (lastLocation && ts.isStatic(lastLocation)) {
|
|
error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
|
|
return undefined;
|
|
}
|
|
break loop;
|
|
}
|
|
if (location.kind === 226 && meaning & 32) {
|
|
var className = location.name;
|
|
if (className && name === className.escapedText) {
|
|
result = location.symbol;
|
|
break loop;
|
|
}
|
|
}
|
|
break;
|
|
case 228:
|
|
if (lastLocation === location.expression && location.parent.token === 94) {
|
|
var container = location.parent.parent;
|
|
if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968))) {
|
|
if (nameNotFoundMessage) {
|
|
error(errorLocation, ts.Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters);
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
break;
|
|
case 162:
|
|
grandparent = location.parent.parent;
|
|
if (ts.isClassLike(grandparent) || grandparent.kind === 258) {
|
|
if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968)) {
|
|
error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
|
|
return undefined;
|
|
}
|
|
}
|
|
break;
|
|
case 214:
|
|
if (ts.getEmitScriptTarget(compilerOptions) >= 2) {
|
|
break;
|
|
}
|
|
case 169:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 256:
|
|
if (meaning & 3 && name === "arguments") {
|
|
result = argumentsSymbol;
|
|
break loop;
|
|
}
|
|
break;
|
|
case 213:
|
|
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 165:
|
|
if (location.parent && location.parent.kind === 164) {
|
|
location = location.parent;
|
|
}
|
|
if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 257)) {
|
|
location = location.parent;
|
|
}
|
|
break;
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
var root = ts.getJSDocRoot(location);
|
|
if (root) {
|
|
location = root.parent;
|
|
}
|
|
break;
|
|
case 164:
|
|
if (lastLocation && (lastLocation === location.initializer ||
|
|
lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
|
|
if (!associatedDeclarationForContainingInitializerOrBindingName) {
|
|
associatedDeclarationForContainingInitializerOrBindingName = location;
|
|
}
|
|
}
|
|
break;
|
|
case 203:
|
|
if (lastLocation && (lastLocation === location.initializer ||
|
|
lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
|
|
if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
|
|
associatedDeclarationForContainingInitializerOrBindingName = location;
|
|
}
|
|
}
|
|
break;
|
|
case 190:
|
|
if (meaning & 262144) {
|
|
var parameterName = location.typeParameter.name;
|
|
if (parameterName && name === parameterName.escapedText) {
|
|
result = location.typeParameter.symbol;
|
|
break loop;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
if (isSelfReferenceLocation(location)) {
|
|
lastSelfReferenceLocation = location;
|
|
}
|
|
lastLocation = location;
|
|
location = ts.isJSDocTemplateTag(location) ? ts.getEffectiveContainerForJSDocTemplateTag(location) || location.parent :
|
|
ts.isJSDocParameterTag(location) || ts.isJSDocReturnTag(location) ? ts.getHostSignatureFromJSDoc(location) || location.parent :
|
|
location.parent;
|
|
}
|
|
if (isUse && result && (!lastSelfReferenceLocation || result !== lastSelfReferenceLocation.symbol)) {
|
|
result.isReferenced |= meaning;
|
|
}
|
|
if (!result) {
|
|
if (lastLocation) {
|
|
ts.Debug.assert(lastLocation.kind === 305);
|
|
if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
|
|
return lastLocation.symbol;
|
|
}
|
|
}
|
|
if (!excludeGlobals) {
|
|
result = lookup(globals, name, meaning);
|
|
}
|
|
}
|
|
if (!result) {
|
|
if (originalLocation && ts.isInJSFile(originalLocation) && originalLocation.parent) {
|
|
if (ts.isRequireCall(originalLocation.parent, false)) {
|
|
return requireSymbol;
|
|
}
|
|
}
|
|
}
|
|
function checkAndReportErrorForInvalidInitializer() {
|
|
if (propertyWithInvalidInitializer && !(useDefineForClassFields && ts.getEmitScriptTarget(compilerOptions) >= 9)) {
|
|
error(errorLocation, errorLocation && propertyWithInvalidInitializer.type && ts.textRangeContainsPositionInclusive(propertyWithInvalidInitializer.type, errorLocation.pos)
|
|
? ts.Diagnostics.Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor
|
|
: ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyWithInvalidInitializer.name), diagnosticName(nameArg));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
if (!result) {
|
|
if (nameNotFoundMessage) {
|
|
addLazyDiagnostic(function () {
|
|
if (!errorLocation ||
|
|
!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) &&
|
|
!checkAndReportErrorForInvalidInitializer() &&
|
|
!checkAndReportErrorForExtendingInterface(errorLocation) &&
|
|
!checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) &&
|
|
!checkAndReportErrorForExportingPrimitiveType(errorLocation, name) &&
|
|
!checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) &&
|
|
!checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
|
|
!checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
|
|
var suggestion = void 0;
|
|
var suggestedLib = void 0;
|
|
if (nameArg) {
|
|
suggestedLib = getSuggestedLibForNonExistentName(nameArg);
|
|
if (suggestedLib) {
|
|
error(errorLocation, nameNotFoundMessage, diagnosticName(nameArg), suggestedLib);
|
|
}
|
|
}
|
|
if (!suggestedLib && getSpellingSuggestions && suggestionCount < maximumSuggestionCount) {
|
|
suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
|
|
var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
|
|
if (isGlobalScopeAugmentationDeclaration) {
|
|
suggestion = undefined;
|
|
}
|
|
if (suggestion) {
|
|
var suggestionName = symbolToString(suggestion);
|
|
var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, false);
|
|
var message = meaning === 1920 || nameArg && typeof nameArg !== "string" && ts.nodeIsSynthesized(nameArg) ? ts.Diagnostics.Cannot_find_namespace_0_Did_you_mean_1
|
|
: isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1
|
|
: ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
|
|
var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
|
|
addErrorOrSuggestion(!isUncheckedJS, diagnostic);
|
|
if (suggestion.valueDeclaration) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
|
|
}
|
|
}
|
|
}
|
|
if (!suggestion && !suggestedLib && nameArg) {
|
|
error(errorLocation, nameNotFoundMessage, diagnosticName(nameArg));
|
|
}
|
|
suggestionCount++;
|
|
}
|
|
});
|
|
}
|
|
return undefined;
|
|
}
|
|
else if (checkAndReportErrorForInvalidInitializer()) {
|
|
return undefined;
|
|
}
|
|
if (nameNotFoundMessage) {
|
|
addLazyDiagnostic(function () {
|
|
if (errorLocation &&
|
|
(meaning & 2 ||
|
|
((meaning & 32 || meaning & 384) && (meaning & 111551) === 111551))) {
|
|
var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result);
|
|
if (exportOrLocalSymbol.flags & 2 || exportOrLocalSymbol.flags & 32 || exportOrLocalSymbol.flags & 384) {
|
|
checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation);
|
|
}
|
|
}
|
|
if (result && isInExternalModule && (meaning & 111551) === 111551 && !(originalLocation.flags & 8388608)) {
|
|
var merged = getMergedSymbol(result);
|
|
if (ts.length(merged.declarations) && ts.every(merged.declarations, function (d) { return ts.isNamespaceExportDeclaration(d) || ts.isSourceFile(d) && !!d.symbol.globalExports; })) {
|
|
errorOrSuggestion(!compilerOptions.allowUmdGlobalAccess, errorLocation, ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, ts.unescapeLeadingUnderscores(name));
|
|
}
|
|
}
|
|
if (result && associatedDeclarationForContainingInitializerOrBindingName && !withinDeferredContext && (meaning & 111551) === 111551) {
|
|
var candidate = getMergedSymbol(getLateBoundSymbol(result));
|
|
var root = ts.getRootDeclaration(associatedDeclarationForContainingInitializerOrBindingName);
|
|
if (candidate === getSymbolOfNode(associatedDeclarationForContainingInitializerOrBindingName)) {
|
|
error(errorLocation, ts.Diagnostics.Parameter_0_cannot_reference_itself, ts.declarationNameToString(associatedDeclarationForContainingInitializerOrBindingName.name));
|
|
}
|
|
else if (candidate.valueDeclaration && candidate.valueDeclaration.pos > associatedDeclarationForContainingInitializerOrBindingName.pos && root.parent.locals && lookup(root.parent.locals, candidate.escapedName, meaning) === candidate) {
|
|
error(errorLocation, ts.Diagnostics.Parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(associatedDeclarationForContainingInitializerOrBindingName.name), ts.declarationNameToString(errorLocation));
|
|
}
|
|
}
|
|
if (result && errorLocation && meaning & 111551 && result.flags & 2097152 && !(result.flags & 111551) && !ts.isValidTypeOnlyAliasUseSite(errorLocation)) {
|
|
var typeOnlyDeclaration = getTypeOnlyAliasDeclaration(result);
|
|
if (typeOnlyDeclaration) {
|
|
var message = typeOnlyDeclaration.kind === 275
|
|
? ts.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type
|
|
: ts.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type;
|
|
var unescapedName = ts.unescapeLeadingUnderscores(name);
|
|
addTypeOnlyDeclarationRelatedInfo(error(errorLocation, message, unescapedName), typeOnlyDeclaration, unescapedName);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
function addTypeOnlyDeclarationRelatedInfo(diagnostic, typeOnlyDeclaration, unescapedName) {
|
|
if (!typeOnlyDeclaration)
|
|
return diagnostic;
|
|
return ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(typeOnlyDeclaration, typeOnlyDeclaration.kind === 275 ? ts.Diagnostics._0_was_exported_here : ts.Diagnostics._0_was_imported_here, unescapedName));
|
|
}
|
|
function getIsDeferredContext(location, lastLocation) {
|
|
if (location.kind !== 214 && location.kind !== 213) {
|
|
return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
|
|
(location.kind === 167 && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name));
|
|
}
|
|
if (lastLocation && lastLocation === location.name) {
|
|
return false;
|
|
}
|
|
if (location.asteriskToken || ts.hasSyntacticModifier(location, 256)) {
|
|
return true;
|
|
}
|
|
return !ts.getImmediatelyInvokedFunctionExpression(location);
|
|
}
|
|
function isSelfReferenceLocation(node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 257:
|
|
case 258:
|
|
case 260:
|
|
case 259:
|
|
case 261:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function diagnosticName(nameArg) {
|
|
return ts.isString(nameArg) ? ts.unescapeLeadingUnderscores(nameArg) : ts.declarationNameToString(nameArg);
|
|
}
|
|
function isTypeParameterSymbolDeclaredInContainer(symbol, container) {
|
|
if (symbol.declarations) {
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
if (decl.kind === 163) {
|
|
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.isStatic(location)) {
|
|
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 79:
|
|
case 206:
|
|
return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
|
|
case 228:
|
|
if (ts.isEntityNameExpression(node.expression)) {
|
|
return node.expression;
|
|
}
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) {
|
|
var namespaceMeaning = 1920 | (ts.isInJSFile(errorLocation) ? 111551 : 0);
|
|
if (meaning === namespaceMeaning) {
|
|
var symbol = resolveSymbol(resolveName(errorLocation, name, 788968 & ~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 checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning) {
|
|
if (meaning & (788968 & ~1920)) {
|
|
var symbol = resolveSymbol(resolveName(errorLocation, name, ~788968 & 111551, undefined, undefined, false));
|
|
if (symbol && !(symbol.flags & 1920)) {
|
|
error(errorLocation, ts.Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0, ts.unescapeLeadingUnderscores(name));
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isPrimitiveTypeName(name) {
|
|
return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
|
|
}
|
|
function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
|
|
if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 275) {
|
|
error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) {
|
|
if (meaning & (111551 & ~1024)) {
|
|
if (isPrimitiveTypeName(name)) {
|
|
if (isExtendedByInterface(errorLocation)) {
|
|
error(errorLocation, ts.Diagnostics.An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes, ts.unescapeLeadingUnderscores(name));
|
|
}
|
|
else {
|
|
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, 788968 & ~111551, undefined, undefined, false));
|
|
if (symbol && !(symbol.flags & 1024)) {
|
|
var rawName = ts.unescapeLeadingUnderscores(name);
|
|
if (isES2015OrLaterConstructorName(name)) {
|
|
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later, rawName);
|
|
}
|
|
else if (maybeMappedType(errorLocation, symbol)) {
|
|
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0, rawName, rawName === "K" ? "P" : "K");
|
|
}
|
|
else {
|
|
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, rawName);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isExtendedByInterface(node) {
|
|
var grandparent = node.parent.parent;
|
|
var parentOfGrandparent = grandparent.parent;
|
|
if (grandparent && parentOfGrandparent) {
|
|
var isExtending = ts.isHeritageClause(grandparent) && grandparent.token === 94;
|
|
var isInterface = ts.isInterfaceDeclaration(parentOfGrandparent);
|
|
return isExtending && isInterface;
|
|
}
|
|
return false;
|
|
}
|
|
function maybeMappedType(node, symbol) {
|
|
var container = ts.findAncestor(node.parent, function (n) {
|
|
return ts.isComputedPropertyName(n) || ts.isPropertySignature(n) ? false : ts.isTypeLiteralNode(n) || "quit";
|
|
});
|
|
if (container && container.members.length === 1) {
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
return !!(type.flags & 1048576) && allTypesAssignableToKind(type, 384, true);
|
|
}
|
|
return false;
|
|
}
|
|
function isES2015OrLaterConstructorName(n) {
|
|
switch (n) {
|
|
case "Promise":
|
|
case "Symbol":
|
|
case "Map":
|
|
case "WeakMap":
|
|
case "Set":
|
|
case "WeakSet":
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) {
|
|
if (meaning & (111551 & ~1024 & ~788968)) {
|
|
var symbol = resolveSymbol(resolveName(errorLocation, name, 1024 & ~111551, undefined, undefined, false));
|
|
if (symbol) {
|
|
error(errorLocation, ts.Diagnostics.Cannot_use_namespace_0_as_a_value, ts.unescapeLeadingUnderscores(name));
|
|
return true;
|
|
}
|
|
}
|
|
else if (meaning & (788968 & ~1024 & ~111551)) {
|
|
var symbol = resolveSymbol(resolveName(errorLocation, name, (512 | 1024) & ~788968, 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) {
|
|
var _a;
|
|
ts.Debug.assert(!!(result.flags & 2 || result.flags & 32 || result.flags & 384));
|
|
if (result.flags & (16 | 1 | 67108864) && result.flags & 32) {
|
|
return;
|
|
}
|
|
var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 260); });
|
|
if (declaration === undefined)
|
|
return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
|
|
if (!(declaration.flags & 16777216) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
|
|
var diagnosticMessage = void 0;
|
|
var declarationName = ts.declarationNameToString(ts.getNameOfDeclaration(declaration));
|
|
if (result.flags & 2) {
|
|
diagnosticMessage = error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName);
|
|
}
|
|
else if (result.flags & 32) {
|
|
diagnosticMessage = error(errorLocation, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
|
|
}
|
|
else if (result.flags & 256) {
|
|
diagnosticMessage = error(errorLocation, ts.Diagnostics.Enum_0_used_before_its_declaration, declarationName);
|
|
}
|
|
else {
|
|
ts.Debug.assert(!!(result.flags & 128));
|
|
if (ts.shouldPreserveConstEnums(compilerOptions)) {
|
|
diagnosticMessage = error(errorLocation, ts.Diagnostics.Enum_0_used_before_its_declaration, declarationName);
|
|
}
|
|
}
|
|
if (diagnosticMessage) {
|
|
ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_is_declared_here, declarationName));
|
|
}
|
|
}
|
|
}
|
|
function isSameScopeDescendentOf(initial, parent, stopAt) {
|
|
return !!parent && !!ts.findAncestor(initial, function (n) { return n === parent
|
|
|| (n === stopAt || ts.isFunctionLike(n) && !ts.getImmediatelyInvokedFunctionExpression(n) ? "quit" : false); });
|
|
}
|
|
function getAnyImportSyntax(node) {
|
|
switch (node.kind) {
|
|
case 265:
|
|
return node;
|
|
case 267:
|
|
return node.parent;
|
|
case 268:
|
|
return node.parent.parent;
|
|
case 270:
|
|
return node.parent.parent.parent;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function getDeclarationOfAliasSymbol(symbol) {
|
|
return symbol.declarations && ts.findLast(symbol.declarations, isAliasSymbolDeclaration);
|
|
}
|
|
function isAliasSymbolDeclaration(node) {
|
|
return node.kind === 265
|
|
|| node.kind === 264
|
|
|| node.kind === 267 && !!node.name
|
|
|| node.kind === 268
|
|
|| node.kind === 274
|
|
|| node.kind === 270
|
|
|| node.kind === 275
|
|
|| node.kind === 271 && ts.exportAssignmentIsAlias(node)
|
|
|| ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 && ts.exportAssignmentIsAlias(node)
|
|
|| ts.isAccessExpression(node)
|
|
&& ts.isBinaryExpression(node.parent)
|
|
&& node.parent.left === node
|
|
&& node.parent.operatorToken.kind === 63
|
|
&& isAliasableOrJsExpression(node.parent.right)
|
|
|| node.kind === 297
|
|
|| node.kind === 296 && isAliasableOrJsExpression(node.initializer)
|
|
|| node.kind === 254 && ts.isVariableDeclarationInitializedToBareOrAccessedRequire(node)
|
|
|| node.kind === 203 && ts.isVariableDeclarationInitializedToBareOrAccessedRequire(node.parent.parent);
|
|
}
|
|
function isAliasableOrJsExpression(e) {
|
|
return ts.isAliasableExpression(e) || ts.isFunctionExpression(e) && isJSConstructor(e);
|
|
}
|
|
function getTargetOfImportEqualsDeclaration(node, dontResolveAlias) {
|
|
var commonJSPropertyAccess = getCommonJSPropertyAccess(node);
|
|
if (commonJSPropertyAccess) {
|
|
var name = ts.getLeftmostAccessExpression(commonJSPropertyAccess.expression).arguments[0];
|
|
return ts.isIdentifier(commonJSPropertyAccess.name)
|
|
? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
|
|
: undefined;
|
|
}
|
|
if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 277) {
|
|
var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
|
|
var resolved_4 = resolveExternalModuleSymbol(immediate);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, false);
|
|
return resolved_4;
|
|
}
|
|
var resolved = getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, dontResolveAlias);
|
|
checkAndReportErrorForResolvingImportAliasToTypeOnlySymbol(node, resolved);
|
|
return resolved;
|
|
}
|
|
function checkAndReportErrorForResolvingImportAliasToTypeOnlySymbol(node, resolved) {
|
|
if (markSymbolOfAliasDeclarationIfTypeOnly(node, undefined, resolved, false) && !node.isTypeOnly) {
|
|
var typeOnlyDeclaration = getTypeOnlyAliasDeclaration(getSymbolOfNode(node));
|
|
var isExport = typeOnlyDeclaration.kind === 275;
|
|
var message = isExport
|
|
? ts.Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type
|
|
: ts.Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type;
|
|
var relatedMessage = isExport
|
|
? ts.Diagnostics._0_was_exported_here
|
|
: ts.Diagnostics._0_was_imported_here;
|
|
var name = ts.unescapeLeadingUnderscores(typeOnlyDeclaration.name.escapedText);
|
|
ts.addRelatedInfo(error(node.moduleReference, message), ts.createDiagnosticForNode(typeOnlyDeclaration, relatedMessage, name));
|
|
}
|
|
}
|
|
function resolveExportByName(moduleSymbol, name, sourceNode, dontResolveAlias) {
|
|
var exportValue = moduleSymbol.exports.get("export=");
|
|
var exportSymbol = exportValue ? getPropertyOfType(getTypeOfSymbol(exportValue), name) : moduleSymbol.exports.get(name);
|
|
var resolved = resolveSymbol(exportSymbol, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(sourceNode, exportSymbol, resolved, false);
|
|
return resolved;
|
|
}
|
|
function isSyntacticDefault(node) {
|
|
return ((ts.isExportAssignment(node) && !node.isExportEquals) || ts.hasSyntacticModifier(node, 512) || ts.isExportSpecifier(node));
|
|
}
|
|
function getUsageModeForExpression(usage) {
|
|
return ts.isStringLiteralLike(usage) ? ts.getModeForUsageLocation(ts.getSourceFileOfNode(usage), usage) : undefined;
|
|
}
|
|
function isESMFormatImportImportingCommonjsFormatFile(usageMode, targetMode) {
|
|
return usageMode === ts.ModuleKind.ESNext && targetMode === ts.ModuleKind.CommonJS;
|
|
}
|
|
function isOnlyImportedAsDefault(usage) {
|
|
var usageMode = getUsageModeForExpression(usage);
|
|
return usageMode === ts.ModuleKind.ESNext && ts.endsWith(usage.text, ".json");
|
|
}
|
|
function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, usage) {
|
|
var usageMode = file && getUsageModeForExpression(usage);
|
|
if (file && usageMode !== undefined) {
|
|
var result = isESMFormatImportImportingCommonjsFormatFile(usageMode, file.impliedNodeFormat);
|
|
if (usageMode === ts.ModuleKind.ESNext || result) {
|
|
return result;
|
|
}
|
|
}
|
|
if (!allowSyntheticDefaultImports) {
|
|
return false;
|
|
}
|
|
if (!file || file.isDeclarationFile) {
|
|
var defaultExportSymbol = resolveExportByName(moduleSymbol, "default", undefined, true);
|
|
if (defaultExportSymbol && ts.some(defaultExportSymbol.declarations, isSyntacticDefault)) {
|
|
return false;
|
|
}
|
|
if (resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), undefined, dontResolveAlias)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
if (!ts.isSourceFileJS(file)) {
|
|
return hasExportAssignmentSymbol(moduleSymbol);
|
|
}
|
|
return typeof file.externalModuleIndicator !== "object" && !resolveExportByName(moduleSymbol, ts.escapeLeadingUnderscores("__esModule"), undefined, dontResolveAlias);
|
|
}
|
|
function getTargetOfImportClause(node, dontResolveAlias) {
|
|
var _a;
|
|
var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
|
|
if (moduleSymbol) {
|
|
var exportDefaultSymbol = void 0;
|
|
if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) {
|
|
exportDefaultSymbol = moduleSymbol;
|
|
}
|
|
else {
|
|
exportDefaultSymbol = resolveExportByName(moduleSymbol, "default", node, dontResolveAlias);
|
|
}
|
|
var file = (_a = moduleSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isSourceFile);
|
|
var hasDefaultOnly = isOnlyImportedAsDefault(node.parent.moduleSpecifier);
|
|
var hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, node.parent.moduleSpecifier);
|
|
if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) {
|
|
if (hasExportAssignmentSymbol(moduleSymbol)) {
|
|
var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015 ? "allowSyntheticDefaultImports" : "esModuleInterop";
|
|
var exportEqualsSymbol = moduleSymbol.exports.get("export=");
|
|
var exportAssignment = exportEqualsSymbol.valueDeclaration;
|
|
var err = error(node.name, ts.Diagnostics.Module_0_can_only_be_default_imported_using_the_1_flag, symbolToString(moduleSymbol), compilerOptionName);
|
|
if (exportAssignment) {
|
|
ts.addRelatedInfo(err, ts.createDiagnosticForNode(exportAssignment, ts.Diagnostics.This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag, compilerOptionName));
|
|
}
|
|
}
|
|
else {
|
|
reportNonDefaultExport(moduleSymbol, node);
|
|
}
|
|
}
|
|
else if (hasSyntheticDefault || hasDefaultOnly) {
|
|
var resolved = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, moduleSymbol, resolved, false);
|
|
return resolved;
|
|
}
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, exportDefaultSymbol, undefined, false);
|
|
return exportDefaultSymbol;
|
|
}
|
|
}
|
|
function reportNonDefaultExport(moduleSymbol, node) {
|
|
var _a, _b, _c;
|
|
if ((_a = moduleSymbol.exports) === null || _a === void 0 ? void 0 : _a.has(node.symbol.escapedName)) {
|
|
error(node.name, ts.Diagnostics.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead, symbolToString(moduleSymbol), symbolToString(node.symbol));
|
|
}
|
|
else {
|
|
var diagnostic = error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
|
|
var exportStar = (_b = moduleSymbol.exports) === null || _b === void 0 ? void 0 : _b.get("__export");
|
|
if (exportStar) {
|
|
var defaultExport = (_c = exportStar.declarations) === null || _c === void 0 ? void 0 : _c.find(function (decl) {
|
|
var _a, _b;
|
|
return !!(ts.isExportDeclaration(decl) && decl.moduleSpecifier &&
|
|
((_b = (_a = resolveExternalModuleName(decl, decl.moduleSpecifier)) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.has("default")));
|
|
});
|
|
if (defaultExport) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(defaultExport, ts.Diagnostics.export_Asterisk_does_not_re_export_a_default));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getTargetOfNamespaceImport(node, dontResolveAlias) {
|
|
var moduleSpecifier = node.parent.parent.moduleSpecifier;
|
|
var immediate = resolveExternalModuleName(node, moduleSpecifier);
|
|
var resolved = resolveESModuleSymbol(immediate, moduleSpecifier, dontResolveAlias, false);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved, false);
|
|
return resolved;
|
|
}
|
|
function getTargetOfNamespaceExport(node, dontResolveAlias) {
|
|
var moduleSpecifier = node.parent.moduleSpecifier;
|
|
var immediate = moduleSpecifier && resolveExternalModuleName(node, moduleSpecifier);
|
|
var resolved = moduleSpecifier && resolveESModuleSymbol(immediate, moduleSpecifier, dontResolveAlias, false);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved, false);
|
|
return resolved;
|
|
}
|
|
function combineValueAndTypeSymbols(valueSymbol, typeSymbol) {
|
|
if (valueSymbol === unknownSymbol && typeSymbol === unknownSymbol) {
|
|
return unknownSymbol;
|
|
}
|
|
if (valueSymbol.flags & (788968 | 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 = new ts.Map(typeSymbol.members);
|
|
if (valueSymbol.exports)
|
|
result.exports = new ts.Map(valueSymbol.exports);
|
|
return result;
|
|
}
|
|
function getExportOfModule(symbol, name, specifier, dontResolveAlias) {
|
|
if (symbol.flags & 1536) {
|
|
var exportSymbol = getExportsOfSymbol(symbol).get(name.escapedText);
|
|
var resolved = resolveSymbol(exportSymbol, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(specifier, exportSymbol, resolved, false);
|
|
return resolved;
|
|
}
|
|
}
|
|
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) {
|
|
var _a, _b;
|
|
if (dontResolveAlias === void 0) { dontResolveAlias = false; }
|
|
var moduleSpecifier = ts.getExternalModuleRequireArgument(node) || node.moduleSpecifier;
|
|
var moduleSymbol = resolveExternalModuleName(node, moduleSpecifier);
|
|
var name = !ts.isPropertyAccessExpression(specifier) && specifier.propertyName || specifier.name;
|
|
if (!ts.isIdentifier(name)) {
|
|
return undefined;
|
|
}
|
|
var suppressInteropError = name.escapedText === "default" && !!(compilerOptions.allowSyntheticDefaultImports || ts.getESModuleInterop(compilerOptions));
|
|
var targetSymbol = resolveESModuleSymbol(moduleSymbol, moduleSpecifier, false, suppressInteropError);
|
|
if (targetSymbol) {
|
|
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, true);
|
|
}
|
|
else {
|
|
symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText);
|
|
}
|
|
symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias);
|
|
var symbolFromModule = getExportOfModule(targetSymbol, name, specifier, dontResolveAlias);
|
|
if (symbolFromModule === undefined && name.escapedText === "default") {
|
|
var file = (_a = moduleSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isSourceFile);
|
|
if (isOnlyImportedAsDefault(moduleSpecifier) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) {
|
|
symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
|
|
}
|
|
}
|
|
var symbol = symbolFromModule && symbolFromVariable && symbolFromModule !== symbolFromVariable ?
|
|
combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
|
|
symbolFromModule || symbolFromVariable;
|
|
if (!symbol) {
|
|
var moduleName = getFullyQualifiedName(moduleSymbol, node);
|
|
var declarationName = ts.declarationNameToString(name);
|
|
var suggestion = getSuggestedSymbolForNonexistentModule(name, targetSymbol);
|
|
if (suggestion !== undefined) {
|
|
var suggestionName = symbolToString(suggestion);
|
|
var diagnostic = error(name, ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, moduleName, declarationName, suggestionName);
|
|
if (suggestion.valueDeclaration) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
|
|
}
|
|
}
|
|
else {
|
|
if ((_b = moduleSymbol.exports) === null || _b === void 0 ? void 0 : _b.has("default")) {
|
|
error(name, ts.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead, moduleName, declarationName);
|
|
}
|
|
else {
|
|
reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName);
|
|
}
|
|
}
|
|
}
|
|
return symbol;
|
|
}
|
|
}
|
|
}
|
|
function reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName) {
|
|
var _a, _b;
|
|
var localSymbol = (_b = (_a = moduleSymbol.valueDeclaration) === null || _a === void 0 ? void 0 : _a.locals) === null || _b === void 0 ? void 0 : _b.get(name.escapedText);
|
|
var exports = moduleSymbol.exports;
|
|
if (localSymbol) {
|
|
var exportedEqualsSymbol = exports === null || exports === void 0 ? void 0 : exports.get("export=");
|
|
if (exportedEqualsSymbol) {
|
|
getSymbolIfSameReference(exportedEqualsSymbol, localSymbol) ? reportInvalidImportEqualsExportMember(node, name, declarationName, moduleName) :
|
|
error(name, ts.Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName);
|
|
}
|
|
else {
|
|
var exportedSymbol = exports ? ts.find(symbolsToArray(exports), function (symbol) { return !!getSymbolIfSameReference(symbol, localSymbol); }) : undefined;
|
|
var diagnostic = exportedSymbol ? error(name, ts.Diagnostics.Module_0_declares_1_locally_but_it_is_exported_as_2, moduleName, declarationName, symbolToString(exportedSymbol)) :
|
|
error(name, ts.Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported, moduleName, declarationName);
|
|
if (localSymbol.declarations) {
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
|
|
return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
|
|
}), false));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
error(name, ts.Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName);
|
|
}
|
|
}
|
|
function reportInvalidImportEqualsExportMember(node, name, declarationName, moduleName) {
|
|
if (moduleKind >= ts.ModuleKind.ES2015) {
|
|
var message = ts.getESModuleInterop(compilerOptions) ? ts.Diagnostics._0_can_only_be_imported_by_using_a_default_import :
|
|
ts.Diagnostics._0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;
|
|
error(name, message, declarationName);
|
|
}
|
|
else {
|
|
if (ts.isInJSFile(node)) {
|
|
var message = ts.getESModuleInterop(compilerOptions) ? ts.Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import :
|
|
ts.Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;
|
|
error(name, message, declarationName);
|
|
}
|
|
else {
|
|
var message = ts.getESModuleInterop(compilerOptions) ? ts.Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import :
|
|
ts.Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;
|
|
error(name, message, declarationName, declarationName, moduleName);
|
|
}
|
|
}
|
|
}
|
|
function getTargetOfImportSpecifier(node, dontResolveAlias) {
|
|
var root = ts.isBindingElement(node) ? ts.getRootDeclaration(node) : node.parent.parent.parent;
|
|
var commonJSPropertyAccess = getCommonJSPropertyAccess(root);
|
|
var resolved = getExternalModuleMember(root, commonJSPropertyAccess || node, dontResolveAlias);
|
|
var name = node.propertyName || node.name;
|
|
if (commonJSPropertyAccess && resolved && ts.isIdentifier(name)) {
|
|
return resolveSymbol(getPropertyOfType(getTypeOfSymbol(resolved), name.escapedText), dontResolveAlias);
|
|
}
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, undefined, resolved, false);
|
|
return resolved;
|
|
}
|
|
function getCommonJSPropertyAccess(node) {
|
|
if (ts.isVariableDeclaration(node) && node.initializer && ts.isPropertyAccessExpression(node.initializer)) {
|
|
return node.initializer;
|
|
}
|
|
}
|
|
function getTargetOfNamespaceExportDeclaration(node, dontResolveAlias) {
|
|
var resolved = resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, undefined, resolved, false);
|
|
return resolved;
|
|
}
|
|
function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) {
|
|
var resolved = node.parent.parent.moduleSpecifier ?
|
|
getExternalModuleMember(node.parent.parent, node, dontResolveAlias) :
|
|
resolveEntityName(node.propertyName || node.name, meaning, false, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, undefined, resolved, false);
|
|
return resolved;
|
|
}
|
|
function getTargetOfExportAssignment(node, dontResolveAlias) {
|
|
var expression = ts.isExportAssignment(node) ? node.expression : node.right;
|
|
var resolved = getTargetOfAliasLikeExpression(expression, dontResolveAlias);
|
|
markSymbolOfAliasDeclarationIfTypeOnly(node, undefined, resolved, false);
|
|
return resolved;
|
|
}
|
|
function getTargetOfAliasLikeExpression(expression, dontResolveAlias) {
|
|
if (ts.isClassExpression(expression)) {
|
|
return checkExpressionCached(expression).symbol;
|
|
}
|
|
if (!ts.isEntityName(expression) && !ts.isEntityNameExpression(expression)) {
|
|
return undefined;
|
|
}
|
|
var aliasLike = resolveEntityName(expression, 111551 | 788968 | 1920, true, dontResolveAlias);
|
|
if (aliasLike) {
|
|
return aliasLike;
|
|
}
|
|
checkExpressionCached(expression);
|
|
return getNodeLinks(expression).resolvedSymbol;
|
|
}
|
|
function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
|
|
if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63)) {
|
|
return undefined;
|
|
}
|
|
return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
|
|
}
|
|
function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
|
|
if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
|
|
switch (node.kind) {
|
|
case 265:
|
|
case 254:
|
|
return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
|
|
case 267:
|
|
return getTargetOfImportClause(node, dontRecursivelyResolve);
|
|
case 268:
|
|
return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
|
|
case 274:
|
|
return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
|
|
case 270:
|
|
case 203:
|
|
return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
|
|
case 275:
|
|
return getTargetOfExportSpecifier(node, 111551 | 788968 | 1920, dontRecursivelyResolve);
|
|
case 271:
|
|
case 221:
|
|
return getTargetOfExportAssignment(node, dontRecursivelyResolve);
|
|
case 264:
|
|
return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
|
|
case 297:
|
|
return resolveEntityName(node.name, 111551 | 788968 | 1920, true, dontRecursivelyResolve);
|
|
case 296:
|
|
return getTargetOfAliasLikeExpression(node.initializer, dontRecursivelyResolve);
|
|
case 207:
|
|
case 206:
|
|
return getTargetOfAccessExpression(node, dontRecursivelyResolve);
|
|
default:
|
|
return ts.Debug.fail();
|
|
}
|
|
}
|
|
function isNonLocalAlias(symbol, excludes) {
|
|
if (excludes === void 0) { excludes = 111551 | 788968 | 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.aliasTarget) {
|
|
links.aliasTarget = resolvingSymbol;
|
|
var node = getDeclarationOfAliasSymbol(symbol);
|
|
if (!node)
|
|
return ts.Debug.fail();
|
|
var target = getTargetOfAliasDeclaration(node);
|
|
if (links.aliasTarget === resolvingSymbol) {
|
|
links.aliasTarget = target || unknownSymbol;
|
|
}
|
|
else {
|
|
error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
|
|
}
|
|
}
|
|
else if (links.aliasTarget === resolvingSymbol) {
|
|
links.aliasTarget = unknownSymbol;
|
|
}
|
|
return links.aliasTarget;
|
|
}
|
|
function tryResolveAlias(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (links.aliasTarget !== resolvingSymbol) {
|
|
return resolveAlias(symbol);
|
|
}
|
|
return undefined;
|
|
}
|
|
function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration, immediateTarget, finalTarget, overwriteEmpty) {
|
|
if (!aliasDeclaration || ts.isPropertyAccessExpression(aliasDeclaration))
|
|
return false;
|
|
var sourceSymbol = getSymbolOfNode(aliasDeclaration);
|
|
if (ts.isTypeOnlyImportOrExportDeclaration(aliasDeclaration)) {
|
|
var links_1 = getSymbolLinks(sourceSymbol);
|
|
links_1.typeOnlyDeclaration = aliasDeclaration;
|
|
return true;
|
|
}
|
|
var links = getSymbolLinks(sourceSymbol);
|
|
return markSymbolOfAliasDeclarationIfTypeOnlyWorker(links, immediateTarget, overwriteEmpty)
|
|
|| markSymbolOfAliasDeclarationIfTypeOnlyWorker(links, finalTarget, overwriteEmpty);
|
|
}
|
|
function markSymbolOfAliasDeclarationIfTypeOnlyWorker(aliasDeclarationLinks, target, overwriteEmpty) {
|
|
var _a, _b, _c;
|
|
if (target && (aliasDeclarationLinks.typeOnlyDeclaration === undefined || overwriteEmpty && aliasDeclarationLinks.typeOnlyDeclaration === false)) {
|
|
var exportSymbol = (_b = (_a = target.exports) === null || _a === void 0 ? void 0 : _a.get("export=")) !== null && _b !== void 0 ? _b : target;
|
|
var typeOnly = exportSymbol.declarations && ts.find(exportSymbol.declarations, ts.isTypeOnlyImportOrExportDeclaration);
|
|
aliasDeclarationLinks.typeOnlyDeclaration = (_c = typeOnly !== null && typeOnly !== void 0 ? typeOnly : getSymbolLinks(exportSymbol).typeOnlyDeclaration) !== null && _c !== void 0 ? _c : false;
|
|
}
|
|
return !!aliasDeclarationLinks.typeOnlyDeclaration;
|
|
}
|
|
function getTypeOnlyAliasDeclaration(symbol) {
|
|
if (!(symbol.flags & 2097152)) {
|
|
return undefined;
|
|
}
|
|
var links = getSymbolLinks(symbol);
|
|
return links.typeOnlyDeclaration || undefined;
|
|
}
|
|
function markExportAsReferenced(node) {
|
|
var symbol = getSymbolOfNode(node);
|
|
var target = resolveAlias(symbol);
|
|
if (target) {
|
|
var markAlias = target === unknownSymbol ||
|
|
((target.flags & 111551) && !isConstEnumOrConstEnumOnlyModule(target) && !getTypeOnlyAliasDeclaration(symbol));
|
|
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 (ts.isInternalModuleImportEqualsDeclaration(node)) {
|
|
var target = resolveSymbol(symbol);
|
|
if (target === unknownSymbol || target.flags & 111551) {
|
|
checkExpressionCached(node.moduleReference);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function markConstEnumAliasAsReferenced(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.constEnumReferenced) {
|
|
links.constEnumReferenced = true;
|
|
}
|
|
}
|
|
function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) {
|
|
if (entityName.kind === 79 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
|
|
entityName = entityName.parent;
|
|
}
|
|
if (entityName.kind === 79 || entityName.parent.kind === 161) {
|
|
return resolveEntityName(entityName, 1920, false, dontResolveAlias);
|
|
}
|
|
else {
|
|
ts.Debug.assert(entityName.parent.kind === 265);
|
|
return resolveEntityName(entityName, 111551 | 788968 | 1920, false, dontResolveAlias);
|
|
}
|
|
}
|
|
function getFullyQualifiedName(symbol, containingLocation) {
|
|
return symbol.parent ? getFullyQualifiedName(symbol.parent, containingLocation) + "." + symbolToString(symbol) : symbolToString(symbol, containingLocation, undefined, 16 | 4);
|
|
}
|
|
function getContainingQualifiedNameNode(node) {
|
|
while (ts.isQualifiedName(node.parent)) {
|
|
node = node.parent;
|
|
}
|
|
return node;
|
|
}
|
|
function tryGetQualifiedNameAsValue(node) {
|
|
var left = ts.getFirstIdentifier(node);
|
|
var symbol = resolveName(left, left.escapedText, 111551, undefined, left, true);
|
|
if (!symbol) {
|
|
return undefined;
|
|
}
|
|
while (ts.isQualifiedName(left.parent)) {
|
|
var type = getTypeOfSymbol(symbol);
|
|
symbol = getPropertyOfType(type, left.parent.right.escapedText);
|
|
if (!symbol) {
|
|
return undefined;
|
|
}
|
|
left = left.parent;
|
|
}
|
|
return symbol;
|
|
}
|
|
function resolveEntityName(name, meaning, ignoreErrors, dontResolveAlias, location) {
|
|
if (ts.nodeIsMissing(name)) {
|
|
return undefined;
|
|
}
|
|
var namespaceMeaning = 1920 | (ts.isInJSFile(name) ? meaning & 111551 : 0);
|
|
var symbol;
|
|
if (name.kind === 79) {
|
|
var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
|
|
var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
|
|
symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, true, false));
|
|
if (!symbol) {
|
|
return getMergedSymbol(symbolFromJSPrototype);
|
|
}
|
|
}
|
|
else if (name.kind === 161 || name.kind === 206) {
|
|
var left = name.kind === 161 ? name.left : name.expression;
|
|
var right = name.kind === 161 ? 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 (namespace.valueDeclaration &&
|
|
ts.isInJSFile(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 = getMergedSymbol(getSymbol(getExportsOfSymbol(namespace), right.escapedText, meaning));
|
|
if (!symbol) {
|
|
if (!ignoreErrors) {
|
|
var namespaceName = getFullyQualifiedName(namespace);
|
|
var declarationName = ts.declarationNameToString(right);
|
|
var suggestionForNonexistentModule = getSuggestedSymbolForNonexistentModule(right, namespace);
|
|
if (suggestionForNonexistentModule) {
|
|
error(right, ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, namespaceName, declarationName, symbolToString(suggestionForNonexistentModule));
|
|
return undefined;
|
|
}
|
|
var containingQualifiedName = ts.isQualifiedName(name) && getContainingQualifiedNameNode(name);
|
|
var canSuggestTypeof = globalObjectType
|
|
&& (meaning & 788968)
|
|
&& containingQualifiedName
|
|
&& !ts.isTypeOfExpression(containingQualifiedName.parent)
|
|
&& tryGetQualifiedNameAsValue(containingQualifiedName);
|
|
if (canSuggestTypeof) {
|
|
error(containingQualifiedName, ts.Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0, ts.entityNameToString(containingQualifiedName));
|
|
return undefined;
|
|
}
|
|
if (meaning & 1920 && ts.isQualifiedName(name.parent)) {
|
|
var exportedTypeSymbol = getMergedSymbol(getSymbol(getExportsOfSymbol(namespace), right.escapedText, 788968));
|
|
if (exportedTypeSymbol) {
|
|
error(name.parent.right, 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, symbolToString(exportedTypeSymbol), ts.unescapeLeadingUnderscores(name.parent.right.escapedText));
|
|
return undefined;
|
|
}
|
|
}
|
|
error(right, ts.Diagnostics.Namespace_0_has_no_exported_member_1, namespaceName, declarationName);
|
|
}
|
|
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.");
|
|
if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 || name.parent.kind === 271)) {
|
|
markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, undefined, true);
|
|
}
|
|
return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
|
|
}
|
|
function resolveEntityNameFromAssignmentDeclaration(name, meaning) {
|
|
if (isJSDocTypeReference(name.parent)) {
|
|
var secondaryLocation = getAssignmentDeclarationLocation(name.parent);
|
|
if (secondaryLocation) {
|
|
return resolveName(secondaryLocation, name.escapedText, meaning, undefined, name, true);
|
|
}
|
|
}
|
|
}
|
|
function getAssignmentDeclarationLocation(node) {
|
|
var typeAlias = ts.findAncestor(node, function (node) { return !(ts.isJSDocNode(node) || node.flags & 8388608) ? "quit" : ts.isJSDocTypeAlias(node); });
|
|
if (typeAlias) {
|
|
return;
|
|
}
|
|
var host = ts.getJSDocHost(node);
|
|
if (host && ts.isExpressionStatement(host) && ts.isPrototypePropertyAssignment(host.expression)) {
|
|
var symbol = getSymbolOfNode(host.expression.left);
|
|
if (symbol) {
|
|
return getDeclarationOfJSPrototypeContainer(symbol);
|
|
}
|
|
}
|
|
if (host && ts.isFunctionExpression(host) && ts.isPrototypePropertyAssignment(host.parent) && ts.isExpressionStatement(host.parent.parent)) {
|
|
var symbol = getSymbolOfNode(host.parent.left);
|
|
if (symbol) {
|
|
return getDeclarationOfJSPrototypeContainer(symbol);
|
|
}
|
|
}
|
|
if (host && (ts.isObjectLiteralMethod(host) || ts.isPropertyAssignment(host)) &&
|
|
ts.isBinaryExpression(host.parent.parent) &&
|
|
ts.getAssignmentDeclarationKind(host.parent.parent) === 6) {
|
|
var symbol = getSymbolOfNode(host.parent.parent.left);
|
|
if (symbol) {
|
|
return getDeclarationOfJSPrototypeContainer(symbol);
|
|
}
|
|
}
|
|
var sig = ts.getEffectiveJSDocHost(node);
|
|
if (sig && ts.isFunctionLike(sig)) {
|
|
var symbol = getSymbolOfNode(sig);
|
|
return symbol && symbol.valueDeclaration;
|
|
}
|
|
}
|
|
function getDeclarationOfJSPrototypeContainer(symbol) {
|
|
var decl = symbol.parent.valueDeclaration;
|
|
if (!decl) {
|
|
return undefined;
|
|
}
|
|
var initializer = ts.isAssignmentDeclaration(decl) ? ts.getAssignedExpandoInitializer(decl) :
|
|
ts.hasOnlyExpressionInitializer(decl) ? ts.getDeclaredExpandoInitializer(decl) :
|
|
undefined;
|
|
return initializer || decl;
|
|
}
|
|
function getExpandoSymbol(symbol) {
|
|
var decl = symbol.valueDeclaration;
|
|
if (!decl || !ts.isInJSFile(decl) || symbol.flags & 524288 || ts.getExpandoInitializer(decl, false)) {
|
|
return undefined;
|
|
}
|
|
var init = ts.isVariableDeclaration(decl) ? ts.getDeclaredExpandoInitializer(decl) : ts.getAssignedExpandoInitializer(decl);
|
|
if (init) {
|
|
var initSymbol = getSymbolOfNode(init);
|
|
if (initSymbol) {
|
|
return mergeJSSymbols(initSymbol, symbol);
|
|
}
|
|
}
|
|
}
|
|
function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors) {
|
|
var isClassic = ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.Classic;
|
|
var errorMessage = isClassic ?
|
|
ts.Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option
|
|
: ts.Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;
|
|
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : errorMessage);
|
|
}
|
|
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) {
|
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
if (isForAugmentation === void 0) { isForAugmentation = false; }
|
|
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 contextSpecifier = ts.isStringLiteralLike(location)
|
|
? location
|
|
: ((_a = ts.findAncestor(location, ts.isImportCall)) === null || _a === void 0 ? void 0 : _a.arguments[0]) ||
|
|
((_b = ts.findAncestor(location, ts.isImportDeclaration)) === null || _b === void 0 ? void 0 : _b.moduleSpecifier) ||
|
|
((_c = ts.findAncestor(location, ts.isExternalModuleImportEqualsDeclaration)) === null || _c === void 0 ? void 0 : _c.moduleReference.expression) ||
|
|
((_d = ts.findAncestor(location, ts.isExportDeclaration)) === null || _d === void 0 ? void 0 : _d.moduleSpecifier) ||
|
|
((_e = (ts.isModuleDeclaration(location) ? location : location.parent && ts.isModuleDeclaration(location.parent) && location.parent.name === location ? location.parent : undefined)) === null || _e === void 0 ? void 0 : _e.name) ||
|
|
((_f = (ts.isLiteralImportTypeNode(location) ? location : undefined)) === null || _f === void 0 ? void 0 : _f.argument.literal);
|
|
var mode = contextSpecifier && ts.isStringLiteralLike(contextSpecifier) ? ts.getModeForUsageLocation(currentSourceFile, contextSpecifier) : currentSourceFile.impliedNodeFormat;
|
|
var resolvedModule = ts.getResolvedModule(currentSourceFile, moduleReference, mode);
|
|
var resolutionDiagnostic = resolvedModule && ts.getResolutionDiagnostic(compilerOptions, resolvedModule);
|
|
var sourceFile = resolvedModule
|
|
&& (!resolutionDiagnostic || resolutionDiagnostic === ts.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set)
|
|
&& host.getSourceFile(resolvedModule.resolvedFileName);
|
|
if (sourceFile) {
|
|
if (resolutionDiagnostic) {
|
|
error(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName);
|
|
}
|
|
if (sourceFile.symbol) {
|
|
if (resolvedModule.isExternalLibraryImport && !ts.resolutionExtensionIsTSOrJson(resolvedModule.extension)) {
|
|
errorOnImplicitAnyModule(false, errorNode, resolvedModule, moduleReference);
|
|
}
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.Node16 || ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeNext) {
|
|
var isSyncImport = (currentSourceFile.impliedNodeFormat === ts.ModuleKind.CommonJS && !ts.findAncestor(location, ts.isImportCall)) || !!ts.findAncestor(location, ts.isImportEqualsDeclaration);
|
|
var overrideClauseHost = ts.findAncestor(location, function (l) { return ts.isImportTypeNode(l) || ts.isExportDeclaration(l) || ts.isImportDeclaration(l); });
|
|
var overrideClause = overrideClauseHost && ts.isImportTypeNode(overrideClauseHost) ? (_g = overrideClauseHost.assertions) === null || _g === void 0 ? void 0 : _g.assertClause : overrideClauseHost === null || overrideClauseHost === void 0 ? void 0 : overrideClauseHost.assertClause;
|
|
if (isSyncImport && sourceFile.impliedNodeFormat === ts.ModuleKind.ESNext && !ts.getResolutionModeOverrideForClause(overrideClause)) {
|
|
if (ts.findAncestor(location, ts.isImportEqualsDeclaration)) {
|
|
error(errorNode, ts.Diagnostics.Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead, moduleReference);
|
|
}
|
|
else {
|
|
var diagnosticDetails = void 0;
|
|
var ext = ts.tryGetExtensionFromPath(currentSourceFile.fileName);
|
|
if (ext === ".ts" || ext === ".js" || ext === ".tsx" || ext === ".jsx") {
|
|
var scope = currentSourceFile.packageJsonScope;
|
|
var targetExt = ext === ".ts" ? ".mts" : ext === ".js" ? ".mjs" : undefined;
|
|
if (scope && !scope.packageJsonContent.type) {
|
|
if (targetExt) {
|
|
diagnosticDetails = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, targetExt, ts.combinePaths(scope.packageDirectory, "package.json"));
|
|
}
|
|
else {
|
|
diagnosticDetails = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, ts.combinePaths(scope.packageDirectory, "package.json"));
|
|
}
|
|
}
|
|
else {
|
|
if (targetExt) {
|
|
diagnosticDetails = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, targetExt);
|
|
}
|
|
else {
|
|
diagnosticDetails = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module);
|
|
}
|
|
}
|
|
}
|
|
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, ts.chainDiagnosticMessages(diagnosticDetails, ts.Diagnostics.The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead, 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) {
|
|
var augmentation = patternAmbientModuleAugmentations && patternAmbientModuleAugmentations.get(moduleReference);
|
|
if (augmentation) {
|
|
return getMergedSymbol(augmentation);
|
|
}
|
|
return getMergedSymbol(pattern.symbol);
|
|
}
|
|
}
|
|
if (resolvedModule && !ts.resolutionExtensionIsTSOrJson(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 (resolvedModule) {
|
|
var redirect = host.getProjectReferenceRedirect(resolvedModule.resolvedFileName);
|
|
if (redirect) {
|
|
error(errorNode, ts.Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect, resolvedModule.resolvedFileName);
|
|
return undefined;
|
|
}
|
|
}
|
|
if (resolutionDiagnostic) {
|
|
error(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName);
|
|
}
|
|
else {
|
|
var tsExtension = ts.tryExtractTSExtension(moduleReference);
|
|
var isExtensionlessRelativePathImport = ts.pathIsRelative(moduleReference) && !ts.hasExtension(moduleReference);
|
|
var moduleResolutionKind = ts.getEmitModuleResolutionKind(compilerOptions);
|
|
var resolutionIsNode16OrNext = moduleResolutionKind === ts.ModuleResolutionKind.Node16 ||
|
|
moduleResolutionKind === ts.ModuleResolutionKind.NodeNext;
|
|
if (tsExtension) {
|
|
var diag = ts.Diagnostics.An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead;
|
|
var importSourceWithoutExtension = ts.removeExtension(moduleReference, tsExtension);
|
|
var replacedImportSource = importSourceWithoutExtension;
|
|
if (moduleKind >= ts.ModuleKind.ES2015) {
|
|
replacedImportSource += tsExtension === ".mts" ? ".mjs" : tsExtension === ".cts" ? ".cjs" : ".js";
|
|
}
|
|
error(errorNode, diag, tsExtension, replacedImportSource);
|
|
}
|
|
else if (!compilerOptions.resolveJsonModule &&
|
|
ts.fileExtensionIs(moduleReference, ".json") &&
|
|
ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.Classic &&
|
|
ts.hasJsonModuleEmitEnabled(compilerOptions)) {
|
|
error(errorNode, ts.Diagnostics.Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension, moduleReference);
|
|
}
|
|
else if (mode === ts.ModuleKind.ESNext && resolutionIsNode16OrNext && isExtensionlessRelativePathImport) {
|
|
var absoluteRef_1 = ts.getNormalizedAbsolutePath(moduleReference, ts.getDirectoryPath(currentSourceFile.path));
|
|
var suggestedExt = (_h = suggestedExtensions.find(function (_a) {
|
|
var actualExt = _a[0], _importExt = _a[1];
|
|
return host.fileExists(absoluteRef_1 + actualExt);
|
|
})) === null || _h === void 0 ? void 0 : _h[1];
|
|
if (suggestedExt) {
|
|
error(errorNode, ts.Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0, moduleReference + suggestedExt);
|
|
}
|
|
else {
|
|
error(errorNode, ts.Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path);
|
|
}
|
|
}
|
|
else {
|
|
error(errorNode, moduleNotFoundError, moduleReference);
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function errorOnImplicitAnyModule(isError, errorNode, _a, moduleReference) {
|
|
var packageId = _a.packageId, resolvedFileName = _a.resolvedFileName;
|
|
var errorInfo = !ts.isExternalModuleNameRelative(moduleReference) && packageId
|
|
? typesPackageExists(packageId.name)
|
|
? ts.chainDiagnosticMessages(undefined, ts.Diagnostics.If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1, packageId.name, ts.mangleScopedPackageName(packageId.name))
|
|
: packageBundlesTypes(packageId.name)
|
|
? ts.chainDiagnosticMessages(undefined, ts.Diagnostics.If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1, packageId.name, moduleReference)
|
|
: ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, moduleReference, ts.mangleScopedPackageName(packageId.name))
|
|
: undefined;
|
|
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 typesPackageExists(packageName) {
|
|
return getPackagesMap().has(ts.getTypesPackageName(packageName));
|
|
}
|
|
function packageBundlesTypes(packageName) {
|
|
return !!getPackagesMap().get(packageName);
|
|
}
|
|
function resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) {
|
|
if (moduleSymbol === null || moduleSymbol === void 0 ? void 0 : moduleSymbol.exports) {
|
|
var exportEquals = resolveSymbol(moduleSymbol.exports.get("export="), dontResolveAlias);
|
|
var exported = getCommonJsExportEquals(getMergedSymbol(exportEquals), getMergedSymbol(moduleSymbol));
|
|
return getMergedSymbol(exported) || moduleSymbol;
|
|
}
|
|
return undefined;
|
|
}
|
|
function getCommonJsExportEquals(exported, moduleSymbol) {
|
|
if (!exported || exported === unknownSymbol || exported === moduleSymbol || moduleSymbol.exports.size === 1 || exported.flags & 2097152) {
|
|
return exported;
|
|
}
|
|
var links = getSymbolLinks(exported);
|
|
if (links.cjsExportMerged) {
|
|
return links.cjsExportMerged;
|
|
}
|
|
var merged = exported.flags & 33554432 ? exported : cloneSymbol(exported);
|
|
merged.flags = merged.flags | 512;
|
|
if (merged.exports === undefined) {
|
|
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);
|
|
});
|
|
getSymbolLinks(merged).cjsExportMerged = merged;
|
|
return links.cjsExportMerged = merged;
|
|
}
|
|
function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
|
|
var _a;
|
|
var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
|
|
if (!dontResolveAlias && symbol) {
|
|
if (!suppressInteropError && !(symbol.flags & (1536 | 3)) && !ts.getDeclarationOfKind(symbol, 305)) {
|
|
var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
|
|
? "allowSyntheticDefaultImports"
|
|
: "esModuleInterop";
|
|
error(referencingLocation, ts.Diagnostics.This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export, compilerOptionName);
|
|
return symbol;
|
|
}
|
|
var referenceParent = referencingLocation.parent;
|
|
if ((ts.isImportDeclaration(referenceParent) && ts.getNamespaceDeclarationNode(referenceParent)) ||
|
|
ts.isImportCall(referenceParent)) {
|
|
var reference = ts.isImportCall(referenceParent) ? referenceParent.arguments[0] : referenceParent.moduleSpecifier;
|
|
var type = getTypeOfSymbol(symbol);
|
|
var defaultOnlyType = getTypeWithSyntheticDefaultOnly(type, symbol, moduleSymbol, reference);
|
|
if (defaultOnlyType) {
|
|
return cloneTypeAsModuleType(symbol, defaultOnlyType, referenceParent);
|
|
}
|
|
var targetFile = (_a = moduleSymbol === null || moduleSymbol === void 0 ? void 0 : moduleSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isSourceFile);
|
|
var isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(getUsageModeForExpression(reference), targetFile.impliedNodeFormat);
|
|
if (ts.getESModuleInterop(compilerOptions) || isEsmCjsRef) {
|
|
var sigs = getSignaturesOfStructuredType(type, 0);
|
|
if (!sigs || !sigs.length) {
|
|
sigs = getSignaturesOfStructuredType(type, 1);
|
|
}
|
|
if ((sigs && sigs.length) ||
|
|
getPropertyOfType(type, "default", true) ||
|
|
isEsmCjsRef) {
|
|
var moduleType = getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol, reference);
|
|
return cloneTypeAsModuleType(symbol, moduleType, referenceParent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return symbol;
|
|
}
|
|
function cloneTypeAsModuleType(symbol, moduleType, referenceParent) {
|
|
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 = new ts.Map(symbol.members);
|
|
if (symbol.exports)
|
|
result.exports = new ts.Map(symbol.exports);
|
|
var resolvedModuleType = resolveStructuredTypeMembers(moduleType);
|
|
result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
|
|
return result;
|
|
}
|
|
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) {
|
|
var type = getTypeOfSymbol(exportEquals);
|
|
if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
|
|
ts.addRange(exports, getPropertiesOfType(type));
|
|
}
|
|
}
|
|
return exports;
|
|
}
|
|
function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
|
|
var exports = getExportsOfModule(moduleSymbol);
|
|
exports.forEach(function (symbol, key) {
|
|
if (!isReservedMemberName(key)) {
|
|
cb(symbol, key);
|
|
}
|
|
});
|
|
var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
|
|
if (exportEquals !== moduleSymbol) {
|
|
var type = getTypeOfSymbol(exportEquals);
|
|
if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
|
|
forEachPropertyOfType(type, function (symbol, escapedName) {
|
|
cb(symbol, escapedName);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
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 shouldTreatPropertiesOfExternalModuleAsExports(type) ? getPropertyOfType(type, memberName) : undefined;
|
|
}
|
|
function shouldTreatPropertiesOfExternalModuleAsExports(resolvedExternalModuleType) {
|
|
return !(resolvedExternalModuleType.flags & 131068 ||
|
|
ts.getObjectFlags(resolvedExternalModuleType) & 1 ||
|
|
isArrayType(resolvedExternalModuleType) ||
|
|
isTupleType(resolvedExternalModuleType));
|
|
}
|
|
function getExportsOfSymbol(symbol) {
|
|
return symbol.flags & 6256 ? 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.exports && ts.pushIfUnique(visitedSymbols, symbol))) {
|
|
return;
|
|
}
|
|
var symbols = new ts.Map(symbol.exports);
|
|
var exportStars = symbol.exports.get("__export");
|
|
if (exportStars) {
|
|
var nestedSymbols = ts.createSymbolTable();
|
|
var lookupTable_1 = new ts.Map();
|
|
if (exportStars.declarations) {
|
|
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 getAlternativeContainingModules(symbol, enclosingDeclaration) {
|
|
var containingFile = ts.getSourceFileOfNode(enclosingDeclaration);
|
|
var id = getNodeId(containingFile);
|
|
var links = getSymbolLinks(symbol);
|
|
var results;
|
|
if (links.extendedContainersByFile && (results = links.extendedContainersByFile.get(id))) {
|
|
return results;
|
|
}
|
|
if (containingFile && containingFile.imports) {
|
|
for (var _i = 0, _a = containingFile.imports; _i < _a.length; _i++) {
|
|
var importRef = _a[_i];
|
|
if (ts.nodeIsSynthesized(importRef))
|
|
continue;
|
|
var resolvedModule = resolveExternalModuleName(enclosingDeclaration, importRef, true);
|
|
if (!resolvedModule)
|
|
continue;
|
|
var ref = getAliasForSymbolInContainer(resolvedModule, symbol);
|
|
if (!ref)
|
|
continue;
|
|
results = ts.append(results, resolvedModule);
|
|
}
|
|
if (ts.length(results)) {
|
|
(links.extendedContainersByFile || (links.extendedContainersByFile = new ts.Map())).set(id, results);
|
|
return results;
|
|
}
|
|
}
|
|
if (links.extendedContainers) {
|
|
return links.extendedContainers;
|
|
}
|
|
var otherFiles = host.getSourceFiles();
|
|
for (var _b = 0, otherFiles_1 = otherFiles; _b < otherFiles_1.length; _b++) {
|
|
var file = otherFiles_1[_b];
|
|
if (!ts.isExternalModule(file))
|
|
continue;
|
|
var sym = getSymbolOfNode(file);
|
|
var ref = getAliasForSymbolInContainer(sym, symbol);
|
|
if (!ref)
|
|
continue;
|
|
results = ts.append(results, sym);
|
|
}
|
|
return links.extendedContainers = results || ts.emptyArray;
|
|
}
|
|
function getContainersOfSymbol(symbol, enclosingDeclaration, meaning) {
|
|
var container = getParentOfSymbol(symbol);
|
|
if (container && !(symbol.flags & 262144)) {
|
|
var additionalContainers = ts.mapDefined(container.declarations, fileSymbolIfFileSymbolExportEqualsContainer);
|
|
var reexportContainers = enclosingDeclaration && getAlternativeContainingModules(symbol, enclosingDeclaration);
|
|
var objectLiteralContainer = getVariableDeclarationOfObjectLiteral(container, meaning);
|
|
if (enclosingDeclaration &&
|
|
container.flags & getQualifiedLeftMeaning(meaning) &&
|
|
getAccessibleSymbolChain(container, enclosingDeclaration, 1920, false)) {
|
|
return ts.append(ts.concatenate(ts.concatenate([container], additionalContainers), reexportContainers), objectLiteralContainer);
|
|
}
|
|
var firstVariableMatch = !(container.flags & getQualifiedLeftMeaning(meaning))
|
|
&& container.flags & 788968
|
|
&& getDeclaredTypeOfSymbol(container).flags & 524288
|
|
&& meaning === 111551
|
|
? forEachSymbolTableInScope(enclosingDeclaration, function (t) {
|
|
return ts.forEachEntry(t, function (s) {
|
|
if (s.flags & getQualifiedLeftMeaning(meaning) && getTypeOfSymbol(s) === getDeclaredTypeOfSymbol(container)) {
|
|
return s;
|
|
}
|
|
});
|
|
}) : undefined;
|
|
var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
|
|
res = ts.append(res, objectLiteralContainer);
|
|
res = ts.addRange(res, reexportContainers);
|
|
return res;
|
|
}
|
|
var candidates = ts.mapDefined(symbol.declarations, function (d) {
|
|
if (!ts.isAmbientModule(d) && d.parent) {
|
|
if (hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
|
|
return getSymbolOfNode(d.parent);
|
|
}
|
|
if (ts.isModuleBlock(d.parent) && d.parent.parent && resolveExternalModuleSymbol(getSymbolOfNode(d.parent.parent)) === symbol) {
|
|
return getSymbolOfNode(d.parent.parent);
|
|
}
|
|
}
|
|
if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
|
|
if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
|
|
return getSymbolOfNode(ts.getSourceFileOfNode(d));
|
|
}
|
|
checkExpressionCached(d.parent.left.expression);
|
|
return getNodeLinks(d.parent.left.expression).resolvedSymbol;
|
|
}
|
|
});
|
|
if (!ts.length(candidates)) {
|
|
return undefined;
|
|
}
|
|
return ts.mapDefined(candidates, function (candidate) { return getAliasForSymbolInContainer(candidate, symbol) ? candidate : undefined; });
|
|
function fileSymbolIfFileSymbolExportEqualsContainer(d) {
|
|
return container && getFileSymbolIfFileSymbolExportEqualsContainer(d, container);
|
|
}
|
|
}
|
|
function getVariableDeclarationOfObjectLiteral(symbol, meaning) {
|
|
var firstDecl = !!ts.length(symbol.declarations) && ts.first(symbol.declarations);
|
|
if (meaning & 111551 && firstDecl && firstDecl.parent && ts.isVariableDeclaration(firstDecl.parent)) {
|
|
if (ts.isObjectLiteralExpression(firstDecl) && firstDecl === firstDecl.parent.initializer || ts.isTypeLiteralNode(firstDecl) && firstDecl === firstDecl.parent.type) {
|
|
return getSymbolOfNode(firstDecl.parent);
|
|
}
|
|
}
|
|
}
|
|
function getFileSymbolIfFileSymbolExportEqualsContainer(d, container) {
|
|
var fileSymbol = getExternalModuleContainer(d);
|
|
var exported = fileSymbol && fileSymbol.exports && fileSymbol.exports.get("export=");
|
|
return exported && getSymbolIfSameReference(exported, container) ? fileSymbol : undefined;
|
|
}
|
|
function getAliasForSymbolInContainer(container, symbol) {
|
|
if (container === getParentOfSymbol(symbol)) {
|
|
return symbol;
|
|
}
|
|
var exportEquals = container.exports && container.exports.get("export=");
|
|
if (exportEquals && getSymbolIfSameReference(exportEquals, symbol)) {
|
|
return container;
|
|
}
|
|
var exports = getExportsOfSymbol(container);
|
|
var quick = exports.get(symbol.escapedName);
|
|
if (quick && getSymbolIfSameReference(quick, symbol)) {
|
|
return quick;
|
|
}
|
|
return ts.forEachEntry(exports, function (exported) {
|
|
if (getSymbolIfSameReference(exported, symbol)) {
|
|
return exported;
|
|
}
|
|
});
|
|
}
|
|
function getSymbolIfSameReference(s1, s2) {
|
|
if (getMergedSymbol(resolveSymbol(getMergedSymbol(s1))) === getMergedSymbol(resolveSymbol(getMergedSymbol(s2)))) {
|
|
return s1;
|
|
}
|
|
}
|
|
function getExportSymbolOfValueSymbolIfExported(symbol) {
|
|
return getMergedSymbol(symbol && (symbol.flags & 1048576) !== 0 && symbol.exportSymbol || symbol);
|
|
}
|
|
function symbolIsValue(symbol, includeTypeOnlyMembers) {
|
|
return !!(symbol.flags & 111551 ||
|
|
symbol.flags & 2097152 && resolveAlias(symbol).flags & 111551 && (includeTypeOnlyMembers || !getTypeOnlyAliasDeclaration(symbol)));
|
|
}
|
|
function findConstructorDeclaration(node) {
|
|
var members = node.members;
|
|
for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
|
|
var member = members_3[_i];
|
|
if (member.kind === 171 && ts.nodeIsPresent(member.body)) {
|
|
return member;
|
|
}
|
|
}
|
|
}
|
|
function createType(flags) {
|
|
var result = new Type(checker, flags);
|
|
typeCount++;
|
|
result.id = typeCount;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.recordType(result);
|
|
return result;
|
|
}
|
|
function createOriginType(flags) {
|
|
return new Type(checker, flags);
|
|
}
|
|
function createIntrinsicType(kind, intrinsicName, objectFlags) {
|
|
if (objectFlags === void 0) { objectFlags = 0; }
|
|
var type = createType(kind);
|
|
type.intrinsicName = intrinsicName;
|
|
type.objectFlags = objectFlags;
|
|
return type;
|
|
}
|
|
function createObjectType(objectFlags, symbol) {
|
|
var type = createType(524288);
|
|
type.objectFlags = objectFlags;
|
|
type.symbol = symbol;
|
|
type.members = undefined;
|
|
type.properties = undefined;
|
|
type.callSignatures = undefined;
|
|
type.constructSignatures = undefined;
|
|
type.indexInfos = undefined;
|
|
return type;
|
|
}
|
|
function createTypeofType() {
|
|
return getUnionType(ts.arrayFrom(typeofNEFacts.keys(), getStringLiteralType));
|
|
}
|
|
function createTypeParameter(symbol) {
|
|
var type = createType(262144);
|
|
if (symbol)
|
|
type.symbol = symbol;
|
|
return type;
|
|
}
|
|
function isReservedMemberName(name) {
|
|
return name.charCodeAt(0) === 95 &&
|
|
name.charCodeAt(1) === 95 &&
|
|
name.charCodeAt(2) !== 95 &&
|
|
name.charCodeAt(2) !== 64 &&
|
|
name.charCodeAt(2) !== 35;
|
|
}
|
|
function getNamedMembers(members) {
|
|
var result;
|
|
members.forEach(function (symbol, id) {
|
|
if (isNamedMember(symbol, id)) {
|
|
(result || (result = [])).push(symbol);
|
|
}
|
|
});
|
|
return result || ts.emptyArray;
|
|
}
|
|
function isNamedMember(member, escapedName) {
|
|
return !isReservedMemberName(escapedName) && symbolIsValue(member);
|
|
}
|
|
function getNamedOrIndexSignatureMembers(members) {
|
|
var result = getNamedMembers(members);
|
|
var index = getIndexSymbolFromSymbolTable(members);
|
|
return index ? ts.concatenate(result, [index]) : result;
|
|
}
|
|
function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
|
|
var resolved = type;
|
|
resolved.members = members;
|
|
resolved.properties = ts.emptyArray;
|
|
resolved.callSignatures = callSignatures;
|
|
resolved.constructSignatures = constructSignatures;
|
|
resolved.indexInfos = indexInfos;
|
|
if (members !== emptySymbols)
|
|
resolved.properties = getNamedMembers(members);
|
|
return resolved;
|
|
}
|
|
function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
|
|
return setStructuredTypeMembers(createObjectType(16, symbol), members, callSignatures, constructSignatures, indexInfos);
|
|
}
|
|
function getResolvedTypeWithoutAbstractConstructSignatures(type) {
|
|
if (type.constructSignatures.length === 0)
|
|
return type;
|
|
if (type.objectTypeWithoutAbstractConstructSignatures)
|
|
return type.objectTypeWithoutAbstractConstructSignatures;
|
|
var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4); });
|
|
if (type.constructSignatures === constructSignatures)
|
|
return type;
|
|
var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
|
|
type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
|
|
typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
|
|
return typeCopy;
|
|
}
|
|
function forEachSymbolTableInScope(enclosingDeclaration, callback) {
|
|
var result;
|
|
var _loop_8 = function (location) {
|
|
if (location.locals && !isGlobalSourceFile(location)) {
|
|
if (result = callback(location.locals, undefined, true, location)) {
|
|
return { value: result };
|
|
}
|
|
}
|
|
switch (location.kind) {
|
|
case 305:
|
|
if (!ts.isExternalOrCommonJsModule(location)) {
|
|
break;
|
|
}
|
|
case 261:
|
|
var sym = getSymbolOfNode(location);
|
|
if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, undefined, true, location)) {
|
|
return { value: result };
|
|
}
|
|
break;
|
|
case 257:
|
|
case 226:
|
|
case 258:
|
|
var table_1;
|
|
(getSymbolOfNode(location).members || emptySymbols).forEach(function (memberSymbol, key) {
|
|
if (memberSymbol.flags & (788968 & ~67108864)) {
|
|
(table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
|
|
}
|
|
});
|
|
if (table_1 && (result = callback(table_1, undefined, false, location))) {
|
|
return { value: result };
|
|
}
|
|
break;
|
|
}
|
|
};
|
|
for (var location = enclosingDeclaration; location; location = location.parent) {
|
|
var state_2 = _loop_8(location);
|
|
if (typeof state_2 === "object")
|
|
return state_2.value;
|
|
}
|
|
return callback(globals, undefined, true);
|
|
}
|
|
function getQualifiedLeftMeaning(rightMeaning) {
|
|
return rightMeaning === 111551 ? 111551 : 1920;
|
|
}
|
|
function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing, visitedSymbolTablesMap) {
|
|
if (visitedSymbolTablesMap === void 0) { visitedSymbolTablesMap = new ts.Map(); }
|
|
if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
|
|
return undefined;
|
|
}
|
|
var links = getSymbolLinks(symbol);
|
|
var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
|
|
var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
|
|
var key = "".concat(useOnlyExternalAliasing ? 0 : 1, "|").concat(firstRelevantLocation && getNodeId(firstRelevantLocation), "|").concat(meaning);
|
|
if (cache.has(key)) {
|
|
return cache.get(key);
|
|
}
|
|
var id = getSymbolId(symbol);
|
|
var visitedSymbolTables = visitedSymbolTablesMap.get(id);
|
|
if (!visitedSymbolTables) {
|
|
visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
|
|
}
|
|
var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
|
|
cache.set(key, result);
|
|
return result;
|
|
function getAccessibleSymbolChainFromSymbolTable(symbols, ignoreQualification, isLocalNameLookup) {
|
|
if (!ts.pushIfUnique(visitedSymbolTables, symbols)) {
|
|
return undefined;
|
|
}
|
|
var result = trySymbolTable(symbols, ignoreQualification, isLocalNameLookup);
|
|
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) || getMergedSymbol(symbol) === getMergedSymbol(resolvedAliasSymbol || symbolFromSymbolTable)) &&
|
|
!ts.some(symbolFromSymbolTable.declarations, hasNonGlobalAugmentationExternalModuleSymbol) &&
|
|
(ignoreQualification || canQualifySymbol(getMergedSymbol(symbolFromSymbolTable), meaning));
|
|
}
|
|
function trySymbolTable(symbols, ignoreQualification, isLocalNameLookup) {
|
|
if (isAccessible(symbols.get(symbol.escapedName), undefined, ignoreQualification)) {
|
|
return [symbol];
|
|
}
|
|
var result = 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))
|
|
&& (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
|
|
&& (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 275))) {
|
|
var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
|
|
var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
|
|
if (candidate) {
|
|
return candidate;
|
|
}
|
|
}
|
|
if (symbolFromSymbolTable.escapedName === symbol.escapedName && symbolFromSymbolTable.exportSymbol) {
|
|
if (isAccessible(getMergedSymbol(symbolFromSymbolTable.exportSymbol), undefined, ignoreQualification)) {
|
|
return [symbol];
|
|
}
|
|
}
|
|
});
|
|
return result || (symbols === globals ? getCandidateListForSymbol(globalThisSymbol, globalThisSymbol, ignoreQualification) : undefined);
|
|
}
|
|
function getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
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, 275)) ? 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 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
continue;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isTypeSymbolAccessible(typeSymbol, enclosingDeclaration) {
|
|
var access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, 788968, false, true);
|
|
return access.accessibility === 0;
|
|
}
|
|
function isValueSymbolAccessible(typeSymbol, enclosingDeclaration) {
|
|
var access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, 111551, false, true);
|
|
return access.accessibility === 0;
|
|
}
|
|
function isSymbolAccessibleByFlags(typeSymbol, enclosingDeclaration, flags) {
|
|
var access = isSymbolAccessibleWorker(typeSymbol, enclosingDeclaration, flags, false, false);
|
|
return access.accessibility === 0;
|
|
}
|
|
function isAnySymbolAccessible(symbols, enclosingDeclaration, initialSymbol, meaning, shouldComputeAliasesToMakeVisible, allowModules) {
|
|
if (!ts.length(symbols))
|
|
return;
|
|
var hadAccessibleChain;
|
|
var earlyModuleBail = false;
|
|
for (var _i = 0, _a = symbols; _i < _a.length; _i++) {
|
|
var symbol = _a[_i];
|
|
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, false);
|
|
if (accessibleSymbolChain) {
|
|
hadAccessibleChain = symbol;
|
|
var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible);
|
|
if (hasAccessibleDeclarations) {
|
|
return hasAccessibleDeclarations;
|
|
}
|
|
}
|
|
if (allowModules) {
|
|
if (ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
|
|
if (shouldComputeAliasesToMakeVisible) {
|
|
earlyModuleBail = true;
|
|
continue;
|
|
}
|
|
return {
|
|
accessibility: 0
|
|
};
|
|
}
|
|
}
|
|
var containers = getContainersOfSymbol(symbol, enclosingDeclaration, meaning);
|
|
var parentResult = isAnySymbolAccessible(containers, enclosingDeclaration, initialSymbol, initialSymbol === symbol ? getQualifiedLeftMeaning(meaning) : meaning, shouldComputeAliasesToMakeVisible, allowModules);
|
|
if (parentResult) {
|
|
return parentResult;
|
|
}
|
|
}
|
|
if (earlyModuleBail) {
|
|
return {
|
|
accessibility: 0
|
|
};
|
|
}
|
|
if (hadAccessibleChain) {
|
|
return {
|
|
accessibility: 1,
|
|
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
|
|
errorModuleName: hadAccessibleChain !== initialSymbol ? symbolToString(hadAccessibleChain, enclosingDeclaration, 1920) : undefined,
|
|
};
|
|
}
|
|
}
|
|
function isSymbolAccessible(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible) {
|
|
return isSymbolAccessibleWorker(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible, true);
|
|
}
|
|
function isSymbolAccessibleWorker(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible, allowModules) {
|
|
if (symbol && enclosingDeclaration) {
|
|
var result = isAnySymbolAccessible([symbol], enclosingDeclaration, symbol, meaning, shouldComputeAliasesToMakeVisible, allowModules);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
var symbolExternalModule = ts.forEach(symbol.declarations, getExternalModuleContainer);
|
|
if (symbolExternalModule) {
|
|
var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration);
|
|
if (symbolExternalModule !== enclosingExternalModule) {
|
|
return {
|
|
accessibility: 2,
|
|
errorSymbolName: symbolToString(symbol, enclosingDeclaration, meaning),
|
|
errorModuleName: symbolToString(symbolExternalModule),
|
|
errorNode: ts.isInJSFile(enclosingDeclaration) ? enclosingDeclaration : undefined,
|
|
};
|
|
}
|
|
}
|
|
return {
|
|
accessibility: 1,
|
|
errorSymbolName: symbolToString(symbol, 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 === 305 && ts.isExternalOrCommonJsModule(declaration));
|
|
}
|
|
function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
|
|
return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 305 && ts.isExternalOrCommonJsModule(declaration));
|
|
}
|
|
function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
|
|
var aliasesToMakeVisible;
|
|
if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79; }), getIsDeclarationVisible)) {
|
|
return undefined;
|
|
}
|
|
return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible };
|
|
function getIsDeclarationVisible(declaration) {
|
|
var _a, _b;
|
|
if (!isDeclarationVisible(declaration)) {
|
|
var anyImportSyntax = getAnyImportSyntax(declaration);
|
|
if (anyImportSyntax &&
|
|
!ts.hasSyntacticModifier(anyImportSyntax, 1) &&
|
|
isDeclarationVisible(anyImportSyntax.parent)) {
|
|
return addVisibleAlias(declaration, anyImportSyntax);
|
|
}
|
|
else if (ts.isVariableDeclaration(declaration) && ts.isVariableStatement(declaration.parent.parent) &&
|
|
!ts.hasSyntacticModifier(declaration.parent.parent, 1) &&
|
|
isDeclarationVisible(declaration.parent.parent.parent)) {
|
|
return addVisibleAlias(declaration, declaration.parent.parent);
|
|
}
|
|
else if (ts.isLateVisibilityPaintedStatement(declaration)
|
|
&& !ts.hasSyntacticModifier(declaration, 1)
|
|
&& isDeclarationVisible(declaration.parent)) {
|
|
return addVisibleAlias(declaration, declaration);
|
|
}
|
|
else if (ts.isBindingElement(declaration)) {
|
|
if (symbol.flags & 2097152 && ts.isInJSFile(declaration) && ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.parent)
|
|
&& ts.isVariableDeclaration(declaration.parent.parent)
|
|
&& ((_b = declaration.parent.parent.parent) === null || _b === void 0 ? void 0 : _b.parent) && ts.isVariableStatement(declaration.parent.parent.parent.parent)
|
|
&& !ts.hasSyntacticModifier(declaration.parent.parent.parent.parent, 1)
|
|
&& declaration.parent.parent.parent.parent.parent
|
|
&& isDeclarationVisible(declaration.parent.parent.parent.parent.parent)) {
|
|
return addVisibleAlias(declaration, declaration.parent.parent.parent.parent);
|
|
}
|
|
else if (symbol.flags & 2) {
|
|
var variableStatement = ts.findAncestor(declaration, ts.isVariableStatement);
|
|
if (ts.hasSyntacticModifier(variableStatement, 1)) {
|
|
return true;
|
|
}
|
|
if (!isDeclarationVisible(variableStatement.parent)) {
|
|
return false;
|
|
}
|
|
return addVisibleAlias(declaration, variableStatement);
|
|
}
|
|
}
|
|
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 === 181 ||
|
|
entityName.parent.kind === 228 && !ts.isPartOfTypeNode(entityName.parent) ||
|
|
entityName.parent.kind === 162) {
|
|
meaning = 111551 | 1048576;
|
|
}
|
|
else if (entityName.kind === 161 || entityName.kind === 206 ||
|
|
entityName.parent.kind === 265) {
|
|
meaning = 1920;
|
|
}
|
|
else {
|
|
meaning = 788968;
|
|
}
|
|
var firstIdentifier = ts.getFirstIdentifier(entityName);
|
|
var symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, undefined, undefined, false);
|
|
if (symbol && symbol.flags & 262144 && meaning & 788968) {
|
|
return { accessibility: 0 };
|
|
}
|
|
if (!symbol && ts.isThisIdentifier(firstIdentifier) && isSymbolAccessible(getSymbolOfNode(ts.getThisContainer(firstIdentifier, false)), firstIdentifier, meaning, false).accessibility === 0) {
|
|
return { accessibility: 0 };
|
|
}
|
|
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 = 70221824;
|
|
if (flags & 2) {
|
|
nodeFlags |= 128;
|
|
}
|
|
if (flags & 1) {
|
|
nodeFlags |= 512;
|
|
}
|
|
if (flags & 8) {
|
|
nodeFlags |= 16384;
|
|
}
|
|
if (flags & 16) {
|
|
nodeFlags |= 134217728;
|
|
}
|
|
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 = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 305 ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : 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 ? 180 : 179;
|
|
}
|
|
else {
|
|
sigOutput = kind === 1 ? 175 : 174;
|
|
}
|
|
var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | 512);
|
|
var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
|
|
var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
|
|
printer.writeNode(4, sig, sourceFile, ts.getTrailingSemicolonDeferringWriter(writer));
|
|
return writer;
|
|
}
|
|
}
|
|
function typeToString(type, enclosingDeclaration, flags, writer) {
|
|
if (flags === void 0) { flags = 1048576 | 16384; }
|
|
if (writer === void 0) { writer = ts.createTextWriter(""); }
|
|
var noTruncation = compilerOptions.noErrorTruncation || flags & 1;
|
|
var typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | (noTruncation ? 1 : 0), writer);
|
|
if (typeNode === undefined)
|
|
return ts.Debug.fail("should always get typenode");
|
|
var options = { removeComments: type !== unresolvedType };
|
|
var printer = ts.createPrinter(options);
|
|
var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
|
|
printer.writeNode(4, typeNode, sourceFile, writer);
|
|
var result = writer.getText();
|
|
var maxLength = noTruncation ? ts.noTruncationMaximumTruncationLength * 2 : ts.defaultMaximumTruncationLength * 2;
|
|
if (maxLength && result && result.length >= maxLength) {
|
|
return result.substr(0, maxLength - "...".length) + "...";
|
|
}
|
|
return result;
|
|
}
|
|
function getTypeNamesForErrorDisplay(left, right) {
|
|
var leftStr = symbolValueDeclarationIsContextSensitive(left.symbol) ? typeToString(left, left.symbol.valueDeclaration) : typeToString(left);
|
|
var rightStr = symbolValueDeclarationIsContextSensitive(right.symbol) ? typeToString(right, right.symbol.valueDeclaration) : typeToString(right);
|
|
if (leftStr === rightStr) {
|
|
leftStr = getTypeNameForErrorDisplay(left);
|
|
rightStr = getTypeNameForErrorDisplay(right);
|
|
}
|
|
return [leftStr, rightStr];
|
|
}
|
|
function getTypeNameForErrorDisplay(type) {
|
|
return typeToString(type, undefined, 64);
|
|
}
|
|
function symbolValueDeclarationIsContextSensitive(symbol) {
|
|
return symbol && !!symbol.valueDeclaration && ts.isExpression(symbol.valueDeclaration) && !isContextSensitive(symbol.valueDeclaration);
|
|
}
|
|
function toNodeBuilderFlags(flags) {
|
|
if (flags === void 0) { flags = 0; }
|
|
return flags & 848330091;
|
|
}
|
|
function isClassInstanceSide(type) {
|
|
return !!type.symbol && !!(type.symbol.flags & 32) && (type === getDeclaredTypeOfClassOrInterface(type.symbol) || (!!(type.flags & 524288) && !!(ts.getObjectFlags(type) & 16777216)));
|
|
}
|
|
function createNodeBuilder() {
|
|
return {
|
|
typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
|
|
},
|
|
indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, undefined); });
|
|
},
|
|
signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
|
|
},
|
|
symbolToEntityName: function (symbol, meaning, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return symbolToName(symbol, context, meaning, false); });
|
|
},
|
|
symbolToExpression: function (symbol, meaning, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return symbolToExpression(symbol, context, meaning); });
|
|
},
|
|
symbolToTypeParameterDeclarations: function (symbol, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeParametersToTypeParameterDeclarations(symbol, context); });
|
|
},
|
|
symbolToParameterDeclaration: function (symbol, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return symbolToParameterDeclaration(symbol, context); });
|
|
},
|
|
typeParameterToDeclaration: function (parameter, enclosingDeclaration, flags, tracker) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeParameterToDeclaration(parameter, context); });
|
|
},
|
|
symbolTableToDeclarationStatements: function (symbolTable, enclosingDeclaration, flags, tracker, bundled) {
|
|
return withContext(enclosingDeclaration, flags, tracker, function (context) { return symbolTableToDeclarationStatements(symbolTable, context, bundled); });
|
|
},
|
|
};
|
|
function withContext(enclosingDeclaration, flags, tracker, cb) {
|
|
var _a, _b;
|
|
ts.Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & 8) === 0);
|
|
var context = {
|
|
enclosingDeclaration: enclosingDeclaration,
|
|
flags: flags || 0,
|
|
tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 ? {
|
|
getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
|
|
getCurrentDirectory: function () { return host.getCurrentDirectory(); },
|
|
getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
|
|
getPackageJsonInfoCache: function () { var _a; return (_a = host.getPackageJsonInfoCache) === null || _a === void 0 ? void 0 : _a.call(host); },
|
|
useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
|
|
redirectTargetsMap: host.redirectTargetsMap,
|
|
getProjectReferenceRedirect: function (fileName) { return host.getProjectReferenceRedirect(fileName); },
|
|
isSourceOfProjectReferenceRedirect: function (fileName) { return host.isSourceOfProjectReferenceRedirect(fileName); },
|
|
fileExists: function (fileName) { return host.fileExists(fileName); },
|
|
getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
|
|
readFile: host.readFile ? (function (fileName) { return host.readFile(fileName); }) : undefined,
|
|
} : undefined },
|
|
encounteredError: false,
|
|
reportedDiagnostic: false,
|
|
visitedTypes: undefined,
|
|
symbolDepth: undefined,
|
|
inferTypeParameters: undefined,
|
|
approximateLength: 0
|
|
};
|
|
context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
|
|
var resultingNode = cb(context);
|
|
if (context.truncating && context.flags & 1) {
|
|
(_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
}
|
|
return context.encounteredError ? undefined : resultingNode;
|
|
}
|
|
function wrapSymbolTrackerToReportForContext(context, tracker) {
|
|
var oldTrackSymbol = tracker.trackSymbol;
|
|
return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
var result = oldTrackSymbol.apply(void 0, args);
|
|
if (result) {
|
|
context.reportedDiagnostic = true;
|
|
}
|
|
return result;
|
|
}) });
|
|
function wrapReportedDiagnostic(method) {
|
|
if (!method) {
|
|
return method;
|
|
}
|
|
return (function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
context.reportedDiagnostic = true;
|
|
return method.apply(void 0, args);
|
|
});
|
|
}
|
|
}
|
|
function checkTruncationLength(context) {
|
|
if (context.truncating)
|
|
return context.truncating;
|
|
return context.truncating = context.approximateLength > ((context.flags & 1) ? ts.noTruncationMaximumTruncationLength : ts.defaultMaximumTruncationLength);
|
|
}
|
|
function typeToTypeNodeHelper(type, context) {
|
|
var savedFlags = context.flags;
|
|
var typeNode = typeToTypeNodeWorker(type, context);
|
|
context.flags = savedFlags;
|
|
return typeNode;
|
|
}
|
|
function typeToTypeNodeWorker(type, context) {
|
|
if (cancellationToken && cancellationToken.throwIfCancellationRequested) {
|
|
cancellationToken.throwIfCancellationRequested();
|
|
}
|
|
var inTypeAlias = context.flags & 8388608;
|
|
context.flags &= ~8388608;
|
|
if (!type) {
|
|
if (!(context.flags & 262144)) {
|
|
context.encounteredError = true;
|
|
return undefined;
|
|
}
|
|
context.approximateLength += 3;
|
|
return ts.factory.createKeywordTypeNode(130);
|
|
}
|
|
if (!(context.flags & 536870912)) {
|
|
type = getReducedType(type);
|
|
}
|
|
if (type.flags & 1) {
|
|
if (type.aliasSymbol) {
|
|
return ts.factory.createTypeReferenceNode(symbolToEntityNameNode(type.aliasSymbol), mapToTypeNodes(type.aliasTypeArguments, context));
|
|
}
|
|
if (type === unresolvedType) {
|
|
return ts.addSyntheticLeadingComment(ts.factory.createKeywordTypeNode(130), 3, "unresolved");
|
|
}
|
|
context.approximateLength += 3;
|
|
return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 138 : 130);
|
|
}
|
|
if (type.flags & 2) {
|
|
return ts.factory.createKeywordTypeNode(155);
|
|
}
|
|
if (type.flags & 4) {
|
|
context.approximateLength += 6;
|
|
return ts.factory.createKeywordTypeNode(150);
|
|
}
|
|
if (type.flags & 8) {
|
|
context.approximateLength += 6;
|
|
return ts.factory.createKeywordTypeNode(147);
|
|
}
|
|
if (type.flags & 64) {
|
|
context.approximateLength += 6;
|
|
return ts.factory.createKeywordTypeNode(158);
|
|
}
|
|
if (type.flags & 16 && !type.aliasSymbol) {
|
|
context.approximateLength += 7;
|
|
return ts.factory.createKeywordTypeNode(133);
|
|
}
|
|
if (type.flags & 1024 && !(type.flags & 1048576)) {
|
|
var parentSymbol = getParentOfSymbol(type.symbol);
|
|
var parentName = symbolToTypeNode(parentSymbol, context, 788968);
|
|
if (getDeclaredTypeOfSymbol(parentSymbol) === type) {
|
|
return parentName;
|
|
}
|
|
var memberName = ts.symbolName(type.symbol);
|
|
if (ts.isIdentifierText(memberName, 0)) {
|
|
return appendReferenceToType(parentName, ts.factory.createTypeReferenceNode(memberName, undefined));
|
|
}
|
|
if (ts.isImportTypeNode(parentName)) {
|
|
parentName.isTypeOf = true;
|
|
return ts.factory.createIndexedAccessTypeNode(parentName, ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(memberName)));
|
|
}
|
|
else if (ts.isTypeReferenceNode(parentName)) {
|
|
return ts.factory.createIndexedAccessTypeNode(ts.factory.createTypeQueryNode(parentName.typeName), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(memberName)));
|
|
}
|
|
else {
|
|
return ts.Debug.fail("Unhandled type node kind returned from `symbolToTypeNode`.");
|
|
}
|
|
}
|
|
if (type.flags & 1056) {
|
|
return symbolToTypeNode(type.symbol, context, 788968);
|
|
}
|
|
if (type.flags & 128) {
|
|
context.approximateLength += (type.value.length + 2);
|
|
return ts.factory.createLiteralTypeNode(ts.setEmitFlags(ts.factory.createStringLiteral(type.value, !!(context.flags & 268435456)), 16777216));
|
|
}
|
|
if (type.flags & 256) {
|
|
var value = type.value;
|
|
context.approximateLength += ("" + value).length;
|
|
return ts.factory.createLiteralTypeNode(value < 0 ? ts.factory.createPrefixUnaryExpression(40, ts.factory.createNumericLiteral(-value)) : ts.factory.createNumericLiteral(value));
|
|
}
|
|
if (type.flags & 2048) {
|
|
context.approximateLength += (ts.pseudoBigIntToString(type.value).length) + 1;
|
|
return ts.factory.createLiteralTypeNode((ts.factory.createBigIntLiteral(type.value)));
|
|
}
|
|
if (type.flags & 512) {
|
|
context.approximateLength += type.intrinsicName.length;
|
|
return ts.factory.createLiteralTypeNode(type.intrinsicName === "true" ? ts.factory.createTrue() : ts.factory.createFalse());
|
|
}
|
|
if (type.flags & 8192) {
|
|
if (!(context.flags & 1048576)) {
|
|
if (isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) {
|
|
context.approximateLength += 6;
|
|
return symbolToTypeNode(type.symbol, context, 111551);
|
|
}
|
|
if (context.tracker.reportInaccessibleUniqueSymbolError) {
|
|
context.tracker.reportInaccessibleUniqueSymbolError();
|
|
}
|
|
}
|
|
context.approximateLength += 13;
|
|
return ts.factory.createTypeOperatorNode(154, ts.factory.createKeywordTypeNode(151));
|
|
}
|
|
if (type.flags & 16384) {
|
|
context.approximateLength += 4;
|
|
return ts.factory.createKeywordTypeNode(114);
|
|
}
|
|
if (type.flags & 32768) {
|
|
context.approximateLength += 9;
|
|
return ts.factory.createKeywordTypeNode(153);
|
|
}
|
|
if (type.flags & 65536) {
|
|
context.approximateLength += 4;
|
|
return ts.factory.createLiteralTypeNode(ts.factory.createNull());
|
|
}
|
|
if (type.flags & 131072) {
|
|
context.approximateLength += 5;
|
|
return ts.factory.createKeywordTypeNode(143);
|
|
}
|
|
if (type.flags & 4096) {
|
|
context.approximateLength += 6;
|
|
return ts.factory.createKeywordTypeNode(151);
|
|
}
|
|
if (type.flags & 67108864) {
|
|
context.approximateLength += 6;
|
|
return ts.factory.createKeywordTypeNode(148);
|
|
}
|
|
if (ts.isThisTypeParameter(type)) {
|
|
if (context.flags & 4194304) {
|
|
if (!context.encounteredError && !(context.flags & 32768)) {
|
|
context.encounteredError = true;
|
|
}
|
|
if (context.tracker.reportInaccessibleThisError) {
|
|
context.tracker.reportInaccessibleThisError();
|
|
}
|
|
}
|
|
context.approximateLength += 4;
|
|
return ts.factory.createThisTypeNode();
|
|
}
|
|
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.factory.createTypeReferenceNode(ts.factory.createIdentifier(""), typeArgumentNodes);
|
|
if (ts.length(typeArgumentNodes) === 1 && type.aliasSymbol === globalArrayType.symbol) {
|
|
return ts.factory.createArrayTypeNode(typeArgumentNodes[0]);
|
|
}
|
|
return symbolToTypeNode(type.aliasSymbol, context, 788968, typeArgumentNodes);
|
|
}
|
|
var objectFlags = ts.getObjectFlags(type);
|
|
if (objectFlags & 4) {
|
|
ts.Debug.assert(!!(type.flags & 524288));
|
|
return type.node ? visitAndTransformType(type, typeReferenceToTypeNode) : typeReferenceToTypeNode(type);
|
|
}
|
|
if (type.flags & 262144 || objectFlags & 3) {
|
|
if (type.flags & 262144 && ts.contains(context.inferTypeParameters, type)) {
|
|
context.approximateLength += (ts.symbolName(type.symbol).length + 6);
|
|
var constraintNode = void 0;
|
|
var constraint = getConstraintOfTypeParameter(type);
|
|
if (constraint) {
|
|
var inferredConstraint = getInferredTypeParameterConstraint(type, true);
|
|
if (!(inferredConstraint && isTypeIdenticalTo(constraint, inferredConstraint))) {
|
|
context.approximateLength += 9;
|
|
constraintNode = constraint && typeToTypeNodeHelper(constraint, context);
|
|
}
|
|
}
|
|
return ts.factory.createInferTypeNode(typeParameterToDeclarationWithConstraint(type, context, constraintNode));
|
|
}
|
|
if (context.flags & 4 &&
|
|
type.flags & 262144 &&
|
|
!isTypeSymbolAccessible(type.symbol, context.enclosingDeclaration)) {
|
|
var name_2 = typeParameterToName(type, context);
|
|
context.approximateLength += ts.idText(name_2).length;
|
|
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(ts.idText(name_2)), undefined);
|
|
}
|
|
if (type.symbol) {
|
|
return symbolToTypeNode(type.symbol, context, 788968);
|
|
}
|
|
var name = (type === markerSuperTypeForCheck || type === markerSubTypeForCheck) && varianceTypeParameter && varianceTypeParameter.symbol ?
|
|
(type === markerSubTypeForCheck ? "sub-" : "super-") + ts.symbolName(varianceTypeParameter.symbol) : "?";
|
|
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(name), undefined);
|
|
}
|
|
if (type.flags & 1048576 && type.origin) {
|
|
type = type.origin;
|
|
}
|
|
if (type.flags & (1048576 | 2097152)) {
|
|
var types = type.flags & 1048576 ? formatUnionTypes(type.types) : type.types;
|
|
if (ts.length(types) === 1) {
|
|
return typeToTypeNodeHelper(types[0], context);
|
|
}
|
|
var typeNodes = mapToTypeNodes(types, context, true);
|
|
if (typeNodes && typeNodes.length > 0) {
|
|
return type.flags & 1048576 ? ts.factory.createUnionTypeNode(typeNodes) : ts.factory.createIntersectionTypeNode(typeNodes);
|
|
}
|
|
else {
|
|
if (!context.encounteredError && !(context.flags & 262144)) {
|
|
context.encounteredError = true;
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
if (objectFlags & (16 | 32)) {
|
|
ts.Debug.assert(!!(type.flags & 524288));
|
|
return createAnonymousTypeNode(type);
|
|
}
|
|
if (type.flags & 4194304) {
|
|
var indexedType = type.type;
|
|
context.approximateLength += 6;
|
|
var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
|
|
return ts.factory.createTypeOperatorNode(140, indexTypeNode);
|
|
}
|
|
if (type.flags & 134217728) {
|
|
var texts_1 = type.texts;
|
|
var types_1 = type.types;
|
|
var templateHead = ts.factory.createTemplateHead(texts_1[0]);
|
|
var templateSpans = ts.factory.createNodeArray(ts.map(types_1, function (t, i) { return ts.factory.createTemplateLiteralTypeSpan(typeToTypeNodeHelper(t, context), (i < types_1.length - 1 ? ts.factory.createTemplateMiddle : ts.factory.createTemplateTail)(texts_1[i + 1])); }));
|
|
context.approximateLength += 2;
|
|
return ts.factory.createTemplateLiteralType(templateHead, templateSpans);
|
|
}
|
|
if (type.flags & 268435456) {
|
|
var typeNode = typeToTypeNodeHelper(type.type, context);
|
|
return symbolToTypeNode(type.symbol, context, 788968, [typeNode]);
|
|
}
|
|
if (type.flags & 8388608) {
|
|
var objectTypeNode = typeToTypeNodeHelper(type.objectType, context);
|
|
var indexTypeNode = typeToTypeNodeHelper(type.indexType, context);
|
|
context.approximateLength += 2;
|
|
return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
|
|
}
|
|
if (type.flags & 16777216) {
|
|
return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
|
|
}
|
|
if (type.flags & 33554432) {
|
|
return typeToTypeNodeHelper(type.baseType, context);
|
|
}
|
|
return ts.Debug.fail("Should be unreachable.");
|
|
function conditionalTypeToTypeNode(type) {
|
|
var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
|
|
context.approximateLength += 15;
|
|
if (context.flags & 4 && type.root.isDistributive && !(type.checkType.flags & 262144)) {
|
|
var newParam = createTypeParameter(createSymbol(262144, "T"));
|
|
var name = typeParameterToName(newParam, context);
|
|
var newTypeVariable = ts.factory.createTypeReferenceNode(name);
|
|
context.approximateLength += 37;
|
|
var newMapper = prependTypeMapping(type.root.checkType, newParam, type.mapper);
|
|
var saveInferTypeParameters_1 = context.inferTypeParameters;
|
|
context.inferTypeParameters = type.root.inferTypeParameters;
|
|
var extendsTypeNode_1 = typeToTypeNodeHelper(instantiateType(type.root.extendsType, newMapper), context);
|
|
context.inferTypeParameters = saveInferTypeParameters_1;
|
|
var trueTypeNode_1 = typeToTypeNodeOrCircularityElision(instantiateType(getTypeFromTypeNode(type.root.node.trueType), newMapper));
|
|
var falseTypeNode_1 = typeToTypeNodeOrCircularityElision(instantiateType(getTypeFromTypeNode(type.root.node.falseType), newMapper));
|
|
return ts.factory.createConditionalTypeNode(checkTypeNode, ts.factory.createInferTypeNode(ts.factory.createTypeParameterDeclaration(undefined, ts.factory.cloneNode(newTypeVariable.typeName))), ts.factory.createConditionalTypeNode(ts.factory.createTypeReferenceNode(ts.factory.cloneNode(name)), typeToTypeNodeHelper(type.checkType, context), ts.factory.createConditionalTypeNode(newTypeVariable, extendsTypeNode_1, trueTypeNode_1, falseTypeNode_1), ts.factory.createKeywordTypeNode(143)), ts.factory.createKeywordTypeNode(143));
|
|
}
|
|
var saveInferTypeParameters = context.inferTypeParameters;
|
|
context.inferTypeParameters = type.root.inferTypeParameters;
|
|
var extendsTypeNode = typeToTypeNodeHelper(type.extendsType, context);
|
|
context.inferTypeParameters = saveInferTypeParameters;
|
|
var trueTypeNode = typeToTypeNodeOrCircularityElision(getTrueTypeFromConditionalType(type));
|
|
var falseTypeNode = typeToTypeNodeOrCircularityElision(getFalseTypeFromConditionalType(type));
|
|
return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
|
|
}
|
|
function typeToTypeNodeOrCircularityElision(type) {
|
|
var _a, _b, _c;
|
|
if (type.flags & 1048576) {
|
|
if ((_a = context.visitedTypes) === null || _a === void 0 ? void 0 : _a.has(getTypeId(type))) {
|
|
if (!(context.flags & 131072)) {
|
|
context.encounteredError = true;
|
|
(_c = (_b = context.tracker) === null || _b === void 0 ? void 0 : _b.reportCyclicStructureError) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
}
|
|
return createElidedInformationPlaceholder(context);
|
|
}
|
|
return visitAndTransformType(type, function (type) { return typeToTypeNodeHelper(type, context); });
|
|
}
|
|
return typeToTypeNodeHelper(type, context);
|
|
}
|
|
function isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type) {
|
|
return isMappedTypeWithKeyofConstraintDeclaration(type)
|
|
&& !(getModifiersTypeFromMappedType(type).flags & 262144);
|
|
}
|
|
function createMappedTypeNodeFromType(type) {
|
|
ts.Debug.assert(!!(type.flags & 524288));
|
|
var readonlyToken = type.declaration.readonlyToken ? ts.factory.createToken(type.declaration.readonlyToken.kind) : undefined;
|
|
var questionToken = type.declaration.questionToken ? ts.factory.createToken(type.declaration.questionToken.kind) : undefined;
|
|
var appropriateConstraintTypeNode;
|
|
var newTypeVariable;
|
|
if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
|
|
if (isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type) && context.flags & 4) {
|
|
var newParam = createTypeParameter(createSymbol(262144, "T"));
|
|
var name = typeParameterToName(newParam, context);
|
|
newTypeVariable = ts.factory.createTypeReferenceNode(name);
|
|
}
|
|
appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(140, newTypeVariable || typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
|
|
}
|
|
else {
|
|
appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
|
|
}
|
|
var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
|
|
var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
|
|
var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4)), context);
|
|
var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode, undefined);
|
|
context.approximateLength += 10;
|
|
var result = ts.setEmitFlags(mappedTypeNode, 1);
|
|
if (isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type) && context.flags & 4) {
|
|
var originalConstraint = instantiateType(getConstraintOfTypeParameter(getTypeFromTypeNode(type.declaration.typeParameter.constraint.type)) || unknownType, type.mapper);
|
|
return ts.factory.createConditionalTypeNode(typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context), ts.factory.createInferTypeNode(ts.factory.createTypeParameterDeclaration(undefined, ts.factory.cloneNode(newTypeVariable.typeName), originalConstraint.flags & 2 ? undefined : typeToTypeNodeHelper(originalConstraint, context))), result, ts.factory.createKeywordTypeNode(143));
|
|
}
|
|
return result;
|
|
}
|
|
function createAnonymousTypeNode(type) {
|
|
var _a;
|
|
var typeId = type.id;
|
|
var symbol = type.symbol;
|
|
if (symbol) {
|
|
var isInstanceType = isClassInstanceSide(type) ? 788968 : 111551;
|
|
if (isJSConstructor(symbol.valueDeclaration)) {
|
|
return symbolToTypeNode(symbol, context, isInstanceType);
|
|
}
|
|
else if (symbol.flags & 32
|
|
&& !getBaseTypeVariableOfClass(symbol)
|
|
&& !(symbol.valueDeclaration && ts.isClassLike(symbol.valueDeclaration) && context.flags & 2048 && (!ts.isClassDeclaration(symbol.valueDeclaration) || isSymbolAccessible(symbol, context.enclosingDeclaration, isInstanceType, false).accessibility !== 0)) ||
|
|
symbol.flags & (384 | 512) ||
|
|
shouldWriteTypeOfFunctionSymbol()) {
|
|
return symbolToTypeNode(symbol, context, isInstanceType);
|
|
}
|
|
else if ((_a = context.visitedTypes) === null || _a === void 0 ? void 0 : _a.has(typeId)) {
|
|
var typeAlias = getTypeAliasForTypeLiteral(type);
|
|
if (typeAlias) {
|
|
return symbolToTypeNode(typeAlias, context, 788968);
|
|
}
|
|
else {
|
|
return createElidedInformationPlaceholder(context);
|
|
}
|
|
}
|
|
else {
|
|
return visitAndTransformType(type, createTypeNodeFromObjectType);
|
|
}
|
|
}
|
|
else {
|
|
return createTypeNodeFromObjectType(type);
|
|
}
|
|
function shouldWriteTypeOfFunctionSymbol() {
|
|
var _a;
|
|
var isStaticMethodSymbol = !!(symbol.flags & 8192) &&
|
|
ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
|
|
var isNonLocalFunctionSymbol = !!(symbol.flags & 16) &&
|
|
(symbol.parent ||
|
|
ts.forEach(symbol.declarations, function (declaration) {
|
|
return declaration.parent.kind === 305 || declaration.parent.kind === 262;
|
|
}));
|
|
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
|
|
return (!!(context.flags & 4096) || ((_a = context.visitedTypes) === null || _a === void 0 ? void 0 : _a.has(typeId))) &&
|
|
(!(context.flags & 8) || isValueSymbolAccessible(symbol, context.enclosingDeclaration));
|
|
}
|
|
}
|
|
}
|
|
function visitAndTransformType(type, transform) {
|
|
var _a, _b;
|
|
var typeId = type.id;
|
|
var isConstructorObject = ts.getObjectFlags(type) & 16 && type.symbol && type.symbol.flags & 32;
|
|
var id = ts.getObjectFlags(type) & 4 && type.node ? "N" + getNodeId(type.node) :
|
|
type.flags & 16777216 ? "N" + getNodeId(type.root.node) :
|
|
type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
|
|
undefined;
|
|
if (!context.visitedTypes) {
|
|
context.visitedTypes = new ts.Set();
|
|
}
|
|
if (id && !context.symbolDepth) {
|
|
context.symbolDepth = new ts.Map();
|
|
}
|
|
var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
|
|
var key = "".concat(getTypeId(type), "|").concat(context.flags);
|
|
if (links) {
|
|
links.serializedTypes || (links.serializedTypes = new ts.Map());
|
|
}
|
|
var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
|
|
if (cachedResult) {
|
|
if (cachedResult.truncating) {
|
|
context.truncating = true;
|
|
}
|
|
context.approximateLength += cachedResult.addedLength;
|
|
return deepCloneOrReuseNode(cachedResult);
|
|
}
|
|
var depth;
|
|
if (id) {
|
|
depth = context.symbolDepth.get(id) || 0;
|
|
if (depth > 10) {
|
|
return createElidedInformationPlaceholder(context);
|
|
}
|
|
context.symbolDepth.set(id, depth + 1);
|
|
}
|
|
context.visitedTypes.add(typeId);
|
|
var startLength = context.approximateLength;
|
|
var result = transform(type);
|
|
var addedLength = context.approximateLength - startLength;
|
|
if (!context.reportedDiagnostic && !context.encounteredError) {
|
|
if (context.truncating) {
|
|
result.truncating = true;
|
|
}
|
|
result.addedLength = addedLength;
|
|
(_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
|
|
}
|
|
context.visitedTypes.delete(typeId);
|
|
if (id) {
|
|
context.symbolDepth.set(id, depth);
|
|
}
|
|
return result;
|
|
function deepCloneOrReuseNode(node) {
|
|
if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
|
|
return node;
|
|
}
|
|
return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext, deepCloneOrReuseNodes)), node);
|
|
}
|
|
function deepCloneOrReuseNodes(nodes, visitor, test, start, count) {
|
|
if (nodes && nodes.length === 0) {
|
|
return ts.setTextRange(ts.factory.createNodeArray(undefined, nodes.hasTrailingComma), nodes);
|
|
}
|
|
return ts.visitNodes(nodes, visitor, test, start, count);
|
|
}
|
|
}
|
|
function createTypeNodeFromObjectType(type) {
|
|
if (isGenericMappedType(type) || type.containsError) {
|
|
return createMappedTypeNodeFromType(type);
|
|
}
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
if (!resolved.properties.length && !resolved.indexInfos.length) {
|
|
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
|
|
context.approximateLength += 2;
|
|
return ts.setEmitFlags(ts.factory.createTypeLiteralNode(undefined), 1);
|
|
}
|
|
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
|
|
var signature = resolved.callSignatures[0];
|
|
var signatureNode = signatureToSignatureDeclarationHelper(signature, 179, context);
|
|
return signatureNode;
|
|
}
|
|
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
|
|
var signature = resolved.constructSignatures[0];
|
|
var signatureNode = signatureToSignatureDeclarationHelper(signature, 180, context);
|
|
return signatureNode;
|
|
}
|
|
}
|
|
var abstractSignatures = ts.filter(resolved.constructSignatures, function (signature) { return !!(signature.flags & 4); });
|
|
if (ts.some(abstractSignatures)) {
|
|
var types = ts.map(abstractSignatures, getOrCreateTypeFromSignature);
|
|
var typeElementCount = resolved.callSignatures.length +
|
|
(resolved.constructSignatures.length - abstractSignatures.length) +
|
|
resolved.indexInfos.length +
|
|
(context.flags & 2048 ?
|
|
ts.countWhere(resolved.properties, function (p) { return !(p.flags & 4194304); }) :
|
|
ts.length(resolved.properties));
|
|
if (typeElementCount) {
|
|
types.push(getResolvedTypeWithoutAbstractConstructSignatures(resolved));
|
|
}
|
|
return typeToTypeNodeHelper(getIntersectionType(types), context);
|
|
}
|
|
var savedFlags = context.flags;
|
|
context.flags |= 4194304;
|
|
var members = createTypeNodesFromResolvedType(resolved);
|
|
context.flags = savedFlags;
|
|
var typeLiteralNode = ts.factory.createTypeLiteralNode(members);
|
|
context.approximateLength += 2;
|
|
ts.setEmitFlags(typeLiteralNode, (context.flags & 1024) ? 0 : 1);
|
|
return typeLiteralNode;
|
|
}
|
|
function typeReferenceToTypeNode(type) {
|
|
var typeArguments = getTypeArguments(type);
|
|
if (type.target === globalArrayType || type.target === globalReadonlyArrayType) {
|
|
if (context.flags & 2) {
|
|
var typeArgumentNode = typeToTypeNodeHelper(typeArguments[0], context);
|
|
return ts.factory.createTypeReferenceNode(type.target === globalArrayType ? "Array" : "ReadonlyArray", [typeArgumentNode]);
|
|
}
|
|
var elementType = typeToTypeNodeHelper(typeArguments[0], context);
|
|
var arrayType = ts.factory.createArrayTypeNode(elementType);
|
|
return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(145, arrayType);
|
|
}
|
|
else if (type.target.objectFlags & 8) {
|
|
typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2)); });
|
|
if (typeArguments.length > 0) {
|
|
var arity = getTypeReferenceArity(type);
|
|
var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
|
|
if (tupleConstituentNodes) {
|
|
if (type.target.labeledElementDeclarations) {
|
|
for (var i = 0; i < tupleConstituentNodes.length; i++) {
|
|
var flags = type.target.elementFlags[i];
|
|
tupleConstituentNodes[i] = ts.factory.createNamedTupleMember(flags & 12 ? ts.factory.createToken(25) : undefined, ts.factory.createIdentifier(ts.unescapeLeadingUnderscores(getTupleElementLabel(type.target.labeledElementDeclarations[i]))), flags & 2 ? ts.factory.createToken(57) : undefined, flags & 4 ? ts.factory.createArrayTypeNode(tupleConstituentNodes[i]) :
|
|
tupleConstituentNodes[i]);
|
|
}
|
|
}
|
|
else {
|
|
for (var i = 0; i < Math.min(arity, tupleConstituentNodes.length); i++) {
|
|
var flags = type.target.elementFlags[i];
|
|
tupleConstituentNodes[i] =
|
|
flags & 12 ? ts.factory.createRestTypeNode(flags & 4 ? ts.factory.createArrayTypeNode(tupleConstituentNodes[i]) : tupleConstituentNodes[i]) :
|
|
flags & 2 ? ts.factory.createOptionalTypeNode(tupleConstituentNodes[i]) :
|
|
tupleConstituentNodes[i];
|
|
}
|
|
}
|
|
var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1);
|
|
return type.target.readonly ? ts.factory.createTypeOperatorNode(145, tupleTypeNode) : tupleTypeNode;
|
|
}
|
|
}
|
|
if (context.encounteredError || (context.flags & 524288)) {
|
|
var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1);
|
|
return type.target.readonly ? ts.factory.createTypeOperatorNode(145, tupleTypeNode) : tupleTypeNode;
|
|
}
|
|
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_2 = outerTypeParameters.length;
|
|
while (i < length_2) {
|
|
var start = i;
|
|
var parent = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
|
|
do {
|
|
i++;
|
|
} while (i < length_2 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent);
|
|
if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) {
|
|
var typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context);
|
|
var flags_3 = context.flags;
|
|
context.flags |= 16;
|
|
var ref = symbolToTypeNode(parent, context, 788968, typeArgumentSlice);
|
|
context.flags = flags_3;
|
|
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, 788968, typeArgumentNodes);
|
|
context.flags = flags;
|
|
return !resultType ? finalRef : appendReferenceToType(resultType, finalRef);
|
|
}
|
|
}
|
|
function appendReferenceToType(root, ref) {
|
|
if (ts.isImportTypeNode(root)) {
|
|
var typeArguments = root.typeArguments;
|
|
var qualifier = root.qualifier;
|
|
if (qualifier) {
|
|
if (ts.isIdentifier(qualifier)) {
|
|
qualifier = ts.factory.updateIdentifier(qualifier, typeArguments);
|
|
}
|
|
else {
|
|
qualifier = ts.factory.updateQualifiedName(qualifier, qualifier.left, ts.factory.updateIdentifier(qualifier.right, typeArguments));
|
|
}
|
|
}
|
|
typeArguments = ref.typeArguments;
|
|
var ids = getAccessStack(ref);
|
|
for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {
|
|
var id = ids_1[_i];
|
|
qualifier = qualifier ? ts.factory.createQualifiedName(qualifier, id) : id;
|
|
}
|
|
return ts.factory.updateImportTypeNode(root, root.argument, root.assertions, qualifier, typeArguments, root.isTypeOf);
|
|
}
|
|
else {
|
|
var typeArguments = root.typeArguments;
|
|
var typeName = root.typeName;
|
|
if (ts.isIdentifier(typeName)) {
|
|
typeName = ts.factory.updateIdentifier(typeName, typeArguments);
|
|
}
|
|
else {
|
|
typeName = ts.factory.updateQualifiedName(typeName, typeName.left, ts.factory.updateIdentifier(typeName.right, typeArguments));
|
|
}
|
|
typeArguments = ref.typeArguments;
|
|
var ids = getAccessStack(ref);
|
|
for (var _a = 0, ids_2 = ids; _a < ids_2.length; _a++) {
|
|
var id = ids_2[_a];
|
|
typeName = ts.factory.createQualifiedName(typeName, id);
|
|
}
|
|
return ts.factory.updateTypeReferenceNode(root, typeName, typeArguments);
|
|
}
|
|
}
|
|
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) {
|
|
if (checkTruncationLength(context)) {
|
|
return [ts.factory.createPropertySignature(undefined, "...", undefined, undefined)];
|
|
}
|
|
var typeElements = [];
|
|
for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
|
|
var signature = _a[_i];
|
|
typeElements.push(signatureToSignatureDeclarationHelper(signature, 174, context));
|
|
}
|
|
for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
|
|
var signature = _c[_b];
|
|
if (signature.flags & 4)
|
|
continue;
|
|
typeElements.push(signatureToSignatureDeclarationHelper(signature, 175, context));
|
|
}
|
|
for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
|
|
var info = _e[_d];
|
|
typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 ? createElidedInformationPlaceholder(context) : undefined));
|
|
}
|
|
var properties = resolvedType.properties;
|
|
if (!properties) {
|
|
return typeElements;
|
|
}
|
|
var i = 0;
|
|
for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
|
|
var propertySymbol = properties_1[_f];
|
|
i++;
|
|
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));
|
|
}
|
|
}
|
|
if (checkTruncationLength(context) && (i + 2 < properties.length - 1)) {
|
|
typeElements.push(ts.factory.createPropertySignature(undefined, "... ".concat(properties.length - i, " more ..."), undefined, undefined));
|
|
addPropertyToElementList(properties[properties.length - 1], context, typeElements);
|
|
break;
|
|
}
|
|
addPropertyToElementList(propertySymbol, context, typeElements);
|
|
}
|
|
return typeElements.length ? typeElements : undefined;
|
|
}
|
|
}
|
|
function createElidedInformationPlaceholder(context) {
|
|
context.approximateLength += 3;
|
|
if (!(context.flags & 1)) {
|
|
return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), undefined);
|
|
}
|
|
return ts.factory.createKeywordTypeNode(130);
|
|
}
|
|
function shouldUsePlaceholderForProperty(propertySymbol, context) {
|
|
var _a;
|
|
return !!(ts.getCheckFlags(propertySymbol) & 8192)
|
|
&& (ts.contains(context.reverseMappedStack, propertySymbol)
|
|
|| (((_a = context.reverseMappedStack) === null || _a === void 0 ? void 0 : _a[0])
|
|
&& !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16)));
|
|
}
|
|
function addPropertyToElementList(propertySymbol, context, typeElements) {
|
|
var _a, _b;
|
|
var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192);
|
|
var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
|
|
anyType : getNonMissingTypeOfSymbol(propertySymbol);
|
|
var saveEnclosingDeclaration = context.enclosingDeclaration;
|
|
context.enclosingDeclaration = undefined;
|
|
if (context.tracker.trackSymbol && isLateBoundName(propertySymbol.escapedName)) {
|
|
if (propertySymbol.declarations) {
|
|
var decl = ts.first(propertySymbol.declarations);
|
|
if (hasLateBindableName(decl)) {
|
|
if (ts.isBinaryExpression(decl)) {
|
|
var name = ts.getNameOfDeclaration(decl);
|
|
if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
|
|
trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
|
|
}
|
|
}
|
|
else {
|
|
trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
|
|
}
|
|
}
|
|
}
|
|
else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
|
|
context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
|
|
}
|
|
}
|
|
context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
|
|
var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
|
|
context.enclosingDeclaration = saveEnclosingDeclaration;
|
|
context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
|
|
var optionalToken = propertySymbol.flags & 16777216 ? ts.factory.createToken(57) : undefined;
|
|
if (propertySymbol.flags & (16 | 8192) && !getPropertiesOfObjectType(propertyType).length && !isReadonlySymbol(propertySymbol)) {
|
|
var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768); }), 0);
|
|
for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
|
|
var signature = signatures_1[_i];
|
|
var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 168, context, { name: propertyName, questionToken: optionalToken });
|
|
typeElements.push(preserveCommentsOn(methodDeclaration));
|
|
}
|
|
}
|
|
else {
|
|
var propertyTypeNode = void 0;
|
|
if (shouldUsePlaceholderForProperty(propertySymbol, context)) {
|
|
propertyTypeNode = createElidedInformationPlaceholder(context);
|
|
}
|
|
else {
|
|
if (propertyIsReverseMapped) {
|
|
context.reverseMappedStack || (context.reverseMappedStack = []);
|
|
context.reverseMappedStack.push(propertySymbol);
|
|
}
|
|
propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(130);
|
|
if (propertyIsReverseMapped) {
|
|
context.reverseMappedStack.pop();
|
|
}
|
|
}
|
|
var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(145)] : undefined;
|
|
if (modifiers) {
|
|
context.approximateLength += 9;
|
|
}
|
|
var propertySignature = ts.factory.createPropertySignature(modifiers, propertyName, optionalToken, propertyTypeNode);
|
|
typeElements.push(preserveCommentsOn(propertySignature));
|
|
}
|
|
function preserveCommentsOn(node) {
|
|
var _a;
|
|
if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 347; })) {
|
|
var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 347; });
|
|
var commentText = ts.getTextOfJSDocComment(d.comment);
|
|
if (commentText) {
|
|
ts.setSyntheticLeadingComments(node, [{ kind: 3, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
|
|
}
|
|
}
|
|
else if (propertySymbol.valueDeclaration) {
|
|
ts.setCommentRange(node, propertySymbol.valueDeclaration);
|
|
}
|
|
return node;
|
|
}
|
|
}
|
|
function mapToTypeNodes(types, context, isBareList) {
|
|
if (ts.some(types)) {
|
|
if (checkTruncationLength(context)) {
|
|
if (!isBareList) {
|
|
return [ts.factory.createTypeReferenceNode("...", undefined)];
|
|
}
|
|
else if (types.length > 2) {
|
|
return [
|
|
typeToTypeNodeHelper(types[0], context),
|
|
ts.factory.createTypeReferenceNode("... ".concat(types.length - 2, " more ..."), undefined),
|
|
typeToTypeNodeHelper(types[types.length - 1], context)
|
|
];
|
|
}
|
|
}
|
|
var mayHaveNameCollisions = !(context.flags & 64);
|
|
var seenNames = mayHaveNameCollisions ? ts.createUnderscoreEscapedMultiMap() : undefined;
|
|
var result_5 = [];
|
|
var i = 0;
|
|
for (var _i = 0, types_2 = types; _i < types_2.length; _i++) {
|
|
var type = types_2[_i];
|
|
i++;
|
|
if (checkTruncationLength(context) && (i + 2 < types.length - 1)) {
|
|
result_5.push(ts.factory.createTypeReferenceNode("... ".concat(types.length - i, " more ..."), undefined));
|
|
var typeNode_1 = typeToTypeNodeHelper(types[types.length - 1], context);
|
|
if (typeNode_1) {
|
|
result_5.push(typeNode_1);
|
|
}
|
|
break;
|
|
}
|
|
context.approximateLength += 2;
|
|
var typeNode = typeToTypeNodeHelper(type, context);
|
|
if (typeNode) {
|
|
result_5.push(typeNode);
|
|
if (seenNames && ts.isIdentifierTypeReference(typeNode)) {
|
|
seenNames.add(typeNode.typeName.escapedText, [type, result_5.length - 1]);
|
|
}
|
|
}
|
|
}
|
|
if (seenNames) {
|
|
var saveContextFlags = context.flags;
|
|
context.flags |= 64;
|
|
seenNames.forEach(function (types) {
|
|
if (!ts.arrayIsHomogeneous(types, function (_a, _b) {
|
|
var a = _a[0];
|
|
var b = _b[0];
|
|
return typesAreSameReference(a, b);
|
|
})) {
|
|
for (var _i = 0, types_3 = types; _i < types_3.length; _i++) {
|
|
var _a = types_3[_i], type = _a[0], resultIndex = _a[1];
|
|
result_5[resultIndex] = typeToTypeNodeHelper(type, context);
|
|
}
|
|
}
|
|
});
|
|
context.flags = saveContextFlags;
|
|
}
|
|
return result_5;
|
|
}
|
|
}
|
|
function typesAreSameReference(a, b) {
|
|
return a === b
|
|
|| !!a.symbol && a.symbol === b.symbol
|
|
|| !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
|
|
}
|
|
function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
|
|
var name = ts.getNameFromIndexInfo(indexInfo) || "x";
|
|
var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
|
|
var indexingParameter = ts.factory.createParameterDeclaration(undefined, undefined, name, undefined, indexerTypeNode, undefined);
|
|
if (!typeNode) {
|
|
typeNode = typeToTypeNodeHelper(indexInfo.type || anyType, context);
|
|
}
|
|
if (!indexInfo.type && !(context.flags & 2097152)) {
|
|
context.encounteredError = true;
|
|
}
|
|
context.approximateLength += (name.length + 4);
|
|
return ts.factory.createIndexSignature(indexInfo.isReadonly ? [ts.factory.createToken(145)] : undefined, [indexingParameter], typeNode);
|
|
}
|
|
function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
|
|
var _a, _b, _c, _d;
|
|
var suppressAny = context.flags & 256;
|
|
if (suppressAny)
|
|
context.flags &= ~256;
|
|
context.approximateLength += 3;
|
|
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 expandedParams = getExpandedParameters(signature, true)[0];
|
|
var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 171, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
|
|
var thisParameter = context.flags & 33554432 ? undefined : tryGetThisParameterDeclaration(signature, context);
|
|
if (thisParameter) {
|
|
parameters.unshift(thisParameter);
|
|
}
|
|
var returnTypeNode;
|
|
var typePredicate = getTypePredicateOfSignature(signature);
|
|
if (typePredicate) {
|
|
var assertsModifier = typePredicate.kind === 2 || typePredicate.kind === 3 ?
|
|
ts.factory.createToken(128) :
|
|
undefined;
|
|
var parameterName = typePredicate.kind === 1 || typePredicate.kind === 3 ?
|
|
ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216) :
|
|
ts.factory.createThisTypeNode();
|
|
var typeNode = typePredicate.type && typeToTypeNodeHelper(typePredicate.type, context);
|
|
returnTypeNode = ts.factory.createTypePredicateNode(assertsModifier, parameterName, typeNode);
|
|
}
|
|
else {
|
|
var returnType = getReturnTypeOfSignature(signature);
|
|
if (returnType && !(suppressAny && isTypeAny(returnType))) {
|
|
returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
|
|
}
|
|
else if (!suppressAny) {
|
|
returnTypeNode = ts.factory.createKeywordTypeNode(130);
|
|
}
|
|
}
|
|
var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
|
|
if ((kind === 180) && signature.flags & 4) {
|
|
var flags = ts.modifiersToFlags(modifiers);
|
|
modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128);
|
|
}
|
|
var node = kind === 174 ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
|
|
kind === 175 ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
|
|
kind === 168 ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
|
|
kind === 169 ? ts.factory.createMethodDeclaration(modifiers, undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), undefined, typeParameters, parameters, returnTypeNode, undefined) :
|
|
kind === 171 ? ts.factory.createConstructorDeclaration(modifiers, parameters, undefined) :
|
|
kind === 172 ? ts.factory.createGetAccessorDeclaration(modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, undefined) :
|
|
kind === 173 ? ts.factory.createSetAccessorDeclaration(modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, undefined) :
|
|
kind === 176 ? ts.factory.createIndexSignature(modifiers, parameters, returnTypeNode) :
|
|
kind === 317 ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
|
|
kind === 179 ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
|
|
kind === 180 ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
|
|
kind === 256 ? ts.factory.createFunctionDeclaration(modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, undefined) :
|
|
kind === 213 ? ts.factory.createFunctionExpression(modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
|
|
kind === 214 ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, undefined, ts.factory.createBlock([])) :
|
|
ts.Debug.assertNever(kind);
|
|
if (typeArguments) {
|
|
node.typeArguments = ts.factory.createNodeArray(typeArguments);
|
|
}
|
|
return node;
|
|
}
|
|
function tryGetThisParameterDeclaration(signature, context) {
|
|
if (signature.thisParameter) {
|
|
return symbolToParameterDeclaration(signature.thisParameter, context);
|
|
}
|
|
if (signature.declaration) {
|
|
var thisTag = ts.getJSDocThisTag(signature.declaration);
|
|
if (thisTag && thisTag.typeExpression) {
|
|
return ts.factory.createParameterDeclaration(undefined, undefined, "this", undefined, typeToTypeNodeHelper(getTypeFromTypeNode(thisTag.typeExpression), context));
|
|
}
|
|
}
|
|
}
|
|
function typeParameterToDeclarationWithConstraint(type, context, constraintNode) {
|
|
var savedContextFlags = context.flags;
|
|
context.flags &= ~512;
|
|
var modifiers = ts.factory.createModifiersFromModifierFlags(getVarianceModifiers(type));
|
|
var name = typeParameterToName(type, context);
|
|
var defaultParameter = getDefaultFromTypeParameter(type);
|
|
var defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context);
|
|
context.flags = savedContextFlags;
|
|
return ts.factory.createTypeParameterDeclaration(modifiers, name, constraintNode, defaultParameterNode);
|
|
}
|
|
function typeParameterToDeclaration(type, context, constraint) {
|
|
if (constraint === void 0) { constraint = getConstraintOfTypeParameter(type); }
|
|
var constraintNode = constraint && typeToTypeNodeHelper(constraint, context);
|
|
return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
|
|
}
|
|
function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
|
|
var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 164);
|
|
if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
|
|
parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 340);
|
|
}
|
|
var parameterType = getTypeOfSymbol(parameterSymbol);
|
|
if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
|
|
parameterType = getOptionalType(parameterType);
|
|
}
|
|
var parameterTypeNode = serializeTypeForDeclaration(context, parameterType, parameterSymbol, context.enclosingDeclaration, privateSymbolVisitor, bundledImports);
|
|
var modifiers = !(context.flags & 8192) && preserveModifierFlags && parameterDeclaration && ts.canHaveModifiers(parameterDeclaration) ? ts.map(ts.getModifiers(parameterDeclaration), ts.factory.cloneNode) : undefined;
|
|
var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768;
|
|
var dotDotDotToken = isRest ? ts.factory.createToken(25) : undefined;
|
|
var name = parameterDeclaration ? parameterDeclaration.name ?
|
|
parameterDeclaration.name.kind === 79 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216) :
|
|
parameterDeclaration.name.kind === 161 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216) :
|
|
cloneBindingName(parameterDeclaration.name) :
|
|
ts.symbolName(parameterSymbol) :
|
|
ts.symbolName(parameterSymbol);
|
|
var isOptional = parameterDeclaration && isOptionalParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 16384;
|
|
var questionToken = isOptional ? ts.factory.createToken(57) : undefined;
|
|
var parameterNode = ts.factory.createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, parameterTypeNode, undefined);
|
|
context.approximateLength += ts.symbolName(parameterSymbol).length + 3;
|
|
return parameterNode;
|
|
function cloneBindingName(node) {
|
|
return elideInitializerAndPropertyRenamingAndSetEmitFlags(node);
|
|
function elideInitializerAndPropertyRenamingAndSetEmitFlags(node) {
|
|
if (context.tracker.trackSymbol && ts.isComputedPropertyName(node) && isLateBindableName(node)) {
|
|
trackComputedName(node.expression, context.enclosingDeclaration, context);
|
|
}
|
|
var visited = ts.visitEachChild(node, elideInitializerAndPropertyRenamingAndSetEmitFlags, ts.nullTransformationContext, undefined, elideInitializerAndPropertyRenamingAndSetEmitFlags);
|
|
if (ts.isBindingElement(visited)) {
|
|
if (visited.propertyName && ts.isIdentifier(visited.propertyName) && ts.isIdentifier(visited.name)) {
|
|
visited = ts.factory.updateBindingElement(visited, visited.dotDotDotToken, undefined, visited.propertyName, undefined);
|
|
}
|
|
else {
|
|
visited = ts.factory.updateBindingElement(visited, visited.dotDotDotToken, visited.propertyName, visited.name, undefined);
|
|
}
|
|
}
|
|
if (!ts.nodeIsSynthesized(visited)) {
|
|
visited = ts.factory.cloneNode(visited);
|
|
}
|
|
return ts.setEmitFlags(visited, 1 | 16777216);
|
|
}
|
|
}
|
|
}
|
|
function trackComputedName(accessExpression, enclosingDeclaration, context) {
|
|
if (!context.tracker.trackSymbol)
|
|
return;
|
|
var firstIdentifier = ts.getFirstIdentifier(accessExpression);
|
|
var name = resolveName(firstIdentifier, firstIdentifier.escapedText, 111551 | 1048576, undefined, undefined, true);
|
|
if (name) {
|
|
context.tracker.trackSymbol(name, enclosingDeclaration, 111551);
|
|
}
|
|
}
|
|
function lookupSymbolChain(symbol, context, meaning, yieldModuleSymbol) {
|
|
context.tracker.trackSymbol(symbol, context.enclosingDeclaration, meaning);
|
|
return lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol);
|
|
}
|
|
function lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol) {
|
|
var chain;
|
|
var isTypeParameter = symbol.flags & 262144;
|
|
if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64) && !(context.flags & 134217728)) {
|
|
chain = ts.Debug.checkDefined(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 parentSpecifiers;
|
|
if (!accessibleSymbolChain ||
|
|
needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
|
|
var parents_1 = getContainersOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol, context.enclosingDeclaration, meaning);
|
|
if (ts.length(parents_1)) {
|
|
parentSpecifiers = parents_1.map(function (symbol) {
|
|
return ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)
|
|
? getSpecifierForModuleSymbol(symbol, context)
|
|
: undefined;
|
|
});
|
|
var indices = parents_1.map(function (_, i) { return i; });
|
|
indices.sort(sortByBestName);
|
|
var sortedParents = indices.map(function (i) { return parents_1[i]; });
|
|
for (var _i = 0, sortedParents_1 = sortedParents; _i < sortedParents_1.length; _i++) {
|
|
var parent = sortedParents_1[_i];
|
|
var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), false);
|
|
if (parentChain) {
|
|
if (parent.exports && parent.exports.get("export=") &&
|
|
getSymbolIfSameReference(parent.exports.get("export="), symbol)) {
|
|
accessibleSymbolChain = parentChain;
|
|
break;
|
|
}
|
|
accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent, symbol) || symbol]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (accessibleSymbolChain) {
|
|
return accessibleSymbolChain;
|
|
}
|
|
if (endOfChain ||
|
|
!(symbol.flags & (2048 | 4096))) {
|
|
if (!endOfChain && !yieldModuleSymbol && !!ts.forEach(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
|
|
return;
|
|
}
|
|
return [symbol];
|
|
}
|
|
function sortByBestName(a, b) {
|
|
var specifierA = parentSpecifiers[a];
|
|
var specifierB = parentSpecifiers[b];
|
|
if (specifierA && specifierB) {
|
|
var isBRelative = ts.pathIsRelative(specifierB);
|
|
if (ts.pathIsRelative(specifierA) === isBRelative) {
|
|
return ts.moduleSpecifiers.countPathComponents(specifierA) - ts.moduleSpecifiers.countPathComponents(specifierB);
|
|
}
|
|
if (isBRelative) {
|
|
return -1;
|
|
}
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
function typeParametersToTypeParameterDeclarations(symbol, context) {
|
|
var typeParameterNodes;
|
|
var targetSymbol = getTargetSymbol(symbol);
|
|
if (targetSymbol.flags & (32 | 64 | 524288)) {
|
|
typeParameterNodes = ts.factory.createNodeArray(ts.map(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), function (tp) { return typeParameterToDeclaration(tp, context); }));
|
|
}
|
|
return typeParameterNodes;
|
|
}
|
|
function lookupTypeParameterNodes(chain, index, context) {
|
|
var _a;
|
|
ts.Debug.assert(chain && 0 <= index && index < chain.length);
|
|
var symbol = chain[index];
|
|
var symbolId = getSymbolId(symbol);
|
|
if ((_a = context.typeParameterSymbolList) === null || _a === void 0 ? void 0 : _a.has(symbolId)) {
|
|
return undefined;
|
|
}
|
|
(context.typeParameterSymbolList || (context.typeParameterSymbolList = new ts.Set())).add(symbolId);
|
|
var typeParameterNodes;
|
|
if (context.flags & 512 && index < (chain.length - 1)) {
|
|
var parentSymbol = symbol;
|
|
var nextSymbol_1 = chain[index + 1];
|
|
if (ts.getCheckFlags(nextSymbol_1) & 1) {
|
|
var params = getTypeParametersOfClassOrInterface(parentSymbol.flags & 2097152 ? resolveAlias(parentSymbol) : parentSymbol);
|
|
typeParameterNodes = mapToTypeNodes(ts.map(params, function (t) { return getMappedType(t, nextSymbol_1.mapper); }), context);
|
|
}
|
|
else {
|
|
typeParameterNodes = typeParametersToTypeParameterDeclarations(symbol, context);
|
|
}
|
|
}
|
|
return typeParameterNodes;
|
|
}
|
|
function getTopmostIndexedAccessType(top) {
|
|
if (ts.isIndexedAccessTypeNode(top.objectType)) {
|
|
return getTopmostIndexedAccessType(top.objectType);
|
|
}
|
|
return top;
|
|
}
|
|
function getSpecifierForModuleSymbol(symbol, context, overrideImportMode) {
|
|
var _a;
|
|
var file = ts.getDeclarationOfKind(symbol, 305);
|
|
if (!file) {
|
|
var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
|
|
if (equivalentFileSymbol) {
|
|
file = ts.getDeclarationOfKind(equivalentFileSymbol, 305);
|
|
}
|
|
}
|
|
if (file && file.moduleName !== undefined) {
|
|
return file.moduleName;
|
|
}
|
|
if (!file) {
|
|
if (context.tracker.trackReferencedAmbientModule) {
|
|
var ambientDecls = ts.filter(symbol.declarations, ts.isAmbientModule);
|
|
if (ts.length(ambientDecls)) {
|
|
for (var _i = 0, _b = ambientDecls; _i < _b.length; _i++) {
|
|
var decl = _b[_i];
|
|
context.tracker.trackReferencedAmbientModule(decl, symbol);
|
|
}
|
|
}
|
|
}
|
|
if (ambientModuleSymbolRegex.test(symbol.escapedName)) {
|
|
return symbol.escapedName.substring(1, symbol.escapedName.length - 1);
|
|
}
|
|
}
|
|
if (!context.enclosingDeclaration || !context.tracker.moduleResolverHost) {
|
|
if (ambientModuleSymbolRegex.test(symbol.escapedName)) {
|
|
return symbol.escapedName.substring(1, symbol.escapedName.length - 1);
|
|
}
|
|
return ts.getSourceFileOfNode(ts.getNonAugmentationDeclaration(symbol)).fileName;
|
|
}
|
|
var contextFile = ts.getSourceFileOfNode(ts.getOriginalNode(context.enclosingDeclaration));
|
|
var resolutionMode = overrideImportMode || (contextFile === null || contextFile === void 0 ? void 0 : contextFile.impliedNodeFormat);
|
|
var cacheKey = getSpecifierCacheKey(contextFile.path, resolutionMode);
|
|
var links = getSymbolLinks(symbol);
|
|
var specifier = links.specifierCache && links.specifierCache.get(cacheKey);
|
|
if (!specifier) {
|
|
var isBundle_1 = !!ts.outFile(compilerOptions);
|
|
var moduleResolverHost = context.tracker.moduleResolverHost;
|
|
var specifierCompilerOptions = isBundle_1 ? __assign(__assign({}, compilerOptions), { baseUrl: moduleResolverHost.getCommonSourceDirectory() }) : compilerOptions;
|
|
specifier = ts.first(ts.moduleSpecifiers.getModuleSpecifiers(symbol, checker, specifierCompilerOptions, contextFile, moduleResolverHost, {
|
|
importModuleSpecifierPreference: isBundle_1 ? "non-relative" : "project-relative",
|
|
importModuleSpecifierEnding: isBundle_1 ? "minimal"
|
|
: resolutionMode === ts.ModuleKind.ESNext ? "js"
|
|
: undefined,
|
|
}, { overrideImportMode: overrideImportMode }));
|
|
(_a = links.specifierCache) !== null && _a !== void 0 ? _a : (links.specifierCache = new ts.Map());
|
|
links.specifierCache.set(cacheKey, specifier);
|
|
}
|
|
return specifier;
|
|
function getSpecifierCacheKey(path, mode) {
|
|
return mode === undefined ? path : "".concat(mode, "|").concat(path);
|
|
}
|
|
}
|
|
function symbolToEntityNameNode(symbol) {
|
|
var identifier = ts.factory.createIdentifier(ts.unescapeLeadingUnderscores(symbol.escapedName));
|
|
return symbol.parent ? ts.factory.createQualifiedName(symbolToEntityNameNode(symbol.parent), identifier) : identifier;
|
|
}
|
|
function symbolToTypeNode(symbol, context, meaning, overrideTypeArguments) {
|
|
var _a, _b, _c, _d;
|
|
var chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & 16384));
|
|
var isTypeOf = meaning === 111551;
|
|
if (ts.some(chain[0].declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
|
|
var nonRootParts = chain.length > 1 ? createAccessFromSymbolChain(chain, chain.length - 1, 1) : undefined;
|
|
var typeParameterNodes = overrideTypeArguments || lookupTypeParameterNodes(chain, 0, context);
|
|
var contextFile = ts.getSourceFileOfNode(ts.getOriginalNode(context.enclosingDeclaration));
|
|
var targetFile = ts.getSourceFileOfModule(chain[0]);
|
|
var specifier = void 0;
|
|
var assertion = void 0;
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.Node16 || ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeNext) {
|
|
if ((targetFile === null || targetFile === void 0 ? void 0 : targetFile.impliedNodeFormat) === ts.ModuleKind.ESNext && targetFile.impliedNodeFormat !== (contextFile === null || contextFile === void 0 ? void 0 : contextFile.impliedNodeFormat)) {
|
|
specifier = getSpecifierForModuleSymbol(chain[0], context, ts.ModuleKind.ESNext);
|
|
assertion = ts.factory.createImportTypeAssertionContainer(ts.factory.createAssertClause(ts.factory.createNodeArray([
|
|
ts.factory.createAssertEntry(ts.factory.createStringLiteral("resolution-mode"), ts.factory.createStringLiteral("import"))
|
|
])));
|
|
(_b = (_a = context.tracker).reportImportTypeNodeResolutionModeOverride) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
}
|
|
}
|
|
if (!specifier) {
|
|
specifier = getSpecifierForModuleSymbol(chain[0], context);
|
|
}
|
|
if (!(context.flags & 67108864) && ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.Classic && specifier.indexOf("/node_modules/") >= 0) {
|
|
var oldSpecifier = specifier;
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.Node16 || ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeNext) {
|
|
var swappedMode = (contextFile === null || contextFile === void 0 ? void 0 : contextFile.impliedNodeFormat) === ts.ModuleKind.ESNext ? ts.ModuleKind.CommonJS : ts.ModuleKind.ESNext;
|
|
specifier = getSpecifierForModuleSymbol(chain[0], context, swappedMode);
|
|
if (specifier.indexOf("/node_modules/") >= 0) {
|
|
specifier = oldSpecifier;
|
|
}
|
|
else {
|
|
assertion = ts.factory.createImportTypeAssertionContainer(ts.factory.createAssertClause(ts.factory.createNodeArray([
|
|
ts.factory.createAssertEntry(ts.factory.createStringLiteral("resolution-mode"), ts.factory.createStringLiteral(swappedMode === ts.ModuleKind.ESNext ? "import" : "require"))
|
|
])));
|
|
(_d = (_c = context.tracker).reportImportTypeNodeResolutionModeOverride) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
}
|
|
}
|
|
if (!assertion) {
|
|
context.encounteredError = true;
|
|
if (context.tracker.reportLikelyUnsafeImportRequiredError) {
|
|
context.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier);
|
|
}
|
|
}
|
|
}
|
|
var lit = ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(specifier));
|
|
if (context.tracker.trackExternalModuleSymbolOfImportTypeNode)
|
|
context.tracker.trackExternalModuleSymbolOfImportTypeNode(chain[0]);
|
|
context.approximateLength += specifier.length + 10;
|
|
if (!nonRootParts || ts.isEntityName(nonRootParts)) {
|
|
if (nonRootParts) {
|
|
var lastId = ts.isIdentifier(nonRootParts) ? nonRootParts : nonRootParts.right;
|
|
lastId.typeArguments = undefined;
|
|
}
|
|
return ts.factory.createImportTypeNode(lit, assertion, nonRootParts, typeParameterNodes, isTypeOf);
|
|
}
|
|
else {
|
|
var splitNode = getTopmostIndexedAccessType(nonRootParts);
|
|
var qualifier = splitNode.objectType.typeName;
|
|
return ts.factory.createIndexedAccessTypeNode(ts.factory.createImportTypeNode(lit, assertion, qualifier, typeParameterNodes, isTypeOf), splitNode.indexType);
|
|
}
|
|
}
|
|
var entityName = createAccessFromSymbolChain(chain, chain.length - 1, 0);
|
|
if (ts.isIndexedAccessTypeNode(entityName)) {
|
|
return entityName;
|
|
}
|
|
if (isTypeOf) {
|
|
return ts.factory.createTypeQueryNode(entityName);
|
|
}
|
|
else {
|
|
var lastId = ts.isIdentifier(entityName) ? entityName : entityName.right;
|
|
var lastTypeArgs = lastId.typeArguments;
|
|
lastId.typeArguments = undefined;
|
|
return ts.factory.createTypeReferenceNode(entityName, lastTypeArgs);
|
|
}
|
|
function createAccessFromSymbolChain(chain, index, stopper) {
|
|
var typeParameterNodes = index === (chain.length - 1) ? overrideTypeArguments : lookupTypeParameterNodes(chain, index, context);
|
|
var symbol = chain[index];
|
|
var parent = chain[index - 1];
|
|
var symbolName;
|
|
if (index === 0) {
|
|
context.flags |= 16777216;
|
|
symbolName = getNameOfSymbolAsWritten(symbol, context);
|
|
context.approximateLength += (symbolName ? symbolName.length : 0) + 1;
|
|
context.flags ^= 16777216;
|
|
}
|
|
else {
|
|
if (parent && getExportsOfSymbol(parent)) {
|
|
var exports_2 = getExportsOfSymbol(parent);
|
|
ts.forEachEntry(exports_2, function (ex, name) {
|
|
if (getSymbolIfSameReference(ex, symbol) && !isLateBoundName(name) && name !== "export=") {
|
|
symbolName = ts.unescapeLeadingUnderscores(name);
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (symbolName === undefined) {
|
|
var name = ts.firstDefined(symbol.declarations, ts.getNameOfDeclaration);
|
|
if (name && ts.isComputedPropertyName(name) && ts.isEntityName(name.expression)) {
|
|
var LHS = createAccessFromSymbolChain(chain, index - 1, stopper);
|
|
if (ts.isEntityName(LHS)) {
|
|
return ts.factory.createIndexedAccessTypeNode(ts.factory.createParenthesizedType(ts.factory.createTypeQueryNode(LHS)), ts.factory.createTypeQueryNode(name.expression));
|
|
}
|
|
return LHS;
|
|
}
|
|
symbolName = getNameOfSymbolAsWritten(symbol, context);
|
|
}
|
|
context.approximateLength += symbolName.length + 1;
|
|
if (!(context.flags & 16) && parent &&
|
|
getMembersOfSymbol(parent) && getMembersOfSymbol(parent).get(symbol.escapedName) &&
|
|
getSymbolIfSameReference(getMembersOfSymbol(parent).get(symbol.escapedName), symbol)) {
|
|
var LHS = createAccessFromSymbolChain(chain, index - 1, stopper);
|
|
if (ts.isIndexedAccessTypeNode(LHS)) {
|
|
return ts.factory.createIndexedAccessTypeNode(LHS, ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName)));
|
|
}
|
|
else {
|
|
return ts.factory.createIndexedAccessTypeNode(ts.factory.createTypeReferenceNode(LHS, typeParameterNodes), ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral(symbolName)));
|
|
}
|
|
}
|
|
var identifier = ts.setEmitFlags(ts.factory.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.factory.createQualifiedName(LHS, identifier);
|
|
}
|
|
return identifier;
|
|
}
|
|
}
|
|
function typeParameterShadowsNameInScope(escapedName, context, type) {
|
|
var result = resolveName(context.enclosingDeclaration, escapedName, 788968, undefined, escapedName, false);
|
|
if (result) {
|
|
if (result.flags & 262144 && result === type.symbol) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function typeParameterToName(type, context) {
|
|
var _a, _b;
|
|
if (context.flags & 4 && context.typeParameterNames) {
|
|
var cached = context.typeParameterNames.get(getTypeId(type));
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
}
|
|
var result = symbolToName(type.symbol, context, 788968, true);
|
|
if (!(result.kind & 79)) {
|
|
return ts.factory.createIdentifier("(Missing type parameter)");
|
|
}
|
|
if (context.flags & 4) {
|
|
var rawtext = result.escapedText;
|
|
var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
|
|
var text = rawtext;
|
|
while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
|
|
i++;
|
|
text = "".concat(rawtext, "_").concat(i);
|
|
}
|
|
if (text !== rawtext) {
|
|
result = ts.factory.createIdentifier(text, result.typeArguments);
|
|
}
|
|
(context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
|
|
(context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
|
|
(context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
|
|
}
|
|
return result;
|
|
}
|
|
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.factory.createIdentifier(symbolName, typeParameterNodes), 16777216);
|
|
identifier.symbol = symbol;
|
|
return index > 0 ? ts.factory.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);
|
|
if (ts.isSingleOrDoubleQuote(firstChar) && ts.some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
|
|
return ts.factory.createStringLiteral(getSpecifierForModuleSymbol(symbol, context));
|
|
}
|
|
var canUsePropertyAccess = firstChar === 35 ?
|
|
symbolName.length > 1 && ts.isIdentifierStart(symbolName.charCodeAt(1), languageVersion) :
|
|
ts.isIdentifierStart(firstChar, languageVersion);
|
|
if (index === 0 || canUsePropertyAccess) {
|
|
var identifier = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216);
|
|
identifier.symbol = symbol;
|
|
return index > 0 ? ts.factory.createPropertyAccessExpression(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) && !(symbol.flags & 8)) {
|
|
expression = ts.factory.createStringLiteral(ts.stripQuotes(symbolName).replace(/\\./g, function (s) { return s.substring(1); }), firstChar === 39);
|
|
}
|
|
else if (("" + +symbolName) === symbolName) {
|
|
expression = ts.factory.createNumericLiteral(+symbolName);
|
|
}
|
|
if (!expression) {
|
|
expression = ts.setEmitFlags(ts.factory.createIdentifier(symbolName, typeParameterNodes), 16777216);
|
|
expression.symbol = symbol;
|
|
}
|
|
return ts.factory.createElementAccessExpression(createExpressionFromSymbolChain(chain, index - 1), expression);
|
|
}
|
|
}
|
|
}
|
|
function isStringNamed(d) {
|
|
var name = ts.getNameOfDeclaration(d);
|
|
return !!name && ts.isStringLiteral(name);
|
|
}
|
|
function isSingleQuotedStringNamed(d) {
|
|
var name = ts.getNameOfDeclaration(d);
|
|
return !!(name && ts.isStringLiteral(name) && (name.singleQuote || !ts.nodeIsSynthesized(name) && ts.startsWith(ts.getTextOfNode(name, false), "'")));
|
|
}
|
|
function getPropertyNameNodeForSymbol(symbol, context) {
|
|
var singleQuote = !!ts.length(symbol.declarations) && ts.every(symbol.declarations, isSingleQuotedStringNamed);
|
|
var fromNameType = getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote);
|
|
if (fromNameType) {
|
|
return fromNameType;
|
|
}
|
|
var rawName = ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
var stringNamed = !!ts.length(symbol.declarations) && ts.every(symbol.declarations, isStringNamed);
|
|
return ts.createPropertyNameNodeForIdentifierOrLiteral(rawName, ts.getEmitScriptTarget(compilerOptions), singleQuote, stringNamed);
|
|
}
|
|
function getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote) {
|
|
var nameType = getSymbolLinks(symbol).nameType;
|
|
if (nameType) {
|
|
if (nameType.flags & 384) {
|
|
var name = "" + nameType.value;
|
|
if (!ts.isIdentifierText(name, ts.getEmitScriptTarget(compilerOptions)) && !ts.isNumericLiteralName(name)) {
|
|
return ts.factory.createStringLiteral(name, !!singleQuote);
|
|
}
|
|
if (ts.isNumericLiteralName(name) && ts.startsWith(name, "-")) {
|
|
return ts.factory.createComputedPropertyName(ts.factory.createNumericLiteral(+name));
|
|
}
|
|
return ts.createPropertyNameNodeForIdentifierOrLiteral(name, ts.getEmitScriptTarget(compilerOptions));
|
|
}
|
|
if (nameType.flags & 8192) {
|
|
return ts.factory.createComputedPropertyName(symbolToExpression(nameType.symbol, context, 111551));
|
|
}
|
|
}
|
|
}
|
|
function cloneNodeBuilderContext(context) {
|
|
var initial = __assign({}, context);
|
|
if (initial.typeParameterNames) {
|
|
initial.typeParameterNames = new ts.Map(initial.typeParameterNames);
|
|
}
|
|
if (initial.typeParameterNamesByText) {
|
|
initial.typeParameterNamesByText = new ts.Set(initial.typeParameterNamesByText);
|
|
}
|
|
if (initial.typeParameterSymbolList) {
|
|
initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
|
|
}
|
|
initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
|
|
return initial;
|
|
}
|
|
function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
|
|
return symbol.declarations && ts.find(symbol.declarations, function (s) { return !!ts.getEffectiveTypeAnnotationNode(s) && (!enclosingDeclaration || !!ts.findAncestor(s, function (n) { return n === enclosingDeclaration; })); });
|
|
}
|
|
function existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type) {
|
|
return !(ts.getObjectFlags(type) & 4) || !ts.isTypeReferenceNode(existing) || ts.length(existing.typeArguments) >= getMinTypeArgumentCount(type.target.typeParameters);
|
|
}
|
|
function serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, includePrivateSymbol, bundled) {
|
|
if (!isErrorType(type) && enclosingDeclaration) {
|
|
var declWithExistingAnnotation = getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration);
|
|
if (declWithExistingAnnotation && !ts.isFunctionLikeDeclaration(declWithExistingAnnotation) && !ts.isGetAccessorDeclaration(declWithExistingAnnotation)) {
|
|
var existing = ts.getEffectiveTypeAnnotationNode(declWithExistingAnnotation);
|
|
if (typeNodeIsEquivalentToType(existing, declWithExistingAnnotation, type) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type)) {
|
|
var result_6 = serializeExistingTypeNode(context, existing, includePrivateSymbol, bundled);
|
|
if (result_6) {
|
|
return result_6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var oldFlags = context.flags;
|
|
if (type.flags & 8192 &&
|
|
type.symbol === symbol && (!context.enclosingDeclaration || ts.some(symbol.declarations, function (d) { return ts.getSourceFileOfNode(d) === ts.getSourceFileOfNode(context.enclosingDeclaration); }))) {
|
|
context.flags |= 1048576;
|
|
}
|
|
var result = typeToTypeNodeHelper(type, context);
|
|
context.flags = oldFlags;
|
|
return result;
|
|
}
|
|
function typeNodeIsEquivalentToType(typeNode, annotatedDeclaration, type) {
|
|
var typeFromTypeNode = getTypeFromTypeNode(typeNode);
|
|
if (typeFromTypeNode === type) {
|
|
return true;
|
|
}
|
|
if (ts.isParameter(annotatedDeclaration) && annotatedDeclaration.questionToken) {
|
|
return getTypeWithFacts(type, 524288) === typeFromTypeNode;
|
|
}
|
|
return false;
|
|
}
|
|
function serializeReturnTypeForSignature(context, type, signature, includePrivateSymbol, bundled) {
|
|
if (!isErrorType(type) && context.enclosingDeclaration) {
|
|
var annotation = signature.declaration && ts.getEffectiveReturnTypeNode(signature.declaration);
|
|
if (!!ts.findAncestor(annotation, function (n) { return n === context.enclosingDeclaration; }) && annotation) {
|
|
var annotated = getTypeFromTypeNode(annotation);
|
|
var thisInstantiated = annotated.flags & 262144 && annotated.isThisType ? instantiateType(annotated, signature.mapper) : annotated;
|
|
if (thisInstantiated === type && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(annotation, type)) {
|
|
var result = serializeExistingTypeNode(context, annotation, includePrivateSymbol, bundled);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return typeToTypeNodeHelper(type, context);
|
|
}
|
|
function trackExistingEntityName(node, context, includePrivateSymbol) {
|
|
var _a, _b;
|
|
var introducesError = false;
|
|
var leftmost = ts.getFirstIdentifier(node);
|
|
if (ts.isInJSFile(node) && (ts.isExportsIdentifier(leftmost) || ts.isModuleExportsAccessExpression(leftmost.parent) || (ts.isQualifiedName(leftmost.parent) && ts.isModuleIdentifier(leftmost.parent.left) && ts.isExportsIdentifier(leftmost.parent.right)))) {
|
|
introducesError = true;
|
|
return { introducesError: introducesError, node: node };
|
|
}
|
|
var sym = resolveEntityName(leftmost, 67108863, true, true);
|
|
if (sym) {
|
|
if (isSymbolAccessible(sym, context.enclosingDeclaration, 67108863, false).accessibility !== 0) {
|
|
introducesError = true;
|
|
}
|
|
else {
|
|
(_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.trackSymbol) === null || _b === void 0 ? void 0 : _b.call(_a, sym, context.enclosingDeclaration, 67108863);
|
|
includePrivateSymbol === null || includePrivateSymbol === void 0 ? void 0 : includePrivateSymbol(sym);
|
|
}
|
|
if (ts.isIdentifier(node)) {
|
|
var type = getDeclaredTypeOfSymbol(sym);
|
|
var name = sym.flags & 262144 && !isTypeSymbolAccessible(type.symbol, context.enclosingDeclaration) ? typeParameterToName(type, context) : ts.factory.cloneNode(node);
|
|
name.symbol = sym;
|
|
return { introducesError: introducesError, node: ts.setEmitFlags(ts.setOriginalNode(name, node), 16777216) };
|
|
}
|
|
}
|
|
return { introducesError: introducesError, node: node };
|
|
}
|
|
function serializeExistingTypeNode(context, existing, includePrivateSymbol, bundled) {
|
|
if (cancellationToken && cancellationToken.throwIfCancellationRequested) {
|
|
cancellationToken.throwIfCancellationRequested();
|
|
}
|
|
var hadError = false;
|
|
var file = ts.getSourceFileOfNode(existing);
|
|
var transformed = ts.visitNode(existing, visitExistingNodeTreeSymbols);
|
|
if (hadError) {
|
|
return undefined;
|
|
}
|
|
return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
|
|
function visitExistingNodeTreeSymbols(node) {
|
|
if (ts.isJSDocAllType(node) || node.kind === 319) {
|
|
return ts.factory.createKeywordTypeNode(130);
|
|
}
|
|
if (ts.isJSDocUnknownType(node)) {
|
|
return ts.factory.createKeywordTypeNode(155);
|
|
}
|
|
if (ts.isJSDocNullableType(node)) {
|
|
return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
|
|
}
|
|
if (ts.isJSDocOptionalType(node)) {
|
|
return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(153)]);
|
|
}
|
|
if (ts.isJSDocNonNullableType(node)) {
|
|
return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
|
|
}
|
|
if (ts.isJSDocVariadicType(node)) {
|
|
return ts.factory.createArrayTypeNode(ts.visitNode(node.type, visitExistingNodeTreeSymbols));
|
|
}
|
|
if (ts.isJSDocTypeLiteral(node)) {
|
|
return ts.factory.createTypeLiteralNode(ts.map(node.jsDocPropertyTags, function (t) {
|
|
var name = ts.isIdentifier(t.name) ? t.name : t.name.right;
|
|
var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
|
|
var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
|
|
return ts.factory.createPropertySignature(undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(130));
|
|
}));
|
|
}
|
|
if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
|
|
return ts.setOriginalNode(ts.factory.createKeywordTypeNode(130), node);
|
|
}
|
|
if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
|
|
return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(undefined, [ts.factory.createParameterDeclaration(undefined, undefined, "x", undefined, ts.visitNode(node.typeArguments[0], visitExistingNodeTreeSymbols))], ts.visitNode(node.typeArguments[1], visitExistingNodeTreeSymbols))]);
|
|
}
|
|
if (ts.isJSDocFunctionType(node)) {
|
|
if (ts.isJSDocConstructSignature(node)) {
|
|
var newTypeNode_1;
|
|
return ts.factory.createConstructorTypeNode(undefined, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(130));
|
|
}
|
|
else {
|
|
return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(130));
|
|
}
|
|
}
|
|
if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(node, 788968, true))) {
|
|
return ts.setOriginalNode(typeToTypeNodeHelper(getTypeFromTypeNode(node), context), node);
|
|
}
|
|
if (ts.isLiteralImportTypeNode(node)) {
|
|
var nodeSymbol = getNodeLinks(node).resolvedSymbol;
|
|
if (ts.isInJSDoc(node) &&
|
|
nodeSymbol &&
|
|
((!node.isTypeOf && !(nodeSymbol.flags & 788968)) ||
|
|
!(ts.length(node.typeArguments) >= getMinTypeArgumentCount(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(nodeSymbol))))) {
|
|
return ts.setOriginalNode(typeToTypeNodeHelper(getTypeFromTypeNode(node), context), node);
|
|
}
|
|
return ts.factory.updateImportTypeNode(node, ts.factory.updateLiteralTypeNode(node.argument, rewriteModuleSpecifier(node, node.argument.literal)), node.assertions, node.qualifier, ts.visitNodes(node.typeArguments, visitExistingNodeTreeSymbols, ts.isTypeNode), node.isTypeOf);
|
|
}
|
|
if (ts.isEntityName(node) || ts.isEntityNameExpression(node)) {
|
|
var _a = trackExistingEntityName(node, context, includePrivateSymbol), introducesError = _a.introducesError, result = _a.node;
|
|
hadError = hadError || introducesError;
|
|
if (result !== node) {
|
|
return result;
|
|
}
|
|
}
|
|
if (file && ts.isTupleTypeNode(node) && (ts.getLineAndCharacterOfPosition(file, node.pos).line === ts.getLineAndCharacterOfPosition(file, node.end).line)) {
|
|
ts.setEmitFlags(node, 1);
|
|
}
|
|
return ts.visitEachChild(node, visitExistingNodeTreeSymbols, ts.nullTransformationContext);
|
|
function getEffectiveDotDotDotForParameter(p) {
|
|
return p.dotDotDotToken || (p.type && ts.isJSDocVariadicType(p.type) ? ts.factory.createToken(25) : undefined);
|
|
}
|
|
function getNameForJSDocFunctionParameter(p, index) {
|
|
return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "this" ? "this"
|
|
: getEffectiveDotDotDotForParameter(p) ? "args"
|
|
: "arg".concat(index);
|
|
}
|
|
function rewriteModuleSpecifier(parent, lit) {
|
|
if (bundled) {
|
|
if (context.tracker && context.tracker.moduleResolverHost) {
|
|
var targetFile = getExternalModuleFileFromDeclaration(parent);
|
|
if (targetFile) {
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(!!host.useCaseSensitiveFileNames);
|
|
var resolverHost = {
|
|
getCanonicalFileName: getCanonicalFileName,
|
|
getCurrentDirectory: function () { return context.tracker.moduleResolverHost.getCurrentDirectory(); },
|
|
getCommonSourceDirectory: function () { return context.tracker.moduleResolverHost.getCommonSourceDirectory(); }
|
|
};
|
|
var newName = ts.getResolvedExternalModuleName(resolverHost, targetFile);
|
|
return ts.factory.createStringLiteral(newName);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (context.tracker && context.tracker.trackExternalModuleSymbolOfImportTypeNode) {
|
|
var moduleSym = resolveExternalModuleNameWorker(lit, lit, undefined);
|
|
if (moduleSym) {
|
|
context.tracker.trackExternalModuleSymbolOfImportTypeNode(moduleSym);
|
|
}
|
|
}
|
|
}
|
|
return lit;
|
|
}
|
|
}
|
|
}
|
|
function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
|
|
var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 169, true);
|
|
var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 168, false);
|
|
var enclosingDeclaration = context.enclosingDeclaration;
|
|
var results = [];
|
|
var visitedSymbols = new ts.Set();
|
|
var deferredPrivatesStack = [];
|
|
var oldcontext = context;
|
|
context = __assign(__assign({}, oldcontext), { usedSymbolNames: new ts.Set(oldcontext.usedSymbolNames), remappedSymbolNames: new ts.Map(), tracker: __assign(__assign({}, oldcontext.tracker), { trackSymbol: function (sym, decl, meaning) {
|
|
var accessibleResult = isSymbolAccessible(sym, decl, meaning, false);
|
|
if (accessibleResult.accessibility === 0) {
|
|
var chain = lookupSymbolChainWorker(sym, context, meaning);
|
|
if (!(sym.flags & 4)) {
|
|
includePrivateSymbol(chain[0]);
|
|
}
|
|
}
|
|
else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
|
|
return oldcontext.tracker.trackSymbol(sym, decl, meaning);
|
|
}
|
|
return false;
|
|
} }) });
|
|
context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
|
|
ts.forEachEntry(symbolTable, function (symbol, name) {
|
|
var baseName = ts.unescapeLeadingUnderscores(name);
|
|
void getInternalSymbolName(symbol, baseName);
|
|
});
|
|
var addingDeclare = !bundled;
|
|
var exportEquals = symbolTable.get("export=");
|
|
if (exportEquals && symbolTable.size > 1 && exportEquals.flags & 2097152) {
|
|
symbolTable = ts.createSymbolTable();
|
|
symbolTable.set("export=", exportEquals);
|
|
}
|
|
visitSymbolTable(symbolTable);
|
|
return mergeRedundantStatements(results);
|
|
function isIdentifierAndNotUndefined(node) {
|
|
return !!node && node.kind === 79;
|
|
}
|
|
function getNamesOfDeclaration(statement) {
|
|
if (ts.isVariableStatement(statement)) {
|
|
return ts.filter(ts.map(statement.declarationList.declarations, ts.getNameOfDeclaration), isIdentifierAndNotUndefined);
|
|
}
|
|
return ts.filter([ts.getNameOfDeclaration(statement)], isIdentifierAndNotUndefined);
|
|
}
|
|
function flattenExportAssignedNamespace(statements) {
|
|
var exportAssignment = ts.find(statements, ts.isExportAssignment);
|
|
var nsIndex = ts.findIndex(statements, ts.isModuleDeclaration);
|
|
var ns = nsIndex !== -1 ? statements[nsIndex] : undefined;
|
|
if (ns && exportAssignment && exportAssignment.isExportEquals &&
|
|
ts.isIdentifier(exportAssignment.expression) && ts.isIdentifier(ns.name) && ts.idText(ns.name) === ts.idText(exportAssignment.expression) &&
|
|
ns.body && ts.isModuleBlock(ns.body)) {
|
|
var excessExports = ts.filter(statements, function (s) { return !!(ts.getEffectiveModifierFlags(s) & 1); });
|
|
var name_3 = ns.name;
|
|
var body = ns.body;
|
|
if (ts.length(excessExports)) {
|
|
ns = ts.factory.updateModuleDeclaration(ns, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(false, undefined, id); })), undefined)], false))));
|
|
statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
|
|
}
|
|
if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_3); })) {
|
|
results = [];
|
|
var mixinExportFlag_1 = !ts.some(body.statements, function (s) { return ts.hasSyntacticModifier(s, 1) || ts.isExportAssignment(s) || ts.isExportDeclaration(s); });
|
|
ts.forEach(body.statements, function (s) {
|
|
addResult(s, mixinExportFlag_1 ? 1 : 0);
|
|
});
|
|
statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function mergeExportDeclarations(statements) {
|
|
var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
|
|
if (ts.length(exports) > 1) {
|
|
var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
|
|
statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), undefined)], false);
|
|
}
|
|
var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
|
|
if (ts.length(reexports) > 1) {
|
|
var groups = ts.group(reexports, function (decl) { return ts.isStringLiteral(decl.moduleSpecifier) ? ">" + decl.moduleSpecifier.text : ">"; });
|
|
if (groups.length !== reexports.length) {
|
|
var _loop_9 = function (group_1) {
|
|
if (group_1.length > 1) {
|
|
statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
|
|
ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
|
|
], false);
|
|
}
|
|
};
|
|
for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
|
|
var group_1 = groups_1[_i];
|
|
_loop_9(group_1);
|
|
}
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function inlineExportModifiers(statements) {
|
|
var index = ts.findIndex(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !d.assertClause && !!d.exportClause && ts.isNamedExports(d.exportClause); });
|
|
if (index >= 0) {
|
|
var exportDecl = statements[index];
|
|
var replacements = ts.mapDefined(exportDecl.exportClause.elements, function (e) {
|
|
if (!e.propertyName) {
|
|
var indices = ts.indicesOf(statements);
|
|
var associatedIndices = ts.filter(indices, function (i) { return ts.nodeHasName(statements[i], e.name); });
|
|
if (ts.length(associatedIndices) && ts.every(associatedIndices, function (i) { return canHaveExportModifier(statements[i]); })) {
|
|
for (var _i = 0, associatedIndices_1 = associatedIndices; _i < associatedIndices_1.length; _i++) {
|
|
var index_1 = associatedIndices_1[_i];
|
|
statements[index_1] = addExportModifier(statements[index_1]);
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
return e;
|
|
});
|
|
if (!ts.length(replacements)) {
|
|
ts.orderedRemoveItemAt(statements, index);
|
|
}
|
|
else {
|
|
statements[index] = ts.factory.updateExportDeclaration(exportDecl, exportDecl.modifiers, exportDecl.isTypeOnly, ts.factory.updateNamedExports(exportDecl.exportClause, replacements), exportDecl.moduleSpecifier, exportDecl.assertClause);
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function mergeRedundantStatements(statements) {
|
|
statements = flattenExportAssignedNamespace(statements);
|
|
statements = mergeExportDeclarations(statements);
|
|
statements = inlineExportModifiers(statements);
|
|
if (enclosingDeclaration &&
|
|
((ts.isSourceFile(enclosingDeclaration) && ts.isExternalOrCommonJsModule(enclosingDeclaration)) || ts.isModuleDeclaration(enclosingDeclaration)) &&
|
|
(!ts.some(statements, ts.isExternalModuleIndicator) || (!ts.hasScopeMarker(statements) && ts.some(statements, ts.needsScopeMarker)))) {
|
|
statements.push(ts.createEmptyExports(ts.factory));
|
|
}
|
|
return statements;
|
|
}
|
|
function canHaveExportModifier(node) {
|
|
return ts.isEnumDeclaration(node) ||
|
|
ts.isVariableStatement(node) ||
|
|
ts.isFunctionDeclaration(node) ||
|
|
ts.isClassDeclaration(node) ||
|
|
(ts.isModuleDeclaration(node) && !ts.isExternalModuleAugmentation(node) && !ts.isGlobalScopeAugmentation(node)) ||
|
|
ts.isInterfaceDeclaration(node) ||
|
|
isTypeDeclaration(node);
|
|
}
|
|
function addExportModifier(node) {
|
|
var flags = (ts.getEffectiveModifierFlags(node) | 1) & ~2;
|
|
return ts.factory.updateModifiers(node, flags);
|
|
}
|
|
function removeExportModifier(node) {
|
|
var flags = ts.getEffectiveModifierFlags(node) & ~1;
|
|
return ts.factory.updateModifiers(node, flags);
|
|
}
|
|
function visitSymbolTable(symbolTable, suppressNewPrivateContext, propertyAsAlias) {
|
|
if (!suppressNewPrivateContext) {
|
|
deferredPrivatesStack.push(new ts.Map());
|
|
}
|
|
symbolTable.forEach(function (symbol) {
|
|
serializeSymbol(symbol, false, !!propertyAsAlias);
|
|
});
|
|
if (!suppressNewPrivateContext) {
|
|
deferredPrivatesStack[deferredPrivatesStack.length - 1].forEach(function (symbol) {
|
|
serializeSymbol(symbol, true, !!propertyAsAlias);
|
|
});
|
|
deferredPrivatesStack.pop();
|
|
}
|
|
}
|
|
function serializeSymbol(symbol, isPrivate, propertyAsAlias) {
|
|
var visitedSym = getMergedSymbol(symbol);
|
|
if (visitedSymbols.has(getSymbolId(visitedSym))) {
|
|
return;
|
|
}
|
|
visitedSymbols.add(getSymbolId(visitedSym));
|
|
var skipMembershipCheck = !isPrivate;
|
|
if (skipMembershipCheck || (!!ts.length(symbol.declarations) && ts.some(symbol.declarations, function (d) { return !!ts.findAncestor(d, function (n) { return n === enclosingDeclaration; }); }))) {
|
|
var oldContext = context;
|
|
context = cloneNodeBuilderContext(context);
|
|
serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
|
|
if (context.reportedDiagnostic) {
|
|
oldcontext.reportedDiagnostic = context.reportedDiagnostic;
|
|
}
|
|
context = oldContext;
|
|
}
|
|
}
|
|
function serializeSymbolWorker(symbol, isPrivate, propertyAsAlias) {
|
|
var _a, _b, _c, _d;
|
|
var symbolName = ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
var isDefault = symbol.escapedName === "default";
|
|
if (isPrivate && !(context.flags & 131072) && ts.isStringANonContextualKeyword(symbolName) && !isDefault) {
|
|
context.encounteredError = true;
|
|
return;
|
|
}
|
|
var needsPostExportDefault = isDefault && !!(symbol.flags & -113
|
|
|| (symbol.flags & 16 && ts.length(getPropertiesOfType(getTypeOfSymbol(symbol))))) && !(symbol.flags & 2097152);
|
|
var needsExportDeclaration = !needsPostExportDefault && !isPrivate && ts.isStringANonContextualKeyword(symbolName) && !isDefault;
|
|
if (needsPostExportDefault || needsExportDeclaration) {
|
|
isPrivate = true;
|
|
}
|
|
var modifierFlags = (!isPrivate ? 1 : 0) | (isDefault && !needsPostExportDefault ? 512 : 0);
|
|
var isConstMergedWithNS = symbol.flags & 1536 &&
|
|
symbol.flags & (2 | 1 | 4) &&
|
|
symbol.escapedName !== "export=";
|
|
var isConstMergedWithNSPrintableAsSignatureMerge = isConstMergedWithNS && isTypeRepresentableAsFunctionNamespaceMerge(getTypeOfSymbol(symbol), symbol);
|
|
if (symbol.flags & (16 | 8192) || isConstMergedWithNSPrintableAsSignatureMerge) {
|
|
serializeAsFunctionNamespaceMerge(getTypeOfSymbol(symbol), symbol, getInternalSymbolName(symbol, symbolName), modifierFlags);
|
|
}
|
|
if (symbol.flags & 524288) {
|
|
serializeTypeAlias(symbol, symbolName, modifierFlags);
|
|
}
|
|
if (symbol.flags & (2 | 1 | 4)
|
|
&& symbol.escapedName !== "export="
|
|
&& !(symbol.flags & 4194304)
|
|
&& !(symbol.flags & 32)
|
|
&& !isConstMergedWithNSPrintableAsSignatureMerge) {
|
|
if (propertyAsAlias) {
|
|
var createdExport = serializeMaybeAliasAssignment(symbol);
|
|
if (createdExport) {
|
|
needsExportDeclaration = false;
|
|
needsPostExportDefault = false;
|
|
}
|
|
}
|
|
else {
|
|
var type = getTypeOfSymbol(symbol);
|
|
var localName = getInternalSymbolName(symbol, symbolName);
|
|
if (!(symbol.flags & 16) && isTypeRepresentableAsFunctionNamespaceMerge(type, symbol)) {
|
|
serializeAsFunctionNamespaceMerge(type, symbol, localName, modifierFlags);
|
|
}
|
|
else {
|
|
var flags = !(symbol.flags & 2)
|
|
? ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) && ts.isSourceFile((_b = symbol.parent) === null || _b === void 0 ? void 0 : _b.valueDeclaration)
|
|
? 2
|
|
: undefined
|
|
: isConstVariable(symbol)
|
|
? 2
|
|
: 1;
|
|
var name = (needsPostExportDefault || !(symbol.flags & 4)) ? localName : getUnusedName(localName, symbol);
|
|
var textRange = symbol.declarations && ts.find(symbol.declarations, function (d) { return ts.isVariableDeclaration(d); });
|
|
if (textRange && ts.isVariableDeclarationList(textRange.parent) && textRange.parent.declarations.length === 1) {
|
|
textRange = textRange.parent.parent;
|
|
}
|
|
var propertyAccessRequire = (_c = symbol.declarations) === null || _c === void 0 ? void 0 : _c.find(ts.isPropertyAccessExpression);
|
|
if (propertyAccessRequire && ts.isBinaryExpression(propertyAccessRequire.parent) && ts.isIdentifier(propertyAccessRequire.parent.right)
|
|
&& ((_d = type.symbol) === null || _d === void 0 ? void 0 : _d.valueDeclaration) && ts.isSourceFile(type.symbol.valueDeclaration)) {
|
|
var alias = localName === propertyAccessRequire.parent.right.escapedText ? undefined : propertyAccessRequire.parent.right;
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([ts.factory.createExportSpecifier(false, alias, localName)])), 0);
|
|
context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551);
|
|
}
|
|
else {
|
|
var statement = ts.setTextRange(ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
|
|
ts.factory.createVariableDeclaration(name, undefined, serializeTypeForDeclaration(context, type, symbol, enclosingDeclaration, includePrivateSymbol, bundled))
|
|
], flags)), textRange);
|
|
addResult(statement, name !== localName ? modifierFlags & ~1 : modifierFlags);
|
|
if (name !== localName && !isPrivate) {
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([ts.factory.createExportSpecifier(false, name, localName)])), 0);
|
|
needsExportDeclaration = false;
|
|
needsPostExportDefault = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (symbol.flags & 384) {
|
|
serializeEnum(symbol, symbolName, modifierFlags);
|
|
}
|
|
if (symbol.flags & 32) {
|
|
if (symbol.flags & 4
|
|
&& symbol.valueDeclaration
|
|
&& ts.isBinaryExpression(symbol.valueDeclaration.parent)
|
|
&& ts.isClassExpression(symbol.valueDeclaration.parent.right)) {
|
|
serializeAsAlias(symbol, getInternalSymbolName(symbol, symbolName), modifierFlags);
|
|
}
|
|
else {
|
|
serializeAsClass(symbol, getInternalSymbolName(symbol, symbolName), modifierFlags);
|
|
}
|
|
}
|
|
if ((symbol.flags & (512 | 1024) && (!isConstMergedWithNS || isTypeOnlyNamespace(symbol))) || isConstMergedWithNSPrintableAsSignatureMerge) {
|
|
serializeModule(symbol, symbolName, modifierFlags);
|
|
}
|
|
if (symbol.flags & 64 && !(symbol.flags & 32)) {
|
|
serializeInterface(symbol, symbolName, modifierFlags);
|
|
}
|
|
if (symbol.flags & 2097152) {
|
|
serializeAsAlias(symbol, getInternalSymbolName(symbol, symbolName), modifierFlags);
|
|
}
|
|
if (symbol.flags & 4 && symbol.escapedName === "export=") {
|
|
serializeMaybeAliasAssignment(symbol);
|
|
}
|
|
if (symbol.flags & 8388608) {
|
|
if (symbol.declarations) {
|
|
for (var _i = 0, _e = symbol.declarations; _i < _e.length; _i++) {
|
|
var node = _e[_i];
|
|
var resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier);
|
|
if (!resolvedModule)
|
|
continue;
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, undefined, ts.factory.createStringLiteral(getSpecifierForModuleSymbol(resolvedModule, context))), 0);
|
|
}
|
|
}
|
|
}
|
|
if (needsPostExportDefault) {
|
|
addResult(ts.factory.createExportAssignment(undefined, false, ts.factory.createIdentifier(getInternalSymbolName(symbol, symbolName))), 0);
|
|
}
|
|
else if (needsExportDeclaration) {
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([ts.factory.createExportSpecifier(false, getInternalSymbolName(symbol, symbolName), symbolName)])), 0);
|
|
}
|
|
}
|
|
function includePrivateSymbol(symbol) {
|
|
if (ts.some(symbol.declarations, ts.isParameterDeclaration))
|
|
return;
|
|
ts.Debug.assertIsDefined(deferredPrivatesStack[deferredPrivatesStack.length - 1]);
|
|
getUnusedName(ts.unescapeLeadingUnderscores(symbol.escapedName), symbol);
|
|
var isExternalImportAlias = !!(symbol.flags & 2097152) && !ts.some(symbol.declarations, function (d) {
|
|
return !!ts.findAncestor(d, ts.isExportDeclaration) ||
|
|
ts.isNamespaceExport(d) ||
|
|
(ts.isImportEqualsDeclaration(d) && !ts.isExternalModuleReference(d.moduleReference));
|
|
});
|
|
deferredPrivatesStack[isExternalImportAlias ? 0 : (deferredPrivatesStack.length - 1)].set(getSymbolId(symbol), symbol);
|
|
}
|
|
function isExportingScope(enclosingDeclaration) {
|
|
return ((ts.isSourceFile(enclosingDeclaration) && (ts.isExternalOrCommonJsModule(enclosingDeclaration) || ts.isJsonSourceFile(enclosingDeclaration))) ||
|
|
(ts.isAmbientModule(enclosingDeclaration) && !ts.isGlobalScopeAugmentation(enclosingDeclaration)));
|
|
}
|
|
function addResult(node, additionalModifierFlags) {
|
|
if (ts.canHaveModifiers(node)) {
|
|
var newModifierFlags = 0;
|
|
var enclosingDeclaration_1 = context.enclosingDeclaration &&
|
|
(ts.isJSDocTypeAlias(context.enclosingDeclaration) ? ts.getSourceFileOfNode(context.enclosingDeclaration) : context.enclosingDeclaration);
|
|
if (additionalModifierFlags & 1 &&
|
|
enclosingDeclaration_1 && (isExportingScope(enclosingDeclaration_1) || ts.isModuleDeclaration(enclosingDeclaration_1)) &&
|
|
canHaveExportModifier(node)) {
|
|
newModifierFlags |= 1;
|
|
}
|
|
if (addingDeclare && !(newModifierFlags & 1) &&
|
|
(!enclosingDeclaration_1 || !(enclosingDeclaration_1.flags & 16777216)) &&
|
|
(ts.isEnumDeclaration(node) || ts.isVariableStatement(node) || ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node) || ts.isModuleDeclaration(node))) {
|
|
newModifierFlags |= 2;
|
|
}
|
|
if ((additionalModifierFlags & 512) && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isFunctionDeclaration(node))) {
|
|
newModifierFlags |= 512;
|
|
}
|
|
if (newModifierFlags) {
|
|
node = ts.factory.updateModifiers(node, newModifierFlags | ts.getEffectiveModifierFlags(node));
|
|
}
|
|
}
|
|
results.push(node);
|
|
}
|
|
function serializeTypeAlias(symbol, symbolName, modifierFlags) {
|
|
var _a;
|
|
var aliasType = getDeclaredTypeOfTypeAlias(symbol);
|
|
var typeParams = getSymbolLinks(symbol).typeParameters;
|
|
var typeParamDecls = ts.map(typeParams, function (p) { return typeParameterToDeclaration(p, context); });
|
|
var jsdocAliasDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isJSDocTypeAlias);
|
|
var commentText = ts.getTextOfJSDocComment(jsdocAliasDecl ? jsdocAliasDecl.comment || jsdocAliasDecl.parent.comment : undefined);
|
|
var oldFlags = context.flags;
|
|
context.flags |= 8388608;
|
|
var oldEnclosingDecl = context.enclosingDeclaration;
|
|
context.enclosingDeclaration = jsdocAliasDecl;
|
|
var typeNode = jsdocAliasDecl && jsdocAliasDecl.typeExpression
|
|
&& ts.isJSDocTypeExpression(jsdocAliasDecl.typeExpression)
|
|
&& serializeExistingTypeNode(context, jsdocAliasDecl.typeExpression.type, includePrivateSymbol, bundled)
|
|
|| typeToTypeNodeHelper(aliasType, context);
|
|
addResult(ts.setSyntheticLeadingComments(ts.factory.createTypeAliasDeclaration(undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, typeNode), !commentText ? [] : [{ kind: 3, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]), modifierFlags);
|
|
context.flags = oldFlags;
|
|
context.enclosingDeclaration = oldEnclosingDecl;
|
|
}
|
|
function serializeInterface(symbol, symbolName, modifierFlags) {
|
|
var interfaceType = getDeclaredTypeOfClassOrInterface(symbol);
|
|
var localParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
|
|
var typeParamDecls = ts.map(localParams, function (p) { return typeParameterToDeclaration(p, context); });
|
|
var baseTypes = getBaseTypes(interfaceType);
|
|
var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
|
|
var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
|
|
var callSignatures = serializeSignatures(0, interfaceType, baseType, 174);
|
|
var constructSignatures = serializeSignatures(1, interfaceType, baseType, 175);
|
|
var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
|
|
var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551); }))];
|
|
addResult(ts.factory.createInterfaceDeclaration(undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
|
|
}
|
|
function getNamespaceMembersForSerialization(symbol) {
|
|
return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
|
|
}
|
|
function isTypeOnlyNamespace(symbol) {
|
|
return ts.every(getNamespaceMembersForSerialization(symbol), function (m) { return !(resolveSymbol(m).flags & 111551); });
|
|
}
|
|
function serializeModule(symbol, symbolName, modifierFlags) {
|
|
var members = getNamespaceMembersForSerialization(symbol);
|
|
var locationMap = ts.arrayToMultiMap(members, function (m) { return m.parent && m.parent === symbol ? "real" : "merged"; });
|
|
var realMembers = locationMap.get("real") || ts.emptyArray;
|
|
var mergedMembers = locationMap.get("merged") || ts.emptyArray;
|
|
if (ts.length(realMembers)) {
|
|
var localName = getInternalSymbolName(symbol, symbolName);
|
|
serializeAsNamespaceDeclaration(realMembers, localName, modifierFlags, !!(symbol.flags & (16 | 67108864)));
|
|
}
|
|
if (ts.length(mergedMembers)) {
|
|
var containingFile_1 = ts.getSourceFileOfNode(context.enclosingDeclaration);
|
|
var localName = getInternalSymbolName(symbol, symbolName);
|
|
var nsBody = ts.factory.createModuleBlock([ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports(ts.mapDefined(ts.filter(mergedMembers, function (n) { return n.escapedName !== "export="; }), function (s) {
|
|
var _a, _b;
|
|
var name = ts.unescapeLeadingUnderscores(s.escapedName);
|
|
var localName = getInternalSymbolName(s, name);
|
|
var aliasDecl = s.declarations && getDeclarationOfAliasSymbol(s);
|
|
if (containingFile_1 && (aliasDecl ? containingFile_1 !== ts.getSourceFileOfNode(aliasDecl) : !ts.some(s.declarations, function (d) { return ts.getSourceFileOfNode(d) === containingFile_1; }))) {
|
|
(_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonlocalAugmentation) === null || _b === void 0 ? void 0 : _b.call(_a, containingFile_1, symbol, s);
|
|
return undefined;
|
|
}
|
|
var target = aliasDecl && getTargetOfAliasDeclaration(aliasDecl, true);
|
|
includePrivateSymbol(target || s);
|
|
var targetName = target ? getInternalSymbolName(target, ts.unescapeLeadingUnderscores(target.escapedName)) : localName;
|
|
return ts.factory.createExportSpecifier(false, name === targetName ? undefined : targetName, name);
|
|
})))]);
|
|
addResult(ts.factory.createModuleDeclaration(undefined, ts.factory.createIdentifier(localName), nsBody, 16), 0);
|
|
}
|
|
}
|
|
function serializeEnum(symbol, symbolName, modifierFlags) {
|
|
addResult(ts.factory.createEnumDeclaration(ts.factory.createModifiersFromModifierFlags(isConstEnumSymbol(symbol) ? 2048 : 0), getInternalSymbolName(symbol, symbolName), ts.map(ts.filter(getPropertiesOfType(getTypeOfSymbol(symbol)), function (p) { return !!(p.flags & 8); }), function (p) {
|
|
var initializedValue = p.declarations && p.declarations[0] && ts.isEnumMember(p.declarations[0]) ? getConstantValue(p.declarations[0]) : undefined;
|
|
return ts.factory.createEnumMember(ts.unescapeLeadingUnderscores(p.escapedName), initializedValue === undefined ? undefined :
|
|
typeof initializedValue === "string" ? ts.factory.createStringLiteral(initializedValue) :
|
|
ts.factory.createNumericLiteral(initializedValue));
|
|
})), modifierFlags);
|
|
}
|
|
function serializeAsFunctionNamespaceMerge(type, symbol, localName, modifierFlags) {
|
|
var signatures = getSignaturesOfType(type, 0);
|
|
for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
|
|
var sig = signatures_2[_i];
|
|
var decl = signatureToSignatureDeclarationHelper(sig, 256, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
|
|
addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
|
|
}
|
|
if (!(symbol.flags & (512 | 1024) && !!symbol.exports && !!symbol.exports.size)) {
|
|
var props = ts.filter(getPropertiesOfType(type), isNamespaceMember);
|
|
serializeAsNamespaceDeclaration(props, localName, modifierFlags, true);
|
|
}
|
|
}
|
|
function getSignatureTextRangeLocation(signature) {
|
|
if (signature.declaration && signature.declaration.parent) {
|
|
if (ts.isBinaryExpression(signature.declaration.parent) && ts.getAssignmentDeclarationKind(signature.declaration.parent) === 5) {
|
|
return signature.declaration.parent;
|
|
}
|
|
if (ts.isVariableDeclaration(signature.declaration.parent) && signature.declaration.parent.parent) {
|
|
return signature.declaration.parent.parent;
|
|
}
|
|
}
|
|
return signature.declaration;
|
|
}
|
|
function serializeAsNamespaceDeclaration(props, localName, modifierFlags, suppressNewPrivateContext) {
|
|
if (ts.length(props)) {
|
|
var localVsRemoteMap = ts.arrayToMultiMap(props, function (p) {
|
|
return !ts.length(p.declarations) || ts.some(p.declarations, function (d) {
|
|
return ts.getSourceFileOfNode(d) === ts.getSourceFileOfNode(context.enclosingDeclaration);
|
|
}) ? "local" : "remote";
|
|
});
|
|
var localProps = localVsRemoteMap.get("local") || ts.emptyArray;
|
|
var fakespace = ts.parseNodeFactory.createModuleDeclaration(undefined, ts.factory.createIdentifier(localName), ts.factory.createModuleBlock([]), 16);
|
|
ts.setParent(fakespace, enclosingDeclaration);
|
|
fakespace.locals = ts.createSymbolTable(props);
|
|
fakespace.symbol = props[0].parent;
|
|
var oldResults = results;
|
|
results = [];
|
|
var oldAddingDeclare = addingDeclare;
|
|
addingDeclare = false;
|
|
var subcontext = __assign(__assign({}, context), { enclosingDeclaration: fakespace });
|
|
var oldContext = context;
|
|
context = subcontext;
|
|
visitSymbolTable(ts.createSymbolTable(localProps), suppressNewPrivateContext, true);
|
|
context = oldContext;
|
|
addingDeclare = oldAddingDeclare;
|
|
var declarations = results;
|
|
results = oldResults;
|
|
var defaultReplaced = ts.map(declarations, function (d) { return ts.isExportAssignment(d) && !d.isExportEquals && ts.isIdentifier(d.expression) ? ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([ts.factory.createExportSpecifier(false, d.expression, ts.factory.createIdentifier("default"))])) : d; });
|
|
var exportModifierStripped = ts.every(defaultReplaced, function (d) { return ts.hasSyntacticModifier(d, 1); }) ? ts.map(defaultReplaced, removeExportModifier) : defaultReplaced;
|
|
fakespace = ts.factory.updateModuleDeclaration(fakespace, fakespace.modifiers, fakespace.name, ts.factory.createModuleBlock(exportModifierStripped));
|
|
addResult(fakespace, modifierFlags);
|
|
}
|
|
}
|
|
function isNamespaceMember(p) {
|
|
return !!(p.flags & (788968 | 1920 | 2097152)) ||
|
|
!(p.flags & 4194304 || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
|
|
}
|
|
function sanitizeJSDocImplements(clauses) {
|
|
var result = ts.mapDefined(clauses, function (e) {
|
|
var _a;
|
|
var oldEnclosing = context.enclosingDeclaration;
|
|
context.enclosingDeclaration = e;
|
|
var expr = e.expression;
|
|
if (ts.isEntityNameExpression(expr)) {
|
|
if (ts.isIdentifier(expr) && ts.idText(expr) === "") {
|
|
return cleanup(undefined);
|
|
}
|
|
var introducesError = void 0;
|
|
(_a = trackExistingEntityName(expr, context, includePrivateSymbol), introducesError = _a.introducesError, expr = _a.node);
|
|
if (introducesError) {
|
|
return cleanup(undefined);
|
|
}
|
|
}
|
|
return cleanup(ts.factory.createExpressionWithTypeArguments(expr, ts.map(e.typeArguments, function (a) {
|
|
return serializeExistingTypeNode(context, a, includePrivateSymbol, bundled)
|
|
|| typeToTypeNodeHelper(getTypeFromTypeNode(a), context);
|
|
})));
|
|
function cleanup(result) {
|
|
context.enclosingDeclaration = oldEnclosing;
|
|
return result;
|
|
}
|
|
});
|
|
if (result.length === clauses.length) {
|
|
return result;
|
|
}
|
|
return undefined;
|
|
}
|
|
function serializeAsClass(symbol, localName, modifierFlags) {
|
|
var _a, _b;
|
|
var originalDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isClassLike);
|
|
var oldEnclosing = context.enclosingDeclaration;
|
|
context.enclosingDeclaration = originalDecl || oldEnclosing;
|
|
var localParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
|
|
var typeParamDecls = ts.map(localParams, function (p) { return typeParameterToDeclaration(p, context); });
|
|
var classType = getDeclaredTypeOfClassOrInterface(symbol);
|
|
var baseTypes = getBaseTypes(classType);
|
|
var originalImplements = originalDecl && ts.getEffectiveImplementsTypeNodes(originalDecl);
|
|
var implementsExpressions = originalImplements && sanitizeJSDocImplements(originalImplements)
|
|
|| ts.mapDefined(getImplementsTypes(classType), serializeImplementedType);
|
|
var staticType = getTypeOfSymbol(symbol);
|
|
var isClass = !!((_b = staticType.symbol) === null || _b === void 0 ? void 0 : _b.valueDeclaration) && ts.isClassLike(staticType.symbol.valueDeclaration);
|
|
var staticBaseType = isClass
|
|
? getBaseConstructorTypeOfClass(staticType)
|
|
: anyType;
|
|
var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117, implementsExpressions)], true);
|
|
var symbolProps = getNonInheritedProperties(classType, baseTypes, getPropertiesOfType(classType));
|
|
var publicSymbolProps = ts.filter(symbolProps, function (s) {
|
|
var valueDecl = s.valueDeclaration;
|
|
return !!valueDecl && !(ts.isNamedDeclaration(valueDecl) && ts.isPrivateIdentifier(valueDecl.name));
|
|
});
|
|
var hasPrivateIdentifier = ts.some(symbolProps, function (s) {
|
|
var valueDecl = s.valueDeclaration;
|
|
return !!valueDecl && ts.isNamedDeclaration(valueDecl) && ts.isPrivateIdentifier(valueDecl.name);
|
|
});
|
|
var privateProperties = hasPrivateIdentifier ?
|
|
[ts.factory.createPropertyDeclaration(undefined, ts.factory.createPrivateIdentifier("#private"), undefined, undefined, undefined)] :
|
|
ts.emptyArray;
|
|
var publicProperties = ts.flatMap(publicSymbolProps, function (p) { return serializePropertySymbolForClass(p, false, baseTypes[0]); });
|
|
var staticMembers = ts.flatMap(ts.filter(getPropertiesOfType(staticType), function (p) { return !(p.flags & 4194304) && p.escapedName !== "prototype" && !isNamespaceMember(p); }), function (p) { return serializePropertySymbolForClass(p, true, staticBaseType); });
|
|
var isNonConstructableClassLikeInJsFile = !isClass &&
|
|
!!symbol.valueDeclaration &&
|
|
ts.isInJSFile(symbol.valueDeclaration) &&
|
|
!ts.some(getSignaturesOfType(staticType, 1));
|
|
var constructors = isNonConstructableClassLikeInJsFile ?
|
|
[ts.factory.createConstructorDeclaration(ts.factory.createModifiersFromModifierFlags(8), [], undefined)] :
|
|
serializeSignatures(1, staticType, staticBaseType, 171);
|
|
var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
|
|
context.enclosingDeclaration = oldEnclosing;
|
|
addResult(ts.setTextRange(ts.factory.createClassDeclaration(undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
|
|
}
|
|
function getSomeTargetNameFromDeclarations(declarations) {
|
|
return ts.firstDefined(declarations, function (d) {
|
|
if (ts.isImportSpecifier(d) || ts.isExportSpecifier(d)) {
|
|
return ts.idText(d.propertyName || d.name);
|
|
}
|
|
if (ts.isBinaryExpression(d) || ts.isExportAssignment(d)) {
|
|
var expression = ts.isExportAssignment(d) ? d.expression : d.right;
|
|
if (ts.isPropertyAccessExpression(expression)) {
|
|
return ts.idText(expression.name);
|
|
}
|
|
}
|
|
if (isAliasSymbolDeclaration(d)) {
|
|
var name = ts.getNameOfDeclaration(d);
|
|
if (name && ts.isIdentifier(name)) {
|
|
return ts.idText(name);
|
|
}
|
|
}
|
|
return undefined;
|
|
});
|
|
}
|
|
function serializeAsAlias(symbol, localName, modifierFlags) {
|
|
var _a, _b, _c, _d, _e;
|
|
var node = getDeclarationOfAliasSymbol(symbol);
|
|
if (!node)
|
|
return ts.Debug.fail();
|
|
var target = getMergedSymbol(getTargetOfAliasDeclaration(node, true));
|
|
if (!target) {
|
|
return;
|
|
}
|
|
var verbatimTargetName = ts.isShorthandAmbientModuleSymbol(target) && getSomeTargetNameFromDeclarations(symbol.declarations) || ts.unescapeLeadingUnderscores(target.escapedName);
|
|
if (verbatimTargetName === "export=" && (ts.getESModuleInterop(compilerOptions) || compilerOptions.allowSyntheticDefaultImports)) {
|
|
verbatimTargetName = "default";
|
|
}
|
|
var targetName = getInternalSymbolName(target, verbatimTargetName);
|
|
includePrivateSymbol(target);
|
|
switch (node.kind) {
|
|
case 203:
|
|
if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 254) {
|
|
var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context);
|
|
var propertyName = node.propertyName;
|
|
addResult(ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([ts.factory.createImportSpecifier(false, propertyName && ts.isIdentifier(propertyName) ? ts.factory.createIdentifier(ts.idText(propertyName)) : undefined, ts.factory.createIdentifier(localName))])), ts.factory.createStringLiteral(specifier_1), undefined), 0);
|
|
break;
|
|
}
|
|
ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
|
|
break;
|
|
case 297:
|
|
if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 221) {
|
|
serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
|
|
}
|
|
break;
|
|
case 254:
|
|
if (ts.isPropertyAccessExpression(node.initializer)) {
|
|
var initializer = node.initializer;
|
|
var uniqueName = ts.factory.createUniqueName(localName);
|
|
var specifier_2 = getSpecifierForModuleSymbol(target.parent || target, context);
|
|
addResult(ts.factory.createImportEqualsDeclaration(undefined, false, uniqueName, ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(specifier_2))), 0);
|
|
addResult(ts.factory.createImportEqualsDeclaration(undefined, false, ts.factory.createIdentifier(localName), ts.factory.createQualifiedName(uniqueName, initializer.name)), modifierFlags);
|
|
break;
|
|
}
|
|
case 265:
|
|
if (target.escapedName === "export=" && ts.some(target.declarations, ts.isJsonSourceFile)) {
|
|
serializeMaybeAliasAssignment(symbol);
|
|
break;
|
|
}
|
|
var isLocalImport = !(target.flags & 512) && !ts.isVariableDeclaration(node);
|
|
addResult(ts.factory.createImportEqualsDeclaration(undefined, false, ts.factory.createIdentifier(localName), isLocalImport
|
|
? symbolToName(target, context, 67108863, false)
|
|
: ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0);
|
|
break;
|
|
case 264:
|
|
addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0);
|
|
break;
|
|
case 267:
|
|
addResult(ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, ts.factory.createIdentifier(localName), undefined), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context)), undefined), 0);
|
|
break;
|
|
case 268:
|
|
addResult(ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)), undefined), 0);
|
|
break;
|
|
case 274:
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0);
|
|
break;
|
|
case 270:
|
|
addResult(ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([
|
|
ts.factory.createImportSpecifier(false, localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
|
|
])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context)), undefined), 0);
|
|
break;
|
|
case 275:
|
|
var specifier = node.parent.parent.moduleSpecifier;
|
|
serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
|
|
break;
|
|
case 271:
|
|
serializeMaybeAliasAssignment(symbol);
|
|
break;
|
|
case 221:
|
|
case 206:
|
|
case 207:
|
|
if (symbol.escapedName === "default" || symbol.escapedName === "export=") {
|
|
serializeMaybeAliasAssignment(symbol);
|
|
}
|
|
else {
|
|
serializeExportSpecifier(localName, targetName);
|
|
}
|
|
break;
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node, "Unhandled alias declaration kind in symbol serializer!");
|
|
}
|
|
}
|
|
function serializeExportSpecifier(localName, targetName, specifier) {
|
|
addResult(ts.factory.createExportDeclaration(undefined, false, ts.factory.createNamedExports([ts.factory.createExportSpecifier(false, localName !== targetName ? targetName : undefined, localName)]), specifier), 0);
|
|
}
|
|
function serializeMaybeAliasAssignment(symbol) {
|
|
if (symbol.flags & 4194304) {
|
|
return false;
|
|
}
|
|
var name = ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
var isExportEquals = name === "export=";
|
|
var isDefault = name === "default";
|
|
var isExportAssignmentCompatibleSymbolName = isExportEquals || isDefault;
|
|
var aliasDecl = symbol.declarations && getDeclarationOfAliasSymbol(symbol);
|
|
var target = aliasDecl && getTargetOfAliasDeclaration(aliasDecl, true);
|
|
if (target && ts.length(target.declarations) && ts.some(target.declarations, function (d) { return ts.getSourceFileOfNode(d) === ts.getSourceFileOfNode(enclosingDeclaration); })) {
|
|
var expr = aliasDecl && ((ts.isExportAssignment(aliasDecl) || ts.isBinaryExpression(aliasDecl)) ? ts.getExportAssignmentExpression(aliasDecl) : ts.getPropertyAssignmentAliasLikeExpression(aliasDecl));
|
|
var first_1 = expr && ts.isEntityNameExpression(expr) ? getFirstNonModuleExportsIdentifier(expr) : undefined;
|
|
var referenced = first_1 && resolveEntityName(first_1, 67108863, true, true, enclosingDeclaration);
|
|
if (referenced || target) {
|
|
includePrivateSymbol(referenced || target);
|
|
}
|
|
var oldTrack = context.tracker.trackSymbol;
|
|
context.tracker.trackSymbol = function () { return false; };
|
|
if (isExportAssignmentCompatibleSymbolName) {
|
|
results.push(ts.factory.createExportAssignment(undefined, isExportEquals, symbolToExpression(target, context, 67108863)));
|
|
}
|
|
else {
|
|
if (first_1 === expr && first_1) {
|
|
serializeExportSpecifier(name, ts.idText(first_1));
|
|
}
|
|
else if (expr && ts.isClassExpression(expr)) {
|
|
serializeExportSpecifier(name, getInternalSymbolName(target, ts.symbolName(target)));
|
|
}
|
|
else {
|
|
var varName = getUnusedName(name, symbol);
|
|
addResult(ts.factory.createImportEqualsDeclaration(undefined, false, ts.factory.createIdentifier(varName), symbolToName(target, context, 67108863, false)), 0);
|
|
serializeExportSpecifier(name, varName);
|
|
}
|
|
}
|
|
context.tracker.trackSymbol = oldTrack;
|
|
return true;
|
|
}
|
|
else {
|
|
var varName = getUnusedName(name, symbol);
|
|
var typeToSerialize = getWidenedType(getTypeOfSymbol(getMergedSymbol(symbol)));
|
|
if (isTypeRepresentableAsFunctionNamespaceMerge(typeToSerialize, symbol)) {
|
|
serializeAsFunctionNamespaceMerge(typeToSerialize, symbol, varName, isExportAssignmentCompatibleSymbolName ? 0 : 1);
|
|
}
|
|
else {
|
|
var statement = ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
|
|
ts.factory.createVariableDeclaration(varName, undefined, serializeTypeForDeclaration(context, typeToSerialize, symbol, enclosingDeclaration, includePrivateSymbol, bundled))
|
|
], 2));
|
|
addResult(statement, target && target.flags & 4 && target.escapedName === "export=" ? 2
|
|
: name === varName ? 1
|
|
: 0);
|
|
}
|
|
if (isExportAssignmentCompatibleSymbolName) {
|
|
results.push(ts.factory.createExportAssignment(undefined, isExportEquals, ts.factory.createIdentifier(varName)));
|
|
return true;
|
|
}
|
|
else if (name !== varName) {
|
|
serializeExportSpecifier(name, varName);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
function isTypeRepresentableAsFunctionNamespaceMerge(typeToSerialize, hostSymbol) {
|
|
var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
|
|
return ts.getObjectFlags(typeToSerialize) & (16 | 32) &&
|
|
!ts.length(getIndexInfosOfType(typeToSerialize)) &&
|
|
!isClassInstanceSide(typeToSerialize) &&
|
|
!!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0))) &&
|
|
!ts.length(getSignaturesOfType(typeToSerialize, 1)) &&
|
|
!getDeclarationWithTypeAnnotation(hostSymbol, enclosingDeclaration) &&
|
|
!(typeToSerialize.symbol && ts.some(typeToSerialize.symbol.declarations, function (d) { return ts.getSourceFileOfNode(d) !== ctxSrc; })) &&
|
|
!ts.some(getPropertiesOfType(typeToSerialize), function (p) { return isLateBoundName(p.escapedName); }) &&
|
|
!ts.some(getPropertiesOfType(typeToSerialize), function (p) { return ts.some(p.declarations, function (d) { return ts.getSourceFileOfNode(d) !== ctxSrc; }); }) &&
|
|
ts.every(getPropertiesOfType(typeToSerialize), function (p) { return ts.isIdentifierText(ts.symbolName(p), languageVersion); });
|
|
}
|
|
function makeSerializePropertySymbol(createProperty, methodKind, useAccessors) {
|
|
return function serializePropertySymbol(p, isStatic, baseType) {
|
|
var _a, _b, _c, _d, _e;
|
|
var modifierFlags = ts.getDeclarationModifierFlagsFromSymbol(p);
|
|
var isPrivate = !!(modifierFlags & 8);
|
|
if (isStatic && (p.flags & (788968 | 1920 | 2097152))) {
|
|
return [];
|
|
}
|
|
if (p.flags & 4194304 ||
|
|
(baseType && getPropertyOfType(baseType, p.escapedName)
|
|
&& isReadonlySymbol(getPropertyOfType(baseType, p.escapedName)) === isReadonlySymbol(p)
|
|
&& (p.flags & 16777216) === (getPropertyOfType(baseType, p.escapedName).flags & 16777216)
|
|
&& isTypeIdenticalTo(getTypeOfSymbol(p), getTypeOfPropertyOfType(baseType, p.escapedName)))) {
|
|
return [];
|
|
}
|
|
var flag = (modifierFlags & ~256) | (isStatic ? 32 : 0);
|
|
var name = getPropertyNameNodeForSymbol(p, context);
|
|
var firstPropertyLikeDecl = (_a = p.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.or(ts.isPropertyDeclaration, ts.isAccessor, ts.isVariableDeclaration, ts.isPropertySignature, ts.isBinaryExpression, ts.isPropertyAccessExpression));
|
|
if (p.flags & 98304 && useAccessors) {
|
|
var result = [];
|
|
if (p.flags & 65536) {
|
|
result.push(ts.setTextRange(ts.factory.createSetAccessorDeclaration(ts.factory.createModifiersFromModifierFlags(flag), name, [ts.factory.createParameterDeclaration(undefined, undefined, "arg", undefined, isPrivate ? undefined : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration, includePrivateSymbol, bundled))], undefined), ((_b = p.declarations) === null || _b === void 0 ? void 0 : _b.find(ts.isSetAccessor)) || firstPropertyLikeDecl));
|
|
}
|
|
if (p.flags & 32768) {
|
|
var isPrivate_1 = modifierFlags & 8;
|
|
result.push(ts.setTextRange(ts.factory.createGetAccessorDeclaration(ts.factory.createModifiersFromModifierFlags(flag), name, [], isPrivate_1 ? undefined : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration, includePrivateSymbol, bundled), undefined), ((_c = p.declarations) === null || _c === void 0 ? void 0 : _c.find(ts.isGetAccessor)) || firstPropertyLikeDecl));
|
|
}
|
|
return result;
|
|
}
|
|
else if (p.flags & (4 | 3 | 98304)) {
|
|
return ts.setTextRange(createProperty(ts.factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 64 : 0) | flag), name, p.flags & 16777216 ? ts.factory.createToken(57) : undefined, isPrivate ? undefined : serializeTypeForDeclaration(context, getTypeOfSymbol(p), p, enclosingDeclaration, includePrivateSymbol, bundled), undefined), ((_d = p.declarations) === null || _d === void 0 ? void 0 : _d.find(ts.or(ts.isPropertyDeclaration, ts.isVariableDeclaration))) || firstPropertyLikeDecl);
|
|
}
|
|
if (p.flags & (8192 | 16)) {
|
|
var type = getTypeOfSymbol(p);
|
|
var signatures = getSignaturesOfType(type, 0);
|
|
if (flag & 8) {
|
|
return ts.setTextRange(createProperty(ts.factory.createModifiersFromModifierFlags((isReadonlySymbol(p) ? 64 : 0) | flag), name, p.flags & 16777216 ? ts.factory.createToken(57) : undefined, undefined, undefined), ((_e = p.declarations) === null || _e === void 0 ? void 0 : _e.find(ts.isFunctionLikeDeclaration)) || signatures[0] && signatures[0].declaration || p.declarations && p.declarations[0]);
|
|
}
|
|
var results_1 = [];
|
|
for (var _i = 0, signatures_3 = signatures; _i < signatures_3.length; _i++) {
|
|
var sig = signatures_3[_i];
|
|
var decl = signatureToSignatureDeclarationHelper(sig, methodKind, context, {
|
|
name: name,
|
|
questionToken: p.flags & 16777216 ? ts.factory.createToken(57) : undefined,
|
|
modifiers: flag ? ts.factory.createModifiersFromModifierFlags(flag) : undefined
|
|
});
|
|
var location = sig.declaration && ts.isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
|
|
results_1.push(ts.setTextRange(decl, location));
|
|
}
|
|
return results_1;
|
|
}
|
|
return ts.Debug.fail("Unhandled class member kind! ".concat(p.__debugFlags || p.flags));
|
|
};
|
|
}
|
|
function serializePropertySymbolForInterface(p, baseType) {
|
|
return serializePropertySymbolForInterfaceWorker(p, false, baseType);
|
|
}
|
|
function serializeSignatures(kind, input, baseType, outputKind) {
|
|
var signatures = getSignaturesOfType(input, kind);
|
|
if (kind === 1) {
|
|
if (!baseType && ts.every(signatures, function (s) { return ts.length(s.parameters) === 0; })) {
|
|
return [];
|
|
}
|
|
if (baseType) {
|
|
var baseSigs = getSignaturesOfType(baseType, 1);
|
|
if (!ts.length(baseSigs) && ts.every(signatures, function (s) { return ts.length(s.parameters) === 0; })) {
|
|
return [];
|
|
}
|
|
if (baseSigs.length === signatures.length) {
|
|
var failed = false;
|
|
for (var i = 0; i < baseSigs.length; i++) {
|
|
if (!compareSignaturesIdentical(signatures[i], baseSigs[i], false, false, true, compareTypesIdentical)) {
|
|
failed = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!failed) {
|
|
return [];
|
|
}
|
|
}
|
|
}
|
|
var privateProtected = 0;
|
|
for (var _i = 0, signatures_4 = signatures; _i < signatures_4.length; _i++) {
|
|
var s = signatures_4[_i];
|
|
if (s.declaration) {
|
|
privateProtected |= ts.getSelectedEffectiveModifierFlags(s.declaration, 8 | 16);
|
|
}
|
|
}
|
|
if (privateProtected) {
|
|
return [ts.setTextRange(ts.factory.createConstructorDeclaration(ts.factory.createModifiersFromModifierFlags(privateProtected), [], undefined), signatures[0].declaration)];
|
|
}
|
|
}
|
|
var results = [];
|
|
for (var _a = 0, signatures_5 = signatures; _a < signatures_5.length; _a++) {
|
|
var sig = signatures_5[_a];
|
|
var decl = signatureToSignatureDeclarationHelper(sig, outputKind, context);
|
|
results.push(ts.setTextRange(decl, sig.declaration));
|
|
}
|
|
return results;
|
|
}
|
|
function serializeIndexSignatures(input, baseType) {
|
|
var results = [];
|
|
for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
|
|
var info = _a[_i];
|
|
if (baseType) {
|
|
var baseInfo = getIndexInfoOfType(baseType, info.keyType);
|
|
if (baseInfo) {
|
|
if (isTypeIdenticalTo(info.type, baseInfo.type)) {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, undefined));
|
|
}
|
|
return results;
|
|
}
|
|
function serializeBaseType(t, staticType, rootName) {
|
|
var ref = trySerializeAsTypeReference(t, 111551);
|
|
if (ref) {
|
|
return ref;
|
|
}
|
|
var tempName = getUnusedName("".concat(rootName, "_base"));
|
|
var statement = ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
|
|
ts.factory.createVariableDeclaration(tempName, undefined, typeToTypeNodeHelper(staticType, context))
|
|
], 2));
|
|
addResult(statement, 0);
|
|
return ts.factory.createExpressionWithTypeArguments(ts.factory.createIdentifier(tempName), undefined);
|
|
}
|
|
function trySerializeAsTypeReference(t, flags) {
|
|
var typeArgs;
|
|
var reference;
|
|
if (t.target && isSymbolAccessibleByFlags(t.target.symbol, enclosingDeclaration, flags)) {
|
|
typeArgs = ts.map(getTypeArguments(t), function (t) { return typeToTypeNodeHelper(t, context); });
|
|
reference = symbolToExpression(t.target.symbol, context, 788968);
|
|
}
|
|
else if (t.symbol && isSymbolAccessibleByFlags(t.symbol, enclosingDeclaration, flags)) {
|
|
reference = symbolToExpression(t.symbol, context, 788968);
|
|
}
|
|
if (reference) {
|
|
return ts.factory.createExpressionWithTypeArguments(reference, typeArgs);
|
|
}
|
|
}
|
|
function serializeImplementedType(t) {
|
|
var ref = trySerializeAsTypeReference(t, 788968);
|
|
if (ref) {
|
|
return ref;
|
|
}
|
|
if (t.symbol) {
|
|
return ts.factory.createExpressionWithTypeArguments(symbolToExpression(t.symbol, context, 788968), undefined);
|
|
}
|
|
}
|
|
function getUnusedName(input, symbol) {
|
|
var _a, _b;
|
|
var id = symbol ? getSymbolId(symbol) : undefined;
|
|
if (id) {
|
|
if (context.remappedSymbolNames.has(id)) {
|
|
return context.remappedSymbolNames.get(id);
|
|
}
|
|
}
|
|
if (symbol) {
|
|
input = getNameCandidateWorker(symbol, input);
|
|
}
|
|
var i = 0;
|
|
var original = input;
|
|
while ((_a = context.usedSymbolNames) === null || _a === void 0 ? void 0 : _a.has(input)) {
|
|
i++;
|
|
input = "".concat(original, "_").concat(i);
|
|
}
|
|
(_b = context.usedSymbolNames) === null || _b === void 0 ? void 0 : _b.add(input);
|
|
if (id) {
|
|
context.remappedSymbolNames.set(id, input);
|
|
}
|
|
return input;
|
|
}
|
|
function getNameCandidateWorker(symbol, localName) {
|
|
if (localName === "default" || localName === "__class" || localName === "__function") {
|
|
var flags = context.flags;
|
|
context.flags |= 16777216;
|
|
var nameCandidate = getNameOfSymbolAsWritten(symbol, context);
|
|
context.flags = flags;
|
|
localName = nameCandidate.length > 0 && ts.isSingleOrDoubleQuote(nameCandidate.charCodeAt(0)) ? ts.stripQuotes(nameCandidate) : nameCandidate;
|
|
}
|
|
if (localName === "default") {
|
|
localName = "_default";
|
|
}
|
|
else if (localName === "export=") {
|
|
localName = "_exports";
|
|
}
|
|
localName = ts.isIdentifierText(localName, languageVersion) && !ts.isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-zA-Z0-9]/g, "_");
|
|
return localName;
|
|
}
|
|
function getInternalSymbolName(symbol, localName) {
|
|
var id = getSymbolId(symbol);
|
|
if (context.remappedSymbolNames.has(id)) {
|
|
return context.remappedSymbolNames.get(id);
|
|
}
|
|
localName = getNameCandidateWorker(symbol, localName);
|
|
context.remappedSymbolNames.set(id, localName);
|
|
return localName;
|
|
}
|
|
}
|
|
}
|
|
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.factory.createTypePredicateNode(typePredicate.kind === 2 || typePredicate.kind === 3 ? ts.factory.createToken(128) : undefined, typePredicate.kind === 1 || typePredicate.kind === 3 ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | 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 & 98304)) {
|
|
if (t.flags & (512 | 1024)) {
|
|
var baseType = t.flags & 512 ? booleanType : getBaseTypeOfEnumLiteralType(t);
|
|
if (baseType.flags & 1048576) {
|
|
var count = baseType.types.length;
|
|
if (i + count <= types.length && getRegularTypeOfLiteralType(types[i + count - 1]) === getRegularTypeOfLiteralType(baseType.types[count - 1])) {
|
|
result.push(baseType);
|
|
i += count - 1;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
result.push(t);
|
|
}
|
|
}
|
|
if (flags & 65536)
|
|
result.push(nullType);
|
|
if (flags & 32768)
|
|
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 && type.symbol.declarations) {
|
|
var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
|
|
if (node.kind === 259) {
|
|
return getSymbolOfNode(node);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function isTopLevelInExternalModuleAugmentation(node) {
|
|
return node && node.parent &&
|
|
node.parent.kind === 262 &&
|
|
ts.isExternalModuleAugmentation(node.parent.parent);
|
|
}
|
|
function isDefaultBindingContext(location) {
|
|
return location.kind === 305 || ts.isAmbientModule(location);
|
|
}
|
|
function getNameOfSymbolFromNameType(symbol, context) {
|
|
var nameType = getSymbolLinks(symbol).nameType;
|
|
if (nameType) {
|
|
if (nameType.flags & 384) {
|
|
var name = "" + nameType.value;
|
|
if (!ts.isIdentifierText(name, ts.getEmitScriptTarget(compilerOptions)) && !ts.isNumericLiteralName(name)) {
|
|
return "\"".concat(ts.escapeString(name, 34), "\"");
|
|
}
|
|
if (ts.isNumericLiteralName(name) && ts.startsWith(name, "-")) {
|
|
return "[".concat(name, "]");
|
|
}
|
|
return name;
|
|
}
|
|
if (nameType.flags & 8192) {
|
|
return "[".concat(getNameOfSymbolAsWritten(nameType.symbol, context), "]");
|
|
}
|
|
}
|
|
}
|
|
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) {
|
|
var declaration = ts.firstDefined(symbol.declarations, function (d) { return ts.getNameOfDeclaration(d) ? d : undefined; });
|
|
var name_4 = declaration && ts.getNameOfDeclaration(declaration);
|
|
if (declaration && name_4) {
|
|
if (ts.isCallExpression(declaration) && ts.isBindableObjectDefinePropertyCall(declaration)) {
|
|
return ts.symbolName(symbol);
|
|
}
|
|
if (ts.isComputedPropertyName(name_4) && !(ts.getCheckFlags(symbol) & 4096)) {
|
|
var nameType = getSymbolLinks(symbol).nameType;
|
|
if (nameType && nameType.flags & 384) {
|
|
var result = getNameOfSymbolFromNameType(symbol, context);
|
|
if (result !== undefined) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return ts.declarationNameToString(name_4);
|
|
}
|
|
if (!declaration) {
|
|
declaration = symbol.declarations[0];
|
|
}
|
|
if (declaration.parent && declaration.parent.kind === 254) {
|
|
return ts.declarationNameToString(declaration.parent.name);
|
|
}
|
|
switch (declaration.kind) {
|
|
case 226:
|
|
case 213:
|
|
case 214:
|
|
if (context && !context.encounteredError && !(context.flags & 131072)) {
|
|
context.encounteredError = true;
|
|
}
|
|
return declaration.kind === 226 ? "(Anonymous class)" : "(Anonymous function)";
|
|
}
|
|
}
|
|
var name = getNameOfSymbolFromNameType(symbol, context);
|
|
return name !== undefined ? name : 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 338:
|
|
case 345:
|
|
case 339:
|
|
return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
|
|
case 203:
|
|
return isDeclarationVisible(node.parent.parent);
|
|
case 254:
|
|
if (ts.isBindingPattern(node.name) &&
|
|
!node.name.elements.length) {
|
|
return false;
|
|
}
|
|
case 261:
|
|
case 257:
|
|
case 258:
|
|
case 259:
|
|
case 256:
|
|
case 260:
|
|
case 265:
|
|
if (ts.isExternalModuleAugmentation(node)) {
|
|
return true;
|
|
}
|
|
var parent = getDeclarationContainer(node);
|
|
if (!(ts.getCombinedModifierFlags(node) & 1) &&
|
|
!(node.kind !== 265 && parent.kind !== 305 && parent.flags & 16777216)) {
|
|
return isGlobalSourceFile(parent);
|
|
}
|
|
return isDeclarationVisible(parent);
|
|
case 167:
|
|
case 166:
|
|
case 172:
|
|
case 173:
|
|
case 169:
|
|
case 168:
|
|
if (ts.hasEffectiveModifier(node, 8 | 16)) {
|
|
return false;
|
|
}
|
|
case 171:
|
|
case 175:
|
|
case 174:
|
|
case 176:
|
|
case 164:
|
|
case 262:
|
|
case 179:
|
|
case 180:
|
|
case 182:
|
|
case 178:
|
|
case 183:
|
|
case 184:
|
|
case 187:
|
|
case 188:
|
|
case 191:
|
|
case 197:
|
|
return isDeclarationVisible(node.parent);
|
|
case 267:
|
|
case 268:
|
|
case 270:
|
|
return false;
|
|
case 163:
|
|
case 305:
|
|
case 264:
|
|
return true;
|
|
case 271:
|
|
return false;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
function collectLinkedAliases(node, setVisibility) {
|
|
var exportSymbol;
|
|
if (node.parent && node.parent.kind === 271) {
|
|
exportSymbol = resolveName(node, node.escapedText, 111551 | 788968 | 1920 | 2097152, undefined, node, false);
|
|
}
|
|
else if (node.parent.kind === 275) {
|
|
exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 | 788968 | 1920 | 2097152);
|
|
}
|
|
var result;
|
|
var visited;
|
|
if (exportSymbol) {
|
|
visited = new ts.Set();
|
|
visited.add(getSymbolId(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 = ts.getFirstIdentifier(internalModuleReference);
|
|
var importSymbol = resolveName(declaration, firstIdentifier.escapedText, 111551 | 788968 | 1920, undefined, undefined, false);
|
|
if (importSymbol && visited) {
|
|
if (ts.tryAddToSet(visited, getSymbolId(importSymbol))) {
|
|
buildVisibleNodeList(importSymbol.declarations);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function pushTypeResolution(target, propertyName) {
|
|
var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName);
|
|
if (resolutionCycleStartIndex >= 0) {
|
|
var length_3 = resolutionTargets.length;
|
|
for (var i = resolutionCycleStartIndex; i < length_3; 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) {
|
|
switch (propertyName) {
|
|
case 0:
|
|
return !!getSymbolLinks(target).type;
|
|
case 5:
|
|
return !!(getNodeLinks(target).resolvedEnumType);
|
|
case 2:
|
|
return !!getSymbolLinks(target).declaredType;
|
|
case 1:
|
|
return !!target.resolvedBaseConstructorType;
|
|
case 3:
|
|
return !!target.resolvedReturnType;
|
|
case 4:
|
|
return !!target.immediateBaseConstraint;
|
|
case 6:
|
|
return !!target.resolvedTypeArguments;
|
|
case 7:
|
|
return !!target.baseTypesResolved;
|
|
case 8:
|
|
return !!getSymbolLinks(target).writeType;
|
|
}
|
|
return ts.Debug.assertNever(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 254:
|
|
case 255:
|
|
case 270:
|
|
case 269:
|
|
case 268:
|
|
case 267:
|
|
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 getTypeOfPropertyOrIndexSignature(type, name) {
|
|
var _a;
|
|
return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
|
|
}
|
|
function isTypeAny(type) {
|
|
return type && (type.flags & 1) !== 0;
|
|
}
|
|
function isErrorType(type) {
|
|
return type === errorType || !!(type.flags & 1 && type.aliasSymbol);
|
|
}
|
|
function getTypeForBindingElementParent(node, checkMode) {
|
|
if (checkMode !== 0) {
|
|
return getTypeForVariableLikeDeclaration(node, false, checkMode);
|
|
}
|
|
var symbol = getSymbolOfNode(node);
|
|
return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false, checkMode);
|
|
}
|
|
function getRestType(source, properties, symbol) {
|
|
source = filterType(source, function (t) { return !(t.flags & 98304); });
|
|
if (source.flags & 131072) {
|
|
return emptyObjectType;
|
|
}
|
|
if (source.flags & 1048576) {
|
|
return mapType(source, function (t) { return getRestType(t, properties, symbol); });
|
|
}
|
|
var omitKeyType = getUnionType(ts.map(properties, getLiteralTypeFromPropertyName));
|
|
var spreadableProperties = [];
|
|
var unspreadableToRestKeys = [];
|
|
for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
var literalTypeFromProperty = getLiteralTypeFromProperty(prop, 8576);
|
|
if (!isTypeAssignableTo(literalTypeFromProperty, omitKeyType)
|
|
&& !(ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 | 16))
|
|
&& isSpreadableProperty(prop)) {
|
|
spreadableProperties.push(prop);
|
|
}
|
|
else {
|
|
unspreadableToRestKeys.push(literalTypeFromProperty);
|
|
}
|
|
}
|
|
if (isGenericObjectType(source) || isGenericIndexType(omitKeyType)) {
|
|
if (unspreadableToRestKeys.length) {
|
|
omitKeyType = getUnionType(__spreadArray([omitKeyType], unspreadableToRestKeys, true));
|
|
}
|
|
if (omitKeyType.flags & 131072) {
|
|
return source;
|
|
}
|
|
var omitTypeAlias = getGlobalOmitSymbol();
|
|
if (!omitTypeAlias) {
|
|
return errorType;
|
|
}
|
|
return getTypeAliasInstantiation(omitTypeAlias, [source, omitKeyType]);
|
|
}
|
|
var members = ts.createSymbolTable();
|
|
for (var _b = 0, spreadableProperties_1 = spreadableProperties; _b < spreadableProperties_1.length; _b++) {
|
|
var prop = spreadableProperties_1[_b];
|
|
members.set(prop.escapedName, getSpreadSymbol(prop, false));
|
|
}
|
|
var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
|
|
result.objectFlags |= 4194304;
|
|
return result;
|
|
}
|
|
function isGenericTypeWithUndefinedConstraint(type) {
|
|
return !!(type.flags & 465829888) && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 32768);
|
|
}
|
|
function getNonUndefinedType(type) {
|
|
var typeOrConstraint = someType(type, isGenericTypeWithUndefinedConstraint) ? mapType(type, function (t) { return t.flags & 465829888 ? getBaseConstraintOrType(t) : t; }) : type;
|
|
return getTypeWithFacts(typeOrConstraint, 524288);
|
|
}
|
|
function getFlowTypeOfDestructuring(node, declaredType) {
|
|
var reference = getSyntheticElementAccess(node);
|
|
return reference ? getFlowTypeOfReference(reference, declaredType) : declaredType;
|
|
}
|
|
function getSyntheticElementAccess(node) {
|
|
var parentAccess = getParentElementAccess(node);
|
|
if (parentAccess && parentAccess.flowNode) {
|
|
var propName = getDestructuringPropertyName(node);
|
|
if (propName) {
|
|
var literal = ts.setTextRange(ts.parseNodeFactory.createStringLiteral(propName), node);
|
|
var lhsExpr = ts.isLeftHandSideExpression(parentAccess) ? parentAccess : ts.parseNodeFactory.createParenthesizedExpression(parentAccess);
|
|
var result = ts.setTextRange(ts.parseNodeFactory.createElementAccessExpression(lhsExpr, literal), node);
|
|
ts.setParent(literal, result);
|
|
ts.setParent(result, node);
|
|
if (lhsExpr !== parentAccess) {
|
|
ts.setParent(lhsExpr, result);
|
|
}
|
|
result.flowNode = parentAccess.flowNode;
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
function getParentElementAccess(node) {
|
|
var ancestor = node.parent.parent;
|
|
switch (ancestor.kind) {
|
|
case 203:
|
|
case 296:
|
|
return getSyntheticElementAccess(ancestor);
|
|
case 204:
|
|
return getSyntheticElementAccess(node.parent);
|
|
case 254:
|
|
return ancestor.initializer;
|
|
case 221:
|
|
return ancestor.right;
|
|
}
|
|
}
|
|
function getDestructuringPropertyName(node) {
|
|
var parent = node.parent;
|
|
if (node.kind === 203 && parent.kind === 201) {
|
|
return getLiteralPropertyNameText(node.propertyName || node.name);
|
|
}
|
|
if (node.kind === 296 || node.kind === 297) {
|
|
return getLiteralPropertyNameText(node.name);
|
|
}
|
|
return "" + parent.elements.indexOf(node);
|
|
}
|
|
function getLiteralPropertyNameText(name) {
|
|
var type = getLiteralTypeFromPropertyName(name);
|
|
return type.flags & (128 | 256) ? "" + type.value : undefined;
|
|
}
|
|
function getTypeForBindingElement(declaration) {
|
|
var checkMode = declaration.dotDotDotToken ? 64 : 0;
|
|
var parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode);
|
|
return parentType && getBindingElementTypeFromParentType(declaration, parentType);
|
|
}
|
|
function getBindingElementTypeFromParentType(declaration, parentType) {
|
|
if (isTypeAny(parentType)) {
|
|
return parentType;
|
|
}
|
|
var pattern = declaration.parent;
|
|
if (strictNullChecks && declaration.flags & 16777216 && ts.isParameterDeclaration(declaration)) {
|
|
parentType = getNonNullableType(parentType);
|
|
}
|
|
else if (strictNullChecks && pattern.parent.initializer && !(getTypeFacts(getTypeOfInitializer(pattern.parent.initializer)) & 65536)) {
|
|
parentType = getTypeWithFacts(parentType, 524288);
|
|
}
|
|
var type;
|
|
if (pattern.kind === 201) {
|
|
if (declaration.dotDotDotToken) {
|
|
parentType = getReducedType(parentType);
|
|
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 indexType = getLiteralTypeFromPropertyName(name);
|
|
var declaredType = getIndexedAccessType(parentType, indexType, 32, name);
|
|
type = getFlowTypeOfDestructuring(declaration, declaredType);
|
|
}
|
|
}
|
|
else {
|
|
var elementType = checkIteratedTypeOrElementType(65 | (declaration.dotDotDotToken ? 0 : 128), parentType, undefinedType, pattern);
|
|
var index_2 = pattern.elements.indexOf(declaration);
|
|
if (declaration.dotDotDotToken) {
|
|
type = everyType(parentType, isTupleType) ?
|
|
mapType(parentType, function (t) { return sliceTupleType(t, index_2); }) :
|
|
createArrayType(elementType);
|
|
}
|
|
else if (isArrayLikeType(parentType)) {
|
|
var indexType = getNumberLiteralType(index_2);
|
|
var accessFlags = 32 | (hasDefaultValue(declaration) ? 16 : 0);
|
|
var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
|
|
type = getFlowTypeOfDestructuring(declaration, declaredType);
|
|
}
|
|
else {
|
|
type = elementType;
|
|
}
|
|
}
|
|
if (!declaration.initializer) {
|
|
return type;
|
|
}
|
|
if (ts.getEffectiveTypeAnnotationNode(ts.walkUpBindingElementsAndPatterns(declaration))) {
|
|
return strictNullChecks && !(getTypeFacts(checkDeclarationInitializer(declaration, 0)) & 16777216) ? getNonUndefinedType(type) : type;
|
|
}
|
|
return widenTypeInferredFromInitializer(declaration, getUnionType([getNonUndefinedType(type), checkDeclarationInitializer(declaration, 0)], 2));
|
|
}
|
|
function getTypeForDeclarationFromJSDocComment(declaration) {
|
|
var jsdocType = ts.getJSDocType(declaration);
|
|
if (jsdocType) {
|
|
return getTypeFromTypeNode(jsdocType);
|
|
}
|
|
return undefined;
|
|
}
|
|
function isNullOrUndefined(node) {
|
|
var expr = ts.skipParentheses(node, true);
|
|
return expr.kind === 104 || expr.kind === 79 && getResolvedSymbol(expr) === undefinedSymbol;
|
|
}
|
|
function isEmptyArrayLiteral(node) {
|
|
var expr = ts.skipParentheses(node, true);
|
|
return expr.kind === 204 && expr.elements.length === 0;
|
|
}
|
|
function addOptionality(type, isProperty, isOptional) {
|
|
if (isProperty === void 0) { isProperty = false; }
|
|
if (isOptional === void 0) { isOptional = true; }
|
|
return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
|
|
}
|
|
function getTypeForVariableLikeDeclaration(declaration, includeOptionality, checkMode) {
|
|
if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 243) {
|
|
var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression, checkMode)));
|
|
return indexType.flags & (262144 | 4194304) ? getExtractStringType(indexType) : stringType;
|
|
}
|
|
if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 244) {
|
|
var forOfStatement = declaration.parent.parent;
|
|
return checkRightHandSideOfForOf(forOfStatement) || anyType;
|
|
}
|
|
if (ts.isBindingPattern(declaration.parent)) {
|
|
return getTypeForBindingElement(declaration);
|
|
}
|
|
var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
|
|
var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
|
|
ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
|
|
isOptionalJSDocPropertyLikeTag(declaration));
|
|
var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
|
|
if (declaredType) {
|
|
return addOptionality(declaredType, isProperty, isOptional);
|
|
}
|
|
if ((noImplicitAny || ts.isInJSFile(declaration)) &&
|
|
ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
|
|
!(ts.getCombinedModifierFlags(declaration) & 1) && !(declaration.flags & 16777216)) {
|
|
if (!(ts.getCombinedNodeFlags(declaration) & 2) && (!declaration.initializer || isNullOrUndefined(declaration.initializer))) {
|
|
return autoType;
|
|
}
|
|
if (declaration.initializer && isEmptyArrayLiteral(declaration.initializer)) {
|
|
return autoArrayType;
|
|
}
|
|
}
|
|
if (ts.isParameter(declaration)) {
|
|
var func = declaration.parent;
|
|
if (func.kind === 173 && hasBindableName(func)) {
|
|
var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 172);
|
|
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);
|
|
}
|
|
}
|
|
if (ts.isInJSFile(declaration)) {
|
|
var type_1 = getParameterTypeOfTypeTag(func, declaration);
|
|
if (type_1)
|
|
return type_1;
|
|
}
|
|
var type = declaration.symbol.escapedName === "this" ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
|
|
if (type) {
|
|
return addOptionality(type, false, isOptional);
|
|
}
|
|
}
|
|
if (ts.hasOnlyExpressionInitializer(declaration) && !!declaration.initializer) {
|
|
if (ts.isInJSFile(declaration) && !ts.isParameter(declaration)) {
|
|
var containerObjectType = getJSContainerObjectType(declaration, getSymbolOfNode(declaration), ts.getDeclaredExpandoInitializer(declaration));
|
|
if (containerObjectType) {
|
|
return containerObjectType;
|
|
}
|
|
}
|
|
var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration, checkMode));
|
|
return addOptionality(type, isProperty, isOptional);
|
|
}
|
|
if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
|
|
if (!ts.hasStaticModifier(declaration)) {
|
|
var constructor = findConstructorDeclaration(declaration.parent);
|
|
var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
|
|
ts.getEffectiveModifierFlags(declaration) & 2 ? getTypeOfPropertyInBaseClass(declaration.symbol) :
|
|
undefined;
|
|
return type && addOptionality(type, true, isOptional);
|
|
}
|
|
else {
|
|
var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
|
|
var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
|
|
ts.getEffectiveModifierFlags(declaration) & 2 ? getTypeOfPropertyInBaseClass(declaration.symbol) :
|
|
undefined;
|
|
return type && addOptionality(type, true, isOptional);
|
|
}
|
|
}
|
|
if (ts.isJsxAttribute(declaration)) {
|
|
return trueType;
|
|
}
|
|
if (ts.isBindingPattern(declaration.name)) {
|
|
return getTypeFromBindingPattern(declaration.name, false, true);
|
|
}
|
|
return undefined;
|
|
}
|
|
function isConstructorDeclaredProperty(symbol) {
|
|
if (symbol.valueDeclaration && ts.isBinaryExpression(symbol.valueDeclaration)) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (links.isConstructorDeclaredProperty === undefined) {
|
|
links.isConstructorDeclaredProperty = false;
|
|
links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
|
|
return ts.isBinaryExpression(declaration) &&
|
|
isPossiblyAliasedThisProperty(declaration) &&
|
|
(declaration.left.kind !== 207 || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
|
|
!getAnnotatedTypeForAssignmentDeclaration(undefined, declaration, symbol, declaration);
|
|
});
|
|
}
|
|
return links.isConstructorDeclaredProperty;
|
|
}
|
|
return false;
|
|
}
|
|
function isAutoTypedProperty(symbol) {
|
|
var declaration = symbol.valueDeclaration;
|
|
return declaration && ts.isPropertyDeclaration(declaration) && !ts.getEffectiveTypeAnnotationNode(declaration) &&
|
|
!declaration.initializer && (noImplicitAny || ts.isInJSFile(declaration));
|
|
}
|
|
function getDeclaringConstructor(symbol) {
|
|
if (!symbol.declarations) {
|
|
return;
|
|
}
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
var container = ts.getThisContainer(declaration, false);
|
|
if (container && (container.kind === 171 || isJSConstructor(container))) {
|
|
return container;
|
|
}
|
|
}
|
|
;
|
|
}
|
|
function getFlowTypeFromCommonJSExport(symbol) {
|
|
var file = ts.getSourceFileOfNode(symbol.declarations[0]);
|
|
var accessName = ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
var areAllModuleExports = symbol.declarations.every(function (d) { return ts.isInJSFile(d) && ts.isAccessExpression(d) && ts.isModuleExportsAccessExpression(d.expression); });
|
|
var reference = areAllModuleExports
|
|
? ts.factory.createPropertyAccessExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("module"), ts.factory.createIdentifier("exports")), accessName)
|
|
: ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), accessName);
|
|
if (areAllModuleExports) {
|
|
ts.setParent(reference.expression.expression, reference.expression);
|
|
}
|
|
ts.setParent(reference.expression, reference);
|
|
ts.setParent(reference, file);
|
|
reference.flowNode = file.endFlowNode;
|
|
return getFlowTypeOfReference(reference, autoType, undefinedType);
|
|
}
|
|
function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
|
|
var accessName = ts.startsWith(symbol.escapedName, "__#")
|
|
? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
|
|
: ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
|
|
var staticBlock = staticBlocks_1[_i];
|
|
var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
|
|
ts.setParent(reference.expression, reference);
|
|
ts.setParent(reference, staticBlock);
|
|
reference.flowNode = staticBlock.returnFlowNode;
|
|
var flowType = getFlowTypeOfProperty(reference, symbol);
|
|
if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
|
|
error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
|
|
}
|
|
if (everyType(flowType, isNullableType)) {
|
|
continue;
|
|
}
|
|
return convertAutoToAny(flowType);
|
|
}
|
|
}
|
|
function getFlowTypeInConstructor(symbol, constructor) {
|
|
var accessName = ts.startsWith(symbol.escapedName, "__#")
|
|
? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
|
|
: ts.unescapeLeadingUnderscores(symbol.escapedName);
|
|
var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
|
|
ts.setParent(reference.expression, reference);
|
|
ts.setParent(reference, constructor);
|
|
reference.flowNode = constructor.returnFlowNode;
|
|
var flowType = getFlowTypeOfProperty(reference, symbol);
|
|
if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
|
|
error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
|
|
}
|
|
return everyType(flowType, isNullableType) ? undefined : convertAutoToAny(flowType);
|
|
}
|
|
function getFlowTypeOfProperty(reference, prop) {
|
|
var initialType = (prop === null || prop === void 0 ? void 0 : prop.valueDeclaration)
|
|
&& (!isAutoTypedProperty(prop) || ts.getEffectiveModifierFlags(prop.valueDeclaration) & 2)
|
|
&& getTypeOfPropertyInBaseClass(prop)
|
|
|| undefinedType;
|
|
return getFlowTypeOfReference(reference, autoType, initialType);
|
|
}
|
|
function getWidenedTypeForAssignmentDeclaration(symbol, resolvedSymbol) {
|
|
var container = ts.getAssignedExpandoInitializer(symbol.valueDeclaration);
|
|
if (container) {
|
|
var tag = ts.getJSDocTypeTag(container);
|
|
if (tag && tag.typeExpression) {
|
|
return getTypeFromTypeNode(tag.typeExpression);
|
|
}
|
|
var containerObjectType = symbol.valueDeclaration && getJSContainerObjectType(symbol.valueDeclaration, symbol, container);
|
|
return containerObjectType || getWidenedLiteralType(checkExpressionCached(container));
|
|
}
|
|
var type;
|
|
var definedInConstructor = false;
|
|
var definedInMethod = false;
|
|
if (isConstructorDeclaredProperty(symbol)) {
|
|
type = getFlowTypeInConstructor(symbol, getDeclaringConstructor(symbol));
|
|
}
|
|
if (!type) {
|
|
var types = void 0;
|
|
if (symbol.declarations) {
|
|
var jsdocType = void 0;
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
var expression = (ts.isBinaryExpression(declaration) || ts.isCallExpression(declaration)) ? declaration :
|
|
ts.isAccessExpression(declaration) ? ts.isBinaryExpression(declaration.parent) ? declaration.parent : declaration :
|
|
undefined;
|
|
if (!expression) {
|
|
continue;
|
|
}
|
|
var kind = ts.isAccessExpression(expression)
|
|
? ts.getAssignmentDeclarationPropertyAccessKind(expression)
|
|
: ts.getAssignmentDeclarationKind(expression);
|
|
if (kind === 4 || ts.isBinaryExpression(expression) && isPossiblyAliasedThisProperty(expression, kind)) {
|
|
if (isDeclarationInConstructor(expression)) {
|
|
definedInConstructor = true;
|
|
}
|
|
else {
|
|
definedInMethod = true;
|
|
}
|
|
}
|
|
if (!ts.isCallExpression(expression)) {
|
|
jsdocType = getAnnotatedTypeForAssignmentDeclaration(jsdocType, expression, symbol, declaration);
|
|
}
|
|
if (!jsdocType) {
|
|
(types || (types = [])).push((ts.isBinaryExpression(expression) || ts.isCallExpression(expression)) ? getInitializerTypeFromAssignmentDeclaration(symbol, resolvedSymbol, expression, kind) : neverType);
|
|
}
|
|
}
|
|
type = jsdocType;
|
|
}
|
|
if (!type) {
|
|
if (!ts.length(types)) {
|
|
return errorType;
|
|
}
|
|
var constructorTypes = definedInConstructor && symbol.declarations ? getConstructorDefinedThisAssignmentTypes(types, symbol.declarations) : undefined;
|
|
if (definedInMethod) {
|
|
var propType = getTypeOfPropertyInBaseClass(symbol);
|
|
if (propType) {
|
|
(constructorTypes || (constructorTypes = [])).push(propType);
|
|
definedInConstructor = true;
|
|
}
|
|
}
|
|
var sourceTypes = ts.some(constructorTypes, function (t) { return !!(t.flags & ~98304); }) ? constructorTypes : types;
|
|
type = getUnionType(sourceTypes);
|
|
}
|
|
}
|
|
var widened = getWidenedType(addOptionality(type, false, definedInMethod && !definedInConstructor));
|
|
if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304); }) === neverType) {
|
|
reportImplicitAny(symbol.valueDeclaration, anyType);
|
|
return anyType;
|
|
}
|
|
return widened;
|
|
}
|
|
function getJSContainerObjectType(decl, symbol, init) {
|
|
var _a, _b;
|
|
if (!ts.isInJSFile(decl) || !init || !ts.isObjectLiteralExpression(init) || init.properties.length) {
|
|
return undefined;
|
|
}
|
|
var exports = ts.createSymbolTable();
|
|
while (ts.isBinaryExpression(decl) || ts.isPropertyAccessExpression(decl)) {
|
|
var s_2 = getSymbolOfNode(decl);
|
|
if ((_a = s_2 === null || s_2 === void 0 ? void 0 : s_2.exports) === null || _a === void 0 ? void 0 : _a.size) {
|
|
mergeSymbolTable(exports, s_2.exports);
|
|
}
|
|
decl = ts.isBinaryExpression(decl) ? decl.parent : decl.parent.parent;
|
|
}
|
|
var s = getSymbolOfNode(decl);
|
|
if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
|
|
mergeSymbolTable(exports, s.exports);
|
|
}
|
|
var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
type.objectFlags |= 4096;
|
|
return type;
|
|
}
|
|
function getAnnotatedTypeForAssignmentDeclaration(declaredType, expression, symbol, declaration) {
|
|
var _a;
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(expression.parent);
|
|
if (typeNode) {
|
|
var type = getWidenedType(getTypeFromTypeNode(typeNode));
|
|
if (!declaredType) {
|
|
return type;
|
|
}
|
|
else if (!isErrorType(declaredType) && !isErrorType(type) && !isTypeIdenticalTo(declaredType, type)) {
|
|
errorNextVariableOrPropertyDeclarationMustHaveSameType(undefined, declaredType, declaration, type);
|
|
}
|
|
}
|
|
if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
|
|
var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
|
|
if (typeNode_2) {
|
|
var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
|
|
if (annotationSymbol) {
|
|
return getNonMissingTypeOfSymbol(annotationSymbol);
|
|
}
|
|
}
|
|
}
|
|
return declaredType;
|
|
}
|
|
function getInitializerTypeFromAssignmentDeclaration(symbol, resolvedSymbol, expression, kind) {
|
|
if (ts.isCallExpression(expression)) {
|
|
if (resolvedSymbol) {
|
|
return getTypeOfSymbol(resolvedSymbol);
|
|
}
|
|
var objectLitType = checkExpressionCached(expression.arguments[2]);
|
|
var valueType = getTypeOfPropertyOfType(objectLitType, "value");
|
|
if (valueType) {
|
|
return valueType;
|
|
}
|
|
var getFunc = getTypeOfPropertyOfType(objectLitType, "get");
|
|
if (getFunc) {
|
|
var getSig = getSingleCallSignature(getFunc);
|
|
if (getSig) {
|
|
return getReturnTypeOfSignature(getSig);
|
|
}
|
|
}
|
|
var setFunc = getTypeOfPropertyOfType(objectLitType, "set");
|
|
if (setFunc) {
|
|
var setSig = getSingleCallSignature(setFunc);
|
|
if (setSig) {
|
|
return getTypeOfFirstParameterOfSignature(setSig);
|
|
}
|
|
}
|
|
return anyType;
|
|
}
|
|
if (containsSameNamedThisProperty(expression.left, expression.right)) {
|
|
return anyType;
|
|
}
|
|
var isDirectExport = kind === 1 && (ts.isPropertyAccessExpression(expression.left) || ts.isElementAccessExpression(expression.left)) && (ts.isModuleExportsAccessExpression(expression.left.expression) || (ts.isIdentifier(expression.left.expression) && ts.isExportsIdentifier(expression.left.expression)));
|
|
var type = resolvedSymbol ? getTypeOfSymbol(resolvedSymbol)
|
|
: isDirectExport ? getRegularTypeOfLiteralType(checkExpressionCached(expression.right))
|
|
: getWidenedLiteralType(checkExpressionCached(expression.right));
|
|
if (type.flags & 524288 &&
|
|
kind === 2 &&
|
|
symbol.escapedName === "export=") {
|
|
var exportedType = resolveStructuredTypeMembers(type);
|
|
var members_4 = ts.createSymbolTable();
|
|
ts.copyEntries(exportedType.members, members_4);
|
|
var initialSize = members_4.size;
|
|
if (resolvedSymbol && !resolvedSymbol.exports) {
|
|
resolvedSymbol.exports = ts.createSymbolTable();
|
|
}
|
|
(resolvedSymbol || symbol).exports.forEach(function (s, name) {
|
|
var _a;
|
|
var exportedMember = members_4.get(name);
|
|
if (exportedMember && exportedMember !== s && !(s.flags & 2097152)) {
|
|
if (s.flags & 111551 && exportedMember.flags & 111551) {
|
|
if (s.valueDeclaration && exportedMember.valueDeclaration && ts.getSourceFileOfNode(s.valueDeclaration) !== ts.getSourceFileOfNode(exportedMember.valueDeclaration)) {
|
|
var unescapedName = ts.unescapeLeadingUnderscores(s.escapedName);
|
|
var exportedMemberName = ((_a = ts.tryCast(exportedMember.valueDeclaration, ts.isNamedDeclaration)) === null || _a === void 0 ? void 0 : _a.name) || exportedMember.valueDeclaration;
|
|
ts.addRelatedInfo(error(s.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0, unescapedName), ts.createDiagnosticForNode(exportedMemberName, ts.Diagnostics._0_was_also_declared_here, unescapedName));
|
|
ts.addRelatedInfo(error(exportedMemberName, ts.Diagnostics.Duplicate_identifier_0, unescapedName), ts.createDiagnosticForNode(s.valueDeclaration, ts.Diagnostics._0_was_also_declared_here, unescapedName));
|
|
}
|
|
var union = createSymbol(s.flags | exportedMember.flags, name);
|
|
union.type = getUnionType([getTypeOfSymbol(s), getTypeOfSymbol(exportedMember)]);
|
|
union.valueDeclaration = exportedMember.valueDeclaration;
|
|
union.declarations = ts.concatenate(exportedMember.declarations, s.declarations);
|
|
members_4.set(name, union);
|
|
}
|
|
else {
|
|
members_4.set(name, mergeSymbol(s, exportedMember));
|
|
}
|
|
}
|
|
else {
|
|
members_4.set(name, s);
|
|
}
|
|
});
|
|
var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
|
|
if (initialSize === members_4.size) {
|
|
if (type.aliasSymbol) {
|
|
result.aliasSymbol = type.aliasSymbol;
|
|
result.aliasTypeArguments = type.aliasTypeArguments;
|
|
}
|
|
if (ts.getObjectFlags(type) & 4) {
|
|
result.aliasSymbol = type.symbol;
|
|
var args = getTypeArguments(type);
|
|
result.aliasTypeArguments = ts.length(args) ? args : undefined;
|
|
}
|
|
}
|
|
result.objectFlags |= (ts.getObjectFlags(type) & 4096);
|
|
if (result.symbol && result.symbol.flags & 32 && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
|
|
result.objectFlags |= 16777216;
|
|
}
|
|
return result;
|
|
}
|
|
if (isEmptyArrayLiteralType(type)) {
|
|
reportImplicitAny(expression, anyArrayType);
|
|
return anyArrayType;
|
|
}
|
|
return type;
|
|
}
|
|
function containsSameNamedThisProperty(thisProperty, expression) {
|
|
return ts.isPropertyAccessExpression(thisProperty)
|
|
&& thisProperty.expression.kind === 108
|
|
&& ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
|
|
}
|
|
function isDeclarationInConstructor(expression) {
|
|
var thisContainer = ts.getThisContainer(expression, false);
|
|
return thisContainer.kind === 171 ||
|
|
thisContainer.kind === 256 ||
|
|
(thisContainer.kind === 213 && !ts.isPrototypePropertyAssignment(thisContainer.parent));
|
|
}
|
|
function getConstructorDefinedThisAssignmentTypes(types, declarations) {
|
|
ts.Debug.assert(types.length === declarations.length);
|
|
return types.filter(function (_, i) {
|
|
var declaration = declarations[i];
|
|
var expression = ts.isBinaryExpression(declaration) ? declaration :
|
|
ts.isBinaryExpression(declaration.parent) ? declaration.parent : undefined;
|
|
return expression && isDeclarationInConstructor(expression);
|
|
});
|
|
}
|
|
function getTypeFromBindingElement(element, includePatternInType, reportErrors) {
|
|
if (element.initializer) {
|
|
var contextualType = ts.isBindingPattern(element.name) ? getTypeFromBindingPattern(element.name, true, false) : unknownType;
|
|
return addOptionality(widenTypeInferredFromInitializer(element, checkDeclarationInitializer(element, 0, contextualType)));
|
|
}
|
|
if (ts.isBindingPattern(element.name)) {
|
|
return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors);
|
|
}
|
|
if (reportErrors && !declarationBelongsToPrivateAmbientMember(element)) {
|
|
reportImplicitAny(element, anyType);
|
|
}
|
|
return anyType;
|
|
}
|
|
function getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) {
|
|
var members = ts.createSymbolTable();
|
|
var stringIndexInfo;
|
|
var objectFlags = 128 | 131072;
|
|
ts.forEach(pattern.elements, function (e) {
|
|
var name = e.propertyName || e.name;
|
|
if (e.dotDotDotToken) {
|
|
stringIndexInfo = createIndexInfo(stringType, anyType, false);
|
|
return;
|
|
}
|
|
var exprType = getLiteralTypeFromPropertyName(name);
|
|
if (!isTypeUsableAsPropertyName(exprType)) {
|
|
objectFlags |= 512;
|
|
return;
|
|
}
|
|
var text = getPropertyNameFromType(exprType);
|
|
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 ? [stringIndexInfo] : ts.emptyArray);
|
|
result.objectFlags |= objectFlags;
|
|
if (includePatternInType) {
|
|
result.pattern = pattern;
|
|
result.objectFlags |= 131072;
|
|
}
|
|
return result;
|
|
}
|
|
function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
|
|
var elements = pattern.elements;
|
|
var lastElement = ts.lastOrUndefined(elements);
|
|
var restElement = lastElement && lastElement.kind === 203 && lastElement.dotDotDotToken ? lastElement : undefined;
|
|
if (elements.length === 0 || elements.length === 1 && restElement) {
|
|
return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
|
|
}
|
|
var elementTypes = ts.map(elements, function (e) { return ts.isOmittedExpression(e) ? anyType : getTypeFromBindingElement(e, includePatternInType, reportErrors); });
|
|
var minLength = ts.findLastIndex(elements, function (e) { return !(e === restElement || ts.isOmittedExpression(e) || hasDefaultValue(e)); }, elements.length - 1) + 1;
|
|
var elementFlags = ts.map(elements, function (e, i) { return e === restElement ? 4 : i >= minLength ? 2 : 1; });
|
|
var result = createTupleType(elementTypes, elementFlags);
|
|
if (includePatternInType) {
|
|
result = cloneTypeReference(result);
|
|
result.pattern = pattern;
|
|
result.objectFlags |= 131072;
|
|
}
|
|
return result;
|
|
}
|
|
function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
|
|
if (includePatternInType === void 0) { includePatternInType = false; }
|
|
if (reportErrors === void 0) { reportErrors = false; }
|
|
return pattern.kind === 201
|
|
? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
|
|
: getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
|
|
}
|
|
function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
|
|
return widenTypeForVariableLikeDeclaration(getTypeForVariableLikeDeclaration(declaration, true, 0), declaration, reportErrors);
|
|
}
|
|
function isGlobalSymbolConstructor(node) {
|
|
var symbol = getSymbolOfNode(node);
|
|
var globalSymbol = getGlobalESSymbolConstructorTypeSymbol(false);
|
|
return globalSymbol && symbol && symbol === globalSymbol;
|
|
}
|
|
function widenTypeForVariableLikeDeclaration(type, declaration, reportErrors) {
|
|
if (type) {
|
|
if (type.flags & 4096 && isGlobalSymbolConstructor(declaration.parent)) {
|
|
type = getESSymbolLikeTypeForNode(declaration);
|
|
}
|
|
if (reportErrors) {
|
|
reportErrorsFromWidening(declaration, type);
|
|
}
|
|
if (type.flags & 8192 && (ts.isBindingElement(declaration) || !declaration.type) && type.symbol !== getSymbolOfNode(declaration)) {
|
|
type = esSymbolType;
|
|
}
|
|
return getWidenedType(type);
|
|
}
|
|
type = ts.isParameter(declaration) && declaration.dotDotDotToken ? anyArrayType : anyType;
|
|
if (reportErrors) {
|
|
if (!declarationBelongsToPrivateAmbientMember(declaration)) {
|
|
reportImplicitAny(declaration, type);
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function declarationBelongsToPrivateAmbientMember(declaration) {
|
|
var root = ts.getRootDeclaration(declaration);
|
|
var memberDeclaration = root.kind === 164 ? root.parent : root;
|
|
return isPrivateWithinAmbient(memberDeclaration);
|
|
}
|
|
function tryGetTypeFromEffectiveTypeNode(node) {
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(node);
|
|
if (typeNode) {
|
|
return getTypeFromTypeNode(typeNode);
|
|
}
|
|
}
|
|
function getTypeOfVariableOrParameterOrProperty(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.type) {
|
|
var type = getTypeOfVariableOrParameterOrPropertyWorker(symbol);
|
|
if (!links.type) {
|
|
links.type = type;
|
|
}
|
|
}
|
|
return links.type;
|
|
}
|
|
function getTypeOfVariableOrParameterOrPropertyWorker(symbol) {
|
|
if (symbol.flags & 4194304) {
|
|
return getTypeOfPrototypeProperty(symbol);
|
|
}
|
|
if (symbol === requireSymbol) {
|
|
return anyType;
|
|
}
|
|
if (symbol.flags & 134217728 && symbol.valueDeclaration) {
|
|
var fileSymbol = getSymbolOfNode(ts.getSourceFileOfNode(symbol.valueDeclaration));
|
|
var result = createSymbol(fileSymbol.flags, "exports");
|
|
result.declarations = fileSymbol.declarations ? fileSymbol.declarations.slice() : [];
|
|
result.parent = symbol;
|
|
result.target = fileSymbol;
|
|
if (fileSymbol.valueDeclaration)
|
|
result.valueDeclaration = fileSymbol.valueDeclaration;
|
|
if (fileSymbol.members)
|
|
result.members = new ts.Map(fileSymbol.members);
|
|
if (fileSymbol.exports)
|
|
result.exports = new ts.Map(fileSymbol.exports);
|
|
var members = ts.createSymbolTable();
|
|
members.set("exports", result);
|
|
return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
}
|
|
ts.Debug.assertIsDefined(symbol.valueDeclaration);
|
|
var declaration = symbol.valueDeclaration;
|
|
if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
|
|
if (typeNode === undefined) {
|
|
return useUnknownInCatchVariables ? unknownType : anyType;
|
|
}
|
|
var type_2 = getTypeOfNode(typeNode);
|
|
return isTypeAny(type_2) || type_2 === unknownType ? type_2 : errorType;
|
|
}
|
|
if (ts.isSourceFile(declaration) && ts.isJsonSourceFile(declaration)) {
|
|
if (!declaration.statements.length) {
|
|
return emptyObjectType;
|
|
}
|
|
return getWidenedType(getWidenedLiteralType(checkExpression(declaration.statements[0].expression)));
|
|
}
|
|
if (ts.isAccessor(declaration)) {
|
|
return getTypeOfAccessors(symbol);
|
|
}
|
|
if (!pushTypeResolution(symbol, 0)) {
|
|
if (symbol.flags & 512 && !(symbol.flags & 67108864)) {
|
|
return getTypeOfFuncClassEnumModule(symbol);
|
|
}
|
|
return reportCircularityError(symbol);
|
|
}
|
|
var type;
|
|
if (declaration.kind === 271) {
|
|
type = widenTypeForVariableLikeDeclaration(tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionCached(declaration.expression), declaration);
|
|
}
|
|
else if (ts.isBinaryExpression(declaration) ||
|
|
(ts.isInJSFile(declaration) &&
|
|
(ts.isCallExpression(declaration) || (ts.isPropertyAccessExpression(declaration) || ts.isBindableStaticElementAccessExpression(declaration)) && ts.isBinaryExpression(declaration.parent)))) {
|
|
type = getWidenedTypeForAssignmentDeclaration(symbol);
|
|
}
|
|
else if (ts.isPropertyAccessExpression(declaration)
|
|
|| ts.isElementAccessExpression(declaration)
|
|
|| ts.isIdentifier(declaration)
|
|
|| ts.isStringLiteralLike(declaration)
|
|
|| ts.isNumericLiteral(declaration)
|
|
|| ts.isClassDeclaration(declaration)
|
|
|| ts.isFunctionDeclaration(declaration)
|
|
|| (ts.isMethodDeclaration(declaration) && !ts.isObjectLiteralMethod(declaration))
|
|
|| ts.isMethodSignature(declaration)
|
|
|| ts.isSourceFile(declaration)) {
|
|
if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) {
|
|
return getTypeOfFuncClassEnumModule(symbol);
|
|
}
|
|
type = ts.isBinaryExpression(declaration.parent) ?
|
|
getWidenedTypeForAssignmentDeclaration(symbol) :
|
|
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)
|
|
|| ts.isJSDocPropertyLikeTag(declaration)) {
|
|
type = getWidenedTypeForVariableLikeDeclaration(declaration, true);
|
|
}
|
|
else if (ts.isEnumDeclaration(declaration)) {
|
|
type = getTypeOfFuncClassEnumModule(symbol);
|
|
}
|
|
else if (ts.isEnumMember(declaration)) {
|
|
type = getTypeOfEnumMember(symbol);
|
|
}
|
|
else {
|
|
return ts.Debug.fail("Unhandled declaration kind! " + ts.Debug.formatSyntaxKind(declaration.kind) + " for " + ts.Debug.formatSymbol(symbol));
|
|
}
|
|
if (!popTypeResolution()) {
|
|
if (symbol.flags & 512 && !(symbol.flags & 67108864)) {
|
|
return getTypeOfFuncClassEnumModule(symbol);
|
|
}
|
|
return reportCircularityError(symbol);
|
|
}
|
|
return type;
|
|
}
|
|
function getAnnotatedAccessorTypeNode(accessor) {
|
|
if (accessor) {
|
|
if (accessor.kind === 172) {
|
|
var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
|
|
return getterTypeAnnotation;
|
|
}
|
|
else {
|
|
var setterTypeAnnotation = ts.getEffectiveSetAccessorTypeAnnotationNode(accessor);
|
|
return setterTypeAnnotation;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getAnnotatedAccessorType(accessor) {
|
|
var node = getAnnotatedAccessorTypeNode(accessor);
|
|
return node && getTypeFromTypeNode(node);
|
|
}
|
|
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) {
|
|
if (!pushTypeResolution(symbol, 0)) {
|
|
return errorType;
|
|
}
|
|
var getter = ts.getDeclarationOfKind(symbol, 172);
|
|
var setter = ts.getDeclarationOfKind(symbol, 173);
|
|
var type = getter && ts.isInJSFile(getter) && getTypeForDeclarationFromJSDocComment(getter) ||
|
|
getAnnotatedAccessorType(getter) ||
|
|
getAnnotatedAccessorType(setter) ||
|
|
getter && getter.body && getReturnTypeFromBody(getter);
|
|
if (!type) {
|
|
if (setter && !isPrivateWithinAmbient(setter)) {
|
|
errorOrSuggestion(noImplicitAny, setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation, symbolToString(symbol));
|
|
}
|
|
else if (getter && !isPrivateWithinAmbient(getter)) {
|
|
errorOrSuggestion(noImplicitAny, getter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation, symbolToString(symbol));
|
|
}
|
|
type = anyType;
|
|
}
|
|
if (!popTypeResolution()) {
|
|
if (getAnnotatedAccessorTypeNode(getter)) {
|
|
error(getter, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
|
|
}
|
|
else if (getAnnotatedAccessorTypeNode(setter)) {
|
|
error(setter, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
|
|
}
|
|
else if (getter && noImplicitAny) {
|
|
error(getter, 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));
|
|
}
|
|
type = anyType;
|
|
}
|
|
links.type = type;
|
|
}
|
|
return links.type;
|
|
}
|
|
function getWriteTypeOfAccessors(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.writeType) {
|
|
if (!pushTypeResolution(symbol, 8)) {
|
|
return errorType;
|
|
}
|
|
var setter = ts.getDeclarationOfKind(symbol, 173);
|
|
var writeType = getAnnotatedAccessorType(setter);
|
|
if (!popTypeResolution()) {
|
|
if (getAnnotatedAccessorTypeNode(setter)) {
|
|
error(setter, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
|
|
}
|
|
writeType = anyType;
|
|
}
|
|
links.writeType = writeType || getTypeOfAccessors(symbol);
|
|
}
|
|
return links.writeType;
|
|
}
|
|
function getBaseTypeVariableOfClass(symbol) {
|
|
var baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol));
|
|
return baseConstructorType.flags & 8650752 ? baseConstructorType :
|
|
baseConstructorType.flags & 2097152 ? ts.find(baseConstructorType.types, function (t) { return !!(t.flags & 8650752); }) :
|
|
undefined;
|
|
}
|
|
function getTypeOfFuncClassEnumModule(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
var originalLinks = links;
|
|
if (!links.type) {
|
|
var expando = symbol.valueDeclaration && getSymbolOfExpando(symbol.valueDeclaration, false);
|
|
if (expando) {
|
|
var merged = mergeJSSymbols(symbol, expando);
|
|
if (merged) {
|
|
symbol = links = merged;
|
|
}
|
|
}
|
|
originalLinks.type = links.type = getTypeOfFuncClassEnumModuleWorker(symbol);
|
|
}
|
|
return links.type;
|
|
}
|
|
function getTypeOfFuncClassEnumModuleWorker(symbol) {
|
|
var declaration = symbol.valueDeclaration;
|
|
if (symbol.flags & 1536 && ts.isShorthandAmbientModuleSymbol(symbol)) {
|
|
return anyType;
|
|
}
|
|
else if (declaration && (declaration.kind === 221 ||
|
|
ts.isAccessExpression(declaration) &&
|
|
declaration.parent.kind === 221)) {
|
|
return getWidenedTypeForAssignmentDeclaration(symbol);
|
|
}
|
|
else if (symbol.flags & 512 && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
|
|
var resolvedModule = resolveExternalModuleSymbol(symbol);
|
|
if (resolvedModule !== symbol) {
|
|
if (!pushTypeResolution(symbol, 0)) {
|
|
return errorType;
|
|
}
|
|
var exportEquals = getMergedSymbol(symbol.exports.get("export="));
|
|
var type_3 = getWidenedTypeForAssignmentDeclaration(exportEquals, exportEquals === resolvedModule ? undefined : resolvedModule);
|
|
if (!popTypeResolution()) {
|
|
return reportCircularityError(symbol);
|
|
}
|
|
return type_3;
|
|
}
|
|
}
|
|
var type = createObjectType(16, symbol);
|
|
if (symbol.flags & 32) {
|
|
var baseTypeVariable = getBaseTypeVariableOfClass(symbol);
|
|
return baseTypeVariable ? getIntersectionType([type, baseTypeVariable]) : type;
|
|
}
|
|
else {
|
|
return strictNullChecks && symbol.flags & 16777216 ? getOptionalType(type) : type;
|
|
}
|
|
}
|
|
function getTypeOfEnumMember(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
return links.type || (links.type = getDeclaredTypeOfEnumMember(symbol));
|
|
}
|
|
function getTypeOfAlias(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.type) {
|
|
var targetSymbol = resolveAlias(symbol);
|
|
var exportSymbol = symbol.declarations && getTargetOfAliasDeclaration(getDeclarationOfAliasSymbol(symbol), true);
|
|
var declaredType = ts.firstDefined(exportSymbol === null || exportSymbol === void 0 ? void 0 : exportSymbol.declarations, function (d) { return ts.isExportAssignment(d) ? tryGetTypeFromEffectiveTypeNode(d) : undefined; });
|
|
links.type = (exportSymbol === null || exportSymbol === void 0 ? void 0 : exportSymbol.declarations) && isDuplicatedCommonJSExport(exportSymbol.declarations) && symbol.declarations.length ? getFlowTypeFromCommonJSExport(exportSymbol)
|
|
: isDuplicatedCommonJSExport(symbol.declarations) ? autoType
|
|
: declaredType ? declaredType
|
|
: targetSymbol.flags & 111551 ? getTypeOfSymbol(targetSymbol)
|
|
: errorType;
|
|
}
|
|
return links.type;
|
|
}
|
|
function getTypeOfInstantiatedSymbol(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
return links.type || (links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper));
|
|
}
|
|
function getWriteTypeOfInstantiatedSymbol(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
return links.writeType || (links.writeType = instantiateType(getWriteTypeOfSymbol(links.target), links.mapper));
|
|
}
|
|
function reportCircularityError(symbol) {
|
|
var declaration = symbol.valueDeclaration;
|
|
if (ts.getEffectiveTypeAnnotationNode(declaration)) {
|
|
error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
|
|
return errorType;
|
|
}
|
|
if (noImplicitAny && (declaration.kind !== 164 || declaration.initializer)) {
|
|
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 getTypeOfSymbolWithDeferredType(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.type) {
|
|
ts.Debug.assertIsDefined(links.deferralParent);
|
|
ts.Debug.assertIsDefined(links.deferralConstituents);
|
|
links.type = links.deferralParent.flags & 1048576 ? getUnionType(links.deferralConstituents) : getIntersectionType(links.deferralConstituents);
|
|
}
|
|
return links.type;
|
|
}
|
|
function getWriteTypeOfSymbolWithDeferredType(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.writeType && links.deferralWriteConstituents) {
|
|
ts.Debug.assertIsDefined(links.deferralParent);
|
|
ts.Debug.assertIsDefined(links.deferralConstituents);
|
|
links.writeType = links.deferralParent.flags & 1048576 ? getUnionType(links.deferralWriteConstituents) : getIntersectionType(links.deferralWriteConstituents);
|
|
}
|
|
return links.writeType;
|
|
}
|
|
function getWriteTypeOfSymbol(symbol) {
|
|
var checkFlags = ts.getCheckFlags(symbol);
|
|
if (symbol.flags & 4) {
|
|
return checkFlags & 2 ?
|
|
checkFlags & 65536 ?
|
|
getWriteTypeOfSymbolWithDeferredType(symbol) || getTypeOfSymbolWithDeferredType(symbol) :
|
|
symbol.writeType || symbol.type :
|
|
getTypeOfSymbol(symbol);
|
|
}
|
|
if (symbol.flags & 98304) {
|
|
return checkFlags & 1 ?
|
|
getWriteTypeOfInstantiatedSymbol(symbol) :
|
|
getWriteTypeOfAccessors(symbol);
|
|
}
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
function getTypeOfSymbol(symbol) {
|
|
var checkFlags = ts.getCheckFlags(symbol);
|
|
if (checkFlags & 65536) {
|
|
return getTypeOfSymbolWithDeferredType(symbol);
|
|
}
|
|
if (checkFlags & 1) {
|
|
return getTypeOfInstantiatedSymbol(symbol);
|
|
}
|
|
if (checkFlags & 262144) {
|
|
return getTypeOfMappedSymbol(symbol);
|
|
}
|
|
if (checkFlags & 8192) {
|
|
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 getNonMissingTypeOfSymbol(symbol) {
|
|
return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216));
|
|
}
|
|
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 & 2097152) {
|
|
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 && ts.isBinaryExpression(node)) {
|
|
var assignmentKind = ts.getAssignmentDeclarationKind(node);
|
|
if (assignmentKind === 6 || assignmentKind === 3) {
|
|
var symbol = getSymbolOfNode(node.left);
|
|
if (symbol && symbol.parent && !ts.findAncestor(symbol.parent.valueDeclaration, function (d) { return node === d; })) {
|
|
node = symbol.parent.valueDeclaration;
|
|
}
|
|
}
|
|
}
|
|
if (!node) {
|
|
return undefined;
|
|
}
|
|
switch (node.kind) {
|
|
case 257:
|
|
case 226:
|
|
case 258:
|
|
case 174:
|
|
case 175:
|
|
case 168:
|
|
case 179:
|
|
case 180:
|
|
case 317:
|
|
case 256:
|
|
case 169:
|
|
case 213:
|
|
case 214:
|
|
case 259:
|
|
case 344:
|
|
case 345:
|
|
case 339:
|
|
case 338:
|
|
case 195:
|
|
case 189: {
|
|
var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
|
|
if (node.kind === 195) {
|
|
return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
|
|
}
|
|
else if (node.kind === 189) {
|
|
return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
|
|
}
|
|
var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
|
|
var thisType = includeThisTypes &&
|
|
(node.kind === 257 || node.kind === 226 || node.kind === 258 || isJSConstructor(node)) &&
|
|
getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
|
|
return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
|
|
}
|
|
case 340:
|
|
var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
|
|
if (paramSymbol) {
|
|
node = paramSymbol.valueDeclaration;
|
|
}
|
|
break;
|
|
case 320: {
|
|
var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
|
|
return node.tags
|
|
? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
|
|
: outerTypeParameters;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getOuterTypeParametersOfClassOrInterface(symbol) {
|
|
var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 258);
|
|
ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
|
|
return getOuterTypeParameters(declaration);
|
|
}
|
|
function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) {
|
|
if (!symbol.declarations) {
|
|
return;
|
|
}
|
|
var result;
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var node = _a[_i];
|
|
if (node.kind === 258 ||
|
|
node.kind === 257 ||
|
|
node.kind === 226 ||
|
|
isJSConstructor(node) ||
|
|
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];
|
|
if (!s.typeParameters && s.parameters.length === 1 && signatureHasRestParameter(s)) {
|
|
var paramType = getTypeOfParameter(s.parameters[0]);
|
|
return isTypeAny(paramType) || getElementTypeOfArrayType(paramType) === anyType;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isConstructorType(type) {
|
|
if (getSignaturesOfType(type, 1).length > 0) {
|
|
return true;
|
|
}
|
|
if (type.flags & 8650752) {
|
|
var constraint = getBaseConstraintOfType(type);
|
|
return !!constraint && isMixinConstructorType(constraint);
|
|
}
|
|
return false;
|
|
}
|
|
function getBaseTypeNodeOfClass(type) {
|
|
var decl = ts.getClassLikeDeclarationOfSymbol(type.symbol);
|
|
return decl && ts.getEffectiveBaseTypeNode(decl);
|
|
}
|
|
function getConstructorsForTypeArguments(type, typeArgumentNodes, location) {
|
|
var typeArgCount = ts.length(typeArgumentNodes);
|
|
var isJavascript = ts.isInJSFile(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.isInJSFile(location)) : sig; });
|
|
}
|
|
function getBaseConstructorTypeOfClass(type) {
|
|
if (!type.resolvedBaseConstructorType) {
|
|
var decl = ts.getClassLikeDeclarationOfSymbol(type.symbol);
|
|
var extended = decl && ts.getEffectiveBaseTypeNode(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 & (524288 | 2097152)) {
|
|
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)) {
|
|
var err = error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType));
|
|
if (baseConstructorType.flags & 262144) {
|
|
var constraint = getConstraintFromTypeParameter(baseConstructorType);
|
|
var ctorReturn = unknownType;
|
|
if (constraint) {
|
|
var ctorSig = getSignaturesOfType(constraint, 1);
|
|
if (ctorSig[0]) {
|
|
ctorReturn = getReturnTypeOfSignature(ctorSig[0]);
|
|
}
|
|
}
|
|
if (baseConstructorType.symbol.declarations) {
|
|
ts.addRelatedInfo(err, ts.createDiagnosticForNode(baseConstructorType.symbol.declarations[0], ts.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn)));
|
|
}
|
|
}
|
|
return type.resolvedBaseConstructorType = errorType;
|
|
}
|
|
type.resolvedBaseConstructorType = baseConstructorType;
|
|
}
|
|
return type.resolvedBaseConstructorType;
|
|
}
|
|
function getImplementsTypes(type) {
|
|
var resolvedImplementsTypes = ts.emptyArray;
|
|
if (type.symbol.declarations) {
|
|
for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
var implementsTypeNodes = ts.getEffectiveImplementsTypeNodes(declaration);
|
|
if (!implementsTypeNodes)
|
|
continue;
|
|
for (var _b = 0, implementsTypeNodes_1 = implementsTypeNodes; _b < implementsTypeNodes_1.length; _b++) {
|
|
var node = implementsTypeNodes_1[_b];
|
|
var implementsType = getTypeFromTypeNode(node);
|
|
if (!isErrorType(implementsType)) {
|
|
if (resolvedImplementsTypes === ts.emptyArray) {
|
|
resolvedImplementsTypes = [implementsType];
|
|
}
|
|
else {
|
|
resolvedImplementsTypes.push(implementsType);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return resolvedImplementsTypes;
|
|
}
|
|
function reportCircularBaseType(node, type) {
|
|
error(node, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 2));
|
|
}
|
|
function getBaseTypes(type) {
|
|
if (!type.baseTypesResolved) {
|
|
if (pushTypeResolution(type, 7)) {
|
|
if (type.objectFlags & 8) {
|
|
type.resolvedBaseTypes = [getTupleBaseType(type)];
|
|
}
|
|
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");
|
|
}
|
|
if (!popTypeResolution() && type.symbol.declarations) {
|
|
for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (declaration.kind === 257 || declaration.kind === 258) {
|
|
reportCircularBaseType(declaration, type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
type.baseTypesResolved = true;
|
|
}
|
|
return type.resolvedBaseTypes;
|
|
}
|
|
function getTupleBaseType(type) {
|
|
var elementTypes = ts.sameMap(type.typeParameters, function (t, i) { return type.elementFlags[i] & 8 ? getIndexedAccessType(t, numberType) : t; });
|
|
return createArrayType(getUnionType(elementTypes || ts.emptyArray), type.readonly);
|
|
}
|
|
function resolveBaseTypesOfClass(type) {
|
|
type.resolvedBaseTypes = ts.resolvingEmptyArray;
|
|
var baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type));
|
|
if (!(baseConstructorType.flags & (524288 | 2097152 | 1))) {
|
|
return type.resolvedBaseTypes = ts.emptyArray;
|
|
}
|
|
var baseTypeNode = getBaseTypeNodeOfClass(type);
|
|
var baseType;
|
|
var originalBaseType = baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : undefined;
|
|
if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 &&
|
|
areAllOuterTypeParametersApplied(originalBaseType)) {
|
|
baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol);
|
|
}
|
|
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 (isErrorType(baseType)) {
|
|
return type.resolvedBaseTypes = ts.emptyArray;
|
|
}
|
|
var reducedBaseType = getReducedType(baseType);
|
|
if (!isValidBaseType(reducedBaseType)) {
|
|
var elaboration = elaborateNeverIntersection(undefined, baseType);
|
|
var diagnostic = ts.chainDiagnosticMessages(elaboration, ts.Diagnostics.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members, typeToString(reducedBaseType));
|
|
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(baseTypeNode.expression, diagnostic));
|
|
return type.resolvedBaseTypes = ts.emptyArray;
|
|
}
|
|
if (type === reducedBaseType || hasBaseType(reducedBaseType, 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 = [reducedBaseType];
|
|
}
|
|
function areAllOuterTypeParametersApplied(type) {
|
|
var outerTypeParameters = type.outerTypeParameters;
|
|
if (outerTypeParameters) {
|
|
var last_1 = outerTypeParameters.length - 1;
|
|
var typeArguments = getTypeArguments(type);
|
|
return outerTypeParameters[last_1].symbol !== typeArguments[last_1].symbol;
|
|
}
|
|
return true;
|
|
}
|
|
function isValidBaseType(type) {
|
|
if (type.flags & 262144) {
|
|
var constraint = getBaseConstraintOfType(type);
|
|
if (constraint) {
|
|
return isValidBaseType(constraint);
|
|
}
|
|
}
|
|
return !!(type.flags & (524288 | 67108864 | 1) && !isGenericMappedType(type) ||
|
|
type.flags & 2097152 && ts.every(type.types, isValidBaseType));
|
|
}
|
|
function resolveBaseTypesOfInterface(type) {
|
|
type.resolvedBaseTypes = type.resolvedBaseTypes || ts.emptyArray;
|
|
if (type.symbol.declarations) {
|
|
for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (declaration.kind === 258 && ts.getInterfaceBaseTypeNodes(declaration)) {
|
|
for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
|
|
var node = _c[_b];
|
|
var baseType = getReducedType(getTypeFromTypeNode(node));
|
|
if (!isErrorType(baseType)) {
|
|
if (isValidBaseType(baseType)) {
|
|
if (type !== baseType && !hasBaseType(baseType, type)) {
|
|
if (type.resolvedBaseTypes === ts.emptyArray) {
|
|
type.resolvedBaseTypes = [baseType];
|
|
}
|
|
else {
|
|
type.resolvedBaseTypes.push(baseType);
|
|
}
|
|
}
|
|
else {
|
|
reportCircularBaseType(declaration, type);
|
|
}
|
|
}
|
|
else {
|
|
error(node, ts.Diagnostics.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isThislessInterface(symbol) {
|
|
if (!symbol.declarations) {
|
|
return true;
|
|
}
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (declaration.kind === 258) {
|
|
if (declaration.flags & 128) {
|
|
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, 788968, true);
|
|
if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function getDeclaredTypeOfClassOrInterface(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
var originalLinks = links;
|
|
if (!links.declaredType) {
|
|
var kind = symbol.flags & 32 ? 1 : 2;
|
|
var merged = mergeJSSymbols(symbol, symbol.valueDeclaration && getAssignedClassSymbol(symbol.valueDeclaration));
|
|
if (merged) {
|
|
symbol = links = merged;
|
|
}
|
|
var type = originalLinks.declaredType = 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 = new ts.Map();
|
|
type.instantiations.set(getTypeListId(type.typeParameters), type);
|
|
type.target = type;
|
|
type.resolvedTypeArguments = type.typeParameters;
|
|
type.thisType = createTypeParameter(symbol);
|
|
type.thisType.isThisType = true;
|
|
type.thisType.constraint = type;
|
|
}
|
|
}
|
|
return links.declaredType;
|
|
}
|
|
function getDeclaredTypeOfTypeAlias(symbol) {
|
|
var _a;
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.declaredType) {
|
|
if (!pushTypeResolution(symbol, 2)) {
|
|
return errorType;
|
|
}
|
|
var declaration = ts.Debug.checkDefined((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isTypeAlias), "Type alias symbol with no valid declaration found");
|
|
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 = new ts.Map();
|
|
links.instantiations.set(getTypeListId(typeParameters), type);
|
|
}
|
|
}
|
|
else {
|
|
type = errorType;
|
|
if (declaration.kind === 339) {
|
|
error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
|
|
}
|
|
else {
|
|
error(ts.isNamedDeclaration(declaration) ? declaration.name || declaration : declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
|
|
}
|
|
}
|
|
links.declaredType = type;
|
|
}
|
|
return links.declaredType;
|
|
}
|
|
function isStringConcatExpression(expr) {
|
|
if (ts.isStringLiteralLike(expr)) {
|
|
return true;
|
|
}
|
|
else if (expr.kind === 221) {
|
|
return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
|
|
}
|
|
return false;
|
|
}
|
|
function isLiteralEnumMember(member) {
|
|
var expr = member.initializer;
|
|
if (!expr) {
|
|
return !(member.flags & 16777216);
|
|
}
|
|
switch (expr.kind) {
|
|
case 10:
|
|
case 8:
|
|
case 14:
|
|
return true;
|
|
case 219:
|
|
return expr.operator === 40 &&
|
|
expr.operand.kind === 8;
|
|
case 79:
|
|
return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
|
|
case 221:
|
|
return isStringConcatExpression(expr);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function getEnumKind(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (links.enumKind !== undefined) {
|
|
return links.enumKind;
|
|
}
|
|
var hasNonLiteralMember = false;
|
|
if (symbol.declarations) {
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (declaration.kind === 260) {
|
|
for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
|
|
var member = _c[_b];
|
|
if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
|
|
return links.enumKind = 1;
|
|
}
|
|
if (!isLiteralEnumMember(member)) {
|
|
hasNonLiteralMember = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return links.enumKind = hasNonLiteralMember ? 0 : 1;
|
|
}
|
|
function getBaseTypeOfEnumLiteralType(type) {
|
|
return type.flags & 1024 && !(type.flags & 1048576) ? 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 = [];
|
|
if (symbol.declarations) {
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (declaration.kind === 260) {
|
|
for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
|
|
var member = _c[_b];
|
|
var value = getEnumMemberValue(member);
|
|
var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
|
|
getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
|
|
memberTypeList.push(getRegularTypeOfLiteralType(memberType));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (memberTypeList.length) {
|
|
var enumType_1 = getUnionType(memberTypeList, 1, symbol, undefined);
|
|
if (enumType_1.flags & 1048576) {
|
|
enumType_1.flags |= 1024;
|
|
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);
|
|
return links.declaredType || (links.declaredType = createTypeParameter(symbol));
|
|
}
|
|
function getDeclaredTypeOfAlias(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
return links.declaredType || (links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol)));
|
|
}
|
|
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 130:
|
|
case 155:
|
|
case 150:
|
|
case 147:
|
|
case 158:
|
|
case 133:
|
|
case 151:
|
|
case 148:
|
|
case 114:
|
|
case 153:
|
|
case 143:
|
|
case 196:
|
|
return true;
|
|
case 183:
|
|
return isThislessType(node.elementType);
|
|
case 178:
|
|
return !node.typeArguments || node.typeArguments.every(isThislessType);
|
|
}
|
|
return false;
|
|
}
|
|
function isThislessTypeParameter(node) {
|
|
var constraint = ts.getEffectiveConstraintOfTypeParameter(node);
|
|
return !constraint || isThislessType(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 === 171 || (!!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 167:
|
|
case 166:
|
|
return isThislessVariableLikeDeclaration(declaration);
|
|
case 169:
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
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) && !isStaticPrivateIdentifierProperty(s)) {
|
|
symbols.set(s.escapedName, s);
|
|
}
|
|
}
|
|
}
|
|
function isStaticPrivateIdentifierProperty(s) {
|
|
return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
|
|
}
|
|
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.declaredIndexInfos = ts.emptyArray;
|
|
type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call"));
|
|
type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new"));
|
|
type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
|
|
}
|
|
return type;
|
|
}
|
|
function isTypeUsableAsPropertyName(type) {
|
|
return !!(type.flags & 8576);
|
|
}
|
|
function isLateBindableName(node) {
|
|
if (!ts.isComputedPropertyName(node) && !ts.isElementAccessExpression(node)) {
|
|
return false;
|
|
}
|
|
var expr = ts.isComputedPropertyName(node) ? node.expression : node.argumentExpression;
|
|
return ts.isEntityNameExpression(expr)
|
|
&& isTypeUsableAsPropertyName(ts.isComputedPropertyName(node) ? checkComputedPropertyName(node) : checkExpressionCached(expr));
|
|
}
|
|
function isLateBoundName(name) {
|
|
return name.charCodeAt(0) === 95 &&
|
|
name.charCodeAt(1) === 95 &&
|
|
name.charCodeAt(2) === 64;
|
|
}
|
|
function hasLateBindableName(node) {
|
|
var name = ts.getNameOfDeclaration(node);
|
|
return !!name && isLateBindableName(name);
|
|
}
|
|
function hasBindableName(node) {
|
|
return !ts.hasDynamicName(node) || hasLateBindableName(node);
|
|
}
|
|
function isNonBindableDynamicName(node) {
|
|
return ts.isDynamicName(node) && !isLateBindableName(node);
|
|
}
|
|
function getPropertyNameFromType(type) {
|
|
if (type.flags & 8192) {
|
|
return type.escapedName;
|
|
}
|
|
if (type.flags & (128 | 256)) {
|
|
return ts.escapeLeadingUnderscores("" + type.value);
|
|
}
|
|
return ts.Debug.fail();
|
|
}
|
|
function addDeclarationToLateBoundSymbol(symbol, member, symbolFlags) {
|
|
ts.Debug.assert(!!(ts.getCheckFlags(symbol) & 4096), "Expected a late-bound symbol.");
|
|
symbol.flags |= symbolFlags;
|
|
getSymbolLinks(member.symbol).lateSymbol = symbol;
|
|
if (!symbol.declarations) {
|
|
symbol.declarations = [member];
|
|
}
|
|
else if (!member.symbol.isReplaceableByMethod) {
|
|
symbol.declarations.push(member);
|
|
}
|
|
if (symbolFlags & 111551) {
|
|
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 declName = ts.isBinaryExpression(decl) ? decl.left : decl.name;
|
|
var type = ts.isElementAccessExpression(declName) ? checkExpressionCached(declName.argumentExpression) : checkComputedPropertyName(declName);
|
|
if (isTypeUsableAsPropertyName(type)) {
|
|
var memberName = getPropertyNameFromType(type);
|
|
var symbolFlags = decl.symbol.flags;
|
|
var lateSymbol = lateSymbols.get(memberName);
|
|
if (!lateSymbol)
|
|
lateSymbols.set(memberName, lateSymbol = createSymbol(0, memberName, 4096));
|
|
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_5 = !(type.flags & 8192) && ts.unescapeLeadingUnderscores(memberName) || ts.declarationNameToString(declName);
|
|
ts.forEach(declarations, function (declaration) { return error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Property_0_was_also_declared_here, name_5); });
|
|
error(declName || decl, ts.Diagnostics.Duplicate_property_0, name_5);
|
|
lateSymbol = createSymbol(0, memberName, 4096);
|
|
}
|
|
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_1 = resolutionKind === "resolvedExports";
|
|
var earlySymbols = !isStatic_1 ? symbol.members :
|
|
symbol.flags & 1536 ? getExportsOfModuleWorker(symbol) :
|
|
symbol.exports;
|
|
links[resolutionKind] = earlySymbols || emptySymbols;
|
|
var lateSymbols = ts.createSymbolTable();
|
|
for (var _i = 0, _a = symbol.declarations || ts.emptyArray; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
var members = ts.getMembersOfDeclaration(decl);
|
|
if (members) {
|
|
for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
|
|
var member = members_5[_b];
|
|
if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
|
|
lateBindMember(symbol, earlySymbols, lateSymbols, member);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var assignments = symbol.assignmentDeclarationMembers;
|
|
if (assignments) {
|
|
var decls = ts.arrayFrom(assignments.values());
|
|
for (var _c = 0, decls_1 = decls; _c < decls_1.length; _c++) {
|
|
var member = decls_1[_c];
|
|
var assignmentKind = ts.getAssignmentDeclarationKind(member);
|
|
var isInstanceMember = assignmentKind === 3
|
|
|| ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
|
|
|| assignmentKind === 9
|
|
|| assignmentKind === 6;
|
|
if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
|
|
lateBindMember(symbol, earlySymbols, lateSymbols, member);
|
|
}
|
|
}
|
|
}
|
|
links[resolutionKind] = combineSymbolTables(earlySymbols, lateSymbols) || emptySymbols;
|
|
}
|
|
return links[resolutionKind];
|
|
}
|
|
function getMembersOfSymbol(symbol) {
|
|
return symbol.flags & 6256
|
|
? 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)) {
|
|
var parent = getMergedSymbol(symbol.parent);
|
|
if (ts.some(symbol.declarations, ts.hasStaticModifier)) {
|
|
getExportsOfSymbol(parent);
|
|
}
|
|
else {
|
|
getMembersOfSymbol(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 = getTypeArguments(type);
|
|
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 & 2097152) {
|
|
var types = ts.sameMap(type.types, function (t) { return getTypeWithThisArgument(t, thisArgument, needApparentType); });
|
|
return types !== type.types ? getIntersectionType(types) : type;
|
|
}
|
|
return needApparentType ? getApparentType(type) : type;
|
|
}
|
|
function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) {
|
|
var mapper;
|
|
var members;
|
|
var callSignatures;
|
|
var constructSignatures;
|
|
var indexInfos;
|
|
if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
|
|
members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
|
|
callSignatures = source.declaredCallSignatures;
|
|
constructSignatures = source.declaredConstructSignatures;
|
|
indexInfos = source.declaredIndexInfos;
|
|
}
|
|
else {
|
|
mapper = createTypeMapper(typeParameters, typeArguments);
|
|
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1);
|
|
callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
|
|
constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
|
|
indexInfos = instantiateIndexInfos(source.declaredIndexInfos, 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, indexInfos);
|
|
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));
|
|
var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, false)];
|
|
indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
|
|
}
|
|
}
|
|
setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
|
|
}
|
|
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 = getTypeArguments(type);
|
|
var paddedTypeArguments = typeArguments.length === typeParameters.length ? typeArguments : ts.concatenate(typeArguments, [type]);
|
|
resolveObjectTypeMembers(type, source, typeParameters, paddedTypeArguments);
|
|
}
|
|
function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, resolvedTypePredicate, minArgumentCount, flags) {
|
|
var sig = new Signature(checker, flags);
|
|
sig.declaration = declaration;
|
|
sig.typeParameters = typeParameters;
|
|
sig.parameters = parameters;
|
|
sig.thisParameter = thisParameter;
|
|
sig.resolvedReturnType = resolvedReturnType;
|
|
sig.resolvedTypePredicate = resolvedTypePredicate;
|
|
sig.minArgumentCount = minArgumentCount;
|
|
sig.resolvedMinArgumentCount = undefined;
|
|
sig.target = undefined;
|
|
sig.mapper = undefined;
|
|
sig.compositeSignatures = undefined;
|
|
sig.compositeKind = undefined;
|
|
return sig;
|
|
}
|
|
function cloneSignature(sig) {
|
|
var result = createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, undefined, undefined, sig.minArgumentCount, sig.flags & 39);
|
|
result.target = sig.target;
|
|
result.mapper = sig.mapper;
|
|
result.compositeSignatures = sig.compositeSignatures;
|
|
result.compositeKind = sig.compositeKind;
|
|
return result;
|
|
}
|
|
function createUnionSignature(signature, unionSignatures) {
|
|
var result = cloneSignature(signature);
|
|
result.compositeSignatures = unionSignatures;
|
|
result.compositeKind = 1048576;
|
|
result.target = undefined;
|
|
result.mapper = undefined;
|
|
return result;
|
|
}
|
|
function getOptionalCallSignature(signature, callChainFlags) {
|
|
if ((signature.flags & 24) === callChainFlags) {
|
|
return signature;
|
|
}
|
|
if (!signature.optionalCallSignatureCache) {
|
|
signature.optionalCallSignatureCache = {};
|
|
}
|
|
var key = callChainFlags === 8 ? "inner" : "outer";
|
|
return signature.optionalCallSignatureCache[key]
|
|
|| (signature.optionalCallSignatureCache[key] = createOptionalCallSignature(signature, callChainFlags));
|
|
}
|
|
function createOptionalCallSignature(signature, callChainFlags) {
|
|
ts.Debug.assert(callChainFlags === 8 || callChainFlags === 16, "An optional call signature can either be for an inner call chain or an outer call chain, but not both.");
|
|
var result = cloneSignature(signature);
|
|
result.flags |= callChainFlags;
|
|
return result;
|
|
}
|
|
function getExpandedParameters(sig, skipUnionExpanding) {
|
|
if (signatureHasRestParameter(sig)) {
|
|
var restIndex_1 = sig.parameters.length - 1;
|
|
var restType = getTypeOfSymbol(sig.parameters[restIndex_1]);
|
|
if (isTupleType(restType)) {
|
|
return [expandSignatureParametersWithTupleMembers(restType, restIndex_1)];
|
|
}
|
|
else if (!skipUnionExpanding && restType.flags & 1048576 && ts.every(restType.types, isTupleType)) {
|
|
return ts.map(restType.types, function (t) { return expandSignatureParametersWithTupleMembers(t, restIndex_1); });
|
|
}
|
|
}
|
|
return [sig.parameters];
|
|
function expandSignatureParametersWithTupleMembers(restType, restIndex) {
|
|
var elementTypes = getTypeArguments(restType);
|
|
var associatedNames = restType.target.labeledElementDeclarations;
|
|
var restParams = ts.map(elementTypes, function (t, i) {
|
|
var tupleLabelName = !!associatedNames && getTupleElementLabel(associatedNames[i]);
|
|
var name = tupleLabelName || getParameterNameAtPosition(sig, restIndex + i, restType);
|
|
var flags = restType.target.elementFlags[i];
|
|
var checkFlags = flags & 12 ? 32768 :
|
|
flags & 2 ? 16384 : 0;
|
|
var symbol = createSymbol(1, name, checkFlags);
|
|
symbol.type = flags & 4 ? createArrayType(t) : t;
|
|
return symbol;
|
|
});
|
|
return ts.concatenate(sig.parameters.slice(0, restIndex), restParams);
|
|
}
|
|
}
|
|
function getDefaultConstructSignatures(classType) {
|
|
var baseConstructorType = getBaseConstructorTypeOfClass(classType);
|
|
var baseSignatures = getSignaturesOfType(baseConstructorType, 1);
|
|
var declaration = ts.getClassLikeDeclarationOfSymbol(classType.symbol);
|
|
var isAbstract = !!declaration && ts.hasSyntacticModifier(declaration, 128);
|
|
if (baseSignatures.length === 0) {
|
|
return [createSignature(undefined, classType.localTypeParameters, undefined, ts.emptyArray, classType, undefined, 0, isAbstract ? 4 : 0)];
|
|
}
|
|
var baseTypeNode = getBaseTypeNodeOfClass(classType);
|
|
var isJavaScript = ts.isInJSFile(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;
|
|
sig.flags = isAbstract ? sig.flags | 4 : sig.flags & ~4;
|
|
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, partialMatch ? compareTypesSubtypeOf : 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, false, true);
|
|
if (!match) {
|
|
return undefined;
|
|
}
|
|
result = ts.appendIfUnique(result, match);
|
|
}
|
|
return result;
|
|
}
|
|
function getUnionSignatures(signatureLists) {
|
|
var result;
|
|
var indexWithLengthOverOne;
|
|
for (var i = 0; i < signatureLists.length; i++) {
|
|
if (signatureLists[i].length === 0)
|
|
return ts.emptyArray;
|
|
if (signatureLists[i].length > 1) {
|
|
indexWithLengthOverOne = indexWithLengthOverOne === undefined ? i : -1;
|
|
}
|
|
for (var _i = 0, _a = signatureLists[i]; _i < _a.length; _i++) {
|
|
var signature = _a[_i];
|
|
if (!result || !findMatchingSignature(result, signature, false, false, true)) {
|
|
var unionSignatures = findMatchingSignatures(signatureLists, signature, i);
|
|
if (unionSignatures) {
|
|
var s = signature;
|
|
if (unionSignatures.length > 1) {
|
|
var thisParameter = signature.thisParameter;
|
|
var firstThisParameterOfUnionSignatures = ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; });
|
|
if (firstThisParameterOfUnionSignatures) {
|
|
var thisType = getIntersectionType(ts.mapDefined(unionSignatures, function (sig) { return sig.thisParameter && getTypeOfSymbol(sig.thisParameter); }));
|
|
thisParameter = createSymbolWithType(firstThisParameterOfUnionSignatures, thisType);
|
|
}
|
|
s = createUnionSignature(signature, unionSignatures);
|
|
s.thisParameter = thisParameter;
|
|
}
|
|
(result || (result = [])).push(s);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!ts.length(result) && indexWithLengthOverOne !== -1) {
|
|
var masterList = signatureLists[indexWithLengthOverOne !== undefined ? indexWithLengthOverOne : 0];
|
|
var results = masterList.slice();
|
|
var _loop_10 = function (signatures) {
|
|
if (signatures !== masterList) {
|
|
var signature_1 = signatures[0];
|
|
ts.Debug.assert(!!signature_1, "getUnionSignatures bails early on empty signature lists and should not have empty lists on second pass");
|
|
results = !!signature_1.typeParameters && ts.some(results, function (s) { return !!s.typeParameters && !compareTypeParametersIdentical(signature_1.typeParameters, s.typeParameters); }) ? undefined : ts.map(results, function (sig) { return combineSignaturesOfUnionMembers(sig, signature_1); });
|
|
if (!results) {
|
|
return "break";
|
|
}
|
|
}
|
|
};
|
|
for (var _b = 0, signatureLists_1 = signatureLists; _b < signatureLists_1.length; _b++) {
|
|
var signatures = signatureLists_1[_b];
|
|
var state_3 = _loop_10(signatures);
|
|
if (state_3 === "break")
|
|
break;
|
|
}
|
|
result = results;
|
|
}
|
|
return result || ts.emptyArray;
|
|
}
|
|
function compareTypeParametersIdentical(sourceParams, targetParams) {
|
|
if (ts.length(sourceParams) !== ts.length(targetParams)) {
|
|
return false;
|
|
}
|
|
if (!sourceParams || !targetParams) {
|
|
return true;
|
|
}
|
|
var mapper = createTypeMapper(targetParams, sourceParams);
|
|
for (var i = 0; i < sourceParams.length; i++) {
|
|
var source = sourceParams[i];
|
|
var target = targetParams[i];
|
|
if (source === target)
|
|
continue;
|
|
if (!isTypeIdenticalTo(getConstraintFromTypeParameter(source) || unknownType, instantiateType(getConstraintFromTypeParameter(target) || unknownType, mapper)))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function combineUnionThisParam(left, right, mapper) {
|
|
if (!left || !right) {
|
|
return left || right;
|
|
}
|
|
var thisType = getIntersectionType([getTypeOfSymbol(left), instantiateType(getTypeOfSymbol(right), mapper)]);
|
|
return createSymbolWithType(left, thisType);
|
|
}
|
|
function combineUnionParameters(left, right, mapper) {
|
|
var leftCount = getParameterCount(left);
|
|
var rightCount = getParameterCount(right);
|
|
var longest = leftCount >= rightCount ? left : right;
|
|
var shorter = longest === left ? right : left;
|
|
var longestCount = longest === left ? leftCount : rightCount;
|
|
var eitherHasEffectiveRest = (hasEffectiveRestParameter(left) || hasEffectiveRestParameter(right));
|
|
var needsExtraRestElement = eitherHasEffectiveRest && !hasEffectiveRestParameter(longest);
|
|
var params = new Array(longestCount + (needsExtraRestElement ? 1 : 0));
|
|
for (var i = 0; i < longestCount; i++) {
|
|
var longestParamType = tryGetTypeAtPosition(longest, i);
|
|
if (longest === right) {
|
|
longestParamType = instantiateType(longestParamType, mapper);
|
|
}
|
|
var shorterParamType = tryGetTypeAtPosition(shorter, i) || unknownType;
|
|
if (shorter === right) {
|
|
shorterParamType = instantiateType(shorterParamType, mapper);
|
|
}
|
|
var unionParamType = getIntersectionType([longestParamType, shorterParamType]);
|
|
var isRestParam = eitherHasEffectiveRest && !needsExtraRestElement && i === (longestCount - 1);
|
|
var isOptional = i >= getMinArgumentCount(longest) && i >= getMinArgumentCount(shorter);
|
|
var leftName = i >= leftCount ? undefined : getParameterNameAtPosition(left, i);
|
|
var rightName = i >= rightCount ? undefined : getParameterNameAtPosition(right, i);
|
|
var paramName = leftName === rightName ? leftName :
|
|
!leftName ? rightName :
|
|
!rightName ? leftName :
|
|
undefined;
|
|
var paramSymbol = createSymbol(1 | (isOptional && !isRestParam ? 16777216 : 0), paramName || "arg".concat(i));
|
|
paramSymbol.type = isRestParam ? createArrayType(unionParamType) : unionParamType;
|
|
params[i] = paramSymbol;
|
|
}
|
|
if (needsExtraRestElement) {
|
|
var restParamSymbol = createSymbol(1, "args");
|
|
restParamSymbol.type = createArrayType(getTypeAtPosition(shorter, longestCount));
|
|
if (shorter === right) {
|
|
restParamSymbol.type = instantiateType(restParamSymbol.type, mapper);
|
|
}
|
|
params[longestCount] = restParamSymbol;
|
|
}
|
|
return params;
|
|
}
|
|
function combineSignaturesOfUnionMembers(left, right) {
|
|
var typeParams = left.typeParameters || right.typeParameters;
|
|
var paramMapper;
|
|
if (left.typeParameters && right.typeParameters) {
|
|
paramMapper = createTypeMapper(right.typeParameters, left.typeParameters);
|
|
}
|
|
var declaration = left.declaration;
|
|
var params = combineUnionParameters(left, right, paramMapper);
|
|
var thisParam = combineUnionThisParam(left.thisParameter, right.thisParameter, paramMapper);
|
|
var minArgCount = Math.max(left.minArgumentCount, right.minArgumentCount);
|
|
var result = createSignature(declaration, typeParams, thisParam, params, undefined, undefined, minArgCount, (left.flags | right.flags) & 39);
|
|
result.compositeKind = 1048576;
|
|
result.compositeSignatures = ts.concatenate(left.compositeKind !== 2097152 && left.compositeSignatures || [left], [right]);
|
|
if (paramMapper) {
|
|
result.mapper = left.compositeKind !== 2097152 && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper;
|
|
}
|
|
return result;
|
|
}
|
|
function getUnionIndexInfos(types) {
|
|
var sourceInfos = getIndexInfosOfType(types[0]);
|
|
if (sourceInfos) {
|
|
var result = [];
|
|
var _loop_11 = function (info) {
|
|
var indexType = info.keyType;
|
|
if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
|
|
result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
|
|
}
|
|
};
|
|
for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
|
|
var info = sourceInfos_1[_i];
|
|
_loop_11(info);
|
|
}
|
|
return result;
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function resolveUnionTypeMembers(type) {
|
|
var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0); }));
|
|
var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1); }));
|
|
var indexInfos = getUnionIndexInfos(type.types);
|
|
setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
|
|
}
|
|
function intersectTypes(type1, type2) {
|
|
return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
|
|
}
|
|
function findMixins(types) {
|
|
var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1).length > 0; });
|
|
var mixinFlags = ts.map(types, isMixinConstructorType);
|
|
if (constructorTypeCount > 0 && constructorTypeCount === ts.countWhere(mixinFlags, function (b) { return b; })) {
|
|
var firstMixinIndex = mixinFlags.indexOf(true);
|
|
mixinFlags[firstMixinIndex] = false;
|
|
}
|
|
return mixinFlags;
|
|
}
|
|
function includeMixinType(type, types, mixinFlags, index) {
|
|
var mixedTypes = [];
|
|
for (var i = 0; i < types.length; i++) {
|
|
if (i === index) {
|
|
mixedTypes.push(type);
|
|
}
|
|
else if (mixinFlags[i]) {
|
|
mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1)[0]));
|
|
}
|
|
}
|
|
return getIntersectionType(mixedTypes);
|
|
}
|
|
function resolveIntersectionTypeMembers(type) {
|
|
var callSignatures;
|
|
var constructSignatures;
|
|
var indexInfos;
|
|
var types = type.types;
|
|
var mixinFlags = findMixins(types);
|
|
var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
|
|
var _loop_12 = function (i) {
|
|
var t = type.types[i];
|
|
if (!mixinFlags[i]) {
|
|
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, mixinFlags, i);
|
|
return clone;
|
|
});
|
|
}
|
|
constructSignatures = appendSignatures(constructSignatures, signatures);
|
|
}
|
|
callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0));
|
|
indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, false); }, indexInfos);
|
|
};
|
|
for (var i = 0; i < types.length; i++) {
|
|
_loop_12(i);
|
|
}
|
|
setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
|
|
}
|
|
function appendSignatures(signatures, newSignatures) {
|
|
var _loop_13 = function (sig) {
|
|
if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, false, false, false, compareTypesIdentical); })) {
|
|
signatures = ts.append(signatures, sig);
|
|
}
|
|
};
|
|
for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
|
|
var sig = newSignatures_1[_i];
|
|
_loop_13(sig);
|
|
}
|
|
return signatures;
|
|
}
|
|
function appendIndexInfo(indexInfos, newInfo, union) {
|
|
if (indexInfos) {
|
|
for (var i = 0; i < indexInfos.length; i++) {
|
|
var info = indexInfos[i];
|
|
if (info.keyType === newInfo.keyType) {
|
|
indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
|
|
return indexInfos;
|
|
}
|
|
}
|
|
}
|
|
return ts.append(indexInfos, newInfo);
|
|
}
|
|
function resolveAnonymousTypeMembers(type) {
|
|
if (type.target) {
|
|
setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var members_6 = 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 indexInfos_1 = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
|
|
setStructuredTypeMembers(type, members_6, callSignatures, constructSignatures, indexInfos_1);
|
|
return;
|
|
}
|
|
var symbol = getMergedSymbol(type.symbol);
|
|
if (symbol.flags & 2048) {
|
|
setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var members_7 = getMembersOfSymbol(symbol);
|
|
var callSignatures = getSignaturesOfSymbol(members_7.get("__call"));
|
|
var constructSignatures = getSignaturesOfSymbol(members_7.get("__new"));
|
|
var indexInfos_2 = getIndexInfosOfSymbol(symbol);
|
|
setStructuredTypeMembers(type, members_7, callSignatures, constructSignatures, indexInfos_2);
|
|
return;
|
|
}
|
|
var members = emptySymbols;
|
|
var indexInfos;
|
|
if (symbol.exports) {
|
|
members = getExportsOfSymbol(symbol);
|
|
if (symbol === globalThisSymbol) {
|
|
var varsOnly_1 = new ts.Map();
|
|
members.forEach(function (p) {
|
|
var _a;
|
|
if (!(p.flags & 418) && !(p.flags & 512 && ((_a = p.declarations) === null || _a === void 0 ? void 0 : _a.length) && ts.every(p.declarations, ts.isAmbientModule))) {
|
|
varsOnly_1.set(p.escapedName, p);
|
|
}
|
|
});
|
|
members = varsOnly_1;
|
|
}
|
|
}
|
|
var baseConstructorIndexInfo;
|
|
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
if (symbol.flags & 32) {
|
|
var classType = getDeclaredTypeOfClassOrInterface(symbol);
|
|
var baseConstructorType = getBaseConstructorTypeOfClass(classType);
|
|
if (baseConstructorType.flags & (524288 | 2097152 | 8650752)) {
|
|
members = ts.createSymbolTable(getNamedOrIndexSignatureMembers(members));
|
|
addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
|
|
}
|
|
else if (baseConstructorType === anyType) {
|
|
baseConstructorIndexInfo = createIndexInfo(stringType, anyType, false);
|
|
}
|
|
}
|
|
var indexSymbol = getIndexSymbolFromSymbolTable(members);
|
|
if (indexSymbol) {
|
|
indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
|
|
}
|
|
else {
|
|
if (baseConstructorIndexInfo) {
|
|
indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
|
|
}
|
|
if (symbol.flags & 384 && (getDeclaredTypeOfSymbol(symbol).flags & 32 ||
|
|
ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296); }))) {
|
|
indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
|
|
}
|
|
}
|
|
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
|
|
if (symbol.flags & (16 | 8192)) {
|
|
type.callSignatures = getSignaturesOfSymbol(symbol);
|
|
}
|
|
if (symbol.flags & 32) {
|
|
var classType_1 = getDeclaredTypeOfClassOrInterface(symbol);
|
|
var constructSignatures = symbol.members ? getSignaturesOfSymbol(symbol.members.get("__constructor")) : ts.emptyArray;
|
|
if (symbol.flags & 16) {
|
|
constructSignatures = ts.addRange(constructSignatures.slice(), ts.mapDefined(type.callSignatures, function (sig) { return isJSConstructor(sig.declaration) ?
|
|
createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, classType_1, undefined, sig.minArgumentCount, sig.flags & 39) :
|
|
undefined; }));
|
|
}
|
|
if (!constructSignatures.length) {
|
|
constructSignatures = getDefaultConstructSignatures(classType_1);
|
|
}
|
|
type.constructSignatures = constructSignatures;
|
|
}
|
|
}
|
|
function replaceIndexedAccess(instantiable, type, replacement) {
|
|
return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
|
|
}
|
|
function resolveReverseMappedTypeMembers(type) {
|
|
var indexInfo = getIndexInfoOfType(type.source, stringType);
|
|
var modifiers = getMappedTypeModifiers(type.mappedType);
|
|
var readonlyMask = modifiers & 1 ? false : true;
|
|
var optionalMask = modifiers & 4 ? 0 : 16777216;
|
|
var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
|
|
var members = ts.createSymbolTable();
|
|
for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
var checkFlags = 8192 | (readonlyMask && isReadonlySymbol(prop) ? 8 : 0);
|
|
var inferredProp = createSymbol(4 | prop.flags & optionalMask, prop.escapedName, checkFlags);
|
|
inferredProp.declarations = prop.declarations;
|
|
inferredProp.nameType = getSymbolLinks(prop).nameType;
|
|
inferredProp.propertyType = getTypeOfSymbol(prop);
|
|
if (type.constraintType.type.flags & 8388608
|
|
&& type.constraintType.type.objectType.flags & 262144
|
|
&& type.constraintType.type.indexType.flags & 262144) {
|
|
var newTypeParam = type.constraintType.type.objectType;
|
|
var newMappedType = replaceIndexedAccess(type.mappedType, type.constraintType.type, newTypeParam);
|
|
inferredProp.mappedType = newMappedType;
|
|
inferredProp.constraintType = getIndexType(newTypeParam);
|
|
}
|
|
else {
|
|
inferredProp.mappedType = type.mappedType;
|
|
inferredProp.constraintType = type.constraintType;
|
|
}
|
|
members.set(prop.escapedName, inferredProp);
|
|
}
|
|
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
|
|
}
|
|
function getLowerBoundOfKeyType(type) {
|
|
if (type.flags & 4194304) {
|
|
var t = getApparentType(type.type);
|
|
return isGenericTupleType(t) ? getKnownKeysOfTupleType(t) : getIndexType(t);
|
|
}
|
|
if (type.flags & 16777216) {
|
|
if (type.root.isDistributive) {
|
|
var checkType = type.checkType;
|
|
var constraint = getLowerBoundOfKeyType(checkType);
|
|
if (constraint !== checkType) {
|
|
return getConditionalTypeInstantiation(type, prependTypeMapping(type.root.checkType, constraint, type.mapper));
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
if (type.flags & 1048576) {
|
|
return mapType(type, getLowerBoundOfKeyType);
|
|
}
|
|
if (type.flags & 2097152) {
|
|
return getIntersectionType(ts.sameMap(type.types, getLowerBoundOfKeyType));
|
|
}
|
|
return type;
|
|
}
|
|
function getIsLateCheckFlag(s) {
|
|
return ts.getCheckFlags(s) & 4096;
|
|
}
|
|
function forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(type, include, stringsOnly, cb) {
|
|
for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
cb(getLiteralTypeFromProperty(prop, include));
|
|
}
|
|
if (type.flags & 1) {
|
|
cb(stringType);
|
|
}
|
|
else {
|
|
for (var _b = 0, _c = getIndexInfosOfType(type); _b < _c.length; _b++) {
|
|
var info = _c[_b];
|
|
if (!stringsOnly || info.keyType.flags & (4 | 134217728)) {
|
|
cb(info.keyType);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function resolveMappedTypeMembers(type) {
|
|
var members = ts.createSymbolTable();
|
|
var indexInfos;
|
|
setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
var typeParameter = getTypeParameterFromMappedType(type);
|
|
var constraintType = getConstraintTypeFromMappedType(type);
|
|
var nameType = getNameTypeFromMappedType(type.target || type);
|
|
var templateType = getTemplateTypeFromMappedType(type.target || type);
|
|
var modifiersType = getApparentType(getModifiersTypeFromMappedType(type));
|
|
var templateModifiers = getMappedTypeModifiers(type);
|
|
var include = keyofStringsOnly ? 128 : 8576;
|
|
if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
|
|
forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, include, keyofStringsOnly, addMemberForKeyType);
|
|
}
|
|
else {
|
|
forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
|
|
}
|
|
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
|
|
function addMemberForKeyType(keyType) {
|
|
var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
|
|
forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
|
|
}
|
|
function addMemberForKeyTypeWorker(keyType, propNameType) {
|
|
if (isTypeUsableAsPropertyName(propNameType)) {
|
|
var propName = getPropertyNameFromType(propNameType);
|
|
var existingProp = members.get(propName);
|
|
if (existingProp) {
|
|
existingProp.nameType = getUnionType([existingProp.nameType, propNameType]);
|
|
existingProp.keyType = getUnionType([existingProp.keyType, keyType]);
|
|
}
|
|
else {
|
|
var modifiersProp = isTypeUsableAsPropertyName(keyType) ? getPropertyOfType(modifiersType, getPropertyNameFromType(keyType)) : undefined;
|
|
var isOptional = !!(templateModifiers & 4 ||
|
|
!(templateModifiers & 8) && modifiersProp && modifiersProp.flags & 16777216);
|
|
var isReadonly = !!(templateModifiers & 1 ||
|
|
!(templateModifiers & 2) && modifiersProp && isReadonlySymbol(modifiersProp));
|
|
var stripOptional = strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & 16777216;
|
|
var lateFlag = modifiersProp ? getIsLateCheckFlag(modifiersProp) : 0;
|
|
var prop = createSymbol(4 | (isOptional ? 16777216 : 0), propName, lateFlag | 262144 | (isReadonly ? 8 : 0) | (stripOptional ? 524288 : 0));
|
|
prop.mappedType = type;
|
|
prop.nameType = propNameType;
|
|
prop.keyType = keyType;
|
|
if (modifiersProp) {
|
|
prop.syntheticOrigin = modifiersProp;
|
|
prop.declarations = nameType ? undefined : modifiersProp.declarations;
|
|
}
|
|
members.set(propName, prop);
|
|
}
|
|
}
|
|
else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 | 32)) {
|
|
var indexKeyType = propNameType.flags & (1 | 4) ? stringType :
|
|
propNameType.flags & (8 | 32) ? numberType :
|
|
propNameType;
|
|
var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
|
|
var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1));
|
|
indexInfos = appendIndexInfo(indexInfos, indexInfo, true);
|
|
}
|
|
}
|
|
}
|
|
function getTypeOfMappedSymbol(symbol) {
|
|
if (!symbol.type) {
|
|
var mappedType = symbol.mappedType;
|
|
if (!pushTypeResolution(symbol, 0)) {
|
|
mappedType.containsError = true;
|
|
return errorType;
|
|
}
|
|
var templateType = getTemplateTypeFromMappedType(mappedType.target || mappedType);
|
|
var mapper = appendTypeMapping(mappedType.mapper, getTypeParameterFromMappedType(mappedType), symbol.keyType);
|
|
var propType = instantiateType(templateType, mapper);
|
|
var type = strictNullChecks && symbol.flags & 16777216 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType, true) :
|
|
symbol.checkFlags & 524288 ? removeMissingOrUndefinedType(propType) :
|
|
propType;
|
|
if (!popTypeResolution()) {
|
|
error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
|
|
type = errorType;
|
|
}
|
|
symbol.type = type;
|
|
}
|
|
return symbol.type;
|
|
}
|
|
function getTypeParameterFromMappedType(type) {
|
|
return type.typeParameter ||
|
|
(type.typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(type.declaration.typeParameter)));
|
|
}
|
|
function getConstraintTypeFromMappedType(type) {
|
|
return type.constraintType ||
|
|
(type.constraintType = getConstraintOfTypeParameter(getTypeParameterFromMappedType(type)) || errorType);
|
|
}
|
|
function getNameTypeFromMappedType(type) {
|
|
return type.declaration.nameType ?
|
|
type.nameType || (type.nameType = instantiateType(getTypeFromTypeNode(type.declaration.nameType), type.mapper)) :
|
|
undefined;
|
|
}
|
|
function getTemplateTypeFromMappedType(type) {
|
|
return type.templateType ||
|
|
(type.templateType = type.declaration.type ?
|
|
instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), true, !!(getMappedTypeModifiers(type) & 4)), type.mapper) :
|
|
errorType);
|
|
}
|
|
function getConstraintDeclarationForMappedType(type) {
|
|
return ts.getEffectiveConstraintOfTypeParameter(type.declaration.typeParameter);
|
|
}
|
|
function isMappedTypeWithKeyofConstraintDeclaration(type) {
|
|
var constraintDeclaration = getConstraintDeclarationForMappedType(type);
|
|
return constraintDeclaration.kind === 193 &&
|
|
constraintDeclaration.operator === 140;
|
|
}
|
|
function getModifiersTypeFromMappedType(type) {
|
|
if (!type.modifiersType) {
|
|
if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
|
|
type.modifiersType = instantiateType(getTypeFromTypeNode(getConstraintDeclarationForMappedType(type).type), type.mapper);
|
|
}
|
|
else {
|
|
var declaredType = getTypeFromMappedTypeNode(type.declaration);
|
|
var constraint = getConstraintTypeFromMappedType(declaredType);
|
|
var extendedConstraint = constraint && constraint.flags & 262144 ? getConstraintOfTypeParameter(constraint) : constraint;
|
|
type.modifiersType = extendedConstraint && extendedConstraint.flags & 4194304 ? instantiateType(extendedConstraint.type, type.mapper) : unknownType;
|
|
}
|
|
}
|
|
return type.modifiersType;
|
|
}
|
|
function getMappedTypeModifiers(type) {
|
|
var declaration = type.declaration;
|
|
return (declaration.readonlyToken ? declaration.readonlyToken.kind === 40 ? 2 : 1 : 0) |
|
|
(declaration.questionToken ? declaration.questionToken.kind === 40 ? 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 & 524288) {
|
|
if (type.objectFlags & 4) {
|
|
resolveTypeReferenceMembers(type);
|
|
}
|
|
else if (type.objectFlags & 3) {
|
|
resolveClassOrInterfaceMembers(type);
|
|
}
|
|
else if (type.objectFlags & 1024) {
|
|
resolveReverseMappedTypeMembers(type);
|
|
}
|
|
else if (type.objectFlags & 16) {
|
|
resolveAnonymousTypeMembers(type);
|
|
}
|
|
else if (type.objectFlags & 32) {
|
|
resolveMappedTypeMembers(type);
|
|
}
|
|
else {
|
|
ts.Debug.fail("Unhandled object type " + ts.Debug.formatObjectFlags(type.objectFlags));
|
|
}
|
|
}
|
|
else if (type.flags & 1048576) {
|
|
resolveUnionTypeMembers(type);
|
|
}
|
|
else if (type.flags & 2097152) {
|
|
resolveIntersectionTypeMembers(type);
|
|
}
|
|
else {
|
|
ts.Debug.fail("Unhandled type " + ts.Debug.formatTypeFlags(type.flags));
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function getPropertiesOfObjectType(type) {
|
|
if (type.flags & 524288) {
|
|
return resolveStructuredTypeMembers(type).properties;
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function getPropertyOfObjectType(type, name) {
|
|
if (type.flags & 524288) {
|
|
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 & 1048576 && getIndexInfosOfType(current).length === 0) {
|
|
break;
|
|
}
|
|
}
|
|
type.resolvedProperties = getNamedMembers(members);
|
|
}
|
|
return type.resolvedProperties;
|
|
}
|
|
function getPropertiesOfType(type) {
|
|
type = getReducedApparentType(type);
|
|
return type.flags & 3145728 ?
|
|
getPropertiesOfUnionOrIntersectionType(type) :
|
|
getPropertiesOfObjectType(type);
|
|
}
|
|
function forEachPropertyOfType(type, action) {
|
|
type = getReducedApparentType(type);
|
|
if (type.flags & 3670016) {
|
|
resolveStructuredTypeMembers(type).members.forEach(function (symbol, escapedName) {
|
|
if (isNamedMember(symbol, escapedName)) {
|
|
action(symbol, escapedName);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function isTypeInvalidDueToUnionDiscriminant(contextualType, obj) {
|
|
var list = obj.properties;
|
|
return list.some(function (property) {
|
|
var nameType = property.name && getLiteralTypeFromPropertyName(property.name);
|
|
var name = nameType && isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined;
|
|
var expected = name === undefined ? undefined : getTypeOfPropertyOfType(contextualType, name);
|
|
return !!expected && isLiteralType(expected) && !isTypeAssignableTo(getTypeOfNode(property), expected);
|
|
});
|
|
}
|
|
function getAllPossiblePropertiesOfTypes(types) {
|
|
var unionType = getUnionType(types);
|
|
if (!(unionType.flags & 1048576)) {
|
|
return getAugmentedPropertiesOfType(unionType);
|
|
}
|
|
var props = ts.createSymbolTable();
|
|
for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
|
|
var memberType = types_4[_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 & 262144 ? getConstraintOfTypeParameter(type) :
|
|
type.flags & 8388608 ? getConstraintOfIndexedAccess(type) :
|
|
type.flags & 16777216 ? getConstraintOfConditionalType(type) :
|
|
getBaseConstraintOfType(type);
|
|
}
|
|
function getConstraintOfTypeParameter(typeParameter) {
|
|
return hasNonCircularBaseConstraint(typeParameter) ? getConstraintFromTypeParameter(typeParameter) : undefined;
|
|
}
|
|
function getConstraintOfIndexedAccess(type) {
|
|
return hasNonCircularBaseConstraint(type) ? getConstraintFromIndexedAccess(type) : undefined;
|
|
}
|
|
function getSimplifiedTypeOrConstraint(type) {
|
|
var simplified = getSimplifiedType(type, false);
|
|
return simplified !== type ? simplified : getConstraintOfType(type);
|
|
}
|
|
function getConstraintFromIndexedAccess(type) {
|
|
if (isMappedTypeGenericIndexedAccess(type)) {
|
|
return substituteIndexedMappedType(type.objectType, type.indexType);
|
|
}
|
|
var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
|
|
if (indexConstraint && indexConstraint !== type.indexType) {
|
|
var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
|
|
if (indexedAccess) {
|
|
return indexedAccess;
|
|
}
|
|
}
|
|
var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
|
|
if (objectConstraint && objectConstraint !== type.objectType) {
|
|
return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getDefaultConstraintOfConditionalType(type) {
|
|
if (!type.resolvedDefaultConstraint) {
|
|
var trueConstraint = getInferredTrueTypeFromConditionalType(type);
|
|
var falseConstraint = getFalseTypeFromConditionalType(type);
|
|
type.resolvedDefaultConstraint = isTypeAny(trueConstraint) ? falseConstraint : isTypeAny(falseConstraint) ? trueConstraint : getUnionType([trueConstraint, falseConstraint]);
|
|
}
|
|
return type.resolvedDefaultConstraint;
|
|
}
|
|
function getConstraintOfDistributiveConditionalType(type) {
|
|
if (type.root.isDistributive && type.restrictiveInstantiation !== type) {
|
|
var simplified = getSimplifiedType(type.checkType, false);
|
|
var constraint = simplified === type.checkType ? getConstraintOfType(simplified) : simplified;
|
|
if (constraint && constraint !== type.checkType) {
|
|
var instantiated = getConditionalTypeInstantiation(type, prependTypeMapping(type.root.checkType, constraint, type.mapper));
|
|
if (!(instantiated.flags & 131072)) {
|
|
return instantiated;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getConstraintFromConditionalType(type) {
|
|
return getConstraintOfDistributiveConditionalType(type) || getDefaultConstraintOfConditionalType(type);
|
|
}
|
|
function getConstraintOfConditionalType(type) {
|
|
return hasNonCircularBaseConstraint(type) ? getConstraintFromConditionalType(type) : undefined;
|
|
}
|
|
function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
|
|
var constraints;
|
|
var hasDisjointDomainType = false;
|
|
for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
|
|
var t = types_5[_i];
|
|
if (t.flags & 465829888) {
|
|
var constraint = getConstraintOfType(t);
|
|
while (constraint && constraint.flags & (262144 | 4194304 | 16777216)) {
|
|
constraint = getConstraintOfType(constraint);
|
|
}
|
|
if (constraint) {
|
|
constraints = ts.append(constraints, constraint);
|
|
if (targetIsUnion) {
|
|
constraints = ts.append(constraints, t);
|
|
}
|
|
}
|
|
}
|
|
else if (t.flags & 469892092 || isEmptyAnonymousObjectType(t)) {
|
|
hasDisjointDomainType = true;
|
|
}
|
|
}
|
|
if (constraints && (targetIsUnion || hasDisjointDomainType)) {
|
|
if (hasDisjointDomainType) {
|
|
for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
|
|
var t = types_6[_a];
|
|
if (t.flags & 469892092 || isEmptyAnonymousObjectType(t)) {
|
|
constraints = ts.append(constraints, t);
|
|
}
|
|
}
|
|
}
|
|
return getNormalizedType(getIntersectionType(constraints), false);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getBaseConstraintOfType(type) {
|
|
if (type.flags & (58982400 | 3145728 | 134217728 | 268435456)) {
|
|
var constraint = getResolvedBaseConstraint(type);
|
|
return constraint !== noConstraintType && constraint !== circularConstraintType ? constraint : undefined;
|
|
}
|
|
return type.flags & 4194304 ? keyofConstraintType : undefined;
|
|
}
|
|
function getBaseConstraintOrType(type) {
|
|
return getBaseConstraintOfType(type) || type;
|
|
}
|
|
function hasNonCircularBaseConstraint(type) {
|
|
return getResolvedBaseConstraint(type) !== circularConstraintType;
|
|
}
|
|
function getResolvedBaseConstraint(type) {
|
|
if (type.resolvedBaseConstraint) {
|
|
return type.resolvedBaseConstraint;
|
|
}
|
|
var stack = [];
|
|
return type.resolvedBaseConstraint = getTypeWithThisArgument(getImmediateBaseConstraint(type), type);
|
|
function getImmediateBaseConstraint(t) {
|
|
if (!t.immediateBaseConstraint) {
|
|
if (!pushTypeResolution(t, 4)) {
|
|
return circularConstraintType;
|
|
}
|
|
var result = void 0;
|
|
var identity_1 = getRecursionIdentity(t);
|
|
if (stack.length < 10 || stack.length < 50 && !ts.contains(stack, identity_1)) {
|
|
stack.push(identity_1);
|
|
result = computeBaseConstraint(getSimplifiedType(t, false));
|
|
stack.pop();
|
|
}
|
|
if (!popTypeResolution()) {
|
|
if (t.flags & 262144) {
|
|
var errorNode = getConstraintDeclaration(t);
|
|
if (errorNode) {
|
|
var diagnostic = error(errorNode, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t));
|
|
if (currentNode && !ts.isNodeDescendantOf(errorNode, currentNode) && !ts.isNodeDescendantOf(currentNode, errorNode)) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(currentNode, ts.Diagnostics.Circularity_originates_in_type_at_this_location));
|
|
}
|
|
}
|
|
}
|
|
result = circularConstraintType;
|
|
}
|
|
t.immediateBaseConstraint = result || noConstraintType;
|
|
}
|
|
return t.immediateBaseConstraint;
|
|
}
|
|
function getBaseConstraint(t) {
|
|
var c = getImmediateBaseConstraint(t);
|
|
return c !== noConstraintType && c !== circularConstraintType ? c : undefined;
|
|
}
|
|
function computeBaseConstraint(t) {
|
|
if (t.flags & 262144) {
|
|
var constraint = getConstraintFromTypeParameter(t);
|
|
return t.isThisType || !constraint ?
|
|
constraint :
|
|
getBaseConstraint(constraint);
|
|
}
|
|
if (t.flags & 3145728) {
|
|
var types = t.types;
|
|
var baseTypes = [];
|
|
var different = false;
|
|
for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
|
|
var type_4 = types_7[_i];
|
|
var baseType = getBaseConstraint(type_4);
|
|
if (baseType) {
|
|
if (baseType !== type_4) {
|
|
different = true;
|
|
}
|
|
baseTypes.push(baseType);
|
|
}
|
|
else {
|
|
different = true;
|
|
}
|
|
}
|
|
if (!different) {
|
|
return t;
|
|
}
|
|
return t.flags & 1048576 && baseTypes.length === types.length ? getUnionType(baseTypes) :
|
|
t.flags & 2097152 && baseTypes.length ? getIntersectionType(baseTypes) :
|
|
undefined;
|
|
}
|
|
if (t.flags & 4194304) {
|
|
return keyofConstraintType;
|
|
}
|
|
if (t.flags & 134217728) {
|
|
var types = t.types;
|
|
var constraints = ts.mapDefined(types, getBaseConstraint);
|
|
return constraints.length === types.length ? getTemplateLiteralType(t.texts, constraints) : stringType;
|
|
}
|
|
if (t.flags & 268435456) {
|
|
var constraint = getBaseConstraint(t.type);
|
|
return constraint && constraint !== t.type ? getStringMappingType(t.symbol, constraint) : stringType;
|
|
}
|
|
if (t.flags & 8388608) {
|
|
if (isMappedTypeGenericIndexedAccess(t)) {
|
|
return getBaseConstraint(substituteIndexedMappedType(t.objectType, t.indexType));
|
|
}
|
|
var baseObjectType = getBaseConstraint(t.objectType);
|
|
var baseIndexType = getBaseConstraint(t.indexType);
|
|
var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
|
|
return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
|
|
}
|
|
if (t.flags & 16777216) {
|
|
var constraint = getConstraintFromConditionalType(t);
|
|
return constraint && getBaseConstraint(constraint);
|
|
}
|
|
if (t.flags & 33554432) {
|
|
return getBaseConstraint(t.substitute);
|
|
}
|
|
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 getApparentTypeOfMappedType(type) {
|
|
return type.resolvedApparentType || (type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type));
|
|
}
|
|
function getResolvedApparentTypeOfMappedType(type) {
|
|
var typeVariable = getHomomorphicTypeVariable(type);
|
|
if (typeVariable && !type.declaration.nameType) {
|
|
var constraint = getConstraintOfTypeParameter(typeVariable);
|
|
if (constraint && isArrayOrTupleType(constraint)) {
|
|
return instantiateType(type, prependTypeMapping(typeVariable, constraint, type.mapper));
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function isMappedTypeGenericIndexedAccess(type) {
|
|
var objectType;
|
|
return !!(type.flags & 8388608 && ts.getObjectFlags(objectType = type.objectType) & 32 &&
|
|
!isGenericMappedType(objectType) && isGenericIndexType(type.indexType) &&
|
|
!(getMappedTypeModifiers(objectType) & 8) && !objectType.declaration.nameType);
|
|
}
|
|
function getApparentType(type) {
|
|
var t = !(type.flags & 465829888) ? type : getBaseConstraintOfType(type) || unknownType;
|
|
return ts.getObjectFlags(t) & 32 ? getApparentTypeOfMappedType(t) :
|
|
t.flags & 2097152 ? getApparentTypeOfIntersectionType(t) :
|
|
t.flags & 402653316 ? globalStringType :
|
|
t.flags & 296 ? globalNumberType :
|
|
t.flags & 2112 ? getGlobalBigIntType() :
|
|
t.flags & 528 ? globalBooleanType :
|
|
t.flags & 12288 ? getGlobalESSymbolType() :
|
|
t.flags & 67108864 ? emptyObjectType :
|
|
t.flags & 4194304 ? keyofConstraintType :
|
|
t.flags & 2 && !strictNullChecks ? emptyObjectType :
|
|
t;
|
|
}
|
|
function getReducedApparentType(type) {
|
|
return getReducedType(getApparentType(getReducedType(type)));
|
|
}
|
|
function createUnionOrIntersectionProperty(containingType, name, skipObjectFunctionPropertyAugment) {
|
|
var _a, _b;
|
|
var singleProp;
|
|
var propSet;
|
|
var indexTypes;
|
|
var isUnion = containingType.flags & 1048576;
|
|
var optionalFlag = isUnion ? 0 : 16777216;
|
|
var syntheticFlag = 4;
|
|
var checkFlags = isUnion ? 0 : 8;
|
|
var mergedInstantiations = false;
|
|
for (var _i = 0, _c = containingType.types; _i < _c.length; _i++) {
|
|
var current = _c[_i];
|
|
var type = getApparentType(current);
|
|
if (!(isErrorType(type) || type.flags & 131072)) {
|
|
var prop = getPropertyOfType(type, name, skipObjectFunctionPropertyAugment);
|
|
var modifiers = prop ? ts.getDeclarationModifierFlagsFromSymbol(prop) : 0;
|
|
if (prop) {
|
|
if (isUnion) {
|
|
optionalFlag |= (prop.flags & 16777216);
|
|
}
|
|
else {
|
|
optionalFlag &= prop.flags;
|
|
}
|
|
if (!singleProp) {
|
|
singleProp = prop;
|
|
}
|
|
else if (prop !== singleProp) {
|
|
var isInstantiation = (getTargetSymbol(prop) || prop) === (getTargetSymbol(singleProp) || singleProp);
|
|
if (isInstantiation && compareProperties(singleProp, prop, function (a, b) { return a === b ? -1 : 0; }) === -1) {
|
|
mergedInstantiations = !!singleProp.parent && !!ts.length(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(singleProp.parent));
|
|
}
|
|
else {
|
|
if (!propSet) {
|
|
propSet = new ts.Map();
|
|
propSet.set(getSymbolId(singleProp), singleProp);
|
|
}
|
|
var id = getSymbolId(prop);
|
|
if (!propSet.has(id)) {
|
|
propSet.set(id, prop);
|
|
}
|
|
}
|
|
}
|
|
if (isUnion && isReadonlySymbol(prop)) {
|
|
checkFlags |= 8;
|
|
}
|
|
else if (!isUnion && !isReadonlySymbol(prop)) {
|
|
checkFlags &= ~8;
|
|
}
|
|
checkFlags |= (!(modifiers & 24) ? 256 : 0) |
|
|
(modifiers & 16 ? 512 : 0) |
|
|
(modifiers & 8 ? 1024 : 0) |
|
|
(modifiers & 32 ? 2048 : 0);
|
|
if (!isPrototypeProperty(prop)) {
|
|
syntheticFlag = 2;
|
|
}
|
|
}
|
|
else if (isUnion) {
|
|
var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
|
|
if (indexInfo) {
|
|
checkFlags |= 32 | (indexInfo.isReadonly ? 8 : 0);
|
|
indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
|
|
}
|
|
else if (isObjectLiteralType(type) && !(ts.getObjectFlags(type) & 2097152)) {
|
|
checkFlags |= 32;
|
|
indexTypes = ts.append(indexTypes, undefinedType);
|
|
}
|
|
else {
|
|
checkFlags |= 16;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!singleProp || isUnion && (propSet || checkFlags & 48) && checkFlags & (1024 | 512)) {
|
|
return undefined;
|
|
}
|
|
if (!propSet && !(checkFlags & 16) && !indexTypes) {
|
|
if (mergedInstantiations) {
|
|
var clone_1 = createSymbolWithType(singleProp, singleProp.type);
|
|
clone_1.parent = (_b = (_a = singleProp.valueDeclaration) === null || _a === void 0 ? void 0 : _a.symbol) === null || _b === void 0 ? void 0 : _b.parent;
|
|
clone_1.containingType = containingType;
|
|
clone_1.mapper = singleProp.mapper;
|
|
return clone_1;
|
|
}
|
|
else {
|
|
return singleProp;
|
|
}
|
|
}
|
|
var props = propSet ? ts.arrayFrom(propSet.values()) : [singleProp];
|
|
var declarations;
|
|
var firstType;
|
|
var nameType;
|
|
var propTypes = [];
|
|
var writeTypes;
|
|
var firstValueDeclaration;
|
|
var hasNonUniformValueDeclaration = false;
|
|
for (var _d = 0, props_1 = props; _d < props_1.length; _d++) {
|
|
var prop = props_1[_d];
|
|
if (!firstValueDeclaration) {
|
|
firstValueDeclaration = prop.valueDeclaration;
|
|
}
|
|
else if (prop.valueDeclaration && prop.valueDeclaration !== firstValueDeclaration) {
|
|
hasNonUniformValueDeclaration = true;
|
|
}
|
|
declarations = ts.addRange(declarations, prop.declarations);
|
|
var type = getTypeOfSymbol(prop);
|
|
if (!firstType) {
|
|
firstType = type;
|
|
nameType = getSymbolLinks(prop).nameType;
|
|
}
|
|
var writeType = getWriteTypeOfSymbol(prop);
|
|
if (writeTypes || writeType !== type) {
|
|
writeTypes = ts.append(!writeTypes ? propTypes.slice() : writeTypes, writeType);
|
|
}
|
|
else if (type !== firstType) {
|
|
checkFlags |= 64;
|
|
}
|
|
if (isLiteralType(type) || isPatternLiteralType(type) || type === uniqueLiteralType) {
|
|
checkFlags |= 128;
|
|
}
|
|
if (type.flags & 131072 && type !== uniqueLiteralType) {
|
|
checkFlags |= 131072;
|
|
}
|
|
propTypes.push(type);
|
|
}
|
|
ts.addRange(propTypes, indexTypes);
|
|
var result = createSymbol(4 | optionalFlag, name, syntheticFlag | checkFlags);
|
|
result.containingType = containingType;
|
|
if (!hasNonUniformValueDeclaration && firstValueDeclaration) {
|
|
result.valueDeclaration = firstValueDeclaration;
|
|
if (firstValueDeclaration.symbol.parent) {
|
|
result.parent = firstValueDeclaration.symbol.parent;
|
|
}
|
|
}
|
|
result.declarations = declarations;
|
|
result.nameType = nameType;
|
|
if (propTypes.length > 2) {
|
|
result.checkFlags |= 65536;
|
|
result.deferralParent = containingType;
|
|
result.deferralConstituents = propTypes;
|
|
result.deferralWriteConstituents = writeTypes;
|
|
}
|
|
else {
|
|
result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes);
|
|
if (writeTypes) {
|
|
result.writeType = isUnion ? getUnionType(writeTypes) : getIntersectionType(writeTypes);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment) {
|
|
var _a, _b;
|
|
var property = ((_a = type.propertyCacheWithoutObjectFunctionPropertyAugment) === null || _a === void 0 ? void 0 : _a.get(name)) ||
|
|
!skipObjectFunctionPropertyAugment ? (_b = type.propertyCache) === null || _b === void 0 ? void 0 : _b.get(name) : undefined;
|
|
if (!property) {
|
|
property = createUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment);
|
|
if (property) {
|
|
var properties = skipObjectFunctionPropertyAugment ? type.propertyCacheWithoutObjectFunctionPropertyAugment || (type.propertyCacheWithoutObjectFunctionPropertyAugment = ts.createSymbolTable()) : type.propertyCache || (type.propertyCache = ts.createSymbolTable());
|
|
properties.set(name, property);
|
|
}
|
|
}
|
|
return property;
|
|
}
|
|
function getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment) {
|
|
var property = getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment);
|
|
return property && !(ts.getCheckFlags(property) & 16) ? property : undefined;
|
|
}
|
|
function getReducedType(type) {
|
|
if (type.flags & 1048576 && type.objectFlags & 16777216) {
|
|
return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
|
|
}
|
|
else if (type.flags & 2097152) {
|
|
if (!(type.objectFlags & 16777216)) {
|
|
type.objectFlags |= 16777216 |
|
|
(ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 33554432 : 0);
|
|
}
|
|
return type.objectFlags & 33554432 ? neverType : type;
|
|
}
|
|
return type;
|
|
}
|
|
function getReducedUnionType(unionType) {
|
|
var reducedTypes = ts.sameMap(unionType.types, getReducedType);
|
|
if (reducedTypes === unionType.types) {
|
|
return unionType;
|
|
}
|
|
var reduced = getUnionType(reducedTypes);
|
|
if (reduced.flags & 1048576) {
|
|
reduced.resolvedReducedType = reduced;
|
|
}
|
|
return reduced;
|
|
}
|
|
function isNeverReducedProperty(prop) {
|
|
return isDiscriminantWithNeverType(prop) || isConflictingPrivateProperty(prop);
|
|
}
|
|
function isDiscriminantWithNeverType(prop) {
|
|
return !(prop.flags & 16777216) &&
|
|
(ts.getCheckFlags(prop) & (192 | 131072)) === 192 &&
|
|
!!(getTypeOfSymbol(prop).flags & 131072);
|
|
}
|
|
function isConflictingPrivateProperty(prop) {
|
|
return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024);
|
|
}
|
|
function elaborateNeverIntersection(errorInfo, type) {
|
|
if (type.flags & 2097152 && ts.getObjectFlags(type) & 33554432) {
|
|
var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
|
|
if (neverProp) {
|
|
return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, undefined, 536870912), symbolToString(neverProp));
|
|
}
|
|
var privateProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isConflictingPrivateProperty);
|
|
if (privateProp) {
|
|
return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some, typeToString(type, undefined, 536870912), symbolToString(privateProp));
|
|
}
|
|
}
|
|
return errorInfo;
|
|
}
|
|
function getPropertyOfType(type, name, skipObjectFunctionPropertyAugment, includeTypeOnlyMembers) {
|
|
type = getReducedApparentType(type);
|
|
if (type.flags & 524288) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
var symbol = resolved.members.get(name);
|
|
if (symbol && symbolIsValue(symbol, includeTypeOnlyMembers)) {
|
|
return symbol;
|
|
}
|
|
if (skipObjectFunctionPropertyAugment)
|
|
return undefined;
|
|
var functionType = resolved === anyFunctionType ? globalFunctionType :
|
|
resolved.callSignatures.length ? globalCallableFunctionType :
|
|
resolved.constructSignatures.length ? globalNewableFunctionType :
|
|
undefined;
|
|
if (functionType) {
|
|
var symbol_1 = getPropertyOfObjectType(functionType, name);
|
|
if (symbol_1) {
|
|
return symbol_1;
|
|
}
|
|
}
|
|
return getPropertyOfObjectType(globalObjectType, name);
|
|
}
|
|
if (type.flags & 3145728) {
|
|
return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getSignaturesOfStructuredType(type, kind) {
|
|
if (type.flags & 3670016) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function getSignaturesOfType(type, kind) {
|
|
return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
|
|
}
|
|
function findIndexInfo(indexInfos, keyType) {
|
|
return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
|
|
}
|
|
function findApplicableIndexInfo(indexInfos, keyType) {
|
|
var stringIndexInfo;
|
|
var applicableInfo;
|
|
var applicableInfos;
|
|
for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
|
|
var info = indexInfos_3[_i];
|
|
if (info.keyType === stringType) {
|
|
stringIndexInfo = info;
|
|
}
|
|
else if (isApplicableIndexType(keyType, info.keyType)) {
|
|
if (!applicableInfo) {
|
|
applicableInfo = info;
|
|
}
|
|
else {
|
|
(applicableInfos || (applicableInfos = [applicableInfo])).push(info);
|
|
}
|
|
}
|
|
}
|
|
return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, true)) :
|
|
applicableInfo ? applicableInfo :
|
|
stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
|
|
undefined;
|
|
}
|
|
function isApplicableIndexType(source, target) {
|
|
return isTypeAssignableTo(source, target) ||
|
|
target === stringType && isTypeAssignableTo(source, numberType) ||
|
|
target === numberType && (source === numericStringType || !!(source.flags & 128) && ts.isNumericLiteralName(source.value));
|
|
}
|
|
function getIndexInfosOfStructuredType(type) {
|
|
if (type.flags & 3670016) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
return resolved.indexInfos;
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function getIndexInfosOfType(type) {
|
|
return getIndexInfosOfStructuredType(getReducedApparentType(type));
|
|
}
|
|
function getIndexInfoOfType(type, keyType) {
|
|
return findIndexInfo(getIndexInfosOfType(type), keyType);
|
|
}
|
|
function getIndexTypeOfType(type, keyType) {
|
|
var _a;
|
|
return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
|
|
}
|
|
function getApplicableIndexInfos(type, keyType) {
|
|
return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
|
|
}
|
|
function getApplicableIndexInfo(type, keyType) {
|
|
return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
|
|
}
|
|
function getApplicableIndexInfoForName(type, name) {
|
|
return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
|
|
}
|
|
function getTypeParametersFromDeclaration(declaration) {
|
|
var _a;
|
|
var result;
|
|
for (var _i = 0, _b = ts.getEffectiveTypeParameterDeclarations(declaration); _i < _b.length; _i++) {
|
|
var node = _b[_i];
|
|
result = ts.appendIfUnique(result, getDeclaredTypeOfTypeParameter(node.symbol));
|
|
}
|
|
return (result === null || result === void 0 ? void 0 : result.length) ? result
|
|
: ts.isFunctionDeclaration(declaration) ? (_a = getSignatureOfTypeTag(declaration)) === null || _a === void 0 ? void 0 : _a.typeParameters
|
|
: undefined;
|
|
}
|
|
function symbolsToArray(symbols) {
|
|
var result = [];
|
|
symbols.forEach(function (symbol, id) {
|
|
if (!isReservedMemberName(id)) {
|
|
result.push(symbol);
|
|
}
|
|
});
|
|
return result;
|
|
}
|
|
function isJSDocOptionalParameter(node) {
|
|
return ts.isInJSFile(node) && (node.type && node.type.kind === 316
|
|
|| ts.getJSDocParameterTags(node).some(function (_a) {
|
|
var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
|
|
return isBracketed || !!typeExpression && typeExpression.type.kind === 316;
|
|
}));
|
|
}
|
|
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) || isOptionalJSDocPropertyLikeTag(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 >= getMinArgumentCount(signature, 1 | 2);
|
|
}
|
|
var iife = ts.getImmediatelyInvokedFunctionExpression(node.parent);
|
|
if (iife) {
|
|
return !node.type &&
|
|
!node.dotDotDotToken &&
|
|
node.parent.parameters.indexOf(node) >= iife.arguments.length;
|
|
}
|
|
return false;
|
|
}
|
|
function isOptionalPropertyDeclaration(node) {
|
|
return ts.isPropertyDeclaration(node) && node.questionToken;
|
|
}
|
|
function isOptionalJSDocPropertyLikeTag(node) {
|
|
if (!ts.isJSDocPropertyLikeTag(node)) {
|
|
return false;
|
|
}
|
|
var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
|
|
return isBracketed || !!typeExpression && typeExpression.type.kind === 316;
|
|
}
|
|
function createTypePredicate(kind, parameterName, parameterIndex, type) {
|
|
return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, 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) {
|
|
return [];
|
|
}
|
|
var numTypeArguments = ts.length(typeArguments);
|
|
if (isJavaScriptImplicitAny || (numTypeArguments >= minTypeArgumentCount && numTypeArguments <= numTypeParameters)) {
|
|
var result = typeArguments ? typeArguments.slice() : [];
|
|
for (var i = numTypeArguments; i < numTypeParameters; i++) {
|
|
result[i] = errorType;
|
|
}
|
|
var baseDefaultType = getDefaultTypeArgumentType(isJavaScriptImplicitAny);
|
|
for (var i = numTypeArguments; i < numTypeParameters; i++) {
|
|
var defaultType = getDefaultFromTypeParameter(typeParameters[i]);
|
|
if (isJavaScriptImplicitAny && defaultType && (isTypeIdenticalTo(defaultType, unknownType) || isTypeIdenticalTo(defaultType, emptyObjectType))) {
|
|
defaultType = anyType;
|
|
}
|
|
result[i] = defaultType ? instantiateType(defaultType, createTypeMapper(typeParameters, result)) : baseDefaultType;
|
|
}
|
|
result.length = typeParameters.length;
|
|
return result;
|
|
}
|
|
return typeArguments && typeArguments.slice();
|
|
}
|
|
function getSignatureFromDeclaration(declaration) {
|
|
var links = getNodeLinks(declaration);
|
|
if (!links.resolvedSignature) {
|
|
var parameters = [];
|
|
var flags = 0;
|
|
var minArgumentCount = 0;
|
|
var thisParameter = void 0;
|
|
var hasThisParameter = false;
|
|
var iife = ts.getImmediatelyInvokedFunctionExpression(declaration);
|
|
var isJSConstructSignature = ts.isJSDocConstructSignature(declaration);
|
|
var isUntypedSignatureInJSFile = !iife &&
|
|
ts.isInJSFile(declaration) &&
|
|
ts.isValueSignatureDeclaration(declaration) &&
|
|
!ts.hasJSDocParameterTags(declaration) &&
|
|
!ts.getJSDocType(declaration);
|
|
if (isUntypedSignatureInJSFile) {
|
|
flags |= 32;
|
|
}
|
|
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, 111551, undefined, undefined, false);
|
|
paramSymbol = resolvedSymbol;
|
|
}
|
|
if (i === 0 && paramSymbol.escapedName === "this") {
|
|
hasThisParameter = true;
|
|
thisParameter = param.symbol;
|
|
}
|
|
else {
|
|
parameters.push(paramSymbol);
|
|
}
|
|
if (type && type.kind === 196) {
|
|
flags |= 2;
|
|
}
|
|
var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
|
|
param.initializer || param.questionToken || ts.isRestParameter(param) ||
|
|
iife && parameters.length > iife.arguments.length && !type ||
|
|
isJSDocOptionalParameter(param);
|
|
if (!isOptionalParameter_1) {
|
|
minArgumentCount = parameters.length;
|
|
}
|
|
}
|
|
if ((declaration.kind === 172 || declaration.kind === 173) &&
|
|
hasBindableName(declaration) &&
|
|
(!hasThisParameter || !thisParameter)) {
|
|
var otherKind = declaration.kind === 172 ? 173 : 172;
|
|
var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
|
|
if (other) {
|
|
thisParameter = getAnnotatedAccessorThisParameter(other);
|
|
}
|
|
}
|
|
var classType = declaration.kind === 171 ?
|
|
getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
|
|
: undefined;
|
|
var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
|
|
if (ts.hasRestParameter(declaration) || ts.isInJSFile(declaration) && maybeAddJsSyntheticRestParameter(declaration, parameters)) {
|
|
flags |= 1;
|
|
}
|
|
if (ts.isConstructorTypeNode(declaration) && ts.hasSyntacticModifier(declaration, 128) ||
|
|
ts.isConstructorDeclaration(declaration) && ts.hasSyntacticModifier(declaration.parent, 128)) {
|
|
flags |= 4;
|
|
}
|
|
links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, undefined, undefined, minArgumentCount, flags);
|
|
}
|
|
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", 32768);
|
|
if (lastParamVariadicType) {
|
|
syntheticArgsSymbol.type = createArrayType(getTypeFromTypeNode(lastParamVariadicType.type));
|
|
}
|
|
else {
|
|
syntheticArgsSymbol.checkFlags |= 65536;
|
|
syntheticArgsSymbol.deferralParent = neverType;
|
|
syntheticArgsSymbol.deferralConstituents = [anyArrayType];
|
|
syntheticArgsSymbol.deferralWriteConstituents = [anyArrayType];
|
|
}
|
|
if (lastParamVariadicType) {
|
|
parameters.pop();
|
|
}
|
|
parameters.push(syntheticArgsSymbol);
|
|
return true;
|
|
}
|
|
function getSignatureOfTypeTag(node) {
|
|
if (!(ts.isInJSFile(node) && ts.isFunctionLikeDeclaration(node)))
|
|
return undefined;
|
|
var typeTag = ts.getJSDocTypeTag(node);
|
|
return (typeTag === null || typeTag === void 0 ? void 0 : typeTag.typeExpression) && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression));
|
|
}
|
|
function getParameterTypeOfTypeTag(func, parameter) {
|
|
var signature = getSignatureOfTypeTag(func);
|
|
if (!signature)
|
|
return undefined;
|
|
var pos = func.parameters.indexOf(parameter);
|
|
return parameter.dotDotDotToken ? getRestTypeAtPosition(signature, pos) : getTypeAtPosition(signature, pos);
|
|
}
|
|
function getReturnTypeOfTypeTag(node) {
|
|
var signature = getSignatureOfTypeTag(node);
|
|
return signature && getReturnTypeOfSignature(signature);
|
|
}
|
|
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 79:
|
|
return node.escapedText === argumentsSymbol.escapedName && getReferencedValueSymbol(node) === argumentsSymbol;
|
|
case 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return node.name.kind === 162
|
|
&& traverse(node.name);
|
|
case 206:
|
|
case 207:
|
|
return traverse(node.expression);
|
|
case 296:
|
|
return traverse(node.initializer);
|
|
default:
|
|
return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
|
|
}
|
|
}
|
|
}
|
|
function getSignaturesOfSymbol(symbol) {
|
|
if (!symbol || !symbol.declarations)
|
|
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 getTypePredicateOfSignature(signature) {
|
|
if (!signature.resolvedTypePredicate) {
|
|
if (signature.target) {
|
|
var targetTypePredicate = getTypePredicateOfSignature(signature.target);
|
|
signature.resolvedTypePredicate = targetTypePredicate ? instantiateTypePredicate(targetTypePredicate, signature.mapper) : noTypePredicate;
|
|
}
|
|
else if (signature.compositeSignatures) {
|
|
signature.resolvedTypePredicate = getUnionOrIntersectionTypePredicate(signature.compositeSignatures, signature.compositeKind) || noTypePredicate;
|
|
}
|
|
else {
|
|
var type = signature.declaration && ts.getEffectiveReturnTypeNode(signature.declaration);
|
|
var jsdocPredicate = void 0;
|
|
if (!type && ts.isInJSFile(signature.declaration)) {
|
|
var jsdocSignature = getSignatureOfTypeTag(signature.declaration);
|
|
if (jsdocSignature && signature !== jsdocSignature) {
|
|
jsdocPredicate = getTypePredicateOfSignature(jsdocSignature);
|
|
}
|
|
}
|
|
signature.resolvedTypePredicate = type && ts.isTypePredicateNode(type) ?
|
|
createTypePredicateFromTypePredicateNode(type, signature) :
|
|
jsdocPredicate || noTypePredicate;
|
|
}
|
|
ts.Debug.assert(!!signature.resolvedTypePredicate);
|
|
}
|
|
return signature.resolvedTypePredicate === noTypePredicate ? undefined : signature.resolvedTypePredicate;
|
|
}
|
|
function createTypePredicateFromTypePredicateNode(node, signature) {
|
|
var parameterName = node.parameterName;
|
|
var type = node.type && getTypeFromTypeNode(node.type);
|
|
return parameterName.kind === 192 ?
|
|
createTypePredicate(node.assertsModifier ? 2 : 0, undefined, undefined, type) :
|
|
createTypePredicate(node.assertsModifier ? 3 : 1, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
|
|
}
|
|
function getUnionOrIntersectionType(types, kind, unionReduction) {
|
|
return kind !== 2097152 ? getUnionType(types, unionReduction) : getIntersectionType(types);
|
|
}
|
|
function getReturnTypeOfSignature(signature) {
|
|
if (!signature.resolvedReturnType) {
|
|
if (!pushTypeResolution(signature, 3)) {
|
|
return errorType;
|
|
}
|
|
var type = signature.target ? instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper) :
|
|
signature.compositeSignatures ? instantiateType(getUnionOrIntersectionType(ts.map(signature.compositeSignatures, getReturnTypeOfSignature), signature.compositeKind, 2), signature.mapper) :
|
|
getReturnTypeFromAnnotation(signature.declaration) ||
|
|
(ts.nodeIsMissing(signature.declaration.body) ? anyType : getReturnTypeFromBody(signature.declaration));
|
|
if (signature.flags & 8) {
|
|
type = addOptionalTypeMarker(type);
|
|
}
|
|
else if (signature.flags & 16) {
|
|
type = getOptionalType(type);
|
|
}
|
|
if (!popTypeResolution()) {
|
|
if (signature.declaration) {
|
|
var typeNode = ts.getEffectiveReturnTypeNode(signature.declaration);
|
|
if (typeNode) {
|
|
error(typeNode, ts.Diagnostics.Return_type_annotation_circularly_references_itself);
|
|
}
|
|
else 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);
|
|
}
|
|
}
|
|
}
|
|
type = anyType;
|
|
}
|
|
signature.resolvedReturnType = type;
|
|
}
|
|
return signature.resolvedReturnType;
|
|
}
|
|
function getReturnTypeFromAnnotation(declaration) {
|
|
if (declaration.kind === 171) {
|
|
return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
|
|
}
|
|
if (ts.isJSDocConstructSignature(declaration)) {
|
|
return getTypeFromTypeNode(declaration.parameters[0].type);
|
|
}
|
|
var typeNode = ts.getEffectiveReturnTypeNode(declaration);
|
|
if (typeNode) {
|
|
return getTypeFromTypeNode(typeNode);
|
|
}
|
|
if (declaration.kind === 172 && hasBindableName(declaration)) {
|
|
var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
|
|
if (jsDocType) {
|
|
return jsDocType;
|
|
}
|
|
var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 173);
|
|
var setterType = getAnnotatedAccessorType(setter);
|
|
if (setterType) {
|
|
return setterType;
|
|
}
|
|
}
|
|
return getReturnTypeOfTypeTag(declaration);
|
|
}
|
|
function isResolvingReturnTypeOfSignature(signature) {
|
|
return !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, 3) >= 0;
|
|
}
|
|
function getRestTypeOfSignature(signature) {
|
|
return tryGetRestTypeOfSignature(signature) || anyType;
|
|
}
|
|
function tryGetRestTypeOfSignature(signature) {
|
|
if (signatureHasRestParameter(signature)) {
|
|
var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
|
|
var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
|
|
return restType && getIndexTypeOfType(restType, numberType);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getSignatureInstantiation(signature, typeArguments, isJavascript, inferredTypeParameters) {
|
|
var instantiatedSignature = getSignatureInstantiationWithoutFillingInTypeArguments(signature, fillMissingTypeArguments(typeArguments, signature.typeParameters, getMinTypeArgumentCount(signature.typeParameters), isJavascript));
|
|
if (inferredTypeParameters) {
|
|
var returnSignature = getSingleCallOrConstructSignature(getReturnTypeOfSignature(instantiatedSignature));
|
|
if (returnSignature) {
|
|
var newReturnSignature = cloneSignature(returnSignature);
|
|
newReturnSignature.typeParameters = inferredTypeParameters;
|
|
var newInstantiatedSignature = cloneSignature(instantiatedSignature);
|
|
newInstantiatedSignature.resolvedReturnType = getOrCreateTypeFromSignature(newReturnSignature);
|
|
return newInstantiatedSignature;
|
|
}
|
|
}
|
|
return instantiatedSignature;
|
|
}
|
|
function getSignatureInstantiationWithoutFillingInTypeArguments(signature, typeArguments) {
|
|
var instantiations = signature.instantiations || (signature.instantiations = new ts.Map());
|
|
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.isInJSFile(signature.declaration));
|
|
}
|
|
function getBaseSignature(signature) {
|
|
var typeParameters = signature.typeParameters;
|
|
if (typeParameters) {
|
|
if (signature.baseSignatureCache) {
|
|
return signature.baseSignatureCache;
|
|
}
|
|
var typeEraser = createTypeEraser(typeParameters);
|
|
var baseConstraintMapper_1 = createTypeMapper(typeParameters, ts.map(typeParameters, function (tp) { return getConstraintOfTypeParameter(tp) || unknownType; }));
|
|
var baseConstraints = ts.map(typeParameters, function (tp) { return instantiateType(tp, baseConstraintMapper_1) || unknownType; });
|
|
for (var i = 0; i < typeParameters.length - 1; i++) {
|
|
baseConstraints = instantiateTypes(baseConstraints, baseConstraintMapper_1);
|
|
}
|
|
baseConstraints = instantiateTypes(baseConstraints, typeEraser);
|
|
return signature.baseSignatureCache = instantiateSignature(signature, createTypeMapper(typeParameters, baseConstraints), true);
|
|
}
|
|
return signature;
|
|
}
|
|
function getOrCreateTypeFromSignature(signature) {
|
|
var _a;
|
|
if (!signature.isolatedSignatureType) {
|
|
var kind = (_a = signature.declaration) === null || _a === void 0 ? void 0 : _a.kind;
|
|
var isConstructor = kind === undefined || kind === 171 || kind === 175 || kind === 180;
|
|
var type = createObjectType(16);
|
|
type.members = emptySymbols;
|
|
type.properties = ts.emptyArray;
|
|
type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
|
|
type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
|
|
type.indexInfos = ts.emptyArray;
|
|
signature.isolatedSignatureType = type;
|
|
}
|
|
return signature.isolatedSignatureType;
|
|
}
|
|
function getIndexSymbol(symbol) {
|
|
return symbol.members ? getIndexSymbolFromSymbolTable(symbol.members) : undefined;
|
|
}
|
|
function getIndexSymbolFromSymbolTable(symbolTable) {
|
|
return symbolTable.get("__index");
|
|
}
|
|
function createIndexInfo(keyType, type, isReadonly, declaration) {
|
|
return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
|
|
}
|
|
function getIndexInfosOfSymbol(symbol) {
|
|
var indexSymbol = getIndexSymbol(symbol);
|
|
return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
|
|
}
|
|
function getIndexInfosOfIndexSymbol(indexSymbol) {
|
|
if (indexSymbol.declarations) {
|
|
var indexInfos_4 = [];
|
|
var _loop_14 = function (declaration) {
|
|
if (declaration.parameters.length === 1) {
|
|
var parameter = declaration.parameters[0];
|
|
if (parameter.type) {
|
|
forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
|
|
if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_4, keyType)) {
|
|
indexInfos_4.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64), declaration));
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
_loop_14(declaration);
|
|
}
|
|
return indexInfos_4;
|
|
}
|
|
return ts.emptyArray;
|
|
}
|
|
function isValidIndexKeyType(type) {
|
|
return !!(type.flags & (4 | 8 | 4096)) || isPatternLiteralType(type) ||
|
|
!!(type.flags & 2097152) && !isGenericType(type) && ts.some(type.types, isValidIndexKeyType);
|
|
}
|
|
function getConstraintDeclaration(type) {
|
|
return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
|
|
}
|
|
function getInferredTypeParameterConstraint(typeParameter, omitTypeReferences) {
|
|
var _a;
|
|
var inferences;
|
|
if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
|
|
var _loop_15 = function (declaration) {
|
|
if (declaration.parent.kind === 190) {
|
|
var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
|
|
if (grandParent.kind === 178 && !omitTypeReferences) {
|
|
var typeReference_1 = grandParent;
|
|
var typeParameters_1 = getTypeParametersForTypeReference(typeReference_1);
|
|
if (typeParameters_1) {
|
|
var index = typeReference_1.typeArguments.indexOf(childTypeParameter);
|
|
if (index < typeParameters_1.length) {
|
|
var declaredConstraint = getConstraintOfTypeParameter(typeParameters_1[index]);
|
|
if (declaredConstraint) {
|
|
var mapper = makeDeferredTypeMapper(typeParameters_1, typeParameters_1.map(function (_, index) { return function () {
|
|
return getEffectiveTypeArgumentAtIndex(typeReference_1, typeParameters_1, index);
|
|
}; }));
|
|
var constraint = instantiateType(declaredConstraint, mapper);
|
|
if (constraint !== typeParameter) {
|
|
inferences = ts.append(inferences, constraint);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (grandParent.kind === 164 && grandParent.dotDotDotToken ||
|
|
grandParent.kind === 186 ||
|
|
grandParent.kind === 197 && grandParent.dotDotDotToken) {
|
|
inferences = ts.append(inferences, createArrayType(unknownType));
|
|
}
|
|
else if (grandParent.kind === 199) {
|
|
inferences = ts.append(inferences, stringType);
|
|
}
|
|
else if (grandParent.kind === 163 && grandParent.parent.kind === 195) {
|
|
inferences = ts.append(inferences, keyofConstraintType);
|
|
}
|
|
else if (grandParent.kind === 195 && grandParent.type &&
|
|
ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 189 &&
|
|
grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 195 &&
|
|
grandParent.parent.checkType.type) {
|
|
var checkMappedType_1 = grandParent.parent.checkType;
|
|
var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
|
|
inferences = ts.append(inferences, instantiateType(nodeType, makeUnaryTypeMapper(getDeclaredTypeOfTypeParameter(getSymbolOfNode(checkMappedType_1.typeParameter)), checkMappedType_1.typeParameter.constraint ? getTypeFromTypeNode(checkMappedType_1.typeParameter.constraint) : keyofConstraintType)));
|
|
}
|
|
}
|
|
};
|
|
for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
|
|
var declaration = _b[_i];
|
|
_loop_15(declaration);
|
|
}
|
|
}
|
|
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);
|
|
if (!constraintDeclaration) {
|
|
typeParameter.constraint = getInferredTypeParameterConstraint(typeParameter) || noConstraintType;
|
|
}
|
|
else {
|
|
var type = getTypeFromTypeNode(constraintDeclaration);
|
|
if (type.flags & 1 && !isErrorType(type)) {
|
|
type = constraintDeclaration.parent.parent.kind === 195 ? keyofConstraintType : unknownType;
|
|
}
|
|
typeParameter.constraint = type;
|
|
}
|
|
}
|
|
}
|
|
return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
|
|
}
|
|
function getParentSymbolOfTypeParameter(typeParameter) {
|
|
var tp = ts.getDeclarationOfKind(typeParameter.symbol, 163);
|
|
var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getEffectiveContainerForJSDocTemplateTag(tp.parent) : tp.parent;
|
|
return host && getSymbolOfNode(host);
|
|
}
|
|
function getTypeListId(types) {
|
|
var result = "";
|
|
if (types) {
|
|
var length_4 = types.length;
|
|
var i = 0;
|
|
while (i < length_4) {
|
|
var startId = types[i].id;
|
|
var count = 1;
|
|
while (i + count < length_4 && types[i + count].id === startId + count) {
|
|
count++;
|
|
}
|
|
if (result.length) {
|
|
result += ",";
|
|
}
|
|
result += startId;
|
|
if (count > 1) {
|
|
result += ":" + count;
|
|
}
|
|
i += count;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function getAliasId(aliasSymbol, aliasTypeArguments) {
|
|
return aliasSymbol ? "@".concat(getSymbolId(aliasSymbol)) + (aliasTypeArguments ? ":".concat(getTypeListId(aliasTypeArguments)) : "") : "";
|
|
}
|
|
function getPropagatingFlagsOfTypes(types, excludeKinds) {
|
|
var result = 0;
|
|
for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
|
|
var type = types_8[_i];
|
|
if (excludeKinds === undefined || !(type.flags & excludeKinds)) {
|
|
result |= ts.getObjectFlags(type);
|
|
}
|
|
}
|
|
return result & 458752;
|
|
}
|
|
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.objectFlags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments) : 0;
|
|
type.target = target;
|
|
type.resolvedTypeArguments = typeArguments;
|
|
}
|
|
return type;
|
|
}
|
|
function cloneTypeReference(source) {
|
|
var type = createType(source.flags);
|
|
type.symbol = source.symbol;
|
|
type.objectFlags = source.objectFlags;
|
|
type.target = source.target;
|
|
type.resolvedTypeArguments = source.resolvedTypeArguments;
|
|
return type;
|
|
}
|
|
function createDeferredTypeReference(target, node, mapper, aliasSymbol, aliasTypeArguments) {
|
|
if (!aliasSymbol) {
|
|
aliasSymbol = getAliasSymbolForTypeNode(node);
|
|
var localAliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
|
|
aliasTypeArguments = mapper ? instantiateTypes(localAliasTypeArguments, mapper) : localAliasTypeArguments;
|
|
}
|
|
var type = createObjectType(4, target.symbol);
|
|
type.target = target;
|
|
type.node = node;
|
|
type.mapper = mapper;
|
|
type.aliasSymbol = aliasSymbol;
|
|
type.aliasTypeArguments = aliasTypeArguments;
|
|
return type;
|
|
}
|
|
function getTypeArguments(type) {
|
|
var _a, _b;
|
|
if (!type.resolvedTypeArguments) {
|
|
if (!pushTypeResolution(type, 6)) {
|
|
return ((_a = type.target.localTypeParameters) === null || _a === void 0 ? void 0 : _a.map(function () { return errorType; })) || ts.emptyArray;
|
|
}
|
|
var node = type.node;
|
|
var typeArguments = !node ? ts.emptyArray :
|
|
node.kind === 178 ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
|
|
node.kind === 183 ? [getTypeFromTypeNode(node.elementType)] :
|
|
ts.map(node.elements, getTypeFromTypeNode);
|
|
if (popTypeResolution()) {
|
|
type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
|
|
}
|
|
else {
|
|
type.resolvedTypeArguments = ((_b = type.target.localTypeParameters) === null || _b === void 0 ? void 0 : _b.map(function () { return errorType; })) || ts.emptyArray;
|
|
error(type.node || currentNode, type.target.symbol ? ts.Diagnostics.Type_arguments_for_0_circularly_reference_themselves : ts.Diagnostics.Tuple_type_arguments_circularly_reference_themselves, type.target.symbol && symbolToString(type.target.symbol));
|
|
}
|
|
}
|
|
return type.resolvedTypeArguments;
|
|
}
|
|
function getTypeReferenceArity(type) {
|
|
return ts.length(type.target.typeParameters);
|
|
}
|
|
function getTypeFromClassOrInterfaceReference(node, symbol) {
|
|
var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol));
|
|
var typeParameters = type.localTypeParameters;
|
|
if (typeParameters) {
|
|
var numTypeArguments = ts.length(node.typeArguments);
|
|
var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters);
|
|
var isJs = ts.isInJSFile(node);
|
|
var isJsImplicitAny = !noImplicitAny && isJs;
|
|
if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) {
|
|
var missingAugmentsTag = isJs && ts.isExpressionWithTypeArguments(node) && !ts.isJSDocAugmentsTag(node.parent);
|
|
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;
|
|
}
|
|
}
|
|
if (node.kind === 178 && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
|
|
return createDeferredTypeReference(type, node, undefined);
|
|
}
|
|
var typeArguments = ts.concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgumentsFromTypeReferenceNode(node), typeParameters, minTypeArgumentCount, isJs));
|
|
return createTypeReference(type, typeArguments);
|
|
}
|
|
return checkNoTypeArguments(node, symbol) ? type : errorType;
|
|
}
|
|
function getTypeAliasInstantiation(symbol, typeArguments, aliasSymbol, aliasTypeArguments) {
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
if (type === intrinsicMarkerType && intrinsicTypeKinds.has(symbol.escapedName) && typeArguments && typeArguments.length === 1) {
|
|
return getStringMappingType(symbol, typeArguments[0]);
|
|
}
|
|
var links = getSymbolLinks(symbol);
|
|
var typeParameters = links.typeParameters;
|
|
var id = getTypeListId(typeArguments) + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
var instantiation = links.instantiations.get(id);
|
|
if (!instantiation) {
|
|
links.instantiations.set(id, instantiation = instantiateTypeWithAlias(type, createTypeMapper(typeParameters, fillMissingTypeArguments(typeArguments, typeParameters, getMinTypeArgumentCount(typeParameters), ts.isInJSFile(symbol.valueDeclaration))), aliasSymbol, aliasTypeArguments));
|
|
}
|
|
return instantiation;
|
|
}
|
|
function getTypeFromTypeAliasReference(node, symbol) {
|
|
if (ts.getCheckFlags(symbol) & 1048576) {
|
|
var typeArguments = typeArgumentsFromTypeReferenceNode(node);
|
|
var id = getAliasId(symbol, typeArguments);
|
|
var errorType_1 = errorTypes.get(id);
|
|
if (!errorType_1) {
|
|
errorType_1 = createIntrinsicType(1, "error");
|
|
errorType_1.aliasSymbol = symbol;
|
|
errorType_1.aliasTypeArguments = typeArguments;
|
|
errorTypes.set(id, errorType_1);
|
|
}
|
|
return errorType_1;
|
|
}
|
|
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;
|
|
}
|
|
var aliasSymbol = getAliasSymbolForTypeNode(node);
|
|
var newAliasSymbol = aliasSymbol && (isLocalTypeAlias(symbol) || !isLocalTypeAlias(aliasSymbol)) ? aliasSymbol : undefined;
|
|
return getTypeAliasInstantiation(symbol, typeArgumentsFromTypeReferenceNode(node), newAliasSymbol, getTypeArgumentsForAliasSymbol(newAliasSymbol));
|
|
}
|
|
return checkNoTypeArguments(node, symbol) ? type : errorType;
|
|
}
|
|
function isLocalTypeAlias(symbol) {
|
|
var _a;
|
|
var declaration = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isTypeAlias);
|
|
return !!(declaration && ts.getContainingFunction(declaration));
|
|
}
|
|
function getTypeReferenceName(node) {
|
|
switch (node.kind) {
|
|
case 178:
|
|
return node.typeName;
|
|
case 228:
|
|
var expr = node.expression;
|
|
if (ts.isEntityNameExpression(expr)) {
|
|
return expr;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getSymbolPath(symbol) {
|
|
return symbol.parent ? "".concat(getSymbolPath(symbol.parent), ".").concat(symbol.escapedName) : symbol.escapedName;
|
|
}
|
|
function getUnresolvedSymbolForEntityName(name) {
|
|
var identifier = name.kind === 161 ? name.right :
|
|
name.kind === 206 ? name.name :
|
|
name;
|
|
var text = identifier.escapedText;
|
|
if (text) {
|
|
var parentSymbol = name.kind === 161 ? getUnresolvedSymbolForEntityName(name.left) :
|
|
name.kind === 206 ? getUnresolvedSymbolForEntityName(name.expression) :
|
|
undefined;
|
|
var path = parentSymbol ? "".concat(getSymbolPath(parentSymbol), ".").concat(text) : text;
|
|
var result = unresolvedSymbols.get(path);
|
|
if (!result) {
|
|
unresolvedSymbols.set(path, result = createSymbol(524288, text, 1048576));
|
|
result.parent = parentSymbol;
|
|
result.declaredType = unresolvedType;
|
|
}
|
|
return result;
|
|
}
|
|
return unknownSymbol;
|
|
}
|
|
function resolveTypeReferenceName(typeReference, meaning, ignoreErrors) {
|
|
var name = getTypeReferenceName(typeReference);
|
|
if (!name) {
|
|
return unknownSymbol;
|
|
}
|
|
var symbol = resolveEntityName(name, meaning, ignoreErrors);
|
|
return symbol && symbol !== unknownSymbol ? symbol :
|
|
ignoreErrors ? unknownSymbol : getUnresolvedSymbolForEntityName(name);
|
|
}
|
|
function getTypeReferenceType(node, symbol) {
|
|
if (symbol === unknownSymbol) {
|
|
return errorType;
|
|
}
|
|
symbol = getExpandoSymbol(symbol) || symbol;
|
|
if (symbol.flags & (32 | 64)) {
|
|
return getTypeFromClassOrInterfaceReference(node, symbol);
|
|
}
|
|
if (symbol.flags & 524288) {
|
|
return getTypeFromTypeAliasReference(node, symbol);
|
|
}
|
|
var res = tryGetDeclaredTypeOfSymbol(symbol);
|
|
if (res) {
|
|
return checkNoTypeArguments(node, symbol) ? getRegularTypeOfLiteralType(res) : errorType;
|
|
}
|
|
if (symbol.flags & 111551 && isJSDocTypeReference(node)) {
|
|
var jsdocType = getTypeFromJSDocValueReference(node, symbol);
|
|
if (jsdocType) {
|
|
return jsdocType;
|
|
}
|
|
else {
|
|
resolveTypeReferenceName(node, 788968);
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
}
|
|
return errorType;
|
|
}
|
|
function getTypeFromJSDocValueReference(node, symbol) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedJSDocType) {
|
|
var valueType = getTypeOfSymbol(symbol);
|
|
var typeType = valueType;
|
|
if (symbol.valueDeclaration) {
|
|
var isImportTypeWithQualifier = node.kind === 200 && node.qualifier;
|
|
if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
|
|
typeType = getTypeReferenceType(node, valueType.symbol);
|
|
}
|
|
}
|
|
links.resolvedJSDocType = typeType;
|
|
}
|
|
return links.resolvedJSDocType;
|
|
}
|
|
function getSubstitutionType(baseType, substitute) {
|
|
if (substitute.flags & 3 || substitute === baseType) {
|
|
return baseType;
|
|
}
|
|
var id = "".concat(getTypeId(baseType), ">").concat(getTypeId(substitute));
|
|
var cached = substitutionTypes.get(id);
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
var result = createType(33554432);
|
|
result.baseType = baseType;
|
|
result.substitute = substitute;
|
|
substitutionTypes.set(id, result);
|
|
return result;
|
|
}
|
|
function isUnaryTupleTypeNode(node) {
|
|
return node.kind === 184 && node.elements.length === 1;
|
|
}
|
|
function getImpliedConstraint(type, checkNode, extendsNode) {
|
|
return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
|
|
getActualTypeVariable(getTypeFromTypeNode(checkNode)) === getActualTypeVariable(type) ? getTypeFromTypeNode(extendsNode) :
|
|
undefined;
|
|
}
|
|
function getConditionalFlowTypeOfType(type, node) {
|
|
var constraints;
|
|
var covariant = true;
|
|
while (node && !ts.isStatement(node) && node.kind !== 320) {
|
|
var parent = node.parent;
|
|
if (parent.kind === 164) {
|
|
covariant = !covariant;
|
|
}
|
|
if ((covariant || type.flags & 8650752) && parent.kind === 189 && node === parent.trueType) {
|
|
var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
|
|
if (constraint) {
|
|
constraints = ts.append(constraints, constraint);
|
|
}
|
|
}
|
|
else if (type.flags & 262144 && parent.kind === 195 && node === parent.type) {
|
|
var mappedType = getTypeFromTypeNode(parent);
|
|
if (getTypeParameterFromMappedType(mappedType) === getActualTypeVariable(type)) {
|
|
var typeParameter = getHomomorphicTypeVariable(mappedType);
|
|
if (typeParameter) {
|
|
var constraint = getConstraintOfTypeParameter(typeParameter);
|
|
if (constraint && everyType(constraint, isArrayOrTupleType)) {
|
|
constraints = ts.append(constraints, getUnionType([numberType, numericStringType]));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
node = parent;
|
|
}
|
|
return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
|
|
}
|
|
function isJSDocTypeReference(node) {
|
|
return !!(node.flags & 8388608) && (node.kind === 178 || node.kind === 200);
|
|
}
|
|
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) : anon);
|
|
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":
|
|
return (!typeArgs || !typeArgs.length) && !noImplicitAny ? anyArrayType : undefined;
|
|
case "promise":
|
|
return (!typeArgs || !typeArgs.length) && !noImplicitAny ? 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 indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, false)] : ts.emptyArray;
|
|
return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
|
|
}
|
|
return anyType;
|
|
}
|
|
checkNoTypeArguments(node);
|
|
return !noImplicitAny ? anyType : undefined;
|
|
}
|
|
}
|
|
}
|
|
function getTypeFromJSDocNullableTypeNode(node) {
|
|
var type = getTypeFromTypeNode(node.type);
|
|
return strictNullChecks ? getNullableType(type, 65536) : type;
|
|
}
|
|
function getTypeFromTypeReference(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
if (ts.isConstTypeReference(node) && ts.isAssertionExpression(node.parent)) {
|
|
links.resolvedSymbol = unknownSymbol;
|
|
return links.resolvedType = checkExpressionCached(node.parent.expression);
|
|
}
|
|
var symbol = void 0;
|
|
var type = void 0;
|
|
var meaning = 788968;
|
|
if (isJSDocTypeReference(node)) {
|
|
type = getIntendedTypeFromJSDocTypeReference(node);
|
|
if (!type) {
|
|
symbol = resolveTypeReferenceName(node, meaning, true);
|
|
if (symbol === unknownSymbol) {
|
|
symbol = resolveTypeReferenceName(node, meaning | 111551);
|
|
}
|
|
else {
|
|
resolveTypeReferenceName(node, meaning);
|
|
}
|
|
type = getTypeReferenceType(node, symbol);
|
|
}
|
|
}
|
|
if (!type) {
|
|
symbol = resolveTypeReferenceName(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) {
|
|
var type = checkExpressionWithTypeArguments(node);
|
|
links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function getTypeOfGlobalSymbol(symbol, arity) {
|
|
function getTypeDeclaration(symbol) {
|
|
var declarations = symbol.declarations;
|
|
if (declarations) {
|
|
for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
|
|
var declaration = declarations_3[_i];
|
|
switch (declaration.kind) {
|
|
case 257:
|
|
case 258:
|
|
case 260:
|
|
return declaration;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!symbol) {
|
|
return arity ? emptyGenericType : emptyObjectType;
|
|
}
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
if (!(type.flags & 524288)) {
|
|
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, 111551, reportErrors ? ts.Diagnostics.Cannot_find_global_value_0 : undefined);
|
|
}
|
|
function getGlobalTypeSymbol(name, reportErrors) {
|
|
return getGlobalSymbol(name, 788968, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined);
|
|
}
|
|
function getGlobalTypeAliasSymbol(name, arity, reportErrors) {
|
|
var symbol = getGlobalSymbol(name, 788968, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined);
|
|
if (symbol) {
|
|
getDeclaredTypeOfSymbol(symbol);
|
|
if (ts.length(getSymbolLinks(symbol).typeParameters) !== arity) {
|
|
var decl = symbol.declarations && ts.find(symbol.declarations, ts.isTypeAliasDeclaration);
|
|
error(decl, ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, ts.symbolName(symbol), arity);
|
|
return undefined;
|
|
}
|
|
}
|
|
return symbol;
|
|
}
|
|
function getGlobalSymbol(name, meaning, diagnostic) {
|
|
return resolveName(undefined, name, meaning, diagnostic, name, false, false, 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 getGlobalImportMetaExpressionType() {
|
|
if (!deferredGlobalImportMetaExpressionType) {
|
|
var symbol = createSymbol(0, "ImportMetaExpression");
|
|
var importMetaType = getGlobalImportMetaType();
|
|
var metaPropertySymbol = createSymbol(4, "meta", 8);
|
|
metaPropertySymbol.parent = symbol;
|
|
metaPropertySymbol.type = importMetaType;
|
|
var members = ts.createSymbolTable([metaPropertySymbol]);
|
|
symbol.members = members;
|
|
deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
}
|
|
return deferredGlobalImportMetaExpressionType;
|
|
}
|
|
function getGlobalImportCallOptionsType(reportErrors) {
|
|
return (deferredGlobalImportCallOptionsType || (deferredGlobalImportCallOptionsType = getGlobalType("ImportCallOptions", 0, reportErrors))) || emptyObjectType;
|
|
}
|
|
function getGlobalESSymbolConstructorSymbol(reportErrors) {
|
|
return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
|
|
}
|
|
function getGlobalESSymbolConstructorTypeSymbol(reportErrors) {
|
|
return deferredGlobalESSymbolConstructorTypeSymbol || (deferredGlobalESSymbolConstructorTypeSymbol = getGlobalTypeSymbol("SymbolConstructor", reportErrors));
|
|
}
|
|
function getGlobalESSymbolType() {
|
|
return (deferredGlobalESSymbolType || (deferredGlobalESSymbolType = getGlobalType("Symbol", 0, false))) || emptyObjectType;
|
|
}
|
|
function getGlobalPromiseType(reportErrors) {
|
|
return (deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType("Promise", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalPromiseLikeType(reportErrors) {
|
|
return (deferredGlobalPromiseLikeType || (deferredGlobalPromiseLikeType = getGlobalType("PromiseLike", 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", 3, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalAsyncIterableIteratorType(reportErrors) {
|
|
return (deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalAsyncGeneratorType(reportErrors) {
|
|
return (deferredGlobalAsyncGeneratorType || (deferredGlobalAsyncGeneratorType = getGlobalType("AsyncGenerator", 3, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalIterableType(reportErrors) {
|
|
return (deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalIteratorType(reportErrors) {
|
|
return (deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator", 3, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalIterableIteratorType(reportErrors) {
|
|
return (deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalGeneratorType(reportErrors) {
|
|
return (deferredGlobalGeneratorType || (deferredGlobalGeneratorType = getGlobalType("Generator", 3, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalIteratorYieldResultType(reportErrors) {
|
|
return (deferredGlobalIteratorYieldResultType || (deferredGlobalIteratorYieldResultType = getGlobalType("IteratorYieldResult", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalIteratorReturnResultType(reportErrors) {
|
|
return (deferredGlobalIteratorReturnResultType || (deferredGlobalIteratorReturnResultType = getGlobalType("IteratorReturnResult", 1, reportErrors))) || emptyGenericType;
|
|
}
|
|
function getGlobalTypeOrUndefined(name, arity) {
|
|
if (arity === void 0) { arity = 0; }
|
|
var symbol = getGlobalSymbol(name, 788968, undefined);
|
|
return symbol && getTypeOfGlobalSymbol(symbol, arity);
|
|
}
|
|
function getGlobalExtractSymbol() {
|
|
deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalTypeAliasSymbol("Extract", 2, true) || unknownSymbol);
|
|
return deferredGlobalExtractSymbol === unknownSymbol ? undefined : deferredGlobalExtractSymbol;
|
|
}
|
|
function getGlobalOmitSymbol() {
|
|
deferredGlobalOmitSymbol || (deferredGlobalOmitSymbol = getGlobalTypeAliasSymbol("Omit", 2, true) || unknownSymbol);
|
|
return deferredGlobalOmitSymbol === unknownSymbol ? undefined : deferredGlobalOmitSymbol;
|
|
}
|
|
function getGlobalAwaitedSymbol(reportErrors) {
|
|
deferredGlobalAwaitedSymbol || (deferredGlobalAwaitedSymbol = getGlobalTypeAliasSymbol("Awaited", 1, reportErrors) || (reportErrors ? unknownSymbol : undefined));
|
|
return deferredGlobalAwaitedSymbol === unknownSymbol ? undefined : deferredGlobalAwaitedSymbol;
|
|
}
|
|
function getGlobalBigIntType() {
|
|
return (deferredGlobalBigIntType || (deferredGlobalBigIntType = getGlobalType("BigInt", 0, false))) || emptyObjectType;
|
|
}
|
|
function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) {
|
|
return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType;
|
|
}
|
|
function createTypedPropertyDescriptorType(propertyType) {
|
|
return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]);
|
|
}
|
|
function createIterableType(iteratedType) {
|
|
return createTypeFromGenericGlobalType(getGlobalIterableType(true), [iteratedType]);
|
|
}
|
|
function createArrayType(elementType, readonly) {
|
|
return createTypeFromGenericGlobalType(readonly ? globalReadonlyArrayType : globalArrayType, [elementType]);
|
|
}
|
|
function getTupleElementFlags(node) {
|
|
switch (node.kind) {
|
|
case 185:
|
|
return 2;
|
|
case 186:
|
|
return getRestTypeElementFlags(node);
|
|
case 197:
|
|
return node.questionToken ? 2 :
|
|
node.dotDotDotToken ? getRestTypeElementFlags(node) :
|
|
1;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
function getRestTypeElementFlags(node) {
|
|
return getArrayElementTypeNode(node.type) ? 4 : 8;
|
|
}
|
|
function getArrayOrTupleTargetType(node) {
|
|
var readonly = isReadonlyTypeOperator(node.parent);
|
|
var elementType = getArrayElementTypeNode(node);
|
|
if (elementType) {
|
|
return readonly ? globalReadonlyArrayType : globalArrayType;
|
|
}
|
|
var elementFlags = ts.map(node.elements, getTupleElementFlags);
|
|
var missingName = ts.some(node.elements, function (e) { return e.kind !== 197; });
|
|
return getTupleTargetType(elementFlags, readonly, missingName ? undefined : node.elements);
|
|
}
|
|
function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
|
|
return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 183 ? mayResolveTypeAlias(node.elementType) :
|
|
node.kind === 184 ? ts.some(node.elements, mayResolveTypeAlias) :
|
|
hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
|
|
}
|
|
function isResolvedByTypeAlias(node) {
|
|
var parent = node.parent;
|
|
switch (parent.kind) {
|
|
case 191:
|
|
case 197:
|
|
case 178:
|
|
case 187:
|
|
case 188:
|
|
case 194:
|
|
case 189:
|
|
case 193:
|
|
case 183:
|
|
case 184:
|
|
return isResolvedByTypeAlias(parent);
|
|
case 259:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function mayResolveTypeAlias(node) {
|
|
switch (node.kind) {
|
|
case 178:
|
|
return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node, 788968).flags & 524288);
|
|
case 181:
|
|
return true;
|
|
case 193:
|
|
return node.operator !== 154 && mayResolveTypeAlias(node.type);
|
|
case 191:
|
|
case 185:
|
|
case 197:
|
|
case 316:
|
|
case 314:
|
|
case 315:
|
|
case 309:
|
|
return mayResolveTypeAlias(node.type);
|
|
case 186:
|
|
return node.type.kind !== 183 || mayResolveTypeAlias(node.type.elementType);
|
|
case 187:
|
|
case 188:
|
|
return ts.some(node.types, mayResolveTypeAlias);
|
|
case 194:
|
|
return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
|
|
case 189:
|
|
return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
|
|
mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
|
|
}
|
|
return false;
|
|
}
|
|
function getTypeFromArrayOrTupleTypeNode(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
var target = getArrayOrTupleTargetType(node);
|
|
if (target === emptyGenericType) {
|
|
links.resolvedType = emptyObjectType;
|
|
}
|
|
else if (!(node.kind === 184 && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8); })) && isDeferredTypeReferenceNode(node)) {
|
|
links.resolvedType = node.kind === 184 && node.elements.length === 0 ? target :
|
|
createDeferredTypeReference(target, node, undefined);
|
|
}
|
|
else {
|
|
var elementTypes = node.kind === 183 ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
|
|
links.resolvedType = createNormalizedTypeReference(target, elementTypes);
|
|
}
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function isReadonlyTypeOperator(node) {
|
|
return ts.isTypeOperatorNode(node) && node.operator === 145;
|
|
}
|
|
function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
|
|
if (readonly === void 0) { readonly = false; }
|
|
var tupleTarget = getTupleTargetType(elementFlags || ts.map(elementTypes, function (_) { return 1; }), readonly, namedMemberDeclarations);
|
|
return tupleTarget === emptyGenericType ? emptyObjectType :
|
|
elementTypes.length ? createNormalizedTypeReference(tupleTarget, elementTypes) :
|
|
tupleTarget;
|
|
}
|
|
function getTupleTargetType(elementFlags, readonly, namedMemberDeclarations) {
|
|
if (elementFlags.length === 1 && elementFlags[0] & 4) {
|
|
return readonly ? globalReadonlyArrayType : globalArrayType;
|
|
}
|
|
var key = ts.map(elementFlags, function (f) { return f & 1 ? "#" : f & 2 ? "?" : f & 4 ? "." : "*"; }).join() +
|
|
(readonly ? "R" : "") +
|
|
(namedMemberDeclarations && namedMemberDeclarations.length ? "," + ts.map(namedMemberDeclarations, getNodeId).join(",") : "");
|
|
var type = tupleTypes.get(key);
|
|
if (!type) {
|
|
tupleTypes.set(key, type = createTupleTargetType(elementFlags, readonly, namedMemberDeclarations));
|
|
}
|
|
return type;
|
|
}
|
|
function createTupleTargetType(elementFlags, readonly, namedMemberDeclarations) {
|
|
var arity = elementFlags.length;
|
|
var minLength = ts.countWhere(elementFlags, function (f) { return !!(f & (1 | 8)); });
|
|
var typeParameters;
|
|
var properties = [];
|
|
var combinedFlags = 0;
|
|
if (arity) {
|
|
typeParameters = new Array(arity);
|
|
for (var i = 0; i < arity; i++) {
|
|
var typeParameter = typeParameters[i] = createTypeParameter();
|
|
var flags = elementFlags[i];
|
|
combinedFlags |= flags;
|
|
if (!(combinedFlags & 12)) {
|
|
var property = createSymbol(4 | (flags & 2 ? 16777216 : 0), "" + i, readonly ? 8 : 0);
|
|
property.tupleLabelDeclaration = namedMemberDeclarations === null || namedMemberDeclarations === void 0 ? void 0 : namedMemberDeclarations[i];
|
|
property.type = typeParameter;
|
|
properties.push(property);
|
|
}
|
|
}
|
|
}
|
|
var fixedLength = properties.length;
|
|
var lengthSymbol = createSymbol(4, "length", readonly ? 8 : 0);
|
|
if (combinedFlags & 12) {
|
|
lengthSymbol.type = numberType;
|
|
}
|
|
else {
|
|
var literalTypes = [];
|
|
for (var i = minLength; i <= arity; i++)
|
|
literalTypes.push(getNumberLiteralType(i));
|
|
lengthSymbol.type = getUnionType(literalTypes);
|
|
}
|
|
properties.push(lengthSymbol);
|
|
var type = createObjectType(8 | 4);
|
|
type.typeParameters = typeParameters;
|
|
type.outerTypeParameters = undefined;
|
|
type.localTypeParameters = typeParameters;
|
|
type.instantiations = new ts.Map();
|
|
type.instantiations.set(getTypeListId(type.typeParameters), type);
|
|
type.target = type;
|
|
type.resolvedTypeArguments = type.typeParameters;
|
|
type.thisType = createTypeParameter();
|
|
type.thisType.isThisType = true;
|
|
type.thisType.constraint = type;
|
|
type.declaredProperties = properties;
|
|
type.declaredCallSignatures = ts.emptyArray;
|
|
type.declaredConstructSignatures = ts.emptyArray;
|
|
type.declaredIndexInfos = ts.emptyArray;
|
|
type.elementFlags = elementFlags;
|
|
type.minLength = minLength;
|
|
type.fixedLength = fixedLength;
|
|
type.hasRestElement = !!(combinedFlags & 12);
|
|
type.combinedFlags = combinedFlags;
|
|
type.readonly = readonly;
|
|
type.labeledElementDeclarations = namedMemberDeclarations;
|
|
return type;
|
|
}
|
|
function createNormalizedTypeReference(target, typeArguments) {
|
|
return target.objectFlags & 8 ? createNormalizedTupleType(target, typeArguments) : createTypeReference(target, typeArguments);
|
|
}
|
|
function createNormalizedTupleType(target, elementTypes) {
|
|
var _a, _b, _c;
|
|
if (!(target.combinedFlags & 14)) {
|
|
return createTypeReference(target, elementTypes);
|
|
}
|
|
if (target.combinedFlags & 8) {
|
|
var unionIndex_1 = ts.findIndex(elementTypes, function (t, i) { return !!(target.elementFlags[i] & 8 && t.flags & (131072 | 1048576)); });
|
|
if (unionIndex_1 >= 0) {
|
|
return checkCrossProductUnion(ts.map(elementTypes, function (t, i) { return target.elementFlags[i] & 8 ? t : unknownType; })) ?
|
|
mapType(elementTypes[unionIndex_1], function (t) { return createNormalizedTupleType(target, ts.replaceElement(elementTypes, unionIndex_1, t)); }) :
|
|
errorType;
|
|
}
|
|
}
|
|
var expandedTypes = [];
|
|
var expandedFlags = [];
|
|
var expandedDeclarations = [];
|
|
var lastRequiredIndex = -1;
|
|
var firstRestIndex = -1;
|
|
var lastOptionalOrRestIndex = -1;
|
|
var _loop_16 = function (i) {
|
|
var type = elementTypes[i];
|
|
var flags = target.elementFlags[i];
|
|
if (flags & 8) {
|
|
if (type.flags & 58982400 || isGenericMappedType(type)) {
|
|
addElement(type, 8, (_a = target.labeledElementDeclarations) === null || _a === void 0 ? void 0 : _a[i]);
|
|
}
|
|
else if (isTupleType(type)) {
|
|
var elements = getTypeArguments(type);
|
|
if (elements.length + expandedTypes.length >= 10000) {
|
|
error(currentNode, ts.isPartOfTypeNode(currentNode)
|
|
? ts.Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent
|
|
: ts.Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent);
|
|
return { value: errorType };
|
|
}
|
|
ts.forEach(elements, function (t, n) { var _a; return addElement(t, type.target.elementFlags[n], (_a = type.target.labeledElementDeclarations) === null || _a === void 0 ? void 0 : _a[n]); });
|
|
}
|
|
else {
|
|
addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
|
|
}
|
|
}
|
|
else {
|
|
addElement(type, flags, (_c = target.labeledElementDeclarations) === null || _c === void 0 ? void 0 : _c[i]);
|
|
}
|
|
};
|
|
for (var i = 0; i < elementTypes.length; i++) {
|
|
var state_4 = _loop_16(i);
|
|
if (typeof state_4 === "object")
|
|
return state_4.value;
|
|
}
|
|
for (var i = 0; i < lastRequiredIndex; i++) {
|
|
if (expandedFlags[i] & 2)
|
|
expandedFlags[i] = 1;
|
|
}
|
|
if (firstRestIndex >= 0 && firstRestIndex < lastOptionalOrRestIndex) {
|
|
expandedTypes[firstRestIndex] = getUnionType(ts.sameMap(expandedTypes.slice(firstRestIndex, lastOptionalOrRestIndex + 1), function (t, i) { return expandedFlags[firstRestIndex + i] & 8 ? getIndexedAccessType(t, numberType) : t; }));
|
|
expandedTypes.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex);
|
|
expandedFlags.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex);
|
|
expandedDeclarations === null || expandedDeclarations === void 0 ? void 0 : expandedDeclarations.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex);
|
|
}
|
|
var tupleTarget = getTupleTargetType(expandedFlags, target.readonly, expandedDeclarations);
|
|
return tupleTarget === emptyGenericType ? emptyObjectType :
|
|
expandedFlags.length ? createTypeReference(tupleTarget, expandedTypes) :
|
|
tupleTarget;
|
|
function addElement(type, flags, declaration) {
|
|
if (flags & 1) {
|
|
lastRequiredIndex = expandedFlags.length;
|
|
}
|
|
if (flags & 4 && firstRestIndex < 0) {
|
|
firstRestIndex = expandedFlags.length;
|
|
}
|
|
if (flags & (2 | 4)) {
|
|
lastOptionalOrRestIndex = expandedFlags.length;
|
|
}
|
|
expandedTypes.push(type);
|
|
expandedFlags.push(flags);
|
|
if (expandedDeclarations && declaration) {
|
|
expandedDeclarations.push(declaration);
|
|
}
|
|
else {
|
|
expandedDeclarations = undefined;
|
|
}
|
|
}
|
|
}
|
|
function sliceTupleType(type, index, endSkipCount) {
|
|
if (endSkipCount === void 0) { endSkipCount = 0; }
|
|
var target = type.target;
|
|
var endIndex = getTypeReferenceArity(type) - endSkipCount;
|
|
return index > target.fixedLength ? getRestArrayTypeOfTupleType(type) || createTupleType(ts.emptyArray) :
|
|
createTupleType(getTypeArguments(type).slice(index, endIndex), target.elementFlags.slice(index, endIndex), false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
|
|
}
|
|
function getKnownKeysOfTupleType(type) {
|
|
return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
|
|
}
|
|
function getStartElementCount(type, flags) {
|
|
var index = ts.findIndex(type.elementFlags, function (f) { return !(f & flags); });
|
|
return index >= 0 ? index : type.elementFlags.length;
|
|
}
|
|
function getEndElementCount(type, flags) {
|
|
return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
|
|
}
|
|
function getTypeFromOptionalTypeNode(node) {
|
|
return addOptionality(getTypeFromTypeNode(node.type), true);
|
|
}
|
|
function getTypeId(type) {
|
|
return type.id;
|
|
}
|
|
function containsType(types, type) {
|
|
return ts.binarySearch(types, type, getTypeId, ts.compareValues) >= 0;
|
|
}
|
|
function insertType(types, type) {
|
|
var index = ts.binarySearch(types, type, getTypeId, ts.compareValues);
|
|
if (index < 0) {
|
|
types.splice(~index, 0, type);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function addTypeToUnion(typeSet, includes, type) {
|
|
var flags = type.flags;
|
|
if (flags & 1048576) {
|
|
return addTypesToUnion(typeSet, includes | (isNamedUnionType(type) ? 1048576 : 0), type.types);
|
|
}
|
|
if (!(flags & 131072)) {
|
|
includes |= flags & 205258751;
|
|
if (flags & 465829888)
|
|
includes |= 33554432;
|
|
if (type === wildcardType)
|
|
includes |= 8388608;
|
|
if (!strictNullChecks && flags & 98304) {
|
|
if (!(ts.getObjectFlags(type) & 65536))
|
|
includes |= 4194304;
|
|
}
|
|
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) {
|
|
typeSet.splice(~index, 0, type);
|
|
}
|
|
}
|
|
}
|
|
return includes;
|
|
}
|
|
function addTypesToUnion(typeSet, includes, types) {
|
|
for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
|
|
var type = types_9[_i];
|
|
includes = addTypeToUnion(typeSet, includes, type);
|
|
}
|
|
return includes;
|
|
}
|
|
function removeSubtypes(types, hasObjectTypes) {
|
|
if (types.length < 2) {
|
|
return types;
|
|
}
|
|
var id = getTypeListId(types);
|
|
var match = subtypeReductionCache.get(id);
|
|
if (match) {
|
|
return match;
|
|
}
|
|
var hasEmptyObject = hasObjectTypes && ts.some(types, function (t) { return !!(t.flags & 524288) && !isGenericMappedType(t) && isEmptyResolvedType(resolveStructuredTypeMembers(t)); });
|
|
var len = types.length;
|
|
var i = len;
|
|
var count = 0;
|
|
while (i > 0) {
|
|
i--;
|
|
var source = types[i];
|
|
if (hasEmptyObject || source.flags & 469499904) {
|
|
var keyProperty = source.flags & (524288 | 2097152 | 58982400) ?
|
|
ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
|
|
undefined;
|
|
var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
|
|
for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
|
|
var target = types_10[_i];
|
|
if (source !== target) {
|
|
if (count === 100000) {
|
|
var estimatedCount = (count / (len - i)) * len;
|
|
if (estimatedCount > 1000000) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "removeSubtypes_DepthLimit", { typeIds: types.map(function (t) { return t.id; }) });
|
|
error(currentNode, ts.Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent);
|
|
return undefined;
|
|
}
|
|
}
|
|
count++;
|
|
if (keyProperty && target.flags & (524288 | 2097152 | 58982400)) {
|
|
var t = getTypeOfPropertyOfType(target, keyProperty.escapedName);
|
|
if (t && isUnitType(t) && getRegularTypeOfLiteralType(t) !== keyPropertyType) {
|
|
continue;
|
|
}
|
|
}
|
|
if (isTypeRelatedTo(source, target, strictSubtypeRelation) && (!(ts.getObjectFlags(getTargetType(source)) & 1) ||
|
|
!(ts.getObjectFlags(getTargetType(target)) & 1) ||
|
|
isTypeDerivedFrom(source, target))) {
|
|
ts.orderedRemoveItemAt(types, i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
subtypeReductionCache.set(id, types);
|
|
return types;
|
|
}
|
|
function removeRedundantLiteralTypes(types, includes, reduceVoidUndefined) {
|
|
var i = types.length;
|
|
while (i > 0) {
|
|
i--;
|
|
var t = types[i];
|
|
var flags = t.flags;
|
|
var remove = flags & (128 | 134217728 | 268435456) && includes & 4 ||
|
|
flags & 256 && includes & 8 ||
|
|
flags & 2048 && includes & 64 ||
|
|
flags & 8192 && includes & 4096 ||
|
|
reduceVoidUndefined && flags & 32768 && includes & 16384 ||
|
|
isFreshLiteralType(t) && containsType(types, t.regularType);
|
|
if (remove) {
|
|
ts.orderedRemoveItemAt(types, i);
|
|
}
|
|
}
|
|
}
|
|
function removeStringLiteralsMatchedByTemplateLiterals(types) {
|
|
var templates = ts.filter(types, isPatternLiteralType);
|
|
if (templates.length) {
|
|
var i = types.length;
|
|
var _loop_17 = function () {
|
|
i--;
|
|
var t = types[i];
|
|
if (t.flags & 128 && ts.some(templates, function (template) { return isTypeMatchedByTemplateLiteralType(t, template); })) {
|
|
ts.orderedRemoveItemAt(types, i);
|
|
}
|
|
};
|
|
while (i > 0) {
|
|
_loop_17();
|
|
}
|
|
}
|
|
}
|
|
function isNamedUnionType(type) {
|
|
return !!(type.flags & 1048576 && (type.aliasSymbol || type.origin));
|
|
}
|
|
function addNamedUnions(namedUnions, types) {
|
|
for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
|
|
var t = types_11[_i];
|
|
if (t.flags & 1048576) {
|
|
var origin = t.origin;
|
|
if (t.aliasSymbol || origin && !(origin.flags & 1048576)) {
|
|
ts.pushIfUnique(namedUnions, t);
|
|
}
|
|
else if (origin && origin.flags & 1048576) {
|
|
addNamedUnions(namedUnions, origin.types);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function createOriginUnionOrIntersectionType(flags, types) {
|
|
var result = createOriginType(flags);
|
|
result.types = types;
|
|
return result;
|
|
}
|
|
function getUnionType(types, unionReduction, aliasSymbol, aliasTypeArguments, origin) {
|
|
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 (unionReduction !== 0) {
|
|
if (includes & 3) {
|
|
return includes & 1 ?
|
|
includes & 8388608 ? wildcardType : anyType :
|
|
includes & 65536 || containsType(typeSet, unknownType) ? unknownType : nonNullUnknownType;
|
|
}
|
|
if (exactOptionalPropertyTypes && includes & 32768) {
|
|
var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
|
|
if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
|
|
ts.orderedRemoveItemAt(typeSet, missingIndex);
|
|
}
|
|
}
|
|
if (includes & (2944 | 8192 | 134217728 | 268435456) || includes & 16384 && includes & 32768) {
|
|
removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2));
|
|
}
|
|
if (includes & 128 && includes & 134217728) {
|
|
removeStringLiteralsMatchedByTemplateLiterals(typeSet);
|
|
}
|
|
if (unionReduction === 2) {
|
|
typeSet = removeSubtypes(typeSet, !!(includes & 524288));
|
|
if (!typeSet) {
|
|
return errorType;
|
|
}
|
|
}
|
|
if (typeSet.length === 0) {
|
|
return includes & 65536 ? includes & 4194304 ? nullType : nullWideningType :
|
|
includes & 32768 ? includes & 4194304 ? undefinedType : undefinedWideningType :
|
|
neverType;
|
|
}
|
|
}
|
|
if (!origin && includes & 1048576) {
|
|
var namedUnions = [];
|
|
addNamedUnions(namedUnions, types);
|
|
var reducedTypes = [];
|
|
var _loop_18 = function (t) {
|
|
if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
|
|
reducedTypes.push(t);
|
|
}
|
|
};
|
|
for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
|
|
var t = typeSet_1[_i];
|
|
_loop_18(t);
|
|
}
|
|
if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
|
|
return namedUnions[0];
|
|
}
|
|
var namedTypesCount = ts.reduceLeft(namedUnions, function (sum, union) { return sum + union.types.length; }, 0);
|
|
if (namedTypesCount + reducedTypes.length === typeSet.length) {
|
|
for (var _a = 0, namedUnions_1 = namedUnions; _a < namedUnions_1.length; _a++) {
|
|
var t = namedUnions_1[_a];
|
|
insertType(reducedTypes, t);
|
|
}
|
|
origin = createOriginUnionOrIntersectionType(1048576, reducedTypes);
|
|
}
|
|
}
|
|
var objectFlags = (includes & 36323363 ? 0 : 32768) |
|
|
(includes & 2097152 ? 16777216 : 0);
|
|
return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
|
|
}
|
|
function getUnionOrIntersectionTypePredicate(signatures, kind) {
|
|
var first;
|
|
var types = [];
|
|
for (var _i = 0, signatures_6 = signatures; _i < signatures_6.length; _i++) {
|
|
var sig = signatures_6[_i];
|
|
var pred = getTypePredicateOfSignature(sig);
|
|
if (!pred || pred.kind === 2 || pred.kind === 3) {
|
|
if (kind !== 2097152) {
|
|
continue;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
if (first) {
|
|
if (!typePredicateKindsMatch(first, pred)) {
|
|
return undefined;
|
|
}
|
|
}
|
|
else {
|
|
first = pred;
|
|
}
|
|
types.push(pred.type);
|
|
}
|
|
if (!first) {
|
|
return undefined;
|
|
}
|
|
var compositeType = getUnionOrIntersectionType(types, kind);
|
|
return createTypePredicate(first.kind, first.parameterName, first.parameterIndex, compositeType);
|
|
}
|
|
function typePredicateKindsMatch(a, b) {
|
|
return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
|
|
}
|
|
function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
|
|
if (types.length === 0) {
|
|
return neverType;
|
|
}
|
|
if (types.length === 1) {
|
|
return types[0];
|
|
}
|
|
var typeKey = !origin ? getTypeListId(types) :
|
|
origin.flags & 1048576 ? "|".concat(getTypeListId(origin.types)) :
|
|
origin.flags & 2097152 ? "&".concat(getTypeListId(origin.types)) :
|
|
"#".concat(origin.type.id, "|").concat(getTypeListId(types));
|
|
var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
var type = unionTypes.get(id);
|
|
if (!type) {
|
|
type = createType(1048576);
|
|
type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, 98304);
|
|
type.types = types;
|
|
type.origin = origin;
|
|
type.aliasSymbol = aliasSymbol;
|
|
type.aliasTypeArguments = aliasTypeArguments;
|
|
if (types.length === 2 && types[0].flags & 512 && types[1].flags & 512) {
|
|
type.flags |= 16;
|
|
type.intrinsicName = "boolean";
|
|
}
|
|
unionTypes.set(id, type);
|
|
}
|
|
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 & 2097152) {
|
|
return addTypesToIntersection(typeSet, includes, type.types);
|
|
}
|
|
if (isEmptyAnonymousObjectType(type)) {
|
|
if (!(includes & 16777216)) {
|
|
includes |= 16777216;
|
|
typeSet.set(type.id.toString(), type);
|
|
}
|
|
}
|
|
else {
|
|
if (flags & 3) {
|
|
if (type === wildcardType)
|
|
includes |= 8388608;
|
|
}
|
|
else if (strictNullChecks || !(flags & 98304)) {
|
|
if (exactOptionalPropertyTypes && type === missingType) {
|
|
includes |= 262144;
|
|
type = undefinedType;
|
|
}
|
|
if (!typeSet.has(type.id.toString())) {
|
|
if (type.flags & 109440 && includes & 109440) {
|
|
includes |= 67108864;
|
|
}
|
|
typeSet.set(type.id.toString(), type);
|
|
}
|
|
}
|
|
includes |= flags & 205258751;
|
|
}
|
|
return includes;
|
|
}
|
|
function addTypesToIntersection(typeSet, includes, types) {
|
|
for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
|
|
var type = types_12[_i];
|
|
includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
|
|
}
|
|
return includes;
|
|
}
|
|
function removeRedundantSupertypes(types, includes) {
|
|
var i = types.length;
|
|
while (i > 0) {
|
|
i--;
|
|
var t = types[i];
|
|
var remove = t.flags & 4 && includes & (128 | 134217728 | 268435456) ||
|
|
t.flags & 8 && includes & 256 ||
|
|
t.flags & 64 && includes & 2048 ||
|
|
t.flags & 4096 && includes & 8192 ||
|
|
t.flags & 16384 && includes & 32768 ||
|
|
isEmptyAnonymousObjectType(t) && includes & 470302716;
|
|
if (remove) {
|
|
ts.orderedRemoveItemAt(types, i);
|
|
}
|
|
}
|
|
}
|
|
function eachUnionContains(unionTypes, type) {
|
|
for (var _i = 0, unionTypes_1 = unionTypes; _i < unionTypes_1.length; _i++) {
|
|
var u = unionTypes_1[_i];
|
|
if (!containsType(u.types, type)) {
|
|
var primitive = type.flags & 128 ? stringType :
|
|
type.flags & 256 ? numberType :
|
|
type.flags & 2048 ? bigintType :
|
|
type.flags & 8192 ? esSymbolType :
|
|
undefined;
|
|
if (!primitive || !containsType(u.types, primitive)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function extractRedundantTemplateLiterals(types) {
|
|
var i = types.length;
|
|
var literals = ts.filter(types, function (t) { return !!(t.flags & 128); });
|
|
while (i > 0) {
|
|
i--;
|
|
var t = types[i];
|
|
if (!(t.flags & 134217728))
|
|
continue;
|
|
for (var _i = 0, literals_1 = literals; _i < literals_1.length; _i++) {
|
|
var t2 = literals_1[_i];
|
|
if (isTypeSubtypeOf(t2, t)) {
|
|
ts.orderedRemoveItemAt(types, i);
|
|
break;
|
|
}
|
|
else if (isPatternLiteralType(t)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function eachIsUnionContaining(types, flag) {
|
|
return ts.every(types, function (t) { return !!(t.flags & 1048576) && ts.some(t.types, function (tt) { return !!(tt.flags & flag); }); });
|
|
}
|
|
function removeFromEach(types, flag) {
|
|
for (var i = 0; i < types.length; i++) {
|
|
types[i] = filterType(types[i], function (t) { return !(t.flags & flag); });
|
|
}
|
|
}
|
|
function intersectUnionsOfPrimitiveTypes(types) {
|
|
var unionTypes;
|
|
var index = ts.findIndex(types, function (t) { return !!(ts.getObjectFlags(t) & 32768); });
|
|
if (index < 0) {
|
|
return false;
|
|
}
|
|
var i = index + 1;
|
|
while (i < types.length) {
|
|
var t = types[i];
|
|
if (ts.getObjectFlags(t) & 32768) {
|
|
(unionTypes || (unionTypes = [types[index]])).push(t);
|
|
ts.orderedRemoveItemAt(types, i);
|
|
}
|
|
else {
|
|
i++;
|
|
}
|
|
}
|
|
if (!unionTypes) {
|
|
return false;
|
|
}
|
|
var checked = [];
|
|
var result = [];
|
|
for (var _i = 0, unionTypes_2 = unionTypes; _i < unionTypes_2.length; _i++) {
|
|
var u = unionTypes_2[_i];
|
|
for (var _a = 0, _b = u.types; _a < _b.length; _a++) {
|
|
var t = _b[_a];
|
|
if (insertType(checked, t)) {
|
|
if (eachUnionContains(unionTypes, t)) {
|
|
insertType(result, t);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
types[index] = getUnionTypeFromSortedList(result, 32768);
|
|
return true;
|
|
}
|
|
function createIntersectionType(types, aliasSymbol, aliasTypeArguments) {
|
|
var result = createType(2097152);
|
|
result.objectFlags = getPropagatingFlagsOfTypes(types, 98304);
|
|
result.types = types;
|
|
result.aliasSymbol = aliasSymbol;
|
|
result.aliasTypeArguments = aliasTypeArguments;
|
|
return result;
|
|
}
|
|
function getIntersectionType(types, aliasSymbol, aliasTypeArguments, noSupertypeReduction) {
|
|
var typeMembershipMap = new ts.Map();
|
|
var includes = addTypesToIntersection(typeMembershipMap, 0, types);
|
|
var typeSet = ts.arrayFrom(typeMembershipMap.values());
|
|
if (includes & 131072) {
|
|
return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
|
|
}
|
|
if (strictNullChecks && includes & 98304 && includes & (524288 | 67108864 | 16777216) ||
|
|
includes & 67108864 && includes & (469892092 & ~67108864) ||
|
|
includes & 402653316 && includes & (469892092 & ~402653316) ||
|
|
includes & 296 && includes & (469892092 & ~296) ||
|
|
includes & 2112 && includes & (469892092 & ~2112) ||
|
|
includes & 12288 && includes & (469892092 & ~12288) ||
|
|
includes & 49152 && includes & (469892092 & ~49152)) {
|
|
return neverType;
|
|
}
|
|
if (includes & 134217728 && includes & 128 && extractRedundantTemplateLiterals(typeSet)) {
|
|
return neverType;
|
|
}
|
|
if (includes & 1) {
|
|
return includes & 8388608 ? wildcardType : anyType;
|
|
}
|
|
if (!strictNullChecks && includes & 98304) {
|
|
return includes & 32768 ? undefinedType : nullType;
|
|
}
|
|
if (includes & 4 && includes & (128 | 134217728 | 268435456) ||
|
|
includes & 8 && includes & 256 ||
|
|
includes & 64 && includes & 2048 ||
|
|
includes & 4096 && includes & 8192 ||
|
|
includes & 16384 && includes & 32768 ||
|
|
includes & 16777216 && includes & 470302716) {
|
|
if (!noSupertypeReduction)
|
|
removeRedundantSupertypes(typeSet, includes);
|
|
}
|
|
if (includes & 262144) {
|
|
typeSet[typeSet.indexOf(undefinedType)] = missingType;
|
|
}
|
|
if (typeSet.length === 0) {
|
|
return unknownType;
|
|
}
|
|
if (typeSet.length === 1) {
|
|
return typeSet[0];
|
|
}
|
|
var id = getTypeListId(typeSet) + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
var result = intersectionTypes.get(id);
|
|
if (!result) {
|
|
if (includes & 1048576) {
|
|
if (intersectUnionsOfPrimitiveTypes(typeSet)) {
|
|
result = getIntersectionType(typeSet, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
else if (eachIsUnionContaining(typeSet, 32768)) {
|
|
var undefinedOrMissingType = exactOptionalPropertyTypes && ts.some(typeSet, function (t) { return containsType(t.types, missingType); }) ? missingType : undefinedType;
|
|
removeFromEach(typeSet, 32768);
|
|
result = getUnionType([getIntersectionType(typeSet), undefinedOrMissingType], 1, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
else if (eachIsUnionContaining(typeSet, 65536)) {
|
|
removeFromEach(typeSet, 65536);
|
|
result = getUnionType([getIntersectionType(typeSet), nullType], 1, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
else {
|
|
if (!checkCrossProductUnion(typeSet)) {
|
|
return errorType;
|
|
}
|
|
var constituents = getCrossProductIntersections(typeSet);
|
|
var origin = ts.some(constituents, function (t) { return !!(t.flags & 2097152); }) && getConstituentCountOfTypes(constituents) > getConstituentCountOfTypes(typeSet) ? createOriginUnionOrIntersectionType(2097152, typeSet) : undefined;
|
|
result = getUnionType(constituents, 1, aliasSymbol, aliasTypeArguments, origin);
|
|
}
|
|
}
|
|
else {
|
|
result = createIntersectionType(typeSet, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
intersectionTypes.set(id, result);
|
|
}
|
|
return result;
|
|
}
|
|
function getCrossProductUnionSize(types) {
|
|
return ts.reduceLeft(types, function (n, t) { return t.flags & 1048576 ? n * t.types.length : t.flags & 131072 ? 0 : n; }, 1);
|
|
}
|
|
function checkCrossProductUnion(types) {
|
|
var size = getCrossProductUnionSize(types);
|
|
if (size >= 100000) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "checkCrossProductUnion_DepthLimit", { typeIds: types.map(function (t) { return t.id; }), size: size });
|
|
error(currentNode, ts.Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function getCrossProductIntersections(types) {
|
|
var count = getCrossProductUnionSize(types);
|
|
var intersections = [];
|
|
for (var i = 0; i < count; i++) {
|
|
var constituents = types.slice();
|
|
var n = i;
|
|
for (var j = types.length - 1; j >= 0; j--) {
|
|
if (types[j].flags & 1048576) {
|
|
var sourceTypes = types[j].types;
|
|
var length_5 = sourceTypes.length;
|
|
constituents[j] = sourceTypes[n % length_5];
|
|
n = Math.floor(n / length_5);
|
|
}
|
|
}
|
|
var t = getIntersectionType(constituents);
|
|
if (!(t.flags & 131072))
|
|
intersections.push(t);
|
|
}
|
|
return intersections;
|
|
}
|
|
function getConstituentCount(type) {
|
|
return !(type.flags & 3145728) || type.aliasSymbol ? 1 :
|
|
type.flags & 1048576 && type.origin ? getConstituentCount(type.origin) :
|
|
getConstituentCountOfTypes(type.types);
|
|
}
|
|
function getConstituentCountOfTypes(types) {
|
|
return ts.reduceLeft(types, function (n, t) { return n + getConstituentCount(t); }, 0);
|
|
}
|
|
function getTypeFromIntersectionTypeNode(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
var aliasSymbol = getAliasSymbolForTypeNode(node);
|
|
var types = ts.map(node.types, getTypeFromTypeNode);
|
|
var noSupertypeReduction = types.length === 2 && !!(types[0].flags & (4 | 8 | 64)) && types[1] === emptyTypeLiteralType;
|
|
links.resolvedType = getIntersectionType(types, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol), noSupertypeReduction);
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function createIndexType(type, stringsOnly) {
|
|
var result = createType(4194304);
|
|
result.type = type;
|
|
result.stringsOnly = stringsOnly;
|
|
return result;
|
|
}
|
|
function createOriginIndexType(type) {
|
|
var result = createOriginType(4194304);
|
|
result.type = type;
|
|
return result;
|
|
}
|
|
function getIndexTypeForGenericType(type, stringsOnly) {
|
|
return stringsOnly ?
|
|
type.resolvedStringIndexType || (type.resolvedStringIndexType = createIndexType(type, true)) :
|
|
type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, false));
|
|
}
|
|
function getIndexTypeForMappedType(type, stringsOnly, noIndexSignatures) {
|
|
var typeParameter = getTypeParameterFromMappedType(type);
|
|
var constraintType = getConstraintTypeFromMappedType(type);
|
|
var nameType = getNameTypeFromMappedType(type.target || type);
|
|
if (!nameType && !noIndexSignatures) {
|
|
return constraintType;
|
|
}
|
|
var keyTypes = [];
|
|
if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
|
|
if (!isGenericIndexType(constraintType)) {
|
|
var modifiersType = getApparentType(getModifiersTypeFromMappedType(type));
|
|
forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, 8576, stringsOnly, addMemberForKeyType);
|
|
}
|
|
else {
|
|
return getIndexTypeForGenericType(type, stringsOnly);
|
|
}
|
|
}
|
|
else {
|
|
forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
|
|
}
|
|
if (isGenericIndexType(constraintType)) {
|
|
forEachType(constraintType, addMemberForKeyType);
|
|
}
|
|
var result = noIndexSignatures ? filterType(getUnionType(keyTypes), function (t) { return !(t.flags & (1 | 4)); }) : getUnionType(keyTypes);
|
|
if (result.flags & 1048576 && constraintType.flags & 1048576 && getTypeListId(result.types) === getTypeListId(constraintType.types)) {
|
|
return constraintType;
|
|
}
|
|
return result;
|
|
function addMemberForKeyType(keyType) {
|
|
var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
|
|
keyTypes.push(propNameType === stringType ? stringOrNumberType : propNameType);
|
|
}
|
|
}
|
|
function hasDistributiveNameType(mappedType) {
|
|
var typeVariable = getTypeParameterFromMappedType(mappedType);
|
|
return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
|
|
function isDistributive(type) {
|
|
return type.flags & (3 | 131068 | 131072 | 262144 | 524288 | 67108864) ? true :
|
|
type.flags & 16777216 ? type.root.isDistributive && type.checkType === typeVariable :
|
|
type.flags & (3145728 | 134217728) ? ts.every(type.types, isDistributive) :
|
|
type.flags & 8388608 ? isDistributive(type.objectType) && isDistributive(type.indexType) :
|
|
type.flags & 33554432 ? isDistributive(type.substitute) :
|
|
type.flags & 268435456 ? isDistributive(type.type) :
|
|
false;
|
|
}
|
|
}
|
|
function getLiteralTypeFromPropertyName(name) {
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
return neverType;
|
|
}
|
|
return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
|
|
getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
|
|
}
|
|
function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
|
|
if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24)) {
|
|
var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
|
|
if (!type) {
|
|
var name = ts.getNameOfDeclaration(prop.valueDeclaration);
|
|
type = prop.escapedName === "default" ? getStringLiteralType("default") :
|
|
name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
|
|
}
|
|
if (type && type.flags & include) {
|
|
return type;
|
|
}
|
|
}
|
|
return neverType;
|
|
}
|
|
function isKeyTypeIncluded(keyType, include) {
|
|
return !!(keyType.flags & include || keyType.flags & 2097152 && ts.some(keyType.types, function (t) { return isKeyTypeIncluded(t, include); }));
|
|
}
|
|
function getLiteralTypeFromProperties(type, include, includeOrigin) {
|
|
var origin = includeOrigin && (ts.getObjectFlags(type) & (3 | 4) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
|
|
var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
|
|
var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && isKeyTypeIncluded(info.keyType, include) ?
|
|
info.keyType === stringType && include & 8 ? stringOrNumberType : info.keyType : neverType; });
|
|
return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1, undefined, undefined, origin);
|
|
}
|
|
function isPossiblyReducibleByInstantiation(type) {
|
|
var uniqueFilled = getUniqueLiteralFilledInstantiation(type);
|
|
return getReducedType(uniqueFilled) !== uniqueFilled;
|
|
}
|
|
function shouldDeferIndexType(type) {
|
|
return !!(type.flags & 58982400 ||
|
|
isGenericTupleType(type) ||
|
|
isGenericMappedType(type) && !hasDistributiveNameType(type) ||
|
|
type.flags & 1048576 && ts.some(type.types, isPossiblyReducibleByInstantiation) ||
|
|
type.flags & 2097152 && maybeTypeOfKind(type, 465829888) && ts.some(type.types, isEmptyAnonymousObjectType));
|
|
}
|
|
function getIndexType(type, stringsOnly, noIndexSignatures) {
|
|
if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
|
|
type = getReducedType(type);
|
|
return shouldDeferIndexType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
|
|
type.flags & 1048576 ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
|
|
type.flags & 2097152 ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
|
|
ts.getObjectFlags(type) & 32 ? getIndexTypeForMappedType(type, stringsOnly, noIndexSignatures) :
|
|
type === wildcardType ? wildcardType :
|
|
type.flags & 2 ? neverType :
|
|
type.flags & (1 | 131072) ? keyofConstraintType :
|
|
getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 : 402653316) | (stringsOnly ? 0 : 296 | 12288), stringsOnly === keyofStringsOnly && !noIndexSignatures);
|
|
}
|
|
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 & 131072 ? stringType : indexType;
|
|
}
|
|
function getTypeFromTypeOperatorNode(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
switch (node.operator) {
|
|
case 140:
|
|
links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
|
|
break;
|
|
case 154:
|
|
links.resolvedType = node.type.kind === 151
|
|
? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
|
|
: errorType;
|
|
break;
|
|
case 145:
|
|
links.resolvedType = getTypeFromTypeNode(node.type);
|
|
break;
|
|
default:
|
|
throw ts.Debug.assertNever(node.operator);
|
|
}
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function getTypeFromTemplateTypeNode(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function getTemplateLiteralType(texts, types) {
|
|
var unionIndex = ts.findIndex(types, function (t) { return !!(t.flags & (131072 | 1048576)); });
|
|
if (unionIndex >= 0) {
|
|
return checkCrossProductUnion(types) ?
|
|
mapType(types[unionIndex], function (t) { return getTemplateLiteralType(texts, ts.replaceElement(types, unionIndex, t)); }) :
|
|
errorType;
|
|
}
|
|
if (ts.contains(types, wildcardType)) {
|
|
return wildcardType;
|
|
}
|
|
var newTypes = [];
|
|
var newTexts = [];
|
|
var text = texts[0];
|
|
if (!addSpans(texts, types)) {
|
|
return stringType;
|
|
}
|
|
if (newTypes.length === 0) {
|
|
return getStringLiteralType(text);
|
|
}
|
|
newTexts.push(text);
|
|
if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4); })) {
|
|
return stringType;
|
|
}
|
|
var id = "".concat(getTypeListId(newTypes), "|").concat(ts.map(newTexts, function (t) { return t.length; }).join(","), "|").concat(newTexts.join(""));
|
|
var type = templateLiteralTypes.get(id);
|
|
if (!type) {
|
|
templateLiteralTypes.set(id, type = createTemplateLiteralType(newTexts, newTypes));
|
|
}
|
|
return type;
|
|
function addSpans(texts, types) {
|
|
var isTextsArray = ts.isArray(texts);
|
|
for (var i = 0; i < types.length; i++) {
|
|
var t = types[i];
|
|
var addText = isTextsArray ? texts[i + 1] : texts;
|
|
if (t.flags & (2944 | 65536 | 32768)) {
|
|
text += getTemplateStringForType(t) || "";
|
|
text += addText;
|
|
if (!isTextsArray)
|
|
return true;
|
|
}
|
|
else if (t.flags & 134217728) {
|
|
text += t.texts[0];
|
|
if (!addSpans(t.texts, t.types))
|
|
return false;
|
|
text += addText;
|
|
if (!isTextsArray)
|
|
return true;
|
|
}
|
|
else if (isGenericIndexType(t) || isPatternLiteralPlaceholderType(t)) {
|
|
newTypes.push(t);
|
|
newTexts.push(text);
|
|
text = addText;
|
|
}
|
|
else if (t.flags & 2097152) {
|
|
var added = addSpans(texts[i + 1], t.types);
|
|
if (!added)
|
|
return false;
|
|
}
|
|
else if (isTextsArray) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
function getTemplateStringForType(type) {
|
|
return type.flags & 128 ? type.value :
|
|
type.flags & 256 ? "" + type.value :
|
|
type.flags & 2048 ? ts.pseudoBigIntToString(type.value) :
|
|
type.flags & (512 | 98304) ? type.intrinsicName :
|
|
undefined;
|
|
}
|
|
function createTemplateLiteralType(texts, types) {
|
|
var type = createType(134217728);
|
|
type.texts = texts;
|
|
type.types = types;
|
|
return type;
|
|
}
|
|
function getStringMappingType(symbol, type) {
|
|
return type.flags & (1048576 | 131072) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
|
|
type.flags & 268435456 && symbol === type.symbol ? type :
|
|
isGenericIndexType(type) || isPatternLiteralPlaceholderType(type) ? getStringMappingTypeForGenericType(symbol, isPatternLiteralPlaceholderType(type) && !(type.flags & 268435456) ? getTemplateLiteralType(["", ""], [type]) : type) :
|
|
type.flags & 128 ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
|
|
type.flags & 134217728 ? getTemplateLiteralType.apply(void 0, applyTemplateStringMapping(symbol, type.texts, type.types)) :
|
|
type;
|
|
}
|
|
function applyStringMapping(symbol, str) {
|
|
switch (intrinsicTypeKinds.get(symbol.escapedName)) {
|
|
case 0: return str.toUpperCase();
|
|
case 1: return str.toLowerCase();
|
|
case 2: return str.charAt(0).toUpperCase() + str.slice(1);
|
|
case 3: return str.charAt(0).toLowerCase() + str.slice(1);
|
|
}
|
|
return str;
|
|
}
|
|
function applyTemplateStringMapping(symbol, texts, types) {
|
|
switch (intrinsicTypeKinds.get(symbol.escapedName)) {
|
|
case 0: return [texts.map(function (t) { return t.toUpperCase(); }), types.map(function (t) { return getStringMappingType(symbol, t); })];
|
|
case 1: return [texts.map(function (t) { return t.toLowerCase(); }), types.map(function (t) { return getStringMappingType(symbol, t); })];
|
|
case 2: return [texts[0] === "" ? texts : __spreadArray([texts[0].charAt(0).toUpperCase() + texts[0].slice(1)], texts.slice(1), true), texts[0] === "" ? __spreadArray([getStringMappingType(symbol, types[0])], types.slice(1), true) : types];
|
|
case 3: return [texts[0] === "" ? texts : __spreadArray([texts[0].charAt(0).toLowerCase() + texts[0].slice(1)], texts.slice(1), true), texts[0] === "" ? __spreadArray([getStringMappingType(symbol, types[0])], types.slice(1), true) : types];
|
|
}
|
|
return [texts, types];
|
|
}
|
|
function getStringMappingTypeForGenericType(symbol, type) {
|
|
var id = "".concat(getSymbolId(symbol), ",").concat(getTypeId(type));
|
|
var result = stringMappingTypes.get(id);
|
|
if (!result) {
|
|
stringMappingTypes.set(id, result = createStringMappingType(symbol, type));
|
|
}
|
|
return result;
|
|
}
|
|
function createStringMappingType(symbol, type) {
|
|
var result = createType(268435456);
|
|
result.symbol = symbol;
|
|
result.type = type;
|
|
return result;
|
|
}
|
|
function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
|
|
var type = createType(8388608);
|
|
type.objectType = objectType;
|
|
type.indexType = indexType;
|
|
type.accessFlags = accessFlags;
|
|
type.aliasSymbol = aliasSymbol;
|
|
type.aliasTypeArguments = aliasTypeArguments;
|
|
return type;
|
|
}
|
|
function isJSLiteralType(type) {
|
|
if (noImplicitAny) {
|
|
return false;
|
|
}
|
|
if (ts.getObjectFlags(type) & 4096) {
|
|
return true;
|
|
}
|
|
if (type.flags & 1048576) {
|
|
return ts.every(type.types, isJSLiteralType);
|
|
}
|
|
if (type.flags & 2097152) {
|
|
return ts.some(type.types, isJSLiteralType);
|
|
}
|
|
if (type.flags & 465829888) {
|
|
var constraint = getResolvedBaseConstraint(type);
|
|
return constraint !== type && isJSLiteralType(constraint);
|
|
}
|
|
return false;
|
|
}
|
|
function getPropertyNameFromIndex(indexType, accessNode) {
|
|
return isTypeUsableAsPropertyName(indexType) ?
|
|
getPropertyNameFromType(indexType) :
|
|
accessNode && ts.isPropertyName(accessNode) ?
|
|
ts.getPropertyNameForPropertyNameNode(accessNode) :
|
|
undefined;
|
|
}
|
|
function isUncalledFunctionReference(node, symbol) {
|
|
if (symbol.flags & (16 | 8192)) {
|
|
var parent = ts.findAncestor(node.parent, function (n) { return !ts.isAccessExpression(n); }) || node.parent;
|
|
if (ts.isCallLikeExpression(parent)) {
|
|
return ts.isCallOrNewExpression(parent) && ts.isIdentifier(node) && hasMatchingArgument(parent, node);
|
|
}
|
|
return ts.every(symbol.declarations, function (d) { return !ts.isFunctionLike(d) || !!(ts.getCombinedNodeFlags(d) & 268435456); });
|
|
}
|
|
return true;
|
|
}
|
|
function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
|
|
var _a;
|
|
var accessExpression = accessNode && accessNode.kind === 207 ? accessNode : undefined;
|
|
var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
|
|
if (propName !== undefined) {
|
|
if (accessFlags & 256) {
|
|
return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
|
|
}
|
|
var prop = getPropertyOfType(objectType, propName);
|
|
if (prop) {
|
|
if (accessFlags & 64 && accessNode && prop.declarations && isDeprecatedSymbol(prop) && isUncalledFunctionReference(accessNode, prop)) {
|
|
var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
|
|
addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
|
|
}
|
|
if (accessExpression) {
|
|
markPropertyAsReferenced(prop, accessExpression, isSelfTypeAccess(accessExpression.expression, objectType.symbol));
|
|
if (isAssignmentToReadonlyEntity(accessExpression, prop, ts.getAssignmentTargetKind(accessExpression))) {
|
|
error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
|
|
return undefined;
|
|
}
|
|
if (accessFlags & 8) {
|
|
getNodeLinks(accessNode).resolvedSymbol = prop;
|
|
}
|
|
if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
|
|
return autoType;
|
|
}
|
|
}
|
|
var propType = getTypeOfSymbol(prop);
|
|
return accessExpression && ts.getAssignmentTargetKind(accessExpression) !== 1 ?
|
|
getFlowTypeOfReference(accessExpression, propType) :
|
|
propType;
|
|
}
|
|
if (everyType(objectType, isTupleType) && ts.isNumericLiteralName(propName)) {
|
|
var index = +propName;
|
|
if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16)) {
|
|
var indexNode = getIndexNodeForAccessExpression(accessNode);
|
|
if (isTupleType(objectType)) {
|
|
if (index < 0) {
|
|
error(indexNode, ts.Diagnostics.A_tuple_type_cannot_be_indexed_with_a_negative_value);
|
|
return undefinedType;
|
|
}
|
|
error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
|
|
}
|
|
else {
|
|
error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
|
|
}
|
|
}
|
|
if (index >= 0) {
|
|
errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
|
|
return mapType(objectType, function (t) {
|
|
var restType = getRestTypeOfTupleType(t) || undefinedType;
|
|
return accessFlags & 1 ? getUnionType([restType, undefinedType]) : restType;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (!(indexType.flags & 98304) && isTypeAssignableToKind(indexType, 402653316 | 296 | 12288)) {
|
|
if (objectType.flags & (1 | 131072)) {
|
|
return objectType;
|
|
}
|
|
var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
|
|
if (indexInfo) {
|
|
if (accessFlags & 2 && indexInfo.keyType !== numberType) {
|
|
if (accessExpression) {
|
|
error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
|
|
}
|
|
return undefined;
|
|
}
|
|
if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 | 8)) {
|
|
var indexNode = getIndexNodeForAccessExpression(accessNode);
|
|
error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
|
|
return accessFlags & 1 ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
|
|
}
|
|
errorIfWritingToReadonlyIndex(indexInfo);
|
|
return accessFlags & 1 ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
|
|
}
|
|
if (indexType.flags & 131072) {
|
|
return neverType;
|
|
}
|
|
if (isJSLiteralType(objectType)) {
|
|
return anyType;
|
|
}
|
|
if (accessExpression && !isConstEnumObjectType(objectType)) {
|
|
if (isObjectLiteralType(objectType)) {
|
|
if (noImplicitAny && indexType.flags & (128 | 256)) {
|
|
diagnostics.add(ts.createDiagnosticForNode(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, indexType.value, typeToString(objectType)));
|
|
return undefinedType;
|
|
}
|
|
else if (indexType.flags & (8 | 4)) {
|
|
var types = ts.map(objectType.properties, function (property) {
|
|
return getTypeOfSymbol(property);
|
|
});
|
|
return getUnionType(ts.append(types, undefinedType));
|
|
}
|
|
}
|
|
if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418)) {
|
|
error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
|
|
}
|
|
else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128)) {
|
|
if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
|
|
var typeName = typeToString(objectType);
|
|
error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
|
|
}
|
|
else if (getIndexTypeOfType(objectType, numberType)) {
|
|
error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
|
|
}
|
|
else {
|
|
var suggestion = void 0;
|
|
if (propName !== undefined && (suggestion = getSuggestionForNonexistentProperty(propName, objectType))) {
|
|
if (suggestion !== undefined) {
|
|
error(accessExpression.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, propName, typeToString(objectType), suggestion);
|
|
}
|
|
}
|
|
else {
|
|
var suggestion_1 = getSuggestionForNonexistentIndexSignature(objectType, accessExpression, indexType);
|
|
if (suggestion_1 !== undefined) {
|
|
error(accessExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1, typeToString(objectType), suggestion_1);
|
|
}
|
|
else {
|
|
var errorInfo = void 0;
|
|
if (indexType.flags & 1024) {
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_does_not_exist_on_type_1, "[" + typeToString(indexType) + "]", typeToString(objectType));
|
|
}
|
|
else if (indexType.flags & 8192) {
|
|
var symbolName_2 = getFullyQualifiedName(indexType.symbol, accessExpression);
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_does_not_exist_on_type_1, "[" + symbolName_2 + "]", typeToString(objectType));
|
|
}
|
|
else if (indexType.flags & 128) {
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_does_not_exist_on_type_1, indexType.value, typeToString(objectType));
|
|
}
|
|
else if (indexType.flags & 256) {
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_does_not_exist_on_type_1, indexType.value, typeToString(objectType));
|
|
}
|
|
else if (indexType.flags & (8 | 4)) {
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1, typeToString(indexType), typeToString(objectType));
|
|
}
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1, typeToString(fullIndexType), typeToString(objectType));
|
|
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(accessExpression, errorInfo));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
if (isJSLiteralType(objectType)) {
|
|
return anyType;
|
|
}
|
|
if (accessNode) {
|
|
var indexNode = getIndexNodeForAccessExpression(accessNode);
|
|
if (indexType.flags & (128 | 256)) {
|
|
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));
|
|
}
|
|
}
|
|
if (isTypeAny(indexType)) {
|
|
return indexType;
|
|
}
|
|
return undefined;
|
|
function errorIfWritingToReadonlyIndex(indexInfo) {
|
|
if (indexInfo && indexInfo.isReadonly && accessExpression && (ts.isAssignmentTarget(accessExpression) || ts.isDeleteTarget(accessExpression))) {
|
|
error(accessExpression, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
|
|
}
|
|
}
|
|
}
|
|
function getIndexNodeForAccessExpression(accessNode) {
|
|
return accessNode.kind === 207 ? accessNode.argumentExpression :
|
|
accessNode.kind === 194 ? accessNode.indexType :
|
|
accessNode.kind === 162 ? accessNode.expression :
|
|
accessNode;
|
|
}
|
|
function isPatternLiteralPlaceholderType(type) {
|
|
return !!(type.flags & (1 | 4 | 8 | 64)) || !!(type.flags & 268435456 && isPatternLiteralPlaceholderType(type.type));
|
|
}
|
|
function isPatternLiteralType(type) {
|
|
return !!(type.flags & 134217728) && ts.every(type.types, isPatternLiteralPlaceholderType);
|
|
}
|
|
function isGenericType(type) {
|
|
return !!getGenericObjectFlags(type);
|
|
}
|
|
function isGenericObjectType(type) {
|
|
return !!(getGenericObjectFlags(type) & 4194304);
|
|
}
|
|
function isGenericIndexType(type) {
|
|
return !!(getGenericObjectFlags(type) & 8388608);
|
|
}
|
|
function getGenericObjectFlags(type) {
|
|
if (type.flags & 3145728) {
|
|
if (!(type.objectFlags & 2097152)) {
|
|
type.objectFlags |= 2097152 |
|
|
ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
|
|
}
|
|
return type.objectFlags & 12582912;
|
|
}
|
|
if (type.flags & 33554432) {
|
|
if (!(type.objectFlags & 2097152)) {
|
|
type.objectFlags |= 2097152 |
|
|
getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
|
|
}
|
|
return type.objectFlags & 12582912;
|
|
}
|
|
return (type.flags & 58982400 || isGenericMappedType(type) || isGenericTupleType(type) ? 4194304 : 0) |
|
|
(type.flags & (58982400 | 4194304 | 134217728 | 268435456) && !isPatternLiteralType(type) ? 8388608 : 0);
|
|
}
|
|
function getSimplifiedType(type, writing) {
|
|
return type.flags & 8388608 ? getSimplifiedIndexedAccessType(type, writing) :
|
|
type.flags & 16777216 ? getSimplifiedConditionalType(type, writing) :
|
|
type;
|
|
}
|
|
function distributeIndexOverObjectType(objectType, indexType, writing) {
|
|
if (objectType.flags & 3145728) {
|
|
var types = ts.map(objectType.types, function (t) { return getSimplifiedType(getIndexedAccessType(t, indexType), writing); });
|
|
return objectType.flags & 2097152 || writing ? getIntersectionType(types) : getUnionType(types);
|
|
}
|
|
}
|
|
function distributeObjectOverIndexType(objectType, indexType, writing) {
|
|
if (indexType.flags & 1048576) {
|
|
var types = ts.map(indexType.types, function (t) { return getSimplifiedType(getIndexedAccessType(objectType, t), writing); });
|
|
return writing ? getIntersectionType(types) : getUnionType(types);
|
|
}
|
|
}
|
|
function getSimplifiedIndexedAccessType(type, writing) {
|
|
var cache = writing ? "simplifiedForWriting" : "simplifiedForReading";
|
|
if (type[cache]) {
|
|
return type[cache] === circularConstraintType ? type : type[cache];
|
|
}
|
|
type[cache] = circularConstraintType;
|
|
var objectType = getSimplifiedType(type.objectType, writing);
|
|
var indexType = getSimplifiedType(type.indexType, writing);
|
|
var distributedOverIndex = distributeObjectOverIndexType(objectType, indexType, writing);
|
|
if (distributedOverIndex) {
|
|
return type[cache] = distributedOverIndex;
|
|
}
|
|
if (!(indexType.flags & 465829888)) {
|
|
var distributedOverObject = distributeIndexOverObjectType(objectType, indexType, writing);
|
|
if (distributedOverObject) {
|
|
return type[cache] = distributedOverObject;
|
|
}
|
|
}
|
|
if (isGenericTupleType(objectType) && indexType.flags & 296) {
|
|
var elementType = getElementTypeOfSliceOfTupleType(objectType, indexType.flags & 8 ? 0 : objectType.target.fixedLength, 0, writing);
|
|
if (elementType) {
|
|
return type[cache] = elementType;
|
|
}
|
|
}
|
|
if (isGenericMappedType(objectType)) {
|
|
var nameType = getNameTypeFromMappedType(objectType);
|
|
if (!nameType || isTypeAssignableTo(nameType, getTypeParameterFromMappedType(objectType))) {
|
|
return type[cache] = mapType(substituteIndexedMappedType(objectType, type.indexType), function (t) { return getSimplifiedType(t, writing); });
|
|
}
|
|
}
|
|
return type[cache] = type;
|
|
}
|
|
function getSimplifiedConditionalType(type, writing) {
|
|
var checkType = type.checkType;
|
|
var extendsType = type.extendsType;
|
|
var trueType = getTrueTypeFromConditionalType(type);
|
|
var falseType = getFalseTypeFromConditionalType(type);
|
|
if (falseType.flags & 131072 && getActualTypeVariable(trueType) === getActualTypeVariable(checkType)) {
|
|
if (checkType.flags & 1 || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) {
|
|
return getSimplifiedType(trueType, writing);
|
|
}
|
|
else if (isIntersectionEmpty(checkType, extendsType)) {
|
|
return neverType;
|
|
}
|
|
}
|
|
else if (trueType.flags & 131072 && getActualTypeVariable(falseType) === getActualTypeVariable(checkType)) {
|
|
if (!(checkType.flags & 1) && isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) {
|
|
return neverType;
|
|
}
|
|
else if (checkType.flags & 1 || isIntersectionEmpty(checkType, extendsType)) {
|
|
return getSimplifiedType(falseType, writing);
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function isIntersectionEmpty(type1, type2) {
|
|
return !!(getUnionType([intersectTypes(type1, type2), neverType]).flags & 131072);
|
|
}
|
|
function substituteIndexedMappedType(objectType, index) {
|
|
var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]);
|
|
var templateMapper = combineTypeMappers(objectType.mapper, mapper);
|
|
return instantiateType(getTemplateTypeFromMappedType(objectType.target || objectType), templateMapper);
|
|
}
|
|
function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
|
|
if (accessFlags === void 0) { accessFlags = 0; }
|
|
return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
|
|
}
|
|
function indexTypeLessThan(indexType, limit) {
|
|
return everyType(indexType, function (t) {
|
|
if (t.flags & 384) {
|
|
var propName = getPropertyNameFromType(t);
|
|
if (ts.isNumericLiteralName(propName)) {
|
|
var index = +propName;
|
|
return index >= 0 && index < limit;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
|
|
if (accessFlags === void 0) { accessFlags = 0; }
|
|
if (objectType === wildcardType || indexType === wildcardType) {
|
|
return wildcardType;
|
|
}
|
|
if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304) && isTypeAssignableToKind(indexType, 4 | 8)) {
|
|
indexType = stringType;
|
|
}
|
|
if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32)
|
|
accessFlags |= 1;
|
|
if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 194 ?
|
|
isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
|
|
isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
|
|
if (objectType.flags & 3) {
|
|
return objectType;
|
|
}
|
|
var persistentAccessFlags = accessFlags & 1;
|
|
var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
var type = indexedAccessTypes.get(id);
|
|
if (!type) {
|
|
indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
|
|
}
|
|
return type;
|
|
}
|
|
var apparentObjectType = getReducedApparentType(objectType);
|
|
if (indexType.flags & 1048576 && !(indexType.flags & 16)) {
|
|
var propTypes = [];
|
|
var wasMissingProp = false;
|
|
for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
|
|
var t = _a[_i];
|
|
var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 : 0));
|
|
if (propType) {
|
|
propTypes.push(propType);
|
|
}
|
|
else if (!accessNode) {
|
|
return undefined;
|
|
}
|
|
else {
|
|
wasMissingProp = true;
|
|
}
|
|
}
|
|
if (wasMissingProp) {
|
|
return undefined;
|
|
}
|
|
return accessFlags & 4
|
|
? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
|
|
: getUnionType(propTypes, 1, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 | 64);
|
|
}
|
|
function getTypeFromIndexedAccessTypeNode(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
var objectType = getTypeFromTypeNode(node.objectType);
|
|
var indexType = getTypeFromTypeNode(node.indexType);
|
|
var potentialAlias = getAliasSymbolForTypeNode(node);
|
|
var resolved = getIndexedAccessType(objectType, indexType, 0, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
|
|
links.resolvedType = resolved.flags & 8388608 &&
|
|
resolved.objectType === objectType &&
|
|
resolved.indexType === indexType ?
|
|
getConditionalFlowTypeOfType(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) {
|
|
if (type.flags & 33554432) {
|
|
return type.baseType;
|
|
}
|
|
if (type.flags & 8388608 && (type.objectType.flags & 33554432 ||
|
|
type.indexType.flags & 33554432)) {
|
|
return getIndexedAccessType(getActualTypeVariable(type.objectType), getActualTypeVariable(type.indexType));
|
|
}
|
|
return type;
|
|
}
|
|
function maybeCloneTypeParameter(p) {
|
|
var constraint = getConstraintOfTypeParameter(p);
|
|
return constraint && (isGenericObjectType(constraint) || isGenericIndexType(constraint)) ? cloneTypeParameter(p) : p;
|
|
}
|
|
function isTypicalNondistributiveConditional(root) {
|
|
return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
|
|
}
|
|
function isSingletonTupleType(node) {
|
|
return ts.isTupleTypeNode(node) &&
|
|
ts.length(node.elements) === 1 &&
|
|
!ts.isOptionalTypeNode(node.elements[0]) &&
|
|
!ts.isRestTypeNode(node.elements[0]) &&
|
|
!(ts.isNamedTupleMember(node.elements[0]) && (node.elements[0].questionToken || node.elements[0].dotDotDotToken));
|
|
}
|
|
function unwrapNondistributiveConditionalTuple(root, type) {
|
|
return isTypicalNondistributiveConditional(root) && isTupleType(type) ? getTypeArguments(type)[0] : type;
|
|
}
|
|
function getConditionalType(root, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var result;
|
|
var extraTypes;
|
|
var tailCount = 0;
|
|
var _loop_19 = function () {
|
|
if (tailCount === 1000) {
|
|
error(currentNode, ts.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite);
|
|
result = errorType;
|
|
return "break";
|
|
}
|
|
var isUnwrapped = isTypicalNondistributiveConditional(root);
|
|
var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
|
|
var checkTypeInstantiable = isGenericType(checkType);
|
|
var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
|
|
if (checkType === wildcardType || extendsType === wildcardType) {
|
|
return { value: wildcardType };
|
|
}
|
|
var combinedMapper = void 0;
|
|
if (root.inferTypeParameters) {
|
|
var freshParams = ts.sameMap(root.inferTypeParameters, maybeCloneTypeParameter);
|
|
var freshMapper = freshParams !== root.inferTypeParameters ? createTypeMapper(root.inferTypeParameters, freshParams) : undefined;
|
|
var context = createInferenceContext(freshParams, undefined, 0);
|
|
if (freshMapper) {
|
|
var freshCombinedMapper = combineTypeMappers(mapper, freshMapper);
|
|
for (var _i = 0, freshParams_1 = freshParams; _i < freshParams_1.length; _i++) {
|
|
var p = freshParams_1[_i];
|
|
if (root.inferTypeParameters.indexOf(p) === -1) {
|
|
p.mapper = freshCombinedMapper;
|
|
}
|
|
}
|
|
}
|
|
if (!checkTypeInstantiable || !ts.some(root.inferTypeParameters, function (t) { return t === extendsType; })) {
|
|
inferTypes(context.inferences, checkType, instantiateType(extendsType, freshMapper), 512 | 1024);
|
|
}
|
|
var innerMapper = combineTypeMappers(freshMapper, context.mapper);
|
|
combinedMapper = mapper ? combineTypeMappers(innerMapper, mapper) : innerMapper;
|
|
}
|
|
var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
|
|
if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
|
|
if (!(inferredExtendsType.flags & 3) && ((checkType.flags & 1 && !isUnwrapped) || !isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType)))) {
|
|
if (checkType.flags & 1 && !isUnwrapped) {
|
|
(extraTypes || (extraTypes = [])).push(instantiateType(getTypeFromTypeNode(root.node.trueType), combinedMapper || mapper));
|
|
}
|
|
var falseType_1 = getTypeFromTypeNode(root.node.falseType);
|
|
if (falseType_1.flags & 16777216) {
|
|
var newRoot = falseType_1.root;
|
|
if (newRoot.node.parent === root.node && (!newRoot.isDistributive || newRoot.checkType === root.checkType)) {
|
|
root = newRoot;
|
|
return "continue";
|
|
}
|
|
if (canTailRecurse(falseType_1, mapper)) {
|
|
return "continue";
|
|
}
|
|
}
|
|
result = instantiateType(falseType_1, mapper);
|
|
return "break";
|
|
}
|
|
if (inferredExtendsType.flags & 3 || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(inferredExtendsType))) {
|
|
var trueType_1 = getTypeFromTypeNode(root.node.trueType);
|
|
var trueMapper = combinedMapper || mapper;
|
|
if (canTailRecurse(trueType_1, trueMapper)) {
|
|
return "continue";
|
|
}
|
|
result = instantiateType(trueType_1, trueMapper);
|
|
return "break";
|
|
}
|
|
}
|
|
result = createType(16777216);
|
|
result.root = root;
|
|
result.checkType = instantiateType(root.checkType, mapper);
|
|
result.extendsType = instantiateType(root.extendsType, mapper);
|
|
result.mapper = mapper;
|
|
result.combinedMapper = combinedMapper;
|
|
result.aliasSymbol = aliasSymbol || root.aliasSymbol;
|
|
result.aliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(root.aliasTypeArguments, mapper);
|
|
return "break";
|
|
};
|
|
while (true) {
|
|
var state_5 = _loop_19();
|
|
if (typeof state_5 === "object")
|
|
return state_5.value;
|
|
if (state_5 === "break")
|
|
break;
|
|
}
|
|
return extraTypes ? getUnionType(ts.append(extraTypes, result)) : result;
|
|
function canTailRecurse(newType, newMapper) {
|
|
if (newType.flags & 16777216 && newMapper) {
|
|
var newRoot = newType.root;
|
|
if (newRoot.outerTypeParameters) {
|
|
var typeParamMapper_1 = combineTypeMappers(newType.mapper, newMapper);
|
|
var typeArguments = ts.map(newRoot.outerTypeParameters, function (t) { return getMappedType(t, typeParamMapper_1); });
|
|
var newRootMapper = createTypeMapper(newRoot.outerTypeParameters, typeArguments);
|
|
var newCheckType = newRoot.isDistributive ? getMappedType(newRoot.checkType, newRootMapper) : undefined;
|
|
if (!newCheckType || newCheckType === newRoot.checkType || !(newCheckType.flags & (1048576 | 131072))) {
|
|
root = newRoot;
|
|
mapper = newRootMapper;
|
|
aliasSymbol = undefined;
|
|
aliasTypeArguments = undefined;
|
|
if (newRoot.aliasSymbol) {
|
|
tailCount++;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
function getTrueTypeFromConditionalType(type) {
|
|
return type.resolvedTrueType || (type.resolvedTrueType = instantiateType(getTypeFromTypeNode(type.root.node.trueType), type.mapper));
|
|
}
|
|
function getFalseTypeFromConditionalType(type) {
|
|
return type.resolvedFalseType || (type.resolvedFalseType = instantiateType(getTypeFromTypeNode(type.root.node.falseType), type.mapper));
|
|
}
|
|
function getInferredTrueTypeFromConditionalType(type) {
|
|
return type.resolvedInferredTrueType || (type.resolvedInferredTrueType = type.combinedMapper ? instantiateType(getTypeFromTypeNode(type.root.node.trueType), type.combinedMapper) : getTrueTypeFromConditionalType(type));
|
|
}
|
|
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 isDistributionDependent(root) {
|
|
return root.isDistributive && (isTypeParameterPossiblyReferenced(root.checkType, root.node.trueType) ||
|
|
isTypeParameterPossiblyReferenced(root.checkType, root.node.falseType));
|
|
}
|
|
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 isTypeParameterPossiblyReferenced(tp, node); });
|
|
var root = {
|
|
node: node,
|
|
checkType: checkType,
|
|
extendsType: getTypeFromTypeNode(node.extendsType),
|
|
isDistributive: !!(checkType.flags & 262144),
|
|
inferTypeParameters: getInferTypeParameters(node),
|
|
outerTypeParameters: outerTypeParameters,
|
|
instantiations: undefined,
|
|
aliasSymbol: aliasSymbol,
|
|
aliasTypeArguments: aliasTypeArguments
|
|
};
|
|
links.resolvedType = getConditionalType(root, undefined);
|
|
if (outerTypeParameters) {
|
|
root.instantiations = new ts.Map();
|
|
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 _a;
|
|
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 targetMeaning = node.isTypeOf ? 111551 : node.flags & 8388608 ? 111551 | 788968 : 788968;
|
|
var innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal);
|
|
if (!innerModuleSymbol) {
|
|
links.resolvedSymbol = unknownSymbol;
|
|
return links.resolvedType = errorType;
|
|
}
|
|
var isExportEquals = !!((_a = innerModuleSymbol.exports) === null || _a === void 0 ? void 0 : _a.get("export="));
|
|
var moduleSymbol = resolveExternalModuleSymbol(innerModuleSymbol, false);
|
|
if (!ts.nodeIsMissing(node.qualifier)) {
|
|
var nameStack = getIdentifierChain(node.qualifier);
|
|
var currentNamespace = moduleSymbol;
|
|
var current = void 0;
|
|
while (current = nameStack.shift()) {
|
|
var meaning = nameStack.length ? 1920 : targetMeaning;
|
|
var mergedResolvedSymbol = getMergedSymbol(resolveSymbol(currentNamespace));
|
|
var symbolFromVariable = node.isTypeOf || ts.isInJSFile(node) && isExportEquals
|
|
? getPropertyOfType(getTypeOfSymbol(mergedResolvedSymbol), current.escapedText, false, true)
|
|
: undefined;
|
|
var symbolFromModule = node.isTypeOf ? undefined : getSymbol(getExportsOfSymbol(mergedResolvedSymbol), current.escapedText, meaning);
|
|
var next = symbolFromModule !== null && symbolFromModule !== void 0 ? symbolFromModule : symbolFromVariable;
|
|
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;
|
|
}
|
|
links.resolvedType = resolveImportSymbolType(node, links, currentNamespace, targetMeaning);
|
|
}
|
|
else {
|
|
if (moduleSymbol.flags & targetMeaning) {
|
|
links.resolvedType = resolveImportSymbolType(node, links, moduleSymbol, targetMeaning);
|
|
}
|
|
else {
|
|
var errorMessage = targetMeaning === 111551
|
|
? 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_Did_you_mean_typeof_import_0;
|
|
error(node, errorMessage, node.argument.literal.text);
|
|
links.resolvedSymbol = unknownSymbol;
|
|
links.resolvedType = errorType;
|
|
}
|
|
}
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function resolveImportSymbolType(node, links, symbol, meaning) {
|
|
var resolvedSymbol = resolveSymbol(symbol);
|
|
links.resolvedSymbol = resolvedSymbol;
|
|
if (meaning === 111551) {
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
else {
|
|
return 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) {
|
|
var host = node.parent;
|
|
while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 145) {
|
|
host = host.parent;
|
|
}
|
|
return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
|
|
}
|
|
function getTypeArgumentsForAliasSymbol(symbol) {
|
|
return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : undefined;
|
|
}
|
|
function isNonGenericObjectType(type) {
|
|
return !!(type.flags & 524288) && !isGenericMappedType(type);
|
|
}
|
|
function isEmptyObjectTypeOrSpreadsIntoEmptyObject(type) {
|
|
return isEmptyObjectType(type) || !!(type.flags & (65536 | 32768 | 528 | 296 | 2112 | 402653316 | 1056 | 67108864 | 4194304));
|
|
}
|
|
function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
|
|
if (!(type.flags & 1048576)) {
|
|
return type;
|
|
}
|
|
if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
|
|
return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
|
|
}
|
|
var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
|
|
if (!firstType) {
|
|
return type;
|
|
}
|
|
var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
|
|
if (secondType) {
|
|
return type;
|
|
}
|
|
return getAnonymousPartialType(firstType);
|
|
function getAnonymousPartialType(type) {
|
|
var members = ts.createSymbolTable();
|
|
for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
if (ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 | 16)) {
|
|
}
|
|
else if (isSpreadableProperty(prop)) {
|
|
var isSetonlyAccessor = prop.flags & 65536 && !(prop.flags & 32768);
|
|
var flags = 4 | 16777216;
|
|
var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 : 0));
|
|
result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), true);
|
|
result.declarations = prop.declarations;
|
|
result.nameType = getSymbolLinks(prop).nameType;
|
|
result.syntheticOrigin = prop;
|
|
members.set(prop.escapedName, result);
|
|
}
|
|
}
|
|
var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
|
|
spread.objectFlags |= 128 | 131072;
|
|
return spread;
|
|
}
|
|
}
|
|
function getSpreadType(left, right, symbol, objectFlags, readonly) {
|
|
if (left.flags & 1 || right.flags & 1) {
|
|
return anyType;
|
|
}
|
|
if (left.flags & 2 || right.flags & 2) {
|
|
return unknownType;
|
|
}
|
|
if (left.flags & 131072) {
|
|
return right;
|
|
}
|
|
if (right.flags & 131072) {
|
|
return left;
|
|
}
|
|
left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
|
|
if (left.flags & 1048576) {
|
|
return checkCrossProductUnion([left, right])
|
|
? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
|
|
: errorType;
|
|
}
|
|
right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
|
|
if (right.flags & 1048576) {
|
|
return checkCrossProductUnion([left, right])
|
|
? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
|
|
: errorType;
|
|
}
|
|
if (right.flags & (528 | 296 | 2112 | 402653316 | 1056 | 67108864 | 4194304)) {
|
|
return left;
|
|
}
|
|
if (isGenericObjectType(left) || isGenericObjectType(right)) {
|
|
if (isEmptyObjectType(left)) {
|
|
return right;
|
|
}
|
|
if (left.flags & 2097152) {
|
|
var types = left.types;
|
|
var lastLeft = types[types.length - 1];
|
|
if (isNonGenericObjectType(lastLeft) && isNonGenericObjectType(right)) {
|
|
return getIntersectionType(ts.concatenate(types.slice(0, types.length - 1), [getSpreadType(lastLeft, right, symbol, objectFlags, readonly)]));
|
|
}
|
|
}
|
|
return getIntersectionType([left, right]);
|
|
}
|
|
var members = ts.createSymbolTable();
|
|
var skippedPrivateMembers = new ts.Set();
|
|
var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
|
|
for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
|
|
var rightProp = _a[_i];
|
|
if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 | 16)) {
|
|
skippedPrivateMembers.add(rightProp.escapedName);
|
|
}
|
|
else if (isSpreadableProperty(rightProp)) {
|
|
members.set(rightProp.escapedName, getSpreadSymbol(rightProp, readonly));
|
|
}
|
|
}
|
|
for (var _b = 0, _c = getPropertiesOfType(left); _b < _c.length; _b++) {
|
|
var leftProp = _c[_b];
|
|
if (skippedPrivateMembers.has(leftProp.escapedName) || !isSpreadableProperty(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), removeMissingOrUndefinedType(rightType)], 2);
|
|
result.leftSpread = leftProp;
|
|
result.rightSpread = rightProp;
|
|
result.declarations = declarations;
|
|
result.nameType = getSymbolLinks(leftProp).nameType;
|
|
members.set(leftProp.escapedName, result);
|
|
}
|
|
}
|
|
else {
|
|
members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
|
|
}
|
|
}
|
|
var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
|
|
spread.objectFlags |= 128 | 131072 | 2097152 | objectFlags;
|
|
return spread;
|
|
}
|
|
function isSpreadableProperty(prop) {
|
|
var _a;
|
|
return !ts.some(prop.declarations, ts.isPrivateIdentifierClassElementDeclaration) &&
|
|
(!(prop.flags & (8192 | 32768 | 65536)) ||
|
|
!((_a = prop.declarations) === null || _a === void 0 ? void 0 : _a.some(function (decl) { return ts.isClassLike(decl.parent); })));
|
|
}
|
|
function getSpreadSymbol(prop, readonly) {
|
|
var isSetonlyAccessor = prop.flags & 65536 && !(prop.flags & 32768);
|
|
if (!isSetonlyAccessor && readonly === isReadonlySymbol(prop)) {
|
|
return prop;
|
|
}
|
|
var flags = 4 | (prop.flags & 16777216);
|
|
var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 : 0));
|
|
result.type = isSetonlyAccessor ? undefinedType : getTypeOfSymbol(prop);
|
|
result.declarations = prop.declarations;
|
|
result.nameType = getSymbolLinks(prop).nameType;
|
|
result.syntheticOrigin = prop;
|
|
return result;
|
|
}
|
|
function getIndexInfoWithReadonly(info, readonly) {
|
|
return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
|
|
}
|
|
function createLiteralType(flags, value, symbol, regularType) {
|
|
var type = createType(flags);
|
|
type.symbol = symbol;
|
|
type.value = value;
|
|
type.regularType = regularType || type;
|
|
return type;
|
|
}
|
|
function getFreshTypeOfLiteralType(type) {
|
|
if (type.flags & 2944) {
|
|
if (!type.freshType) {
|
|
var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
|
|
freshType.freshType = freshType;
|
|
type.freshType = freshType;
|
|
}
|
|
return type.freshType;
|
|
}
|
|
return type;
|
|
}
|
|
function getRegularTypeOfLiteralType(type) {
|
|
return type.flags & 2944 ? type.regularType :
|
|
type.flags & 1048576 ? (type.regularType || (type.regularType = mapType(type, getRegularTypeOfLiteralType))) :
|
|
type;
|
|
}
|
|
function isFreshLiteralType(type) {
|
|
return !!(type.flags & 2944) && type.freshType === type;
|
|
}
|
|
function getStringLiteralType(value) {
|
|
var type;
|
|
return stringLiteralTypes.get(value) ||
|
|
(stringLiteralTypes.set(value, type = createLiteralType(128, value)), type);
|
|
}
|
|
function getNumberLiteralType(value) {
|
|
var type;
|
|
return numberLiteralTypes.get(value) ||
|
|
(numberLiteralTypes.set(value, type = createLiteralType(256, value)), type);
|
|
}
|
|
function getBigIntLiteralType(value) {
|
|
var type;
|
|
var key = ts.pseudoBigIntToString(value);
|
|
return bigIntLiteralTypes.get(key) ||
|
|
(bigIntLiteralTypes.set(key, type = createLiteralType(2048, value)), type);
|
|
}
|
|
function getEnumLiteralType(value, enumId, symbol) {
|
|
var type;
|
|
var qualifier = typeof value === "string" ? "@" : "#";
|
|
var key = enumId + qualifier + value;
|
|
var flags = 1024 | (typeof value === "string" ? 128 : 256);
|
|
return enumLiteralTypes.get(key) ||
|
|
(enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
|
|
}
|
|
function getTypeFromLiteralTypeNode(node) {
|
|
if (node.literal.kind === 104) {
|
|
return nullType;
|
|
}
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
links.resolvedType = getRegularTypeOfLiteralType(checkExpression(node.literal));
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function createUniqueESSymbolType(symbol) {
|
|
var type = createType(8192);
|
|
type.symbol = symbol;
|
|
type.escapedName = "__@".concat(type.symbol.escapedName, "@").concat(getSymbolId(type.symbol));
|
|
return type;
|
|
}
|
|
function getESSymbolLikeTypeForNode(node) {
|
|
if (ts.isValidESSymbolDeclaration(node)) {
|
|
var symbol = ts.isCommonJsExportPropertyAssignment(node) ? getSymbolOfNode(node.left) : getSymbolOfNode(node);
|
|
if (symbol) {
|
|
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 === 258)) {
|
|
if (!ts.isStatic(container) &&
|
|
(!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
|
|
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
|
|
}
|
|
}
|
|
if (parent && ts.isObjectLiteralExpression(parent) && ts.isBinaryExpression(parent.parent) && ts.getAssignmentDeclarationKind(parent.parent) === 6) {
|
|
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent.parent.left).parent).thisType;
|
|
}
|
|
var host = node.flags & 8388608 ? ts.getHostSignatureFromJSDoc(node) : undefined;
|
|
if (host && ts.isFunctionExpression(host) && ts.isBinaryExpression(host.parent) && ts.getAssignmentDeclarationKind(host.parent) === 3) {
|
|
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(host.parent.left).parent).thisType;
|
|
}
|
|
if (isJSConstructor(container) && ts.isNodeDescendantOf(node, container.body)) {
|
|
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(container)).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 getTypeFromRestTypeNode(node) {
|
|
return getTypeFromTypeNode(getArrayElementTypeNode(node.type) || node.type);
|
|
}
|
|
function getArrayElementTypeNode(node) {
|
|
switch (node.kind) {
|
|
case 191:
|
|
return getArrayElementTypeNode(node.type);
|
|
case 184:
|
|
if (node.elements.length === 1) {
|
|
node = node.elements[0];
|
|
if (node.kind === 186 || node.kind === 197 && node.dotDotDotToken) {
|
|
return getArrayElementTypeNode(node.type);
|
|
}
|
|
}
|
|
break;
|
|
case 183:
|
|
return node.elementType;
|
|
}
|
|
return undefined;
|
|
}
|
|
function getTypeFromNamedTupleTypeNode(node) {
|
|
var links = getNodeLinks(node);
|
|
return links.resolvedType || (links.resolvedType =
|
|
node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
|
|
addOptionality(getTypeFromTypeNode(node.type), true, !!node.questionToken));
|
|
}
|
|
function getTypeFromTypeNode(node) {
|
|
return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
|
|
}
|
|
function getTypeFromTypeNodeWorker(node) {
|
|
switch (node.kind) {
|
|
case 130:
|
|
case 312:
|
|
case 313:
|
|
return anyType;
|
|
case 155:
|
|
return unknownType;
|
|
case 150:
|
|
return stringType;
|
|
case 147:
|
|
return numberType;
|
|
case 158:
|
|
return bigintType;
|
|
case 133:
|
|
return booleanType;
|
|
case 151:
|
|
return esSymbolType;
|
|
case 114:
|
|
return voidType;
|
|
case 153:
|
|
return undefinedType;
|
|
case 104:
|
|
return nullType;
|
|
case 143:
|
|
return neverType;
|
|
case 148:
|
|
return node.flags & 262144 && !noImplicitAny ? anyType : nonPrimitiveType;
|
|
case 138:
|
|
return intrinsicMarkerType;
|
|
case 192:
|
|
case 108:
|
|
return getTypeFromThisTypeNode(node);
|
|
case 196:
|
|
return getTypeFromLiteralTypeNode(node);
|
|
case 178:
|
|
return getTypeFromTypeReference(node);
|
|
case 177:
|
|
return node.assertsModifier ? voidType : booleanType;
|
|
case 228:
|
|
return getTypeFromTypeReference(node);
|
|
case 181:
|
|
return getTypeFromTypeQueryNode(node);
|
|
case 183:
|
|
case 184:
|
|
return getTypeFromArrayOrTupleTypeNode(node);
|
|
case 185:
|
|
return getTypeFromOptionalTypeNode(node);
|
|
case 187:
|
|
return getTypeFromUnionTypeNode(node);
|
|
case 188:
|
|
return getTypeFromIntersectionTypeNode(node);
|
|
case 314:
|
|
return getTypeFromJSDocNullableTypeNode(node);
|
|
case 316:
|
|
return addOptionality(getTypeFromTypeNode(node.type));
|
|
case 197:
|
|
return getTypeFromNamedTupleTypeNode(node);
|
|
case 191:
|
|
case 315:
|
|
case 309:
|
|
return getTypeFromTypeNode(node.type);
|
|
case 186:
|
|
return getTypeFromRestTypeNode(node);
|
|
case 318:
|
|
return getTypeFromJSDocVariadicType(node);
|
|
case 179:
|
|
case 180:
|
|
case 182:
|
|
case 322:
|
|
case 317:
|
|
case 323:
|
|
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
|
|
case 193:
|
|
return getTypeFromTypeOperatorNode(node);
|
|
case 194:
|
|
return getTypeFromIndexedAccessTypeNode(node);
|
|
case 195:
|
|
return getTypeFromMappedTypeNode(node);
|
|
case 189:
|
|
return getTypeFromConditionalTypeNode(node);
|
|
case 190:
|
|
return getTypeFromInferTypeNode(node);
|
|
case 198:
|
|
return getTypeFromTemplateTypeNode(node);
|
|
case 200:
|
|
return getTypeFromImportTypeNode(node);
|
|
case 79:
|
|
case 161:
|
|
case 206:
|
|
var symbol = getSymbolAtLocation(node);
|
|
return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
|
|
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 instantiateIndexInfos(indexInfos, mapper) {
|
|
return instantiateList(indexInfos, mapper, instantiateIndexInfo);
|
|
}
|
|
function createTypeMapper(sources, targets) {
|
|
return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
|
|
}
|
|
function getMappedType(type, mapper) {
|
|
switch (mapper.kind) {
|
|
case 0:
|
|
return type === mapper.source ? mapper.target : type;
|
|
case 1: {
|
|
var sources = mapper.sources;
|
|
var targets = mapper.targets;
|
|
for (var i = 0; i < sources.length; i++) {
|
|
if (type === sources[i]) {
|
|
return targets ? targets[i] : anyType;
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
case 2: {
|
|
var sources = mapper.sources;
|
|
var targets = mapper.targets;
|
|
for (var i = 0; i < sources.length; i++) {
|
|
if (type === sources[i]) {
|
|
return targets[i]();
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
case 3:
|
|
return mapper.func(type);
|
|
case 4:
|
|
case 5:
|
|
var t1 = getMappedType(type, mapper.mapper1);
|
|
return t1 !== type && mapper.kind === 4 ? instantiateType(t1, mapper.mapper2) : getMappedType(t1, mapper.mapper2);
|
|
}
|
|
}
|
|
function makeUnaryTypeMapper(source, target) {
|
|
return ts.Debug.attachDebugPrototypeIfDebug({ kind: 0, source: source, target: target });
|
|
}
|
|
function makeArrayTypeMapper(sources, targets) {
|
|
return ts.Debug.attachDebugPrototypeIfDebug({ kind: 1, sources: sources, targets: targets });
|
|
}
|
|
function makeFunctionTypeMapper(func, debugInfo) {
|
|
return ts.Debug.attachDebugPrototypeIfDebug({ kind: 3, func: func, debugInfo: ts.Debug.isDebugging ? debugInfo : undefined });
|
|
}
|
|
function makeDeferredTypeMapper(sources, targets) {
|
|
return ts.Debug.attachDebugPrototypeIfDebug({ kind: 2, sources: sources, targets: targets });
|
|
}
|
|
function makeCompositeTypeMapper(kind, mapper1, mapper2) {
|
|
return ts.Debug.attachDebugPrototypeIfDebug({ kind: kind, mapper1: mapper1, mapper2: mapper2 });
|
|
}
|
|
function createTypeEraser(sources) {
|
|
return createTypeMapper(sources, undefined);
|
|
}
|
|
function createBackreferenceMapper(context, index) {
|
|
var forwardInferences = context.inferences.slice(index);
|
|
return createTypeMapper(ts.map(forwardInferences, function (i) { return i.typeParameter; }), ts.map(forwardInferences, function () { return unknownType; }));
|
|
}
|
|
function combineTypeMappers(mapper1, mapper2) {
|
|
return mapper1 ? makeCompositeTypeMapper(4, mapper1, mapper2) : mapper2;
|
|
}
|
|
function mergeTypeMappers(mapper1, mapper2) {
|
|
return mapper1 ? makeCompositeTypeMapper(5, mapper1, mapper2) : mapper2;
|
|
}
|
|
function prependTypeMapping(source, target, mapper) {
|
|
return !mapper ? makeUnaryTypeMapper(source, target) : makeCompositeTypeMapper(5, makeUnaryTypeMapper(source, target), mapper);
|
|
}
|
|
function appendTypeMapping(mapper, source, target) {
|
|
return !mapper ? makeUnaryTypeMapper(source, target) : makeCompositeTypeMapper(5, mapper, makeUnaryTypeMapper(source, target));
|
|
}
|
|
function getRestrictiveTypeParameter(tp) {
|
|
return tp.constraint === unknownType ? tp : tp.restrictiveInstantiation || (tp.restrictiveInstantiation = createTypeParameter(tp.symbol),
|
|
tp.restrictiveInstantiation.constraint = unknownType,
|
|
tp.restrictiveInstantiation);
|
|
}
|
|
function cloneTypeParameter(typeParameter) {
|
|
var result = createTypeParameter(typeParameter.symbol);
|
|
result.target = typeParameter;
|
|
return result;
|
|
}
|
|
function instantiateTypePredicate(predicate, mapper) {
|
|
return createTypePredicate(predicate.kind, predicate.parameterName, predicate.parameterIndex, 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.flags & 39);
|
|
result.target = signature;
|
|
result.mapper = mapper;
|
|
return result;
|
|
}
|
|
function instantiateSymbol(symbol, mapper) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (links.type && !couldContainTypeVariables(links.type)) {
|
|
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) & (8 | 4096 | 16384 | 32768));
|
|
result.declarations = symbol.declarations;
|
|
result.parent = symbol.parent;
|
|
result.target = symbol;
|
|
result.mapper = mapper;
|
|
if (symbol.valueDeclaration) {
|
|
result.valueDeclaration = symbol.valueDeclaration;
|
|
}
|
|
if (links.nameType) {
|
|
result.nameType = links.nameType;
|
|
}
|
|
return result;
|
|
}
|
|
function getObjectTypeInstantiation(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var declaration = type.objectFlags & 4 ? type.node :
|
|
type.objectFlags & 8388608 ? type.node :
|
|
type.symbol.declarations[0];
|
|
var links = getNodeLinks(declaration);
|
|
var target = type.objectFlags & 4 ? links.resolvedType :
|
|
type.objectFlags & 64 ? type.target : type;
|
|
var typeParameters = links.outerTypeParameters;
|
|
if (!typeParameters) {
|
|
var outerTypeParameters = getOuterTypeParameters(declaration, true);
|
|
if (isJSConstructor(declaration)) {
|
|
var templateTagParameters = getTypeParametersFromDeclaration(declaration);
|
|
outerTypeParameters = ts.addRange(outerTypeParameters, templateTagParameters);
|
|
}
|
|
typeParameters = outerTypeParameters || ts.emptyArray;
|
|
var allDeclarations_1 = type.objectFlags & (4 | 8388608) ? [declaration] : type.symbol.declarations;
|
|
typeParameters = (target.objectFlags & (4 | 8388608) || target.symbol.flags & 8192 || target.symbol.flags & 2048) && !target.aliasTypeArguments ?
|
|
ts.filter(typeParameters, function (tp) { return ts.some(allDeclarations_1, function (d) { return isTypeParameterPossiblyReferenced(tp, d); }); }) :
|
|
typeParameters;
|
|
links.outerTypeParameters = typeParameters;
|
|
}
|
|
if (typeParameters.length) {
|
|
var combinedMapper_1 = combineTypeMappers(type.mapper, mapper);
|
|
var typeArguments = ts.map(typeParameters, function (t) { return getMappedType(t, combinedMapper_1); });
|
|
var newAliasSymbol = aliasSymbol || type.aliasSymbol;
|
|
var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
|
|
var id = getTypeListId(typeArguments) + getAliasId(newAliasSymbol, newAliasTypeArguments);
|
|
if (!target.instantiations) {
|
|
target.instantiations = new ts.Map();
|
|
target.instantiations.set(getTypeListId(typeParameters) + getAliasId(target.aliasSymbol, target.aliasTypeArguments), target);
|
|
}
|
|
var result = target.instantiations.get(id);
|
|
if (!result) {
|
|
var newMapper = createTypeMapper(typeParameters, typeArguments);
|
|
result = target.objectFlags & 4 ? createDeferredTypeReference(type.target, type.node, newMapper, newAliasSymbol, newAliasTypeArguments) :
|
|
target.objectFlags & 32 ? instantiateMappedType(target, newMapper, newAliasSymbol, newAliasTypeArguments) :
|
|
instantiateAnonymousType(target, newMapper, newAliasSymbol, newAliasTypeArguments);
|
|
target.instantiations.set(id, result);
|
|
}
|
|
return result;
|
|
}
|
|
return type;
|
|
}
|
|
function maybeTypeParameterReference(node) {
|
|
return !(node.parent.kind === 178 && node.parent.typeArguments && node === node.parent.typeName ||
|
|
node.parent.kind === 200 && node.parent.typeArguments && node === node.parent.qualifier);
|
|
}
|
|
function isTypeParameterPossiblyReferenced(tp, node) {
|
|
if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
|
|
var container = tp.symbol.declarations[0].parent;
|
|
for (var n = node; n !== container; n = n.parent) {
|
|
if (!n || n.kind === 235 || n.kind === 189 && ts.forEachChild(n.extendsType, containsReference)) {
|
|
return true;
|
|
}
|
|
}
|
|
return containsReference(node);
|
|
}
|
|
return true;
|
|
function containsReference(node) {
|
|
switch (node.kind) {
|
|
case 192:
|
|
return !!tp.isThisType;
|
|
case 79:
|
|
return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
|
|
getTypeFromTypeNodeWorker(node) === tp;
|
|
case 181:
|
|
return true;
|
|
case 169:
|
|
case 168:
|
|
return !node.type && !!node.body ||
|
|
ts.some(node.typeParameters, containsReference) ||
|
|
ts.some(node.parameters, containsReference) ||
|
|
!!node.type && containsReference(node.type);
|
|
}
|
|
return !!ts.forEachChild(node, containsReference);
|
|
}
|
|
}
|
|
function getHomomorphicTypeVariable(type) {
|
|
var constraintType = getConstraintTypeFromMappedType(type);
|
|
if (constraintType.flags & 4194304) {
|
|
var typeVariable = getActualTypeVariable(constraintType.type);
|
|
if (typeVariable.flags & 262144) {
|
|
return typeVariable;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function instantiateMappedType(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var typeVariable = getHomomorphicTypeVariable(type);
|
|
if (typeVariable) {
|
|
var mappedTypeVariable = instantiateType(typeVariable, mapper);
|
|
if (typeVariable !== mappedTypeVariable) {
|
|
return mapTypeWithAlias(getReducedType(mappedTypeVariable), function (t) {
|
|
if (t.flags & (3 | 58982400 | 524288 | 2097152) && t !== wildcardType && !isErrorType(t)) {
|
|
if (!type.declaration.nameType) {
|
|
var constraint = void 0;
|
|
if (isArrayType(t) || t.flags & 1 && findResolutionCycleStartIndex(typeVariable, 4) < 0 &&
|
|
(constraint = getConstraintOfTypeParameter(typeVariable)) && everyType(constraint, isArrayOrTupleType)) {
|
|
return instantiateMappedArrayType(t, type, prependTypeMapping(typeVariable, t, mapper));
|
|
}
|
|
if (isGenericTupleType(t)) {
|
|
return instantiateMappedGenericTupleType(t, type, typeVariable, mapper);
|
|
}
|
|
if (isTupleType(t)) {
|
|
return instantiateMappedTupleType(t, type, prependTypeMapping(typeVariable, t, mapper));
|
|
}
|
|
}
|
|
return instantiateAnonymousType(type, prependTypeMapping(typeVariable, t, mapper));
|
|
}
|
|
return t;
|
|
}, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
}
|
|
return instantiateType(getConstraintTypeFromMappedType(type), mapper) === wildcardType ? wildcardType : instantiateAnonymousType(type, mapper, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
function getModifiedReadonlyState(state, modifiers) {
|
|
return modifiers & 1 ? true : modifiers & 2 ? false : state;
|
|
}
|
|
function instantiateMappedGenericTupleType(tupleType, mappedType, typeVariable, mapper) {
|
|
var elementFlags = tupleType.target.elementFlags;
|
|
var elementTypes = ts.map(getTypeArguments(tupleType), function (t, i) {
|
|
var singleton = elementFlags[i] & 8 ? t :
|
|
elementFlags[i] & 4 ? createArrayType(t) :
|
|
createTupleType([t], [elementFlags[i]]);
|
|
return instantiateMappedType(mappedType, prependTypeMapping(typeVariable, singleton, mapper));
|
|
});
|
|
var newReadonly = getModifiedReadonlyState(tupleType.target.readonly, getMappedTypeModifiers(mappedType));
|
|
return createTupleType(elementTypes, ts.map(elementTypes, function (_) { return 8; }), newReadonly);
|
|
}
|
|
function instantiateMappedArrayType(arrayType, mappedType, mapper) {
|
|
var elementType = instantiateMappedTypeTemplate(mappedType, numberType, true, mapper);
|
|
return isErrorType(elementType) ? errorType :
|
|
createArrayType(elementType, getModifiedReadonlyState(isReadonlyArrayType(arrayType), getMappedTypeModifiers(mappedType)));
|
|
}
|
|
function instantiateMappedTupleType(tupleType, mappedType, mapper) {
|
|
var elementFlags = tupleType.target.elementFlags;
|
|
var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
|
|
return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2), mapper);
|
|
});
|
|
var modifiers = getMappedTypeModifiers(mappedType);
|
|
var newTupleModifiers = modifiers & 4 ? ts.map(elementFlags, function (f) { return f & 1 ? 2 : f; }) :
|
|
modifiers & 8 ? ts.map(elementFlags, function (f) { return f & 2 ? 1 : f; }) :
|
|
elementFlags;
|
|
var newReadonly = getModifiedReadonlyState(tupleType.target.readonly, modifiers);
|
|
return ts.contains(elementTypes, errorType) ? errorType :
|
|
createTupleType(elementTypes, newTupleModifiers, newReadonly, tupleType.target.labeledElementDeclarations);
|
|
}
|
|
function instantiateMappedTypeTemplate(type, key, isOptional, mapper) {
|
|
var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
|
|
var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
|
|
var modifiers = getMappedTypeModifiers(type);
|
|
return strictNullChecks && modifiers & 4 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType, true) :
|
|
strictNullChecks && modifiers & 8 && isOptional ? getTypeWithFacts(propType, 524288) :
|
|
propType;
|
|
}
|
|
function instantiateAnonymousType(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var result = createObjectType(type.objectFlags | 64, type.symbol);
|
|
if (type.objectFlags & 32) {
|
|
result.declaration = type.declaration;
|
|
var origTypeParameter = getTypeParameterFromMappedType(type);
|
|
var freshTypeParameter = cloneTypeParameter(origTypeParameter);
|
|
result.typeParameter = freshTypeParameter;
|
|
mapper = combineTypeMappers(makeUnaryTypeMapper(origTypeParameter, freshTypeParameter), mapper);
|
|
freshTypeParameter.mapper = mapper;
|
|
}
|
|
if (type.objectFlags & 8388608) {
|
|
result.node = type.node;
|
|
}
|
|
result.target = type;
|
|
result.mapper = mapper;
|
|
result.aliasSymbol = aliasSymbol || type.aliasSymbol;
|
|
result.aliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
|
|
result.objectFlags |= result.aliasTypeArguments ? getPropagatingFlagsOfTypes(result.aliasTypeArguments) : 0;
|
|
return result;
|
|
}
|
|
function getConditionalTypeInstantiation(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var root = type.root;
|
|
if (root.outerTypeParameters) {
|
|
var typeArguments = ts.map(root.outerTypeParameters, function (t) { return getMappedType(t, mapper); });
|
|
var id = getTypeListId(typeArguments) + getAliasId(aliasSymbol, aliasTypeArguments);
|
|
var result = root.instantiations.get(id);
|
|
if (!result) {
|
|
var newMapper_1 = createTypeMapper(root.outerTypeParameters, typeArguments);
|
|
var checkType_1 = root.checkType;
|
|
var distributionType = root.isDistributive ? getMappedType(checkType_1, newMapper_1) : undefined;
|
|
result = distributionType && checkType_1 !== distributionType && distributionType.flags & (1048576 | 131072) ?
|
|
mapTypeWithAlias(getReducedType(distributionType), function (t) { return getConditionalType(root, prependTypeMapping(checkType_1, t, newMapper_1)); }, aliasSymbol, aliasTypeArguments) :
|
|
getConditionalType(root, newMapper_1, aliasSymbol, aliasTypeArguments);
|
|
root.instantiations.set(id, result);
|
|
}
|
|
return result;
|
|
}
|
|
return type;
|
|
}
|
|
function instantiateType(type, mapper) {
|
|
return type && mapper ? instantiateTypeWithAlias(type, mapper, undefined, undefined) : type;
|
|
}
|
|
function instantiateTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
if (!couldContainTypeVariables(type)) {
|
|
return type;
|
|
}
|
|
if (instantiationDepth === 100 || instantiationCount >= 5000000) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "instantiateType_DepthLimit", { typeId: type.id, instantiationDepth: instantiationDepth, instantiationCount: instantiationCount });
|
|
error(currentNode, ts.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite);
|
|
return errorType;
|
|
}
|
|
totalInstantiationCount++;
|
|
instantiationCount++;
|
|
instantiationDepth++;
|
|
var result = instantiateTypeWorker(type, mapper, aliasSymbol, aliasTypeArguments);
|
|
instantiationDepth--;
|
|
return result;
|
|
}
|
|
function instantiateTypeWorker(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
var flags = type.flags;
|
|
if (flags & 262144) {
|
|
return getMappedType(type, mapper);
|
|
}
|
|
if (flags & 524288) {
|
|
var objectFlags = type.objectFlags;
|
|
if (objectFlags & (4 | 16 | 32)) {
|
|
if (objectFlags & 4 && !type.node) {
|
|
var resolvedTypeArguments = type.resolvedTypeArguments;
|
|
var newTypeArguments = instantiateTypes(resolvedTypeArguments, mapper);
|
|
return newTypeArguments !== resolvedTypeArguments ? createNormalizedTypeReference(type.target, newTypeArguments) : type;
|
|
}
|
|
if (objectFlags & 1024) {
|
|
return instantiateReverseMappedType(type, mapper);
|
|
}
|
|
return getObjectTypeInstantiation(type, mapper, aliasSymbol, aliasTypeArguments);
|
|
}
|
|
return type;
|
|
}
|
|
if (flags & 3145728) {
|
|
var origin = type.flags & 1048576 ? type.origin : undefined;
|
|
var types = origin && origin.flags & 3145728 ? origin.types : type.types;
|
|
var newTypes = instantiateTypes(types, mapper);
|
|
if (newTypes === types && aliasSymbol === type.aliasSymbol) {
|
|
return type;
|
|
}
|
|
var newAliasSymbol = aliasSymbol || type.aliasSymbol;
|
|
var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
|
|
return flags & 2097152 || origin && origin.flags & 2097152 ?
|
|
getIntersectionType(newTypes, newAliasSymbol, newAliasTypeArguments) :
|
|
getUnionType(newTypes, 1, newAliasSymbol, newAliasTypeArguments);
|
|
}
|
|
if (flags & 4194304) {
|
|
return getIndexType(instantiateType(type.type, mapper));
|
|
}
|
|
if (flags & 134217728) {
|
|
return getTemplateLiteralType(type.texts, instantiateTypes(type.types, mapper));
|
|
}
|
|
if (flags & 268435456) {
|
|
return getStringMappingType(type.symbol, instantiateType(type.type, mapper));
|
|
}
|
|
if (flags & 8388608) {
|
|
var newAliasSymbol = aliasSymbol || type.aliasSymbol;
|
|
var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
|
|
return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, undefined, newAliasSymbol, newAliasTypeArguments);
|
|
}
|
|
if (flags & 16777216) {
|
|
return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
|
|
}
|
|
if (flags & 33554432) {
|
|
var maybeVariable = instantiateType(type.baseType, mapper);
|
|
if (maybeVariable.flags & 8650752) {
|
|
return getSubstitutionType(maybeVariable, instantiateType(type.substitute, mapper));
|
|
}
|
|
else {
|
|
var sub = instantiateType(type.substitute, mapper);
|
|
if (sub.flags & 3 || isTypeAssignableTo(getRestrictiveInstantiation(maybeVariable), getRestrictiveInstantiation(sub))) {
|
|
return maybeVariable;
|
|
}
|
|
return sub;
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function instantiateReverseMappedType(type, mapper) {
|
|
var innerMappedType = instantiateType(type.mappedType, mapper);
|
|
if (!(ts.getObjectFlags(innerMappedType) & 32)) {
|
|
return type;
|
|
}
|
|
var innerIndexType = instantiateType(type.constraintType, mapper);
|
|
if (!(innerIndexType.flags & 4194304)) {
|
|
return type;
|
|
}
|
|
var instantiated = inferTypeForHomomorphicMappedType(instantiateType(type.source, mapper), innerMappedType, innerIndexType);
|
|
if (instantiated) {
|
|
return instantiated;
|
|
}
|
|
return type;
|
|
}
|
|
function getUniqueLiteralFilledInstantiation(type) {
|
|
return type.flags & (131068 | 3 | 131072) ? type :
|
|
type.uniqueLiteralFilledInstantiation || (type.uniqueLiteralFilledInstantiation = instantiateType(type, uniqueLiteralMapper));
|
|
}
|
|
function getPermissiveInstantiation(type) {
|
|
return type.flags & (131068 | 3 | 131072) ? type :
|
|
type.permissiveInstantiation || (type.permissiveInstantiation = instantiateType(type, permissiveMapper));
|
|
}
|
|
function getRestrictiveInstantiation(type) {
|
|
if (type.flags & (131068 | 3 | 131072)) {
|
|
return type;
|
|
}
|
|
if (type.restrictiveInstantiation) {
|
|
return type.restrictiveInstantiation;
|
|
}
|
|
type.restrictiveInstantiation = instantiateType(type, restrictiveMapper);
|
|
type.restrictiveInstantiation.restrictiveInstantiation = type.restrictiveInstantiation;
|
|
return type.restrictiveInstantiation;
|
|
}
|
|
function instantiateIndexInfo(info, mapper) {
|
|
return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
|
|
}
|
|
function isContextSensitive(node) {
|
|
ts.Debug.assert(node.kind !== 169 || ts.isObjectLiteralMethod(node));
|
|
switch (node.kind) {
|
|
case 213:
|
|
case 214:
|
|
case 169:
|
|
case 256:
|
|
return isContextSensitiveFunctionLikeDeclaration(node);
|
|
case 205:
|
|
return ts.some(node.properties, isContextSensitive);
|
|
case 204:
|
|
return ts.some(node.elements, isContextSensitive);
|
|
case 222:
|
|
return isContextSensitive(node.whenTrue) ||
|
|
isContextSensitive(node.whenFalse);
|
|
case 221:
|
|
return (node.operatorToken.kind === 56 || node.operatorToken.kind === 60) &&
|
|
(isContextSensitive(node.left) || isContextSensitive(node.right));
|
|
case 296:
|
|
return isContextSensitive(node.initializer);
|
|
case 212:
|
|
return isContextSensitive(node.expression);
|
|
case 286:
|
|
return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
|
|
case 285: {
|
|
var initializer = node.initializer;
|
|
return !!initializer && isContextSensitive(initializer);
|
|
}
|
|
case 288: {
|
|
var expression = node.expression;
|
|
return !!expression && isContextSensitive(expression);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isContextSensitiveFunctionLikeDeclaration(node) {
|
|
return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
|
|
(ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
|
|
}
|
|
function hasContextSensitiveReturnExpression(node) {
|
|
return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 235 && isContextSensitive(node.body);
|
|
}
|
|
function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
|
|
return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || ts.isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
|
|
isContextSensitiveFunctionLikeDeclaration(func);
|
|
}
|
|
function getTypeWithoutSignatures(type) {
|
|
if (type.flags & 524288) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
if (resolved.constructSignatures.length || resolved.callSignatures.length) {
|
|
var result = createObjectType(16, type.symbol);
|
|
result.members = resolved.members;
|
|
result.properties = resolved.properties;
|
|
result.callSignatures = ts.emptyArray;
|
|
result.constructSignatures = ts.emptyArray;
|
|
result.indexInfos = ts.emptyArray;
|
|
return result;
|
|
}
|
|
}
|
|
else if (type.flags & 2097152) {
|
|
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 compareTypesSubtypeOf(source, target) {
|
|
return isTypeRelatedTo(source, target, subtypeRelation) ? -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 & 1048576 ? ts.every(source.types, function (t) { return isTypeDerivedFrom(t, target); }) :
|
|
target.flags & 1048576 ? ts.some(target.types, function (t) { return isTypeDerivedFrom(source, t); }) :
|
|
source.flags & 58982400 ? isTypeDerivedFrom(getBaseConstraintOfType(source) || unknownType, target) :
|
|
target === globalObjectType ? !!(source.flags & (524288 | 67108864)) :
|
|
target === globalFunctionType ? !!(source.flags & 524288) && isFunctionObjectType(source) :
|
|
hasBaseType(source, getTargetType(target)) || (isArrayType(target) && !isReadonlyArrayType(target) && isTypeDerivedFrom(source, globalReadonlyArrayType));
|
|
}
|
|
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, errorOutputObject) {
|
|
return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain, errorOutputObject);
|
|
}
|
|
function checkTypeAssignableToAndOptionallyElaborate(source, target, errorNode, expr, headMessage, containingMessageChain) {
|
|
return checkTypeRelatedToAndOptionallyElaborate(source, target, assignableRelation, errorNode, expr, headMessage, containingMessageChain, undefined);
|
|
}
|
|
function checkTypeRelatedToAndOptionallyElaborate(source, target, relation, errorNode, expr, headMessage, containingMessageChain, errorOutputContainer) {
|
|
if (isTypeRelatedTo(source, target, relation))
|
|
return true;
|
|
if (!errorNode || !elaborateError(expr, source, target, relation, headMessage, containingMessageChain, errorOutputContainer)) {
|
|
return checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer);
|
|
}
|
|
return false;
|
|
}
|
|
function isOrHasGenericConditional(type) {
|
|
return !!(type.flags & 16777216 || (type.flags & 2097152 && ts.some(type.types, isOrHasGenericConditional)));
|
|
}
|
|
function elaborateError(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer) {
|
|
if (!node || isOrHasGenericConditional(target))
|
|
return false;
|
|
if (!checkTypeRelatedTo(source, target, relation, undefined)
|
|
&& elaborateDidYouMeanToCallOrConstruct(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer)) {
|
|
return true;
|
|
}
|
|
switch (node.kind) {
|
|
case 288:
|
|
case 212:
|
|
return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
|
|
case 221:
|
|
switch (node.operatorToken.kind) {
|
|
case 63:
|
|
case 27:
|
|
return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
|
|
}
|
|
break;
|
|
case 205:
|
|
return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
|
|
case 204:
|
|
return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
|
|
case 286:
|
|
return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
|
|
case 214:
|
|
return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
|
|
}
|
|
return false;
|
|
}
|
|
function elaborateDidYouMeanToCallOrConstruct(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer) {
|
|
var callSignatures = getSignaturesOfType(source, 0);
|
|
var constructSignatures = getSignaturesOfType(source, 1);
|
|
for (var _i = 0, _a = [constructSignatures, callSignatures]; _i < _a.length; _i++) {
|
|
var signatures = _a[_i];
|
|
if (ts.some(signatures, function (s) {
|
|
var returnType = getReturnTypeOfSignature(s);
|
|
return !(returnType.flags & (1 | 131072)) && checkTypeRelatedTo(returnType, target, relation, undefined);
|
|
})) {
|
|
var resultObj = errorOutputContainer || {};
|
|
checkTypeAssignableTo(source, target, node, headMessage, containingMessageChain, resultObj);
|
|
var diagnostic = resultObj.errors[resultObj.errors.length - 1];
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(node, signatures === constructSignatures ? ts.Diagnostics.Did_you_mean_to_use_new_with_this_expression : ts.Diagnostics.Did_you_mean_to_call_this_expression));
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer) {
|
|
if (ts.isBlock(node.body)) {
|
|
return false;
|
|
}
|
|
if (ts.some(node.parameters, ts.hasType)) {
|
|
return false;
|
|
}
|
|
var sourceSig = getSingleCallSignature(source);
|
|
if (!sourceSig) {
|
|
return false;
|
|
}
|
|
var targetSignatures = getSignaturesOfType(target, 0);
|
|
if (!ts.length(targetSignatures)) {
|
|
return false;
|
|
}
|
|
var returnExpression = node.body;
|
|
var sourceReturn = getReturnTypeOfSignature(sourceSig);
|
|
var targetReturn = getUnionType(ts.map(targetSignatures, getReturnTypeOfSignature));
|
|
if (!checkTypeRelatedTo(sourceReturn, targetReturn, relation, undefined)) {
|
|
var elaborated = returnExpression && elaborateError(returnExpression, sourceReturn, targetReturn, relation, undefined, containingMessageChain, errorOutputContainer);
|
|
if (elaborated) {
|
|
return elaborated;
|
|
}
|
|
var resultObj = errorOutputContainer || {};
|
|
checkTypeRelatedTo(sourceReturn, targetReturn, relation, returnExpression, undefined, containingMessageChain, resultObj);
|
|
if (resultObj.errors) {
|
|
if (target.symbol && ts.length(target.symbol.declarations)) {
|
|
ts.addRelatedInfo(resultObj.errors[resultObj.errors.length - 1], ts.createDiagnosticForNode(target.symbol.declarations[0], ts.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature));
|
|
}
|
|
if ((ts.getFunctionFlags(node) & 2) === 0
|
|
&& !getTypeOfPropertyOfType(sourceReturn, "then")
|
|
&& checkTypeRelatedTo(createPromiseType(sourceReturn), targetReturn, relation, undefined)) {
|
|
ts.addRelatedInfo(resultObj.errors[resultObj.errors.length - 1], ts.createDiagnosticForNode(node, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async));
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType) {
|
|
var idx = getIndexedAccessTypeOrUndefined(target, nameType);
|
|
if (idx) {
|
|
return idx;
|
|
}
|
|
if (target.flags & 1048576) {
|
|
var best = getBestMatchingType(source, target);
|
|
if (best) {
|
|
return getIndexedAccessTypeOrUndefined(best, nameType);
|
|
}
|
|
}
|
|
}
|
|
function checkExpressionForMutableLocationWithContextualType(next, sourcePropType) {
|
|
next.contextualType = sourcePropType;
|
|
try {
|
|
return checkExpressionForMutableLocation(next, 1, sourcePropType);
|
|
}
|
|
finally {
|
|
next.contextualType = undefined;
|
|
}
|
|
}
|
|
function elaborateElementwise(iterator, source, target, relation, containingMessageChain, errorOutputContainer) {
|
|
var reportedError = false;
|
|
for (var status = iterator.next(); !status.done; status = iterator.next()) {
|
|
var _a = status.value, prop = _a.errorNode, next = _a.innerExpression, nameType = _a.nameType, errorMessage = _a.errorMessage;
|
|
var targetPropType = getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType);
|
|
if (!targetPropType || targetPropType.flags & 8388608)
|
|
continue;
|
|
var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
|
|
if (!sourcePropType)
|
|
continue;
|
|
var propName = getPropertyNameFromIndex(nameType, undefined);
|
|
if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, undefined)) {
|
|
var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, undefined, containingMessageChain, errorOutputContainer);
|
|
reportedError = true;
|
|
if (!elaborated) {
|
|
var resultObj = errorOutputContainer || {};
|
|
var specificSource = next ? checkExpressionForMutableLocationWithContextualType(next, sourcePropType) : sourcePropType;
|
|
if (exactOptionalPropertyTypes && isExactOptionalPropertyMismatch(specificSource, targetPropType)) {
|
|
var diag = ts.createDiagnosticForNode(prop, ts.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target, typeToString(specificSource), typeToString(targetPropType));
|
|
diagnostics.add(diag);
|
|
resultObj.errors = [diag];
|
|
}
|
|
else {
|
|
var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216);
|
|
var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216);
|
|
targetPropType = removeMissingType(targetPropType, targetIsOptional);
|
|
sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
|
|
var result = checkTypeRelatedTo(specificSource, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj);
|
|
if (result && specificSource !== sourcePropType) {
|
|
checkTypeRelatedTo(sourcePropType, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj);
|
|
}
|
|
}
|
|
if (resultObj.errors) {
|
|
var reportedDiag = resultObj.errors[resultObj.errors.length - 1];
|
|
var propertyName = isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined;
|
|
var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
|
|
var issuedElaboration = false;
|
|
if (!targetProp) {
|
|
var indexInfo = getApplicableIndexInfo(target, nameType);
|
|
if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
|
|
issuedElaboration = true;
|
|
ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
|
|
}
|
|
}
|
|
if (!issuedElaboration && (targetProp && ts.length(targetProp.declarations) || target.symbol && ts.length(target.symbol.declarations))) {
|
|
var targetNode = targetProp && ts.length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0];
|
|
if (!ts.getSourceFileOfNode(targetNode).hasNoDefaultLib) {
|
|
ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(targetNode, ts.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, propertyName && !(nameType.flags & 8192) ? ts.unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return reportedError;
|
|
}
|
|
function generateJsxAttributes(node) {
|
|
var _i, _a, prop;
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!ts.length(node.properties))
|
|
return [2];
|
|
_i = 0, _a = node.properties;
|
|
_b.label = 1;
|
|
case 1:
|
|
if (!(_i < _a.length)) return [3, 4];
|
|
prop = _a[_i];
|
|
if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
|
|
return [3, 3];
|
|
return [4, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
|
|
case 2:
|
|
_b.sent();
|
|
_b.label = 3;
|
|
case 3:
|
|
_i++;
|
|
return [3, 1];
|
|
case 4: return [2];
|
|
}
|
|
});
|
|
}
|
|
function generateJsxChildren(node, getInvalidTextDiagnostic) {
|
|
var memberOffset, i, child, nameType, elem;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!ts.length(node.children))
|
|
return [2];
|
|
memberOffset = 0;
|
|
i = 0;
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(i < node.children.length)) return [3, 5];
|
|
child = node.children[i];
|
|
nameType = getNumberLiteralType(i - memberOffset);
|
|
elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
|
|
if (!elem) return [3, 3];
|
|
return [4, elem];
|
|
case 2:
|
|
_a.sent();
|
|
return [3, 4];
|
|
case 3:
|
|
memberOffset++;
|
|
_a.label = 4;
|
|
case 4:
|
|
i++;
|
|
return [3, 1];
|
|
case 5: return [2];
|
|
}
|
|
});
|
|
}
|
|
function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
|
|
switch (child.kind) {
|
|
case 288:
|
|
return { errorNode: child, innerExpression: child.expression, nameType: nameType };
|
|
case 11:
|
|
if (child.containsOnlyTriviaWhiteSpaces) {
|
|
break;
|
|
}
|
|
return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
|
|
case 278:
|
|
case 279:
|
|
case 282:
|
|
return { errorNode: child, innerExpression: child, nameType: nameType };
|
|
default:
|
|
return ts.Debug.assertNever(child, "Found invalid jsx child");
|
|
}
|
|
}
|
|
function elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer) {
|
|
var result = elaborateElementwise(generateJsxAttributes(node), source, target, relation, containingMessageChain, errorOutputContainer);
|
|
var invalidTextDiagnostic;
|
|
if (ts.isJsxOpeningElement(node.parent) && ts.isJsxElement(node.parent.parent)) {
|
|
var containingElement = node.parent.parent;
|
|
var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
|
|
var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
|
|
var childrenNameType = getStringLiteralType(childrenPropName);
|
|
var childrenTargetType = getIndexedAccessType(target, childrenNameType);
|
|
var validChildren = ts.getSemanticJsxChildren(containingElement.children);
|
|
if (!ts.length(validChildren)) {
|
|
return result;
|
|
}
|
|
var moreThanOneRealChildren = ts.length(validChildren) > 1;
|
|
var arrayLikeTargetParts = filterType(childrenTargetType, isArrayOrTupleLikeType);
|
|
var nonArrayLikeTargetParts = filterType(childrenTargetType, function (t) { return !isArrayOrTupleLikeType(t); });
|
|
if (moreThanOneRealChildren) {
|
|
if (arrayLikeTargetParts !== neverType) {
|
|
var realSource = createTupleType(checkJsxChildren(containingElement, 0));
|
|
var children = generateJsxChildren(containingElement, getInvalidTextualChildDiagnostic);
|
|
result = elaborateElementwise(children, realSource, arrayLikeTargetParts, relation, containingMessageChain, errorOutputContainer) || result;
|
|
}
|
|
else if (!isTypeRelatedTo(getIndexedAccessType(source, childrenNameType), childrenTargetType, relation)) {
|
|
result = true;
|
|
var diag = error(containingElement.openingElement.tagName, ts.Diagnostics.This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided, childrenPropName, typeToString(childrenTargetType));
|
|
if (errorOutputContainer && errorOutputContainer.skipLogging) {
|
|
(errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (nonArrayLikeTargetParts !== neverType) {
|
|
var child = validChildren[0];
|
|
var elem_1 = getElaborationElementForJsxChild(child, childrenNameType, getInvalidTextualChildDiagnostic);
|
|
if (elem_1) {
|
|
result = elaborateElementwise((function () { return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4, elem_1];
|
|
case 1:
|
|
_a.sent();
|
|
return [2];
|
|
}
|
|
}); })(), source, target, relation, containingMessageChain, errorOutputContainer) || result;
|
|
}
|
|
}
|
|
else if (!isTypeRelatedTo(getIndexedAccessType(source, childrenNameType), childrenTargetType, relation)) {
|
|
result = true;
|
|
var diag = error(containingElement.openingElement.tagName, ts.Diagnostics.This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided, childrenPropName, typeToString(childrenTargetType));
|
|
if (errorOutputContainer && errorOutputContainer.skipLogging) {
|
|
(errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
function getInvalidTextualChildDiagnostic() {
|
|
if (!invalidTextDiagnostic) {
|
|
var tagNameText = ts.getTextOfNode(node.parent.tagName);
|
|
var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
|
|
var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
|
|
var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
|
|
var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
|
|
invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
|
|
}
|
|
return invalidTextDiagnostic;
|
|
}
|
|
}
|
|
function generateLimitedTupleElements(node, target) {
|
|
var len, i, elem, nameType;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
len = ts.length(node.elements);
|
|
if (!len)
|
|
return [2];
|
|
i = 0;
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(i < len)) return [3, 4];
|
|
if (isTupleLikeType(target) && !getPropertyOfType(target, ("" + i)))
|
|
return [3, 3];
|
|
elem = node.elements[i];
|
|
if (ts.isOmittedExpression(elem))
|
|
return [3, 3];
|
|
nameType = getNumberLiteralType(i);
|
|
return [4, { errorNode: elem, innerExpression: elem, nameType: nameType }];
|
|
case 2:
|
|
_a.sent();
|
|
_a.label = 3;
|
|
case 3:
|
|
i++;
|
|
return [3, 1];
|
|
case 4: return [2];
|
|
}
|
|
});
|
|
}
|
|
function elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) {
|
|
if (target.flags & (131068 | 131072))
|
|
return false;
|
|
if (isTupleLikeType(source)) {
|
|
return elaborateElementwise(generateLimitedTupleElements(node, target), source, target, relation, containingMessageChain, errorOutputContainer);
|
|
}
|
|
var oldContext = node.contextualType;
|
|
node.contextualType = target;
|
|
try {
|
|
var tupleizedType = checkArrayLiteral(node, 1, true);
|
|
node.contextualType = oldContext;
|
|
if (isTupleLikeType(tupleizedType)) {
|
|
return elaborateElementwise(generateLimitedTupleElements(node, target), tupleizedType, target, relation, containingMessageChain, errorOutputContainer);
|
|
}
|
|
return false;
|
|
}
|
|
finally {
|
|
node.contextualType = oldContext;
|
|
}
|
|
}
|
|
function generateObjectLiteralElements(node) {
|
|
var _i, _a, prop, type, _b;
|
|
return __generator(this, function (_c) {
|
|
switch (_c.label) {
|
|
case 0:
|
|
if (!ts.length(node.properties))
|
|
return [2];
|
|
_i = 0, _a = node.properties;
|
|
_c.label = 1;
|
|
case 1:
|
|
if (!(_i < _a.length)) return [3, 8];
|
|
prop = _a[_i];
|
|
if (ts.isSpreadAssignment(prop))
|
|
return [3, 7];
|
|
type = getLiteralTypeFromProperty(getSymbolOfNode(prop), 8576);
|
|
if (!type || (type.flags & 131072)) {
|
|
return [3, 7];
|
|
}
|
|
_b = prop.kind;
|
|
switch (_b) {
|
|
case 173: return [3, 2];
|
|
case 172: return [3, 2];
|
|
case 169: return [3, 2];
|
|
case 297: return [3, 2];
|
|
case 296: return [3, 4];
|
|
}
|
|
return [3, 6];
|
|
case 2: return [4, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
|
|
case 3:
|
|
_c.sent();
|
|
return [3, 7];
|
|
case 4: return [4, { errorNode: prop.name, innerExpression: prop.initializer, nameType: type, errorMessage: ts.isComputedNonLiteralName(prop.name) ? ts.Diagnostics.Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1 : undefined }];
|
|
case 5:
|
|
_c.sent();
|
|
return [3, 7];
|
|
case 6:
|
|
ts.Debug.assertNever(prop);
|
|
_c.label = 7;
|
|
case 7:
|
|
_i++;
|
|
return [3, 1];
|
|
case 8: return [2];
|
|
}
|
|
});
|
|
}
|
|
function elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) {
|
|
if (target.flags & (131068 | 131072))
|
|
return false;
|
|
return elaborateElementwise(generateObjectLiteralElements(node), source, target, relation, containingMessageChain, errorOutputContainer);
|
|
}
|
|
function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) {
|
|
return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain);
|
|
}
|
|
function isSignatureAssignableTo(source, target, ignoreReturnTypes) {
|
|
return compareSignaturesRelated(source, target, ignoreReturnTypes ? 4 : 0, false, undefined, undefined, compareTypesAssignable, undefined) !== 0;
|
|
}
|
|
function isAnySignature(s) {
|
|
return !s.typeParameters && (!s.thisParameter || isTypeAny(getTypeOfParameter(s.thisParameter))) && s.parameters.length === 1 &&
|
|
signatureHasRestParameter(s) && (getTypeOfParameter(s.parameters[0]) === anyArrayType || isTypeAny(getTypeOfParameter(s.parameters[0]))) &&
|
|
isTypeAny(getReturnTypeOfSignature(s));
|
|
}
|
|
function compareSignaturesRelated(source, target, checkMode, reportErrors, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) {
|
|
if (source === target) {
|
|
return -1;
|
|
}
|
|
if (isAnySignature(target)) {
|
|
return -1;
|
|
}
|
|
var targetCount = getParameterCount(target);
|
|
var sourceHasMoreParameters = !hasEffectiveRestParameter(target) &&
|
|
(checkMode & 8 ? hasEffectiveRestParameter(source) || getParameterCount(source) > targetCount : getMinArgumentCount(source) > targetCount);
|
|
if (sourceHasMoreParameters) {
|
|
return 0;
|
|
}
|
|
if (source.typeParameters && source.typeParameters !== target.typeParameters) {
|
|
target = getCanonicalSignature(target);
|
|
source = instantiateSignatureInContextOf(source, target, undefined, compareTypes);
|
|
}
|
|
var sourceCount = getParameterCount(source);
|
|
var sourceRestType = getNonArrayRestType(source);
|
|
var targetRestType = getNonArrayRestType(target);
|
|
if (sourceRestType || targetRestType) {
|
|
void instantiateType(sourceRestType || targetRestType, reportUnreliableMarkers);
|
|
}
|
|
var kind = target.declaration ? target.declaration.kind : 0;
|
|
var strictVariance = !(checkMode & 3) && strictFunctionTypes && kind !== 169 &&
|
|
kind !== 168 && kind !== 171;
|
|
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 paramCount = sourceRestType || targetRestType ? Math.min(sourceCount, targetCount) : Math.max(sourceCount, targetCount);
|
|
var restIndex = sourceRestType || targetRestType ? paramCount - 1 : -1;
|
|
for (var i = 0; i < paramCount; i++) {
|
|
var sourceType = i === restIndex ? getRestTypeAtPosition(source, i) : tryGetTypeAtPosition(source, i);
|
|
var targetType = i === restIndex ? getRestTypeAtPosition(target, i) : tryGetTypeAtPosition(target, i);
|
|
if (sourceType && targetType) {
|
|
var sourceSig = checkMode & 3 ? undefined : getSingleCallSignature(getNonNullableType(sourceType));
|
|
var targetSig = checkMode & 3 ? undefined : getSingleCallSignature(getNonNullableType(targetType));
|
|
var callbacks = sourceSig && targetSig && !getTypePredicateOfSignature(sourceSig) && !getTypePredicateOfSignature(targetSig) &&
|
|
(getTypeFacts(sourceType) & 50331648) === (getTypeFacts(targetType) & 50331648);
|
|
var related = callbacks ?
|
|
compareSignaturesRelated(targetSig, sourceSig, (checkMode & 8) | (strictVariance ? 2 : 1), reportErrors, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) :
|
|
!(checkMode & 3) && !strictVariance && compareTypes(sourceType, targetType, false) || compareTypes(targetType, sourceType, reportErrors);
|
|
if (related && checkMode & 8 && i >= getMinArgumentCount(source) && i < getMinArgumentCount(target) && compareTypes(sourceType, targetType, false)) {
|
|
related = 0;
|
|
}
|
|
if (!related) {
|
|
if (reportErrors) {
|
|
errorReporter(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, ts.unescapeLeadingUnderscores(getParameterNameAtPosition(source, i)), ts.unescapeLeadingUnderscores(getParameterNameAtPosition(target, i)));
|
|
}
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
if (!(checkMode & 4)) {
|
|
var targetReturnType = isResolvingReturnTypeOfSignature(target) ? anyType
|
|
: target.declaration && isJSConstructor(target.declaration) ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(target.declaration.symbol))
|
|
: getReturnTypeOfSignature(target);
|
|
if (targetReturnType === voidType || targetReturnType === anyType) {
|
|
return result;
|
|
}
|
|
var sourceReturnType = isResolvingReturnTypeOfSignature(source) ? anyType
|
|
: source.declaration && isJSConstructor(source.declaration) ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(source.declaration.symbol))
|
|
: getReturnTypeOfSignature(source);
|
|
var targetTypePredicate = getTypePredicateOfSignature(target);
|
|
if (targetTypePredicate) {
|
|
var sourceTypePredicate = getTypePredicateOfSignature(source);
|
|
if (sourceTypePredicate) {
|
|
result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, 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 &= checkMode & 1 && compareTypes(targetReturnType, sourceReturnType, false) ||
|
|
compareTypes(sourceReturnType, targetReturnType, reportErrors);
|
|
if (!result && reportErrors && incompatibleErrorReporter) {
|
|
incompatibleErrorReporter(sourceReturnType, targetReturnType);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function compareTypePredicateRelatedTo(source, target, 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 || source.kind === 3) {
|
|
if (source.parameterIndex !== target.parameterIndex) {
|
|
if (reportErrors) {
|
|
errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, source.parameterName, target.parameterName);
|
|
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target));
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
var related = source.type === target.type ? -1 :
|
|
source.type && target.type ? compareTypes(source.type, target.type, reportErrors) :
|
|
0;
|
|
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 isEmptyResolvedType(t) {
|
|
return t !== anyFunctionType &&
|
|
t.properties.length === 0 &&
|
|
t.callSignatures.length === 0 &&
|
|
t.constructSignatures.length === 0 &&
|
|
t.indexInfos.length === 0;
|
|
}
|
|
function isEmptyObjectType(type) {
|
|
return type.flags & 524288 ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
|
|
type.flags & 67108864 ? true :
|
|
type.flags & 1048576 ? ts.some(type.types, isEmptyObjectType) :
|
|
type.flags & 2097152 ? ts.every(type.types, isEmptyObjectType) :
|
|
false;
|
|
}
|
|
function isEmptyAnonymousObjectType(type) {
|
|
return !!(ts.getObjectFlags(type) & 16 && (type.members && isEmptyResolvedType(type) ||
|
|
type.symbol && type.symbol.flags & 2048 && getMembersOfSymbol(type.symbol).size === 0));
|
|
}
|
|
function isUnknownLikeUnionType(type) {
|
|
if (strictNullChecks && type.flags & 1048576) {
|
|
if (!(type.objectFlags & 33554432)) {
|
|
var types = type.types;
|
|
type.objectFlags |= 33554432 | (types.length >= 3 && types[0].flags & 32768 &&
|
|
types[1].flags & 65536 && ts.some(types, isEmptyAnonymousObjectType) ? 67108864 : 0);
|
|
}
|
|
return !!(type.objectFlags & 67108864);
|
|
}
|
|
return false;
|
|
}
|
|
function containsUndefinedType(type) {
|
|
return !!((type.flags & 1048576 ? type.types[0] : type).flags & 32768);
|
|
}
|
|
function isStringIndexSignatureOnlyType(type) {
|
|
return type.flags & 524288 && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
|
|
type.flags & 3145728 && ts.every(type.types, isStringIndexSignatureOnlyType) ||
|
|
false;
|
|
}
|
|
function isEnumTypeRelatedTo(sourceSymbol, targetSymbol, errorReporter) {
|
|
if (sourceSymbol === targetSymbol) {
|
|
return true;
|
|
}
|
|
var id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol);
|
|
var entry = enumRelation.get(id);
|
|
if (entry !== undefined && !(!(entry & 4) && entry & 2 && errorReporter)) {
|
|
return !!(entry & 1);
|
|
}
|
|
if (sourceSymbol.escapedName !== targetSymbol.escapedName || !(sourceSymbol.flags & 256) || !(targetSymbol.flags & 256)) {
|
|
enumRelation.set(id, 2 | 4);
|
|
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, 2 | 4);
|
|
}
|
|
else {
|
|
enumRelation.set(id, 2);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
enumRelation.set(id, 1);
|
|
return true;
|
|
}
|
|
function isSimpleTypeRelatedTo(source, target, relation, errorReporter) {
|
|
var s = source.flags;
|
|
var t = target.flags;
|
|
if (t & 3 || s & 131072 || source === wildcardType)
|
|
return true;
|
|
if (t & 131072)
|
|
return false;
|
|
if (s & 402653316 && t & 4)
|
|
return true;
|
|
if (s & 128 && s & 1024 &&
|
|
t & 128 && !(t & 1024) &&
|
|
source.value === target.value)
|
|
return true;
|
|
if (s & 296 && t & 8)
|
|
return true;
|
|
if (s & 256 && s & 1024 &&
|
|
t & 256 && !(t & 1024) &&
|
|
source.value === target.value)
|
|
return true;
|
|
if (s & 2112 && t & 64)
|
|
return true;
|
|
if (s & 528 && t & 16)
|
|
return true;
|
|
if (s & 12288 && t & 4096)
|
|
return true;
|
|
if (s & 32 && t & 32 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter))
|
|
return true;
|
|
if (s & 1024 && t & 1024) {
|
|
if (s & 1048576 && t & 1048576 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter))
|
|
return true;
|
|
if (s & 2944 && t & 2944 &&
|
|
source.value === target.value &&
|
|
isEnumTypeRelatedTo(getParentOfSymbol(source.symbol), getParentOfSymbol(target.symbol), errorReporter))
|
|
return true;
|
|
}
|
|
if (s & 32768 && (!strictNullChecks && !(t & 3145728) || t & (32768 | 16384)))
|
|
return true;
|
|
if (s & 65536 && (!strictNullChecks && !(t & 3145728) || t & 65536))
|
|
return true;
|
|
if (s & 524288 && t & 67108864 && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source) && !(ts.getObjectFlags(source) & 8192)))
|
|
return true;
|
|
if (relation === assignableRelation || relation === comparableRelation) {
|
|
if (s & 1)
|
|
return true;
|
|
if (s & (8 | 256) && !(s & 1024) && (t & 32 || relation === assignableRelation && t & 256 && t & 1024))
|
|
return true;
|
|
if (isUnknownLikeUnionType(target))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isTypeRelatedTo(source, target, relation) {
|
|
if (isFreshLiteralType(source)) {
|
|
source = source.regularType;
|
|
}
|
|
if (isFreshLiteralType(target)) {
|
|
target = target.regularType;
|
|
}
|
|
if (source === target) {
|
|
return true;
|
|
}
|
|
if (relation !== identityRelation) {
|
|
if (relation === comparableRelation && !(target.flags & 131072) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation)) {
|
|
return true;
|
|
}
|
|
}
|
|
else if (!((source.flags | target.flags) & (3145728 | 8388608 | 16777216 | 33554432))) {
|
|
if (source.flags !== target.flags)
|
|
return false;
|
|
if (source.flags & 67358815)
|
|
return true;
|
|
}
|
|
if (source.flags & 524288 && target.flags & 524288) {
|
|
var related = relation.get(getRelationKey(source, target, 0, relation, false));
|
|
if (related !== undefined) {
|
|
return !!(related & 1);
|
|
}
|
|
}
|
|
if (source.flags & 469499904 || target.flags & 469499904) {
|
|
return checkTypeRelatedTo(source, target, relation, undefined);
|
|
}
|
|
return false;
|
|
}
|
|
function isIgnoredJsxProperty(source, sourceProp) {
|
|
return ts.getObjectFlags(source) & 2048 && isHyphenatedJsxName(sourceProp.escapedName);
|
|
}
|
|
function getNormalizedType(type, writing) {
|
|
while (true) {
|
|
var t = isFreshLiteralType(type) ? type.regularType :
|
|
ts.getObjectFlags(type) & 4 ? type.node ? createTypeReference(type.target, getTypeArguments(type)) : getSingleBaseForNonAugmentingSubtype(type) || type :
|
|
type.flags & 3145728 ? getNormalizedUnionOrIntersectionType(type, writing) :
|
|
type.flags & 33554432 ? writing ? type.baseType : type.substitute :
|
|
type.flags & 25165824 ? getSimplifiedType(type, writing) :
|
|
type;
|
|
if (t === type)
|
|
return t;
|
|
type = t;
|
|
}
|
|
}
|
|
function getNormalizedUnionOrIntersectionType(type, writing) {
|
|
var reduced = getReducedType(type);
|
|
if (reduced !== type) {
|
|
return reduced;
|
|
}
|
|
if (type.flags & 2097152) {
|
|
var normalizedTypes = ts.sameMap(type.types, function (t) { return getNormalizedType(t, writing); });
|
|
if (normalizedTypes !== type.types) {
|
|
return getIntersectionType(normalizedTypes);
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer) {
|
|
var errorInfo;
|
|
var relatedInfo;
|
|
var maybeKeys;
|
|
var sourceStack;
|
|
var targetStack;
|
|
var maybeCount = 0;
|
|
var sourceDepth = 0;
|
|
var targetDepth = 0;
|
|
var expandingFlags = 0;
|
|
var overflow = false;
|
|
var overrideNextErrorInfo = 0;
|
|
var lastSkippedInfo;
|
|
var incompatibleStack;
|
|
var inPropertyCheck = false;
|
|
ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
|
|
var result = isRelatedTo(source, target, 3, !!errorNode, headMessage);
|
|
if (incompatibleStack) {
|
|
reportIncompatibleStack();
|
|
}
|
|
if (overflow) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "checkTypeRelatedTo_DepthLimit", { sourceId: source.id, targetId: target.id, depth: sourceDepth, targetDepth: targetDepth });
|
|
var diag = error(errorNode || currentNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
|
|
if (errorOutputContainer) {
|
|
(errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
|
|
}
|
|
}
|
|
else if (errorInfo) {
|
|
if (containingMessageChain) {
|
|
var chain = containingMessageChain();
|
|
if (chain) {
|
|
ts.concatenateDiagnosticMessageChains(chain, errorInfo);
|
|
errorInfo = chain;
|
|
}
|
|
}
|
|
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_1 = 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_1);
|
|
}
|
|
}
|
|
}
|
|
var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
|
|
if (relatedInfo) {
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
|
|
}
|
|
if (errorOutputContainer) {
|
|
(errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
|
|
}
|
|
if (!errorOutputContainer || !errorOutputContainer.skipLogging) {
|
|
diagnostics.add(diag);
|
|
}
|
|
}
|
|
if (errorNode && errorOutputContainer && errorOutputContainer.skipLogging && result === 0) {
|
|
ts.Debug.assert(!!errorOutputContainer.errors, "missed opportunity to interact with error.");
|
|
}
|
|
return result !== 0;
|
|
function resetErrorInfo(saved) {
|
|
errorInfo = saved.errorInfo;
|
|
lastSkippedInfo = saved.lastSkippedInfo;
|
|
incompatibleStack = saved.incompatibleStack;
|
|
overrideNextErrorInfo = saved.overrideNextErrorInfo;
|
|
relatedInfo = saved.relatedInfo;
|
|
}
|
|
function captureErrorCalculationState() {
|
|
return {
|
|
errorInfo: errorInfo,
|
|
lastSkippedInfo: lastSkippedInfo,
|
|
incompatibleStack: incompatibleStack === null || incompatibleStack === void 0 ? void 0 : incompatibleStack.slice(),
|
|
overrideNextErrorInfo: overrideNextErrorInfo,
|
|
relatedInfo: relatedInfo === null || relatedInfo === void 0 ? void 0 : relatedInfo.slice(),
|
|
};
|
|
}
|
|
function reportIncompatibleError(message, arg0, arg1, arg2, arg3) {
|
|
overrideNextErrorInfo++;
|
|
lastSkippedInfo = undefined;
|
|
(incompatibleStack || (incompatibleStack = [])).push([message, arg0, arg1, arg2, arg3]);
|
|
}
|
|
function reportIncompatibleStack() {
|
|
var stack = incompatibleStack || [];
|
|
incompatibleStack = undefined;
|
|
var info = lastSkippedInfo;
|
|
lastSkippedInfo = undefined;
|
|
if (stack.length === 1) {
|
|
reportError.apply(void 0, stack[0]);
|
|
if (info) {
|
|
reportRelationError.apply(void 0, __spreadArray([undefined], info, false));
|
|
}
|
|
return;
|
|
}
|
|
var path = "";
|
|
var secondaryRootErrors = [];
|
|
while (stack.length) {
|
|
var _a = stack.pop(), msg = _a[0], args = _a.slice(1);
|
|
switch (msg.code) {
|
|
case ts.Diagnostics.Types_of_property_0_are_incompatible.code: {
|
|
if (path.indexOf("new ") === 0) {
|
|
path = "(".concat(path, ")");
|
|
}
|
|
var str = "" + args[0];
|
|
if (path.length === 0) {
|
|
path = "".concat(str);
|
|
}
|
|
else if (ts.isIdentifierText(str, ts.getEmitScriptTarget(compilerOptions))) {
|
|
path = "".concat(path, ".").concat(str);
|
|
}
|
|
else if (str[0] === "[" && str[str.length - 1] === "]") {
|
|
path = "".concat(path).concat(str);
|
|
}
|
|
else {
|
|
path = "".concat(path, "[").concat(str, "]");
|
|
}
|
|
break;
|
|
}
|
|
case ts.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible.code:
|
|
case ts.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code:
|
|
case ts.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code:
|
|
case ts.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code: {
|
|
if (path.length === 0) {
|
|
var mappedMsg = msg;
|
|
if (msg.code === ts.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code) {
|
|
mappedMsg = ts.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible;
|
|
}
|
|
else if (msg.code === ts.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code) {
|
|
mappedMsg = ts.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible;
|
|
}
|
|
secondaryRootErrors.unshift([mappedMsg, args[0], args[1]]);
|
|
}
|
|
else {
|
|
var prefix = (msg.code === ts.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code ||
|
|
msg.code === ts.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code)
|
|
? "new "
|
|
: "";
|
|
var params = (msg.code === ts.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code ||
|
|
msg.code === ts.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code)
|
|
? ""
|
|
: "...";
|
|
path = "".concat(prefix).concat(path, "(").concat(params, ")");
|
|
}
|
|
break;
|
|
}
|
|
case ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target.code: {
|
|
secondaryRootErrors.unshift([ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, args[0], args[1]]);
|
|
break;
|
|
}
|
|
case ts.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target.code: {
|
|
secondaryRootErrors.unshift([ts.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target, args[0], args[1], args[2]]);
|
|
break;
|
|
}
|
|
default:
|
|
return ts.Debug.fail("Unhandled Diagnostic: ".concat(msg.code));
|
|
}
|
|
}
|
|
if (path) {
|
|
reportError(path[path.length - 1] === ")"
|
|
? ts.Diagnostics.The_types_returned_by_0_are_incompatible_between_these_types
|
|
: ts.Diagnostics.The_types_of_0_are_incompatible_between_these_types, path);
|
|
}
|
|
else {
|
|
secondaryRootErrors.shift();
|
|
}
|
|
for (var _i = 0, secondaryRootErrors_1 = secondaryRootErrors; _i < secondaryRootErrors_1.length; _i++) {
|
|
var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
|
|
var originalValue = msg.elidedInCompatabilityPyramid;
|
|
msg.elidedInCompatabilityPyramid = false;
|
|
reportError.apply(void 0, __spreadArray([msg], args, false));
|
|
msg.elidedInCompatabilityPyramid = originalValue;
|
|
}
|
|
if (info) {
|
|
reportRelationError.apply(void 0, __spreadArray([undefined], info, false));
|
|
}
|
|
}
|
|
function reportError(message, arg0, arg1, arg2, arg3) {
|
|
ts.Debug.assert(!!errorNode);
|
|
if (incompatibleStack)
|
|
reportIncompatibleStack();
|
|
if (message.elidedInCompatabilityPyramid)
|
|
return;
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2, arg3);
|
|
}
|
|
function associateRelatedInfo(info) {
|
|
ts.Debug.assert(!!errorInfo);
|
|
if (!relatedInfo) {
|
|
relatedInfo = [info];
|
|
}
|
|
else {
|
|
relatedInfo.push(info);
|
|
}
|
|
}
|
|
function reportRelationError(message, source, target) {
|
|
if (incompatibleStack)
|
|
reportIncompatibleStack();
|
|
var _a = getTypeNamesForErrorDisplay(source, target), sourceType = _a[0], targetType = _a[1];
|
|
var generalizedSource = source;
|
|
var generalizedSourceType = sourceType;
|
|
if (isLiteralType(source) && !typeCouldHaveTopLevelSingletonTypes(target)) {
|
|
generalizedSource = getBaseTypeOfLiteralType(source);
|
|
ts.Debug.assert(!isTypeAssignableTo(generalizedSource, target), "generalized source shouldn't be assignable");
|
|
generalizedSourceType = getTypeNameForErrorDisplay(generalizedSource);
|
|
}
|
|
if (target.flags & 262144 && target !== markerSuperTypeForCheck && target !== markerSubTypeForCheck) {
|
|
var constraint = getBaseConstraintOfType(target);
|
|
var needsOriginalSource = void 0;
|
|
if (constraint && (isTypeAssignableTo(generalizedSource, constraint) || (needsOriginalSource = isTypeAssignableTo(source, constraint)))) {
|
|
reportError(ts.Diagnostics._0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2, needsOriginalSource ? sourceType : generalizedSourceType, targetType, typeToString(constraint));
|
|
}
|
|
else {
|
|
errorInfo = undefined;
|
|
reportError(ts.Diagnostics._0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1, targetType, generalizedSourceType);
|
|
}
|
|
}
|
|
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 if (exactOptionalPropertyTypes && getExactOptionalUnassignableProperties(source, target).length) {
|
|
message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties;
|
|
}
|
|
else {
|
|
if (source.flags & 128 && target.flags & 1048576) {
|
|
var suggestedType = getSuggestedTypeForNonexistentStringLiteralType(source, target);
|
|
if (suggestedType) {
|
|
reportError(ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Did_you_mean_2, generalizedSourceType, targetType, typeToString(suggestedType));
|
|
return;
|
|
}
|
|
}
|
|
message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
|
|
}
|
|
}
|
|
else if (message === ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1
|
|
&& exactOptionalPropertyTypes
|
|
&& getExactOptionalUnassignableProperties(source, target).length) {
|
|
message = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties;
|
|
}
|
|
reportError(message, generalizedSourceType, targetType);
|
|
}
|
|
function tryElaborateErrorsForPrimitivesAndObjects(source, target) {
|
|
var sourceType = symbolValueDeclarationIsContextSensitive(source.symbol) ? typeToString(source, source.symbol.valueDeclaration) : typeToString(source);
|
|
var targetType = symbolValueDeclarationIsContextSensitive(target.symbol) ? typeToString(target, target.symbol.valueDeclaration) : typeToString(target);
|
|
if ((globalStringType === source && stringType === target) ||
|
|
(globalNumberType === source && numberType === target) ||
|
|
(globalBooleanType === source && booleanType === target) ||
|
|
(getGlobalESSymbolType() === source && esSymbolType === target)) {
|
|
reportError(ts.Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible, targetType, sourceType);
|
|
}
|
|
}
|
|
function tryElaborateArrayLikeErrors(source, target, reportErrors) {
|
|
if (isTupleType(source)) {
|
|
if (source.target.readonly && isMutableArrayOrTuple(target)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1, typeToString(source), typeToString(target));
|
|
}
|
|
return false;
|
|
}
|
|
return isArrayOrTupleType(target);
|
|
}
|
|
if (isReadonlyArrayType(source) && isMutableArrayOrTuple(target)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1, typeToString(source), typeToString(target));
|
|
}
|
|
return false;
|
|
}
|
|
if (isTupleType(target)) {
|
|
return isArrayType(source);
|
|
}
|
|
return true;
|
|
}
|
|
function isRelatedToWorker(source, target, reportErrors) {
|
|
return isRelatedTo(source, target, 3, reportErrors);
|
|
}
|
|
function isRelatedTo(originalSource, originalTarget, recursionFlags, reportErrors, headMessage, intersectionState) {
|
|
if (recursionFlags === void 0) { recursionFlags = 3; }
|
|
if (reportErrors === void 0) { reportErrors = false; }
|
|
if (intersectionState === void 0) { intersectionState = 0; }
|
|
if (originalSource.flags & 524288 && originalTarget.flags & 131068) {
|
|
if (isSimpleTypeRelatedTo(originalSource, originalTarget, relation, reportErrors ? reportError : undefined)) {
|
|
return -1;
|
|
}
|
|
if (reportErrors) {
|
|
reportErrorResults(originalSource, originalTarget, originalSource, originalTarget, headMessage);
|
|
}
|
|
return 0;
|
|
}
|
|
var source = getNormalizedType(originalSource, false);
|
|
var target = getNormalizedType(originalTarget, true);
|
|
if (source === target)
|
|
return -1;
|
|
if (relation === identityRelation) {
|
|
if (source.flags !== target.flags)
|
|
return 0;
|
|
if (source.flags & 67358815)
|
|
return -1;
|
|
traceUnionsOrIntersectionsTooLarge(source, target);
|
|
return recursiveTypeRelatedTo(source, target, false, 0, recursionFlags);
|
|
}
|
|
if (source.flags & 262144 && getConstraintOfType(source) === target) {
|
|
return -1;
|
|
}
|
|
if (source.flags & 470302716 && target.flags & 1048576) {
|
|
var types = target.types;
|
|
var candidate = types.length === 2 && types[0].flags & 98304 ? types[1] :
|
|
types.length === 3 && types[0].flags & 98304 && types[1].flags & 98304 ? types[2] :
|
|
undefined;
|
|
if (candidate && !(candidate.flags & 98304)) {
|
|
target = getNormalizedType(candidate, true);
|
|
if (source === target)
|
|
return -1;
|
|
}
|
|
}
|
|
if (relation === comparableRelation && !(target.flags & 131072) && isSimpleTypeRelatedTo(target, source, relation) ||
|
|
isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined))
|
|
return -1;
|
|
if (source.flags & 469499904 || target.flags & 469499904) {
|
|
var isPerformingExcessPropertyChecks = !(intersectionState & 2) && (isObjectLiteralType(source) && ts.getObjectFlags(source) & 8192);
|
|
if (isPerformingExcessPropertyChecks) {
|
|
if (hasExcessProperties(source, target, reportErrors)) {
|
|
if (reportErrors) {
|
|
reportRelationError(headMessage, source, originalTarget.aliasSymbol ? originalTarget : target);
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
var isPerformingCommonPropertyChecks = relation !== comparableRelation && !(intersectionState & 2) &&
|
|
source.flags & (131068 | 524288 | 2097152) && source !== globalObjectType &&
|
|
target.flags & (524288 | 2097152) && isWeakType(target) &&
|
|
(getPropertiesOfType(source).length > 0 || typeHasCallOrConstructSignatures(source));
|
|
var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 2048);
|
|
if (isPerformingCommonPropertyChecks && !hasCommonProperties(source, target, isComparingJsxAttributes)) {
|
|
if (reportErrors) {
|
|
var sourceString = typeToString(originalSource.aliasSymbol ? originalSource : source);
|
|
var targetString = typeToString(originalTarget.aliasSymbol ? originalTarget : target);
|
|
var calls = getSignaturesOfType(source, 0);
|
|
var constructs = getSignaturesOfType(source, 1);
|
|
if (calls.length > 0 && isRelatedTo(getReturnTypeOfSignature(calls[0]), target, 1, false) ||
|
|
constructs.length > 0 && isRelatedTo(getReturnTypeOfSignature(constructs[0]), target, 1, false)) {
|
|
reportError(ts.Diagnostics.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it, sourceString, targetString);
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics.Type_0_has_no_properties_in_common_with_type_1, sourceString, targetString);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
traceUnionsOrIntersectionsTooLarge(source, target);
|
|
var skipCaching = source.flags & 1048576 && source.types.length < 4 && !(target.flags & 1048576) ||
|
|
target.flags & 1048576 && target.types.length < 4 && !(source.flags & 469499904);
|
|
var result_7 = skipCaching ?
|
|
unionOrIntersectionRelatedTo(source, target, reportErrors, intersectionState) :
|
|
recursiveTypeRelatedTo(source, target, reportErrors, intersectionState, recursionFlags);
|
|
if (result_7 && !inPropertyCheck && (target.flags & 2097152 && (isPerformingExcessPropertyChecks || isPerformingCommonPropertyChecks) ||
|
|
isNonGenericObjectType(target) && !isArrayOrTupleType(target) && source.flags & 2097152 && getApparentType(source).flags & 3670016 && !ts.some(source.types, function (t) { return !!(ts.getObjectFlags(t) & 262144); }))) {
|
|
inPropertyCheck = true;
|
|
result_7 &= recursiveTypeRelatedTo(source, target, reportErrors, 4, recursionFlags);
|
|
inPropertyCheck = false;
|
|
}
|
|
if (result_7) {
|
|
return result_7;
|
|
}
|
|
}
|
|
if (reportErrors) {
|
|
reportErrorResults(originalSource, originalTarget, source, target, headMessage);
|
|
}
|
|
return 0;
|
|
}
|
|
function reportErrorResults(originalSource, originalTarget, source, target, headMessage) {
|
|
var _a, _b;
|
|
var sourceHasBase = !!getSingleBaseForNonAugmentingSubtype(originalSource);
|
|
var targetHasBase = !!getSingleBaseForNonAugmentingSubtype(originalTarget);
|
|
source = (originalSource.aliasSymbol || sourceHasBase) ? originalSource : source;
|
|
target = (originalTarget.aliasSymbol || targetHasBase) ? originalTarget : target;
|
|
var maybeSuppress = overrideNextErrorInfo > 0;
|
|
if (maybeSuppress) {
|
|
overrideNextErrorInfo--;
|
|
}
|
|
if (source.flags & 524288 && target.flags & 524288) {
|
|
var currentError = errorInfo;
|
|
tryElaborateArrayLikeErrors(source, target, true);
|
|
if (errorInfo !== currentError) {
|
|
maybeSuppress = !!errorInfo;
|
|
}
|
|
}
|
|
if (source.flags & 524288 && target.flags & 131068) {
|
|
tryElaborateErrorsForPrimitivesAndObjects(source, target);
|
|
}
|
|
else if (source.symbol && source.flags & 524288 && 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) & 2048 && target.flags & 2097152) {
|
|
var targetTypes = target.types;
|
|
var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, errorNode);
|
|
var intrinsicClassAttributes = getJsxType(JsxNames.IntrinsicClassAttributes, errorNode);
|
|
if (!isErrorType(intrinsicAttributes) && !isErrorType(intrinsicClassAttributes) &&
|
|
(ts.contains(targetTypes, intrinsicAttributes) || ts.contains(targetTypes, intrinsicClassAttributes))) {
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
errorInfo = elaborateNeverIntersection(errorInfo, originalTarget);
|
|
}
|
|
if (!headMessage && maybeSuppress) {
|
|
lastSkippedInfo = [source, target];
|
|
return;
|
|
}
|
|
reportRelationError(headMessage, source, target);
|
|
if (source.flags & 262144 && ((_b = (_a = source.symbol) === null || _a === void 0 ? void 0 : _a.declarations) === null || _b === void 0 ? void 0 : _b[0]) && !getConstraintOfType(source)) {
|
|
var syntheticParam = cloneTypeParameter(source);
|
|
syntheticParam.constraint = instantiateType(target, makeUnaryTypeMapper(source, syntheticParam));
|
|
if (hasNonCircularBaseConstraint(syntheticParam)) {
|
|
var targetConstraintString = typeToString(target, source.symbol.declarations[0]);
|
|
associateRelatedInfo(ts.createDiagnosticForNode(source.symbol.declarations[0], ts.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint, targetConstraintString));
|
|
}
|
|
}
|
|
}
|
|
function traceUnionsOrIntersectionsTooLarge(source, target) {
|
|
if (!ts.tracing) {
|
|
return;
|
|
}
|
|
if ((source.flags & 3145728) && (target.flags & 3145728)) {
|
|
var sourceUnionOrIntersection = source;
|
|
var targetUnionOrIntersection = target;
|
|
if (sourceUnionOrIntersection.objectFlags & targetUnionOrIntersection.objectFlags & 32768) {
|
|
return;
|
|
}
|
|
var sourceSize = sourceUnionOrIntersection.types.length;
|
|
var targetSize = targetUnionOrIntersection.types.length;
|
|
if (sourceSize * targetSize > 1E6) {
|
|
ts.tracing.instant("checkTypes", "traceUnionsOrIntersectionsTooLarge_DepthLimit", {
|
|
sourceId: source.id,
|
|
sourceSize: sourceSize,
|
|
targetId: target.id,
|
|
targetSize: targetSize,
|
|
pos: errorNode === null || errorNode === void 0 ? void 0 : errorNode.pos,
|
|
end: errorNode === null || errorNode === void 0 ? void 0 : errorNode.end
|
|
});
|
|
}
|
|
}
|
|
}
|
|
function getTypeOfPropertyInTypes(types, name) {
|
|
var appendPropType = function (propTypes, type) {
|
|
var _a;
|
|
type = getApparentType(type);
|
|
var prop = type.flags & 3145728 ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
|
|
var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
|
|
return ts.append(propTypes, propType);
|
|
};
|
|
return getUnionType(ts.reduceLeft(types, appendPropType, undefined) || ts.emptyArray);
|
|
}
|
|
function hasExcessProperties(source, target, reportErrors) {
|
|
var _a;
|
|
if (!isExcessPropertyCheckTarget(target) || !noImplicitAny && ts.getObjectFlags(target) & 4096) {
|
|
return false;
|
|
}
|
|
var isComparingJsxAttributes = !!(ts.getObjectFlags(source) & 2048);
|
|
if ((relation === assignableRelation || relation === comparableRelation) &&
|
|
(isTypeSubsetOf(globalObjectType, target) || (!isComparingJsxAttributes && isEmptyObjectType(target)))) {
|
|
return false;
|
|
}
|
|
var reducedTarget = target;
|
|
var checkTypes;
|
|
if (target.flags & 1048576) {
|
|
reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
|
|
checkTypes = reducedTarget.flags & 1048576 ? reducedTarget.types : [reducedTarget];
|
|
}
|
|
var _loop_20 = function (prop) {
|
|
if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
|
|
if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
|
|
if (reportErrors) {
|
|
var errorTarget = filterType(reducedTarget, isExcessPropertyCheckTarget);
|
|
if (!errorNode)
|
|
return { value: ts.Debug.fail() };
|
|
if (ts.isJsxAttributes(errorNode) || ts.isJsxOpeningLikeElement(errorNode) || ts.isJsxOpeningLikeElement(errorNode.parent)) {
|
|
if (prop.valueDeclaration && ts.isJsxAttribute(prop.valueDeclaration) && ts.getSourceFileOfNode(errorNode) === ts.getSourceFileOfNode(prop.valueDeclaration.name)) {
|
|
errorNode = prop.valueDeclaration.name;
|
|
}
|
|
var propName = symbolToString(prop);
|
|
var suggestionSymbol = getSuggestedSymbolForNonexistentJSXAttribute(propName, errorTarget);
|
|
var suggestion = suggestionSymbol ? symbolToString(suggestionSymbol) : undefined;
|
|
if (suggestion) {
|
|
reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, propName, typeToString(errorTarget), suggestion);
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, propName, typeToString(errorTarget));
|
|
}
|
|
}
|
|
else {
|
|
var objectLiteralDeclaration_1 = ((_a = source.symbol) === null || _a === void 0 ? void 0 : _a.declarations) && ts.firstOrUndefined(source.symbol.declarations);
|
|
var suggestion = void 0;
|
|
if (prop.valueDeclaration && ts.findAncestor(prop.valueDeclaration, function (d) { return d === objectLiteralDeclaration_1; }) && ts.getSourceFileOfNode(objectLiteralDeclaration_1) === ts.getSourceFileOfNode(errorNode)) {
|
|
var propDeclaration = prop.valueDeclaration;
|
|
ts.Debug.assertNode(propDeclaration, ts.isObjectLiteralElementLike);
|
|
errorNode = propDeclaration;
|
|
var name = propDeclaration.name;
|
|
if (ts.isIdentifier(name)) {
|
|
suggestion = getSuggestionForNonexistentProperty(name, errorTarget);
|
|
}
|
|
}
|
|
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(errorTarget), suggestion);
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(errorTarget));
|
|
}
|
|
}
|
|
}
|
|
return { value: true };
|
|
}
|
|
if (checkTypes && !isRelatedTo(getTypeOfSymbol(prop), getTypeOfPropertyInTypes(checkTypes, prop.escapedName), 3, reportErrors)) {
|
|
if (reportErrors) {
|
|
reportIncompatibleError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(prop));
|
|
}
|
|
return { value: true };
|
|
}
|
|
}
|
|
};
|
|
for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
|
|
var prop = _b[_i];
|
|
var state_6 = _loop_20(prop);
|
|
if (typeof state_6 === "object")
|
|
return state_6.value;
|
|
}
|
|
return false;
|
|
}
|
|
function shouldCheckAsExcessProperty(prop, container) {
|
|
return prop.valueDeclaration && container.valueDeclaration && prop.valueDeclaration.parent === container.valueDeclaration;
|
|
}
|
|
function unionOrIntersectionRelatedTo(source, target, reportErrors, intersectionState) {
|
|
if (source.flags & 1048576) {
|
|
return relation === comparableRelation ?
|
|
someTypeRelatedToType(source, target, reportErrors && !(source.flags & 131068), intersectionState) :
|
|
eachTypeRelatedToType(source, target, reportErrors && !(source.flags & 131068), intersectionState);
|
|
}
|
|
if (target.flags & 1048576) {
|
|
return typeRelatedToSomeType(getRegularTypeOfObjectLiteral(source), target, reportErrors && !(source.flags & 131068) && !(target.flags & 131068));
|
|
}
|
|
if (target.flags & 2097152) {
|
|
return typeRelatedToEachType(source, target, reportErrors, 2);
|
|
}
|
|
if (relation === comparableRelation && target.flags & 131068) {
|
|
var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
|
|
if (constraints !== source.types) {
|
|
source = getIntersectionType(constraints);
|
|
if (!(source.flags & 2097152)) {
|
|
return isRelatedTo(source, target, 1, false);
|
|
}
|
|
}
|
|
}
|
|
return someTypeRelatedToType(source, target, false, 1);
|
|
}
|
|
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 & 1048576) {
|
|
if (containsType(targetTypes, source)) {
|
|
return -1;
|
|
}
|
|
var match = getMatchingUnionConstituentForType(target, source);
|
|
if (match) {
|
|
var related = isRelatedTo(source, match, 2, false);
|
|
if (related) {
|
|
return related;
|
|
}
|
|
}
|
|
}
|
|
for (var _i = 0, targetTypes_1 = targetTypes; _i < targetTypes_1.length; _i++) {
|
|
var type = targetTypes_1[_i];
|
|
var related = isRelatedTo(source, type, 2, false);
|
|
if (related) {
|
|
return related;
|
|
}
|
|
}
|
|
if (reportErrors) {
|
|
var bestMatchingType = getBestMatchingType(source, target, isRelatedTo);
|
|
if (bestMatchingType) {
|
|
isRelatedTo(source, bestMatchingType, 2, true);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
function typeRelatedToEachType(source, target, reportErrors, intersectionState) {
|
|
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, 2, reportErrors, undefined, intersectionState);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
return result;
|
|
}
|
|
function someTypeRelatedToType(source, target, reportErrors, intersectionState) {
|
|
var sourceTypes = source.types;
|
|
if (source.flags & 1048576 && containsType(sourceTypes, target)) {
|
|
return -1;
|
|
}
|
|
var len = sourceTypes.length;
|
|
for (var i = 0; i < len; i++) {
|
|
var related = isRelatedTo(sourceTypes[i], target, 1, reportErrors && i === len - 1, undefined, intersectionState);
|
|
if (related) {
|
|
return related;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
function getUndefinedStrippedTargetIfNeeded(source, target) {
|
|
if (source.flags & 1048576 && target.flags & 1048576 &&
|
|
!(source.types[0].flags & 32768) && target.types[0].flags & 32768) {
|
|
return extractTypesOfKind(target, ~32768);
|
|
}
|
|
return target;
|
|
}
|
|
function eachTypeRelatedToType(source, target, reportErrors, intersectionState) {
|
|
var result = -1;
|
|
var sourceTypes = source.types;
|
|
var undefinedStrippedTarget = getUndefinedStrippedTargetIfNeeded(source, target);
|
|
for (var i = 0; i < sourceTypes.length; i++) {
|
|
var sourceType = sourceTypes[i];
|
|
if (undefinedStrippedTarget.flags & 1048576 && sourceTypes.length >= undefinedStrippedTarget.types.length && sourceTypes.length % undefinedStrippedTarget.types.length === 0) {
|
|
var related_1 = isRelatedTo(sourceType, undefinedStrippedTarget.types[i % undefinedStrippedTarget.types.length], 3, false, undefined, intersectionState);
|
|
if (related_1) {
|
|
result &= related_1;
|
|
continue;
|
|
}
|
|
}
|
|
var related = isRelatedTo(sourceType, target, 1, reportErrors, undefined, intersectionState);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
return result;
|
|
}
|
|
function typeArgumentsRelatedTo(sources, targets, variances, reportErrors, intersectionState) {
|
|
if (sources === void 0) { sources = ts.emptyArray; }
|
|
if (targets === void 0) { targets = ts.emptyArray; }
|
|
if (variances === void 0) { variances = 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 varianceFlags = i < variances.length ? variances[i] : 1;
|
|
var variance = varianceFlags & 7;
|
|
if (variance !== 4) {
|
|
var s = sources[i];
|
|
var t = targets[i];
|
|
var related = -1;
|
|
if (varianceFlags & 8) {
|
|
related = relation === identityRelation ? isRelatedTo(s, t, 3, false) : compareTypesIdentical(s, t);
|
|
}
|
|
else if (variance === 1) {
|
|
related = isRelatedTo(s, t, 3, reportErrors, undefined, intersectionState);
|
|
}
|
|
else if (variance === 2) {
|
|
related = isRelatedTo(t, s, 3, reportErrors, undefined, intersectionState);
|
|
}
|
|
else if (variance === 3) {
|
|
related = isRelatedTo(t, s, 3, false);
|
|
if (!related) {
|
|
related = isRelatedTo(s, t, 3, reportErrors, undefined, intersectionState);
|
|
}
|
|
}
|
|
else {
|
|
related = isRelatedTo(s, t, 3, reportErrors, undefined, intersectionState);
|
|
if (related) {
|
|
related &= isRelatedTo(t, s, 3, reportErrors, undefined, intersectionState);
|
|
}
|
|
}
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function recursiveTypeRelatedTo(source, target, reportErrors, intersectionState, recursionFlags) {
|
|
if (overflow) {
|
|
return 0;
|
|
}
|
|
var keyIntersectionState = intersectionState | (inPropertyCheck ? 8 : 0);
|
|
var id = getRelationKey(source, target, keyIntersectionState, relation, false);
|
|
var entry = relation.get(id);
|
|
if (entry !== undefined) {
|
|
if (reportErrors && entry & 2 && !(entry & 4)) {
|
|
}
|
|
else {
|
|
if (outofbandVarianceMarkerHandler) {
|
|
var saved = entry & 24;
|
|
if (saved & 8) {
|
|
instantiateType(source, reportUnmeasurableMapper);
|
|
}
|
|
if (saved & 16) {
|
|
instantiateType(source, reportUnreliableMapper);
|
|
}
|
|
}
|
|
return entry & 1 ? -1 : 0;
|
|
}
|
|
}
|
|
if (!maybeKeys) {
|
|
maybeKeys = [];
|
|
sourceStack = [];
|
|
targetStack = [];
|
|
}
|
|
else {
|
|
var broadestEquivalentId = id.startsWith("*") ? getRelationKey(source, target, keyIntersectionState, relation, true) : undefined;
|
|
for (var i = 0; i < maybeCount; i++) {
|
|
if (id === maybeKeys[i] || broadestEquivalentId && broadestEquivalentId === maybeKeys[i]) {
|
|
return 3;
|
|
}
|
|
}
|
|
if (sourceDepth === 100 || targetDepth === 100) {
|
|
overflow = true;
|
|
return 0;
|
|
}
|
|
}
|
|
var maybeStart = maybeCount;
|
|
maybeKeys[maybeCount] = id;
|
|
maybeCount++;
|
|
var saveExpandingFlags = expandingFlags;
|
|
if (recursionFlags & 1) {
|
|
sourceStack[sourceDepth] = source;
|
|
sourceDepth++;
|
|
if (!(expandingFlags & 1) && isDeeplyNestedType(source, sourceStack, sourceDepth))
|
|
expandingFlags |= 1;
|
|
}
|
|
if (recursionFlags & 2) {
|
|
targetStack[targetDepth] = target;
|
|
targetDepth++;
|
|
if (!(expandingFlags & 2) && isDeeplyNestedType(target, targetStack, targetDepth))
|
|
expandingFlags |= 2;
|
|
}
|
|
var originalHandler;
|
|
var propagatingVarianceFlags = 0;
|
|
if (outofbandVarianceMarkerHandler) {
|
|
originalHandler = outofbandVarianceMarkerHandler;
|
|
outofbandVarianceMarkerHandler = function (onlyUnreliable) {
|
|
propagatingVarianceFlags |= onlyUnreliable ? 16 : 8;
|
|
return originalHandler(onlyUnreliable);
|
|
};
|
|
}
|
|
var result;
|
|
if (expandingFlags === 3) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "recursiveTypeRelatedTo_DepthLimit", {
|
|
sourceId: source.id,
|
|
sourceIdStack: sourceStack.map(function (t) { return t.id; }),
|
|
targetId: target.id,
|
|
targetIdStack: targetStack.map(function (t) { return t.id; }),
|
|
depth: sourceDepth,
|
|
targetDepth: targetDepth
|
|
});
|
|
result = 3;
|
|
}
|
|
else {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("checkTypes", "structuredTypeRelatedTo", { sourceId: source.id, targetId: target.id });
|
|
result = structuredTypeRelatedTo(source, target, reportErrors, intersectionState);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
if (outofbandVarianceMarkerHandler) {
|
|
outofbandVarianceMarkerHandler = originalHandler;
|
|
}
|
|
if (recursionFlags & 1) {
|
|
sourceDepth--;
|
|
}
|
|
if (recursionFlags & 2) {
|
|
targetDepth--;
|
|
}
|
|
expandingFlags = saveExpandingFlags;
|
|
if (result) {
|
|
if (result === -1 || (sourceDepth === 0 && targetDepth === 0)) {
|
|
if (result === -1 || result === 3) {
|
|
for (var i = maybeStart; i < maybeCount; i++) {
|
|
relation.set(maybeKeys[i], 1 | propagatingVarianceFlags);
|
|
}
|
|
}
|
|
maybeCount = maybeStart;
|
|
}
|
|
}
|
|
else {
|
|
relation.set(id, (reportErrors ? 4 : 0) | 2 | propagatingVarianceFlags);
|
|
maybeCount = maybeStart;
|
|
}
|
|
return result;
|
|
}
|
|
function structuredTypeRelatedTo(source, target, reportErrors, intersectionState) {
|
|
var saveErrorInfo = captureErrorCalculationState();
|
|
var result = structuredTypeRelatedToWorker(source, target, reportErrors, intersectionState, saveErrorInfo);
|
|
if (!result && (source.flags & 2097152 || source.flags & 262144 && target.flags & 1048576)) {
|
|
var constraint = getEffectiveConstraintOfIntersection(source.flags & 2097152 ? source.types : [source], !!(target.flags & 1048576));
|
|
if (constraint && everyType(constraint, function (c) { return c !== source; })) {
|
|
result = isRelatedTo(constraint, target, 1, false, undefined, intersectionState);
|
|
}
|
|
}
|
|
if (result) {
|
|
resetErrorInfo(saveErrorInfo);
|
|
}
|
|
return result;
|
|
}
|
|
function structuredTypeRelatedToWorker(source, target, reportErrors, intersectionState, saveErrorInfo) {
|
|
if (intersectionState & 4) {
|
|
return propertiesRelatedTo(source, target, reportErrors, undefined, 0);
|
|
}
|
|
var result;
|
|
var originalErrorInfo;
|
|
var varianceCheckFailed = false;
|
|
var sourceFlags = source.flags;
|
|
var targetFlags = target.flags;
|
|
if (relation === identityRelation) {
|
|
if (sourceFlags & 3145728) {
|
|
var result_8 = eachTypeRelatedToSomeType(source, target);
|
|
if (result_8) {
|
|
result_8 &= eachTypeRelatedToSomeType(target, source);
|
|
}
|
|
return result_8;
|
|
}
|
|
if (sourceFlags & 4194304) {
|
|
return isRelatedTo(source.type, target.type, 3, false);
|
|
}
|
|
if (sourceFlags & 8388608) {
|
|
if (result = isRelatedTo(source.objectType, target.objectType, 3, false)) {
|
|
if (result &= isRelatedTo(source.indexType, target.indexType, 3, false)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
if (sourceFlags & 16777216) {
|
|
if (source.root.isDistributive === target.root.isDistributive) {
|
|
if (result = isRelatedTo(source.checkType, target.checkType, 3, false)) {
|
|
if (result &= isRelatedTo(source.extendsType, target.extendsType, 3, false)) {
|
|
if (result &= isRelatedTo(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target), 3, false)) {
|
|
if (result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), 3, false)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (sourceFlags & 33554432) {
|
|
return isRelatedTo(source.substitute, target.substitute, 3, false);
|
|
}
|
|
if (!(sourceFlags & 524288)) {
|
|
return 0;
|
|
}
|
|
}
|
|
else if (sourceFlags & 3145728 || targetFlags & 3145728) {
|
|
if (result = unionOrIntersectionRelatedTo(source, target, reportErrors, intersectionState)) {
|
|
return result;
|
|
}
|
|
if (!(sourceFlags & 465829888 ||
|
|
sourceFlags & 524288 && targetFlags & 1048576 ||
|
|
sourceFlags & 2097152 && targetFlags & (524288 | 1048576 | 465829888))) {
|
|
return 0;
|
|
}
|
|
}
|
|
if (sourceFlags & (524288 | 16777216) && source.aliasSymbol && source.aliasTypeArguments &&
|
|
source.aliasSymbol === target.aliasSymbol && !(isMarkerType(source) || isMarkerType(target))) {
|
|
var variances = getAliasVariances(source.aliasSymbol);
|
|
if (variances === ts.emptyArray) {
|
|
return 1;
|
|
}
|
|
var varianceResult = relateVariances(source.aliasTypeArguments, target.aliasTypeArguments, variances, intersectionState);
|
|
if (varianceResult !== undefined) {
|
|
return varianceResult;
|
|
}
|
|
}
|
|
if (isSingleElementGenericTupleType(source) && !source.target.readonly && (result = isRelatedTo(getTypeArguments(source)[0], target, 1)) ||
|
|
isSingleElementGenericTupleType(target) && (target.target.readonly || isMutableArrayOrTuple(getBaseConstraintOfType(source) || source)) && (result = isRelatedTo(source, getTypeArguments(target)[0], 2))) {
|
|
return result;
|
|
}
|
|
if (targetFlags & 262144) {
|
|
if (ts.getObjectFlags(source) & 32 && !source.declaration.nameType && isRelatedTo(getIndexType(target), getConstraintTypeFromMappedType(source), 3)) {
|
|
if (!(getMappedTypeModifiers(source) & 4)) {
|
|
var templateType = getTemplateTypeFromMappedType(source);
|
|
var indexedAccessType = getIndexedAccessType(target, getTypeParameterFromMappedType(source));
|
|
if (result = isRelatedTo(templateType, indexedAccessType, 3, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
if (relation === comparableRelation && sourceFlags & 262144) {
|
|
var constraint = getConstraintOfTypeParameter(source);
|
|
if (constraint && hasNonCircularBaseConstraint(source)) {
|
|
while (constraint && constraint.flags & 262144) {
|
|
if (result = isRelatedTo(constraint, target, 1, false)) {
|
|
return result;
|
|
}
|
|
constraint = getConstraintOfTypeParameter(constraint);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
else if (targetFlags & 4194304) {
|
|
var targetType_1 = target.type;
|
|
if (sourceFlags & 4194304) {
|
|
if (result = isRelatedTo(targetType_1, source.type, 3, false)) {
|
|
return result;
|
|
}
|
|
}
|
|
if (isTupleType(targetType_1)) {
|
|
if (result = isRelatedTo(source, getKnownKeysOfTupleType(targetType_1), 2, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
else {
|
|
var constraint = getSimplifiedTypeOrConstraint(targetType_1);
|
|
if (constraint) {
|
|
if (isRelatedTo(source, getIndexType(constraint, target.stringsOnly), 2, reportErrors) === -1) {
|
|
return -1;
|
|
}
|
|
}
|
|
else if (isGenericMappedType(targetType_1)) {
|
|
var nameType_1 = getNameTypeFromMappedType(targetType_1);
|
|
var constraintType = getConstraintTypeFromMappedType(targetType_1);
|
|
var targetKeys = void 0;
|
|
if (nameType_1 && isMappedTypeWithKeyofConstraintDeclaration(targetType_1)) {
|
|
var modifiersType = getApparentType(getModifiersTypeFromMappedType(targetType_1));
|
|
var mappedKeys_1 = [];
|
|
forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, 8576, false, function (t) { return void mappedKeys_1.push(instantiateType(nameType_1, appendTypeMapping(targetType_1.mapper, getTypeParameterFromMappedType(targetType_1), t))); });
|
|
targetKeys = getUnionType(__spreadArray(__spreadArray([], mappedKeys_1, true), [nameType_1], false));
|
|
}
|
|
else {
|
|
targetKeys = nameType_1 || constraintType;
|
|
}
|
|
if (isRelatedTo(source, targetKeys, 2, reportErrors) === -1) {
|
|
return -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (targetFlags & 8388608) {
|
|
if (sourceFlags & 8388608) {
|
|
if (result = isRelatedTo(source.objectType, target.objectType, 3, reportErrors)) {
|
|
result &= isRelatedTo(source.indexType, target.indexType, 3, reportErrors);
|
|
}
|
|
if (result) {
|
|
return result;
|
|
}
|
|
if (reportErrors) {
|
|
originalErrorInfo = errorInfo;
|
|
}
|
|
}
|
|
if (relation === assignableRelation || relation === comparableRelation) {
|
|
var objectType = target.objectType;
|
|
var indexType = target.indexType;
|
|
var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
|
|
var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
|
|
if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
|
|
var accessFlags = 4 | (baseObjectType !== objectType ? 2 : 0);
|
|
var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
|
|
if (constraint) {
|
|
if (reportErrors && originalErrorInfo) {
|
|
resetErrorInfo(saveErrorInfo);
|
|
}
|
|
if (result = isRelatedTo(source, constraint, 2, reportErrors)) {
|
|
return result;
|
|
}
|
|
if (reportErrors && originalErrorInfo && errorInfo) {
|
|
errorInfo = countMessageChainBreadth([originalErrorInfo]) <= countMessageChainBreadth([errorInfo]) ? originalErrorInfo : errorInfo;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (reportErrors) {
|
|
originalErrorInfo = undefined;
|
|
}
|
|
}
|
|
else if (isGenericMappedType(target) && relation !== identityRelation) {
|
|
var keysRemapped = !!target.declaration.nameType;
|
|
var templateType = getTemplateTypeFromMappedType(target);
|
|
var modifiers = getMappedTypeModifiers(target);
|
|
if (!(modifiers & 8)) {
|
|
if (!keysRemapped && templateType.flags & 8388608 && templateType.objectType === source &&
|
|
templateType.indexType === getTypeParameterFromMappedType(target)) {
|
|
return -1;
|
|
}
|
|
if (!isGenericMappedType(source)) {
|
|
var targetKeys = keysRemapped ? getNameTypeFromMappedType(target) : getConstraintTypeFromMappedType(target);
|
|
var sourceKeys = getIndexType(source, undefined, true);
|
|
var includeOptional = modifiers & 4;
|
|
var filteredByApplicability = includeOptional ? intersectTypes(targetKeys, sourceKeys) : undefined;
|
|
if (includeOptional
|
|
? !(filteredByApplicability.flags & 131072)
|
|
: isRelatedTo(targetKeys, sourceKeys, 3)) {
|
|
var templateType_1 = getTemplateTypeFromMappedType(target);
|
|
var typeParameter = getTypeParameterFromMappedType(target);
|
|
var nonNullComponent = extractTypesOfKind(templateType_1, ~98304);
|
|
if (!keysRemapped && nonNullComponent.flags & 8388608 && nonNullComponent.indexType === typeParameter) {
|
|
if (result = isRelatedTo(source, nonNullComponent.objectType, 2, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
else {
|
|
var indexingType = keysRemapped
|
|
? (filteredByApplicability || targetKeys)
|
|
: filteredByApplicability
|
|
? getIntersectionType([filteredByApplicability, typeParameter])
|
|
: typeParameter;
|
|
var indexedAccessType = getIndexedAccessType(source, indexingType);
|
|
if (result = isRelatedTo(indexedAccessType, templateType_1, 3, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
originalErrorInfo = errorInfo;
|
|
resetErrorInfo(saveErrorInfo);
|
|
}
|
|
}
|
|
}
|
|
else if (targetFlags & 16777216) {
|
|
if (isDeeplyNestedType(target, targetStack, targetDepth, 10)) {
|
|
return 3;
|
|
}
|
|
var c = target;
|
|
if (!c.root.inferTypeParameters && !isDistributionDependent(c.root)) {
|
|
var skipTrue = !isTypeAssignableTo(getPermissiveInstantiation(c.checkType), getPermissiveInstantiation(c.extendsType));
|
|
var skipFalse = !skipTrue && isTypeAssignableTo(getRestrictiveInstantiation(c.checkType), getRestrictiveInstantiation(c.extendsType));
|
|
if (result = skipTrue ? -1 : isRelatedTo(source, getTrueTypeFromConditionalType(c), 2, false)) {
|
|
result &= skipFalse ? -1 : isRelatedTo(source, getFalseTypeFromConditionalType(c), 2, false);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (targetFlags & 134217728) {
|
|
if (sourceFlags & 134217728) {
|
|
if (relation === comparableRelation) {
|
|
return templateLiteralTypesDefinitelyUnrelated(source, target) ? 0 : -1;
|
|
}
|
|
instantiateType(source, reportUnreliableMapper);
|
|
}
|
|
if (isTypeMatchedByTemplateLiteralType(source, target)) {
|
|
return -1;
|
|
}
|
|
}
|
|
else if (target.flags & 268435456) {
|
|
if (!(source.flags & 268435456)) {
|
|
if (isMemberOfStringMapping(source, target)) {
|
|
return -1;
|
|
}
|
|
}
|
|
}
|
|
if (sourceFlags & 8650752) {
|
|
if (!(sourceFlags & 8388608 && targetFlags & 8388608)) {
|
|
var constraint = getConstraintOfType(source) || unknownType;
|
|
if (result = isRelatedTo(constraint, target, 1, false, undefined, intersectionState)) {
|
|
return result;
|
|
}
|
|
else if (result = isRelatedTo(getTypeWithThisArgument(constraint, source), target, 1, reportErrors && constraint !== unknownType && !(targetFlags & sourceFlags & 262144), undefined, intersectionState)) {
|
|
return result;
|
|
}
|
|
if (isMappedTypeGenericIndexedAccess(source)) {
|
|
var indexConstraint = getConstraintOfType(source.indexType);
|
|
if (indexConstraint) {
|
|
if (result = isRelatedTo(getIndexedAccessType(source.objectType, indexConstraint), target, 1, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (sourceFlags & 4194304) {
|
|
if (result = isRelatedTo(keyofConstraintType, target, 1, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
else if (sourceFlags & 134217728 && !(targetFlags & 524288)) {
|
|
if (!(targetFlags & 134217728)) {
|
|
var constraint = getBaseConstraintOfType(source);
|
|
if (constraint && constraint !== source && (result = isRelatedTo(constraint, target, 1, reportErrors))) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
else if (sourceFlags & 268435456) {
|
|
if (targetFlags & 268435456) {
|
|
if (source.symbol !== target.symbol) {
|
|
return 0;
|
|
}
|
|
if (result = isRelatedTo(source.type, target.type, 3, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
else {
|
|
var constraint = getBaseConstraintOfType(source);
|
|
if (constraint && (result = isRelatedTo(constraint, target, 1, reportErrors))) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
else if (sourceFlags & 16777216) {
|
|
if (isDeeplyNestedType(source, sourceStack, sourceDepth, 10)) {
|
|
return 3;
|
|
}
|
|
if (targetFlags & 16777216) {
|
|
var sourceParams = source.root.inferTypeParameters;
|
|
var sourceExtends = source.extendsType;
|
|
var mapper = void 0;
|
|
if (sourceParams) {
|
|
var ctx = createInferenceContext(sourceParams, undefined, 0, isRelatedToWorker);
|
|
inferTypes(ctx.inferences, target.extendsType, sourceExtends, 512 | 1024);
|
|
sourceExtends = instantiateType(sourceExtends, ctx.mapper);
|
|
mapper = ctx.mapper;
|
|
}
|
|
if (isTypeIdenticalTo(sourceExtends, target.extendsType) &&
|
|
(isRelatedTo(source.checkType, target.checkType, 3) || isRelatedTo(target.checkType, source.checkType, 3))) {
|
|
if (result = isRelatedTo(instantiateType(getTrueTypeFromConditionalType(source), mapper), getTrueTypeFromConditionalType(target), 3, reportErrors)) {
|
|
result &= isRelatedTo(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target), 3, reportErrors);
|
|
}
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var distributiveConstraint = hasNonCircularBaseConstraint(source) ? getConstraintOfDistributiveConditionalType(source) : undefined;
|
|
if (distributiveConstraint) {
|
|
if (result = isRelatedTo(distributiveConstraint, target, 1, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
var defaultConstraint = getDefaultConstraintOfConditionalType(source);
|
|
if (defaultConstraint) {
|
|
if (result = isRelatedTo(defaultConstraint, target, 1, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (relation !== subtypeRelation && relation !== strictSubtypeRelation && isPartialMappedType(target) && isEmptyObjectType(source)) {
|
|
return -1;
|
|
}
|
|
if (isGenericMappedType(target)) {
|
|
if (isGenericMappedType(source)) {
|
|
if (result = mappedTypeRelatedTo(source, target, reportErrors)) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
var sourceIsPrimitive = !!(sourceFlags & 131068);
|
|
if (relation !== identityRelation) {
|
|
source = getApparentType(source);
|
|
sourceFlags = source.flags;
|
|
}
|
|
else if (isGenericMappedType(source)) {
|
|
return 0;
|
|
}
|
|
if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && source.target === target.target &&
|
|
!isTupleType(source) && !(isMarkerType(source) || isMarkerType(target))) {
|
|
if (isEmptyArrayLiteralType(source)) {
|
|
return -1;
|
|
}
|
|
var variances = getVariances(source.target);
|
|
if (variances === ts.emptyArray) {
|
|
return 1;
|
|
}
|
|
var varianceResult = relateVariances(getTypeArguments(source), getTypeArguments(target), variances, intersectionState);
|
|
if (varianceResult !== undefined) {
|
|
return varianceResult;
|
|
}
|
|
}
|
|
else if (isReadonlyArrayType(target) ? isArrayOrTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
|
|
if (relation !== identityRelation) {
|
|
return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, 3, reportErrors);
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
else if ((relation === subtypeRelation || relation === strictSubtypeRelation) && isEmptyObjectType(target) && ts.getObjectFlags(target) & 8192 && !isEmptyObjectType(source)) {
|
|
return 0;
|
|
}
|
|
if (sourceFlags & (524288 | 2097152) && targetFlags & 524288) {
|
|
var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo.errorInfo && !sourceIsPrimitive;
|
|
result = propertiesRelatedTo(source, target, reportStructuralErrors, undefined, intersectionState);
|
|
if (result) {
|
|
result &= signaturesRelatedTo(source, target, 0, reportStructuralErrors);
|
|
if (result) {
|
|
result &= signaturesRelatedTo(source, target, 1, reportStructuralErrors);
|
|
if (result) {
|
|
result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
|
|
}
|
|
}
|
|
}
|
|
if (varianceCheckFailed && result) {
|
|
errorInfo = originalErrorInfo || errorInfo || saveErrorInfo.errorInfo;
|
|
}
|
|
else if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
if (sourceFlags & (524288 | 2097152) && targetFlags & 1048576) {
|
|
var objectOnlyTarget = extractTypesOfKind(target, 524288 | 2097152 | 33554432);
|
|
if (objectOnlyTarget.flags & 1048576) {
|
|
var result_9 = typeRelatedToDiscriminatedType(source, objectOnlyTarget);
|
|
if (result_9) {
|
|
return result_9;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
function countMessageChainBreadth(info) {
|
|
if (!info)
|
|
return 0;
|
|
return ts.reduceLeft(info, function (value, chain) { return value + 1 + countMessageChainBreadth(chain.next); }, 0);
|
|
}
|
|
function relateVariances(sourceTypeArguments, targetTypeArguments, variances, intersectionState) {
|
|
if (result = typeArgumentsRelatedTo(sourceTypeArguments, targetTypeArguments, variances, reportErrors, intersectionState)) {
|
|
return result;
|
|
}
|
|
if (ts.some(variances, function (v) { return !!(v & 24); })) {
|
|
originalErrorInfo = undefined;
|
|
resetErrorInfo(saveErrorInfo);
|
|
return undefined;
|
|
}
|
|
var allowStructuralFallback = targetTypeArguments && hasCovariantVoidArgument(targetTypeArguments, variances);
|
|
varianceCheckFailed = !allowStructuralFallback;
|
|
if (variances !== ts.emptyArray && !allowStructuralFallback) {
|
|
if (varianceCheckFailed && !(reportErrors && ts.some(variances, function (v) { return (v & 7) === 0; }))) {
|
|
return 0;
|
|
}
|
|
originalErrorInfo = errorInfo;
|
|
resetErrorInfo(saveErrorInfo);
|
|
}
|
|
}
|
|
}
|
|
function mappedTypeRelatedTo(source, target, reportErrors) {
|
|
var modifiersRelated = relation === comparableRelation || (relation === identityRelation ? getMappedTypeModifiers(source) === getMappedTypeModifiers(target) :
|
|
getCombinedMappedTypeOptionality(source) <= getCombinedMappedTypeOptionality(target));
|
|
if (modifiersRelated) {
|
|
var result_10;
|
|
var targetConstraint = getConstraintTypeFromMappedType(target);
|
|
var sourceConstraint = instantiateType(getConstraintTypeFromMappedType(source), getCombinedMappedTypeOptionality(source) < 0 ? reportUnmeasurableMapper : reportUnreliableMapper);
|
|
if (result_10 = isRelatedTo(targetConstraint, sourceConstraint, 3, reportErrors)) {
|
|
var mapper = createTypeMapper([getTypeParameterFromMappedType(source)], [getTypeParameterFromMappedType(target)]);
|
|
if (instantiateType(getNameTypeFromMappedType(source), mapper) === instantiateType(getNameTypeFromMappedType(target), mapper)) {
|
|
return result_10 & isRelatedTo(instantiateType(getTemplateTypeFromMappedType(source), mapper), getTemplateTypeFromMappedType(target), 3, reportErrors);
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
function typeRelatedToDiscriminatedType(source, target) {
|
|
var sourceProperties = getPropertiesOfType(source);
|
|
var sourcePropertiesFiltered = findDiscriminantProperties(sourceProperties, target);
|
|
if (!sourcePropertiesFiltered)
|
|
return 0;
|
|
var numCombinations = 1;
|
|
for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
|
|
var sourceProperty = sourcePropertiesFiltered_1[_i];
|
|
numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
|
|
if (numCombinations > 25) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
|
|
return 0;
|
|
}
|
|
}
|
|
var sourceDiscriminantTypes = new Array(sourcePropertiesFiltered.length);
|
|
var excludedProperties = new ts.Set();
|
|
for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
|
|
var sourceProperty = sourcePropertiesFiltered[i];
|
|
var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
|
|
sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576
|
|
? sourcePropertyType.types
|
|
: [sourcePropertyType];
|
|
excludedProperties.add(sourceProperty.escapedName);
|
|
}
|
|
var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
|
|
var matchingTypes = [];
|
|
var _loop_21 = function (combination) {
|
|
var hasMatch = false;
|
|
outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
|
|
var type = _d[_c];
|
|
var _loop_22 = function (i) {
|
|
var sourceProperty = sourcePropertiesFiltered[i];
|
|
var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
|
|
if (!targetProperty)
|
|
return "continue-outer";
|
|
if (sourceProperty === targetProperty)
|
|
return "continue";
|
|
var related = propertyRelatedTo(source, target, sourceProperty, targetProperty, function (_) { return combination[i]; }, false, 0, strictNullChecks || relation === comparableRelation);
|
|
if (!related) {
|
|
return "continue-outer";
|
|
}
|
|
};
|
|
for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
|
|
var state_8 = _loop_22(i);
|
|
switch (state_8) {
|
|
case "continue-outer": continue outer;
|
|
}
|
|
}
|
|
ts.pushIfUnique(matchingTypes, type, ts.equateValues);
|
|
hasMatch = true;
|
|
}
|
|
if (!hasMatch) {
|
|
return { value: 0 };
|
|
}
|
|
};
|
|
for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
|
|
var combination = discriminantCombinations_1[_a];
|
|
var state_7 = _loop_21(combination);
|
|
if (typeof state_7 === "object")
|
|
return state_7.value;
|
|
}
|
|
var result = -1;
|
|
for (var _b = 0, matchingTypes_1 = matchingTypes; _b < matchingTypes_1.length; _b++) {
|
|
var type = matchingTypes_1[_b];
|
|
result &= propertiesRelatedTo(source, type, false, excludedProperties, 0);
|
|
if (result) {
|
|
result &= signaturesRelatedTo(source, type, 0, false);
|
|
if (result) {
|
|
result &= signaturesRelatedTo(source, type, 1, false);
|
|
if (result && !(isTupleType(source) && isTupleType(type))) {
|
|
result &= indexSignaturesRelatedTo(source, type, false, false, 0);
|
|
}
|
|
}
|
|
}
|
|
if (!result) {
|
|
return result;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function excludeProperties(properties, excludedProperties) {
|
|
if (!excludedProperties || properties.length === 0)
|
|
return properties;
|
|
var result;
|
|
for (var i = 0; i < properties.length; i++) {
|
|
if (!excludedProperties.has(properties[i].escapedName)) {
|
|
if (result) {
|
|
result.push(properties[i]);
|
|
}
|
|
}
|
|
else if (!result) {
|
|
result = properties.slice(0, i);
|
|
}
|
|
}
|
|
return result || properties;
|
|
}
|
|
function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
|
|
var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48);
|
|
var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), false, targetIsOptional);
|
|
var effectiveSource = getTypeOfSourceProperty(sourceProp);
|
|
return isRelatedTo(effectiveSource, effectiveTarget, 3, reportErrors, undefined, intersectionState);
|
|
}
|
|
function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
|
|
var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
|
|
var targetPropFlags = ts.getDeclarationModifierFlagsFromSymbol(targetProp);
|
|
if (sourcePropFlags & 8 || targetPropFlags & 8) {
|
|
if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
|
|
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;
|
|
}
|
|
if (relation === strictSubtypeRelation &&
|
|
isReadonlySymbol(sourceProp) && !isReadonlySymbol(targetProp)) {
|
|
return 0;
|
|
}
|
|
var related = isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState);
|
|
if (!related) {
|
|
if (reportErrors) {
|
|
reportIncompatibleError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
|
|
}
|
|
return 0;
|
|
}
|
|
if (!skipOptional && 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 related;
|
|
}
|
|
function reportUnmatchedProperty(source, target, unmatchedProperty, requireOptionalProperties) {
|
|
var shouldSkipElaboration = false;
|
|
if (unmatchedProperty.valueDeclaration
|
|
&& ts.isNamedDeclaration(unmatchedProperty.valueDeclaration)
|
|
&& ts.isPrivateIdentifier(unmatchedProperty.valueDeclaration.name)
|
|
&& source.symbol
|
|
&& source.symbol.flags & 32) {
|
|
var privateIdentifierDescription = unmatchedProperty.valueDeclaration.name.escapedText;
|
|
var symbolTableKey = ts.getSymbolNameForPrivateIdentifier(source.symbol, privateIdentifierDescription);
|
|
if (symbolTableKey && getPropertyOfType(source, symbolTableKey)) {
|
|
var sourceName = ts.factory.getDeclarationName(source.symbol.valueDeclaration);
|
|
var targetName = ts.factory.getDeclarationName(target.symbol.valueDeclaration);
|
|
reportError(ts.Diagnostics.Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2, diagnosticName(privateIdentifierDescription), diagnosticName(sourceName.escapedText === "" ? anon : sourceName), diagnosticName(targetName.escapedText === "" ? anon : targetName));
|
|
return;
|
|
}
|
|
}
|
|
var props = ts.arrayFrom(getUnmatchedProperties(source, target, requireOptionalProperties, false));
|
|
if (!headMessage || (headMessage.code !== ts.Diagnostics.Class_0_incorrectly_implements_interface_1.code &&
|
|
headMessage.code !== ts.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code)) {
|
|
shouldSkipElaboration = true;
|
|
}
|
|
if (props.length === 1) {
|
|
var propName = symbolToString(unmatchedProperty);
|
|
reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
|
|
if (ts.length(unmatchedProperty.declarations)) {
|
|
associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
|
|
}
|
|
if (shouldSkipElaboration && errorInfo) {
|
|
overrideNextErrorInfo++;
|
|
}
|
|
}
|
|
else if (tryElaborateArrayLikeErrors(source, target, false)) {
|
|
if (props.length > 5) {
|
|
reportError(ts.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more, typeToString(source), typeToString(target), ts.map(props.slice(0, 4), function (p) { return symbolToString(p); }).join(", "), props.length - 4);
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2, typeToString(source), typeToString(target), ts.map(props, function (p) { return symbolToString(p); }).join(", "));
|
|
}
|
|
if (shouldSkipElaboration && errorInfo) {
|
|
overrideNextErrorInfo++;
|
|
}
|
|
}
|
|
}
|
|
function propertiesRelatedTo(source, target, reportErrors, excludedProperties, intersectionState) {
|
|
if (relation === identityRelation) {
|
|
return propertiesIdenticalTo(source, target, excludedProperties);
|
|
}
|
|
var result = -1;
|
|
if (isTupleType(target)) {
|
|
if (isArrayOrTupleType(source)) {
|
|
if (!target.target.readonly && (isReadonlyArrayType(source) || isTupleType(source) && source.target.readonly)) {
|
|
return 0;
|
|
}
|
|
var sourceArity = getTypeReferenceArity(source);
|
|
var targetArity = getTypeReferenceArity(target);
|
|
var sourceRestFlag = isTupleType(source) ? source.target.combinedFlags & 4 : 4;
|
|
var targetRestFlag = target.target.combinedFlags & 4;
|
|
var sourceMinLength = isTupleType(source) ? source.target.minLength : 0;
|
|
var targetMinLength = target.target.minLength;
|
|
if (!sourceRestFlag && sourceArity < targetMinLength) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Source_has_0_element_s_but_target_requires_1, sourceArity, targetMinLength);
|
|
}
|
|
return 0;
|
|
}
|
|
if (!targetRestFlag && targetArity < sourceMinLength) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Source_has_0_element_s_but_target_allows_only_1, sourceMinLength, targetArity);
|
|
}
|
|
return 0;
|
|
}
|
|
if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
|
|
if (reportErrors) {
|
|
if (sourceMinLength < targetMinLength) {
|
|
reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics.Target_allows_only_0_element_s_but_source_may_have_more, targetArity);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
var sourceTypeArguments = getTypeArguments(source);
|
|
var targetTypeArguments = getTypeArguments(target);
|
|
var startCount = Math.min(isTupleType(source) ? getStartElementCount(source.target, 11) : 0, getStartElementCount(target.target, 11));
|
|
var endCount = Math.min(isTupleType(source) ? getEndElementCount(source.target, 11) : 0, targetRestFlag ? getEndElementCount(target.target, 11) : 0);
|
|
var canExcludeDiscriminants = !!excludedProperties;
|
|
for (var i = 0; i < targetArity; i++) {
|
|
var sourceIndex = i < targetArity - endCount ? i : i + sourceArity - targetArity;
|
|
var sourceFlags = isTupleType(source) && (i < startCount || i >= targetArity - endCount) ? source.target.elementFlags[sourceIndex] : 4;
|
|
var targetFlags = target.target.elementFlags[i];
|
|
if (targetFlags & 8 && !(sourceFlags & 8)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Source_provides_no_match_for_variadic_element_at_position_0_in_target, i);
|
|
}
|
|
return 0;
|
|
}
|
|
if (sourceFlags & 8 && !(targetFlags & 12)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target, sourceIndex, i);
|
|
}
|
|
return 0;
|
|
}
|
|
if (targetFlags & 1 && !(sourceFlags & 1)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Source_provides_no_match_for_required_element_at_position_0_in_target, i);
|
|
}
|
|
return 0;
|
|
}
|
|
if (canExcludeDiscriminants) {
|
|
if (sourceFlags & 12 || targetFlags & 12) {
|
|
canExcludeDiscriminants = false;
|
|
}
|
|
if (canExcludeDiscriminants && (excludedProperties === null || excludedProperties === void 0 ? void 0 : excludedProperties.has(("" + i)))) {
|
|
continue;
|
|
}
|
|
}
|
|
var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
|
|
i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2)) :
|
|
getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
|
|
var targetType = targetTypeArguments[i];
|
|
var targetCheckType = sourceFlags & 8 && targetFlags & 4 ? createArrayType(targetType) :
|
|
removeMissingType(targetType, !!(targetFlags & 2));
|
|
var related = isRelatedTo(sourceType, targetCheckType, 3, reportErrors, undefined, intersectionState);
|
|
if (!related) {
|
|
if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
|
|
if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
|
|
reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
|
|
}
|
|
else {
|
|
reportIncompatibleError(ts.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target, startCount, sourceArity - endCount - 1, i);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
return result;
|
|
}
|
|
if (target.target.combinedFlags & 12) {
|
|
return 0;
|
|
}
|
|
}
|
|
var requireOptionalProperties = (relation === subtypeRelation || relation === strictSubtypeRelation) && !isObjectLiteralType(source) && !isEmptyArrayLiteralType(source) && !isTupleType(source);
|
|
var unmatchedProperty = getUnmatchedProperty(source, target, requireOptionalProperties, false);
|
|
if (unmatchedProperty) {
|
|
if (reportErrors && shouldReportUnmatchedPropertyError(source, target)) {
|
|
reportUnmatchedProperty(source, target, unmatchedProperty, requireOptionalProperties);
|
|
}
|
|
return 0;
|
|
}
|
|
if (isObjectLiteralType(target)) {
|
|
for (var _i = 0, _a = excludeProperties(getPropertiesOfType(source), excludedProperties); _i < _a.length; _i++) {
|
|
var sourceProp = _a[_i];
|
|
if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
|
|
var sourceType = getTypeOfSymbol(sourceProp);
|
|
if (!(sourceType.flags & 32768)) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var properties = getPropertiesOfType(target);
|
|
var numericNamesOnly = isTupleType(source) && isTupleType(target);
|
|
for (var _b = 0, _c = excludeProperties(properties, excludedProperties); _b < _c.length; _b++) {
|
|
var targetProp = _c[_b];
|
|
var name = targetProp.escapedName;
|
|
if (!(targetProp.flags & 4194304) && (!numericNamesOnly || ts.isNumericLiteralName(name) || name === "length")) {
|
|
var sourceProp = getPropertyOfType(source, name);
|
|
if (sourceProp && sourceProp !== targetProp) {
|
|
var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function propertiesIdenticalTo(source, target, excludedProperties) {
|
|
if (!(source.flags & 524288 && target.flags & 524288)) {
|
|
return 0;
|
|
}
|
|
var sourceProperties = excludeProperties(getPropertiesOfObjectType(source), excludedProperties);
|
|
var targetProperties = excludeProperties(getPropertiesOfObjectType(target), excludedProperties);
|
|
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) {
|
|
var _a, _b;
|
|
if (relation === identityRelation) {
|
|
return signaturesIdenticalTo(source, target, kind);
|
|
}
|
|
if (target === anyFunctionType || source === anyFunctionType) {
|
|
return -1;
|
|
}
|
|
var sourceIsJSConstructor = source.symbol && isJSConstructor(source.symbol.valueDeclaration);
|
|
var targetIsJSConstructor = target.symbol && isJSConstructor(target.symbol.valueDeclaration);
|
|
var sourceSignatures = getSignaturesOfType(source, (sourceIsJSConstructor && kind === 1) ?
|
|
0 : kind);
|
|
var targetSignatures = getSignaturesOfType(target, (targetIsJSConstructor && kind === 1) ?
|
|
0 : kind);
|
|
if (kind === 1 && sourceSignatures.length && targetSignatures.length) {
|
|
var sourceIsAbstract = !!(sourceSignatures[0].flags & 4);
|
|
var targetIsAbstract = !!(targetSignatures[0].flags & 4);
|
|
if (sourceIsAbstract && !targetIsAbstract) {
|
|
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 incompatibleReporter = kind === 1 ? reportIncompatibleConstructSignatureReturn : reportIncompatibleCallSignatureReturn;
|
|
var sourceObjectFlags = ts.getObjectFlags(source);
|
|
var targetObjectFlags = ts.getObjectFlags(target);
|
|
if (sourceObjectFlags & 64 && targetObjectFlags & 64 && source.symbol === target.symbol ||
|
|
sourceObjectFlags & 4 && targetObjectFlags & 4 && source.target === target.target) {
|
|
for (var i = 0; i < targetSignatures.length; i++) {
|
|
var related = signatureRelatedTo(sourceSignatures[i], targetSignatures[i], true, reportErrors, incompatibleReporter(sourceSignatures[i], targetSignatures[i]));
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
else if (sourceSignatures.length === 1 && targetSignatures.length === 1) {
|
|
var eraseGenerics = relation === comparableRelation || !!compilerOptions.noStrictGenericChecks;
|
|
var sourceSignature = ts.first(sourceSignatures);
|
|
var targetSignature = ts.first(targetSignatures);
|
|
result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
|
|
if (!result && reportErrors && kind === 1 && (sourceObjectFlags & targetObjectFlags) &&
|
|
(((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 171 || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 171)) {
|
|
var constructSignatureToString = function (signature) {
|
|
return signatureToString(signature, undefined, 262144, kind);
|
|
};
|
|
reportError(ts.Diagnostics.Type_0_is_not_assignable_to_type_1, constructSignatureToString(sourceSignature), constructSignatureToString(targetSignature));
|
|
reportError(ts.Diagnostics.Types_of_construct_signatures_are_incompatible);
|
|
return result;
|
|
}
|
|
}
|
|
else {
|
|
outer: for (var _i = 0, targetSignatures_1 = targetSignatures; _i < targetSignatures_1.length; _i++) {
|
|
var t = targetSignatures_1[_i];
|
|
var saveErrorInfo = captureErrorCalculationState();
|
|
var shouldElaborateErrors = reportErrors;
|
|
for (var _c = 0, sourceSignatures_1 = sourceSignatures; _c < sourceSignatures_1.length; _c++) {
|
|
var s = sourceSignatures_1[_c];
|
|
var related = signatureRelatedTo(s, t, true, shouldElaborateErrors, incompatibleReporter(s, t));
|
|
if (related) {
|
|
result &= related;
|
|
resetErrorInfo(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 shouldReportUnmatchedPropertyError(source, target) {
|
|
var typeCallSignatures = getSignaturesOfStructuredType(source, 0);
|
|
var typeConstructSignatures = getSignaturesOfStructuredType(source, 1);
|
|
var typeProperties = getPropertiesOfObjectType(source);
|
|
if ((typeCallSignatures.length || typeConstructSignatures.length) && !typeProperties.length) {
|
|
if ((getSignaturesOfType(target, 0).length && typeCallSignatures.length) ||
|
|
(getSignaturesOfType(target, 1).length && typeConstructSignatures.length)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function reportIncompatibleCallSignatureReturn(siga, sigb) {
|
|
if (siga.parameters.length === 0 && sigb.parameters.length === 0) {
|
|
return function (source, target) { return reportIncompatibleError(ts.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1, typeToString(source), typeToString(target)); };
|
|
}
|
|
return function (source, target) { return reportIncompatibleError(ts.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible, typeToString(source), typeToString(target)); };
|
|
}
|
|
function reportIncompatibleConstructSignatureReturn(siga, sigb) {
|
|
if (siga.parameters.length === 0 && sigb.parameters.length === 0) {
|
|
return function (source, target) { return reportIncompatibleError(ts.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1, typeToString(source), typeToString(target)); };
|
|
}
|
|
return function (source, target) { return reportIncompatibleError(ts.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible, typeToString(source), typeToString(target)); };
|
|
}
|
|
function signatureRelatedTo(source, target, erase, reportErrors, incompatibleReporter) {
|
|
return compareSignaturesRelated(erase ? getErasedSignature(source) : source, erase ? getErasedSignature(target) : target, relation === strictSubtypeRelation ? 8 : 0, reportErrors, reportError, incompatibleReporter, isRelatedToWorker, reportUnreliableMapper);
|
|
}
|
|
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 membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
|
|
var result = -1;
|
|
var keyType = targetInfo.keyType;
|
|
var props = source.flags & 2097152 ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
|
|
for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
|
|
var prop = props_2[_i];
|
|
if (isIgnoredJsxProperty(source, prop)) {
|
|
continue;
|
|
}
|
|
if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576), keyType)) {
|
|
var propType = getNonMissingTypeOfSymbol(prop);
|
|
var type = exactOptionalPropertyTypes || propType.flags & 32768 || keyType === numberType || !(prop.flags & 16777216)
|
|
? propType
|
|
: getTypeWithFacts(propType, 524288);
|
|
var related = isRelatedTo(type, targetInfo.type, 3, reportErrors);
|
|
if (!related) {
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
|
|
}
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
|
|
var info = _b[_a];
|
|
if (isApplicableIndexType(info.keyType, keyType)) {
|
|
var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
|
|
var related = isRelatedTo(sourceInfo.type, targetInfo.type, 3, reportErrors);
|
|
if (!related && reportErrors) {
|
|
if (sourceInfo.keyType === targetInfo.keyType) {
|
|
reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
|
|
}
|
|
else {
|
|
reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
|
|
}
|
|
}
|
|
return related;
|
|
}
|
|
function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
|
|
if (relation === identityRelation) {
|
|
return indexSignaturesIdenticalTo(source, target);
|
|
}
|
|
var indexInfos = getIndexInfosOfType(target);
|
|
var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
|
|
var result = -1;
|
|
for (var _i = 0, indexInfos_5 = indexInfos; _i < indexInfos_5.length; _i++) {
|
|
var targetInfo = indexInfos_5[_i];
|
|
var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 ? -1 :
|
|
isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, 3, reportErrors) :
|
|
typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
return result;
|
|
}
|
|
function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
|
|
var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
|
|
if (sourceInfo) {
|
|
return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
|
|
}
|
|
if (!(intersectionState & 1) && isObjectTypeWithInferableIndex(source)) {
|
|
return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
|
|
}
|
|
if (reportErrors) {
|
|
reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
|
|
}
|
|
return 0;
|
|
}
|
|
function indexSignaturesIdenticalTo(source, target) {
|
|
var sourceInfos = getIndexInfosOfType(source);
|
|
var targetInfos = getIndexInfosOfType(target);
|
|
if (sourceInfos.length !== targetInfos.length) {
|
|
return 0;
|
|
}
|
|
for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
|
|
var targetInfo = targetInfos_1[_i];
|
|
var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
|
|
if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type, 3) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
|
|
return 0;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
|
|
if (!sourceSignature.declaration || !targetSignature.declaration) {
|
|
return true;
|
|
}
|
|
var sourceAccessibility = ts.getSelectedEffectiveModifierFlags(sourceSignature.declaration, 24);
|
|
var targetAccessibility = ts.getSelectedEffectiveModifierFlags(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 typeCouldHaveTopLevelSingletonTypes(type) {
|
|
if (type.flags & 16) {
|
|
return false;
|
|
}
|
|
if (type.flags & 3145728) {
|
|
return !!ts.forEach(type.types, typeCouldHaveTopLevelSingletonTypes);
|
|
}
|
|
if (type.flags & 465829888) {
|
|
var constraint = getConstraintOfType(type);
|
|
if (constraint && constraint !== type) {
|
|
return typeCouldHaveTopLevelSingletonTypes(constraint);
|
|
}
|
|
}
|
|
return isUnitType(type) || !!(type.flags & 134217728) || !!(type.flags & 268435456);
|
|
}
|
|
function getExactOptionalUnassignableProperties(source, target) {
|
|
if (isTupleType(source) && isTupleType(target))
|
|
return ts.emptyArray;
|
|
return getPropertiesOfType(target)
|
|
.filter(function (targetProp) { return isExactOptionalPropertyMismatch(getTypeOfPropertyOfType(source, targetProp.escapedName), getTypeOfSymbol(targetProp)); });
|
|
}
|
|
function isExactOptionalPropertyMismatch(source, target) {
|
|
return !!source && !!target && maybeTypeOfKind(source, 32768) && !!containsMissingType(target);
|
|
}
|
|
function getExactOptionalProperties(type) {
|
|
return getPropertiesOfType(type).filter(function (targetProp) { return containsMissingType(getTypeOfSymbol(targetProp)); });
|
|
}
|
|
function getBestMatchingType(source, target, isRelatedTo) {
|
|
if (isRelatedTo === void 0) { isRelatedTo = compareTypesAssignable; }
|
|
return findMatchingDiscriminantType(source, target, isRelatedTo, true) ||
|
|
findMatchingTypeReferenceOrTypeAliasReference(source, target) ||
|
|
findBestTypeForObjectLiteral(source, target) ||
|
|
findBestTypeForInvokable(source, target) ||
|
|
findMostOverlappyType(source, target);
|
|
}
|
|
function discriminateTypeByDiscriminableItems(target, discriminators, related, defaultValue, skipPartial) {
|
|
var discriminable = target.types.map(function (_) { return undefined; });
|
|
for (var _i = 0, discriminators_1 = discriminators; _i < discriminators_1.length; _i++) {
|
|
var _a = discriminators_1[_i], getDiscriminatingType = _a[0], propertyName = _a[1];
|
|
var targetProp = getUnionOrIntersectionProperty(target, propertyName);
|
|
if (skipPartial && targetProp && ts.getCheckFlags(targetProp) & 16) {
|
|
continue;
|
|
}
|
|
var i = 0;
|
|
for (var _b = 0, _c = target.types; _b < _c.length; _b++) {
|
|
var type = _c[_b];
|
|
var targetType = getTypeOfPropertyOfType(type, propertyName);
|
|
if (targetType && related(getDiscriminatingType(), targetType)) {
|
|
discriminable[i] = discriminable[i] === undefined ? true : discriminable[i];
|
|
}
|
|
else {
|
|
discriminable[i] = false;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
var match = discriminable.indexOf(true);
|
|
if (match === -1) {
|
|
return defaultValue;
|
|
}
|
|
var nextMatch = discriminable.indexOf(true, match + 1);
|
|
while (nextMatch !== -1) {
|
|
if (!isTypeIdenticalTo(target.types[match], target.types[nextMatch])) {
|
|
return defaultValue;
|
|
}
|
|
nextMatch = discriminable.indexOf(true, nextMatch + 1);
|
|
}
|
|
return target.types[match];
|
|
}
|
|
function isWeakType(type) {
|
|
if (type.flags & 524288) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
|
|
resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216); });
|
|
}
|
|
if (type.flags & 2097152) {
|
|
return ts.every(type.types, isWeakType);
|
|
}
|
|
return false;
|
|
}
|
|
function hasCommonProperties(source, target, isComparingJsxAttributes) {
|
|
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 getVariances(type) {
|
|
return type === globalArrayType || type === globalReadonlyArrayType || type.objectFlags & 8 ?
|
|
arrayVariances :
|
|
getVariancesWorker(type.symbol, type.typeParameters);
|
|
}
|
|
function getAliasVariances(symbol) {
|
|
return getVariancesWorker(symbol, getSymbolLinks(symbol).typeParameters);
|
|
}
|
|
function getVariancesWorker(symbol, typeParameters) {
|
|
if (typeParameters === void 0) { typeParameters = ts.emptyArray; }
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.variances) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("checkTypes", "getVariancesWorker", { arity: typeParameters.length, id: getTypeId(getDeclaredTypeOfSymbol(symbol)) });
|
|
links.variances = ts.emptyArray;
|
|
var variances = [];
|
|
var _loop_23 = function (tp) {
|
|
var modifiers = getVarianceModifiers(tp);
|
|
var variance = modifiers & 65536 ?
|
|
modifiers & 32768 ? 0 : 1 :
|
|
modifiers & 32768 ? 2 : undefined;
|
|
if (variance === undefined) {
|
|
var unmeasurable_1 = false;
|
|
var unreliable_1 = false;
|
|
var oldHandler = outofbandVarianceMarkerHandler;
|
|
outofbandVarianceMarkerHandler = function (onlyUnreliable) { return onlyUnreliable ? unreliable_1 = true : unmeasurable_1 = true; };
|
|
var typeWithSuper = createMarkerType(symbol, tp, markerSuperType);
|
|
var typeWithSub = createMarkerType(symbol, tp, markerSubType);
|
|
variance = (isTypeAssignableTo(typeWithSub, typeWithSuper) ? 1 : 0) |
|
|
(isTypeAssignableTo(typeWithSuper, typeWithSub) ? 2 : 0);
|
|
if (variance === 3 && isTypeAssignableTo(createMarkerType(symbol, tp, markerOtherType), typeWithSuper)) {
|
|
variance = 4;
|
|
}
|
|
outofbandVarianceMarkerHandler = oldHandler;
|
|
if (unmeasurable_1 || unreliable_1) {
|
|
if (unmeasurable_1) {
|
|
variance |= 8;
|
|
}
|
|
if (unreliable_1) {
|
|
variance |= 16;
|
|
}
|
|
}
|
|
}
|
|
variances.push(variance);
|
|
};
|
|
for (var _i = 0, typeParameters_2 = typeParameters; _i < typeParameters_2.length; _i++) {
|
|
var tp = typeParameters_2[_i];
|
|
_loop_23(tp);
|
|
}
|
|
links.variances = variances;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop({ variances: variances.map(ts.Debug.formatVariance) });
|
|
}
|
|
return links.variances;
|
|
}
|
|
function createMarkerType(symbol, source, target) {
|
|
var mapper = makeUnaryTypeMapper(source, target);
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
if (isErrorType(type)) {
|
|
return type;
|
|
}
|
|
var result = symbol.flags & 524288 ?
|
|
getTypeAliasInstantiation(symbol, instantiateTypes(getSymbolLinks(symbol).typeParameters, mapper)) :
|
|
createTypeReference(type, instantiateTypes(type.typeParameters, mapper));
|
|
markerTypes.add(getTypeId(result));
|
|
return result;
|
|
}
|
|
function isMarkerType(type) {
|
|
return markerTypes.has(getTypeId(type));
|
|
}
|
|
function getVarianceModifiers(tp) {
|
|
var _a, _b;
|
|
return (ts.some((_a = tp.symbol) === null || _a === void 0 ? void 0 : _a.declarations, function (d) { return ts.hasSyntacticModifier(d, 32768); }) ? 32768 : 0) |
|
|
(ts.some((_b = tp.symbol) === null || _b === void 0 ? void 0 : _b.declarations, function (d) { return ts.hasSyntacticModifier(d, 65536); }) ? 65536 : 0);
|
|
}
|
|
function hasCovariantVoidArgument(typeArguments, variances) {
|
|
for (var i = 0; i < variances.length; i++) {
|
|
if ((variances[i] & 7) === 1 && typeArguments[i].flags & 16384) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isUnconstrainedTypeParameter(type) {
|
|
return type.flags & 262144 && !getConstraintOfTypeParameter(type);
|
|
}
|
|
function isNonDeferredTypeReference(type) {
|
|
return !!(ts.getObjectFlags(type) & 4) && !type.node;
|
|
}
|
|
function isTypeReferenceWithGenericArguments(type) {
|
|
return isNonDeferredTypeReference(type) && ts.some(getTypeArguments(type), function (t) { return !!(t.flags & 262144) || isTypeReferenceWithGenericArguments(t); });
|
|
}
|
|
function getGenericTypeReferenceRelationKey(source, target, postFix, ignoreConstraints) {
|
|
var typeParameters = [];
|
|
var constraintMarker = "";
|
|
var sourceId = getTypeReferenceId(source, 0);
|
|
var targetId = getTypeReferenceId(target, 0);
|
|
return "".concat(constraintMarker).concat(sourceId, ",").concat(targetId).concat(postFix);
|
|
function getTypeReferenceId(type, depth) {
|
|
if (depth === void 0) { depth = 0; }
|
|
var result = "" + type.target.id;
|
|
for (var _i = 0, _a = getTypeArguments(type); _i < _a.length; _i++) {
|
|
var t = _a[_i];
|
|
if (t.flags & 262144) {
|
|
if (ignoreConstraints || isUnconstrainedTypeParameter(t)) {
|
|
var index = typeParameters.indexOf(t);
|
|
if (index < 0) {
|
|
index = typeParameters.length;
|
|
typeParameters.push(t);
|
|
}
|
|
result += "=" + index;
|
|
continue;
|
|
}
|
|
constraintMarker = "*";
|
|
}
|
|
else if (depth < 4 && isTypeReferenceWithGenericArguments(t)) {
|
|
result += "<" + getTypeReferenceId(t, depth + 1) + ">";
|
|
continue;
|
|
}
|
|
result += "-" + t.id;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
function getRelationKey(source, target, intersectionState, relation, ignoreConstraints) {
|
|
if (relation === identityRelation && source.id > target.id) {
|
|
var temp = source;
|
|
source = target;
|
|
target = temp;
|
|
}
|
|
var postFix = intersectionState ? ":" + intersectionState : "";
|
|
return isTypeReferenceWithGenericArguments(source) && isTypeReferenceWithGenericArguments(target) ?
|
|
getGenericTypeReferenceRelationKey(source, target, postFix, ignoreConstraints) :
|
|
"".concat(source.id, ",").concat(target.id).concat(postFix);
|
|
}
|
|
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 getTypeOfPropertyInBaseClass(property) {
|
|
var classType = getDeclaringClass(property);
|
|
var baseClassType = classType && getBaseTypes(classType)[0];
|
|
return baseClassType && getTypeOfPropertyOfType(baseClassType, property.escapedName);
|
|
}
|
|
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, writing) {
|
|
return forEachProperty(prop, function (p) { return ts.getDeclarationModifierFlagsFromSymbol(p, writing) & 16 ?
|
|
!hasBaseType(checkClass, getDeclaringClass(p)) : false; }) ? undefined : checkClass;
|
|
}
|
|
function isDeeplyNestedType(type, stack, depth, maxDepth) {
|
|
if (maxDepth === void 0) { maxDepth = 3; }
|
|
if (depth >= maxDepth) {
|
|
var identity_2 = getRecursionIdentity(type);
|
|
var count = 0;
|
|
var lastTypeId = 0;
|
|
for (var i = 0; i < depth; i++) {
|
|
var t = stack[i];
|
|
if (getRecursionIdentity(t) === identity_2) {
|
|
if (t.id >= lastTypeId) {
|
|
count++;
|
|
if (count >= maxDepth) {
|
|
return true;
|
|
}
|
|
}
|
|
lastTypeId = t.id;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function getRecursionIdentity(type) {
|
|
if (type.flags & 524288 && !isObjectOrArrayLiteralType(type)) {
|
|
if (ts.getObjectFlags(type) && 4 && type.node) {
|
|
return type.node;
|
|
}
|
|
if (type.symbol && !(ts.getObjectFlags(type) & 16 && type.symbol.flags & 32)) {
|
|
return type.symbol;
|
|
}
|
|
if (isTupleType(type)) {
|
|
return type.target;
|
|
}
|
|
}
|
|
if (type.flags & 262144) {
|
|
return type.symbol;
|
|
}
|
|
if (type.flags & 8388608) {
|
|
do {
|
|
type = type.objectType;
|
|
} while (type.flags & 8388608);
|
|
return type;
|
|
}
|
|
if (type.flags & 16777216) {
|
|
return type.root;
|
|
}
|
|
return type;
|
|
}
|
|
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) {
|
|
var sourceParameterCount = getParameterCount(source);
|
|
var targetParameterCount = getParameterCount(target);
|
|
var sourceMinArgumentCount = getMinArgumentCount(source);
|
|
var targetMinArgumentCount = getMinArgumentCount(target);
|
|
var sourceHasRestParameter = hasEffectiveRestParameter(source);
|
|
var targetHasRestParameter = hasEffectiveRestParameter(target);
|
|
if (sourceParameterCount === targetParameterCount &&
|
|
sourceMinArgumentCount === targetMinArgumentCount &&
|
|
sourceHasRestParameter === targetHasRestParameter) {
|
|
return true;
|
|
}
|
|
if (partialMatch && sourceMinArgumentCount <= targetMinArgumentCount) {
|
|
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;
|
|
}
|
|
if (target.typeParameters) {
|
|
var mapper = createTypeMapper(source.typeParameters, target.typeParameters);
|
|
for (var i = 0; i < target.typeParameters.length; i++) {
|
|
var s = source.typeParameters[i];
|
|
var t = target.typeParameters[i];
|
|
if (!(s === t || compareTypes(instantiateType(getConstraintFromTypeParameter(s), mapper) || unknownType, getConstraintFromTypeParameter(t) || unknownType) &&
|
|
compareTypes(instantiateType(getDefaultFromTypeParameter(s), mapper) || unknownType, getDefaultFromTypeParameter(t) || unknownType))) {
|
|
return 0;
|
|
}
|
|
}
|
|
source = instantiateSignature(source, mapper, true);
|
|
}
|
|
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 = getParameterCount(target);
|
|
for (var i = 0; i < targetLen; i++) {
|
|
var s = getTypeAtPosition(source, i);
|
|
var t = getTypeAtPosition(target, i);
|
|
var related = compareTypes(t, s);
|
|
if (!related) {
|
|
return 0;
|
|
}
|
|
result &= related;
|
|
}
|
|
if (!ignoreReturnTypes) {
|
|
var sourceTypePredicate = getTypePredicateOfSignature(source);
|
|
var targetTypePredicate = getTypePredicateOfSignature(target);
|
|
result &= sourceTypePredicate || targetTypePredicate ?
|
|
compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes) :
|
|
compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
|
|
}
|
|
return result;
|
|
}
|
|
function compareTypePredicatesIdentical(source, target, compareTypes) {
|
|
return !(source && target && typePredicateKindsMatch(source, target)) ? 0 :
|
|
source.type === target.type ? -1 :
|
|
source.type && target.type ? compareTypes(source.type, target.type) :
|
|
0;
|
|
}
|
|
function literalTypesWithSameBaseType(types) {
|
|
var commonBaseType;
|
|
for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
|
|
var t = types_13[_i];
|
|
if (!(t.flags & 131072)) {
|
|
var baseType = getBaseTypeOfLiteralType(t);
|
|
commonBaseType !== null && commonBaseType !== void 0 ? commonBaseType : (commonBaseType = baseType);
|
|
if (baseType === t || baseType !== commonBaseType) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function getCombinedTypeFlags(types) {
|
|
return ts.reduceLeft(types, function (flags, t) { return flags | (t.flags & 1048576 ? getCombinedTypeFlags(t.types) : t.flags); }, 0);
|
|
}
|
|
function getCommonSupertype(types) {
|
|
if (types.length === 1) {
|
|
return types[0];
|
|
}
|
|
var primaryTypes = strictNullChecks ? ts.sameMap(types, function (t) { return filterType(t, function (u) { return !(u.flags & 98304); }); }) : types;
|
|
var superTypeOrUnion = literalTypesWithSameBaseType(primaryTypes) ?
|
|
getUnionType(primaryTypes) :
|
|
ts.reduceLeft(primaryTypes, function (s, t) { return isTypeSubtypeOf(s, t) ? t : s; });
|
|
return primaryTypes === types ? superTypeOrUnion : getNullableType(superTypeOrUnion, getCombinedTypeFlags(types) & 98304);
|
|
}
|
|
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 || type.target === globalReadonlyArrayType);
|
|
}
|
|
function isReadonlyArrayType(type) {
|
|
return !!(ts.getObjectFlags(type) & 4) && type.target === globalReadonlyArrayType;
|
|
}
|
|
function isArrayOrTupleType(type) {
|
|
return isArrayType(type) || isTupleType(type);
|
|
}
|
|
function isMutableArrayOrTuple(type) {
|
|
return isArrayType(type) && !isReadonlyArrayType(type) || isTupleType(type) && !type.target.readonly;
|
|
}
|
|
function getElementTypeOfArrayType(type) {
|
|
return isArrayType(type) ? getTypeArguments(type)[0] : undefined;
|
|
}
|
|
function isArrayLikeType(type) {
|
|
return isArrayType(type) || !(type.flags & 98304) && isTypeAssignableTo(type, anyReadonlyArrayType);
|
|
}
|
|
function getSingleBaseForNonAugmentingSubtype(type) {
|
|
if (!(ts.getObjectFlags(type) & 4) || !(ts.getObjectFlags(type.target) & 3)) {
|
|
return undefined;
|
|
}
|
|
if (ts.getObjectFlags(type) & 33554432) {
|
|
return ts.getObjectFlags(type) & 67108864 ? type.cachedEquivalentBaseType : undefined;
|
|
}
|
|
type.objectFlags |= 33554432;
|
|
var target = type.target;
|
|
if (ts.getObjectFlags(target) & 1) {
|
|
var baseTypeNode = getBaseTypeNodeOfClass(target);
|
|
if (baseTypeNode && baseTypeNode.expression.kind !== 79 && baseTypeNode.expression.kind !== 206) {
|
|
return undefined;
|
|
}
|
|
}
|
|
var bases = getBaseTypes(target);
|
|
if (bases.length !== 1) {
|
|
return undefined;
|
|
}
|
|
if (getMembersOfSymbol(type.symbol).size) {
|
|
return undefined;
|
|
}
|
|
var instantiatedBase = !ts.length(target.typeParameters) ? bases[0] : instantiateType(bases[0], createTypeMapper(target.typeParameters, getTypeArguments(type).slice(0, target.typeParameters.length)));
|
|
if (ts.length(getTypeArguments(type)) > ts.length(target.typeParameters)) {
|
|
instantiatedBase = getTypeWithThisArgument(instantiatedBase, ts.last(getTypeArguments(type)));
|
|
}
|
|
type.objectFlags |= 67108864;
|
|
return type.cachedEquivalentBaseType = instantiatedBase;
|
|
}
|
|
function isEmptyLiteralType(type) {
|
|
return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
|
|
}
|
|
function isEmptyArrayLiteralType(type) {
|
|
var elementType = getElementTypeOfArrayType(type);
|
|
return !!elementType && isEmptyLiteralType(elementType);
|
|
}
|
|
function isTupleLikeType(type) {
|
|
return isTupleType(type) || !!getPropertyOfType(type, "0");
|
|
}
|
|
function isArrayOrTupleLikeType(type) {
|
|
return isArrayLikeType(type) || isTupleLikeType(type);
|
|
}
|
|
function getTupleElementType(type, index) {
|
|
var propType = getTypeOfPropertyOfType(type, "" + index);
|
|
if (propType) {
|
|
return propType;
|
|
}
|
|
if (everyType(type, isTupleType)) {
|
|
return mapType(type, function (t) { return getRestTypeOfTupleType(t) || undefinedType; });
|
|
}
|
|
return undefined;
|
|
}
|
|
function isNeitherUnitTypeNorNever(type) {
|
|
return !(type.flags & (109440 | 131072));
|
|
}
|
|
function isUnitType(type) {
|
|
return !!(type.flags & 109440);
|
|
}
|
|
function isUnitLikeType(type) {
|
|
return type.flags & 2097152 ? ts.some(type.types, isUnitType) :
|
|
!!(type.flags & 109440);
|
|
}
|
|
function extractUnitType(type) {
|
|
return type.flags & 2097152 ? ts.find(type.types, isUnitType) || type : type;
|
|
}
|
|
function isLiteralType(type) {
|
|
return type.flags & 16 ? true :
|
|
type.flags & 1048576 ? type.flags & 1024 ? true : ts.every(type.types, isUnitType) :
|
|
isUnitType(type);
|
|
}
|
|
function getBaseTypeOfLiteralType(type) {
|
|
return type.flags & 1024 ? getBaseTypeOfEnumLiteralType(type) :
|
|
type.flags & (128 | 134217728 | 268435456) ? stringType :
|
|
type.flags & 256 ? numberType :
|
|
type.flags & 2048 ? bigintType :
|
|
type.flags & 512 ? booleanType :
|
|
type.flags & 1048576 ? getBaseTypeOfLiteralTypeUnion(type) :
|
|
type;
|
|
}
|
|
function getBaseTypeOfLiteralTypeUnion(type) {
|
|
var _a;
|
|
var key = "B".concat(getTypeId(type));
|
|
return (_a = getCachedType(key)) !== null && _a !== void 0 ? _a : setCachedType(key, mapType(type, getBaseTypeOfLiteralType));
|
|
}
|
|
function getWidenedLiteralType(type) {
|
|
return type.flags & 1024 && isFreshLiteralType(type) ? getBaseTypeOfEnumLiteralType(type) :
|
|
type.flags & 128 && isFreshLiteralType(type) ? stringType :
|
|
type.flags & 256 && isFreshLiteralType(type) ? numberType :
|
|
type.flags & 2048 && isFreshLiteralType(type) ? bigintType :
|
|
type.flags & 512 && isFreshLiteralType(type) ? booleanType :
|
|
type.flags & 1048576 ? mapType(type, getWidenedLiteralType) :
|
|
type;
|
|
}
|
|
function getWidenedUniqueESSymbolType(type) {
|
|
return type.flags & 8192 ? esSymbolType :
|
|
type.flags & 1048576 ? mapType(type, getWidenedUniqueESSymbolType) :
|
|
type;
|
|
}
|
|
function getWidenedLiteralLikeTypeForContextualType(type, contextualType) {
|
|
if (!isLiteralOfContextualType(type, contextualType)) {
|
|
type = getWidenedUniqueESSymbolType(getWidenedLiteralType(type));
|
|
}
|
|
return type;
|
|
}
|
|
function getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(type, contextualSignatureReturnType, isAsync) {
|
|
if (type && isUnitType(type)) {
|
|
var contextualType = !contextualSignatureReturnType ? undefined :
|
|
isAsync ? getPromisedTypeOfPromise(contextualSignatureReturnType) :
|
|
contextualSignatureReturnType;
|
|
type = getWidenedLiteralLikeTypeForContextualType(type, contextualType);
|
|
}
|
|
return type;
|
|
}
|
|
function getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(type, contextualSignatureReturnType, kind, isAsyncGenerator) {
|
|
if (type && isUnitType(type)) {
|
|
var contextualType = !contextualSignatureReturnType ? undefined :
|
|
getIterationTypeOfGeneratorFunctionReturnType(kind, contextualSignatureReturnType, isAsyncGenerator);
|
|
type = getWidenedLiteralLikeTypeForContextualType(type, contextualType);
|
|
}
|
|
return type;
|
|
}
|
|
function isTupleType(type) {
|
|
return !!(ts.getObjectFlags(type) & 4 && type.target.objectFlags & 8);
|
|
}
|
|
function isGenericTupleType(type) {
|
|
return isTupleType(type) && !!(type.target.combinedFlags & 8);
|
|
}
|
|
function isSingleElementGenericTupleType(type) {
|
|
return isGenericTupleType(type) && type.target.elementFlags.length === 1;
|
|
}
|
|
function getRestTypeOfTupleType(type) {
|
|
return getElementTypeOfSliceOfTupleType(type, type.target.fixedLength);
|
|
}
|
|
function getRestArrayTypeOfTupleType(type) {
|
|
var restType = getRestTypeOfTupleType(type);
|
|
return restType && createArrayType(restType);
|
|
}
|
|
function getElementTypeOfSliceOfTupleType(type, index, endSkipCount, writing) {
|
|
if (endSkipCount === void 0) { endSkipCount = 0; }
|
|
if (writing === void 0) { writing = false; }
|
|
var length = getTypeReferenceArity(type) - endSkipCount;
|
|
if (index < length) {
|
|
var typeArguments = getTypeArguments(type);
|
|
var elementTypes = [];
|
|
for (var i = index; i < length; i++) {
|
|
var t = typeArguments[i];
|
|
elementTypes.push(type.target.elementFlags[i] & 8 ? getIndexedAccessType(t, numberType) : t);
|
|
}
|
|
return writing ? getIntersectionType(elementTypes) : getUnionType(elementTypes);
|
|
}
|
|
return undefined;
|
|
}
|
|
function isTupleTypeStructureMatching(t1, t2) {
|
|
return getTypeReferenceArity(t1) === getTypeReferenceArity(t2) &&
|
|
ts.every(t1.target.elementFlags, function (f, i) { return (f & 12) === (t2.target.elementFlags[i] & 12); });
|
|
}
|
|
function isZeroBigInt(_a) {
|
|
var value = _a.value;
|
|
return value.base10Value === "0";
|
|
}
|
|
function removeDefinitelyFalsyTypes(type) {
|
|
return filterType(type, function (t) { return !!(getTypeFacts(t) & 4194304); });
|
|
}
|
|
function extractDefinitelyFalsyTypes(type) {
|
|
return mapType(type, getDefinitelyFalsyPartOfType);
|
|
}
|
|
function getDefinitelyFalsyPartOfType(type) {
|
|
return type.flags & 4 ? emptyStringType :
|
|
type.flags & 8 ? zeroType :
|
|
type.flags & 64 ? zeroBigIntType :
|
|
type === regularFalseType ||
|
|
type === falseType ||
|
|
type.flags & (16384 | 32768 | 65536 | 3) ||
|
|
type.flags & 128 && type.value === "" ||
|
|
type.flags & 256 && type.value === 0 ||
|
|
type.flags & 2048 && isZeroBigInt(type) ? type :
|
|
neverType;
|
|
}
|
|
function getNullableType(type, flags) {
|
|
var missing = (flags & ~type.flags) & (32768 | 65536);
|
|
return missing === 0 ? type :
|
|
missing === 32768 ? getUnionType([type, undefinedType]) :
|
|
missing === 65536 ? getUnionType([type, nullType]) :
|
|
getUnionType([type, undefinedType, nullType]);
|
|
}
|
|
function getOptionalType(type, isProperty) {
|
|
if (isProperty === void 0) { isProperty = false; }
|
|
ts.Debug.assert(strictNullChecks);
|
|
return type.flags & 32768 ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
|
|
}
|
|
function getGlobalNonNullableTypeInstantiation(type) {
|
|
if (!deferredGlobalNonNullableTypeAlias) {
|
|
deferredGlobalNonNullableTypeAlias = getGlobalSymbol("NonNullable", 524288, undefined) || unknownSymbol;
|
|
}
|
|
return deferredGlobalNonNullableTypeAlias !== unknownSymbol ?
|
|
getTypeAliasInstantiation(deferredGlobalNonNullableTypeAlias, [type]) :
|
|
getIntersectionType([type, emptyObjectType]);
|
|
}
|
|
function getNonNullableType(type) {
|
|
return strictNullChecks ? getAdjustedTypeWithFacts(type, 2097152) : type;
|
|
}
|
|
function addOptionalTypeMarker(type) {
|
|
return strictNullChecks ? getUnionType([type, optionalType]) : type;
|
|
}
|
|
function removeOptionalTypeMarker(type) {
|
|
return strictNullChecks ? removeType(type, optionalType) : type;
|
|
}
|
|
function propagateOptionalTypeMarker(type, node, wasOptional) {
|
|
return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
|
|
}
|
|
function getOptionalExpressionType(exprType, expression) {
|
|
return ts.isExpressionOfOptionalChainRoot(expression) ? getNonNullableType(exprType) :
|
|
ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
|
|
exprType;
|
|
}
|
|
function removeMissingType(type, isOptional) {
|
|
return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
|
|
}
|
|
function containsMissingType(type) {
|
|
return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 && containsType(type.types, missingType));
|
|
}
|
|
function removeMissingOrUndefinedType(type) {
|
|
return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288);
|
|
}
|
|
function isCoercibleUnderDoubleEquals(source, target) {
|
|
return ((source.flags & (8 | 4 | 512)) !== 0)
|
|
&& ((target.flags & (8 | 4 | 16)) !== 0);
|
|
}
|
|
function isObjectTypeWithInferableIndex(type) {
|
|
var objectFlags = ts.getObjectFlags(type);
|
|
return type.flags & 2097152
|
|
? ts.every(type.types, isObjectTypeWithInferableIndex)
|
|
: !!(type.symbol
|
|
&& (type.symbol.flags & (4096 | 2048 | 384 | 512)) !== 0
|
|
&& !(type.symbol.flags & 32)
|
|
&& !typeHasCallOrConstructSignatures(type)) || !!(objectFlags & 4194304) || !!(objectFlags & 1024 && isObjectTypeWithInferableIndex(type.source));
|
|
}
|
|
function createSymbolWithType(source, type) {
|
|
var symbol = createSymbol(source.flags, source.escapedName, ts.getCheckFlags(source) & 8);
|
|
symbol.declarations = source.declarations;
|
|
symbol.parent = source.parent;
|
|
symbol.type = type;
|
|
symbol.target = source;
|
|
if (source.valueDeclaration) {
|
|
symbol.valueDeclaration = source.valueDeclaration;
|
|
}
|
|
var nameType = getSymbolLinks(source).nameType;
|
|
if (nameType) {
|
|
symbol.nameType = 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) && ts.getObjectFlags(type) & 8192)) {
|
|
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.indexInfos);
|
|
regularNew.flags = resolved.flags;
|
|
regularNew.objectFlags |= resolved.objectFlags & ~8192;
|
|
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 = new ts.Map();
|
|
for (var _i = 0, _a = getSiblingsOfContext(context); _i < _a.length; _i++) {
|
|
var t = _a[_i];
|
|
if (isObjectLiteralType(t) && !(ts.getObjectFlags(t) & 2097152)) {
|
|
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, missingType);
|
|
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 result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
|
|
result.objectFlags |= (ts.getObjectFlags(type) & (4096 | 262144));
|
|
return result;
|
|
}
|
|
function getWidenedType(type) {
|
|
return getWidenedTypeWithContext(type, undefined);
|
|
}
|
|
function getWidenedTypeWithContext(type, context) {
|
|
if (ts.getObjectFlags(type) & 196608) {
|
|
if (context === undefined && type.widened) {
|
|
return type.widened;
|
|
}
|
|
var result = void 0;
|
|
if (type.flags & (1 | 98304)) {
|
|
result = anyType;
|
|
}
|
|
else if (isObjectLiteralType(type)) {
|
|
result = getWidenedTypeOfObjectLiteral(type, context);
|
|
}
|
|
else if (type.flags & 1048576) {
|
|
var unionContext_1 = context || createWideningContext(undefined, undefined, type.types);
|
|
var widenedTypes = ts.sameMap(type.types, function (t) { return t.flags & 98304 ? t : getWidenedTypeWithContext(t, unionContext_1); });
|
|
result = getUnionType(widenedTypes, ts.some(widenedTypes, isEmptyObjectType) ? 2 : 1);
|
|
}
|
|
else if (type.flags & 2097152) {
|
|
result = getIntersectionType(ts.sameMap(type.types, getWidenedType));
|
|
}
|
|
else if (isArrayOrTupleType(type)) {
|
|
result = createTypeReference(type.target, ts.sameMap(getTypeArguments(type), getWidenedType));
|
|
}
|
|
if (result && context === undefined) {
|
|
type.widened = result;
|
|
}
|
|
return result || type;
|
|
}
|
|
return type;
|
|
}
|
|
function reportWideningErrorsInType(type) {
|
|
var errorReported = false;
|
|
if (ts.getObjectFlags(type) & 65536) {
|
|
if (type.flags & 1048576) {
|
|
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 (isArrayOrTupleType(type)) {
|
|
for (var _b = 0, _c = getTypeArguments(type); _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 (ts.getObjectFlags(t) & 65536) {
|
|
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 reportImplicitAny(declaration, type, wideningKind) {
|
|
var typeAsString = typeToString(getWidenedType(type));
|
|
if (ts.isInJSFile(declaration) && !ts.isCheckJsEnabledForFile(ts.getSourceFileOfNode(declaration), compilerOptions)) {
|
|
return;
|
|
}
|
|
var diagnostic;
|
|
switch (declaration.kind) {
|
|
case 221:
|
|
case 167:
|
|
case 166:
|
|
diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
|
|
break;
|
|
case 164:
|
|
var param = declaration;
|
|
if (ts.isIdentifier(param.name) &&
|
|
(ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
|
|
param.parent.parameters.indexOf(param) > -1 &&
|
|
(resolveName(param, param.name.escapedText, 788968, undefined, param.name.escapedText, true) ||
|
|
param.name.originalKeywordKind && ts.isTypeNodeKind(param.name.originalKeywordKind))) {
|
|
var newName = "arg" + param.parent.parameters.indexOf(param);
|
|
var typeName = ts.declarationNameToString(param.name) + (param.dotDotDotToken ? "[]" : "");
|
|
errorOrSuggestion(noImplicitAny, declaration, ts.Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1, newName, typeName);
|
|
return;
|
|
}
|
|
diagnostic = declaration.dotDotDotToken ?
|
|
noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
|
|
noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
|
|
break;
|
|
case 203:
|
|
diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
|
|
if (!noImplicitAny) {
|
|
return;
|
|
}
|
|
break;
|
|
case 317:
|
|
error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
|
|
return;
|
|
case 256:
|
|
case 169:
|
|
case 168:
|
|
case 172:
|
|
case 173:
|
|
case 213:
|
|
case 214:
|
|
if (noImplicitAny && !declaration.name) {
|
|
if (wideningKind === 3) {
|
|
error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
|
|
}
|
|
else {
|
|
error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
|
|
}
|
|
return;
|
|
}
|
|
diagnostic = !noImplicitAny ? ts.Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage :
|
|
wideningKind === 3 ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
|
|
ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
|
|
break;
|
|
case 195:
|
|
if (noImplicitAny) {
|
|
error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
|
|
}
|
|
return;
|
|
default:
|
|
diagnostic = noImplicitAny ? ts.Diagnostics.Variable_0_implicitly_has_an_1_type : ts.Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
|
|
}
|
|
errorOrSuggestion(noImplicitAny, declaration, diagnostic, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)), typeAsString);
|
|
}
|
|
function reportErrorsFromWidening(declaration, type, wideningKind) {
|
|
addLazyDiagnostic(function () {
|
|
if (noImplicitAny && ts.getObjectFlags(type) & 65536 && (!wideningKind || !getContextualSignatureForFunctionLikeDeclaration(declaration))) {
|
|
if (!reportWideningErrorsInType(type)) {
|
|
reportImplicitAny(declaration, type, wideningKind);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function applyToParameterTypes(source, target, callback) {
|
|
var sourceCount = getParameterCount(source);
|
|
var targetCount = getParameterCount(target);
|
|
var sourceRestType = getEffectiveRestType(source);
|
|
var targetRestType = getEffectiveRestType(target);
|
|
var targetNonRestCount = targetRestType ? targetCount - 1 : targetCount;
|
|
var paramCount = sourceRestType ? targetNonRestCount : Math.min(sourceCount, targetNonRestCount);
|
|
var sourceThisType = getThisTypeOfSignature(source);
|
|
if (sourceThisType) {
|
|
var targetThisType = getThisTypeOfSignature(target);
|
|
if (targetThisType) {
|
|
callback(sourceThisType, targetThisType);
|
|
}
|
|
}
|
|
for (var i = 0; i < paramCount; i++) {
|
|
callback(getTypeAtPosition(source, i), getTypeAtPosition(target, i));
|
|
}
|
|
if (targetRestType) {
|
|
callback(getRestTypeAtPosition(source, paramCount), targetRestType);
|
|
}
|
|
}
|
|
function applyToReturnTypes(source, target, callback) {
|
|
var sourceTypePredicate = getTypePredicateOfSignature(source);
|
|
var targetTypePredicate = getTypePredicateOfSignature(target);
|
|
if (sourceTypePredicate && targetTypePredicate && typePredicateKindsMatch(sourceTypePredicate, targetTypePredicate) && sourceTypePredicate.type && targetTypePredicate.type) {
|
|
callback(sourceTypePredicate.type, targetTypePredicate.type);
|
|
}
|
|
else {
|
|
callback(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
|
|
}
|
|
}
|
|
function createInferenceContext(typeParameters, signature, flags, compareTypes) {
|
|
return createInferenceContextWorker(typeParameters.map(createInferenceInfo), signature, flags, compareTypes || compareTypesAssignable);
|
|
}
|
|
function cloneInferenceContext(context, extraFlags) {
|
|
if (extraFlags === void 0) { extraFlags = 0; }
|
|
return context && createInferenceContextWorker(ts.map(context.inferences, cloneInferenceInfo), context.signature, context.flags | extraFlags, context.compareTypes);
|
|
}
|
|
function createInferenceContextWorker(inferences, signature, flags, compareTypes) {
|
|
var context = {
|
|
inferences: inferences,
|
|
signature: signature,
|
|
flags: flags,
|
|
compareTypes: compareTypes,
|
|
mapper: reportUnmeasurableMapper,
|
|
nonFixingMapper: reportUnmeasurableMapper,
|
|
};
|
|
context.mapper = makeFixingMapperForContext(context);
|
|
context.nonFixingMapper = makeNonFixingMapperForContext(context);
|
|
return context;
|
|
}
|
|
function makeFixingMapperForContext(context) {
|
|
return makeDeferredTypeMapper(ts.map(context.inferences, function (i) { return i.typeParameter; }), ts.map(context.inferences, function (inference, i) { return function () {
|
|
if (!inference.isFixed) {
|
|
inferFromIntraExpressionSites(context);
|
|
clearCachedInferences(context.inferences);
|
|
inference.isFixed = true;
|
|
}
|
|
return getInferredType(context, i);
|
|
}; }));
|
|
}
|
|
function makeNonFixingMapperForContext(context) {
|
|
return makeDeferredTypeMapper(ts.map(context.inferences, function (i) { return i.typeParameter; }), ts.map(context.inferences, function (_, i) { return function () {
|
|
return getInferredType(context, i);
|
|
}; }));
|
|
}
|
|
function clearCachedInferences(inferences) {
|
|
for (var _i = 0, inferences_1 = inferences; _i < inferences_1.length; _i++) {
|
|
var inference = inferences_1[_i];
|
|
if (!inference.isFixed) {
|
|
inference.inferredType = undefined;
|
|
}
|
|
}
|
|
}
|
|
function addIntraExpressionInferenceSite(context, node, type) {
|
|
var _a;
|
|
((_a = context.intraExpressionInferenceSites) !== null && _a !== void 0 ? _a : (context.intraExpressionInferenceSites = [])).push({ node: node, type: type });
|
|
}
|
|
function inferFromIntraExpressionSites(context) {
|
|
if (context.intraExpressionInferenceSites) {
|
|
for (var _i = 0, _a = context.intraExpressionInferenceSites; _i < _a.length; _i++) {
|
|
var _b = _a[_i], node = _b.node, type = _b.type;
|
|
var contextualType = node.kind === 169 ?
|
|
getContextualTypeForObjectLiteralMethod(node, 2) :
|
|
getContextualType(node, 2);
|
|
if (contextualType) {
|
|
inferTypes(context.inferences, type, contextualType);
|
|
}
|
|
}
|
|
context.intraExpressionInferenceSites = undefined;
|
|
}
|
|
}
|
|
function createInferenceInfo(typeParameter) {
|
|
return {
|
|
typeParameter: typeParameter,
|
|
candidates: undefined,
|
|
contraCandidates: undefined,
|
|
inferredType: undefined,
|
|
priority: undefined,
|
|
topLevel: true,
|
|
isFixed: false,
|
|
impliedArity: undefined
|
|
};
|
|
}
|
|
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,
|
|
impliedArity: inference.impliedArity
|
|
};
|
|
}
|
|
function cloneInferredPartOfContext(context) {
|
|
var inferences = ts.filter(context.inferences, hasInferenceCandidates);
|
|
return inferences.length ?
|
|
createInferenceContextWorker(ts.map(inferences, cloneInferenceInfo), context.signature, context.flags, context.compareTypes) :
|
|
undefined;
|
|
}
|
|
function getMapperFromContext(context) {
|
|
return context && context.mapper;
|
|
}
|
|
function couldContainTypeVariables(type) {
|
|
var objectFlags = ts.getObjectFlags(type);
|
|
if (objectFlags & 524288) {
|
|
return !!(objectFlags & 1048576);
|
|
}
|
|
var result = !!(type.flags & 465829888 ||
|
|
type.flags & 524288 && !isNonGenericTopLevelType(type) && (objectFlags & 4 && (type.node || ts.forEach(getTypeArguments(type), couldContainTypeVariables)) ||
|
|
objectFlags & 16 && type.symbol && type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) && type.symbol.declarations ||
|
|
objectFlags & (32 | 1024 | 4194304 | 8388608)) ||
|
|
type.flags & 3145728 && !(type.flags & 1024) && !isNonGenericTopLevelType(type) && ts.some(type.types, couldContainTypeVariables));
|
|
if (type.flags & 3899393) {
|
|
type.objectFlags |= 524288 | (result ? 1048576 : 0);
|
|
}
|
|
return result;
|
|
}
|
|
function isNonGenericTopLevelType(type) {
|
|
if (type.aliasSymbol && !type.aliasTypeArguments) {
|
|
var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 259);
|
|
return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 305 ? true : n.kind === 261 ? false : "quit"; }));
|
|
}
|
|
return false;
|
|
}
|
|
function isTypeParameterAtTopLevel(type, typeParameter) {
|
|
return !!(type === typeParameter ||
|
|
type.flags & 3145728 && ts.some(type.types, function (t) { return isTypeParameterAtTopLevel(t, typeParameter); }) ||
|
|
type.flags & 16777216 && (getTrueTypeFromConditionalType(type) === typeParameter || getFalseTypeFromConditionalType(type) === typeParameter));
|
|
}
|
|
function createEmptyObjectTypeFromStringLiteral(type) {
|
|
var members = ts.createSymbolTable();
|
|
forEachType(type, function (t) {
|
|
if (!(t.flags & 128)) {
|
|
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 indexInfos = type.flags & 4 ? [createIndexInfo(stringType, emptyObjectType, false)] : ts.emptyArray;
|
|
return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
|
|
}
|
|
function inferTypeForHomomorphicMappedType(source, target, constraint) {
|
|
if (inInferTypeForHomomorphicMappedType) {
|
|
return undefined;
|
|
}
|
|
var key = source.id + "," + target.id + "," + constraint.id;
|
|
if (reverseMappedCache.has(key)) {
|
|
return reverseMappedCache.get(key);
|
|
}
|
|
inInferTypeForHomomorphicMappedType = true;
|
|
var type = createReverseMappedType(source, target, constraint);
|
|
inInferTypeForHomomorphicMappedType = false;
|
|
reverseMappedCache.set(key, type);
|
|
return type;
|
|
}
|
|
function isPartiallyInferableType(type) {
|
|
return !(ts.getObjectFlags(type) & 262144) ||
|
|
isObjectLiteralType(type) && ts.some(getPropertiesOfType(type), function (prop) { return isPartiallyInferableType(getTypeOfSymbol(prop)); }) ||
|
|
isTupleType(type) && ts.some(getTypeArguments(type), isPartiallyInferableType);
|
|
}
|
|
function createReverseMappedType(source, target, constraint) {
|
|
if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
|
|
return undefined;
|
|
}
|
|
if (isArrayType(source)) {
|
|
return createArrayType(inferReverseMappedType(getTypeArguments(source)[0], target, constraint), isReadonlyArrayType(source));
|
|
}
|
|
if (isTupleType(source)) {
|
|
var elementTypes = ts.map(getTypeArguments(source), function (t) { return inferReverseMappedType(t, target, constraint); });
|
|
var elementFlags = getMappedTypeModifiers(target) & 4 ?
|
|
ts.sameMap(source.target.elementFlags, function (f) { return f & 2 ? 1 : f; }) :
|
|
source.target.elementFlags;
|
|
return createTupleType(elementTypes, elementFlags, source.target.readonly, source.target.labeledElementDeclarations);
|
|
}
|
|
var reversed = createObjectType(1024 | 16, undefined);
|
|
reversed.source = source;
|
|
reversed.mappedType = target;
|
|
reversed.constraintType = constraint;
|
|
return reversed;
|
|
}
|
|
function getTypeOfReverseMappedSymbol(symbol) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.type) {
|
|
links.type = inferReverseMappedType(symbol.propertyType, symbol.mappedType, symbol.constraintType);
|
|
}
|
|
return links.type;
|
|
}
|
|
function inferReverseMappedType(sourceType, target, constraint) {
|
|
var typeParameter = getIndexedAccessType(constraint.type, getTypeParameterFromMappedType(target));
|
|
var templateType = getTemplateTypeFromMappedType(target);
|
|
var inference = createInferenceInfo(typeParameter);
|
|
inferTypes([inference], sourceType, templateType);
|
|
return getTypeFromInference(inference) || unknownType;
|
|
}
|
|
function getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties) {
|
|
var properties, _i, properties_2, targetProp, sourceProp, targetType, sourceType;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
properties = getPropertiesOfType(target);
|
|
_i = 0, properties_2 = properties;
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(_i < properties_2.length)) return [3, 6];
|
|
targetProp = properties_2[_i];
|
|
if (isStaticPrivateIdentifierProperty(targetProp)) {
|
|
return [3, 5];
|
|
}
|
|
if (!(requireOptionalProperties || !(targetProp.flags & 16777216 || ts.getCheckFlags(targetProp) & 48))) return [3, 5];
|
|
sourceProp = getPropertyOfType(source, targetProp.escapedName);
|
|
if (!!sourceProp) return [3, 3];
|
|
return [4, targetProp];
|
|
case 2:
|
|
_a.sent();
|
|
return [3, 5];
|
|
case 3:
|
|
if (!matchDiscriminantProperties) return [3, 5];
|
|
targetType = getTypeOfSymbol(targetProp);
|
|
if (!(targetType.flags & 109440)) return [3, 5];
|
|
sourceType = getTypeOfSymbol(sourceProp);
|
|
if (!!(sourceType.flags & 1 || getRegularTypeOfLiteralType(sourceType) === getRegularTypeOfLiteralType(targetType))) return [3, 5];
|
|
return [4, targetProp];
|
|
case 4:
|
|
_a.sent();
|
|
_a.label = 5;
|
|
case 5:
|
|
_i++;
|
|
return [3, 1];
|
|
case 6: return [2];
|
|
}
|
|
});
|
|
}
|
|
function getUnmatchedProperty(source, target, requireOptionalProperties, matchDiscriminantProperties) {
|
|
var result = getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties).next();
|
|
if (!result.done)
|
|
return result.value;
|
|
}
|
|
function tupleTypesDefinitelyUnrelated(source, target) {
|
|
return !(target.target.combinedFlags & 8) && target.target.minLength > source.target.minLength ||
|
|
!target.target.hasRestElement && (source.target.hasRestElement || target.target.fixedLength < source.target.fixedLength);
|
|
}
|
|
function typesDefinitelyUnrelated(source, target) {
|
|
return isTupleType(source) && isTupleType(target) ? tupleTypesDefinitelyUnrelated(source, target) :
|
|
!!getUnmatchedProperty(source, target, false, true) &&
|
|
!!getUnmatchedProperty(target, source, false, false);
|
|
}
|
|
function getTypeFromInference(inference) {
|
|
return inference.candidates ? getUnionType(inference.candidates, 2) :
|
|
inference.contraCandidates ? getIntersectionType(inference.contraCandidates) :
|
|
undefined;
|
|
}
|
|
function hasSkipDirectInferenceFlag(node) {
|
|
return !!getNodeLinks(node).skipDirectInference;
|
|
}
|
|
function isFromInferenceBlockedSource(type) {
|
|
return !!(type.symbol && ts.some(type.symbol.declarations, hasSkipDirectInferenceFlag));
|
|
}
|
|
function templateLiteralTypesDefinitelyUnrelated(source, target) {
|
|
var sourceStart = source.texts[0];
|
|
var targetStart = target.texts[0];
|
|
var sourceEnd = source.texts[source.texts.length - 1];
|
|
var targetEnd = target.texts[target.texts.length - 1];
|
|
var startLen = Math.min(sourceStart.length, targetStart.length);
|
|
var endLen = Math.min(sourceEnd.length, targetEnd.length);
|
|
return sourceStart.slice(0, startLen) !== targetStart.slice(0, startLen) ||
|
|
sourceEnd.slice(sourceEnd.length - endLen) !== targetEnd.slice(targetEnd.length - endLen);
|
|
}
|
|
function isValidNumberString(s, roundTripOnly) {
|
|
if (s === "")
|
|
return false;
|
|
var n = +s;
|
|
return isFinite(n) && (!roundTripOnly || "" + n === s);
|
|
}
|
|
function parseBigIntLiteralType(text) {
|
|
var negative = text.startsWith("-");
|
|
var base10Value = ts.parsePseudoBigInt("".concat(negative ? text.slice(1) : text, "n"));
|
|
return getBigIntLiteralType({ negative: negative, base10Value: base10Value });
|
|
}
|
|
function isValidBigIntString(s, roundTripOnly) {
|
|
if (s === "")
|
|
return false;
|
|
var scanner = ts.createScanner(99, false);
|
|
var success = true;
|
|
scanner.setOnError(function () { return success = false; });
|
|
scanner.setText(s + "n");
|
|
var result = scanner.scan();
|
|
var negative = result === 40;
|
|
if (negative) {
|
|
result = scanner.scan();
|
|
}
|
|
var flags = scanner.getTokenFlags();
|
|
return success && result === 9 && scanner.getTextPos() === (s.length + 1) && !(flags & 512)
|
|
&& (!roundTripOnly || s === ts.pseudoBigIntToString({ negative: negative, base10Value: ts.parsePseudoBigInt(scanner.getTokenValue()) }));
|
|
}
|
|
function isMemberOfStringMapping(source, target) {
|
|
if (target.flags & (4 | 3)) {
|
|
return true;
|
|
}
|
|
if (target.flags & 134217728) {
|
|
return isTypeAssignableTo(source, target);
|
|
}
|
|
if (target.flags & 268435456) {
|
|
var mappingStack = [];
|
|
while (target.flags & 268435456) {
|
|
mappingStack.unshift(target.symbol);
|
|
target = target.type;
|
|
}
|
|
var mappedSource = ts.reduceLeft(mappingStack, function (memo, value) { return getStringMappingType(value, memo); }, source);
|
|
return mappedSource === source && isMemberOfStringMapping(source, target);
|
|
}
|
|
return false;
|
|
}
|
|
function isValidTypeForTemplateLiteralPlaceholder(source, target) {
|
|
if (source === target || target.flags & (1 | 4)) {
|
|
return true;
|
|
}
|
|
if (source.flags & 128) {
|
|
var value = source.value;
|
|
return !!(target.flags & 8 && isValidNumberString(value, false) ||
|
|
target.flags & 64 && isValidBigIntString(value, false) ||
|
|
target.flags & (512 | 98304) && value === target.intrinsicName ||
|
|
target.flags & 268435456 && isMemberOfStringMapping(getStringLiteralType(value), target));
|
|
}
|
|
if (source.flags & 134217728) {
|
|
var texts = source.texts;
|
|
return texts.length === 2 && texts[0] === "" && texts[1] === "" && isTypeAssignableTo(source.types[0], target);
|
|
}
|
|
return isTypeAssignableTo(source, target);
|
|
}
|
|
function inferTypesFromTemplateLiteralType(source, target) {
|
|
return source.flags & 128 ? inferFromLiteralPartsToTemplateLiteral([source.value], ts.emptyArray, target) :
|
|
source.flags & 134217728 ?
|
|
ts.arraysEqual(source.texts, target.texts) ? ts.map(source.types, getStringLikeTypeForType) :
|
|
inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) :
|
|
undefined;
|
|
}
|
|
function isTypeMatchedByTemplateLiteralType(source, target) {
|
|
var inferences = inferTypesFromTemplateLiteralType(source, target);
|
|
return !!inferences && ts.every(inferences, function (r, i) { return isValidTypeForTemplateLiteralPlaceholder(r, target.types[i]); });
|
|
}
|
|
function getStringLikeTypeForType(type) {
|
|
return type.flags & (1 | 402653316) ? type : getTemplateLiteralType(["", ""], [type]);
|
|
}
|
|
function inferFromLiteralPartsToTemplateLiteral(sourceTexts, sourceTypes, target) {
|
|
var lastSourceIndex = sourceTexts.length - 1;
|
|
var sourceStartText = sourceTexts[0];
|
|
var sourceEndText = sourceTexts[lastSourceIndex];
|
|
var targetTexts = target.texts;
|
|
var lastTargetIndex = targetTexts.length - 1;
|
|
var targetStartText = targetTexts[0];
|
|
var targetEndText = targetTexts[lastTargetIndex];
|
|
if (lastSourceIndex === 0 && sourceStartText.length < targetStartText.length + targetEndText.length ||
|
|
!sourceStartText.startsWith(targetStartText) || !sourceEndText.endsWith(targetEndText))
|
|
return undefined;
|
|
var remainingEndText = sourceEndText.slice(0, sourceEndText.length - targetEndText.length);
|
|
var matches = [];
|
|
var seg = 0;
|
|
var pos = targetStartText.length;
|
|
for (var i = 1; i < lastTargetIndex; i++) {
|
|
var delim = targetTexts[i];
|
|
if (delim.length > 0) {
|
|
var s = seg;
|
|
var p = pos;
|
|
while (true) {
|
|
p = getSourceText(s).indexOf(delim, p);
|
|
if (p >= 0)
|
|
break;
|
|
s++;
|
|
if (s === sourceTexts.length)
|
|
return undefined;
|
|
p = 0;
|
|
}
|
|
addMatch(s, p);
|
|
pos += delim.length;
|
|
}
|
|
else if (pos < getSourceText(seg).length) {
|
|
addMatch(seg, pos + 1);
|
|
}
|
|
else if (seg < lastSourceIndex) {
|
|
addMatch(seg + 1, 0);
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
addMatch(lastSourceIndex, getSourceText(lastSourceIndex).length);
|
|
return matches;
|
|
function getSourceText(index) {
|
|
return index < lastSourceIndex ? sourceTexts[index] : remainingEndText;
|
|
}
|
|
function addMatch(s, p) {
|
|
var matchType = s === seg ?
|
|
getStringLiteralType(getSourceText(s).slice(pos, p)) :
|
|
getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
|
|
matches.push(matchType);
|
|
seg = s;
|
|
pos = p;
|
|
}
|
|
}
|
|
function inferTypes(inferences, originalSource, originalTarget, priority, contravariant) {
|
|
if (priority === void 0) { priority = 0; }
|
|
if (contravariant === void 0) { contravariant = false; }
|
|
var bivariant = false;
|
|
var propagationType;
|
|
var inferencePriority = 2048;
|
|
var allowComplexConstraintInference = true;
|
|
var visited;
|
|
var sourceStack;
|
|
var targetStack;
|
|
var expandingFlags = 0;
|
|
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.aliasSymbol === target.aliasSymbol) {
|
|
if (source.aliasTypeArguments) {
|
|
inferFromTypeArguments(source.aliasTypeArguments, target.aliasTypeArguments, getAliasVariances(source.aliasSymbol));
|
|
}
|
|
return;
|
|
}
|
|
if (source === target && source.flags & 3145728) {
|
|
for (var _i = 0, _a = source.types; _i < _a.length; _i++) {
|
|
var t = _a[_i];
|
|
inferFromTypes(t, t);
|
|
}
|
|
return;
|
|
}
|
|
if (target.flags & 1048576) {
|
|
var _b = inferFromMatchingTypes(source.flags & 1048576 ? source.types : [source], target.types, isTypeOrBaseIdenticalTo), tempSources = _b[0], tempTargets = _b[1];
|
|
var _c = inferFromMatchingTypes(tempSources, tempTargets, isTypeCloselyMatchedBy), sources = _c[0], targets = _c[1];
|
|
if (targets.length === 0) {
|
|
return;
|
|
}
|
|
target = getUnionType(targets);
|
|
if (sources.length === 0) {
|
|
inferWithPriority(source, target, 1);
|
|
return;
|
|
}
|
|
source = getUnionType(sources);
|
|
}
|
|
else if (target.flags & 2097152 && ts.some(target.types, function (t) { return !!getInferenceInfoForType(t) || (isGenericMappedType(t) && !!getInferenceInfoForType(getHomomorphicTypeVariable(t) || neverType)); })) {
|
|
if (!(source.flags & 1048576)) {
|
|
var _d = inferFromMatchingTypes(source.flags & 2097152 ? source.types : [source], target.types, isTypeIdenticalTo), sources = _d[0], targets = _d[1];
|
|
if (sources.length === 0 || targets.length === 0) {
|
|
return;
|
|
}
|
|
source = getIntersectionType(sources);
|
|
target = getIntersectionType(targets);
|
|
}
|
|
}
|
|
else if (target.flags & (8388608 | 33554432)) {
|
|
target = getActualTypeVariable(target);
|
|
}
|
|
if (target.flags & 8650752) {
|
|
if (isFromInferenceBlockedSource(source)) {
|
|
return;
|
|
}
|
|
var inference = getInferenceInfoForType(target);
|
|
if (inference) {
|
|
if (ts.getObjectFlags(source) & 262144) {
|
|
return;
|
|
}
|
|
if (!inference.isFixed) {
|
|
if (inference.priority === undefined || priority < inference.priority) {
|
|
inference.candidates = undefined;
|
|
inference.contraCandidates = undefined;
|
|
inference.topLevel = true;
|
|
inference.priority = priority;
|
|
}
|
|
if (priority === inference.priority) {
|
|
var candidate = propagationType || source;
|
|
if (contravariant && !bivariant) {
|
|
if (!ts.contains(inference.contraCandidates, candidate)) {
|
|
inference.contraCandidates = ts.append(inference.contraCandidates, candidate);
|
|
clearCachedInferences(inferences);
|
|
}
|
|
}
|
|
else if (!ts.contains(inference.candidates, candidate)) {
|
|
inference.candidates = ts.append(inference.candidates, candidate);
|
|
clearCachedInferences(inferences);
|
|
}
|
|
}
|
|
if (!(priority & 128) && target.flags & 262144 && inference.topLevel && !isTypeParameterAtTopLevel(originalTarget, target)) {
|
|
inference.topLevel = false;
|
|
clearCachedInferences(inferences);
|
|
}
|
|
}
|
|
inferencePriority = Math.min(inferencePriority, priority);
|
|
return;
|
|
}
|
|
var simplified = getSimplifiedType(target, false);
|
|
if (simplified !== target) {
|
|
inferFromTypes(source, simplified);
|
|
}
|
|
else if (target.flags & 8388608) {
|
|
var indexType = getSimplifiedType(target.indexType, false);
|
|
if (indexType.flags & 465829888) {
|
|
var simplified_1 = distributeIndexOverObjectType(getSimplifiedType(target.objectType, false), indexType, false);
|
|
if (simplified_1 && simplified_1 !== target) {
|
|
inferFromTypes(source, simplified_1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && (source.target === target.target || isArrayType(source) && isArrayType(target)) &&
|
|
!(source.node && target.node)) {
|
|
inferFromTypeArguments(getTypeArguments(source), getTypeArguments(target), getVariances(source.target));
|
|
}
|
|
else if (source.flags & 4194304 && target.flags & 4194304) {
|
|
inferFromContravariantTypes(source.type, target.type);
|
|
}
|
|
else if ((isLiteralType(source) || source.flags & 4) && target.flags & 4194304) {
|
|
var empty = createEmptyObjectTypeFromStringLiteral(source);
|
|
inferFromContravariantTypesWithPriority(empty, target.type, 256);
|
|
}
|
|
else if (source.flags & 8388608 && target.flags & 8388608) {
|
|
inferFromTypes(source.objectType, target.objectType);
|
|
inferFromTypes(source.indexType, target.indexType);
|
|
}
|
|
else if (source.flags & 268435456 && target.flags & 268435456) {
|
|
if (source.symbol === target.symbol) {
|
|
inferFromTypes(source.type, target.type);
|
|
}
|
|
}
|
|
else if (source.flags & 33554432) {
|
|
inferFromTypes(source.baseType, target);
|
|
inferWithPriority(source.substitute, target, 4);
|
|
}
|
|
else if (target.flags & 16777216) {
|
|
invokeOnce(source, target, inferToConditionalType);
|
|
}
|
|
else if (target.flags & 3145728) {
|
|
inferToMultipleTypes(source, target.types, target.flags);
|
|
}
|
|
else if (source.flags & 1048576) {
|
|
var sourceTypes = source.types;
|
|
for (var _e = 0, sourceTypes_2 = sourceTypes; _e < sourceTypes_2.length; _e++) {
|
|
var sourceType = sourceTypes_2[_e];
|
|
inferFromTypes(sourceType, target);
|
|
}
|
|
}
|
|
else if (target.flags & 134217728) {
|
|
inferToTemplateLiteralType(source, target);
|
|
}
|
|
else {
|
|
source = getReducedType(source);
|
|
if (!(priority & 512 && source.flags & (2097152 | 465829888))) {
|
|
var apparentSource = getApparentType(source);
|
|
if (apparentSource !== source && allowComplexConstraintInference && !(apparentSource.flags & (524288 | 2097152))) {
|
|
allowComplexConstraintInference = false;
|
|
return inferFromTypes(apparentSource, target);
|
|
}
|
|
source = apparentSource;
|
|
}
|
|
if (source.flags & (524288 | 2097152)) {
|
|
invokeOnce(source, target, inferFromObjectTypes);
|
|
}
|
|
}
|
|
}
|
|
function inferWithPriority(source, target, newPriority) {
|
|
var savePriority = priority;
|
|
priority |= newPriority;
|
|
inferFromTypes(source, target);
|
|
priority = savePriority;
|
|
}
|
|
function inferFromContravariantTypesWithPriority(source, target, newPriority) {
|
|
var savePriority = priority;
|
|
priority |= newPriority;
|
|
inferFromContravariantTypes(source, target);
|
|
priority = savePriority;
|
|
}
|
|
function inferToMultipleTypesWithPriority(source, targets, targetFlags, newPriority) {
|
|
var savePriority = priority;
|
|
priority |= newPriority;
|
|
inferToMultipleTypes(source, targets, targetFlags);
|
|
priority = savePriority;
|
|
}
|
|
function invokeOnce(source, target, action) {
|
|
var key = source.id + "," + target.id;
|
|
var status = visited && visited.get(key);
|
|
if (status !== undefined) {
|
|
inferencePriority = Math.min(inferencePriority, status);
|
|
return;
|
|
}
|
|
(visited || (visited = new ts.Map())).set(key, -1);
|
|
var saveInferencePriority = inferencePriority;
|
|
inferencePriority = 2048;
|
|
var saveExpandingFlags = expandingFlags;
|
|
var sourceIdentity = getRecursionIdentity(source);
|
|
var targetIdentity = getRecursionIdentity(target);
|
|
if (ts.contains(sourceStack, sourceIdentity))
|
|
expandingFlags |= 1;
|
|
if (ts.contains(targetStack, targetIdentity))
|
|
expandingFlags |= 2;
|
|
if (expandingFlags !== 3) {
|
|
(sourceStack || (sourceStack = [])).push(sourceIdentity);
|
|
(targetStack || (targetStack = [])).push(targetIdentity);
|
|
action(source, target);
|
|
targetStack.pop();
|
|
sourceStack.pop();
|
|
}
|
|
else {
|
|
inferencePriority = -1;
|
|
}
|
|
expandingFlags = saveExpandingFlags;
|
|
visited.set(key, inferencePriority);
|
|
inferencePriority = Math.min(inferencePriority, saveInferencePriority);
|
|
}
|
|
function inferFromMatchingTypes(sources, targets, matches) {
|
|
var matchedSources;
|
|
var matchedTargets;
|
|
for (var _i = 0, targets_1 = targets; _i < targets_1.length; _i++) {
|
|
var t = targets_1[_i];
|
|
for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) {
|
|
var s = sources_1[_a];
|
|
if (matches(s, t)) {
|
|
inferFromTypes(s, t);
|
|
matchedSources = ts.appendIfUnique(matchedSources, s);
|
|
matchedTargets = ts.appendIfUnique(matchedTargets, t);
|
|
}
|
|
}
|
|
}
|
|
return [
|
|
matchedSources ? ts.filter(sources, function (t) { return !ts.contains(matchedSources, t); }) : sources,
|
|
matchedTargets ? ts.filter(targets, function (t) { return !ts.contains(matchedTargets, t); }) : targets,
|
|
];
|
|
}
|
|
function inferFromTypeArguments(sourceTypes, targetTypes, variances) {
|
|
var count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length;
|
|
for (var i = 0; i < count; i++) {
|
|
if (i < variances.length && (variances[i] & 7) === 2) {
|
|
inferFromContravariantTypes(sourceTypes[i], targetTypes[i]);
|
|
}
|
|
else {
|
|
inferFromTypes(sourceTypes[i], targetTypes[i]);
|
|
}
|
|
}
|
|
}
|
|
function inferFromContravariantTypes(source, target) {
|
|
contravariant = !contravariant;
|
|
inferFromTypes(source, target);
|
|
contravariant = !contravariant;
|
|
}
|
|
function inferFromContravariantTypesIfStrictFunctionTypes(source, target) {
|
|
if (strictFunctionTypes || priority & 1024) {
|
|
inferFromContravariantTypes(source, target);
|
|
}
|
|
else {
|
|
inferFromTypes(source, target);
|
|
}
|
|
}
|
|
function getInferenceInfoForType(type) {
|
|
if (type.flags & 8650752) {
|
|
for (var _i = 0, inferences_2 = inferences; _i < inferences_2.length; _i++) {
|
|
var inference = inferences_2[_i];
|
|
if (type === inference.typeParameter) {
|
|
return inference;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getSingleTypeVariableFromIntersectionTypes(types) {
|
|
var typeVariable;
|
|
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
|
var type = types_14[_i];
|
|
var t = type.flags & 2097152 && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
|
|
if (!t || typeVariable && t !== typeVariable) {
|
|
return undefined;
|
|
}
|
|
typeVariable = t;
|
|
}
|
|
return typeVariable;
|
|
}
|
|
function inferToMultipleTypes(source, targets, targetFlags) {
|
|
var typeVariableCount = 0;
|
|
if (targetFlags & 1048576) {
|
|
var nakedTypeVariable = void 0;
|
|
var sources = source.flags & 1048576 ? source.types : [source];
|
|
var matched_1 = new Array(sources.length);
|
|
var inferenceCircularity = false;
|
|
for (var _i = 0, targets_2 = targets; _i < targets_2.length; _i++) {
|
|
var t = targets_2[_i];
|
|
if (getInferenceInfoForType(t)) {
|
|
nakedTypeVariable = t;
|
|
typeVariableCount++;
|
|
}
|
|
else {
|
|
for (var i = 0; i < sources.length; i++) {
|
|
var saveInferencePriority = inferencePriority;
|
|
inferencePriority = 2048;
|
|
inferFromTypes(sources[i], t);
|
|
if (inferencePriority === priority)
|
|
matched_1[i] = true;
|
|
inferenceCircularity = inferenceCircularity || inferencePriority === -1;
|
|
inferencePriority = Math.min(inferencePriority, saveInferencePriority);
|
|
}
|
|
}
|
|
}
|
|
if (typeVariableCount === 0) {
|
|
var intersectionTypeVariable = getSingleTypeVariableFromIntersectionTypes(targets);
|
|
if (intersectionTypeVariable) {
|
|
inferWithPriority(source, intersectionTypeVariable, 1);
|
|
}
|
|
return;
|
|
}
|
|
if (typeVariableCount === 1 && !inferenceCircularity) {
|
|
var unmatched = ts.flatMap(sources, function (s, i) { return matched_1[i] ? undefined : s; });
|
|
if (unmatched.length) {
|
|
inferFromTypes(getUnionType(unmatched), nakedTypeVariable);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
for (var _a = 0, targets_3 = targets; _a < targets_3.length; _a++) {
|
|
var t = targets_3[_a];
|
|
if (getInferenceInfoForType(t)) {
|
|
typeVariableCount++;
|
|
}
|
|
else {
|
|
inferFromTypes(source, t);
|
|
}
|
|
}
|
|
}
|
|
if (targetFlags & 2097152 ? typeVariableCount === 1 : typeVariableCount > 0) {
|
|
for (var _b = 0, targets_4 = targets; _b < targets_4.length; _b++) {
|
|
var t = targets_4[_b];
|
|
if (getInferenceInfoForType(t)) {
|
|
inferWithPriority(source, t, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function inferToMappedType(source, target, constraintType) {
|
|
if (constraintType.flags & 1048576) {
|
|
var result = false;
|
|
for (var _i = 0, _a = constraintType.types; _i < _a.length; _i++) {
|
|
var type = _a[_i];
|
|
result = inferToMappedType(source, target, type) || result;
|
|
}
|
|
return result;
|
|
}
|
|
if (constraintType.flags & 4194304) {
|
|
var inference = getInferenceInfoForType(constraintType.type);
|
|
if (inference && !inference.isFixed && !isFromInferenceBlockedSource(source)) {
|
|
var inferredType = inferTypeForHomomorphicMappedType(source, target, constraintType);
|
|
if (inferredType) {
|
|
inferWithPriority(inferredType, inference.typeParameter, ts.getObjectFlags(source) & 262144 ?
|
|
16 :
|
|
8);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
if (constraintType.flags & 262144) {
|
|
inferWithPriority(getIndexType(source), constraintType, 32);
|
|
var extendedConstraint = getConstraintOfType(constraintType);
|
|
if (extendedConstraint && inferToMappedType(source, target, extendedConstraint)) {
|
|
return true;
|
|
}
|
|
var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
|
|
var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
|
|
inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function inferToConditionalType(source, target) {
|
|
if (source.flags & 16777216) {
|
|
inferFromTypes(source.checkType, target.checkType);
|
|
inferFromTypes(source.extendsType, target.extendsType);
|
|
inferFromTypes(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target));
|
|
inferFromTypes(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target));
|
|
}
|
|
else {
|
|
var targetTypes = [getTrueTypeFromConditionalType(target), getFalseTypeFromConditionalType(target)];
|
|
inferToMultipleTypesWithPriority(source, targetTypes, target.flags, contravariant ? 64 : 0);
|
|
}
|
|
}
|
|
function inferToTemplateLiteralType(source, target) {
|
|
var matches = inferTypesFromTemplateLiteralType(source, target);
|
|
var types = target.types;
|
|
if (matches || ts.every(target.texts, function (s) { return s.length === 0; })) {
|
|
var _loop_24 = function (i) {
|
|
var source_1 = matches ? matches[i] : neverType;
|
|
var target_3 = types[i];
|
|
if (source_1.flags & 128 && target_3.flags & 8650752) {
|
|
var inferenceContext = getInferenceInfoForType(target_3);
|
|
var constraint = inferenceContext ? getBaseConstraintOfType(inferenceContext.typeParameter) : undefined;
|
|
if (constraint && !isTypeAny(constraint)) {
|
|
var constraintTypes = constraint.flags & 1048576 ? constraint.types : [constraint];
|
|
var allTypeFlags_1 = ts.reduceLeft(constraintTypes, function (flags, t) { return flags | t.flags; }, 0);
|
|
if (!(allTypeFlags_1 & 4)) {
|
|
var str_1 = source_1.value;
|
|
if (allTypeFlags_1 & 296 && !isValidNumberString(str_1, true)) {
|
|
allTypeFlags_1 &= ~296;
|
|
}
|
|
if (allTypeFlags_1 & 2112 && !isValidBigIntString(str_1, true)) {
|
|
allTypeFlags_1 &= ~2112;
|
|
}
|
|
var matchingType = ts.reduceLeft(constraintTypes, function (left, right) {
|
|
return !(right.flags & allTypeFlags_1) ? left :
|
|
left.flags & 4 ? left : right.flags & 4 ? source_1 :
|
|
left.flags & 134217728 ? left : right.flags & 134217728 && isTypeMatchedByTemplateLiteralType(source_1, right) ? source_1 :
|
|
left.flags & 268435456 ? left : right.flags & 268435456 && str_1 === applyStringMapping(right.symbol, str_1) ? source_1 :
|
|
left.flags & 128 ? left : right.flags & 128 && right.value === str_1 ? right :
|
|
left.flags & 8 ? left : right.flags & 8 ? getNumberLiteralType(+str_1) :
|
|
left.flags & 32 ? left : right.flags & 32 ? getNumberLiteralType(+str_1) :
|
|
left.flags & 256 ? left : right.flags & 256 && right.value === +str_1 ? right :
|
|
left.flags & 64 ? left : right.flags & 64 ? parseBigIntLiteralType(str_1) :
|
|
left.flags & 2048 ? left : right.flags & 2048 && ts.pseudoBigIntToString(right.value) === str_1 ? right :
|
|
left.flags & 16 ? left : right.flags & 16 ? str_1 === "true" ? trueType : str_1 === "false" ? falseType : booleanType :
|
|
left.flags & 512 ? left : right.flags & 512 && right.intrinsicName === str_1 ? right :
|
|
left.flags & 32768 ? left : right.flags & 32768 && right.intrinsicName === str_1 ? right :
|
|
left.flags & 65536 ? left : right.flags & 65536 && right.intrinsicName === str_1 ? right :
|
|
left;
|
|
}, neverType);
|
|
if (!(matchingType.flags & 131072)) {
|
|
inferFromTypes(matchingType, target_3);
|
|
return "continue";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
inferFromTypes(source_1, target_3);
|
|
};
|
|
for (var i = 0; i < types.length; i++) {
|
|
_loop_24(i);
|
|
}
|
|
}
|
|
}
|
|
function inferFromObjectTypes(source, target) {
|
|
if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && (source.target === target.target || isArrayType(source) && isArrayType(target))) {
|
|
inferFromTypeArguments(getTypeArguments(source), getTypeArguments(target), getVariances(source.target));
|
|
return;
|
|
}
|
|
if (isGenericMappedType(source) && isGenericMappedType(target)) {
|
|
inferFromTypes(getConstraintTypeFromMappedType(source), getConstraintTypeFromMappedType(target));
|
|
inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target));
|
|
var sourceNameType = getNameTypeFromMappedType(source);
|
|
var targetNameType = getNameTypeFromMappedType(target);
|
|
if (sourceNameType && targetNameType)
|
|
inferFromTypes(sourceNameType, targetNameType);
|
|
}
|
|
if (ts.getObjectFlags(target) & 32 && !target.declaration.nameType) {
|
|
var constraintType = getConstraintTypeFromMappedType(target);
|
|
if (inferToMappedType(source, target, constraintType)) {
|
|
return;
|
|
}
|
|
}
|
|
if (!typesDefinitelyUnrelated(source, target)) {
|
|
if (isArrayOrTupleType(source)) {
|
|
if (isTupleType(target)) {
|
|
var sourceArity = getTypeReferenceArity(source);
|
|
var targetArity = getTypeReferenceArity(target);
|
|
var elementTypes = getTypeArguments(target);
|
|
var elementFlags = target.target.elementFlags;
|
|
if (isTupleType(source) && isTupleTypeStructureMatching(source, target)) {
|
|
for (var i = 0; i < targetArity; i++) {
|
|
inferFromTypes(getTypeArguments(source)[i], elementTypes[i]);
|
|
}
|
|
return;
|
|
}
|
|
var startLength = isTupleType(source) ? Math.min(source.target.fixedLength, target.target.fixedLength) : 0;
|
|
var endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3) : 0, target.target.hasRestElement ? getEndElementCount(target.target, 3) : 0);
|
|
for (var i = 0; i < startLength; i++) {
|
|
inferFromTypes(getTypeArguments(source)[i], elementTypes[i]);
|
|
}
|
|
if (!isTupleType(source) || sourceArity - startLength - endLength === 1 && source.target.elementFlags[startLength] & 4) {
|
|
var restType = getTypeArguments(source)[startLength];
|
|
for (var i = startLength; i < targetArity - endLength; i++) {
|
|
inferFromTypes(elementFlags[i] & 8 ? createArrayType(restType) : restType, elementTypes[i]);
|
|
}
|
|
}
|
|
else {
|
|
var middleLength = targetArity - startLength - endLength;
|
|
if (middleLength === 2 && elementFlags[startLength] & elementFlags[startLength + 1] & 8 && isTupleType(source)) {
|
|
var targetInfo = getInferenceInfoForType(elementTypes[startLength]);
|
|
if (targetInfo && targetInfo.impliedArity !== undefined) {
|
|
inferFromTypes(sliceTupleType(source, startLength, endLength + sourceArity - targetInfo.impliedArity), elementTypes[startLength]);
|
|
inferFromTypes(sliceTupleType(source, startLength + targetInfo.impliedArity, endLength), elementTypes[startLength + 1]);
|
|
}
|
|
}
|
|
else if (middleLength === 1 && elementFlags[startLength] & 8) {
|
|
var endsInOptional = target.target.elementFlags[targetArity - 1] & 2;
|
|
var sourceSlice = isTupleType(source) ? sliceTupleType(source, startLength, endLength) : createArrayType(getTypeArguments(source)[0]);
|
|
inferWithPriority(sourceSlice, elementTypes[startLength], endsInOptional ? 2 : 0);
|
|
}
|
|
else if (middleLength === 1 && elementFlags[startLength] & 4) {
|
|
var restType = isTupleType(source) ? getElementTypeOfSliceOfTupleType(source, startLength, endLength) : getTypeArguments(source)[0];
|
|
if (restType) {
|
|
inferFromTypes(restType, elementTypes[startLength]);
|
|
}
|
|
}
|
|
}
|
|
for (var i = 0; i < endLength; i++) {
|
|
inferFromTypes(getTypeArguments(source)[sourceArity - i - 1], elementTypes[targetArity - i - 1]);
|
|
}
|
|
return;
|
|
}
|
|
if (isArrayType(target)) {
|
|
inferFromIndexTypes(source, target);
|
|
return;
|
|
}
|
|
}
|
|
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_3 = properties; _i < properties_3.length; _i++) {
|
|
var targetProp = properties_3[_i];
|
|
var sourceProp = getPropertyOfType(source, targetProp.escapedName);
|
|
if (sourceProp && !ts.some(sourceProp.declarations, hasSkipDirectInferenceFlag)) {
|
|
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]), getErasedSignature(targetSignatures[targetLen - len + i]));
|
|
}
|
|
}
|
|
function inferFromSignature(source, target) {
|
|
var saveBivariant = bivariant;
|
|
var kind = target.declaration ? target.declaration.kind : 0;
|
|
bivariant = bivariant || kind === 169 || kind === 168 || kind === 171;
|
|
applyToParameterTypes(source, target, inferFromContravariantTypesIfStrictFunctionTypes);
|
|
bivariant = saveBivariant;
|
|
applyToReturnTypes(source, target, inferFromTypes);
|
|
}
|
|
function inferFromIndexTypes(source, target) {
|
|
var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32) ? 8 : 0;
|
|
var indexInfos = getIndexInfosOfType(target);
|
|
if (isObjectTypeWithInferableIndex(source)) {
|
|
for (var _i = 0, indexInfos_6 = indexInfos; _i < indexInfos_6.length; _i++) {
|
|
var targetInfo = indexInfos_6[_i];
|
|
var propTypes = [];
|
|
for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
|
|
var prop = _b[_a];
|
|
if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576), targetInfo.keyType)) {
|
|
var propType = getTypeOfSymbol(prop);
|
|
propTypes.push(prop.flags & 16777216 ? removeMissingOrUndefinedType(propType) : propType);
|
|
}
|
|
}
|
|
for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
|
|
var info = _d[_c];
|
|
if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
|
|
propTypes.push(info.type);
|
|
}
|
|
}
|
|
if (propTypes.length) {
|
|
inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
|
|
}
|
|
}
|
|
}
|
|
for (var _e = 0, indexInfos_7 = indexInfos; _e < indexInfos_7.length; _e++) {
|
|
var targetInfo = indexInfos_7[_e];
|
|
var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
|
|
if (sourceInfo) {
|
|
inferWithPriority(sourceInfo.type, targetInfo.type, priority);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isTypeOrBaseIdenticalTo(s, t) {
|
|
return exactOptionalPropertyTypes && t === missingType ? s === t :
|
|
(isTypeIdenticalTo(s, t) || !!(t.flags & 4 && s.flags & 128 || t.flags & 8 && s.flags & 256));
|
|
}
|
|
function isTypeCloselyMatchedBy(s, t) {
|
|
return !!(s.flags & 524288 && t.flags & 524288 && s.symbol && s.symbol === t.symbol ||
|
|
s.aliasSymbol && s.aliasTypeArguments && s.aliasSymbol === t.aliasSymbol);
|
|
}
|
|
function hasPrimitiveConstraint(type) {
|
|
var constraint = getConstraintOfTypeParameter(type);
|
|
return !!constraint && maybeTypeOfKind(constraint.flags & 16777216 ? getDefaultConstraintOfConditionalType(constraint) : constraint, 131068 | 4194304 | 134217728 | 268435456);
|
|
}
|
|
function isObjectLiteralType(type) {
|
|
return !!(ts.getObjectFlags(type) & 128);
|
|
}
|
|
function isObjectOrArrayLiteralType(type) {
|
|
return !!(ts.getObjectFlags(type) & (128 | 16384));
|
|
}
|
|
function unionObjectAndArrayLiteralCandidates(candidates) {
|
|
if (candidates.length > 1) {
|
|
var objectLiterals = ts.filter(candidates, isObjectOrArrayLiteralType);
|
|
if (objectLiterals.length) {
|
|
var literalsType = getUnionType(objectLiterals, 2);
|
|
return ts.concatenate(ts.filter(candidates, function (t) { return !isObjectOrArrayLiteralType(t); }), [literalsType]);
|
|
}
|
|
}
|
|
return candidates;
|
|
}
|
|
function getContravariantInference(inference) {
|
|
return inference.priority & 416 ? getIntersectionType(inference.contraCandidates) : getCommonSubtype(inference.contraCandidates);
|
|
}
|
|
function getCovariantInference(inference, signature) {
|
|
var candidates = unionObjectAndArrayLiteralCandidates(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 = inference.priority & 416 ?
|
|
getUnionType(baseCandidates, 2) :
|
|
getCommonSupertype(baseCandidates);
|
|
return getWidenedType(unwidenedType);
|
|
}
|
|
function getInferredType(context, index) {
|
|
var inference = context.inferences[index];
|
|
if (!inference.inferredType) {
|
|
var inferredType = void 0;
|
|
var signature = context.signature;
|
|
if (signature) {
|
|
var inferredCovariantType_1 = inference.candidates ? getCovariantInference(inference, signature) : undefined;
|
|
if (inference.contraCandidates) {
|
|
inferredType = inferredCovariantType_1 && !(inferredCovariantType_1.flags & 131072) &&
|
|
ts.some(inference.contraCandidates, function (t) { return isTypeSubtypeOf(inferredCovariantType_1, t); }) ?
|
|
inferredCovariantType_1 : getContravariantInference(inference);
|
|
}
|
|
else if (inferredCovariantType_1) {
|
|
inferredType = inferredCovariantType_1;
|
|
}
|
|
else if (context.flags & 1) {
|
|
inferredType = silentNeverType;
|
|
}
|
|
else {
|
|
var defaultType = getDefaultFromTypeParameter(inference.typeParameter);
|
|
if (defaultType) {
|
|
inferredType = instantiateType(defaultType, mergeTypeMappers(createBackreferenceMapper(context, index), context.nonFixingMapper));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
inferredType = getTypeFromInference(inference);
|
|
}
|
|
inference.inferredType = inferredType || getDefaultTypeArgumentType(!!(context.flags & 2));
|
|
var constraint = getConstraintOfTypeParameter(inference.typeParameter);
|
|
if (constraint) {
|
|
var instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper);
|
|
if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) {
|
|
inference.inferredType = inferredType = instantiatedConstraint;
|
|
}
|
|
}
|
|
}
|
|
return inference.inferredType;
|
|
}
|
|
function getDefaultTypeArgumentType(isInJavaScriptFile) {
|
|
return isInJavaScriptFile ? anyType : unknownType;
|
|
}
|
|
function getInferredTypes(context) {
|
|
var result = [];
|
|
for (var i = 0; i < context.inferences.length; i++) {
|
|
result.push(getInferredType(context, i));
|
|
}
|
|
return result;
|
|
}
|
|
function getCannotFindNameDiagnosticForName(node) {
|
|
switch (node.escapedText) {
|
|
case "document":
|
|
case "console":
|
|
return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom;
|
|
case "$":
|
|
return compilerOptions.types
|
|
? ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig
|
|
: ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery;
|
|
case "describe":
|
|
case "suite":
|
|
case "it":
|
|
case "test":
|
|
return compilerOptions.types
|
|
? ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig
|
|
: ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha;
|
|
case "process":
|
|
case "require":
|
|
case "Buffer":
|
|
case "module":
|
|
return compilerOptions.types
|
|
? ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig
|
|
: ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode;
|
|
case "Map":
|
|
case "Set":
|
|
case "Promise":
|
|
case "Symbol":
|
|
case "WeakMap":
|
|
case "WeakSet":
|
|
case "Iterator":
|
|
case "AsyncIterator":
|
|
case "SharedArrayBuffer":
|
|
case "Atomics":
|
|
case "AsyncIterable":
|
|
case "AsyncIterableIterator":
|
|
case "AsyncGenerator":
|
|
case "AsyncGeneratorFunction":
|
|
case "BigInt":
|
|
case "Reflect":
|
|
case "BigInt64Array":
|
|
case "BigUint64Array":
|
|
return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
|
|
case "await":
|
|
if (ts.isCallExpression(node.parent)) {
|
|
return ts.Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function;
|
|
}
|
|
default:
|
|
if (node.parent.kind === 297) {
|
|
return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
|
|
}
|
|
else {
|
|
return ts.Diagnostics.Cannot_find_name_0;
|
|
}
|
|
}
|
|
}
|
|
function getResolvedSymbol(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedSymbol) {
|
|
links.resolvedSymbol = !ts.nodeIsMissing(node) &&
|
|
resolveName(node, node.escapedText, 111551 | 1048576, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), false) || unknownSymbol;
|
|
}
|
|
return links.resolvedSymbol;
|
|
}
|
|
function isInTypeQuery(node) {
|
|
return !!ts.findAncestor(node, function (n) { return n.kind === 181 ? true : n.kind === 79 || n.kind === 161 ? false : "quit"; });
|
|
}
|
|
function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
if (!ts.isThisInTypeQuery(node)) {
|
|
var symbol = getResolvedSymbol(node);
|
|
return symbol !== unknownSymbol ? "".concat(flowContainer ? getNodeId(flowContainer) : "-1", "|").concat(getTypeId(declaredType), "|").concat(getTypeId(initialType), "|").concat(getSymbolId(symbol)) : undefined;
|
|
}
|
|
case 108:
|
|
return "0|".concat(flowContainer ? getNodeId(flowContainer) : "-1", "|").concat(getTypeId(declaredType), "|").concat(getTypeId(initialType));
|
|
case 230:
|
|
case 212:
|
|
return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
|
|
case 161:
|
|
var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
|
|
return left && left + "." + node.right.escapedText;
|
|
case 206:
|
|
case 207:
|
|
var propName = getAccessedPropertyName(node);
|
|
if (propName !== undefined) {
|
|
var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
|
|
return key && key + "." + propName;
|
|
}
|
|
break;
|
|
case 201:
|
|
case 202:
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
case 169:
|
|
return "".concat(getNodeId(node), "#").concat(getTypeId(declaredType));
|
|
}
|
|
return undefined;
|
|
}
|
|
function isMatchingReference(source, target) {
|
|
switch (target.kind) {
|
|
case 212:
|
|
case 230:
|
|
return isMatchingReference(source, target.expression);
|
|
case 221:
|
|
return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
|
|
(ts.isBinaryExpression(target) && target.operatorToken.kind === 27 && isMatchingReference(source, target.right));
|
|
}
|
|
switch (source.kind) {
|
|
case 231:
|
|
return target.kind === 231
|
|
&& source.keywordToken === target.keywordToken
|
|
&& source.name.escapedText === target.name.escapedText;
|
|
case 79:
|
|
case 80:
|
|
return ts.isThisInTypeQuery(source) ?
|
|
target.kind === 108 :
|
|
target.kind === 79 && getResolvedSymbol(source) === getResolvedSymbol(target) ||
|
|
(target.kind === 254 || target.kind === 203) &&
|
|
getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
|
|
case 108:
|
|
return target.kind === 108;
|
|
case 106:
|
|
return target.kind === 106;
|
|
case 230:
|
|
case 212:
|
|
return isMatchingReference(source.expression, target);
|
|
case 206:
|
|
case 207:
|
|
var sourcePropertyName = getAccessedPropertyName(source);
|
|
var targetPropertyName = ts.isAccessExpression(target) ? getAccessedPropertyName(target) : undefined;
|
|
return sourcePropertyName !== undefined && targetPropertyName !== undefined && targetPropertyName === sourcePropertyName &&
|
|
isMatchingReference(source.expression, target.expression);
|
|
case 161:
|
|
return ts.isAccessExpression(target) &&
|
|
source.right.escapedText === getAccessedPropertyName(target) &&
|
|
isMatchingReference(source.left, target.expression);
|
|
case 221:
|
|
return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 && isMatchingReference(source.right, target));
|
|
}
|
|
return false;
|
|
}
|
|
function getAccessedPropertyName(access) {
|
|
if (ts.isPropertyAccessExpression(access)) {
|
|
return access.name.escapedText;
|
|
}
|
|
if (ts.isElementAccessExpression(access)) {
|
|
return tryGetElementAccessExpressionName(access);
|
|
}
|
|
if (ts.isBindingElement(access)) {
|
|
var name = getDestructuringPropertyName(access);
|
|
return name ? ts.escapeLeadingUnderscores(name) : undefined;
|
|
}
|
|
if (ts.isParameter(access)) {
|
|
return ("" + access.parent.parameters.indexOf(access));
|
|
}
|
|
return undefined;
|
|
}
|
|
function tryGetNameFromType(type) {
|
|
return type.flags & 8192 ? type.escapedName :
|
|
type.flags & 384 ? ts.escapeLeadingUnderscores("" + type.value) : undefined;
|
|
}
|
|
function tryGetElementAccessExpressionName(node) {
|
|
if (ts.isStringOrNumericLiteralLike(node.argumentExpression)) {
|
|
return ts.escapeLeadingUnderscores(node.argumentExpression.text);
|
|
}
|
|
if (ts.isEntityNameExpression(node.argumentExpression)) {
|
|
var symbol = resolveEntityName(node.argumentExpression, 111551, true);
|
|
if (!symbol || !isConstVariable(symbol))
|
|
return undefined;
|
|
var declaration = symbol.valueDeclaration;
|
|
if (declaration === undefined)
|
|
return undefined;
|
|
var type = tryGetTypeFromEffectiveTypeNode(declaration);
|
|
if (type) {
|
|
var name = tryGetNameFromType(type);
|
|
if (name !== undefined) {
|
|
return name;
|
|
}
|
|
}
|
|
if (ts.hasOnlyExpressionInitializer(declaration)) {
|
|
var initializer = ts.getEffectiveInitializer(declaration);
|
|
return initializer && tryGetNameFromType(getTypeOfExpression(initializer));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function containsMatchingReference(source, target) {
|
|
while (ts.isAccessExpression(source)) {
|
|
source = source.expression;
|
|
if (isMatchingReference(source, target)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function optionalChainContainsReference(source, target) {
|
|
while (ts.isOptionalChain(source)) {
|
|
source = source.expression;
|
|
if (isMatchingReference(source, target)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isDiscriminantProperty(type, name) {
|
|
if (type && type.flags & 1048576) {
|
|
var prop = getUnionOrIntersectionProperty(type, name);
|
|
if (prop && ts.getCheckFlags(prop) & 2) {
|
|
if (prop.isDiscriminantProperty === undefined) {
|
|
prop.isDiscriminantProperty =
|
|
(prop.checkFlags & 192) === 192 &&
|
|
!isGenericType(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 mapTypesByKeyProperty(types, name) {
|
|
var map = new ts.Map();
|
|
var count = 0;
|
|
var _loop_25 = function (type) {
|
|
if (type.flags & (524288 | 2097152 | 58982400)) {
|
|
var discriminant = getTypeOfPropertyOfType(type, name);
|
|
if (discriminant) {
|
|
if (!isLiteralType(discriminant)) {
|
|
return { value: undefined };
|
|
}
|
|
var duplicate_1 = false;
|
|
forEachType(discriminant, function (t) {
|
|
var id = getTypeId(getRegularTypeOfLiteralType(t));
|
|
var existing = map.get(id);
|
|
if (!existing) {
|
|
map.set(id, type);
|
|
}
|
|
else if (existing !== unknownType) {
|
|
map.set(id, unknownType);
|
|
duplicate_1 = true;
|
|
}
|
|
});
|
|
if (!duplicate_1)
|
|
count++;
|
|
}
|
|
}
|
|
};
|
|
for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
|
|
var type = types_15[_i];
|
|
var state_9 = _loop_25(type);
|
|
if (typeof state_9 === "object")
|
|
return state_9.value;
|
|
}
|
|
return count >= 10 && count * 2 >= types.length ? map : undefined;
|
|
}
|
|
function getKeyPropertyName(unionType) {
|
|
var types = unionType.types;
|
|
if (types.length < 10 || ts.getObjectFlags(unionType) & 32768 ||
|
|
ts.countWhere(types, function (t) { return !!(t.flags & (524288 | 58982400)); }) < 10) {
|
|
return undefined;
|
|
}
|
|
if (unionType.keyPropertyName === undefined) {
|
|
var keyPropertyName = ts.forEach(types, function (t) {
|
|
return t.flags & (524288 | 58982400) ?
|
|
ts.forEach(getPropertiesOfType(t), function (p) { return isUnitType(getTypeOfSymbol(p)) ? p.escapedName : undefined; }) :
|
|
undefined;
|
|
});
|
|
var mapByKeyProperty = keyPropertyName && mapTypesByKeyProperty(types, keyPropertyName);
|
|
unionType.keyPropertyName = mapByKeyProperty ? keyPropertyName : "";
|
|
unionType.constituentMap = mapByKeyProperty;
|
|
}
|
|
return unionType.keyPropertyName.length ? unionType.keyPropertyName : undefined;
|
|
}
|
|
function getConstituentTypeForKeyType(unionType, keyType) {
|
|
var _a;
|
|
var result = (_a = unionType.constituentMap) === null || _a === void 0 ? void 0 : _a.get(getTypeId(getRegularTypeOfLiteralType(keyType)));
|
|
return result !== unknownType ? result : undefined;
|
|
}
|
|
function getMatchingUnionConstituentForType(unionType, type) {
|
|
var keyPropertyName = getKeyPropertyName(unionType);
|
|
var propType = keyPropertyName && getTypeOfPropertyOfType(type, keyPropertyName);
|
|
return propType && getConstituentTypeForKeyType(unionType, propType);
|
|
}
|
|
function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
|
|
var keyPropertyName = getKeyPropertyName(unionType);
|
|
var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 296 &&
|
|
p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
|
|
var propType = propNode && getContextFreeTypeOfExpression(propNode.initializer);
|
|
return propType && getConstituentTypeForKeyType(unionType, propType);
|
|
}
|
|
function isOrContainsMatchingReference(source, target) {
|
|
return isMatchingReference(source, target) || containsMatchingReference(source, target);
|
|
}
|
|
function hasMatchingArgument(expression, reference) {
|
|
if (expression.arguments) {
|
|
for (var _i = 0, _a = expression.arguments; _i < _a.length; _i++) {
|
|
var argument = _a[_i];
|
|
if (isOrContainsMatchingReference(reference, argument)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
if (expression.expression.kind === 206 &&
|
|
isOrContainsMatchingReference(reference, expression.expression.expression)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getFlowNodeId(flow) {
|
|
if (!flow.id || flow.id < 0) {
|
|
flow.id = nextFlowId;
|
|
nextFlowId++;
|
|
}
|
|
return flow.id;
|
|
}
|
|
function typeMaybeAssignableTo(source, target) {
|
|
if (!(source.flags & 1048576)) {
|
|
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) {
|
|
var _a;
|
|
if (declaredType === assignedType) {
|
|
return declaredType;
|
|
}
|
|
if (assignedType.flags & 131072) {
|
|
return assignedType;
|
|
}
|
|
var key = "A".concat(getTypeId(declaredType), ",").concat(getTypeId(assignedType));
|
|
return (_a = getCachedType(key)) !== null && _a !== void 0 ? _a : setCachedType(key, getAssignmentReducedTypeWorker(declaredType, assignedType));
|
|
}
|
|
function getAssignmentReducedTypeWorker(declaredType, assignedType) {
|
|
var filteredType = filterType(declaredType, function (t) { return typeMaybeAssignableTo(assignedType, t); });
|
|
var reducedType = assignedType.flags & 512 && isFreshLiteralType(assignedType) ? mapType(filteredType, getFreshTypeOfLiteralType) : filteredType;
|
|
return isTypeAssignableTo(assignedType, reducedType) ? reducedType : declaredType;
|
|
}
|
|
function isFunctionObjectType(type) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
return !!(resolved.callSignatures.length || resolved.constructSignatures.length ||
|
|
resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType));
|
|
}
|
|
function getTypeFacts(type) {
|
|
if (type.flags & (2097152 | 465829888)) {
|
|
type = getBaseConstraintOfType(type) || unknownType;
|
|
}
|
|
var flags = type.flags;
|
|
if (flags & (4 | 268435456)) {
|
|
return strictNullChecks ? 16317953 : 16776705;
|
|
}
|
|
if (flags & (128 | 134217728)) {
|
|
var isEmpty = flags & 128 && type.value === "";
|
|
return strictNullChecks ?
|
|
isEmpty ? 12123649 : 7929345 :
|
|
isEmpty ? 12582401 : 16776705;
|
|
}
|
|
if (flags & (8 | 32)) {
|
|
return strictNullChecks ? 16317698 : 16776450;
|
|
}
|
|
if (flags & 256) {
|
|
var isZero = type.value === 0;
|
|
return strictNullChecks ?
|
|
isZero ? 12123394 : 7929090 :
|
|
isZero ? 12582146 : 16776450;
|
|
}
|
|
if (flags & 64) {
|
|
return strictNullChecks ? 16317188 : 16775940;
|
|
}
|
|
if (flags & 2048) {
|
|
var isZero = isZeroBigInt(type);
|
|
return strictNullChecks ?
|
|
isZero ? 12122884 : 7928580 :
|
|
isZero ? 12581636 : 16775940;
|
|
}
|
|
if (flags & 16) {
|
|
return strictNullChecks ? 16316168 : 16774920;
|
|
}
|
|
if (flags & 528) {
|
|
return strictNullChecks ?
|
|
(type === falseType || type === regularFalseType) ? 12121864 : 7927560 :
|
|
(type === falseType || type === regularFalseType) ? 12580616 : 16774920;
|
|
}
|
|
if (flags & 524288) {
|
|
return ts.getObjectFlags(type) & 16 && isEmptyObjectType(type) ?
|
|
strictNullChecks ? 83427327 : 83886079 :
|
|
isFunctionObjectType(type) ?
|
|
strictNullChecks ? 7880640 : 16728000 :
|
|
strictNullChecks ? 7888800 : 16736160;
|
|
}
|
|
if (flags & 16384) {
|
|
return 9830144;
|
|
}
|
|
if (flags & 32768) {
|
|
return 26607360;
|
|
}
|
|
if (flags & 65536) {
|
|
return 42917664;
|
|
}
|
|
if (flags & 12288) {
|
|
return strictNullChecks ? 7925520 : 16772880;
|
|
}
|
|
if (flags & 67108864) {
|
|
return strictNullChecks ? 7888800 : 16736160;
|
|
}
|
|
if (flags & 131072) {
|
|
return 0;
|
|
}
|
|
if (flags & 1048576) {
|
|
return ts.reduceLeft(type.types, function (facts, t) { return facts | getTypeFacts(t); }, 0);
|
|
}
|
|
if (flags & 2097152) {
|
|
return getIntersectionTypeFacts(type);
|
|
}
|
|
return 83886079;
|
|
}
|
|
function getIntersectionTypeFacts(type) {
|
|
var ignoreObjects = maybeTypeOfKind(type, 131068);
|
|
var oredFacts = 0;
|
|
var andedFacts = 134217727;
|
|
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
|
|
var t = _a[_i];
|
|
if (!(ignoreObjects && t.flags & 524288)) {
|
|
var f = getTypeFacts(t);
|
|
oredFacts |= f;
|
|
andedFacts &= f;
|
|
}
|
|
}
|
|
return oredFacts & 8256 | andedFacts & 134209471;
|
|
}
|
|
function getTypeWithFacts(type, include) {
|
|
return filterType(type, function (t) { return (getTypeFacts(t) & include) !== 0; });
|
|
}
|
|
function getAdjustedTypeWithFacts(type, facts) {
|
|
var reduced = recombineUnknownType(getTypeWithFacts(strictNullChecks && type.flags & 2 ? unknownUnionType : type, facts));
|
|
if (strictNullChecks) {
|
|
switch (facts) {
|
|
case 524288:
|
|
return mapType(reduced, function (t) { return getTypeFacts(t) & 65536 ? getIntersectionType([t, getTypeFacts(t) & 131072 && !maybeTypeOfKind(reduced, 65536) ? getUnionType([emptyObjectType, nullType]) : emptyObjectType]) : t; });
|
|
case 1048576:
|
|
return mapType(reduced, function (t) { return getTypeFacts(t) & 131072 ? getIntersectionType([t, getTypeFacts(t) & 65536 && !maybeTypeOfKind(reduced, 32768) ? getUnionType([emptyObjectType, undefinedType]) : emptyObjectType]) : t; });
|
|
case 2097152:
|
|
case 4194304:
|
|
return mapType(reduced, function (t) { return getTypeFacts(t) & 262144 ? getGlobalNonNullableTypeInstantiation(t) : t; });
|
|
}
|
|
}
|
|
return reduced;
|
|
}
|
|
function recombineUnknownType(type) {
|
|
return type === unknownUnionType ? unknownType : type;
|
|
}
|
|
function getTypeWithDefault(type, defaultExpression) {
|
|
return defaultExpression ?
|
|
getUnionType([getNonUndefinedType(type), getTypeOfExpression(defaultExpression)]) :
|
|
type;
|
|
}
|
|
function getTypeOfDestructuredProperty(type, name) {
|
|
var _a;
|
|
var nameType = getLiteralTypeFromPropertyName(name);
|
|
if (!isTypeUsableAsPropertyName(nameType))
|
|
return errorType;
|
|
var text = getPropertyNameFromType(nameType);
|
|
return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
|
|
}
|
|
function getTypeOfDestructuredArrayElement(type, index) {
|
|
return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
|
|
includeUndefinedInIndexSignature(checkIteratedTypeOrElementType(65, type, undefinedType, undefined)) ||
|
|
errorType;
|
|
}
|
|
function includeUndefinedInIndexSignature(type) {
|
|
if (!type)
|
|
return type;
|
|
return compilerOptions.noUncheckedIndexedAccess ?
|
|
getUnionType([type, undefinedType]) :
|
|
type;
|
|
}
|
|
function getTypeOfDestructuredSpreadExpression(type) {
|
|
return createArrayType(checkIteratedTypeOrElementType(65, type, undefinedType, undefined) || errorType);
|
|
}
|
|
function getAssignedTypeOfBinaryExpression(node) {
|
|
var isDestructuringDefaultAssignment = node.parent.kind === 204 && isDestructuringAssignmentTarget(node.parent) ||
|
|
node.parent.kind === 296 && isDestructuringAssignmentTarget(node.parent.parent);
|
|
return isDestructuringDefaultAssignment ?
|
|
getTypeWithDefault(getAssignedType(node), node.right) :
|
|
getTypeOfExpression(node.right);
|
|
}
|
|
function isDestructuringAssignmentTarget(parent) {
|
|
return parent.parent.kind === 221 && parent.parent.left === parent ||
|
|
parent.parent.kind === 244 && 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 243:
|
|
return stringType;
|
|
case 244:
|
|
return checkRightHandSideOfForOf(parent) || errorType;
|
|
case 221:
|
|
return getAssignedTypeOfBinaryExpression(parent);
|
|
case 215:
|
|
return undefinedType;
|
|
case 204:
|
|
return getAssignedTypeOfArrayLiteralElement(parent, node);
|
|
case 225:
|
|
return getAssignedTypeOfSpreadExpression(parent);
|
|
case 296:
|
|
return getAssignedTypeOfPropertyAssignment(parent);
|
|
case 297:
|
|
return getAssignedTypeOfShorthandPropertyAssignment(parent);
|
|
}
|
|
return errorType;
|
|
}
|
|
function getInitialTypeOfBindingElement(node) {
|
|
var pattern = node.parent;
|
|
var parentType = getInitialType(pattern.parent);
|
|
var type = pattern.kind === 201 ?
|
|
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 === 243) {
|
|
return stringType;
|
|
}
|
|
if (node.parent.parent.kind === 244) {
|
|
return checkRightHandSideOfForOf(node.parent.parent) || errorType;
|
|
}
|
|
return errorType;
|
|
}
|
|
function getInitialType(node) {
|
|
return node.kind === 254 ?
|
|
getInitialTypeOfVariableDeclaration(node) :
|
|
getInitialTypeOfBindingElement(node);
|
|
}
|
|
function isEmptyArrayAssignment(node) {
|
|
return node.kind === 254 && node.initializer &&
|
|
isEmptyArrayLiteral(node.initializer) ||
|
|
node.kind !== 203 && node.parent.kind === 221 &&
|
|
isEmptyArrayLiteral(node.parent.right);
|
|
}
|
|
function getReferenceCandidate(node) {
|
|
switch (node.kind) {
|
|
case 212:
|
|
return getReferenceCandidate(node.expression);
|
|
case 221:
|
|
switch (node.operatorToken.kind) {
|
|
case 63:
|
|
case 75:
|
|
case 76:
|
|
case 77:
|
|
return getReferenceCandidate(node.left);
|
|
case 27:
|
|
return getReferenceCandidate(node.right);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function getReferenceRoot(node) {
|
|
var parent = node.parent;
|
|
return parent.kind === 212 ||
|
|
parent.kind === 221 && parent.operatorToken.kind === 63 && parent.left === node ||
|
|
parent.kind === 221 && parent.operatorToken.kind === 27 && parent.right === node ?
|
|
getReferenceRoot(parent) : node;
|
|
}
|
|
function getTypeOfSwitchClause(clause) {
|
|
if (clause.kind === 289) {
|
|
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 getSwitchClauseTypeOfWitnesses(switchStatement) {
|
|
if (ts.some(switchStatement.caseBlock.clauses, function (clause) { return clause.kind === 289 && !ts.isStringLiteralLike(clause.expression); })) {
|
|
return undefined;
|
|
}
|
|
var witnesses = [];
|
|
for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
|
|
var clause = _a[_i];
|
|
var text = clause.kind === 289 ? clause.expression.text : undefined;
|
|
witnesses.push(text && !ts.contains(witnesses, text) ? text : undefined);
|
|
}
|
|
return witnesses;
|
|
}
|
|
function eachTypeContainedIn(source, types) {
|
|
return source.flags & 1048576 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source);
|
|
}
|
|
function isTypeSubsetOf(source, target) {
|
|
return source === target || target.flags & 1048576 && isTypeSubsetOfUnion(source, target);
|
|
}
|
|
function isTypeSubsetOfUnion(source, target) {
|
|
if (source.flags & 1048576) {
|
|
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 & 1024 && getBaseTypeOfEnumLiteralType(source) === target) {
|
|
return true;
|
|
}
|
|
return containsType(target.types, source);
|
|
}
|
|
function forEachType(type, f) {
|
|
return type.flags & 1048576 ? ts.forEach(type.types, f) : f(type);
|
|
}
|
|
function someType(type, f) {
|
|
return type.flags & 1048576 ? ts.some(type.types, f) : f(type);
|
|
}
|
|
function everyType(type, f) {
|
|
return type.flags & 1048576 ? ts.every(type.types, f) : f(type);
|
|
}
|
|
function everyContainedType(type, f) {
|
|
return type.flags & 3145728 ? ts.every(type.types, f) : f(type);
|
|
}
|
|
function filterType(type, f) {
|
|
if (type.flags & 1048576) {
|
|
var types = type.types;
|
|
var filtered = ts.filter(types, f);
|
|
if (filtered === types) {
|
|
return type;
|
|
}
|
|
var origin = type.origin;
|
|
var newOrigin = void 0;
|
|
if (origin && origin.flags & 1048576) {
|
|
var originTypes = origin.types;
|
|
var originFiltered = ts.filter(originTypes, function (t) { return !!(t.flags & 1048576) || f(t); });
|
|
if (originTypes.length - originFiltered.length === types.length - filtered.length) {
|
|
if (originFiltered.length === 1) {
|
|
return originFiltered[0];
|
|
}
|
|
newOrigin = createOriginUnionOrIntersectionType(1048576, originFiltered);
|
|
}
|
|
}
|
|
return getUnionTypeFromSortedList(filtered, type.objectFlags, undefined, undefined, newOrigin);
|
|
}
|
|
return type.flags & 131072 || f(type) ? type : neverType;
|
|
}
|
|
function removeType(type, targetType) {
|
|
return filterType(type, function (t) { return t !== targetType; });
|
|
}
|
|
function countTypes(type) {
|
|
return type.flags & 1048576 ? type.types.length : 1;
|
|
}
|
|
function mapType(type, mapper, noReductions) {
|
|
if (type.flags & 131072) {
|
|
return type;
|
|
}
|
|
if (!(type.flags & 1048576)) {
|
|
return mapper(type);
|
|
}
|
|
var origin = type.origin;
|
|
var types = origin && origin.flags & 1048576 ? origin.types : type.types;
|
|
var mappedTypes;
|
|
var changed = false;
|
|
for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
|
|
var t = types_16[_i];
|
|
var mapped = t.flags & 1048576 ? mapType(t, mapper, noReductions) : mapper(t);
|
|
changed || (changed = t !== mapped);
|
|
if (mapped) {
|
|
if (!mappedTypes) {
|
|
mappedTypes = [mapped];
|
|
}
|
|
else {
|
|
mappedTypes.push(mapped);
|
|
}
|
|
}
|
|
}
|
|
return changed ? mappedTypes && getUnionType(mappedTypes, noReductions ? 0 : 1) : type;
|
|
}
|
|
function mapTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) {
|
|
return type.flags & 1048576 && aliasSymbol ?
|
|
getUnionType(ts.map(type.types, mapper), 1, aliasSymbol, aliasTypeArguments) :
|
|
mapType(type, mapper);
|
|
}
|
|
function extractTypesOfKind(type, kind) {
|
|
return filterType(type, function (t) { return (t.flags & kind) !== 0; });
|
|
}
|
|
function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) {
|
|
if (maybeTypeOfKind(typeWithPrimitives, 4 | 134217728 | 8 | 64) &&
|
|
maybeTypeOfKind(typeWithLiterals, 128 | 134217728 | 268435456 | 256 | 2048)) {
|
|
return mapType(typeWithPrimitives, function (t) {
|
|
return t.flags & 4 ? extractTypesOfKind(typeWithLiterals, 4 | 128 | 134217728 | 268435456) :
|
|
isPatternLiteralType(t) && !maybeTypeOfKind(typeWithLiterals, 4 | 134217728 | 268435456) ? extractTypesOfKind(typeWithLiterals, 128) :
|
|
t.flags & 8 ? extractTypesOfKind(typeWithLiterals, 8 | 256) :
|
|
t.flags & 64 ? extractTypesOfKind(typeWithLiterals, 64 | 2048) : 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.flags & 131072 ? silentNeverType : 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 = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(getContextFreeTypeOfExpression(node)));
|
|
return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType]));
|
|
}
|
|
function createFinalArrayType(elementType) {
|
|
return elementType.flags & 131072 ?
|
|
autoArrayType :
|
|
createArrayType(elementType.flags & 1048576 ?
|
|
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_17 = types; _i < types_17.length; _i++) {
|
|
var t = types_17[_i];
|
|
if (!(t.flags & 131072)) {
|
|
if (!(ts.getObjectFlags(t) & 256)) {
|
|
return false;
|
|
}
|
|
hasEvolvingArrayType = true;
|
|
}
|
|
}
|
|
return hasEvolvingArrayType;
|
|
}
|
|
function isEvolvingArrayOperationTarget(node) {
|
|
var root = getReferenceRoot(node);
|
|
var parent = root.parent;
|
|
var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
|
|
parent.parent.kind === 208
|
|
&& ts.isIdentifier(parent.name)
|
|
&& ts.isPushOrUnshiftIdentifier(parent.name));
|
|
var isElementAssignment = parent.kind === 207 &&
|
|
parent.expression === root &&
|
|
parent.parent.kind === 221 &&
|
|
parent.parent.operatorToken.kind === 63 &&
|
|
parent.parent.left === parent &&
|
|
!ts.isAssignmentTarget(parent.parent) &&
|
|
isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296);
|
|
return isLengthPushOrUnshift || isElementAssignment;
|
|
}
|
|
function isDeclarationWithExplicitTypeAnnotation(node) {
|
|
return (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node) || ts.isPropertySignature(node) || ts.isParameter(node)) &&
|
|
!!(ts.getEffectiveTypeAnnotationNode(node) ||
|
|
ts.isInJSFile(node) && ts.hasInitializer(node) && node.initializer && ts.isFunctionExpressionOrArrowFunction(node.initializer) && ts.getEffectiveReturnTypeNode(node.initializer));
|
|
}
|
|
function getExplicitTypeOfSymbol(symbol, diagnostic) {
|
|
if (symbol.flags & (16 | 8192 | 32 | 512)) {
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
if (symbol.flags & (3 | 4)) {
|
|
if (ts.getCheckFlags(symbol) & 262144) {
|
|
var origin = symbol.syntheticOrigin;
|
|
if (origin && getExplicitTypeOfSymbol(origin)) {
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
}
|
|
var declaration = symbol.valueDeclaration;
|
|
if (declaration) {
|
|
if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 244) {
|
|
var statement = declaration.parent.parent;
|
|
var expressionType = getTypeOfDottedName(statement.expression, undefined);
|
|
if (expressionType) {
|
|
var use = statement.awaitModifier ? 15 : 13;
|
|
return checkIteratedTypeOrElementType(use, expressionType, undefinedType, undefined);
|
|
}
|
|
}
|
|
if (diagnostic) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(declaration, ts.Diagnostics._0_needs_an_explicit_type_annotation, symbolToString(symbol)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getTypeOfDottedName(node, diagnostic) {
|
|
if (!(node.flags & 33554432)) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
|
|
return getExplicitTypeOfSymbol(symbol.flags & 2097152 ? resolveAlias(symbol) : symbol, diagnostic);
|
|
case 108:
|
|
return getExplicitThisType(node);
|
|
case 106:
|
|
return checkSuperExpression(node);
|
|
case 206: {
|
|
var type = getTypeOfDottedName(node.expression, diagnostic);
|
|
if (type) {
|
|
var name = node.name;
|
|
var prop = void 0;
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
if (!type.symbol) {
|
|
return undefined;
|
|
}
|
|
prop = getPropertyOfType(type, ts.getSymbolNameForPrivateIdentifier(type.symbol, name.escapedText));
|
|
}
|
|
else {
|
|
prop = getPropertyOfType(type, name.escapedText);
|
|
}
|
|
return prop && getExplicitTypeOfSymbol(prop, diagnostic);
|
|
}
|
|
return undefined;
|
|
}
|
|
case 212:
|
|
return getTypeOfDottedName(node.expression, diagnostic);
|
|
}
|
|
}
|
|
}
|
|
function getEffectsSignature(node) {
|
|
var links = getNodeLinks(node);
|
|
var signature = links.effectsSignature;
|
|
if (signature === undefined) {
|
|
var funcType = void 0;
|
|
if (node.parent.kind === 238) {
|
|
funcType = getTypeOfDottedName(node.expression, undefined);
|
|
}
|
|
else if (node.expression.kind !== 106) {
|
|
if (ts.isOptionalChain(node)) {
|
|
funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
|
|
}
|
|
else {
|
|
funcType = checkNonNullExpression(node.expression);
|
|
}
|
|
}
|
|
var signatures = getSignaturesOfType(funcType && getApparentType(funcType) || unknownType, 0);
|
|
var candidate = signatures.length === 1 && !signatures[0].typeParameters ? signatures[0] :
|
|
ts.some(signatures, hasTypePredicateOrNeverReturnType) ? getResolvedSignature(node) :
|
|
undefined;
|
|
signature = links.effectsSignature = candidate && hasTypePredicateOrNeverReturnType(candidate) ? candidate : unknownSignature;
|
|
}
|
|
return signature === unknownSignature ? undefined : signature;
|
|
}
|
|
function hasTypePredicateOrNeverReturnType(signature) {
|
|
return !!(getTypePredicateOfSignature(signature) ||
|
|
signature.declaration && (getReturnTypeFromAnnotation(signature.declaration) || unknownType).flags & 131072);
|
|
}
|
|
function getTypePredicateArgument(predicate, callExpression) {
|
|
if (predicate.kind === 1 || predicate.kind === 3) {
|
|
return callExpression.arguments[predicate.parameterIndex];
|
|
}
|
|
var invokedExpression = ts.skipParentheses(callExpression.expression);
|
|
return ts.isAccessExpression(invokedExpression) ? ts.skipParentheses(invokedExpression.expression) : undefined;
|
|
}
|
|
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 isReachableFlowNode(flow) {
|
|
var result = isReachableFlowNodeWorker(flow, false);
|
|
lastFlowNode = flow;
|
|
lastFlowNodeReachable = result;
|
|
return result;
|
|
}
|
|
function isFalseExpression(expr) {
|
|
var node = ts.skipParentheses(expr, true);
|
|
return node.kind === 95 || node.kind === 221 && (node.operatorToken.kind === 55 && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
|
|
node.operatorToken.kind === 56 && isFalseExpression(node.left) && isFalseExpression(node.right));
|
|
}
|
|
function isReachableFlowNodeWorker(flow, noCacheCheck) {
|
|
while (true) {
|
|
if (flow === lastFlowNode) {
|
|
return lastFlowNodeReachable;
|
|
}
|
|
var flags = flow.flags;
|
|
if (flags & 4096) {
|
|
if (!noCacheCheck) {
|
|
var id = getFlowNodeId(flow);
|
|
var reachable = flowNodeReachable[id];
|
|
return reachable !== undefined ? reachable : (flowNodeReachable[id] = isReachableFlowNodeWorker(flow, true));
|
|
}
|
|
noCacheCheck = false;
|
|
}
|
|
if (flags & (16 | 96 | 256)) {
|
|
flow = flow.antecedent;
|
|
}
|
|
else if (flags & 512) {
|
|
var signature = getEffectsSignature(flow.node);
|
|
if (signature) {
|
|
var predicate = getTypePredicateOfSignature(signature);
|
|
if (predicate && predicate.kind === 3 && !predicate.type) {
|
|
var predicateArgument = flow.node.arguments[predicate.parameterIndex];
|
|
if (predicateArgument && isFalseExpression(predicateArgument)) {
|
|
return false;
|
|
}
|
|
}
|
|
if (getReturnTypeOfSignature(signature).flags & 131072) {
|
|
return false;
|
|
}
|
|
}
|
|
flow = flow.antecedent;
|
|
}
|
|
else if (flags & 4) {
|
|
return ts.some(flow.antecedents, function (f) { return isReachableFlowNodeWorker(f, false); });
|
|
}
|
|
else if (flags & 8) {
|
|
var antecedents = flow.antecedents;
|
|
if (antecedents === undefined || antecedents.length === 0) {
|
|
return false;
|
|
}
|
|
flow = antecedents[0];
|
|
}
|
|
else if (flags & 128) {
|
|
if (flow.clauseStart === flow.clauseEnd && isExhaustiveSwitchStatement(flow.switchStatement)) {
|
|
return false;
|
|
}
|
|
flow = flow.antecedent;
|
|
}
|
|
else if (flags & 1024) {
|
|
lastFlowNode = undefined;
|
|
var target = flow.target;
|
|
var saveAntecedents = target.antecedents;
|
|
target.antecedents = flow.antecedents;
|
|
var result = isReachableFlowNodeWorker(flow.antecedent, false);
|
|
target.antecedents = saveAntecedents;
|
|
return result;
|
|
}
|
|
else {
|
|
return !(flags & 1);
|
|
}
|
|
}
|
|
}
|
|
function isPostSuperFlowNode(flow, noCacheCheck) {
|
|
while (true) {
|
|
var flags = flow.flags;
|
|
if (flags & 4096) {
|
|
if (!noCacheCheck) {
|
|
var id = getFlowNodeId(flow);
|
|
var postSuper = flowNodePostSuper[id];
|
|
return postSuper !== undefined ? postSuper : (flowNodePostSuper[id] = isPostSuperFlowNode(flow, true));
|
|
}
|
|
noCacheCheck = false;
|
|
}
|
|
if (flags & (16 | 96 | 256 | 128)) {
|
|
flow = flow.antecedent;
|
|
}
|
|
else if (flags & 512) {
|
|
if (flow.node.expression.kind === 106) {
|
|
return true;
|
|
}
|
|
flow = flow.antecedent;
|
|
}
|
|
else if (flags & 4) {
|
|
return ts.every(flow.antecedents, function (f) { return isPostSuperFlowNode(f, false); });
|
|
}
|
|
else if (flags & 8) {
|
|
flow = flow.antecedents[0];
|
|
}
|
|
else if (flags & 1024) {
|
|
var target = flow.target;
|
|
var saveAntecedents = target.antecedents;
|
|
target.antecedents = flow.antecedents;
|
|
var result = isPostSuperFlowNode(flow.antecedent, false);
|
|
target.antecedents = saveAntecedents;
|
|
return result;
|
|
}
|
|
else {
|
|
return !!(flags & 1);
|
|
}
|
|
}
|
|
}
|
|
function isConstantReference(node) {
|
|
switch (node.kind) {
|
|
case 79: {
|
|
var symbol = getResolvedSymbol(node);
|
|
return isConstVariable(symbol) || ts.isParameterOrCatchClauseVariable(symbol) && !isSymbolAssigned(symbol);
|
|
}
|
|
case 206:
|
|
case 207:
|
|
return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
|
|
}
|
|
return false;
|
|
}
|
|
function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, flowNode) {
|
|
if (initialType === void 0) { initialType = declaredType; }
|
|
if (flowNode === void 0) { flowNode = reference.flowNode; }
|
|
var key;
|
|
var isKeySet = false;
|
|
var flowDepth = 0;
|
|
if (flowAnalysisDisabled) {
|
|
return errorType;
|
|
}
|
|
if (!flowNode) {
|
|
return declaredType;
|
|
}
|
|
flowInvocationCount++;
|
|
var sharedFlowStart = sharedFlowCount;
|
|
var evolvedType = getTypeFromFlowType(getTypeAtFlowNode(flowNode));
|
|
sharedFlowCount = sharedFlowStart;
|
|
var resultType = ts.getObjectFlags(evolvedType) & 256 && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
|
|
if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 230 && !(resultType.flags & 131072) && getTypeWithFacts(resultType, 2097152).flags & 131072) {
|
|
return declaredType;
|
|
}
|
|
return resultType === nonNullUnknownType ? unknownType : resultType;
|
|
function getOrSetCacheKey() {
|
|
if (isKeySet) {
|
|
return key;
|
|
}
|
|
isKeySet = true;
|
|
return key = getFlowCacheKey(reference, declaredType, initialType, flowContainer);
|
|
}
|
|
function getTypeAtFlowNode(flow) {
|
|
if (flowDepth === 2000) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "getTypeAtFlowNode_DepthLimit", { flowId: flow.id });
|
|
flowAnalysisDisabled = true;
|
|
reportFlowControlError(reference);
|
|
return errorType;
|
|
}
|
|
flowDepth++;
|
|
var sharedFlow;
|
|
while (true) {
|
|
var flags = flow.flags;
|
|
if (flags & 4096) {
|
|
for (var i = sharedFlowStart; i < sharedFlowCount; i++) {
|
|
if (sharedFlowNodes[i] === flow) {
|
|
flowDepth--;
|
|
return sharedFlowTypes[i];
|
|
}
|
|
}
|
|
sharedFlow = flow;
|
|
}
|
|
var type = void 0;
|
|
if (flags & 16) {
|
|
type = getTypeAtFlowAssignment(flow);
|
|
if (!type) {
|
|
flow = flow.antecedent;
|
|
continue;
|
|
}
|
|
}
|
|
else if (flags & 512) {
|
|
type = getTypeAtFlowCall(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 & 1024) {
|
|
var target = flow.target;
|
|
var saveAntecedents = target.antecedents;
|
|
target.antecedents = flow.antecedents;
|
|
type = getTypeAtFlowNode(flow.antecedent);
|
|
target.antecedents = saveAntecedents;
|
|
}
|
|
else if (flags & 2) {
|
|
var container = flow.node;
|
|
if (container && container !== flowContainer &&
|
|
reference.kind !== 206 &&
|
|
reference.kind !== 207 &&
|
|
reference.kind !== 108) {
|
|
flow = container.flowNode;
|
|
continue;
|
|
}
|
|
type = initialType;
|
|
}
|
|
else {
|
|
type = convertAutoToAny(declaredType);
|
|
}
|
|
if (sharedFlow) {
|
|
sharedFlowNodes[sharedFlowCount] = sharedFlow;
|
|
sharedFlowTypes[sharedFlowCount] = type;
|
|
sharedFlowCount++;
|
|
}
|
|
flowDepth--;
|
|
return type;
|
|
}
|
|
}
|
|
function getInitialOrAssignedType(flow) {
|
|
var node = flow.node;
|
|
return getNarrowableTypeForReference(node.kind === 254 || node.kind === 203 ?
|
|
getInitialType(node) :
|
|
getAssignedType(node), reference);
|
|
}
|
|
function getTypeAtFlowAssignment(flow) {
|
|
var node = flow.node;
|
|
if (isMatchingReference(reference, node)) {
|
|
if (!isReachableFlowNode(flow)) {
|
|
return unreachableNeverType;
|
|
}
|
|
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 = getWidenedLiteralType(getInitialOrAssignedType(flow));
|
|
return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType;
|
|
}
|
|
if (declaredType.flags & 1048576) {
|
|
return getAssignmentReducedType(declaredType, getInitialOrAssignedType(flow));
|
|
}
|
|
return declaredType;
|
|
}
|
|
if (containsMatchingReference(reference, node)) {
|
|
if (!isReachableFlowNode(flow)) {
|
|
return unreachableNeverType;
|
|
}
|
|
if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
|
|
var init = ts.getDeclaredExpandoInitializer(node);
|
|
if (init && (init.kind === 213 || init.kind === 214)) {
|
|
return getTypeAtFlowNode(flow.antecedent);
|
|
}
|
|
}
|
|
return declaredType;
|
|
}
|
|
if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 243 && isMatchingReference(reference, node.parent.parent.expression)) {
|
|
return getNonNullableTypeIfNeeded(finalizeEvolvingArrayType(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent))));
|
|
}
|
|
return undefined;
|
|
}
|
|
function narrowTypeByAssertion(type, expr) {
|
|
var node = ts.skipParentheses(expr, true);
|
|
if (node.kind === 95) {
|
|
return unreachableNeverType;
|
|
}
|
|
if (node.kind === 221) {
|
|
if (node.operatorToken.kind === 55) {
|
|
return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
|
|
}
|
|
if (node.operatorToken.kind === 56) {
|
|
return getUnionType([narrowTypeByAssertion(type, node.left), narrowTypeByAssertion(type, node.right)]);
|
|
}
|
|
}
|
|
return narrowType(type, node, true);
|
|
}
|
|
function getTypeAtFlowCall(flow) {
|
|
var signature = getEffectsSignature(flow.node);
|
|
if (signature) {
|
|
var predicate = getTypePredicateOfSignature(signature);
|
|
if (predicate && (predicate.kind === 2 || predicate.kind === 3)) {
|
|
var flowType = getTypeAtFlowNode(flow.antecedent);
|
|
var type = finalizeEvolvingArrayType(getTypeFromFlowType(flowType));
|
|
var narrowedType = predicate.type ? narrowTypeByTypePredicate(type, predicate, flow.node, true) :
|
|
predicate.kind === 3 && predicate.parameterIndex >= 0 && predicate.parameterIndex < flow.node.arguments.length ? narrowTypeByAssertion(type, flow.node.arguments[predicate.parameterIndex]) :
|
|
type;
|
|
return narrowedType === type ? flowType : createFlowType(narrowedType, isIncomplete(flowType));
|
|
}
|
|
if (getReturnTypeOfSignature(signature).flags & 131072) {
|
|
return unreachableNeverType;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getTypeAtFlowArrayMutation(flow) {
|
|
if (declaredType === autoType || declaredType === autoArrayType) {
|
|
var node = flow.node;
|
|
var expr = node.kind === 208 ?
|
|
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 === 208) {
|
|
for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
|
|
var arg = _a[_i];
|
|
evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
|
|
}
|
|
}
|
|
else {
|
|
var indexType = getContextFreeTypeOfExpression(node.left.argumentExpression);
|
|
if (isTypeAssignableToKind(indexType, 296)) {
|
|
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 & 131072) {
|
|
return flowType;
|
|
}
|
|
var assumeTrue = (flow.flags & 32) !== 0;
|
|
var nonEvolvingType = finalizeEvolvingArrayType(type);
|
|
var narrowedType = narrowType(nonEvolvingType, flow.node, assumeTrue);
|
|
if (narrowedType === nonEvolvingType) {
|
|
return flowType;
|
|
}
|
|
return createFlowType(narrowedType, isIncomplete(flowType));
|
|
}
|
|
function getTypeAtSwitchClause(flow) {
|
|
var expr = flow.switchStatement.expression;
|
|
var flowType = getTypeAtFlowNode(flow.antecedent);
|
|
var type = getTypeFromFlowType(flowType);
|
|
if (isMatchingReference(reference, expr)) {
|
|
type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
|
|
}
|
|
else if (expr.kind === 216 && isMatchingReference(reference, expr.expression)) {
|
|
type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
|
|
}
|
|
else {
|
|
if (strictNullChecks) {
|
|
if (optionalChainContainsReference(expr, reference)) {
|
|
type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 | 131072)); });
|
|
}
|
|
else if (expr.kind === 216 && optionalChainContainsReference(expr.expression, reference)) {
|
|
type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 || t.flags & 128 && t.value === "undefined"); });
|
|
}
|
|
}
|
|
var access = getDiscriminantPropertyAccess(expr, type);
|
|
if (access) {
|
|
type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
|
|
}
|
|
}
|
|
return createFlowType(type, isIncomplete(flowType));
|
|
}
|
|
function getTypeAtFlowBranchLabel(flow) {
|
|
var antecedentTypes = [];
|
|
var subtypeReduction = false;
|
|
var seenIncomplete = false;
|
|
var bypassFlow;
|
|
for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) {
|
|
var antecedent = _a[_i];
|
|
if (!bypassFlow && antecedent.flags & 128 && antecedent.clauseStart === antecedent.clauseEnd) {
|
|
bypassFlow = antecedent;
|
|
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;
|
|
}
|
|
}
|
|
if (bypassFlow) {
|
|
var flowType = getTypeAtFlowNode(bypassFlow);
|
|
var type = getTypeFromFlowType(flowType);
|
|
if (!ts.contains(antecedentTypes, type) && !isExhaustiveSwitchStatement(bypassFlow.switchStatement)) {
|
|
if (type === declaredType && declaredType === initialType) {
|
|
return type;
|
|
}
|
|
antecedentTypes.push(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] = new ts.Map());
|
|
var key = getOrSetCacheKey();
|
|
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;
|
|
for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) {
|
|
var antecedent = _a[_i];
|
|
var flowType = void 0;
|
|
if (!firstAntecedentType) {
|
|
flowType = firstAntecedentType = getTypeAtFlowNode(antecedent);
|
|
}
|
|
else {
|
|
flowLoopNodes[flowLoopCount] = flow;
|
|
flowLoopKeys[flowLoopCount] = key;
|
|
flowLoopTypes[flowLoopCount] = antecedentTypes;
|
|
flowLoopCount++;
|
|
var saveFlowTypeCache = flowTypeCache;
|
|
flowTypeCache = undefined;
|
|
flowType = getTypeAtFlowNode(antecedent);
|
|
flowTypeCache = saveFlowTypeCache;
|
|
flowLoopCount--;
|
|
var cached_1 = cache.get(key);
|
|
if (cached_1) {
|
|
return cached_1;
|
|
}
|
|
}
|
|
var type = getTypeFromFlowType(flowType);
|
|
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 getUnionOrEvolvingArrayType(types, subtypeReduction) {
|
|
if (isEvolvingArrayTypeList(types)) {
|
|
return getEvolvingArrayType(getUnionType(ts.map(types, getElementTypeOfEvolvingArrayType)));
|
|
}
|
|
var result = recombineUnknownType(getUnionType(ts.sameMap(types, finalizeEvolvingArrayType), subtypeReduction));
|
|
if (result !== declaredType && result.flags & declaredType.flags & 1048576 && ts.arraysEqual(result.types, declaredType.types)) {
|
|
return declaredType;
|
|
}
|
|
return result;
|
|
}
|
|
function getCandidateDiscriminantPropertyAccess(expr) {
|
|
if (ts.isBindingPattern(reference) || ts.isFunctionExpressionOrArrowFunction(reference) || ts.isObjectLiteralMethod(reference)) {
|
|
if (ts.isIdentifier(expr)) {
|
|
var symbol = getResolvedSymbol(expr);
|
|
var declaration = symbol.valueDeclaration;
|
|
if (declaration && (ts.isBindingElement(declaration) || ts.isParameter(declaration)) && reference === declaration.parent && !declaration.initializer && !declaration.dotDotDotToken) {
|
|
return declaration;
|
|
}
|
|
}
|
|
}
|
|
else if (ts.isAccessExpression(expr)) {
|
|
if (isMatchingReference(reference, expr.expression)) {
|
|
return expr;
|
|
}
|
|
}
|
|
else if (ts.isIdentifier(expr)) {
|
|
var symbol = getResolvedSymbol(expr);
|
|
if (isConstVariable(symbol)) {
|
|
var declaration = symbol.valueDeclaration;
|
|
if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer) &&
|
|
isMatchingReference(reference, declaration.initializer.expression)) {
|
|
return declaration.initializer;
|
|
}
|
|
if (ts.isBindingElement(declaration) && !declaration.initializer) {
|
|
var parent = declaration.parent.parent;
|
|
if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer)) &&
|
|
isMatchingReference(reference, parent.initializer)) {
|
|
return declaration;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getDiscriminantPropertyAccess(expr, computedType) {
|
|
var type = declaredType.flags & 1048576 ? declaredType : computedType;
|
|
if (type.flags & 1048576) {
|
|
var access = getCandidateDiscriminantPropertyAccess(expr);
|
|
if (access) {
|
|
var name = getAccessedPropertyName(access);
|
|
if (name && isDiscriminantProperty(type, name)) {
|
|
return access;
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function narrowTypeByDiscriminant(type, access, narrowType) {
|
|
var propName = getAccessedPropertyName(access);
|
|
if (propName === undefined) {
|
|
return type;
|
|
}
|
|
var removeNullable = strictNullChecks && ts.isOptionalChain(access) && maybeTypeOfKind(type, 98304);
|
|
var propType = getTypeOfPropertyOfType(removeNullable ? getTypeWithFacts(type, 2097152) : type, propName);
|
|
if (!propType) {
|
|
return type;
|
|
}
|
|
propType = removeNullable ? getOptionalType(propType) : propType;
|
|
var narrowedPropType = narrowType(propType);
|
|
return filterType(type, function (t) {
|
|
var discriminantType = getTypeOfPropertyOrIndexSignature(t, propName);
|
|
return !(narrowedPropType.flags & 131072) && isTypeComparableTo(narrowedPropType, discriminantType);
|
|
});
|
|
}
|
|
function narrowTypeByDiscriminantProperty(type, access, operator, value, assumeTrue) {
|
|
if ((operator === 36 || operator === 37) && type.flags & 1048576) {
|
|
var keyPropertyName = getKeyPropertyName(type);
|
|
if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
|
|
var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
|
|
if (candidate) {
|
|
return operator === (assumeTrue ? 36 : 37) ? candidate :
|
|
isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
|
|
type;
|
|
}
|
|
}
|
|
}
|
|
return narrowTypeByDiscriminant(type, access, function (t) { return narrowTypeByEquality(t, operator, value, assumeTrue); });
|
|
}
|
|
function narrowTypeBySwitchOnDiscriminantProperty(type, access, switchStatement, clauseStart, clauseEnd) {
|
|
if (clauseStart < clauseEnd && type.flags & 1048576 && getKeyPropertyName(type) === getAccessedPropertyName(access)) {
|
|
var clauseTypes = getSwitchClauseTypes(switchStatement).slice(clauseStart, clauseEnd);
|
|
var candidate = getUnionType(ts.map(clauseTypes, function (t) { return getConstituentTypeForKeyType(type, t) || unknownType; }));
|
|
if (candidate !== unknownType) {
|
|
return candidate;
|
|
}
|
|
}
|
|
return narrowTypeByDiscriminant(type, access, function (t) { return narrowTypeBySwitchOnDiscriminant(t, switchStatement, clauseStart, clauseEnd); });
|
|
}
|
|
function narrowTypeByTruthiness(type, expr, assumeTrue) {
|
|
if (isMatchingReference(reference, expr)) {
|
|
return getAdjustedTypeWithFacts(type, assumeTrue ? 4194304 : 8388608);
|
|
}
|
|
if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
|
|
type = getAdjustedTypeWithFacts(type, 2097152);
|
|
}
|
|
var access = getDiscriminantPropertyAccess(expr, type);
|
|
if (access) {
|
|
return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 : 8388608); });
|
|
}
|
|
return type;
|
|
}
|
|
function isTypePresencePossible(type, propName, assumeTrue) {
|
|
var prop = getPropertyOfType(type, propName);
|
|
if (prop) {
|
|
return prop.flags & 16777216 ? true : assumeTrue;
|
|
}
|
|
return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
|
|
}
|
|
function narrowByInKeyword(type, name, assumeTrue) {
|
|
if (type.flags & 1048576
|
|
|| type.flags & 524288 && declaredType !== type
|
|
|| ts.isThisTypeParameter(type)
|
|
|| type.flags & 2097152 && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
|
|
return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
|
|
}
|
|
return type;
|
|
}
|
|
function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
|
|
switch (expr.operatorToken.kind) {
|
|
case 63:
|
|
case 75:
|
|
case 76:
|
|
case 77:
|
|
return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
|
|
case 34:
|
|
case 35:
|
|
case 36:
|
|
case 37:
|
|
var operator = expr.operatorToken.kind;
|
|
var left = getReferenceCandidate(expr.left);
|
|
var right = getReferenceCandidate(expr.right);
|
|
if (left.kind === 216 && ts.isStringLiteralLike(right)) {
|
|
return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
|
|
}
|
|
if (right.kind === 216 && ts.isStringLiteralLike(left)) {
|
|
return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
|
|
}
|
|
if (isMatchingReference(reference, left)) {
|
|
return narrowTypeByEquality(type, operator, right, assumeTrue);
|
|
}
|
|
if (isMatchingReference(reference, right)) {
|
|
return narrowTypeByEquality(type, operator, left, assumeTrue);
|
|
}
|
|
if (strictNullChecks) {
|
|
if (optionalChainContainsReference(left, reference)) {
|
|
type = narrowTypeByOptionalChainContainment(type, operator, right, assumeTrue);
|
|
}
|
|
else if (optionalChainContainsReference(right, reference)) {
|
|
type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
|
|
}
|
|
}
|
|
var leftAccess = getDiscriminantPropertyAccess(left, type);
|
|
if (leftAccess) {
|
|
return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
|
|
}
|
|
var rightAccess = getDiscriminantPropertyAccess(right, type);
|
|
if (rightAccess) {
|
|
return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
|
|
}
|
|
if (isMatchingConstructorReference(left)) {
|
|
return narrowTypeByConstructor(type, operator, right, assumeTrue);
|
|
}
|
|
if (isMatchingConstructorReference(right)) {
|
|
return narrowTypeByConstructor(type, operator, left, assumeTrue);
|
|
}
|
|
break;
|
|
case 102:
|
|
return narrowTypeByInstanceof(type, expr, assumeTrue);
|
|
case 101:
|
|
if (ts.isPrivateIdentifier(expr.left)) {
|
|
return narrowTypeByPrivateIdentifierInInExpression(type, expr, assumeTrue);
|
|
}
|
|
var target = getReferenceCandidate(expr.right);
|
|
var leftType = getTypeOfNode(expr.left);
|
|
if (leftType.flags & 128) {
|
|
var name = ts.escapeLeadingUnderscores(leftType.value);
|
|
if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
|
|
getAccessedPropertyName(reference) === name) {
|
|
return getTypeWithFacts(type, assumeTrue ? 524288 : 65536);
|
|
}
|
|
if (isMatchingReference(reference, target)) {
|
|
return narrowByInKeyword(type, name, assumeTrue);
|
|
}
|
|
}
|
|
break;
|
|
case 27:
|
|
return narrowType(type, expr.right, assumeTrue);
|
|
case 55:
|
|
return assumeTrue ?
|
|
narrowType(narrowType(type, expr.left, true), expr.right, true) :
|
|
getUnionType([narrowType(type, expr.left, false), narrowType(type, expr.right, false)]);
|
|
case 56:
|
|
return assumeTrue ?
|
|
getUnionType([narrowType(type, expr.left, true), narrowType(type, expr.right, true)]) :
|
|
narrowType(narrowType(type, expr.left, false), expr.right, false);
|
|
}
|
|
return type;
|
|
}
|
|
function narrowTypeByPrivateIdentifierInInExpression(type, expr, assumeTrue) {
|
|
var target = getReferenceCandidate(expr.right);
|
|
if (!isMatchingReference(reference, target)) {
|
|
return type;
|
|
}
|
|
ts.Debug.assertNode(expr.left, ts.isPrivateIdentifier);
|
|
var symbol = getSymbolForPrivateIdentifierExpression(expr.left);
|
|
if (symbol === undefined) {
|
|
return type;
|
|
}
|
|
var classSymbol = symbol.parent;
|
|
var targetType = ts.hasStaticModifier(ts.Debug.checkDefined(symbol.valueDeclaration, "should always have a declaration"))
|
|
? getTypeOfSymbol(classSymbol)
|
|
: getDeclaredTypeOfSymbol(classSymbol);
|
|
return getNarrowedType(type, targetType, assumeTrue, true);
|
|
}
|
|
function narrowTypeByOptionalChainContainment(type, operator, value, assumeTrue) {
|
|
var equalsOperator = operator === 34 || operator === 36;
|
|
var nullableFlags = operator === 34 || operator === 35 ? 98304 : 32768;
|
|
var valueType = getTypeOfExpression(value);
|
|
var removeNullable = equalsOperator !== assumeTrue && everyType(valueType, function (t) { return !!(t.flags & nullableFlags); }) ||
|
|
equalsOperator === assumeTrue && everyType(valueType, function (t) { return !(t.flags & (3 | nullableFlags)); });
|
|
return removeNullable ? getAdjustedTypeWithFacts(type, 2097152) : type;
|
|
}
|
|
function narrowTypeByEquality(type, operator, value, assumeTrue) {
|
|
if (type.flags & 1) {
|
|
return type;
|
|
}
|
|
if (operator === 35 || operator === 37) {
|
|
assumeTrue = !assumeTrue;
|
|
}
|
|
var valueType = getTypeOfExpression(value);
|
|
if ((type.flags & 2) && assumeTrue && (operator === 36 || operator === 37)) {
|
|
if (valueType.flags & (131068 | 67108864)) {
|
|
return valueType;
|
|
}
|
|
if (valueType.flags & 524288) {
|
|
return nonPrimitiveType;
|
|
}
|
|
return type;
|
|
}
|
|
if (valueType.flags & 98304) {
|
|
if (!strictNullChecks) {
|
|
return type;
|
|
}
|
|
var doubleEquals = operator === 34 || operator === 35;
|
|
var facts = doubleEquals ?
|
|
assumeTrue ? 262144 : 2097152 :
|
|
valueType.flags & 65536 ?
|
|
assumeTrue ? 131072 : 1048576 :
|
|
assumeTrue ? 65536 : 524288;
|
|
return getAdjustedTypeWithFacts(type, facts);
|
|
}
|
|
if (assumeTrue) {
|
|
var filterFn = operator === 34 ?
|
|
function (t) { return areTypesComparable(t, valueType) || isCoercibleUnderDoubleEquals(t, valueType); } :
|
|
function (t) { return areTypesComparable(t, valueType); };
|
|
return replacePrimitivesWithLiterals(filterType(type, filterFn), valueType);
|
|
}
|
|
if (isUnitType(valueType)) {
|
|
return filterType(type, function (t) { return !(isUnitLikeType(t) && areTypesComparable(t, valueType)); });
|
|
}
|
|
return type;
|
|
}
|
|
function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) {
|
|
if (operator === 35 || operator === 37) {
|
|
assumeTrue = !assumeTrue;
|
|
}
|
|
var target = getReferenceCandidate(typeOfExpr.expression);
|
|
if (!isMatchingReference(reference, target)) {
|
|
if (strictNullChecks && optionalChainContainsReference(target, reference) && assumeTrue === (literal.text !== "undefined")) {
|
|
return getAdjustedTypeWithFacts(type, 2097152);
|
|
}
|
|
return type;
|
|
}
|
|
return assumeTrue ?
|
|
narrowTypeByTypeName(type, literal.text) :
|
|
getTypeWithFacts(type, typeofNEFacts.get(literal.text) || 32768);
|
|
}
|
|
function narrowTypeBySwitchOptionalChainContainment(type, switchStatement, clauseStart, clauseEnd, clauseCheck) {
|
|
var everyClauseChecks = clauseStart !== clauseEnd && ts.every(getSwitchClauseTypes(switchStatement).slice(clauseStart, clauseEnd), clauseCheck);
|
|
return everyClauseChecks ? getTypeWithFacts(type, 2097152) : type;
|
|
}
|
|
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);
|
|
if ((type.flags & 2) && !hasDefaultClause) {
|
|
var groundClauseTypes = void 0;
|
|
for (var i = 0; i < clauseTypes.length; i += 1) {
|
|
var t = clauseTypes[i];
|
|
if (t.flags & (131068 | 67108864)) {
|
|
if (groundClauseTypes !== undefined) {
|
|
groundClauseTypes.push(t);
|
|
}
|
|
}
|
|
else if (t.flags & 524288) {
|
|
if (groundClauseTypes === undefined) {
|
|
groundClauseTypes = clauseTypes.slice(0, i);
|
|
}
|
|
groundClauseTypes.push(nonPrimitiveType);
|
|
}
|
|
else {
|
|
return type;
|
|
}
|
|
}
|
|
return getUnionType(groundClauseTypes === undefined ? clauseTypes : groundClauseTypes);
|
|
}
|
|
var discriminantType = getUnionType(clauseTypes);
|
|
var caseType = discriminantType.flags & 131072 ? neverType :
|
|
replacePrimitivesWithLiterals(filterType(type, function (t) { return areTypesComparable(discriminantType, t); }), discriminantType);
|
|
if (!hasDefaultClause) {
|
|
return caseType;
|
|
}
|
|
var defaultType = filterType(type, function (t) { return !(isUnitLikeType(t) && ts.contains(switchTypes, getRegularTypeOfLiteralType(extractUnitType(t)))); });
|
|
return caseType.flags & 131072 ? defaultType : getUnionType([caseType, defaultType]);
|
|
}
|
|
function narrowTypeByTypeName(type, typeName) {
|
|
switch (typeName) {
|
|
case "string": return narrowTypeByTypeFacts(type, stringType, 1);
|
|
case "number": return narrowTypeByTypeFacts(type, numberType, 2);
|
|
case "bigint": return narrowTypeByTypeFacts(type, bigintType, 4);
|
|
case "boolean": return narrowTypeByTypeFacts(type, booleanType, 8);
|
|
case "symbol": return narrowTypeByTypeFacts(type, esSymbolType, 16);
|
|
case "object": return type.flags & 1 ? type : getUnionType([narrowTypeByTypeFacts(type, nonPrimitiveType, 32), narrowTypeByTypeFacts(type, nullType, 131072)]);
|
|
case "function": return type.flags & 1 ? type : narrowTypeByTypeFacts(type, globalFunctionType, 64);
|
|
case "undefined": return narrowTypeByTypeFacts(type, undefinedType, 65536);
|
|
}
|
|
return narrowTypeByTypeFacts(type, nonPrimitiveType, 128);
|
|
}
|
|
function narrowTypeByTypeFacts(type, impliedType, facts) {
|
|
return mapType(type, function (t) {
|
|
return isTypeRelatedTo(t, impliedType, strictSubtypeRelation) ? getTypeFacts(t) & facts ? t : neverType :
|
|
isTypeSubtypeOf(impliedType, t) ? impliedType :
|
|
getTypeFacts(t) & facts ? getIntersectionType([t, impliedType]) :
|
|
neverType;
|
|
});
|
|
}
|
|
function narrowBySwitchOnTypeOf(type, switchStatement, clauseStart, clauseEnd) {
|
|
var witnesses = getSwitchClauseTypeOfWitnesses(switchStatement);
|
|
if (!witnesses) {
|
|
return type;
|
|
}
|
|
var defaultIndex = ts.findIndex(switchStatement.caseBlock.clauses, function (clause) { return clause.kind === 290; });
|
|
var hasDefaultClause = clauseStart === clauseEnd || (defaultIndex >= clauseStart && defaultIndex < clauseEnd);
|
|
if (hasDefaultClause) {
|
|
var notEqualFacts_1 = getNotEqualFactsFromTypeofSwitch(clauseStart, clauseEnd, witnesses);
|
|
return filterType(type, function (t) { return (getTypeFacts(t) & notEqualFacts_1) === notEqualFacts_1; });
|
|
}
|
|
var clauseWitnesses = witnesses.slice(clauseStart, clauseEnd);
|
|
return getUnionType(ts.map(clauseWitnesses, function (text) { return text ? narrowTypeByTypeName(type, text) : neverType; }));
|
|
}
|
|
function isMatchingConstructorReference(expr) {
|
|
return (ts.isPropertyAccessExpression(expr) && ts.idText(expr.name) === "constructor" ||
|
|
ts.isElementAccessExpression(expr) && ts.isStringLiteralLike(expr.argumentExpression) && expr.argumentExpression.text === "constructor") &&
|
|
isMatchingReference(reference, expr.expression);
|
|
}
|
|
function narrowTypeByConstructor(type, operator, identifier, assumeTrue) {
|
|
if (assumeTrue ? (operator !== 34 && operator !== 36) : (operator !== 35 && operator !== 37)) {
|
|
return type;
|
|
}
|
|
var identifierType = getTypeOfExpression(identifier);
|
|
if (!isFunctionType(identifierType) && !isConstructorType(identifierType)) {
|
|
return type;
|
|
}
|
|
var prototypeProperty = getPropertyOfType(identifierType, "prototype");
|
|
if (!prototypeProperty) {
|
|
return type;
|
|
}
|
|
var prototypeType = getTypeOfSymbol(prototypeProperty);
|
|
var candidate = !isTypeAny(prototypeType) ? prototypeType : undefined;
|
|
if (!candidate || candidate === globalObjectType || candidate === globalFunctionType) {
|
|
return type;
|
|
}
|
|
if (isTypeAny(type)) {
|
|
return candidate;
|
|
}
|
|
return filterType(type, function (t) { return isConstructedBy(t, candidate); });
|
|
function isConstructedBy(source, target) {
|
|
if (source.flags & 524288 && ts.getObjectFlags(source) & 1 ||
|
|
target.flags & 524288 && ts.getObjectFlags(target) & 1) {
|
|
return source.symbol === target.symbol;
|
|
}
|
|
return isTypeSubtypeOf(source, target);
|
|
}
|
|
}
|
|
function narrowTypeByInstanceof(type, expr, assumeTrue) {
|
|
var left = getReferenceCandidate(expr.left);
|
|
if (!isMatchingReference(reference, left)) {
|
|
if (assumeTrue && strictNullChecks && optionalChainContainsReference(left, reference)) {
|
|
return getAdjustedTypeWithFacts(type, 2097152);
|
|
}
|
|
return type;
|
|
}
|
|
var rightType = getTypeOfExpression(expr.right);
|
|
if (!isTypeDerivedFrom(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 = getSignaturesOfType(rightType, 1);
|
|
targetType = constructSignatures.length ?
|
|
getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); })) :
|
|
emptyObjectType;
|
|
}
|
|
if (!assumeTrue && rightType.flags & 1048576) {
|
|
var nonConstructorTypeInUnion = ts.find(rightType.types, function (t) { return !isConstructorType(t); });
|
|
if (!nonConstructorTypeInUnion)
|
|
return type;
|
|
}
|
|
return getNarrowedType(type, targetType, assumeTrue, true);
|
|
}
|
|
function getNarrowedType(type, candidate, assumeTrue, checkDerived) {
|
|
var _a;
|
|
var key = type.flags & 1048576 ? "N".concat(getTypeId(type), ",").concat(getTypeId(candidate), ",").concat((assumeTrue ? 1 : 0) | (checkDerived ? 2 : 0)) : undefined;
|
|
return (_a = getCachedType(key)) !== null && _a !== void 0 ? _a : setCachedType(key, getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived));
|
|
}
|
|
function getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived) {
|
|
var isRelated = checkDerived ? isTypeDerivedFrom : isTypeSubtypeOf;
|
|
if (!assumeTrue) {
|
|
return filterType(type, function (t) { return !isRelated(t, candidate); });
|
|
}
|
|
if (type.flags & 3) {
|
|
return candidate;
|
|
}
|
|
var keyPropertyName = type.flags & 1048576 ? getKeyPropertyName(type) : undefined;
|
|
var narrowedType = mapType(candidate, function (c) {
|
|
var discriminant = keyPropertyName && getTypeOfPropertyOfType(c, keyPropertyName);
|
|
var matching = discriminant && getConstituentTypeForKeyType(type, discriminant);
|
|
var directlyRelated = mapType(matching || type, checkDerived ?
|
|
function (t) { return isTypeDerivedFrom(t, c) ? t : isTypeDerivedFrom(c, t) ? c : neverType; } :
|
|
function (t) { return isTypeSubtypeOf(c, t) ? c : isTypeSubtypeOf(t, c) ? t : neverType; });
|
|
return directlyRelated.flags & 131072 ?
|
|
mapType(type, function (t) { return maybeTypeOfKind(t, 465829888) && isRelated(c, getBaseConstraintOfType(t) || unknownType) ? getIntersectionType([t, c]) : neverType; }) :
|
|
directlyRelated;
|
|
});
|
|
return !(narrowedType.flags & 131072) ? narrowedType :
|
|
isTypeSubtypeOf(candidate, type) ? candidate :
|
|
isTypeAssignableTo(type, candidate) ? type :
|
|
isTypeAssignableTo(candidate, type) ? candidate :
|
|
getIntersectionType([type, candidate]);
|
|
}
|
|
function narrowTypeByCallExpression(type, callExpression, assumeTrue) {
|
|
if (hasMatchingArgument(callExpression, reference)) {
|
|
var signature = assumeTrue || !ts.isCallChain(callExpression) ? getEffectsSignature(callExpression) : undefined;
|
|
var predicate = signature && getTypePredicateOfSignature(signature);
|
|
if (predicate && (predicate.kind === 0 || predicate.kind === 1)) {
|
|
return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
|
|
}
|
|
}
|
|
if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
|
|
var callAccess = callExpression.expression;
|
|
if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
|
|
ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
|
|
var argument = callExpression.arguments[0];
|
|
if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
|
|
return getTypeWithFacts(type, assumeTrue ? 524288 : 65536);
|
|
}
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
|
|
if (predicate.type && !(isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType))) {
|
|
var predicateArgument = getTypePredicateArgument(predicate, callExpression);
|
|
if (predicateArgument) {
|
|
if (isMatchingReference(reference, predicateArgument)) {
|
|
return getNarrowedType(type, predicate.type, assumeTrue, false);
|
|
}
|
|
if (strictNullChecks && assumeTrue && optionalChainContainsReference(predicateArgument, reference) &&
|
|
!(getTypeFacts(predicate.type) & 65536)) {
|
|
type = getAdjustedTypeWithFacts(type, 2097152);
|
|
}
|
|
var access = getDiscriminantPropertyAccess(predicateArgument, type);
|
|
if (access) {
|
|
return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, false); });
|
|
}
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function narrowType(type, expr, assumeTrue) {
|
|
if (ts.isExpressionOfOptionalChainRoot(expr) ||
|
|
ts.isBinaryExpression(expr.parent) && expr.parent.operatorToken.kind === 60 && expr.parent.left === expr) {
|
|
return narrowTypeByOptionality(type, expr, assumeTrue);
|
|
}
|
|
switch (expr.kind) {
|
|
case 79:
|
|
if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
|
|
var symbol = getResolvedSymbol(expr);
|
|
if (isConstVariable(symbol)) {
|
|
var declaration = symbol.valueDeclaration;
|
|
if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
|
|
inlineLevel++;
|
|
var result = narrowType(type, declaration.initializer, assumeTrue);
|
|
inlineLevel--;
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
case 108:
|
|
case 106:
|
|
case 206:
|
|
case 207:
|
|
return narrowTypeByTruthiness(type, expr, assumeTrue);
|
|
case 208:
|
|
return narrowTypeByCallExpression(type, expr, assumeTrue);
|
|
case 212:
|
|
case 230:
|
|
return narrowType(type, expr.expression, assumeTrue);
|
|
case 221:
|
|
return narrowTypeByBinaryExpression(type, expr, assumeTrue);
|
|
case 219:
|
|
if (expr.operator === 53) {
|
|
return narrowType(type, expr.operand, !assumeTrue);
|
|
}
|
|
break;
|
|
}
|
|
return type;
|
|
}
|
|
function narrowTypeByOptionality(type, expr, assumePresent) {
|
|
if (isMatchingReference(reference, expr)) {
|
|
return getAdjustedTypeWithFacts(type, assumePresent ? 2097152 : 262144);
|
|
}
|
|
var access = getDiscriminantPropertyAccess(expr, type);
|
|
if (access) {
|
|
return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 : 262144); });
|
|
}
|
|
return type;
|
|
}
|
|
}
|
|
function getTypeOfSymbolAtLocation(symbol, location) {
|
|
symbol = symbol.exportSymbol || symbol;
|
|
if (location.kind === 79 || location.kind === 80) {
|
|
if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
|
|
location = location.parent;
|
|
}
|
|
if (ts.isExpressionNode(location) && (!ts.isAssignmentTarget(location) || ts.isWriteAccess(location))) {
|
|
var type = getTypeOfExpression(location);
|
|
if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) {
|
|
return type;
|
|
}
|
|
}
|
|
}
|
|
if (ts.isDeclarationName(location) && ts.isSetAccessor(location.parent) && getAnnotatedAccessorTypeNode(location.parent)) {
|
|
return getWriteTypeOfAccessors(location.parent.symbol);
|
|
}
|
|
return getNonMissingTypeOfSymbol(symbol);
|
|
}
|
|
function getControlFlowContainer(node) {
|
|
return ts.findAncestor(node.parent, function (node) {
|
|
return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
|
|
node.kind === 262 ||
|
|
node.kind === 305 ||
|
|
node.kind === 167;
|
|
});
|
|
}
|
|
function isSymbolAssigned(symbol) {
|
|
if (!symbol.valueDeclaration) {
|
|
return false;
|
|
}
|
|
var parent = ts.getRootDeclaration(symbol.valueDeclaration).parent;
|
|
var links = getNodeLinks(parent);
|
|
if (!(links.flags & 8388608)) {
|
|
links.flags |= 8388608;
|
|
if (!hasParentWithAssignmentsMarked(parent)) {
|
|
markNodeAssignments(parent);
|
|
}
|
|
}
|
|
return symbol.isAssigned || false;
|
|
}
|
|
function hasParentWithAssignmentsMarked(node) {
|
|
return !!ts.findAncestor(node.parent, function (node) {
|
|
return (ts.isFunctionLike(node) || ts.isCatchClause(node)) && !!(getNodeLinks(node).flags & 8388608);
|
|
});
|
|
}
|
|
function markNodeAssignments(node) {
|
|
if (node.kind === 79) {
|
|
if (ts.isAssignmentTarget(node)) {
|
|
var symbol = getResolvedSymbol(node);
|
|
if (ts.isParameterOrCatchClauseVariable(symbol)) {
|
|
symbol.isAssigned = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
ts.forEachChild(node, markNodeAssignments);
|
|
}
|
|
}
|
|
function isConstVariable(symbol) {
|
|
return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0;
|
|
}
|
|
function removeOptionalityFromDeclaredType(declaredType, declaration) {
|
|
if (pushTypeResolution(declaration.symbol, 2)) {
|
|
var annotationIncludesUndefined = strictNullChecks &&
|
|
declaration.kind === 164 &&
|
|
declaration.initializer &&
|
|
getTypeFacts(declaredType) & 16777216 &&
|
|
!(getTypeFacts(checkExpression(declaration.initializer)) & 16777216);
|
|
popTypeResolution();
|
|
return annotationIncludesUndefined ? getTypeWithFacts(declaredType, 524288) : declaredType;
|
|
}
|
|
else {
|
|
reportCircularityError(declaration.symbol);
|
|
return declaredType;
|
|
}
|
|
}
|
|
function isConstraintPosition(type, node) {
|
|
var parent = node.parent;
|
|
return parent.kind === 206 ||
|
|
parent.kind === 161 ||
|
|
parent.kind === 208 && parent.expression === node ||
|
|
parent.kind === 207 && parent.expression === node &&
|
|
!(someType(type, isGenericTypeWithoutNullableConstraint) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
|
|
}
|
|
function isGenericTypeWithUnionConstraint(type) {
|
|
return type.flags & 2097152 ?
|
|
ts.some(type.types, isGenericTypeWithUnionConstraint) :
|
|
!!(type.flags & 465829888 && getBaseConstraintOrType(type).flags & (98304 | 1048576));
|
|
}
|
|
function isGenericTypeWithoutNullableConstraint(type) {
|
|
return !!(type.flags & 465829888 && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304));
|
|
}
|
|
function hasContextualTypeWithNoGenericTypes(node, checkMode) {
|
|
var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
|
|
!((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
|
|
(checkMode && checkMode & 64 ?
|
|
getContextualType(node, 8)
|
|
: getContextualType(node, undefined));
|
|
return contextualType && !isGenericType(contextualType);
|
|
}
|
|
function getNarrowableTypeForReference(type, reference, checkMode) {
|
|
var substituteConstraints = !(checkMode && checkMode & 2) &&
|
|
someType(type, isGenericTypeWithUnionConstraint) &&
|
|
(isConstraintPosition(type, reference) || hasContextualTypeWithNoGenericTypes(reference, checkMode));
|
|
return substituteConstraints ? mapType(type, getBaseConstraintOrType) : type;
|
|
}
|
|
function isExportOrExportExpression(location) {
|
|
return !!ts.findAncestor(location, function (n) {
|
|
var parent = n.parent;
|
|
if (parent === undefined) {
|
|
return "quit";
|
|
}
|
|
if (ts.isExportAssignment(parent)) {
|
|
return parent.expression === n && ts.isEntityNameExpression(n);
|
|
}
|
|
if (ts.isExportSpecifier(parent)) {
|
|
return parent.name === n || parent.propertyName === n;
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
function markAliasReferenced(symbol, location) {
|
|
if (isNonLocalAlias(symbol, 111551) && !isInTypeQuery(location) && !getTypeOnlyAliasDeclaration(symbol)) {
|
|
var target = resolveAlias(symbol);
|
|
if (target.flags & 111551) {
|
|
if (compilerOptions.isolatedModules ||
|
|
ts.shouldPreserveConstEnums(compilerOptions) && isExportOrExportExpression(location) ||
|
|
!isConstEnumOrConstEnumOnlyModule(target)) {
|
|
markAliasSymbolAsReferenced(symbol);
|
|
}
|
|
else {
|
|
markConstEnumAliasAsReferenced(symbol);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getNarrowedTypeOfSymbol(symbol, location) {
|
|
var declaration = symbol.valueDeclaration;
|
|
if (declaration) {
|
|
if (ts.isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) {
|
|
var parent = declaration.parent.parent;
|
|
if (parent.kind === 254 && ts.getCombinedNodeFlags(declaration) & 2 || parent.kind === 164) {
|
|
var links = getNodeLinks(parent);
|
|
if (!(links.flags & 268435456)) {
|
|
links.flags |= 268435456;
|
|
var parentType = getTypeForBindingElementParent(parent, 0);
|
|
links.flags &= ~268435456;
|
|
if (parentType && parentType.flags & 1048576 && !(parent.kind === 164 && isSymbolAssigned(symbol))) {
|
|
var pattern = declaration.parent;
|
|
var narrowedType = getFlowTypeOfReference(pattern, parentType, parentType, undefined, location.flowNode);
|
|
if (narrowedType.flags & 131072) {
|
|
return neverType;
|
|
}
|
|
return getBindingElementTypeFromParentType(declaration, narrowedType);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.isParameter(declaration) && !declaration.type && !declaration.initializer && !declaration.dotDotDotToken) {
|
|
var func = declaration.parent;
|
|
if (func.parameters.length >= 2 && isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
|
|
var contextualSignature = getContextualSignature(func);
|
|
if (contextualSignature && contextualSignature.parameters.length === 1 && signatureHasRestParameter(contextualSignature)) {
|
|
var restType = getReducedApparentType(getTypeOfSymbol(contextualSignature.parameters[0]));
|
|
if (restType.flags & 1048576 && everyType(restType, isTupleType) && !isSymbolAssigned(symbol)) {
|
|
var narrowedType = getFlowTypeOfReference(func, restType, restType, undefined, location.flowNode);
|
|
var index = func.parameters.indexOf(declaration) - (ts.getThisParameter(func) ? 1 : 0);
|
|
return getIndexedAccessType(narrowedType, getNumberLiteralType(index));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
function checkIdentifier(node, checkMode) {
|
|
if (ts.isThisInTypeQuery(node)) {
|
|
return checkThisExpression(node);
|
|
}
|
|
var symbol = getResolvedSymbol(node);
|
|
if (symbol === unknownSymbol) {
|
|
return errorType;
|
|
}
|
|
if (symbol === argumentsSymbol) {
|
|
if (isInPropertyInitializerOrClassStaticBlock(node)) {
|
|
error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
|
|
return errorType;
|
|
}
|
|
var container = ts.getContainingFunction(node);
|
|
if (languageVersion < 2) {
|
|
if (container.kind === 214) {
|
|
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.hasSyntacticModifier(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 (shouldMarkIdentifierAliasReferenced(node)) {
|
|
markAliasReferenced(symbol, node);
|
|
}
|
|
var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
|
|
var targetSymbol = checkDeprecatedAliasedSymbol(localOrExportSymbol, node);
|
|
if (isDeprecatedSymbol(targetSymbol) && isUncalledFunctionReference(node, targetSymbol) && targetSymbol.declarations) {
|
|
addDeprecatedSuggestion(node, targetSymbol.declarations, node.escapedText);
|
|
}
|
|
var declaration = localOrExportSymbol.valueDeclaration;
|
|
if (declaration && localOrExportSymbol.flags & 32) {
|
|
if (declaration.kind === 257
|
|
&& ts.nodeIsDecorated(declaration)) {
|
|
var container = ts.getContainingClass(node);
|
|
while (container !== undefined) {
|
|
if (container === declaration && container.name !== node) {
|
|
getNodeLinks(declaration).flags |= 16777216;
|
|
getNodeLinks(node).flags |= 33554432;
|
|
break;
|
|
}
|
|
container = ts.getContainingClass(container);
|
|
}
|
|
}
|
|
else if (declaration.kind === 226) {
|
|
var container = ts.getThisContainer(node, false);
|
|
while (container.kind !== 305) {
|
|
if (container.parent === declaration) {
|
|
if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
|
|
getNodeLinks(declaration).flags |= 16777216;
|
|
getNodeLinks(node).flags |= 33554432;
|
|
}
|
|
break;
|
|
}
|
|
container = ts.getThisContainer(container, false);
|
|
}
|
|
}
|
|
}
|
|
checkNestedBlockScopedBinding(node, symbol);
|
|
var type = getNarrowedTypeOfSymbol(localOrExportSymbol, node);
|
|
var assignmentKind = ts.getAssignmentTargetKind(node);
|
|
if (assignmentKind) {
|
|
if (!(localOrExportSymbol.flags & 3) &&
|
|
!(ts.isInJSFile(node) && localOrExportSymbol.flags & 512)) {
|
|
var assignmentError = localOrExportSymbol.flags & 384 ? ts.Diagnostics.Cannot_assign_to_0_because_it_is_an_enum
|
|
: localOrExportSymbol.flags & 32 ? ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_class
|
|
: localOrExportSymbol.flags & 1536 ? ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_namespace
|
|
: localOrExportSymbol.flags & 16 ? ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_function
|
|
: localOrExportSymbol.flags & 2097152 ? ts.Diagnostics.Cannot_assign_to_0_because_it_is_an_import
|
|
: ts.Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable;
|
|
error(node, assignmentError, symbolToString(symbol));
|
|
return errorType;
|
|
}
|
|
if (isReadonlySymbol(localOrExportSymbol)) {
|
|
if (localOrExportSymbol.flags & 3) {
|
|
error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant, symbolToString(symbol));
|
|
}
|
|
else {
|
|
error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_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 = getDeclarationOfAliasSymbol(symbol);
|
|
}
|
|
else {
|
|
return type;
|
|
}
|
|
if (!declaration) {
|
|
return type;
|
|
}
|
|
type = getNarrowableTypeForReference(type, node, checkMode);
|
|
var isParameter = ts.getRootDeclaration(declaration).kind === 164;
|
|
var declarationContainer = getControlFlowContainer(declaration);
|
|
var flowContainer = getControlFlowContainer(node);
|
|
var isOuterVariable = flowContainer !== declarationContainer;
|
|
var isSpreadDestructuringAssignmentTarget = node.parent && node.parent.parent && ts.isSpreadAssignment(node.parent) && isDestructuringAssignmentTarget(node.parent.parent);
|
|
var isModuleExports = symbol.flags & 134217728;
|
|
while (flowContainer !== declarationContainer && (flowContainer.kind === 213 ||
|
|
flowContainer.kind === 214 || ts.isObjectLiteralOrClassExpressionMethodOrAccessor(flowContainer)) &&
|
|
(isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isSymbolAssigned(localOrExportSymbol))) {
|
|
flowContainer = getControlFlowContainer(flowContainer);
|
|
}
|
|
var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
|
|
type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 | 16384)) !== 0 ||
|
|
isInTypeQuery(node) || node.parent.kind === 275) ||
|
|
node.parent.kind === 230 ||
|
|
declaration.kind === 254 && declaration.exclamationToken ||
|
|
declaration.flags & 16777216;
|
|
var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
|
|
type === autoType || type === autoArrayType ? undefinedType :
|
|
getOptionalType(type);
|
|
var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
|
|
if (!isEvolvingArrayOperationTarget(node) && (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 && !containsUndefinedType(type) && containsUndefinedType(flowType)) {
|
|
error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol));
|
|
return type;
|
|
}
|
|
return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType;
|
|
}
|
|
function shouldMarkIdentifierAliasReferenced(node) {
|
|
var _a;
|
|
var parent = node.parent;
|
|
if (parent) {
|
|
if (ts.isPropertyAccessExpression(parent) && parent.expression === node) {
|
|
return false;
|
|
}
|
|
if (ts.isExportSpecifier(parent) && parent.isTypeOnly) {
|
|
return false;
|
|
}
|
|
var greatGrandparent = (_a = parent.parent) === null || _a === void 0 ? void 0 : _a.parent;
|
|
if (greatGrandparent && ts.isExportDeclaration(greatGrandparent) && greatGrandparent.isTypeOnly) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function isInsideFunctionOrInstancePropertyInitializer(node, threshold) {
|
|
return !!ts.findAncestor(node, function (n) { return n === threshold ? "quit" : ts.isFunctionLike(n) || (n.parent && ts.isPropertyDeclaration(n.parent) && !ts.hasStaticModifier(n.parent) && n.parent.initializer === n); });
|
|
}
|
|
function getPartOfForStatementContainingNode(node, container) {
|
|
return ts.findAncestor(node, function (n) { return n === container ? "quit" : n === container.initializer || n === container.condition || n === container.incrementor || n === container.statement; });
|
|
}
|
|
function getEnclosingIterationStatement(node) {
|
|
return ts.findAncestor(node, function (n) { return (!n || ts.nodeStartsNewLexicalEnvironment(n)) ? "quit" : ts.isIterationStatement(n, false); });
|
|
}
|
|
function checkNestedBlockScopedBinding(node, symbol) {
|
|
if (languageVersion >= 2 ||
|
|
(symbol.flags & (2 | 32)) === 0 ||
|
|
!symbol.valueDeclaration ||
|
|
ts.isSourceFile(symbol.valueDeclaration) ||
|
|
symbol.valueDeclaration.parent.kind === 292) {
|
|
return;
|
|
}
|
|
var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
|
|
var isCaptured = isInsideFunctionOrInstancePropertyInitializer(node, container);
|
|
var enclosingIterationStatement = getEnclosingIterationStatement(container);
|
|
if (enclosingIterationStatement) {
|
|
if (isCaptured) {
|
|
var capturesBlockScopeBindingInLoopBody = true;
|
|
if (ts.isForStatement(container)) {
|
|
var varDeclList = ts.getAncestor(symbol.valueDeclaration, 255);
|
|
if (varDeclList && varDeclList.parent === container) {
|
|
var part = getPartOfForStatementContainingNode(node.parent, container);
|
|
if (part) {
|
|
var links = getNodeLinks(part);
|
|
links.flags |= 131072;
|
|
var capturedBindings = links.capturedBlockScopeBindings || (links.capturedBlockScopeBindings = []);
|
|
ts.pushIfUnique(capturedBindings, symbol);
|
|
if (part === container.initializer) {
|
|
capturesBlockScopeBindingInLoopBody = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (capturesBlockScopeBindingInLoopBody) {
|
|
getNodeLinks(enclosingIterationStatement).flags |= 65536;
|
|
}
|
|
}
|
|
if (ts.isForStatement(container)) {
|
|
var varDeclList = ts.getAncestor(symbol.valueDeclaration, 255);
|
|
if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
|
|
getNodeLinks(symbol.valueDeclaration).flags |= 4194304;
|
|
}
|
|
}
|
|
getNodeLinks(symbol.valueDeclaration).flags |= 524288;
|
|
}
|
|
if (isCaptured) {
|
|
getNodeLinks(symbol.valueDeclaration).flags |= 262144;
|
|
}
|
|
}
|
|
function isBindingCapturedByNode(node, decl) {
|
|
var links = getNodeLinks(node);
|
|
return !!links && ts.contains(links.capturedBlockScopeBindings, getSymbolOfNode(decl));
|
|
}
|
|
function isAssignedInBodyOfForStatement(node, container) {
|
|
var current = node;
|
|
while (current.parent.kind === 212) {
|
|
current = current.parent;
|
|
}
|
|
var isAssigned = false;
|
|
if (ts.isAssignmentTarget(current)) {
|
|
isAssigned = true;
|
|
}
|
|
else if ((current.parent.kind === 219 || current.parent.kind === 220)) {
|
|
var expr = current.parent;
|
|
isAssigned = expr.operator === 45 || expr.operator === 46;
|
|
}
|
|
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 === 167 || container.kind === 171) {
|
|
var classNode = container.parent;
|
|
getNodeLinks(classNode).flags |= 4;
|
|
}
|
|
else {
|
|
getNodeLinks(container).flags |= 4;
|
|
}
|
|
}
|
|
function findFirstSuperCall(node) {
|
|
return ts.isSuperCall(node) ? node :
|
|
ts.isFunctionLike(node) ? undefined :
|
|
ts.forEachChild(node, findFirstSuperCall);
|
|
}
|
|
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.getClassExtendsHeritageElement(containingClassDecl);
|
|
if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) {
|
|
if (node.flowNode && !isPostSuperFlowNode(node.flowNode, false)) {
|
|
error(node, diagnosticMessage);
|
|
}
|
|
}
|
|
}
|
|
function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
|
|
if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
|
|
container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.hasDecorators(container.parent)) {
|
|
error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
|
|
}
|
|
}
|
|
function checkThisExpression(node) {
|
|
var isNodeInTypeQuery = isInTypeQuery(node);
|
|
var container = ts.getThisContainer(node, true);
|
|
var capturedByArrowFunction = false;
|
|
if (container.kind === 171) {
|
|
checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
|
|
}
|
|
if (container.kind === 214) {
|
|
container = ts.getThisContainer(container, false);
|
|
capturedByArrowFunction = true;
|
|
}
|
|
checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
|
|
switch (container.kind) {
|
|
case 261:
|
|
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
|
|
break;
|
|
case 260:
|
|
error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
|
|
break;
|
|
case 171:
|
|
if (isInConstructorArgumentInitializer(node, container)) {
|
|
error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
|
|
}
|
|
break;
|
|
case 162:
|
|
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
|
|
break;
|
|
}
|
|
if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2) {
|
|
captureLexicalThis(node, container);
|
|
}
|
|
var type = tryGetThisTypeAt(node, true, container);
|
|
if (noImplicitThis) {
|
|
var globalThisType_1 = getTypeOfSymbol(globalThisSymbol);
|
|
if (type === globalThisType_1 && capturedByArrowFunction) {
|
|
error(node, ts.Diagnostics.The_containing_arrow_function_captures_the_global_value_of_this);
|
|
}
|
|
else if (!type) {
|
|
var diag = error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation);
|
|
if (!ts.isSourceFile(container)) {
|
|
var outsideThis = tryGetThisTypeAt(container);
|
|
if (outsideThis && outsideThis !== globalThisType_1) {
|
|
ts.addRelatedInfo(diag, ts.createDiagnosticForNode(container, ts.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return type || anyType;
|
|
}
|
|
function tryGetThisTypeAt(node, includeGlobalThis, container) {
|
|
if (includeGlobalThis === void 0) { includeGlobalThis = true; }
|
|
if (container === void 0) { container = ts.getThisContainer(node, false); }
|
|
var isInJS = ts.isInJSFile(node);
|
|
if (ts.isFunctionLike(container) &&
|
|
(!isInParameterInitializerBeforeContainingFunction(node) || ts.getThisParameter(container))) {
|
|
var thisType = getThisTypeOfDeclaration(container) || isInJS && getTypeForThisExpressionFromJSDoc(container);
|
|
if (!thisType) {
|
|
var className = getClassNameFromPrototypeMethod(container);
|
|
if (isInJS && className) {
|
|
var classSymbol = checkExpression(className).symbol;
|
|
if (classSymbol && classSymbol.members && (classSymbol.flags & 16)) {
|
|
thisType = getDeclaredTypeOfSymbol(classSymbol).thisType;
|
|
}
|
|
}
|
|
else if (isJSConstructor(container)) {
|
|
thisType = getDeclaredTypeOfSymbol(getMergedSymbol(container.symbol)).thisType;
|
|
}
|
|
thisType || (thisType = getContextualThisParameterType(container));
|
|
}
|
|
if (thisType) {
|
|
return getFlowTypeOfReference(node, thisType);
|
|
}
|
|
}
|
|
if (ts.isClassLike(container.parent)) {
|
|
var symbol = getSymbolOfNode(container.parent);
|
|
var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
|
|
return getFlowTypeOfReference(node, type);
|
|
}
|
|
if (ts.isSourceFile(container)) {
|
|
if (container.commonJsModuleIndicator) {
|
|
var fileSymbol = getSymbolOfNode(container);
|
|
return fileSymbol && getTypeOfSymbol(fileSymbol);
|
|
}
|
|
else if (container.externalModuleIndicator) {
|
|
return undefinedType;
|
|
}
|
|
else if (includeGlobalThis) {
|
|
return getTypeOfSymbol(globalThisSymbol);
|
|
}
|
|
}
|
|
}
|
|
function getExplicitThisType(node) {
|
|
var container = ts.getThisContainer(node, false);
|
|
if (ts.isFunctionLike(container)) {
|
|
var signature = getSignatureFromDeclaration(container);
|
|
if (signature.thisParameter) {
|
|
return getExplicitTypeOfSymbol(signature.thisParameter);
|
|
}
|
|
}
|
|
if (ts.isClassLike(container.parent)) {
|
|
var symbol = getSymbolOfNode(container.parent);
|
|
return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
|
|
}
|
|
}
|
|
function getClassNameFromPrototypeMethod(container) {
|
|
if (container.kind === 213 &&
|
|
ts.isBinaryExpression(container.parent) &&
|
|
ts.getAssignmentDeclarationKind(container.parent) === 3) {
|
|
return container.parent
|
|
.left
|
|
.expression
|
|
.expression;
|
|
}
|
|
else if (container.kind === 169 &&
|
|
container.parent.kind === 205 &&
|
|
ts.isBinaryExpression(container.parent.parent) &&
|
|
ts.getAssignmentDeclarationKind(container.parent.parent) === 6) {
|
|
return container.parent.parent.left.expression;
|
|
}
|
|
else if (container.kind === 213 &&
|
|
container.parent.kind === 296 &&
|
|
container.parent.parent.kind === 205 &&
|
|
ts.isBinaryExpression(container.parent.parent.parent) &&
|
|
ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6) {
|
|
return container.parent.parent.parent.left.expression;
|
|
}
|
|
else if (container.kind === 213 &&
|
|
ts.isPropertyAssignment(container.parent) &&
|
|
ts.isIdentifier(container.parent.name) &&
|
|
(container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
|
|
ts.isObjectLiteralExpression(container.parent.parent) &&
|
|
ts.isCallExpression(container.parent.parent.parent) &&
|
|
container.parent.parent.parent.arguments[2] === container.parent.parent &&
|
|
ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 9) {
|
|
return container.parent.parent.parent.arguments[0].expression;
|
|
}
|
|
else if (ts.isMethodDeclaration(container) &&
|
|
ts.isIdentifier(container.name) &&
|
|
(container.name.escapedText === "value" || container.name.escapedText === "get" || container.name.escapedText === "set") &&
|
|
ts.isObjectLiteralExpression(container.parent) &&
|
|
ts.isCallExpression(container.parent.parent) &&
|
|
container.parent.parent.arguments[2] === container.parent &&
|
|
ts.getAssignmentDeclarationKind(container.parent.parent) === 9) {
|
|
return container.parent.parent.arguments[0].expression;
|
|
}
|
|
}
|
|
function getTypeForThisExpressionFromJSDoc(node) {
|
|
var jsdocType = ts.getJSDocType(node);
|
|
if (jsdocType && jsdocType.kind === 317) {
|
|
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 ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 164 && n.parent === constructorDecl; });
|
|
}
|
|
function checkSuperExpression(node) {
|
|
var isCallExpression = node.parent.kind === 208 && node.parent.expression === node;
|
|
var immediateContainer = ts.getSuperContainer(node, true);
|
|
var container = immediateContainer;
|
|
var needToCaptureLexicalThis = false;
|
|
if (!isCallExpression) {
|
|
while (container && container.kind === 214) {
|
|
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 === 162; });
|
|
if (current && current.kind === 162) {
|
|
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 === 205)) {
|
|
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 && immediateContainer.kind === 171) {
|
|
checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
|
|
}
|
|
if (ts.isStatic(container) || isCallExpression) {
|
|
nodeCheckFlag = 512;
|
|
if (!isCallExpression &&
|
|
languageVersion >= 2 && languageVersion <= 8 &&
|
|
(ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
|
|
ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
|
|
if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
|
|
getNodeLinks(current).flags |= 134217728;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
nodeCheckFlag = 256;
|
|
}
|
|
getNodeLinks(node).flags |= nodeCheckFlag;
|
|
if (container.kind === 169 && ts.hasSyntacticModifier(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 === 205) {
|
|
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.getClassExtendsHeritageElement(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 === 171 && 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 === 171;
|
|
}
|
|
else {
|
|
if (ts.isClassLike(container.parent) || container.parent.kind === 205) {
|
|
if (ts.isStatic(container)) {
|
|
return container.kind === 169 ||
|
|
container.kind === 168 ||
|
|
container.kind === 172 ||
|
|
container.kind === 173 ||
|
|
container.kind === 167 ||
|
|
container.kind === 170;
|
|
}
|
|
else {
|
|
return container.kind === 169 ||
|
|
container.kind === 168 ||
|
|
container.kind === 172 ||
|
|
container.kind === 173 ||
|
|
container.kind === 167 ||
|
|
container.kind === 166 ||
|
|
container.kind === 171;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
function getContainingObjectLiteral(func) {
|
|
return (func.kind === 169 ||
|
|
func.kind === 172 ||
|
|
func.kind === 173) && func.parent.kind === 205 ? func.parent :
|
|
func.kind === 213 && func.parent.kind === 296 ? func.parent.parent :
|
|
undefined;
|
|
}
|
|
function getThisTypeArgument(type) {
|
|
return ts.getObjectFlags(type) & 4 && type.target === globalThisType ? getTypeArguments(type)[0] : undefined;
|
|
}
|
|
function getThisTypeFromContextualType(type) {
|
|
return mapType(type, function (t) {
|
|
return t.flags & 2097152 ? ts.forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t);
|
|
});
|
|
}
|
|
function getContextualThisParameterType(func) {
|
|
if (func.kind === 214) {
|
|
return undefined;
|
|
}
|
|
if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
|
|
var contextualSignature = getContextualSignature(func);
|
|
if (contextualSignature) {
|
|
var thisParameter = contextualSignature.thisParameter;
|
|
if (thisParameter) {
|
|
return getTypeOfSymbol(thisParameter);
|
|
}
|
|
}
|
|
}
|
|
var inJs = ts.isInJSFile(func);
|
|
if (noImplicitThis || inJs) {
|
|
var containingLiteral = getContainingObjectLiteral(func);
|
|
if (containingLiteral) {
|
|
var contextualType = getApparentTypeOfContextualType(containingLiteral, undefined);
|
|
var literal = containingLiteral;
|
|
var type = contextualType;
|
|
while (type) {
|
|
var thisType = getThisTypeFromContextualType(type);
|
|
if (thisType) {
|
|
return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
|
|
}
|
|
if (literal.parent.kind !== 296) {
|
|
break;
|
|
}
|
|
literal = literal.parent.parent;
|
|
type = getApparentTypeOfContextualType(literal, undefined);
|
|
}
|
|
return getWidenedType(contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral));
|
|
}
|
|
var parent = ts.walkUpParenthesizedExpressions(func.parent);
|
|
if (parent.kind === 221 && parent.operatorToken.kind === 63) {
|
|
var target = parent.left;
|
|
if (ts.isAccessExpression(target)) {
|
|
var expression = target.expression;
|
|
if (inJs && ts.isIdentifier(expression)) {
|
|
var sourceFile = ts.getSourceFileOfNode(parent);
|
|
if (sourceFile.commonJsModuleIndicator && getResolvedSymbol(expression) === sourceFile.symbol) {
|
|
return undefined;
|
|
}
|
|
}
|
|
return getWidenedType(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 args = getEffectiveCallArguments(iife);
|
|
var indexOfParameter = func.parameters.indexOf(parameter);
|
|
if (parameter.dotDotDotToken) {
|
|
return getSpreadArgumentType(args, indexOfParameter, args.length, anyType, undefined, 0);
|
|
}
|
|
var links = getNodeLinks(iife);
|
|
var cached = links.resolvedSignature;
|
|
links.resolvedSignature = anySignature;
|
|
var type = indexOfParameter < args.length ?
|
|
getWidenedLiteralType(checkExpression(args[indexOfParameter])) :
|
|
parameter.initializer ? undefined : undefinedWideningType;
|
|
links.resolvedSignature = cached;
|
|
return type;
|
|
}
|
|
var contextualSignature = getContextualSignature(func);
|
|
if (contextualSignature) {
|
|
var index = func.parameters.indexOf(parameter) - (ts.getThisParameter(func) ? 1 : 0);
|
|
return parameter.dotDotDotToken && ts.lastOrUndefined(func.parameters) === parameter ?
|
|
getRestTypeAtPosition(contextualSignature, index) :
|
|
tryGetTypeAtPosition(contextualSignature, index);
|
|
}
|
|
}
|
|
function getContextualTypeForVariableLikeDeclaration(declaration, contextFlags) {
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
|
|
if (typeNode) {
|
|
return getTypeFromTypeNode(typeNode);
|
|
}
|
|
switch (declaration.kind) {
|
|
case 164:
|
|
return getContextuallyTypedParameterType(declaration);
|
|
case 203:
|
|
return getContextualTypeForBindingElement(declaration, contextFlags);
|
|
case 167:
|
|
if (ts.isStatic(declaration)) {
|
|
return getContextualTypeForStaticPropertyDeclaration(declaration, contextFlags);
|
|
}
|
|
}
|
|
}
|
|
function getContextualTypeForBindingElement(declaration, contextFlags) {
|
|
var parent = declaration.parent.parent;
|
|
var name = declaration.propertyName || declaration.name;
|
|
var parentType = getContextualTypeForVariableLikeDeclaration(parent, contextFlags) ||
|
|
parent.kind !== 203 && parent.initializer && checkDeclarationInitializer(parent, declaration.dotDotDotToken ? 64 : 0);
|
|
if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
|
|
return undefined;
|
|
if (parent.name.kind === 202) {
|
|
var index = ts.indexOfNode(declaration.parent.elements, declaration);
|
|
if (index < 0)
|
|
return undefined;
|
|
return getContextualTypeForElementExpression(parentType, index);
|
|
}
|
|
var nameType = getLiteralTypeFromPropertyName(name);
|
|
if (isTypeUsableAsPropertyName(nameType)) {
|
|
var text = getPropertyNameFromType(nameType);
|
|
return getTypeOfPropertyOfType(parentType, text);
|
|
}
|
|
}
|
|
function getContextualTypeForStaticPropertyDeclaration(declaration, contextFlags) {
|
|
var parentType = ts.isExpression(declaration.parent) && getContextualType(declaration.parent, contextFlags);
|
|
if (!parentType)
|
|
return undefined;
|
|
return getTypeOfPropertyOfContextualType(parentType, getSymbolOfNode(declaration).escapedName);
|
|
}
|
|
function getContextualTypeForInitializerExpression(node, contextFlags) {
|
|
var declaration = node.parent;
|
|
if (ts.hasInitializer(declaration) && node === declaration.initializer) {
|
|
var result = getContextualTypeForVariableLikeDeclaration(declaration, contextFlags);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
if (!(contextFlags & 8) && ts.isBindingPattern(declaration.name) && declaration.name.elements.length > 0) {
|
|
return getTypeFromBindingPattern(declaration.name, true, false);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualTypeForReturnExpression(node, contextFlags) {
|
|
var func = ts.getContainingFunction(node);
|
|
if (func) {
|
|
var contextualReturnType = getContextualReturnType(func, contextFlags);
|
|
if (contextualReturnType) {
|
|
var functionFlags = ts.getFunctionFlags(func);
|
|
if (functionFlags & 1) {
|
|
var isAsyncGenerator_1 = (functionFlags & 2) !== 0;
|
|
if (contextualReturnType.flags & 1048576) {
|
|
contextualReturnType = filterType(contextualReturnType, function (type) { return !!getIterationTypeOfGeneratorFunctionReturnType(1, type, isAsyncGenerator_1); });
|
|
}
|
|
var iterationReturnType = getIterationTypeOfGeneratorFunctionReturnType(1, contextualReturnType, (functionFlags & 2) !== 0);
|
|
if (!iterationReturnType) {
|
|
return undefined;
|
|
}
|
|
contextualReturnType = iterationReturnType;
|
|
}
|
|
if (functionFlags & 2) {
|
|
var contextualAwaitedType = mapType(contextualReturnType, getAwaitedTypeNoAlias);
|
|
return contextualAwaitedType && getUnionType([contextualAwaitedType, createPromiseLikeType(contextualAwaitedType)]);
|
|
}
|
|
return contextualReturnType;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualTypeForAwaitOperand(node, contextFlags) {
|
|
var contextualType = getContextualType(node, contextFlags);
|
|
if (contextualType) {
|
|
var contextualAwaitedType = getAwaitedTypeNoAlias(contextualType);
|
|
return contextualAwaitedType && getUnionType([contextualAwaitedType, createPromiseLikeType(contextualAwaitedType)]);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualTypeForYieldOperand(node, contextFlags) {
|
|
var func = ts.getContainingFunction(node);
|
|
if (func) {
|
|
var functionFlags = ts.getFunctionFlags(func);
|
|
var contextualReturnType = getContextualReturnType(func, contextFlags);
|
|
if (contextualReturnType) {
|
|
var isAsyncGenerator_2 = (functionFlags & 2) !== 0;
|
|
if (!node.asteriskToken && contextualReturnType.flags & 1048576) {
|
|
contextualReturnType = filterType(contextualReturnType, function (type) { return !!getIterationTypeOfGeneratorFunctionReturnType(1, type, isAsyncGenerator_2); });
|
|
}
|
|
return node.asteriskToken
|
|
? contextualReturnType
|
|
: getIterationTypeOfGeneratorFunctionReturnType(0, contextualReturnType, isAsyncGenerator_2);
|
|
}
|
|
}
|
|
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 getContextualIterationType(kind, functionDecl) {
|
|
var isAsync = !!(ts.getFunctionFlags(functionDecl) & 2);
|
|
var contextualReturnType = getContextualReturnType(functionDecl, undefined);
|
|
if (contextualReturnType) {
|
|
return getIterationTypeOfGeneratorFunctionReturnType(kind, contextualReturnType, isAsync)
|
|
|| undefined;
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualReturnType(functionDecl, contextFlags) {
|
|
var returnType = getReturnTypeFromAnnotation(functionDecl);
|
|
if (returnType) {
|
|
return returnType;
|
|
}
|
|
var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl);
|
|
if (signature && !isResolvingReturnTypeOfSignature(signature)) {
|
|
return getReturnTypeOfSignature(signature);
|
|
}
|
|
var iife = ts.getImmediatelyInvokedFunctionExpression(functionDecl);
|
|
if (iife) {
|
|
return getContextualType(iife, contextFlags);
|
|
}
|
|
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) {
|
|
if (ts.isImportCall(callTarget)) {
|
|
return argIndex === 0 ? stringType :
|
|
argIndex === 1 ? getGlobalImportCallOptionsType(false) :
|
|
anyType;
|
|
}
|
|
var signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget);
|
|
if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
|
|
return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
|
|
}
|
|
var restIndex = signature.parameters.length - 1;
|
|
return signatureHasRestParameter(signature) && argIndex >= restIndex ?
|
|
getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256) :
|
|
getTypeAtPosition(signature, argIndex);
|
|
}
|
|
function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
|
|
if (template.parent.kind === 210) {
|
|
return getContextualTypeForArgument(template.parent, substitutionExpression);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualTypeForBinaryOperand(node, contextFlags) {
|
|
var binaryExpression = node.parent;
|
|
var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
|
|
switch (operatorToken.kind) {
|
|
case 63:
|
|
case 76:
|
|
case 75:
|
|
case 77:
|
|
return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
|
|
case 56:
|
|
case 60:
|
|
var type = getContextualType(binaryExpression, contextFlags);
|
|
return node === right && (type && type.pattern || !type && !ts.isDefaultedExpandoInitializer(binaryExpression)) ?
|
|
getTypeOfExpression(left) : type;
|
|
case 55:
|
|
case 27:
|
|
return node === right ? getContextualType(binaryExpression, contextFlags) : undefined;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function getSymbolForExpression(e) {
|
|
if (e.symbol) {
|
|
return e.symbol;
|
|
}
|
|
if (ts.isIdentifier(e)) {
|
|
return getResolvedSymbol(e);
|
|
}
|
|
if (ts.isPropertyAccessExpression(e)) {
|
|
var lhsType = getTypeOfExpression(e.expression);
|
|
return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
|
|
}
|
|
if (ts.isElementAccessExpression(e)) {
|
|
var propType = checkExpressionCached(e.argumentExpression);
|
|
if (!isTypeUsableAsPropertyName(propType)) {
|
|
return undefined;
|
|
}
|
|
var lhsType = getTypeOfExpression(e.expression);
|
|
return getPropertyOfType(lhsType, getPropertyNameFromType(propType));
|
|
}
|
|
return undefined;
|
|
function tryGetPrivateIdentifierPropertyOfType(type, id) {
|
|
var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
|
|
return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
|
|
}
|
|
}
|
|
function getContextualTypeForAssignmentDeclaration(binaryExpression) {
|
|
var _a, _b;
|
|
var kind = ts.getAssignmentDeclarationKind(binaryExpression);
|
|
switch (kind) {
|
|
case 0:
|
|
case 4:
|
|
var lhsSymbol = getSymbolForExpression(binaryExpression.left);
|
|
var decl = lhsSymbol && lhsSymbol.valueDeclaration;
|
|
if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
|
|
var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
|
|
return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
|
|
(ts.isPropertyDeclaration(decl) ? decl.initializer && getTypeOfExpression(binaryExpression.left) : undefined);
|
|
}
|
|
if (kind === 0) {
|
|
return getTypeOfExpression(binaryExpression.left);
|
|
}
|
|
return getContextualTypeForThisPropertyAssignment(binaryExpression);
|
|
case 5:
|
|
if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
|
|
return getContextualTypeForThisPropertyAssignment(binaryExpression);
|
|
}
|
|
else if (!binaryExpression.left.symbol) {
|
|
return getTypeOfExpression(binaryExpression.left);
|
|
}
|
|
else {
|
|
var decl_1 = binaryExpression.left.symbol.valueDeclaration;
|
|
if (!decl_1) {
|
|
return undefined;
|
|
}
|
|
var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
|
|
var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
|
|
if (overallAnnotation) {
|
|
return getTypeFromTypeNode(overallAnnotation);
|
|
}
|
|
else if (ts.isIdentifier(lhs.expression)) {
|
|
var id = lhs.expression;
|
|
var parentSymbol = resolveName(id, id.escapedText, 111551, undefined, id.escapedText, true);
|
|
if (parentSymbol) {
|
|
var annotated_1 = parentSymbol.valueDeclaration && ts.getEffectiveTypeAnnotationNode(parentSymbol.valueDeclaration);
|
|
if (annotated_1) {
|
|
var nameStr = ts.getElementOrPropertyAccessName(lhs);
|
|
if (nameStr !== undefined) {
|
|
return getTypeOfPropertyOfContextualType(getTypeFromTypeNode(annotated_1), nameStr);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
|
|
}
|
|
case 1:
|
|
case 6:
|
|
case 3:
|
|
var valueDeclaration = (_a = binaryExpression.left.symbol) === null || _a === void 0 ? void 0 : _a.valueDeclaration;
|
|
case 2:
|
|
valueDeclaration || (valueDeclaration = (_b = binaryExpression.symbol) === null || _b === void 0 ? void 0 : _b.valueDeclaration);
|
|
var annotated = valueDeclaration && ts.getEffectiveTypeAnnotationNode(valueDeclaration);
|
|
return annotated ? getTypeFromTypeNode(annotated) : undefined;
|
|
case 7:
|
|
case 8:
|
|
case 9:
|
|
return ts.Debug.fail("Does not apply");
|
|
default:
|
|
return ts.Debug.assertNever(kind);
|
|
}
|
|
}
|
|
function isPossiblyAliasedThisProperty(declaration, kind) {
|
|
if (kind === void 0) { kind = ts.getAssignmentDeclarationKind(declaration); }
|
|
if (kind === 4) {
|
|
return true;
|
|
}
|
|
if (!ts.isInJSFile(declaration) || kind !== 5 || !ts.isIdentifier(declaration.left.expression)) {
|
|
return false;
|
|
}
|
|
var name = declaration.left.expression.escapedText;
|
|
var symbol = resolveName(declaration.left, name, 111551, undefined, undefined, true, true);
|
|
return ts.isThisInitializedDeclaration(symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration);
|
|
}
|
|
function getContextualTypeForThisPropertyAssignment(binaryExpression) {
|
|
if (!binaryExpression.symbol)
|
|
return getTypeOfExpression(binaryExpression.left);
|
|
if (binaryExpression.symbol.valueDeclaration) {
|
|
var annotated = ts.getEffectiveTypeAnnotationNode(binaryExpression.symbol.valueDeclaration);
|
|
if (annotated) {
|
|
var type = getTypeFromTypeNode(annotated);
|
|
if (type) {
|
|
return type;
|
|
}
|
|
}
|
|
}
|
|
var thisAccess = ts.cast(binaryExpression.left, ts.isAccessExpression);
|
|
if (!ts.isObjectLiteralMethod(ts.getThisContainer(thisAccess.expression, false))) {
|
|
return undefined;
|
|
}
|
|
var thisType = checkThisExpression(thisAccess.expression);
|
|
var nameStr = ts.getElementOrPropertyAccessName(thisAccess);
|
|
return nameStr !== undefined && getTypeOfPropertyOfContextualType(thisType, nameStr) || undefined;
|
|
}
|
|
function isCircularMappedProperty(symbol) {
|
|
return !!(ts.getCheckFlags(symbol) & 262144 && !symbol.type && findResolutionCycleStartIndex(symbol, 0) >= 0);
|
|
}
|
|
function getTypeOfPropertyOfContextualType(type, name, nameType) {
|
|
return mapType(type, function (t) {
|
|
var _a;
|
|
if (isGenericMappedType(t) && !t.declaration.nameType) {
|
|
var constraint = getConstraintTypeFromMappedType(t);
|
|
var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
|
|
var propertyNameType = nameType || getStringLiteralType(ts.unescapeLeadingUnderscores(name));
|
|
if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
|
|
return substituteIndexedMappedType(t, propertyNameType);
|
|
}
|
|
}
|
|
else if (t.flags & 3670016) {
|
|
var prop = getPropertyOfType(t, name);
|
|
if (prop) {
|
|
return isCircularMappedProperty(prop) ? undefined : getTypeOfSymbol(prop);
|
|
}
|
|
if (isTupleType(t)) {
|
|
var restType = getRestTypeOfTupleType(t);
|
|
if (restType && ts.isNumericLiteralName(name) && +name >= 0) {
|
|
return restType;
|
|
}
|
|
}
|
|
return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType || getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
|
|
}
|
|
return undefined;
|
|
}, true);
|
|
}
|
|
function getContextualTypeForObjectLiteralMethod(node, contextFlags) {
|
|
ts.Debug.assert(ts.isObjectLiteralMethod(node));
|
|
if (node.flags & 33554432) {
|
|
return undefined;
|
|
}
|
|
return getContextualTypeForObjectLiteralElement(node, contextFlags);
|
|
}
|
|
function getContextualTypeForObjectLiteralElement(element, contextFlags) {
|
|
var objectLiteral = element.parent;
|
|
var propertyAssignmentType = ts.isPropertyAssignment(element) && getContextualTypeForVariableLikeDeclaration(element, contextFlags);
|
|
if (propertyAssignmentType) {
|
|
return propertyAssignmentType;
|
|
}
|
|
var type = getApparentTypeOfContextualType(objectLiteral, contextFlags);
|
|
if (type) {
|
|
if (hasBindableName(element)) {
|
|
var symbol = getSymbolOfNode(element);
|
|
return getTypeOfPropertyOfContextualType(type, symbol.escapedName, getSymbolLinks(symbol).nameType);
|
|
}
|
|
if (element.name) {
|
|
var nameType_2 = getLiteralTypeFromPropertyName(element.name);
|
|
return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_2)) === null || _a === void 0 ? void 0 : _a.type; }, true);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextualTypeForElementExpression(arrayContextualType, index) {
|
|
return arrayContextualType && (getTypeOfPropertyOfContextualType(arrayContextualType, "" + index)
|
|
|| mapType(arrayContextualType, function (t) { return getIteratedTypeOrElementType(1, t, undefinedType, undefined, false); }, true));
|
|
}
|
|
function getContextualTypeForConditionalOperand(node, contextFlags) {
|
|
var conditional = node.parent;
|
|
return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional, contextFlags) : undefined;
|
|
}
|
|
function getContextualTypeForChildJsxExpression(node, child, contextFlags) {
|
|
var attributesType = getApparentTypeOfContextualType(node.openingElement.tagName, contextFlags);
|
|
var jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
|
|
if (!(attributesType && !isTypeAny(attributesType) && jsxChildrenPropertyName && jsxChildrenPropertyName !== "")) {
|
|
return undefined;
|
|
}
|
|
var realChildren = ts.getSemanticJsxChildren(node.children);
|
|
var childIndex = realChildren.indexOf(child);
|
|
var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
|
|
return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
|
|
if (isArrayLikeType(t)) {
|
|
return getIndexedAccessType(t, getNumberLiteralType(childIndex));
|
|
}
|
|
else {
|
|
return t;
|
|
}
|
|
}, true));
|
|
}
|
|
function getContextualTypeForJsxExpression(node, contextFlags) {
|
|
var exprParent = node.parent;
|
|
return ts.isJsxAttributeLike(exprParent)
|
|
? getContextualType(node, contextFlags)
|
|
: ts.isJsxElement(exprParent)
|
|
? getContextualTypeForChildJsxExpression(exprParent, node, contextFlags)
|
|
: undefined;
|
|
}
|
|
function getContextualTypeForJsxAttribute(attribute, contextFlags) {
|
|
if (ts.isJsxAttribute(attribute)) {
|
|
var attributesType = getApparentTypeOfContextualType(attribute.parent, contextFlags);
|
|
if (!attributesType || isTypeAny(attributesType)) {
|
|
return undefined;
|
|
}
|
|
return getTypeOfPropertyOfContextualType(attributesType, attribute.name.escapedText);
|
|
}
|
|
else {
|
|
return getContextualType(attribute.parent, contextFlags);
|
|
}
|
|
}
|
|
function isPossiblyDiscriminantValue(node) {
|
|
switch (node.kind) {
|
|
case 10:
|
|
case 8:
|
|
case 9:
|
|
case 14:
|
|
case 110:
|
|
case 95:
|
|
case 104:
|
|
case 79:
|
|
case 153:
|
|
return true;
|
|
case 206:
|
|
case 212:
|
|
return isPossiblyDiscriminantValue(node.expression);
|
|
case 288:
|
|
return !node.expression || isPossiblyDiscriminantValue(node.expression);
|
|
}
|
|
return false;
|
|
}
|
|
function discriminateContextualTypeByObjectMembers(node, contextualType) {
|
|
return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 296 && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
|
|
}
|
|
function discriminateContextualTypeByJSXAttributes(node, contextualType) {
|
|
return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 285 && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return getContextFreeTypeOfExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
|
|
}
|
|
function getApparentTypeOfContextualType(node, contextFlags) {
|
|
var contextualType = ts.isObjectLiteralMethod(node) ?
|
|
getContextualTypeForObjectLiteralMethod(node, contextFlags) :
|
|
getContextualType(node, contextFlags);
|
|
var instantiatedType = instantiateContextualType(contextualType, node, contextFlags);
|
|
if (instantiatedType && !(contextFlags && contextFlags & 2 && instantiatedType.flags & 8650752)) {
|
|
var apparentType = mapType(instantiatedType, getApparentType, true);
|
|
return apparentType.flags & 1048576 && ts.isObjectLiteralExpression(node) ? discriminateContextualTypeByObjectMembers(node, apparentType) :
|
|
apparentType.flags & 1048576 && ts.isJsxAttributes(node) ? discriminateContextualTypeByJSXAttributes(node, apparentType) :
|
|
apparentType;
|
|
}
|
|
}
|
|
function instantiateContextualType(contextualType, node, contextFlags) {
|
|
if (contextualType && maybeTypeOfKind(contextualType, 465829888)) {
|
|
var inferenceContext = getInferenceContext(node);
|
|
if (inferenceContext && contextFlags & 1 && ts.some(inferenceContext.inferences, hasInferenceCandidates)) {
|
|
return instantiateInstantiableTypes(contextualType, inferenceContext.nonFixingMapper);
|
|
}
|
|
if (inferenceContext === null || inferenceContext === void 0 ? void 0 : inferenceContext.returnMapper) {
|
|
var type = instantiateInstantiableTypes(contextualType, inferenceContext.returnMapper);
|
|
return type.flags & 1048576 && containsType(type.types, regularFalseType) && containsType(type.types, regularTrueType) ?
|
|
filterType(type, function (t) { return t !== regularFalseType && t !== regularTrueType; }) :
|
|
type;
|
|
}
|
|
}
|
|
return contextualType;
|
|
}
|
|
function instantiateInstantiableTypes(type, mapper) {
|
|
if (type.flags & 465829888) {
|
|
return instantiateType(type, mapper);
|
|
}
|
|
if (type.flags & 1048576) {
|
|
return getUnionType(ts.map(type.types, function (t) { return instantiateInstantiableTypes(t, mapper); }), 0);
|
|
}
|
|
if (type.flags & 2097152) {
|
|
return getIntersectionType(ts.map(type.types, function (t) { return instantiateInstantiableTypes(t, mapper); }));
|
|
}
|
|
return type;
|
|
}
|
|
function getContextualType(node, contextFlags) {
|
|
if (node.flags & 33554432) {
|
|
return undefined;
|
|
}
|
|
if (node.contextualType) {
|
|
return node.contextualType;
|
|
}
|
|
var parent = node.parent;
|
|
switch (parent.kind) {
|
|
case 254:
|
|
case 164:
|
|
case 167:
|
|
case 166:
|
|
case 203:
|
|
return getContextualTypeForInitializerExpression(node, contextFlags);
|
|
case 214:
|
|
case 247:
|
|
return getContextualTypeForReturnExpression(node, contextFlags);
|
|
case 224:
|
|
return getContextualTypeForYieldOperand(parent, contextFlags);
|
|
case 218:
|
|
return getContextualTypeForAwaitOperand(parent, contextFlags);
|
|
case 208:
|
|
case 209:
|
|
return getContextualTypeForArgument(parent, node);
|
|
case 211:
|
|
case 229:
|
|
return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
|
|
case 221:
|
|
return getContextualTypeForBinaryOperand(node, contextFlags);
|
|
case 296:
|
|
case 297:
|
|
return getContextualTypeForObjectLiteralElement(parent, contextFlags);
|
|
case 298:
|
|
return getContextualType(parent.parent, contextFlags);
|
|
case 204: {
|
|
var arrayLiteral = parent;
|
|
var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
|
|
return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
|
|
}
|
|
case 222:
|
|
return getContextualTypeForConditionalOperand(node, contextFlags);
|
|
case 233:
|
|
ts.Debug.assert(parent.parent.kind === 223);
|
|
return getContextualTypeForSubstitutionExpression(parent.parent, node);
|
|
case 212: {
|
|
var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
|
|
return !tag ? getContextualType(parent, contextFlags) :
|
|
ts.isJSDocTypeTag(tag) && ts.isConstTypeReference(tag.typeExpression.type) ? tryFindWhenConstTypeReference(parent) :
|
|
getTypeFromTypeNode(tag.typeExpression.type);
|
|
}
|
|
case 230:
|
|
return getContextualType(parent, contextFlags);
|
|
case 271:
|
|
return tryGetTypeFromEffectiveTypeNode(parent);
|
|
case 288:
|
|
return getContextualTypeForJsxExpression(parent, contextFlags);
|
|
case 285:
|
|
case 287:
|
|
return getContextualTypeForJsxAttribute(parent, contextFlags);
|
|
case 280:
|
|
case 279:
|
|
return getContextualJsxElementAttributesType(parent, contextFlags);
|
|
}
|
|
return undefined;
|
|
function tryFindWhenConstTypeReference(node) {
|
|
return getContextualType(node, contextFlags);
|
|
}
|
|
}
|
|
function getInferenceContext(node) {
|
|
var ancestor = ts.findAncestor(node, function (n) { return !!n.inferenceContext; });
|
|
return ancestor && ancestor.inferenceContext;
|
|
}
|
|
function getContextualJsxElementAttributesType(node, contextFlags) {
|
|
if (ts.isJsxOpeningElement(node) && node.parent.contextualType && contextFlags !== 4) {
|
|
return node.parent.contextualType;
|
|
}
|
|
return getContextualTypeForArgumentAtIndex(node, 0);
|
|
}
|
|
function getEffectiveFirstArgumentForJsxSignature(signature, node) {
|
|
return getJsxReferenceKind(node) !== 0
|
|
? getJsxPropsTypeFromCallSignature(signature, node)
|
|
: getJsxPropsTypeFromClassType(signature, node);
|
|
}
|
|
function getJsxPropsTypeFromCallSignature(sig, context) {
|
|
var propsType = getTypeOfFirstParameterOfSignatureWithFallback(sig, unknownType);
|
|
propsType = getJsxManagedAttributesFromLocatedAttributes(context, getJsxNamespaceAt(context), propsType);
|
|
var intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context);
|
|
if (!isErrorType(intrinsicAttribs)) {
|
|
propsType = intersectTypes(intrinsicAttribs, propsType);
|
|
}
|
|
return propsType;
|
|
}
|
|
function getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation) {
|
|
if (sig.compositeSignatures) {
|
|
var results = [];
|
|
for (var _i = 0, _a = sig.compositeSignatures; _i < _a.length; _i++) {
|
|
var signature = _a[_i];
|
|
var instance = getReturnTypeOfSignature(signature);
|
|
if (isTypeAny(instance)) {
|
|
return instance;
|
|
}
|
|
var propType = getTypeOfPropertyOfType(instance, forcedLookupLocation);
|
|
if (!propType) {
|
|
return;
|
|
}
|
|
results.push(propType);
|
|
}
|
|
return getIntersectionType(results);
|
|
}
|
|
var instanceType = getReturnTypeOfSignature(sig);
|
|
return isTypeAny(instanceType) ? instanceType : getTypeOfPropertyOfType(instanceType, forcedLookupLocation);
|
|
}
|
|
function getStaticTypeOfReferencedJsxConstructor(context) {
|
|
if (isJsxIntrinsicIdentifier(context.tagName)) {
|
|
var result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(context);
|
|
var fakeSignature = createSignatureForJSXIntrinsic(context, result);
|
|
return getOrCreateTypeFromSignature(fakeSignature);
|
|
}
|
|
var tagType = checkExpressionCached(context.tagName);
|
|
if (tagType.flags & 128) {
|
|
var result = getIntrinsicAttributesTypeFromStringLiteralType(tagType, context);
|
|
if (!result) {
|
|
return errorType;
|
|
}
|
|
var fakeSignature = createSignatureForJSXIntrinsic(context, result);
|
|
return getOrCreateTypeFromSignature(fakeSignature);
|
|
}
|
|
return tagType;
|
|
}
|
|
function getJsxManagedAttributesFromLocatedAttributes(context, ns, attributesType) {
|
|
var managedSym = getJsxLibraryManagedAttributes(ns);
|
|
if (managedSym) {
|
|
var declaredManagedType = getDeclaredTypeOfSymbol(managedSym);
|
|
var ctorType = getStaticTypeOfReferencedJsxConstructor(context);
|
|
if (managedSym.flags & 524288) {
|
|
var params = getSymbolLinks(managedSym).typeParameters;
|
|
if (ts.length(params) >= 2) {
|
|
var args = fillMissingTypeArguments([ctorType, attributesType], params, 2, ts.isInJSFile(context));
|
|
return getTypeAliasInstantiation(managedSym, args);
|
|
}
|
|
}
|
|
if (ts.length(declaredManagedType.typeParameters) >= 2) {
|
|
var args = fillMissingTypeArguments([ctorType, attributesType], declaredManagedType.typeParameters, 2, ts.isInJSFile(context));
|
|
return createTypeReference(declaredManagedType, args);
|
|
}
|
|
}
|
|
return attributesType;
|
|
}
|
|
function getJsxPropsTypeFromClassType(sig, context) {
|
|
var ns = getJsxNamespaceAt(context);
|
|
var forcedLookupLocation = getJsxElementPropertiesName(ns);
|
|
var attributesType = forcedLookupLocation === undefined
|
|
? getTypeOfFirstParameterOfSignatureWithFallback(sig, unknownType)
|
|
: forcedLookupLocation === ""
|
|
? getReturnTypeOfSignature(sig)
|
|
: getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation);
|
|
if (!attributesType) {
|
|
if (!!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 unknownType;
|
|
}
|
|
attributesType = getJsxManagedAttributesFromLocatedAttributes(context, ns, attributesType);
|
|
if (isTypeAny(attributesType)) {
|
|
return attributesType;
|
|
}
|
|
else {
|
|
var apparentAttributesType = attributesType;
|
|
var intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes, context);
|
|
if (!isErrorType(intrinsicClassAttribs)) {
|
|
var typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol);
|
|
var hostClassType = getReturnTypeOfSignature(sig);
|
|
apparentAttributesType = intersectTypes(typeParams
|
|
? createTypeReference(intrinsicClassAttribs, fillMissingTypeArguments([hostClassType], typeParams, getMinTypeArgumentCount(typeParams), ts.isInJSFile(context)))
|
|
: intrinsicClassAttribs, apparentAttributesType);
|
|
}
|
|
var intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context);
|
|
if (!isErrorType(intrinsicAttribs)) {
|
|
apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType);
|
|
}
|
|
return apparentAttributesType;
|
|
}
|
|
}
|
|
function getIntersectedSignatures(signatures) {
|
|
return ts.getStrictOptionValue(compilerOptions, "noImplicitAny")
|
|
? ts.reduceLeft(signatures, function (left, right) {
|
|
return left === right || !left ? left
|
|
: compareTypeParametersIdentical(left.typeParameters, right.typeParameters) ? combineSignaturesOfIntersectionMembers(left, right)
|
|
: undefined;
|
|
})
|
|
: undefined;
|
|
}
|
|
function combineIntersectionThisParam(left, right, mapper) {
|
|
if (!left || !right) {
|
|
return left || right;
|
|
}
|
|
var thisType = getUnionType([getTypeOfSymbol(left), instantiateType(getTypeOfSymbol(right), mapper)]);
|
|
return createSymbolWithType(left, thisType);
|
|
}
|
|
function combineIntersectionParameters(left, right, mapper) {
|
|
var leftCount = getParameterCount(left);
|
|
var rightCount = getParameterCount(right);
|
|
var longest = leftCount >= rightCount ? left : right;
|
|
var shorter = longest === left ? right : left;
|
|
var longestCount = longest === left ? leftCount : rightCount;
|
|
var eitherHasEffectiveRest = (hasEffectiveRestParameter(left) || hasEffectiveRestParameter(right));
|
|
var needsExtraRestElement = eitherHasEffectiveRest && !hasEffectiveRestParameter(longest);
|
|
var params = new Array(longestCount + (needsExtraRestElement ? 1 : 0));
|
|
for (var i = 0; i < longestCount; i++) {
|
|
var longestParamType = tryGetTypeAtPosition(longest, i);
|
|
if (longest === right) {
|
|
longestParamType = instantiateType(longestParamType, mapper);
|
|
}
|
|
var shorterParamType = tryGetTypeAtPosition(shorter, i) || unknownType;
|
|
if (shorter === right) {
|
|
shorterParamType = instantiateType(shorterParamType, mapper);
|
|
}
|
|
var unionParamType = getUnionType([longestParamType, shorterParamType]);
|
|
var isRestParam = eitherHasEffectiveRest && !needsExtraRestElement && i === (longestCount - 1);
|
|
var isOptional = i >= getMinArgumentCount(longest) && i >= getMinArgumentCount(shorter);
|
|
var leftName = i >= leftCount ? undefined : getParameterNameAtPosition(left, i);
|
|
var rightName = i >= rightCount ? undefined : getParameterNameAtPosition(right, i);
|
|
var paramName = leftName === rightName ? leftName :
|
|
!leftName ? rightName :
|
|
!rightName ? leftName :
|
|
undefined;
|
|
var paramSymbol = createSymbol(1 | (isOptional && !isRestParam ? 16777216 : 0), paramName || "arg".concat(i));
|
|
paramSymbol.type = isRestParam ? createArrayType(unionParamType) : unionParamType;
|
|
params[i] = paramSymbol;
|
|
}
|
|
if (needsExtraRestElement) {
|
|
var restParamSymbol = createSymbol(1, "args");
|
|
restParamSymbol.type = createArrayType(getTypeAtPosition(shorter, longestCount));
|
|
if (shorter === right) {
|
|
restParamSymbol.type = instantiateType(restParamSymbol.type, mapper);
|
|
}
|
|
params[longestCount] = restParamSymbol;
|
|
}
|
|
return params;
|
|
}
|
|
function combineSignaturesOfIntersectionMembers(left, right) {
|
|
var typeParams = left.typeParameters || right.typeParameters;
|
|
var paramMapper;
|
|
if (left.typeParameters && right.typeParameters) {
|
|
paramMapper = createTypeMapper(right.typeParameters, left.typeParameters);
|
|
}
|
|
var declaration = left.declaration;
|
|
var params = combineIntersectionParameters(left, right, paramMapper);
|
|
var thisParam = combineIntersectionThisParam(left.thisParameter, right.thisParameter, paramMapper);
|
|
var minArgCount = Math.max(left.minArgumentCount, right.minArgumentCount);
|
|
var result = createSignature(declaration, typeParams, thisParam, params, undefined, undefined, minArgCount, (left.flags | right.flags) & 39);
|
|
result.compositeKind = 2097152;
|
|
result.compositeSignatures = ts.concatenate(left.compositeKind === 2097152 && left.compositeSignatures || [left], [right]);
|
|
if (paramMapper) {
|
|
result.mapper = left.compositeKind === 2097152 && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper;
|
|
}
|
|
return result;
|
|
}
|
|
function getContextualCallSignature(type, node) {
|
|
var signatures = getSignaturesOfType(type, 0);
|
|
var applicableByArity = ts.filter(signatures, function (s) { return !isAritySmaller(s, node); });
|
|
return applicableByArity.length === 1 ? applicableByArity[0] : getIntersectedSignatures(applicableByArity);
|
|
}
|
|
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--;
|
|
}
|
|
return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
|
|
}
|
|
function getContextualSignatureForFunctionLikeDeclaration(node) {
|
|
return ts.isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node)
|
|
? getContextualSignature(node)
|
|
: undefined;
|
|
}
|
|
function getContextualSignature(node) {
|
|
ts.Debug.assert(node.kind !== 169 || ts.isObjectLiteralMethod(node));
|
|
var typeTagSignature = getSignatureOfTypeTag(node);
|
|
if (typeTagSignature) {
|
|
return typeTagSignature;
|
|
}
|
|
var type = getApparentTypeOfContextualType(node, 1);
|
|
if (!type) {
|
|
return undefined;
|
|
}
|
|
if (!(type.flags & 1048576)) {
|
|
return getContextualCallSignature(type, node);
|
|
}
|
|
var signatureList;
|
|
var types = type.types;
|
|
for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
|
|
var current = types_18[_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);
|
|
}
|
|
}
|
|
}
|
|
if (signatureList) {
|
|
return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList);
|
|
}
|
|
}
|
|
function checkSpreadExpression(node, checkMode) {
|
|
if (languageVersion < 2) {
|
|
checkExternalEmitHelpers(node, compilerOptions.downlevelIteration ? 1536 : 1024);
|
|
}
|
|
var arrayOrIterableType = checkExpression(node.expression, checkMode);
|
|
return checkIteratedTypeOrElementType(33, arrayOrIterableType, undefinedType, node.expression);
|
|
}
|
|
function checkSyntheticExpression(node) {
|
|
return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
|
|
}
|
|
function hasDefaultValue(node) {
|
|
return (node.kind === 203 && !!node.initializer) ||
|
|
(node.kind === 221 && node.operatorToken.kind === 63);
|
|
}
|
|
function checkArrayLiteral(node, checkMode, forceTuple) {
|
|
var elements = node.elements;
|
|
var elementCount = elements.length;
|
|
var elementTypes = [];
|
|
var elementFlags = [];
|
|
var contextualType = getApparentTypeOfContextualType(node, undefined);
|
|
var inDestructuringPattern = ts.isAssignmentTarget(node);
|
|
var inConstContext = isConstContext(node);
|
|
var hasOmittedExpression = false;
|
|
for (var i = 0; i < elementCount; i++) {
|
|
var e = elements[i];
|
|
if (e.kind === 225) {
|
|
if (languageVersion < 2) {
|
|
checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 : 1024);
|
|
}
|
|
var spreadType = checkExpression(e.expression, checkMode, forceTuple);
|
|
if (isArrayLikeType(spreadType)) {
|
|
elementTypes.push(spreadType);
|
|
elementFlags.push(8);
|
|
}
|
|
else if (inDestructuringPattern) {
|
|
var restElementType = getIndexTypeOfType(spreadType, numberType) ||
|
|
getIteratedTypeOrElementType(65, spreadType, undefinedType, undefined, false) ||
|
|
unknownType;
|
|
elementTypes.push(restElementType);
|
|
elementFlags.push(4);
|
|
}
|
|
else {
|
|
elementTypes.push(checkIteratedTypeOrElementType(33, spreadType, undefinedType, e.expression));
|
|
elementFlags.push(4);
|
|
}
|
|
}
|
|
else if (exactOptionalPropertyTypes && e.kind === 227) {
|
|
hasOmittedExpression = true;
|
|
elementTypes.push(missingType);
|
|
elementFlags.push(2);
|
|
}
|
|
else {
|
|
var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
|
|
var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
|
|
elementTypes.push(addOptionality(type, true, hasOmittedExpression));
|
|
elementFlags.push(hasOmittedExpression ? 2 : 1);
|
|
if (contextualType && someType(contextualType, isTupleLikeType) && checkMode && checkMode & 2 && !(checkMode & 4) && isContextSensitive(e)) {
|
|
var inferenceContext = getInferenceContext(node);
|
|
ts.Debug.assert(inferenceContext);
|
|
addIntraExpressionInferenceSite(inferenceContext, e, type);
|
|
}
|
|
}
|
|
}
|
|
if (inDestructuringPattern) {
|
|
return createTupleType(elementTypes, elementFlags);
|
|
}
|
|
if (forceTuple || inConstContext || contextualType && someType(contextualType, isTupleLikeType)) {
|
|
return createArrayLiteralType(createTupleType(elementTypes, elementFlags, inConstContext));
|
|
}
|
|
return createArrayLiteralType(createArrayType(elementTypes.length ?
|
|
getUnionType(ts.sameMap(elementTypes, function (t, i) { return elementFlags[i] & 8 ? getIndexedAccessTypeOrUndefined(t, numberType) || anyType : t; }), 2) :
|
|
strictNullChecks ? implicitNeverType : undefinedWideningType, inConstContext));
|
|
}
|
|
function createArrayLiteralType(type) {
|
|
if (!(ts.getObjectFlags(type) & 4)) {
|
|
return type;
|
|
}
|
|
var literalType = type.literalType;
|
|
if (!literalType) {
|
|
literalType = type.literalType = cloneTypeReference(type);
|
|
literalType.objectFlags |= 16384 | 131072;
|
|
}
|
|
return literalType;
|
|
}
|
|
function isNumericName(name) {
|
|
switch (name.kind) {
|
|
case 162:
|
|
return isNumericComputedName(name);
|
|
case 79:
|
|
return ts.isNumericLiteralName(name.escapedText);
|
|
case 8:
|
|
case 10:
|
|
return ts.isNumericLiteralName(name.text);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isNumericComputedName(name) {
|
|
return isTypeAssignableToKind(checkComputedPropertyName(name), 296);
|
|
}
|
|
function checkComputedPropertyName(node) {
|
|
var links = getNodeLinks(node.expression);
|
|
if (!links.resolvedType) {
|
|
if ((ts.isTypeLiteralNode(node.parent.parent) || ts.isClassLike(node.parent.parent) || ts.isInterfaceDeclaration(node.parent.parent))
|
|
&& ts.isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 101
|
|
&& node.parent.kind !== 172 && node.parent.kind !== 173) {
|
|
return links.resolvedType = errorType;
|
|
}
|
|
links.resolvedType = checkExpression(node.expression);
|
|
if (ts.isPropertyDeclaration(node.parent) && !ts.hasStaticModifier(node.parent) && ts.isClassExpression(node.parent.parent)) {
|
|
var container = ts.getEnclosingBlockScopeContainer(node.parent.parent);
|
|
var enclosingIterationStatement = getEnclosingIterationStatement(container);
|
|
if (enclosingIterationStatement) {
|
|
getNodeLinks(enclosingIterationStatement).flags |= 65536;
|
|
getNodeLinks(node).flags |= 524288;
|
|
getNodeLinks(node.parent.parent).flags |= 524288;
|
|
}
|
|
}
|
|
if (links.resolvedType.flags & 98304 ||
|
|
!isTypeAssignableToKind(links.resolvedType, 402653316 | 296 | 12288) &&
|
|
!isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) {
|
|
error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
|
|
}
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function isSymbolWithNumericName(symbol) {
|
|
var _a;
|
|
var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
|
|
return ts.isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
|
|
}
|
|
function isSymbolWithSymbolName(symbol) {
|
|
var _a;
|
|
var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
|
|
return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
|
|
isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096));
|
|
}
|
|
function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
|
|
var propTypes = [];
|
|
for (var i = offset; i < properties.length; i++) {
|
|
var prop = properties[i];
|
|
if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
|
|
keyType === numberType && isSymbolWithNumericName(prop) ||
|
|
keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
|
|
propTypes.push(getTypeOfSymbol(properties[i]));
|
|
}
|
|
}
|
|
var unionType = propTypes.length ? getUnionType(propTypes, 2) : undefinedType;
|
|
return createIndexInfo(keyType, unionType, isConstContext(node));
|
|
}
|
|
function getImmediateAliasedSymbol(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;
|
|
}
|
|
function checkObjectLiteral(node, checkMode) {
|
|
var inDestructuringPattern = ts.isAssignmentTarget(node);
|
|
checkGrammarObjectLiteralExpression(node, inDestructuringPattern);
|
|
var allPropertiesTable = strictNullChecks ? ts.createSymbolTable() : undefined;
|
|
var propertiesTable = ts.createSymbolTable();
|
|
var propertiesArray = [];
|
|
var spread = emptyObjectType;
|
|
var contextualType = getApparentTypeOfContextualType(node, undefined);
|
|
var contextualTypeHasPattern = contextualType && contextualType.pattern &&
|
|
(contextualType.pattern.kind === 201 || contextualType.pattern.kind === 205);
|
|
var inConstContext = isConstContext(node);
|
|
var checkFlags = inConstContext ? 8 : 0;
|
|
var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
|
|
var enumTag = ts.getJSDocEnumTag(node);
|
|
var isJSObjectLiteral = !contextualType && isInJavascript && !enumTag;
|
|
var objectFlags = freshObjectLiteralFlag;
|
|
var patternWithComputedProperties = false;
|
|
var hasComputedStringProperty = false;
|
|
var hasComputedNumberProperty = false;
|
|
var hasComputedSymbolProperty = false;
|
|
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
|
|
var elem = _a[_i];
|
|
if (elem.name && ts.isComputedPropertyName(elem.name)) {
|
|
checkComputedPropertyName(elem.name);
|
|
}
|
|
}
|
|
var offset = 0;
|
|
for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
|
|
var memberDecl = _c[_b];
|
|
var member = getSymbolOfNode(memberDecl);
|
|
var computedNameType = memberDecl.name && memberDecl.name.kind === 162 ?
|
|
checkComputedPropertyName(memberDecl.name) : undefined;
|
|
if (memberDecl.kind === 296 ||
|
|
memberDecl.kind === 297 ||
|
|
ts.isObjectLiteralMethod(memberDecl)) {
|
|
var type = memberDecl.kind === 296 ? checkPropertyAssignment(memberDecl, checkMode) :
|
|
memberDecl.kind === 297 ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
|
|
checkObjectLiteralMethod(memberDecl, checkMode);
|
|
if (isInJavascript) {
|
|
var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
|
|
if (jsDocType) {
|
|
checkTypeAssignableTo(type, jsDocType, memberDecl);
|
|
type = jsDocType;
|
|
}
|
|
else if (enumTag && enumTag.typeExpression) {
|
|
checkTypeAssignableTo(type, getTypeFromTypeNode(enumTag.typeExpression), memberDecl);
|
|
}
|
|
}
|
|
objectFlags |= ts.getObjectFlags(type) & 458752;
|
|
var nameType = computedNameType && isTypeUsableAsPropertyName(computedNameType) ? computedNameType : undefined;
|
|
var prop = nameType ?
|
|
createSymbol(4 | member.flags, getPropertyNameFromType(nameType), checkFlags | 4096) :
|
|
createSymbol(4 | member.flags, member.escapedName, checkFlags);
|
|
if (nameType) {
|
|
prop.nameType = nameType;
|
|
}
|
|
if (inDestructuringPattern) {
|
|
var isOptional = (memberDecl.kind === 296 && hasDefaultValue(memberDecl.initializer)) ||
|
|
(memberDecl.kind === 297 && 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, stringType)) {
|
|
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;
|
|
allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
|
|
if (contextualType && checkMode && checkMode & 2 && !(checkMode & 4) &&
|
|
(memberDecl.kind === 296 || memberDecl.kind === 169) && isContextSensitive(memberDecl)) {
|
|
var inferenceContext = getInferenceContext(node);
|
|
ts.Debug.assert(inferenceContext);
|
|
var inferenceNode = memberDecl.kind === 296 ? memberDecl.initializer : memberDecl;
|
|
addIntraExpressionInferenceSite(inferenceContext, inferenceNode, type);
|
|
}
|
|
}
|
|
else if (memberDecl.kind === 298) {
|
|
if (languageVersion < 2) {
|
|
checkExternalEmitHelpers(memberDecl, 2);
|
|
}
|
|
if (propertiesArray.length > 0) {
|
|
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext);
|
|
propertiesArray = [];
|
|
propertiesTable = ts.createSymbolTable();
|
|
hasComputedStringProperty = false;
|
|
hasComputedNumberProperty = false;
|
|
hasComputedSymbolProperty = false;
|
|
}
|
|
var type = getReducedType(checkExpression(memberDecl.expression));
|
|
if (isValidSpreadType(type)) {
|
|
var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
|
|
if (allPropertiesTable) {
|
|
checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
|
|
}
|
|
offset = propertiesArray.length;
|
|
if (isErrorType(spread)) {
|
|
continue;
|
|
}
|
|
spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
|
|
}
|
|
else {
|
|
error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
|
|
spread = errorType;
|
|
}
|
|
continue;
|
|
}
|
|
else {
|
|
ts.Debug.assert(memberDecl.kind === 172 || memberDecl.kind === 173);
|
|
checkNodeDeferred(memberDecl);
|
|
}
|
|
if (computedNameType && !(computedNameType.flags & 8576)) {
|
|
if (isTypeAssignableTo(computedNameType, stringNumberSymbolType)) {
|
|
if (isTypeAssignableTo(computedNameType, numberType)) {
|
|
hasComputedNumberProperty = true;
|
|
}
|
|
else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
|
|
hasComputedSymbolProperty = true;
|
|
}
|
|
else {
|
|
hasComputedStringProperty = true;
|
|
}
|
|
if (inDestructuringPattern) {
|
|
patternWithComputedProperties = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
propertiesTable.set(member.escapedName, member);
|
|
}
|
|
propertiesArray.push(member);
|
|
}
|
|
if (contextualTypeHasPattern && node.parent.kind !== 298) {
|
|
for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
|
|
var prop = _e[_d];
|
|
if (!propertiesTable.get(prop.escapedName) && !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 (isErrorType(spread)) {
|
|
return errorType;
|
|
}
|
|
if (spread !== emptyObjectType) {
|
|
if (propertiesArray.length > 0) {
|
|
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext);
|
|
propertiesArray = [];
|
|
propertiesTable = ts.createSymbolTable();
|
|
hasComputedStringProperty = false;
|
|
hasComputedNumberProperty = false;
|
|
}
|
|
return mapType(spread, function (t) { return t === emptyObjectType ? createObjectLiteralType() : t; });
|
|
}
|
|
return createObjectLiteralType();
|
|
function createObjectLiteralType() {
|
|
var indexInfos = [];
|
|
if (hasComputedStringProperty)
|
|
indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
|
|
if (hasComputedNumberProperty)
|
|
indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
|
|
if (hasComputedSymbolProperty)
|
|
indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
|
|
var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
|
|
result.objectFlags |= objectFlags | 128 | 131072;
|
|
if (isJSObjectLiteral) {
|
|
result.objectFlags |= 4096;
|
|
}
|
|
if (patternWithComputedProperties) {
|
|
result.objectFlags |= 512;
|
|
}
|
|
if (inDestructuringPattern) {
|
|
result.pattern = node;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
function isValidSpreadType(type) {
|
|
var t = removeDefinitelyFalsyTypes(mapType(type, getBaseConstraintOrType));
|
|
return !!(t.flags & (1 | 67108864 | 524288 | 58982400) ||
|
|
t.flags & 3145728 && ts.every(t.types, isValidSpreadType));
|
|
}
|
|
function checkJsxSelfClosingElementDeferred(node) {
|
|
checkJsxOpeningLikeElementOrOpeningFragment(node);
|
|
}
|
|
function checkJsxSelfClosingElement(node, _checkMode) {
|
|
checkNodeDeferred(node);
|
|
return getJsxElementTypeAt(node) || anyType;
|
|
}
|
|
function checkJsxElementDeferred(node) {
|
|
checkJsxOpeningLikeElementOrOpeningFragment(node.openingElement);
|
|
if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) {
|
|
getIntrinsicTagSymbol(node.closingElement);
|
|
}
|
|
else {
|
|
checkExpression(node.closingElement.tagName);
|
|
}
|
|
checkJsxChildren(node);
|
|
}
|
|
function checkJsxElement(node, _checkMode) {
|
|
checkNodeDeferred(node);
|
|
return getJsxElementTypeAt(node) || anyType;
|
|
}
|
|
function checkJsxFragment(node) {
|
|
checkJsxOpeningLikeElementOrOpeningFragment(node.openingFragment);
|
|
var nodeSourceFile = ts.getSourceFileOfNode(node);
|
|
if (ts.getJSXTransformEnabled(compilerOptions) && (compilerOptions.jsxFactory || nodeSourceFile.pragmas.has("jsx"))
|
|
&& !compilerOptions.jsxFragmentFactory && !nodeSourceFile.pragmas.has("jsxfrag")) {
|
|
error(node, compilerOptions.jsxFactory
|
|
? ts.Diagnostics.The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option
|
|
: ts.Diagnostics.An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments);
|
|
}
|
|
checkJsxChildren(node);
|
|
return getJsxElementTypeAt(node) || anyType;
|
|
}
|
|
function isHyphenatedJsxName(name) {
|
|
return ts.stringContains(name, "-");
|
|
}
|
|
function isJsxIntrinsicIdentifier(tagName) {
|
|
return tagName.kind === 79 && ts.isIntrinsicJsxName(tagName.escapedText);
|
|
}
|
|
function checkJsxAttribute(node, checkMode) {
|
|
return node.initializer
|
|
? checkExpressionForMutableLocation(node.initializer, checkMode)
|
|
: trueType;
|
|
}
|
|
function createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode) {
|
|
var attributes = openingLikeElement.attributes;
|
|
var allAttributesTable = strictNullChecks ? ts.createSymbolTable() : undefined;
|
|
var attributesTable = ts.createSymbolTable();
|
|
var spread = emptyJsxObjectType;
|
|
var hasSpreadAnyType = false;
|
|
var typeToIntersect;
|
|
var explicitlySpecifyChildrenAttribute = false;
|
|
var objectFlags = 2048;
|
|
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);
|
|
objectFlags |= ts.getObjectFlags(exprType) & 458752;
|
|
var attributeSymbol = createSymbol(4 | 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);
|
|
allAttributesTable === null || allAttributesTable === void 0 ? void 0 : allAttributesTable.set(attributeSymbol.escapedName, attributeSymbol);
|
|
if (attributeDecl.name.escapedText === jsxChildrenPropertyName) {
|
|
explicitlySpecifyChildrenAttribute = true;
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.assert(attributeDecl.kind === 287);
|
|
if (attributesTable.size > 0) {
|
|
spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, false);
|
|
attributesTable = ts.createSymbolTable();
|
|
}
|
|
var exprType = getReducedType(checkExpressionCached(attributeDecl.expression, checkMode));
|
|
if (isTypeAny(exprType)) {
|
|
hasSpreadAnyType = true;
|
|
}
|
|
if (isValidSpreadType(exprType)) {
|
|
spread = getSpreadType(spread, exprType, attributes.symbol, objectFlags, false);
|
|
if (allAttributesTable) {
|
|
checkSpreadPropOverrides(exprType, allAttributesTable, attributeDecl);
|
|
}
|
|
}
|
|
else {
|
|
error(attributeDecl.expression, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
|
|
typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType;
|
|
}
|
|
}
|
|
}
|
|
if (!hasSpreadAnyType) {
|
|
if (attributesTable.size > 0) {
|
|
spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, false);
|
|
}
|
|
}
|
|
var parent = openingLikeElement.parent.kind === 278 ? 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 contextualType = getApparentTypeOfContextualType(openingLikeElement.attributes, undefined);
|
|
var childrenContextualType = contextualType && getTypeOfPropertyOfContextualType(contextualType, jsxChildrenPropertyName);
|
|
var childrenPropSymbol = createSymbol(4, jsxChildrenPropertyName);
|
|
childrenPropSymbol.type = childrenTypes.length === 1 ? childrenTypes[0] :
|
|
childrenContextualType && someType(childrenContextualType, isTupleLikeType) ? createTupleType(childrenTypes) :
|
|
createArrayType(getUnionType(childrenTypes));
|
|
childrenPropSymbol.valueDeclaration = ts.factory.createPropertySignature(undefined, ts.unescapeLeadingUnderscores(jsxChildrenPropertyName), undefined, undefined);
|
|
ts.setParent(childrenPropSymbol.valueDeclaration, attributes);
|
|
childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
|
|
var childPropMap = ts.createSymbolTable();
|
|
childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
|
|
spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, false);
|
|
}
|
|
}
|
|
if (hasSpreadAnyType) {
|
|
return anyType;
|
|
}
|
|
if (typeToIntersect && spread !== emptyJsxObjectType) {
|
|
return getIntersectionType([typeToIntersect, spread]);
|
|
}
|
|
return typeToIntersect || (spread === emptyJsxObjectType ? createJsxAttributesType() : spread);
|
|
function createJsxAttributesType() {
|
|
objectFlags |= freshObjectLiteralFlag;
|
|
var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
result.objectFlags |= objectFlags | 128 | 131072;
|
|
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 === 11) {
|
|
if (!child.containsOnlyTriviaWhiteSpaces) {
|
|
childrenTypes.push(stringType);
|
|
}
|
|
}
|
|
else if (child.kind === 288 && !child.expression) {
|
|
continue;
|
|
}
|
|
else {
|
|
childrenTypes.push(checkExpressionForMutableLocation(child, checkMode));
|
|
}
|
|
}
|
|
return childrenTypes;
|
|
}
|
|
function checkSpreadPropOverrides(type, props, spread) {
|
|
for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
|
|
var right = _a[_i];
|
|
if (!(right.flags & 16777216)) {
|
|
var left = props.get(right.escapedName);
|
|
if (left) {
|
|
var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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, 788968);
|
|
return typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType;
|
|
}
|
|
function getIntrinsicTagSymbol(node) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedSymbol) {
|
|
var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, node);
|
|
if (!isErrorType(intrinsicElementsType)) {
|
|
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, stringType);
|
|
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 getJsxNamespaceContainerForImplicitImport(location) {
|
|
var file = location && ts.getSourceFileOfNode(location);
|
|
var links = file && getNodeLinks(file);
|
|
if (links && links.jsxImplicitImportContainer === false) {
|
|
return undefined;
|
|
}
|
|
if (links && links.jsxImplicitImportContainer) {
|
|
return links.jsxImplicitImportContainer;
|
|
}
|
|
var runtimeImportSpecifier = ts.getJSXRuntimeImport(ts.getJSXImplicitImportBase(compilerOptions, file), compilerOptions);
|
|
if (!runtimeImportSpecifier) {
|
|
return undefined;
|
|
}
|
|
var isClassic = ts.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.Classic;
|
|
var errorMessage = isClassic
|
|
? ts.Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option
|
|
: ts.Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;
|
|
var mod = resolveExternalModule(location, runtimeImportSpecifier, errorMessage, location);
|
|
var result = mod && mod !== unknownSymbol ? getMergedSymbol(resolveSymbol(mod)) : undefined;
|
|
if (links) {
|
|
links.jsxImplicitImportContainer = result || false;
|
|
}
|
|
return result;
|
|
}
|
|
function getJsxNamespaceAt(location) {
|
|
var links = location && getNodeLinks(location);
|
|
if (links && links.jsxNamespace) {
|
|
return links.jsxNamespace;
|
|
}
|
|
if (!links || links.jsxNamespace !== false) {
|
|
var resolvedNamespace = getJsxNamespaceContainerForImplicitImport(location);
|
|
if (!resolvedNamespace || resolvedNamespace === unknownSymbol) {
|
|
var namespaceName = getJsxNamespace(location);
|
|
resolvedNamespace = resolveName(location, namespaceName, 1920, undefined, namespaceName, false);
|
|
}
|
|
if (resolvedNamespace) {
|
|
var candidate = resolveSymbol(getSymbol(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, 1920));
|
|
if (candidate && candidate !== unknownSymbol) {
|
|
if (links) {
|
|
links.jsxNamespace = candidate;
|
|
}
|
|
return candidate;
|
|
}
|
|
}
|
|
if (links) {
|
|
links.jsxNamespace = false;
|
|
}
|
|
}
|
|
var s = resolveSymbol(getGlobalSymbol(JsxNames.JSX, 1920, undefined));
|
|
if (s === unknownSymbol) {
|
|
return undefined;
|
|
}
|
|
return s;
|
|
}
|
|
function getNameFromJsxElementAttributesContainer(nameOfAttribPropContainer, jsxNamespace) {
|
|
var jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol(jsxNamespace.exports, nameOfAttribPropContainer, 788968);
|
|
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 && jsxElementAttribPropInterfaceSym.declarations) {
|
|
error(jsxElementAttribPropInterfaceSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, ts.unescapeLeadingUnderscores(nameOfAttribPropContainer));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getJsxLibraryManagedAttributes(jsxNamespace) {
|
|
return jsxNamespace && getSymbol(jsxNamespace.exports, JsxNames.LibraryManagedAttributes, 788968);
|
|
}
|
|
function getJsxElementPropertiesName(jsxNamespace) {
|
|
return getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer, jsxNamespace);
|
|
}
|
|
function getJsxElementChildrenPropertyName(jsxNamespace) {
|
|
return getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer, jsxNamespace);
|
|
}
|
|
function getUninstantiatedJsxSignaturesOfType(elementType, caller) {
|
|
if (elementType.flags & 4) {
|
|
return [anySignature];
|
|
}
|
|
else if (elementType.flags & 128) {
|
|
var intrinsicType = getIntrinsicAttributesTypeFromStringLiteralType(elementType, caller);
|
|
if (!intrinsicType) {
|
|
error(caller, ts.Diagnostics.Property_0_does_not_exist_on_type_1, elementType.value, "JSX." + JsxNames.IntrinsicElements);
|
|
return ts.emptyArray;
|
|
}
|
|
else {
|
|
var fakeSignature = createSignatureForJSXIntrinsic(caller, intrinsicType);
|
|
return [fakeSignature];
|
|
}
|
|
}
|
|
var apparentElemType = getApparentType(elementType);
|
|
var signatures = getSignaturesOfType(apparentElemType, 1);
|
|
if (signatures.length === 0) {
|
|
signatures = getSignaturesOfType(apparentElemType, 0);
|
|
}
|
|
if (signatures.length === 0 && apparentElemType.flags & 1048576) {
|
|
signatures = getUnionSignatures(ts.map(apparentElemType.types, function (t) { return getUninstantiatedJsxSignaturesOfType(t, caller); }));
|
|
}
|
|
return signatures;
|
|
}
|
|
function getIntrinsicAttributesTypeFromStringLiteralType(type, location) {
|
|
var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, location);
|
|
if (!isErrorType(intrinsicElementsType)) {
|
|
var stringLiteralTypeName = type.value;
|
|
var intrinsicProp = getPropertyOfType(intrinsicElementsType, ts.escapeLeadingUnderscores(stringLiteralTypeName));
|
|
if (intrinsicProp) {
|
|
return getTypeOfSymbol(intrinsicProp);
|
|
}
|
|
var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
|
|
if (indexSignatureType) {
|
|
return indexSignatureType;
|
|
}
|
|
return undefined;
|
|
}
|
|
return anyType;
|
|
}
|
|
function checkJsxReturnAssignableToAppropriateBound(refKind, elemInstanceType, openingLikeElement) {
|
|
if (refKind === 1) {
|
|
var sfcReturnConstraint = getJsxStatelessElementTypeAt(openingLikeElement);
|
|
if (sfcReturnConstraint) {
|
|
checkTypeRelatedTo(elemInstanceType, sfcReturnConstraint, assignableRelation, openingLikeElement.tagName, ts.Diagnostics.Its_return_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain);
|
|
}
|
|
}
|
|
else if (refKind === 0) {
|
|
var classConstraint = getJsxElementClassTypeAt(openingLikeElement);
|
|
if (classConstraint) {
|
|
checkTypeRelatedTo(elemInstanceType, classConstraint, assignableRelation, openingLikeElement.tagName, ts.Diagnostics.Its_instance_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain);
|
|
}
|
|
}
|
|
else {
|
|
var sfcReturnConstraint = getJsxStatelessElementTypeAt(openingLikeElement);
|
|
var classConstraint = getJsxElementClassTypeAt(openingLikeElement);
|
|
if (!sfcReturnConstraint || !classConstraint) {
|
|
return;
|
|
}
|
|
var combined = getUnionType([sfcReturnConstraint, classConstraint]);
|
|
checkTypeRelatedTo(elemInstanceType, combined, assignableRelation, openingLikeElement.tagName, ts.Diagnostics.Its_element_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain);
|
|
}
|
|
function generateInitialErrorChain() {
|
|
var componentName = ts.getTextOfNode(openingLikeElement.tagName);
|
|
return ts.chainDiagnosticMessages(undefined, ts.Diagnostics._0_cannot_be_used_as_a_JSX_component, componentName);
|
|
}
|
|
}
|
|
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) || errorType;
|
|
}
|
|
else if (links.jsxFlags & 2) {
|
|
return links.resolvedJsxElementAttributesType =
|
|
getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
|
|
}
|
|
else {
|
|
return links.resolvedJsxElementAttributesType = errorType;
|
|
}
|
|
}
|
|
return links.resolvedJsxElementAttributesType;
|
|
}
|
|
function getJsxElementClassTypeAt(location) {
|
|
var type = getJsxType(JsxNames.ElementClass, location);
|
|
if (isErrorType(type))
|
|
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) {
|
|
var isNodeOpeningLikeElement = ts.isJsxOpeningLikeElement(node);
|
|
if (isNodeOpeningLikeElement) {
|
|
checkGrammarJsxElement(node);
|
|
}
|
|
checkJsxPreconditions(node);
|
|
if (!getJsxNamespaceContainerForImplicitImport(node)) {
|
|
var jsxFactoryRefErr = diagnostics && compilerOptions.jsx === 2 ? ts.Diagnostics.Cannot_find_name_0 : undefined;
|
|
var jsxFactoryNamespace = getJsxNamespace(node);
|
|
var jsxFactoryLocation = isNodeOpeningLikeElement ? node.tagName : node;
|
|
var jsxFactorySym = void 0;
|
|
if (!(ts.isJsxOpeningFragment(node) && jsxFactoryNamespace === "null")) {
|
|
jsxFactorySym = resolveName(jsxFactoryLocation, jsxFactoryNamespace, 111551, jsxFactoryRefErr, jsxFactoryNamespace, true);
|
|
}
|
|
if (jsxFactorySym) {
|
|
jsxFactorySym.isReferenced = 67108863;
|
|
if (jsxFactorySym.flags & 2097152 && !getTypeOnlyAliasDeclaration(jsxFactorySym)) {
|
|
markAliasSymbolAsReferenced(jsxFactorySym);
|
|
}
|
|
}
|
|
if (ts.isJsxOpeningFragment(node)) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
var localJsxNamespace = getLocalJsxNamespace(file);
|
|
if (localJsxNamespace) {
|
|
resolveName(jsxFactoryLocation, localJsxNamespace, 111551, jsxFactoryRefErr, localJsxNamespace, true);
|
|
}
|
|
}
|
|
}
|
|
if (isNodeOpeningLikeElement) {
|
|
var jsxOpeningLikeNode = node;
|
|
var sig = getResolvedSignature(jsxOpeningLikeNode);
|
|
checkDeprecatedSignature(sig, node);
|
|
checkJsxReturnAssignableToAppropriateBound(getJsxReferenceKind(jsxOpeningLikeNode), getReturnTypeOfSignature(sig), jsxOpeningLikeNode);
|
|
}
|
|
}
|
|
function isKnownProperty(targetType, name, isComparingJsxAttributes) {
|
|
if (targetType.flags & 524288) {
|
|
if (getPropertyOfObjectType(targetType, name) ||
|
|
getApplicableIndexInfoForName(targetType, name) ||
|
|
isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
|
|
isComparingJsxAttributes && isHyphenatedJsxName(name)) {
|
|
return true;
|
|
}
|
|
}
|
|
else if (targetType.flags & 3145728 && isExcessPropertyCheckTarget(targetType)) {
|
|
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 isExcessPropertyCheckTarget(type) {
|
|
return !!(type.flags & 524288 && !(ts.getObjectFlags(type) & 512) ||
|
|
type.flags & 67108864 ||
|
|
type.flags & 1048576 && ts.some(type.types, isExcessPropertyCheckTarget) ||
|
|
type.flags & 2097152 && ts.every(type.types, isExcessPropertyCheckTarget));
|
|
}
|
|
function checkJsxExpression(node, checkMode) {
|
|
checkGrammarJsxExpression(node);
|
|
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 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.isInJSFile(symbol.valueDeclaration)) {
|
|
var parent = symbol.valueDeclaration.parent;
|
|
return parent && ts.isBinaryExpression(parent) &&
|
|
ts.getAssignmentDeclarationKind(parent) === 3;
|
|
}
|
|
}
|
|
function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
|
|
if (reportError === void 0) { reportError = true; }
|
|
var errorNode = !reportError ? undefined :
|
|
node.kind === 161 ? node.right :
|
|
node.kind === 200 ? node :
|
|
node.kind === 203 && node.propertyName ? node.propertyName : node.name;
|
|
return checkPropertyAccessibilityAtLocation(node, isSuper, writing, type, prop, errorNode);
|
|
}
|
|
function checkPropertyAccessibilityAtLocation(location, isSuper, writing, containingType, prop, errorNode) {
|
|
var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
|
|
if (isSuper) {
|
|
if (languageVersion < 2) {
|
|
if (symbolHasNonMethodDeclaration(prop)) {
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
if (flags & 128) {
|
|
if (errorNode) {
|
|
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) && symbolHasNonMethodDeclaration(prop) &&
|
|
(ts.isThisProperty(location) || ts.isThisInitializedObjectBindingExpression(location) || ts.isObjectBindingPattern(location.parent) && ts.isThisInitializedDeclaration(location.parent.parent))) {
|
|
var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop));
|
|
if (declaringClassDeclaration && isNodeUsedDuringClassInitialization(location)) {
|
|
if (errorNode) {
|
|
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(location, declaringClassDeclaration)) {
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop)));
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
if (isSuper) {
|
|
return true;
|
|
}
|
|
var enclosingClass = forEachEnclosingClass(location, function (enclosingDeclaration) {
|
|
var enclosingClass = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingDeclaration));
|
|
return isClassDerivedFromDeclaringClasses(enclosingClass, prop, writing);
|
|
});
|
|
if (!enclosingClass) {
|
|
enclosingClass = getEnclosingClassFromThisParameter(location);
|
|
enclosingClass = enclosingClass && isClassDerivedFromDeclaringClasses(enclosingClass, prop, writing);
|
|
if (flags & 32 || !enclosingClass) {
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || containingType));
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
if (flags & 32) {
|
|
return true;
|
|
}
|
|
if (containingType.flags & 262144) {
|
|
containingType = containingType.isThisType ? getConstraintOfTypeParameter(containingType) : getBaseConstraintOfType(containingType);
|
|
}
|
|
if (!containingType || !hasBaseType(containingType, enclosingClass)) {
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2, symbolToString(prop), typeToString(enclosingClass), typeToString(containingType));
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function getEnclosingClassFromThisParameter(node) {
|
|
var thisParameter = getThisParameterFromNodeContext(node);
|
|
var thisType = (thisParameter === null || thisParameter === void 0 ? void 0 : thisParameter.type) && getTypeFromTypeNode(thisParameter.type);
|
|
if (thisType && thisType.flags & 262144) {
|
|
thisType = getConstraintOfTypeParameter(thisType);
|
|
}
|
|
if (thisType && ts.getObjectFlags(thisType) & (3 | 4)) {
|
|
return getTargetType(thisType);
|
|
}
|
|
return undefined;
|
|
}
|
|
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) { return !(prop.flags & 8192); });
|
|
}
|
|
function checkNonNullExpression(node) {
|
|
return checkNonNullType(checkExpression(node), node);
|
|
}
|
|
function isNullableType(type) {
|
|
return !!(getTypeFacts(type) & 50331648);
|
|
}
|
|
function getNonNullableTypeIfNeeded(type) {
|
|
return isNullableType(type) ? getNonNullableType(type) : type;
|
|
}
|
|
function reportObjectPossiblyNullOrUndefinedError(node, facts) {
|
|
error(node, facts & 16777216 ? facts & 33554432 ?
|
|
ts.Diagnostics.Object_is_possibly_null_or_undefined :
|
|
ts.Diagnostics.Object_is_possibly_undefined :
|
|
ts.Diagnostics.Object_is_possibly_null);
|
|
}
|
|
function reportCannotInvokePossiblyNullOrUndefinedError(node, facts) {
|
|
error(node, facts & 16777216 ? facts & 33554432 ?
|
|
ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null_or_undefined :
|
|
ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_undefined :
|
|
ts.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null);
|
|
}
|
|
function checkNonNullTypeWithReporter(type, node, reportError) {
|
|
if (strictNullChecks && type.flags & 2) {
|
|
error(node, ts.Diagnostics.Object_is_of_type_unknown);
|
|
return errorType;
|
|
}
|
|
var facts = getTypeFacts(type);
|
|
if (facts & 50331648) {
|
|
reportError(node, facts);
|
|
var t = getNonNullableType(type);
|
|
return t.flags & (98304 | 131072) ? errorType : t;
|
|
}
|
|
return type;
|
|
}
|
|
function checkNonNullType(type, node) {
|
|
return checkNonNullTypeWithReporter(type, node, reportObjectPossiblyNullOrUndefinedError);
|
|
}
|
|
function checkNonNullNonVoidType(type, node) {
|
|
var nonNullType = checkNonNullType(type, node);
|
|
if (nonNullType.flags & 16384) {
|
|
error(node, ts.Diagnostics.Object_is_possibly_undefined);
|
|
}
|
|
return nonNullType;
|
|
}
|
|
function checkPropertyAccessExpression(node, checkMode) {
|
|
return node.flags & 32 ? checkPropertyAccessChain(node, checkMode) :
|
|
checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullExpression(node.expression), node.name, checkMode);
|
|
}
|
|
function checkPropertyAccessChain(node, checkMode) {
|
|
var leftType = checkExpression(node.expression);
|
|
var nonOptionalType = getOptionalExpressionType(leftType, node.expression);
|
|
return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
|
|
}
|
|
function checkQualifiedName(node, checkMode) {
|
|
var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
|
|
return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
|
|
}
|
|
function isMethodAccessForCall(node) {
|
|
while (node.parent.kind === 212) {
|
|
node = node.parent;
|
|
}
|
|
return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
|
|
}
|
|
function lookupSymbolForPrivateIdentifierDeclaration(propName, location) {
|
|
for (var containingClass = ts.getContainingClass(location); !!containingClass; containingClass = ts.getContainingClass(containingClass)) {
|
|
var symbol = containingClass.symbol;
|
|
var name = ts.getSymbolNameForPrivateIdentifier(symbol, propName);
|
|
var prop = (symbol.members && symbol.members.get(name)) || (symbol.exports && symbol.exports.get(name));
|
|
if (prop) {
|
|
return prop;
|
|
}
|
|
}
|
|
}
|
|
function checkGrammarPrivateIdentifierExpression(privId) {
|
|
if (!ts.getContainingClass(privId)) {
|
|
return grammarErrorOnNode(privId, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
}
|
|
if (!ts.isForInStatement(privId.parent)) {
|
|
if (!ts.isExpressionNode(privId)) {
|
|
return grammarErrorOnNode(privId, ts.Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression);
|
|
}
|
|
var isInOperation = ts.isBinaryExpression(privId.parent) && privId.parent.operatorToken.kind === 101;
|
|
if (!getSymbolForPrivateIdentifierExpression(privId) && !isInOperation) {
|
|
return grammarErrorOnNode(privId, ts.Diagnostics.Cannot_find_name_0, ts.idText(privId));
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkPrivateIdentifierExpression(privId) {
|
|
checkGrammarPrivateIdentifierExpression(privId);
|
|
var symbol = getSymbolForPrivateIdentifierExpression(privId);
|
|
if (symbol) {
|
|
markPropertyAsReferenced(symbol, undefined, false);
|
|
}
|
|
return anyType;
|
|
}
|
|
function getSymbolForPrivateIdentifierExpression(privId) {
|
|
if (!ts.isExpressionNode(privId)) {
|
|
return undefined;
|
|
}
|
|
var links = getNodeLinks(privId);
|
|
if (links.resolvedSymbol === undefined) {
|
|
links.resolvedSymbol = lookupSymbolForPrivateIdentifierDeclaration(privId.escapedText, privId);
|
|
}
|
|
return links.resolvedSymbol;
|
|
}
|
|
function getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) {
|
|
return getPropertyOfType(leftType, lexicallyScopedIdentifier.escapedName);
|
|
}
|
|
function checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedIdentifier) {
|
|
var propertyOnType;
|
|
var properties = getPropertiesOfType(leftType);
|
|
if (properties) {
|
|
ts.forEach(properties, function (symbol) {
|
|
var decl = symbol.valueDeclaration;
|
|
if (decl && ts.isNamedDeclaration(decl) && ts.isPrivateIdentifier(decl.name) && decl.name.escapedText === right.escapedText) {
|
|
propertyOnType = symbol;
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
var diagName = diagnosticName(right);
|
|
if (propertyOnType) {
|
|
var typeValueDecl = ts.Debug.checkDefined(propertyOnType.valueDeclaration);
|
|
var typeClass_1 = ts.Debug.checkDefined(ts.getContainingClass(typeValueDecl));
|
|
if (lexicallyScopedIdentifier === null || lexicallyScopedIdentifier === void 0 ? void 0 : lexicallyScopedIdentifier.valueDeclaration) {
|
|
var lexicalValueDecl = lexicallyScopedIdentifier.valueDeclaration;
|
|
var lexicalClass = ts.getContainingClass(lexicalValueDecl);
|
|
ts.Debug.assert(!!lexicalClass);
|
|
if (ts.findAncestor(lexicalClass, function (n) { return typeClass_1 === n; })) {
|
|
var diagnostic = error(right, ts.Diagnostics.The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling, diagName, typeToString(leftType));
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(lexicalValueDecl, ts.Diagnostics.The_shadowing_declaration_of_0_is_defined_here, diagName), ts.createDiagnosticForNode(typeValueDecl, ts.Diagnostics.The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here, diagName));
|
|
return true;
|
|
}
|
|
}
|
|
error(right, ts.Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier, diagName, diagnosticName(typeClass_1.name || anon));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isThisPropertyAccessInConstructor(node, prop) {
|
|
return (isConstructorDeclaredProperty(prop) || ts.isThisProperty(node) && isAutoTypedProperty(prop))
|
|
&& ts.getThisContainer(node, true) === getDeclaringConstructor(prop);
|
|
}
|
|
function checkPropertyAccessExpressionOrQualifiedName(node, left, leftType, right, checkMode) {
|
|
var parentSymbol = getNodeLinks(left).resolvedSymbol;
|
|
var assignmentKind = ts.getAssignmentTargetKind(node);
|
|
var apparentType = getApparentType(assignmentKind !== 0 || isMethodAccessForCall(node) ? getWidenedType(leftType) : leftType);
|
|
var isAnyLike = isTypeAny(apparentType) || apparentType === silentNeverType;
|
|
var prop;
|
|
if (ts.isPrivateIdentifier(right)) {
|
|
if (languageVersion < 99) {
|
|
if (assignmentKind !== 0) {
|
|
checkExternalEmitHelpers(node, 1048576);
|
|
}
|
|
if (assignmentKind !== 1) {
|
|
checkExternalEmitHelpers(node, 524288);
|
|
}
|
|
}
|
|
var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right);
|
|
if (assignmentKind && lexicallyScopedSymbol && lexicallyScopedSymbol.valueDeclaration && ts.isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) {
|
|
grammarErrorOnNode(right, ts.Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable, ts.idText(right));
|
|
}
|
|
if (isAnyLike) {
|
|
if (lexicallyScopedSymbol) {
|
|
return isErrorType(apparentType) ? errorType : apparentType;
|
|
}
|
|
if (!ts.getContainingClass(right)) {
|
|
grammarErrorOnNode(right, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
return anyType;
|
|
}
|
|
}
|
|
prop = lexicallyScopedSymbol ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedSymbol) : undefined;
|
|
if (!prop && checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedSymbol)) {
|
|
return errorType;
|
|
}
|
|
else {
|
|
var isSetonlyAccessor = prop && prop.flags & 65536 && !(prop.flags & 32768);
|
|
if (isSetonlyAccessor && assignmentKind !== 1) {
|
|
error(node, ts.Diagnostics.Private_accessor_was_defined_without_a_getter);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (isAnyLike) {
|
|
if (ts.isIdentifier(left) && parentSymbol) {
|
|
markAliasReferenced(parentSymbol, node);
|
|
}
|
|
return isErrorType(apparentType) ? errorType : apparentType;
|
|
}
|
|
prop = getPropertyOfType(apparentType, right.escapedText, false, node.kind === 161);
|
|
}
|
|
if (ts.isIdentifier(left) && parentSymbol && (compilerOptions.isolatedModules ||
|
|
!(prop && (isConstEnumOrConstEnumOnlyModule(prop) || prop.flags & 8 && node.parent.kind === 299)) ||
|
|
ts.shouldPreserveConstEnums(compilerOptions) && isExportOrExportExpression(node))) {
|
|
markAliasReferenced(parentSymbol, node);
|
|
}
|
|
var propType;
|
|
if (!prop) {
|
|
var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 || !isGenericObjectType(leftType) || ts.isThisTypeParameter(leftType)) ?
|
|
getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
|
|
if (!(indexInfo && indexInfo.type)) {
|
|
var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, true);
|
|
if (!isUncheckedJS && isJSLiteralType(leftType)) {
|
|
return anyType;
|
|
}
|
|
if (leftType.symbol === globalThisSymbol) {
|
|
if (globalThisSymbol.exports.has(right.escapedText) && (globalThisSymbol.exports.get(right.escapedText).flags & 418)) {
|
|
error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(right.escapedText), typeToString(leftType));
|
|
}
|
|
else if (noImplicitAny) {
|
|
error(right, ts.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature, typeToString(leftType));
|
|
}
|
|
return anyType;
|
|
}
|
|
if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
|
|
reportNonexistentProperty(right, ts.isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
|
|
}
|
|
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 = (compilerOptions.noUncheckedIndexedAccess && !ts.isAssignmentTarget(node)) ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
|
|
if (compilerOptions.noPropertyAccessFromIndexSignature && ts.isPropertyAccessExpression(node)) {
|
|
error(right, ts.Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0, ts.unescapeLeadingUnderscores(right.escapedText));
|
|
}
|
|
if (indexInfo.declaration && ts.getCombinedNodeFlags(indexInfo.declaration) & 268435456) {
|
|
addDeprecatedSuggestion(right, [indexInfo.declaration], right.escapedText);
|
|
}
|
|
}
|
|
else {
|
|
if (isDeprecatedSymbol(prop) && isUncalledFunctionReference(node, prop) && prop.declarations) {
|
|
addDeprecatedSuggestion(right, prop.declarations, right.escapedText);
|
|
}
|
|
checkPropertyNotUsedBeforeDeclaration(prop, node, right);
|
|
markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
|
|
getNodeLinks(node).resolvedSymbol = prop;
|
|
var writing = ts.isWriteAccess(node);
|
|
checkPropertyAccessibility(node, left.kind === 106, writing, apparentType, prop);
|
|
if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
|
|
error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
|
|
return errorType;
|
|
}
|
|
propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : writing ? getWriteTypeOfSymbol(prop) : getTypeOfSymbol(prop);
|
|
}
|
|
return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
|
|
}
|
|
function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
if (file) {
|
|
if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 || file.scriptKind === 2)) {
|
|
var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
|
|
return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
|
|
&& !(excludeClasses && suggestion && suggestion.flags & 32)
|
|
&& !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
|
|
var assignmentKind = ts.getAssignmentTargetKind(node);
|
|
if (assignmentKind === 1) {
|
|
return removeMissingType(propType, !!(prop && prop.flags & 16777216));
|
|
}
|
|
if (prop &&
|
|
!(prop.flags & (3 | 4 | 98304))
|
|
&& !(prop.flags & 8192 && propType.flags & 1048576)
|
|
&& !isDuplicatedCommonJSExport(prop.declarations)) {
|
|
return propType;
|
|
}
|
|
if (propType === autoType) {
|
|
return getFlowTypeOfProperty(node, prop);
|
|
}
|
|
propType = getNarrowableTypeForReference(propType, node, checkMode);
|
|
var assumeUninitialized = false;
|
|
if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108) {
|
|
var declaration = prop && prop.valueDeclaration;
|
|
if (declaration && isPropertyWithoutInitializer(declaration)) {
|
|
if (!ts.isStatic(declaration)) {
|
|
var flowContainer = getControlFlowContainer(node);
|
|
if (flowContainer.kind === 171 && flowContainer.parent === declaration.parent && !(declaration.flags & 16777216)) {
|
|
assumeUninitialized = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (strictNullChecks && prop && prop.valueDeclaration &&
|
|
ts.isPropertyAccessExpression(prop.valueDeclaration) &&
|
|
ts.getAssignmentDeclarationPropertyAccessKind(prop.valueDeclaration) &&
|
|
getControlFlowContainer(node) === getControlFlowContainer(prop.valueDeclaration)) {
|
|
assumeUninitialized = true;
|
|
}
|
|
var flowType = getFlowTypeOfReference(node, propType, assumeUninitialized ? getOptionalType(propType) : propType);
|
|
if (assumeUninitialized && !containsUndefinedType(propType) && containsUndefinedType(flowType)) {
|
|
error(errorNode, 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 || ts.getSourceFileOfNode(node).isDeclarationFile) {
|
|
return;
|
|
}
|
|
var diagnosticMessage;
|
|
var declarationName = ts.idText(right);
|
|
if (isInPropertyInitializerOrClassStaticBlock(node)
|
|
&& !isOptionalPropertyDeclaration(valueDeclaration)
|
|
&& !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
|
|
&& !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
|
|
&& !(ts.isMethodDeclaration(valueDeclaration) && ts.getCombinedModifierFlags(valueDeclaration) & 32)
|
|
&& (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
|
|
diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
|
|
}
|
|
else if (valueDeclaration.kind === 257 &&
|
|
node.parent.kind !== 178 &&
|
|
!(valueDeclaration.flags & 16777216) &&
|
|
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
|
|
diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
|
|
}
|
|
if (diagnosticMessage) {
|
|
ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
|
|
}
|
|
}
|
|
function isInPropertyInitializerOrClassStaticBlock(node) {
|
|
return !!ts.findAncestor(node, function (node) {
|
|
switch (node.kind) {
|
|
case 167:
|
|
return true;
|
|
case 296:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 298:
|
|
case 162:
|
|
case 233:
|
|
case 288:
|
|
case 285:
|
|
case 286:
|
|
case 287:
|
|
case 280:
|
|
case 228:
|
|
case 291:
|
|
return false;
|
|
case 214:
|
|
case 238:
|
|
return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
|
|
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, isUncheckedJS) {
|
|
var errorInfo;
|
|
var relatedInfo;
|
|
if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 && !(containingType.flags & 131068)) {
|
|
for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
|
|
var subtype = _a[_i];
|
|
if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (typeHasStaticProperty(propNode.escapedText, containingType)) {
|
|
var propName = ts.declarationNameToString(propNode);
|
|
var typeName = typeToString(containingType);
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "." + propName);
|
|
}
|
|
else {
|
|
var promisedType = getPromisedTypeOfPromise(containingType);
|
|
if (promisedType && getPropertyOfType(promisedType, propNode.escapedText)) {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(containingType));
|
|
relatedInfo = ts.createDiagnosticForNode(propNode, ts.Diagnostics.Did_you_forget_to_use_await);
|
|
}
|
|
else {
|
|
var missingProperty = ts.declarationNameToString(propNode);
|
|
var container = typeToString(containingType);
|
|
var libSuggestion = getSuggestedLibForNonExistentProperty(missingProperty, containingType);
|
|
if (libSuggestion !== undefined) {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later, missingProperty, container, libSuggestion);
|
|
}
|
|
else {
|
|
var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
|
|
if (suggestion !== undefined) {
|
|
var suggestedName = ts.symbolName(suggestion);
|
|
var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
|
|
relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
|
|
}
|
|
else {
|
|
var diagnostic = containerSeemsToBeEmptyDomElement(containingType)
|
|
? ts.Diagnostics.Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom
|
|
: ts.Diagnostics.Property_0_does_not_exist_on_type_1;
|
|
errorInfo = ts.chainDiagnosticMessages(elaborateNeverIntersection(errorInfo, containingType), diagnostic, missingProperty, container);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var resultDiagnostic = ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo);
|
|
if (relatedInfo) {
|
|
ts.addRelatedInfo(resultDiagnostic, relatedInfo);
|
|
}
|
|
addErrorOrSuggestion(!isUncheckedJS || errorInfo.code !== ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code, resultDiagnostic);
|
|
}
|
|
function containerSeemsToBeEmptyDomElement(containingType) {
|
|
return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
|
|
everyContainedType(containingType, function (type) { return type.symbol && /^(EventTarget|Node|((HTML[a-zA-Z]*)?Element))$/.test(ts.unescapeLeadingUnderscores(type.symbol.escapedName)); }) &&
|
|
isEmptyObjectType(containingType);
|
|
}
|
|
function typeHasStaticProperty(propName, containingType) {
|
|
var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
|
|
return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
|
|
}
|
|
function getSuggestedLibForNonExistentName(name) {
|
|
var missingName = diagnosticName(name);
|
|
var allFeatures = ts.getScriptTargetFeatures();
|
|
var libTargets = ts.getOwnKeys(allFeatures);
|
|
for (var _i = 0, libTargets_1 = libTargets; _i < libTargets_1.length; _i++) {
|
|
var libTarget = libTargets_1[_i];
|
|
var containingTypes = ts.getOwnKeys(allFeatures[libTarget]);
|
|
if (containingTypes !== undefined && ts.contains(containingTypes, missingName)) {
|
|
return libTarget;
|
|
}
|
|
}
|
|
}
|
|
function getSuggestedLibForNonExistentProperty(missingProperty, containingType) {
|
|
var container = getApparentType(containingType).symbol;
|
|
if (!container) {
|
|
return undefined;
|
|
}
|
|
var allFeatures = ts.getScriptTargetFeatures();
|
|
var libTargets = ts.getOwnKeys(allFeatures);
|
|
for (var _i = 0, libTargets_2 = libTargets; _i < libTargets_2.length; _i++) {
|
|
var libTarget = libTargets_2[_i];
|
|
var featuresOfLib = allFeatures[libTarget];
|
|
var featuresOfContainingType = featuresOfLib[ts.symbolName(container)];
|
|
if (featuresOfContainingType !== undefined && ts.contains(featuresOfContainingType, missingProperty)) {
|
|
return libTarget;
|
|
}
|
|
}
|
|
}
|
|
function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
|
|
return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500);
|
|
}
|
|
function getSuggestedSymbolForNonexistentProperty(name, containingType) {
|
|
var props = getPropertiesOfType(containingType);
|
|
if (typeof name !== "string") {
|
|
var parent_3 = name.parent;
|
|
if (ts.isPropertyAccessExpression(parent_3)) {
|
|
props = ts.filter(props, function (prop) { return isValidPropertyAccessForCompletions(parent_3, containingType, prop); });
|
|
}
|
|
name = ts.idText(name);
|
|
}
|
|
return getSpellingSuggestionForName(name, props, 111551);
|
|
}
|
|
function getSuggestedSymbolForNonexistentJSXAttribute(name, containingType) {
|
|
var strName = ts.isString(name) ? name : ts.idText(name);
|
|
var properties = getPropertiesOfType(containingType);
|
|
var jsxSpecific = strName === "for" ? ts.find(properties, function (x) { return ts.symbolName(x) === "htmlFor"; })
|
|
: strName === "class" ? ts.find(properties, function (x) { return ts.symbolName(x) === "className"; })
|
|
: undefined;
|
|
return jsxSpecific !== null && jsxSpecific !== void 0 ? jsxSpecific : getSpellingSuggestionForName(strName, properties, 111551);
|
|
}
|
|
function getSuggestionForNonexistentProperty(name, containingType) {
|
|
var suggestion = getSuggestedSymbolForNonexistentProperty(name, containingType);
|
|
return suggestion && ts.symbolName(suggestion);
|
|
}
|
|
function getSuggestedSymbolForNonexistentSymbol(location, outerName, meaning) {
|
|
ts.Debug.assert(outerName !== undefined, "outername should always be defined");
|
|
var result = resolveNameHelper(location, outerName, meaning, undefined, outerName, false, false, true, function (symbols, name, meaning) {
|
|
ts.Debug.assertEqual(outerName, name, "name should equal outerName");
|
|
var symbol = getSymbol(symbols, name, meaning);
|
|
if (symbol)
|
|
return symbol;
|
|
var candidates;
|
|
if (symbols === globals) {
|
|
var primitives = ts.mapDefined(["string", "number", "boolean", "object", "bigint", "symbol"], function (s) { return symbols.has((s.charAt(0).toUpperCase() + s.slice(1)))
|
|
? createSymbol(524288, s)
|
|
: undefined; });
|
|
candidates = primitives.concat(ts.arrayFrom(symbols.values()));
|
|
}
|
|
else {
|
|
candidates = ts.arrayFrom(symbols.values());
|
|
}
|
|
return getSpellingSuggestionForName(ts.unescapeLeadingUnderscores(name), candidates, meaning);
|
|
});
|
|
return result;
|
|
}
|
|
function getSuggestionForNonexistentSymbol(location, outerName, meaning) {
|
|
var symbolResult = getSuggestedSymbolForNonexistentSymbol(location, outerName, meaning);
|
|
return symbolResult && ts.symbolName(symbolResult);
|
|
}
|
|
function getSuggestedSymbolForNonexistentModule(name, targetModule) {
|
|
return targetModule.exports && getSpellingSuggestionForName(ts.idText(name), getExportsOfModuleAsArray(targetModule), 2623475);
|
|
}
|
|
function getSuggestionForNonexistentExport(name, targetModule) {
|
|
var suggestion = getSuggestedSymbolForNonexistentModule(name, targetModule);
|
|
return suggestion && ts.symbolName(suggestion);
|
|
}
|
|
function getSuggestionForNonexistentIndexSignature(objectType, expr, keyedType) {
|
|
function hasProp(name) {
|
|
var prop = getPropertyOfObjectType(objectType, name);
|
|
if (prop) {
|
|
var s = getSingleCallSignature(getTypeOfSymbol(prop));
|
|
return !!s && getMinArgumentCount(s) >= 1 && isTypeAssignableTo(keyedType, getTypeAtPosition(s, 0));
|
|
}
|
|
return false;
|
|
}
|
|
;
|
|
var suggestedMethod = ts.isAssignmentTarget(expr) ? "set" : "get";
|
|
if (!hasProp(suggestedMethod)) {
|
|
return undefined;
|
|
}
|
|
var suggestion = ts.tryGetPropertyAccessOrIdentifierToString(expr.expression);
|
|
if (suggestion === undefined) {
|
|
suggestion = suggestedMethod;
|
|
}
|
|
else {
|
|
suggestion += "." + suggestedMethod;
|
|
}
|
|
return suggestion;
|
|
}
|
|
function getSuggestedTypeForNonexistentStringLiteralType(source, target) {
|
|
var candidates = target.types.filter(function (type) { return !!(type.flags & 128); });
|
|
return ts.getSpellingSuggestion(source.value, candidates, function (type) { return type.value; });
|
|
}
|
|
function getSpellingSuggestionForName(name, symbols, meaning) {
|
|
return ts.getSpellingSuggestion(name, symbols, getCandidateName);
|
|
function getCandidateName(candidate) {
|
|
var candidateName = ts.symbolName(candidate);
|
|
if (ts.startsWith(candidateName, "\"")) {
|
|
return undefined;
|
|
}
|
|
if (candidate.flags & meaning) {
|
|
return candidateName;
|
|
}
|
|
if (candidate.flags & 2097152) {
|
|
var alias = tryResolveAlias(candidate);
|
|
if (alias && alias.flags & meaning) {
|
|
return candidateName;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function markPropertyAsReferenced(prop, nodeForCheckWriteOnly, isSelfTypeAccess) {
|
|
var valueDeclaration = prop && (prop.flags & 106500) && prop.valueDeclaration;
|
|
if (!valueDeclaration) {
|
|
return;
|
|
}
|
|
var hasPrivateModifier = ts.hasEffectiveModifier(valueDeclaration, 8);
|
|
var hasPrivateIdentifier = prop.valueDeclaration && ts.isNamedDeclaration(prop.valueDeclaration) && ts.isPrivateIdentifier(prop.valueDeclaration.name);
|
|
if (!hasPrivateModifier && !hasPrivateIdentifier) {
|
|
return;
|
|
}
|
|
if (nodeForCheckWriteOnly && ts.isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & 65536)) {
|
|
return;
|
|
}
|
|
if (isSelfTypeAccess) {
|
|
var containingMethod = ts.findAncestor(nodeForCheckWriteOnly, ts.isFunctionLikeDeclaration);
|
|
if (containingMethod && containingMethod.symbol === prop) {
|
|
return;
|
|
}
|
|
}
|
|
(ts.getCheckFlags(prop) & 1 ? getSymbolLinks(prop).target : prop).isReferenced = 67108863;
|
|
}
|
|
function isSelfTypeAccess(name, parent) {
|
|
return name.kind === 108
|
|
|| !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
|
|
}
|
|
function isValidPropertyAccess(node, propertyName) {
|
|
switch (node.kind) {
|
|
case 206:
|
|
return isValidPropertyAccessWithType(node, node.expression.kind === 106, propertyName, getWidenedType(checkExpression(node.expression)));
|
|
case 161:
|
|
return isValidPropertyAccessWithType(node, false, propertyName, getWidenedType(checkExpression(node.left)));
|
|
case 200:
|
|
return isValidPropertyAccessWithType(node, false, propertyName, getTypeFromTypeNode(node));
|
|
}
|
|
}
|
|
function isValidPropertyAccessForCompletions(node, type, property) {
|
|
return isPropertyAccessible(node, node.kind === 206 && node.expression.kind === 106, false, type, property);
|
|
}
|
|
function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
|
|
if (isTypeAny(type)) {
|
|
return true;
|
|
}
|
|
var prop = getPropertyOfType(type, propertyName);
|
|
return !!prop && isPropertyAccessible(node, isSuper, false, type, prop);
|
|
}
|
|
function isPropertyAccessible(node, isSuper, isWrite, containingType, property) {
|
|
if (isTypeAny(containingType)) {
|
|
return true;
|
|
}
|
|
if (property.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(property.valueDeclaration)) {
|
|
var declClass_1 = ts.getContainingClass(property.valueDeclaration);
|
|
return !ts.isOptionalChain(node) && !!ts.findAncestor(node, function (parent) { return parent === declClass_1; });
|
|
}
|
|
return checkPropertyAccessibilityAtLocation(node, isSuper, isWrite, containingType, property);
|
|
}
|
|
function getForInVariableSymbol(node) {
|
|
var initializer = node.initializer;
|
|
if (initializer.kind === 255) {
|
|
var variable = initializer.declarations[0];
|
|
if (variable && !ts.isBindingPattern(variable.name)) {
|
|
return getSymbolOfNode(variable);
|
|
}
|
|
}
|
|
else if (initializer.kind === 79) {
|
|
return getResolvedSymbol(initializer);
|
|
}
|
|
return undefined;
|
|
}
|
|
function hasNumericPropertyNames(type) {
|
|
return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
|
|
}
|
|
function isForInVariableForNumericPropertyNames(expr) {
|
|
var e = ts.skipParentheses(expr);
|
|
if (e.kind === 79) {
|
|
var symbol = getResolvedSymbol(e);
|
|
if (symbol.flags & 3) {
|
|
var child = expr;
|
|
var node = expr.parent;
|
|
while (node) {
|
|
if (node.kind === 243 &&
|
|
child === node.statement &&
|
|
getForInVariableSymbol(node) === symbol &&
|
|
hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
|
|
return true;
|
|
}
|
|
child = node;
|
|
node = node.parent;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkIndexedAccess(node, checkMode) {
|
|
return node.flags & 32 ? checkElementAccessChain(node, checkMode) :
|
|
checkElementAccessExpression(node, checkNonNullExpression(node.expression), checkMode);
|
|
}
|
|
function checkElementAccessChain(node, checkMode) {
|
|
var exprType = checkExpression(node.expression);
|
|
var nonOptionalType = getOptionalExpressionType(exprType, node.expression);
|
|
return propagateOptionalTypeMarker(checkElementAccessExpression(node, checkNonNullType(nonOptionalType, node.expression), checkMode), node, nonOptionalType !== exprType);
|
|
}
|
|
function checkElementAccessExpression(node, exprType, checkMode) {
|
|
var objectType = ts.getAssignmentTargetKind(node) !== 0 || isMethodAccessForCall(node) ? getWidenedType(exprType) : exprType;
|
|
var indexExpression = node.argumentExpression;
|
|
var indexType = checkExpression(indexExpression);
|
|
if (isErrorType(objectType) || objectType === silentNeverType) {
|
|
return objectType;
|
|
}
|
|
if (isConstEnumObjectType(objectType) && !ts.isStringLiteralLike(indexExpression)) {
|
|
error(indexExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
|
|
return errorType;
|
|
}
|
|
var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
|
|
var accessFlags = ts.isAssignmentTarget(node) ?
|
|
4 | (isGenericObjectType(objectType) && !ts.isThisTypeParameter(objectType) ? 2 : 0) :
|
|
32;
|
|
var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
|
|
return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
|
|
}
|
|
function callLikeExpressionMayHaveTypeArguments(node) {
|
|
return ts.isCallOrNewExpression(node) || ts.isTaggedTemplateExpression(node) || ts.isJsxOpeningLikeElement(node);
|
|
}
|
|
function resolveUntypedCall(node) {
|
|
if (callLikeExpressionMayHaveTypeArguments(node)) {
|
|
ts.forEach(node.typeArguments, checkSourceElement);
|
|
}
|
|
if (node.kind === 210) {
|
|
checkExpression(node.template);
|
|
}
|
|
else if (ts.isJsxOpeningLikeElement(node)) {
|
|
checkExpression(node.attributes);
|
|
}
|
|
else if (node.kind !== 165) {
|
|
ts.forEach(node.arguments, function (argument) {
|
|
checkExpression(argument);
|
|
});
|
|
}
|
|
return anySignature;
|
|
}
|
|
function resolveErrorCall(node) {
|
|
resolveUntypedCall(node);
|
|
return unknownSignature;
|
|
}
|
|
function reorderCandidates(signatures, result, callChainFlags) {
|
|
var lastParent;
|
|
var lastSymbol;
|
|
var cutoffIndex = 0;
|
|
var index;
|
|
var specializedIndex = -1;
|
|
var spliceIndex;
|
|
ts.Debug.assert(!result.length);
|
|
for (var _i = 0, signatures_7 = signatures; _i < signatures_7.length; _i++) {
|
|
var signature = signatures_7[_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 (signatureHasLiteralTypes(signature)) {
|
|
specializedIndex++;
|
|
spliceIndex = specializedIndex;
|
|
cutoffIndex++;
|
|
}
|
|
else {
|
|
spliceIndex = index;
|
|
}
|
|
result.splice(spliceIndex, 0, callChainFlags ? getOptionalCallSignature(signature, callChainFlags) : signature);
|
|
}
|
|
}
|
|
function isSpreadArgument(arg) {
|
|
return !!arg && (arg.kind === 225 || arg.kind === 232 && arg.isSpread);
|
|
}
|
|
function getSpreadArgumentIndex(args) {
|
|
return ts.findIndex(args, isSpreadArgument);
|
|
}
|
|
function acceptsVoid(t) {
|
|
return !!(t.flags & 16384);
|
|
}
|
|
function acceptsVoidUndefinedUnknownOrAny(t) {
|
|
return !!(t.flags & (16384 | 32768 | 2 | 1));
|
|
}
|
|
function hasCorrectArity(node, args, signature, signatureHelpTrailingComma) {
|
|
if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; }
|
|
var argCount;
|
|
var callIsIncomplete = false;
|
|
var effectiveParameterCount = getParameterCount(signature);
|
|
var effectiveMinimumArguments = getMinArgumentCount(signature);
|
|
if (node.kind === 210) {
|
|
argCount = args.length;
|
|
if (node.template.kind === 223) {
|
|
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 === 14);
|
|
callIsIncomplete = !!templateLiteral.isUnterminated;
|
|
}
|
|
}
|
|
else if (node.kind === 165) {
|
|
argCount = getDecoratorArgumentCount(node, signature);
|
|
}
|
|
else if (ts.isJsxOpeningLikeElement(node)) {
|
|
callIsIncomplete = node.attributes.end === node.end;
|
|
if (callIsIncomplete) {
|
|
return true;
|
|
}
|
|
argCount = effectiveMinimumArguments === 0 ? args.length : 1;
|
|
effectiveParameterCount = args.length === 0 ? effectiveParameterCount : 1;
|
|
effectiveMinimumArguments = Math.min(effectiveMinimumArguments, 1);
|
|
}
|
|
else if (!node.arguments) {
|
|
ts.Debug.assert(node.kind === 209);
|
|
return getMinArgumentCount(signature) === 0;
|
|
}
|
|
else {
|
|
argCount = signatureHelpTrailingComma ? args.length + 1 : args.length;
|
|
callIsIncomplete = node.arguments.end === node.end;
|
|
var spreadArgIndex = getSpreadArgumentIndex(args);
|
|
if (spreadArgIndex >= 0) {
|
|
return spreadArgIndex >= getMinArgumentCount(signature) && (hasEffectiveRestParameter(signature) || spreadArgIndex < getParameterCount(signature));
|
|
}
|
|
}
|
|
if (!hasEffectiveRestParameter(signature) && argCount > effectiveParameterCount) {
|
|
return false;
|
|
}
|
|
if (callIsIncomplete || argCount >= effectiveMinimumArguments) {
|
|
return true;
|
|
}
|
|
for (var i = argCount; i < effectiveMinimumArguments; i++) {
|
|
var type = getTypeAtPosition(signature, i);
|
|
if (filterType(type, ts.isInJSFile(node) && !strictNullChecks ? acceptsVoidUndefinedUnknownOrAny : acceptsVoid).flags & 131072) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function hasCorrectTypeArgumentArity(signature, typeArguments) {
|
|
var numTypeParameters = ts.length(signature.typeParameters);
|
|
var minTypeArgumentCount = getMinTypeArgumentCount(signature.typeParameters);
|
|
return !ts.some(typeArguments) ||
|
|
(typeArguments.length >= minTypeArgumentCount && typeArguments.length <= numTypeParameters);
|
|
}
|
|
function getSingleCallSignature(type) {
|
|
return getSingleSignature(type, 0, false);
|
|
}
|
|
function getSingleCallOrConstructSignature(type) {
|
|
return getSingleSignature(type, 0, false) ||
|
|
getSingleSignature(type, 1, false);
|
|
}
|
|
function getSingleSignature(type, kind, allowMembers) {
|
|
if (type.flags & 524288) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
|
|
if (kind === 0 && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
|
|
return resolved.callSignatures[0];
|
|
}
|
|
if (kind === 1 && resolved.constructSignatures.length === 1 && resolved.callSignatures.length === 0) {
|
|
return resolved.constructSignatures[0];
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes) {
|
|
var context = createInferenceContext(signature.typeParameters, signature, 0, compareTypes);
|
|
var restType = getEffectiveRestType(contextualSignature);
|
|
var mapper = inferenceContext && (restType && restType.flags & 262144 ? inferenceContext.nonFixingMapper : inferenceContext.mapper);
|
|
var sourceSignature = mapper ? instantiateSignature(contextualSignature, mapper) : contextualSignature;
|
|
applyToParameterTypes(sourceSignature, signature, function (source, target) {
|
|
inferTypes(context.inferences, source, target);
|
|
});
|
|
if (!inferenceContext) {
|
|
applyToReturnTypes(contextualSignature, signature, function (source, target) {
|
|
inferTypes(context.inferences, source, target, 128);
|
|
});
|
|
}
|
|
return getSignatureInstantiation(signature, getInferredTypes(context), ts.isInJSFile(contextualSignature.declaration));
|
|
}
|
|
function inferJsxTypeArguments(node, signature, checkMode, context) {
|
|
var paramType = getEffectiveFirstArgumentForJsxSignature(signature, node);
|
|
var checkAttrType = checkExpressionWithContextualType(node.attributes, paramType, context, checkMode);
|
|
inferTypes(context.inferences, checkAttrType, paramType);
|
|
return getInferredTypes(context);
|
|
}
|
|
function getThisArgumentType(thisArgumentNode) {
|
|
if (!thisArgumentNode) {
|
|
return voidType;
|
|
}
|
|
var thisArgumentType = checkExpression(thisArgumentNode);
|
|
return ts.isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) :
|
|
ts.isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) :
|
|
thisArgumentType;
|
|
}
|
|
function inferTypeArguments(node, signature, args, checkMode, context) {
|
|
if (ts.isJsxOpeningLikeElement(node)) {
|
|
return inferJsxTypeArguments(node, signature, checkMode, context);
|
|
}
|
|
if (node.kind !== 165) {
|
|
var skipBindingPatterns = ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); });
|
|
var contextualType = getContextualType(node, skipBindingPatterns ? 8 : 0);
|
|
if (contextualType) {
|
|
var inferenceTargetType = getReturnTypeOfSignature(signature);
|
|
if (couldContainTypeVariables(inferenceTargetType)) {
|
|
var outerContext = getInferenceContext(node);
|
|
var isFromBindingPattern = !skipBindingPatterns && getContextualType(node, 8) !== contextualType;
|
|
if (!isFromBindingPattern) {
|
|
var outerMapper = getMapperFromContext(cloneInferenceContext(outerContext, 1));
|
|
var instantiatedType = instantiateType(contextualType, outerMapper);
|
|
var contextualSignature = getSingleCallSignature(instantiatedType);
|
|
var inferenceSourceType = contextualSignature && contextualSignature.typeParameters ?
|
|
getOrCreateTypeFromSignature(getSignatureInstantiationWithoutFillingInTypeArguments(contextualSignature, contextualSignature.typeParameters)) :
|
|
instantiatedType;
|
|
inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 128);
|
|
}
|
|
var returnContext = createInferenceContext(signature.typeParameters, signature, context.flags);
|
|
var returnSourceType = instantiateType(contextualType, outerContext && outerContext.returnMapper);
|
|
inferTypes(returnContext.inferences, returnSourceType, inferenceTargetType);
|
|
context.returnMapper = ts.some(returnContext.inferences, hasInferenceCandidates) ? getMapperFromContext(cloneInferredPartOfContext(returnContext)) : undefined;
|
|
}
|
|
}
|
|
}
|
|
var restType = getNonArrayRestType(signature);
|
|
var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
|
|
if (restType && restType.flags & 262144) {
|
|
var info = ts.find(context.inferences, function (info) { return info.typeParameter === restType; });
|
|
if (info) {
|
|
info.impliedArity = ts.findIndex(args, isSpreadArgument, argCount) < 0 ? args.length - argCount : undefined;
|
|
}
|
|
}
|
|
var thisType = getThisTypeOfSignature(signature);
|
|
if (thisType && couldContainTypeVariables(thisType)) {
|
|
var thisArgumentNode = getThisArgumentOfCall(node);
|
|
inferTypes(context.inferences, getThisArgumentType(thisArgumentNode), thisType);
|
|
}
|
|
for (var i = 0; i < argCount; i++) {
|
|
var arg = args[i];
|
|
if (arg.kind !== 227 && !(checkMode & 32 && hasSkipDirectInferenceFlag(arg))) {
|
|
var paramType = getTypeAtPosition(signature, i);
|
|
if (couldContainTypeVariables(paramType)) {
|
|
var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
|
|
inferTypes(context.inferences, argType, paramType);
|
|
}
|
|
}
|
|
}
|
|
if (restType && couldContainTypeVariables(restType)) {
|
|
var spreadType = getSpreadArgumentType(args, argCount, args.length, restType, context, checkMode);
|
|
inferTypes(context.inferences, spreadType, restType);
|
|
}
|
|
return getInferredTypes(context);
|
|
}
|
|
function getMutableArrayOrTupleType(type) {
|
|
return type.flags & 1048576 ? mapType(type, getMutableArrayOrTupleType) :
|
|
type.flags & 1 || isMutableArrayOrTuple(getBaseConstraintOfType(type) || type) ? type :
|
|
isTupleType(type) ? createTupleType(getTypeArguments(type), type.target.elementFlags, false, type.target.labeledElementDeclarations) :
|
|
createTupleType([type], [8]);
|
|
}
|
|
function getSpreadArgumentType(args, index, argCount, restType, context, checkMode) {
|
|
if (index >= argCount - 1) {
|
|
var arg = args[argCount - 1];
|
|
if (isSpreadArgument(arg)) {
|
|
return getMutableArrayOrTupleType(arg.kind === 232 ? arg.type :
|
|
checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
|
|
}
|
|
}
|
|
var types = [];
|
|
var flags = [];
|
|
var names = [];
|
|
for (var i = index; i < argCount; i++) {
|
|
var arg = args[i];
|
|
if (isSpreadArgument(arg)) {
|
|
var spreadType = arg.kind === 232 ? arg.type : checkExpression(arg.expression);
|
|
if (isArrayLikeType(spreadType)) {
|
|
types.push(spreadType);
|
|
flags.push(8);
|
|
}
|
|
else {
|
|
types.push(checkIteratedTypeOrElementType(33, spreadType, undefinedType, arg.kind === 225 ? arg.expression : arg));
|
|
flags.push(4);
|
|
}
|
|
}
|
|
else {
|
|
var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256);
|
|
var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
|
|
var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 | 4194304 | 134217728 | 268435456);
|
|
types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
|
|
flags.push(1);
|
|
}
|
|
if (arg.kind === 232 && arg.tupleNameSource) {
|
|
names.push(arg.tupleNameSource);
|
|
}
|
|
}
|
|
return createTupleType(types, flags, false, ts.length(names) === ts.length(types) ? names : undefined);
|
|
}
|
|
function checkTypeArguments(signature, typeArgumentNodes, reportErrors, headMessage) {
|
|
var isJavascript = ts.isInJSFile(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) {
|
|
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 undefined;
|
|
}
|
|
}
|
|
}
|
|
return typeArgumentTypes;
|
|
}
|
|
function getJsxReferenceKind(node) {
|
|
if (isJsxIntrinsicIdentifier(node.tagName)) {
|
|
return 2;
|
|
}
|
|
var tagType = getApparentType(checkExpression(node.tagName));
|
|
if (ts.length(getSignaturesOfType(tagType, 1))) {
|
|
return 0;
|
|
}
|
|
if (ts.length(getSignaturesOfType(tagType, 0))) {
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
function checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation, checkMode, reportErrors, containingMessageChain, errorOutputContainer) {
|
|
var paramType = getEffectiveFirstArgumentForJsxSignature(signature, node);
|
|
var attributesType = checkExpressionWithContextualType(node.attributes, paramType, undefined, checkMode);
|
|
return checkTagNameDoesNotExpectTooManyArguments() && checkTypeRelatedToAndOptionallyElaborate(attributesType, paramType, relation, reportErrors ? node.tagName : undefined, node.attributes, undefined, containingMessageChain, errorOutputContainer);
|
|
function checkTagNameDoesNotExpectTooManyArguments() {
|
|
var _a;
|
|
if (getJsxNamespaceContainerForImplicitImport(node)) {
|
|
return true;
|
|
}
|
|
var tagType = ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node) && !isJsxIntrinsicIdentifier(node.tagName) ? checkExpression(node.tagName) : undefined;
|
|
if (!tagType) {
|
|
return true;
|
|
}
|
|
var tagCallSignatures = getSignaturesOfType(tagType, 0);
|
|
if (!ts.length(tagCallSignatures)) {
|
|
return true;
|
|
}
|
|
var factory = getJsxFactoryEntity(node);
|
|
if (!factory) {
|
|
return true;
|
|
}
|
|
var factorySymbol = resolveEntityName(factory, 111551, true, false, node);
|
|
if (!factorySymbol) {
|
|
return true;
|
|
}
|
|
var factoryType = getTypeOfSymbol(factorySymbol);
|
|
var callSignatures = getSignaturesOfType(factoryType, 0);
|
|
if (!ts.length(callSignatures)) {
|
|
return true;
|
|
}
|
|
var hasFirstParamSignatures = false;
|
|
var maxParamCount = 0;
|
|
for (var _i = 0, callSignatures_1 = callSignatures; _i < callSignatures_1.length; _i++) {
|
|
var sig = callSignatures_1[_i];
|
|
var firstparam = getTypeAtPosition(sig, 0);
|
|
var signaturesOfParam = getSignaturesOfType(firstparam, 0);
|
|
if (!ts.length(signaturesOfParam))
|
|
continue;
|
|
for (var _b = 0, signaturesOfParam_1 = signaturesOfParam; _b < signaturesOfParam_1.length; _b++) {
|
|
var paramSig = signaturesOfParam_1[_b];
|
|
hasFirstParamSignatures = true;
|
|
if (hasEffectiveRestParameter(paramSig)) {
|
|
return true;
|
|
}
|
|
var paramCount = getParameterCount(paramSig);
|
|
if (paramCount > maxParamCount) {
|
|
maxParamCount = paramCount;
|
|
}
|
|
}
|
|
}
|
|
if (!hasFirstParamSignatures) {
|
|
return true;
|
|
}
|
|
var absoluteMinArgCount = Infinity;
|
|
for (var _c = 0, tagCallSignatures_1 = tagCallSignatures; _c < tagCallSignatures_1.length; _c++) {
|
|
var tagSig = tagCallSignatures_1[_c];
|
|
var tagRequiredArgCount = getMinArgumentCount(tagSig);
|
|
if (tagRequiredArgCount < absoluteMinArgCount) {
|
|
absoluteMinArgCount = tagRequiredArgCount;
|
|
}
|
|
}
|
|
if (absoluteMinArgCount <= maxParamCount) {
|
|
return true;
|
|
}
|
|
if (reportErrors) {
|
|
var diag = ts.createDiagnosticForNode(node.tagName, ts.Diagnostics.Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3, ts.entityNameToString(node.tagName), absoluteMinArgCount, ts.entityNameToString(factory), maxParamCount);
|
|
var tagNameDeclaration = (_a = getSymbolAtLocation(node.tagName)) === null || _a === void 0 ? void 0 : _a.valueDeclaration;
|
|
if (tagNameDeclaration) {
|
|
ts.addRelatedInfo(diag, ts.createDiagnosticForNode(tagNameDeclaration, ts.Diagnostics._0_is_declared_here, ts.entityNameToString(node.tagName)));
|
|
}
|
|
if (errorOutputContainer && errorOutputContainer.skipLogging) {
|
|
(errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
|
|
}
|
|
if (!errorOutputContainer.skipLogging) {
|
|
diagnostics.add(diag);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
function getSignatureApplicabilityError(node, args, signature, relation, checkMode, reportErrors, containingMessageChain) {
|
|
var errorOutputContainer = { errors: undefined, skipLogging: true };
|
|
if (ts.isJsxOpeningLikeElement(node)) {
|
|
if (!checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation, checkMode, reportErrors, containingMessageChain, errorOutputContainer)) {
|
|
ts.Debug.assert(!reportErrors || !!errorOutputContainer.errors, "jsx should have errors when reporting errors");
|
|
return errorOutputContainer.errors || ts.emptyArray;
|
|
}
|
|
return undefined;
|
|
}
|
|
var thisType = getThisTypeOfSignature(signature);
|
|
if (thisType && thisType !== voidType && node.kind !== 209) {
|
|
var thisArgumentNode = getThisArgumentOfCall(node);
|
|
var thisArgumentType = getThisArgumentType(thisArgumentNode);
|
|
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, containingMessageChain, errorOutputContainer)) {
|
|
ts.Debug.assert(!reportErrors || !!errorOutputContainer.errors, "this parameter should have errors when reporting errors");
|
|
return errorOutputContainer.errors || ts.emptyArray;
|
|
}
|
|
}
|
|
var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1;
|
|
var restType = getNonArrayRestType(signature);
|
|
var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
|
|
for (var i = 0; i < argCount; i++) {
|
|
var arg = args[i];
|
|
if (arg.kind !== 227) {
|
|
var paramType = getTypeAtPosition(signature, i);
|
|
var argType = checkExpressionWithContextualType(arg, paramType, undefined, checkMode);
|
|
var checkArgType = checkMode & 4 ? getRegularTypeOfObjectLiteral(argType) : argType;
|
|
if (!checkTypeRelatedToAndOptionallyElaborate(checkArgType, paramType, relation, reportErrors ? arg : undefined, arg, headMessage, containingMessageChain, errorOutputContainer)) {
|
|
ts.Debug.assert(!reportErrors || !!errorOutputContainer.errors, "parameter should have errors when reporting errors");
|
|
maybeAddMissingAwaitInfo(arg, checkArgType, paramType);
|
|
return errorOutputContainer.errors || ts.emptyArray;
|
|
}
|
|
}
|
|
}
|
|
if (restType) {
|
|
var spreadType = getSpreadArgumentType(args, argCount, args.length, restType, undefined, checkMode);
|
|
var restArgCount = args.length - argCount;
|
|
var errorNode = !reportErrors ? undefined :
|
|
restArgCount === 0 ? node :
|
|
restArgCount === 1 ? args[argCount] :
|
|
ts.setTextRangePosEnd(createSyntheticExpression(node, spreadType), args[argCount].pos, args[args.length - 1].end);
|
|
if (!checkTypeRelatedTo(spreadType, restType, relation, errorNode, headMessage, undefined, errorOutputContainer)) {
|
|
ts.Debug.assert(!reportErrors || !!errorOutputContainer.errors, "rest parameter should have errors when reporting errors");
|
|
maybeAddMissingAwaitInfo(errorNode, spreadType, restType);
|
|
return errorOutputContainer.errors || ts.emptyArray;
|
|
}
|
|
}
|
|
return undefined;
|
|
function maybeAddMissingAwaitInfo(errorNode, source, target) {
|
|
if (errorNode && reportErrors && errorOutputContainer.errors && errorOutputContainer.errors.length) {
|
|
if (getAwaitedTypeOfPromise(target)) {
|
|
return;
|
|
}
|
|
var awaitedTypeOfSource = getAwaitedTypeOfPromise(source);
|
|
if (awaitedTypeOfSource && isTypeRelatedTo(awaitedTypeOfSource, target, relation)) {
|
|
ts.addRelatedInfo(errorOutputContainer.errors[0], ts.createDiagnosticForNode(errorNode, ts.Diagnostics.Did_you_forget_to_use_await));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getThisArgumentOfCall(node) {
|
|
var expression = node.kind === 208 ? node.expression :
|
|
node.kind === 210 ? node.tag : undefined;
|
|
if (expression) {
|
|
var callee = ts.skipOuterExpressions(expression);
|
|
if (ts.isAccessExpression(callee)) {
|
|
return callee.expression;
|
|
}
|
|
}
|
|
}
|
|
function createSyntheticExpression(parent, type, isSpread, tupleNameSource) {
|
|
var result = ts.parseNodeFactory.createSyntheticExpression(type, isSpread, tupleNameSource);
|
|
ts.setTextRange(result, parent);
|
|
ts.setParent(result, parent);
|
|
return result;
|
|
}
|
|
function getEffectiveCallArguments(node) {
|
|
if (node.kind === 210) {
|
|
var template = node.template;
|
|
var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
|
|
if (template.kind === 223) {
|
|
ts.forEach(template.templateSpans, function (span) {
|
|
args_3.push(span.expression);
|
|
});
|
|
}
|
|
return args_3;
|
|
}
|
|
if (node.kind === 165) {
|
|
return getEffectiveDecoratorArguments(node);
|
|
}
|
|
if (ts.isJsxOpeningLikeElement(node)) {
|
|
return node.attributes.properties.length > 0 || (ts.isJsxOpeningElement(node) && node.parent.children.length > 0) ? [node.attributes] : ts.emptyArray;
|
|
}
|
|
var args = node.arguments || ts.emptyArray;
|
|
var spreadIndex = getSpreadArgumentIndex(args);
|
|
if (spreadIndex >= 0) {
|
|
var effectiveArgs_1 = args.slice(0, spreadIndex);
|
|
var _loop_26 = function (i) {
|
|
var arg = args[i];
|
|
var spreadType = arg.kind === 225 && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
|
|
if (spreadType && isTupleType(spreadType)) {
|
|
ts.forEach(getTypeArguments(spreadType), function (t, i) {
|
|
var _a;
|
|
var flags = spreadType.target.elementFlags[i];
|
|
var syntheticArg = createSyntheticExpression(arg, flags & 4 ? createArrayType(t) : t, !!(flags & 12), (_a = spreadType.target.labeledElementDeclarations) === null || _a === void 0 ? void 0 : _a[i]);
|
|
effectiveArgs_1.push(syntheticArg);
|
|
});
|
|
}
|
|
else {
|
|
effectiveArgs_1.push(arg);
|
|
}
|
|
};
|
|
for (var i = spreadIndex; i < args.length; i++) {
|
|
_loop_26(i);
|
|
}
|
|
return effectiveArgs_1;
|
|
}
|
|
return args;
|
|
}
|
|
function getEffectiveDecoratorArguments(node) {
|
|
var parent = node.parent;
|
|
var expr = node.expression;
|
|
switch (parent.kind) {
|
|
case 257:
|
|
case 226:
|
|
return [
|
|
createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
|
|
];
|
|
case 164:
|
|
var func = parent.parent;
|
|
return [
|
|
createSyntheticExpression(expr, parent.parent.kind === 171 ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
|
|
createSyntheticExpression(expr, anyType),
|
|
createSyntheticExpression(expr, numberType)
|
|
];
|
|
case 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
var hasPropDesc = parent.kind !== 167 && languageVersion !== 0;
|
|
return [
|
|
createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
|
|
createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
|
|
createSyntheticExpression(expr, hasPropDesc ? createTypedPropertyDescriptorType(getTypeOfNode(parent)) : anyType)
|
|
];
|
|
}
|
|
return ts.Debug.fail();
|
|
}
|
|
function getDecoratorArgumentCount(node, signature) {
|
|
switch (node.parent.kind) {
|
|
case 257:
|
|
case 226:
|
|
return 1;
|
|
case 167:
|
|
return 2;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return languageVersion === 0 || signature.parameters.length <= 2 ? 2 : 3;
|
|
case 164:
|
|
return 3;
|
|
default:
|
|
return ts.Debug.fail();
|
|
}
|
|
}
|
|
function getDiagnosticSpanForCallNode(node, doNotIncludeArguments) {
|
|
var start;
|
|
var length;
|
|
var sourceFile = ts.getSourceFileOfNode(node);
|
|
if (ts.isPropertyAccessExpression(node.expression)) {
|
|
var nameSpan = ts.getErrorSpanForNode(sourceFile, node.expression.name);
|
|
start = nameSpan.start;
|
|
length = doNotIncludeArguments ? nameSpan.length : node.end - start;
|
|
}
|
|
else {
|
|
var expressionSpan = ts.getErrorSpanForNode(sourceFile, node.expression);
|
|
start = expressionSpan.start;
|
|
length = doNotIncludeArguments ? expressionSpan.length : node.end - start;
|
|
}
|
|
return { start: start, length: length, sourceFile: sourceFile };
|
|
}
|
|
function getDiagnosticForCallNode(node, message, arg0, arg1, arg2, arg3) {
|
|
if (ts.isCallExpression(node)) {
|
|
var _a = getDiagnosticSpanForCallNode(node), sourceFile = _a.sourceFile, start = _a.start, length_6 = _a.length;
|
|
return ts.createFileDiagnostic(sourceFile, start, length_6, message, arg0, arg1, arg2, arg3);
|
|
}
|
|
else {
|
|
return ts.createDiagnosticForNode(node, message, arg0, arg1, arg2, arg3);
|
|
}
|
|
}
|
|
function isPromiseResolveArityError(node) {
|
|
if (!ts.isCallExpression(node) || !ts.isIdentifier(node.expression))
|
|
return false;
|
|
var symbol = resolveName(node.expression, node.expression.escapedText, 111551, undefined, undefined, false);
|
|
var decl = symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration;
|
|
if (!decl || !ts.isParameter(decl) || !ts.isFunctionExpressionOrArrowFunction(decl.parent) || !ts.isNewExpression(decl.parent.parent) || !ts.isIdentifier(decl.parent.parent.expression)) {
|
|
return false;
|
|
}
|
|
var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false);
|
|
if (!globalPromiseSymbol)
|
|
return false;
|
|
var constructorSymbol = getSymbolAtLocation(decl.parent.parent.expression, true);
|
|
return constructorSymbol === globalPromiseSymbol;
|
|
}
|
|
function getArgumentArityError(node, signatures, args) {
|
|
var _a;
|
|
var spreadIndex = getSpreadArgumentIndex(args);
|
|
if (spreadIndex > -1) {
|
|
return ts.createDiagnosticForNode(args[spreadIndex], ts.Diagnostics.A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter);
|
|
}
|
|
var min = Number.POSITIVE_INFINITY;
|
|
var max = Number.NEGATIVE_INFINITY;
|
|
var maxBelow = Number.NEGATIVE_INFINITY;
|
|
var minAbove = Number.POSITIVE_INFINITY;
|
|
var closestSignature;
|
|
for (var _i = 0, signatures_8 = signatures; _i < signatures_8.length; _i++) {
|
|
var sig = signatures_8[_i];
|
|
var minParameter = getMinArgumentCount(sig);
|
|
var maxParameter = getParameterCount(sig);
|
|
if (minParameter < min) {
|
|
min = minParameter;
|
|
closestSignature = sig;
|
|
}
|
|
max = Math.max(max, maxParameter);
|
|
if (minParameter < args.length && minParameter > maxBelow)
|
|
maxBelow = minParameter;
|
|
if (args.length < maxParameter && maxParameter < minAbove)
|
|
minAbove = maxParameter;
|
|
}
|
|
var hasRestParameter = ts.some(signatures, hasEffectiveRestParameter);
|
|
var parameterRange = hasRestParameter ? min
|
|
: min < max ? min + "-" + max
|
|
: min;
|
|
var isVoidPromiseError = !hasRestParameter && parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node);
|
|
if (isVoidPromiseError && ts.isInJSFile(node)) {
|
|
return getDiagnosticForCallNode(node, ts.Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments);
|
|
}
|
|
var error = hasRestParameter
|
|
? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1
|
|
: isVoidPromiseError
|
|
? ts.Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise
|
|
: ts.Diagnostics.Expected_0_arguments_but_got_1;
|
|
if (min < args.length && args.length < max) {
|
|
return getDiagnosticForCallNode(node, ts.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, args.length, maxBelow, minAbove);
|
|
}
|
|
else if (args.length < min) {
|
|
var diagnostic = getDiagnosticForCallNode(node, error, parameterRange, args.length);
|
|
var parameter = (_a = closestSignature === null || closestSignature === void 0 ? void 0 : closestSignature.declaration) === null || _a === void 0 ? void 0 : _a.parameters[closestSignature.thisParameter ? args.length + 1 : args.length];
|
|
if (parameter) {
|
|
var parameterError = ts.createDiagnosticForNode(parameter, ts.isBindingPattern(parameter.name) ? ts.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided
|
|
: ts.isRestParameter(parameter) ? ts.Diagnostics.Arguments_for_the_rest_parameter_0_were_not_provided
|
|
: ts.Diagnostics.An_argument_for_0_was_not_provided, !parameter.name ? args.length : !ts.isBindingPattern(parameter.name) ? ts.idText(ts.getFirstIdentifier(parameter.name)) : undefined);
|
|
return ts.addRelatedInfo(diagnostic, parameterError);
|
|
}
|
|
return diagnostic;
|
|
}
|
|
else {
|
|
var errorSpan = ts.factory.createNodeArray(args.slice(max));
|
|
var pos = ts.first(errorSpan).pos;
|
|
var end = ts.last(errorSpan).end;
|
|
if (end === pos) {
|
|
end++;
|
|
}
|
|
ts.setTextRangePosEnd(errorSpan, pos, end);
|
|
return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), errorSpan, error, parameterRange, args.length);
|
|
}
|
|
}
|
|
function getTypeArgumentArityError(node, signatures, typeArguments) {
|
|
var argCount = typeArguments.length;
|
|
if (signatures.length === 1) {
|
|
var sig = signatures[0];
|
|
var min_1 = getMinTypeArgumentCount(sig.typeParameters);
|
|
var max = ts.length(sig.typeParameters);
|
|
return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, min_1 < max ? min_1 + "-" + max : min_1, argCount);
|
|
}
|
|
var belowArgCount = -Infinity;
|
|
var aboveArgCount = Infinity;
|
|
for (var _i = 0, signatures_9 = signatures; _i < signatures_9.length; _i++) {
|
|
var sig = signatures_9[_i];
|
|
var min_2 = getMinTypeArgumentCount(sig.typeParameters);
|
|
var max = ts.length(sig.typeParameters);
|
|
if (min_2 > argCount) {
|
|
aboveArgCount = Math.min(aboveArgCount, min_2);
|
|
}
|
|
else if (max < argCount) {
|
|
belowArgCount = Math.max(belowArgCount, max);
|
|
}
|
|
}
|
|
if (belowArgCount !== -Infinity && aboveArgCount !== Infinity) {
|
|
return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments, argCount, belowArgCount, aboveArgCount);
|
|
}
|
|
return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
|
|
}
|
|
function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
|
|
var isTaggedTemplate = node.kind === 210;
|
|
var isDecorator = node.kind === 165;
|
|
var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
|
|
var reportErrors = !candidatesOutArray;
|
|
var typeArguments;
|
|
if (!isDecorator && !ts.isSuperCall(node)) {
|
|
typeArguments = node.typeArguments;
|
|
if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106) {
|
|
ts.forEach(typeArguments, checkSourceElement);
|
|
}
|
|
}
|
|
var candidates = candidatesOutArray || [];
|
|
reorderCandidates(signatures, candidates, callChainFlags);
|
|
if (!candidates.length) {
|
|
if (reportErrors) {
|
|
diagnostics.add(getDiagnosticForCallNode(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 argCheckMode = !isDecorator && !isSingleNonGenericCandidate && ts.some(args, isContextSensitive) ? 4 : 0;
|
|
argCheckMode |= checkMode & 32;
|
|
var candidatesForArgumentError;
|
|
var candidateForArgumentArityError;
|
|
var candidateForTypeArgumentError;
|
|
var result;
|
|
var signatureHelpTrailingComma = !!(checkMode & 16) && node.kind === 208 && node.arguments.hasTrailingComma;
|
|
if (candidates.length > 1) {
|
|
result = chooseOverload(candidates, subtypeRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma);
|
|
}
|
|
if (!result) {
|
|
result = chooseOverload(candidates, assignableRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma);
|
|
}
|
|
if (result) {
|
|
return result;
|
|
}
|
|
result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode);
|
|
getNodeLinks(node).resolvedSignature = result;
|
|
if (reportErrors) {
|
|
if (candidatesForArgumentError) {
|
|
if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) {
|
|
var last_2 = candidatesForArgumentError[candidatesForArgumentError.length - 1];
|
|
var chain_1;
|
|
if (candidatesForArgumentError.length > 3) {
|
|
chain_1 = ts.chainDiagnosticMessages(chain_1, ts.Diagnostics.The_last_overload_gave_the_following_error);
|
|
chain_1 = ts.chainDiagnosticMessages(chain_1, ts.Diagnostics.No_overload_matches_this_call);
|
|
}
|
|
var diags = getSignatureApplicabilityError(node, args, last_2, assignableRelation, 0, true, function () { return chain_1; });
|
|
if (diags) {
|
|
for (var _i = 0, diags_1 = diags; _i < diags_1.length; _i++) {
|
|
var d = diags_1[_i];
|
|
if (last_2.declaration && candidatesForArgumentError.length > 3) {
|
|
ts.addRelatedInfo(d, ts.createDiagnosticForNode(last_2.declaration, ts.Diagnostics.The_last_overload_is_declared_here));
|
|
}
|
|
addImplementationSuccessElaboration(last_2, d);
|
|
diagnostics.add(d);
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.fail("No error for last overload signature");
|
|
}
|
|
}
|
|
else {
|
|
var allDiagnostics = [];
|
|
var max = 0;
|
|
var min_3 = Number.MAX_VALUE;
|
|
var minIndex = 0;
|
|
var i_1 = 0;
|
|
var _loop_27 = function (c) {
|
|
var chain_2 = function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
|
|
var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0, true, chain_2);
|
|
if (diags_2) {
|
|
if (diags_2.length <= min_3) {
|
|
min_3 = diags_2.length;
|
|
minIndex = i_1;
|
|
}
|
|
max = Math.max(max, diags_2.length);
|
|
allDiagnostics.push(diags_2);
|
|
}
|
|
else {
|
|
ts.Debug.fail("No error for 3 or fewer overload signatures");
|
|
}
|
|
i_1++;
|
|
};
|
|
for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
|
|
var c = candidatesForArgumentError_1[_a];
|
|
_loop_27(c);
|
|
}
|
|
var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
|
|
ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
|
|
var chain = ts.chainDiagnosticMessages(ts.map(diags_3, ts.createDiagnosticMessageChainFromDiagnostic), ts.Diagnostics.No_overload_matches_this_call);
|
|
var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
|
|
var diag = void 0;
|
|
if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
|
|
var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
|
|
diag = { file: file, start: start, length: length_7, code: chain.code, category: chain.category, messageText: chain, relatedInformation: related };
|
|
}
|
|
else {
|
|
diag = ts.createDiagnosticForNodeFromMessageChain(node, chain, related);
|
|
}
|
|
addImplementationSuccessElaboration(candidatesForArgumentError[0], diag);
|
|
diagnostics.add(diag);
|
|
}
|
|
}
|
|
else if (candidateForArgumentArityError) {
|
|
diagnostics.add(getArgumentArityError(node, [candidateForArgumentArityError], args));
|
|
}
|
|
else if (candidateForTypeArgumentError) {
|
|
checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, true, fallbackError);
|
|
}
|
|
else {
|
|
var signaturesWithCorrectTypeArgumentArity = ts.filter(signatures, function (s) { return hasCorrectTypeArgumentArity(s, typeArguments); });
|
|
if (signaturesWithCorrectTypeArgumentArity.length === 0) {
|
|
diagnostics.add(getTypeArgumentArityError(node, signatures, typeArguments));
|
|
}
|
|
else if (!isDecorator) {
|
|
diagnostics.add(getArgumentArityError(node, signaturesWithCorrectTypeArgumentArity, args));
|
|
}
|
|
else if (fallbackError) {
|
|
diagnostics.add(getDiagnosticForCallNode(node, fallbackError));
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
function addImplementationSuccessElaboration(failed, diagnostic) {
|
|
var _a, _b;
|
|
var oldCandidatesForArgumentError = candidatesForArgumentError;
|
|
var oldCandidateForArgumentArityError = candidateForArgumentArityError;
|
|
var oldCandidateForTypeArgumentError = candidateForTypeArgumentError;
|
|
var failedSignatureDeclarations = ((_b = (_a = failed.declaration) === null || _a === void 0 ? void 0 : _a.symbol) === null || _b === void 0 ? void 0 : _b.declarations) || ts.emptyArray;
|
|
var isOverload = failedSignatureDeclarations.length > 1;
|
|
var implDecl = isOverload ? ts.find(failedSignatureDeclarations, function (d) { return ts.isFunctionLikeDeclaration(d) && ts.nodeIsPresent(d.body); }) : undefined;
|
|
if (implDecl) {
|
|
var candidate = getSignatureFromDeclaration(implDecl);
|
|
var isSingleNonGenericCandidate_1 = !candidate.typeParameters;
|
|
if (chooseOverload([candidate], assignableRelation, isSingleNonGenericCandidate_1)) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(implDecl, ts.Diagnostics.The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible));
|
|
}
|
|
}
|
|
candidatesForArgumentError = oldCandidatesForArgumentError;
|
|
candidateForArgumentArityError = oldCandidateForArgumentArityError;
|
|
candidateForTypeArgumentError = oldCandidateForTypeArgumentError;
|
|
}
|
|
function chooseOverload(candidates, relation, isSingleNonGenericCandidate, signatureHelpTrailingComma) {
|
|
if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; }
|
|
candidatesForArgumentError = undefined;
|
|
candidateForArgumentArityError = undefined;
|
|
candidateForTypeArgumentError = undefined;
|
|
if (isSingleNonGenericCandidate) {
|
|
var candidate = candidates[0];
|
|
if (ts.some(typeArguments) || !hasCorrectArity(node, args, candidate, signatureHelpTrailingComma)) {
|
|
return undefined;
|
|
}
|
|
if (getSignatureApplicabilityError(node, args, candidate, relation, 0, false, undefined)) {
|
|
candidatesForArgumentError = [candidate];
|
|
return undefined;
|
|
}
|
|
return candidate;
|
|
}
|
|
for (var candidateIndex = 0; candidateIndex < candidates.length; candidateIndex++) {
|
|
var candidate = candidates[candidateIndex];
|
|
if (!hasCorrectTypeArgumentArity(candidate, typeArguments) || !hasCorrectArity(node, args, candidate, signatureHelpTrailingComma)) {
|
|
continue;
|
|
}
|
|
var checkCandidate = void 0;
|
|
var inferenceContext = void 0;
|
|
if (candidate.typeParameters) {
|
|
var typeArgumentTypes = void 0;
|
|
if (ts.some(typeArguments)) {
|
|
typeArgumentTypes = checkTypeArguments(candidate, typeArguments, false);
|
|
if (!typeArgumentTypes) {
|
|
candidateForTypeArgumentError = candidate;
|
|
continue;
|
|
}
|
|
}
|
|
else {
|
|
inferenceContext = createInferenceContext(candidate.typeParameters, candidate, ts.isInJSFile(node) ? 2 : 0);
|
|
typeArgumentTypes = inferTypeArguments(node, candidate, args, argCheckMode | 8, inferenceContext);
|
|
argCheckMode |= inferenceContext.flags & 4 ? 8 : 0;
|
|
}
|
|
checkCandidate = getSignatureInstantiation(candidate, typeArgumentTypes, ts.isInJSFile(candidate.declaration), inferenceContext && inferenceContext.inferredTypeParameters);
|
|
if (getNonArrayRestType(candidate) && !hasCorrectArity(node, args, checkCandidate, signatureHelpTrailingComma)) {
|
|
candidateForArgumentArityError = checkCandidate;
|
|
continue;
|
|
}
|
|
}
|
|
else {
|
|
checkCandidate = candidate;
|
|
}
|
|
if (getSignatureApplicabilityError(node, args, checkCandidate, relation, argCheckMode, false, undefined)) {
|
|
(candidatesForArgumentError || (candidatesForArgumentError = [])).push(checkCandidate);
|
|
continue;
|
|
}
|
|
if (argCheckMode) {
|
|
argCheckMode = checkMode & 32;
|
|
if (inferenceContext) {
|
|
var typeArgumentTypes = inferTypeArguments(node, candidate, args, argCheckMode, inferenceContext);
|
|
checkCandidate = getSignatureInstantiation(candidate, typeArgumentTypes, ts.isInJSFile(candidate.declaration), inferenceContext.inferredTypeParameters);
|
|
if (getNonArrayRestType(candidate) && !hasCorrectArity(node, args, checkCandidate, signatureHelpTrailingComma)) {
|
|
candidateForArgumentArityError = checkCandidate;
|
|
continue;
|
|
}
|
|
}
|
|
if (getSignatureApplicabilityError(node, args, checkCandidate, relation, argCheckMode, false, undefined)) {
|
|
(candidatesForArgumentError || (candidatesForArgumentError = [])).push(checkCandidate);
|
|
continue;
|
|
}
|
|
}
|
|
candidates[candidateIndex] = checkCandidate;
|
|
return checkCandidate;
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function getCandidateForOverloadFailure(node, candidates, args, hasCandidatesOutArray, checkMode) {
|
|
ts.Debug.assert(candidates.length > 0);
|
|
checkNodeDeferred(node);
|
|
return hasCandidatesOutArray || candidates.length === 1 || candidates.some(function (c) { return !!c.typeParameters; })
|
|
? pickLongestCandidateSignature(node, candidates, args, checkMode)
|
|
: createUnionOfSignaturesForOverloadFailure(candidates);
|
|
}
|
|
function createUnionOfSignaturesForOverloadFailure(candidates) {
|
|
var thisParameters = ts.mapDefined(candidates, function (c) { return c.thisParameter; });
|
|
var thisParameter;
|
|
if (thisParameters.length) {
|
|
thisParameter = createCombinedSymbolFromTypes(thisParameters, thisParameters.map(getTypeOfParameter));
|
|
}
|
|
var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
|
|
var parameters = [];
|
|
var _loop_28 = function (i) {
|
|
var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
|
|
i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
|
|
i < s.parameters.length ? s.parameters[i] : undefined; });
|
|
ts.Debug.assert(symbols.length !== 0);
|
|
parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
|
|
};
|
|
for (var i = 0; i < maxNonRestParam; i++) {
|
|
_loop_28(i);
|
|
}
|
|
var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
|
|
var flags = 0;
|
|
if (restParameterSymbols.length !== 0) {
|
|
var type = createArrayType(getUnionType(ts.mapDefined(candidates, tryGetRestTypeOfSignature), 2));
|
|
parameters.push(createCombinedSymbolForOverloadFailure(restParameterSymbols, type));
|
|
flags |= 1;
|
|
}
|
|
if (candidates.some(signatureHasLiteralTypes)) {
|
|
flags |= 2;
|
|
}
|
|
return createSignature(candidates[0].declaration, undefined, thisParameter, parameters, getIntersectionType(candidates.map(getReturnTypeOfSignature)), undefined, minArgumentCount, flags);
|
|
}
|
|
function getNumNonRestParameters(signature) {
|
|
var numParams = signature.parameters.length;
|
|
return signatureHasRestParameter(signature) ? numParams - 1 : numParams;
|
|
}
|
|
function createCombinedSymbolFromTypes(sources, types) {
|
|
return createCombinedSymbolForOverloadFailure(sources, getUnionType(types, 2));
|
|
}
|
|
function createCombinedSymbolForOverloadFailure(sources, type) {
|
|
return createSymbolWithType(ts.first(sources), type);
|
|
}
|
|
function pickLongestCandidateSignature(node, candidates, args, checkMode) {
|
|
var bestIndex = getLongestCandidateIndex(candidates, apparentArgumentCount === undefined ? args.length : apparentArgumentCount);
|
|
var candidate = candidates[bestIndex];
|
|
var typeParameters = candidate.typeParameters;
|
|
if (!typeParameters) {
|
|
return candidate;
|
|
}
|
|
var typeArgumentNodes = callLikeExpressionMayHaveTypeArguments(node) ? node.typeArguments : undefined;
|
|
var instantiated = typeArgumentNodes
|
|
? createSignatureInstantiation(candidate, getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, ts.isInJSFile(node)))
|
|
: inferSignatureInstantiationForOverloadFailure(node, typeParameters, candidate, args, checkMode);
|
|
candidates[bestIndex] = instantiated;
|
|
return instantiated;
|
|
}
|
|
function getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, isJs) {
|
|
var typeArguments = typeArgumentNodes.map(getTypeOfNode);
|
|
while (typeArguments.length > typeParameters.length) {
|
|
typeArguments.pop();
|
|
}
|
|
while (typeArguments.length < typeParameters.length) {
|
|
typeArguments.push(getDefaultFromTypeParameter(typeParameters[typeArguments.length]) || getConstraintOfTypeParameter(typeParameters[typeArguments.length]) || getDefaultTypeArgumentType(isJs));
|
|
}
|
|
return typeArguments;
|
|
}
|
|
function inferSignatureInstantiationForOverloadFailure(node, typeParameters, candidate, args, checkMode) {
|
|
var inferenceContext = createInferenceContext(typeParameters, candidate, ts.isInJSFile(node) ? 2 : 0);
|
|
var typeArgumentTypes = inferTypeArguments(node, candidate, args, checkMode | 4 | 8, inferenceContext);
|
|
return createSignatureInstantiation(candidate, typeArgumentTypes);
|
|
}
|
|
function getLongestCandidateIndex(candidates, argsCount) {
|
|
var maxParamsIndex = -1;
|
|
var maxParams = -1;
|
|
for (var i = 0; i < candidates.length; i++) {
|
|
var candidate = candidates[i];
|
|
var paramCount = getParameterCount(candidate);
|
|
if (hasEffectiveRestParameter(candidate) || paramCount >= argsCount) {
|
|
return i;
|
|
}
|
|
if (paramCount > maxParams) {
|
|
maxParams = paramCount;
|
|
maxParamsIndex = i;
|
|
}
|
|
}
|
|
return maxParamsIndex;
|
|
}
|
|
function resolveCallExpression(node, candidatesOutArray, checkMode) {
|
|
if (node.expression.kind === 106) {
|
|
var superType = checkSuperExpression(node.expression);
|
|
if (isTypeAny(superType)) {
|
|
for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
|
|
var arg = _a[_i];
|
|
checkExpression(arg);
|
|
}
|
|
return anySignature;
|
|
}
|
|
if (!isErrorType(superType)) {
|
|
var baseTypeNode = ts.getEffectiveBaseTypeNode(ts.getContainingClass(node));
|
|
if (baseTypeNode) {
|
|
var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments, baseTypeNode);
|
|
return resolveCall(node, baseConstructors, candidatesOutArray, checkMode, 0);
|
|
}
|
|
}
|
|
return resolveUntypedCall(node);
|
|
}
|
|
var callChainFlags;
|
|
var funcType = checkExpression(node.expression);
|
|
if (ts.isCallChain(node)) {
|
|
var nonOptionalType = getOptionalExpressionType(funcType, node.expression);
|
|
callChainFlags = nonOptionalType === funcType ? 0 :
|
|
ts.isOutermostOptionalChain(node) ? 16 :
|
|
8;
|
|
funcType = nonOptionalType;
|
|
}
|
|
else {
|
|
callChainFlags = 0;
|
|
}
|
|
funcType = checkNonNullTypeWithReporter(funcType, node.expression, reportCannotInvokePossiblyNullOrUndefinedError);
|
|
if (funcType === silentNeverType) {
|
|
return silentNeverSignature;
|
|
}
|
|
var apparentType = getApparentType(funcType);
|
|
if (isErrorType(apparentType)) {
|
|
return resolveErrorCall(node);
|
|
}
|
|
var callSignatures = getSignaturesOfType(apparentType, 0);
|
|
var numConstructSignatures = getSignaturesOfType(apparentType, 1).length;
|
|
if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, numConstructSignatures)) {
|
|
if (!isErrorType(funcType) && node.typeArguments) {
|
|
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
|
|
}
|
|
return resolveUntypedCall(node);
|
|
}
|
|
if (!callSignatures.length) {
|
|
if (numConstructSignatures) {
|
|
error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
|
|
}
|
|
else {
|
|
var relatedInformation = void 0;
|
|
if (node.arguments.length === 1) {
|
|
var text = ts.getSourceFileOfNode(node).text;
|
|
if (ts.isLineBreak(text.charCodeAt(ts.skipTrivia(text, node.expression.end, true) - 1))) {
|
|
relatedInformation = ts.createDiagnosticForNode(node.expression, ts.Diagnostics.Are_you_missing_a_semicolon);
|
|
}
|
|
}
|
|
invocationError(node.expression, apparentType, 0, relatedInformation);
|
|
}
|
|
return resolveErrorCall(node);
|
|
}
|
|
if (checkMode & 8 && !node.typeArguments && callSignatures.some(isGenericFunctionReturningFunction)) {
|
|
skippedGenericFunction(node, checkMode);
|
|
return resolvingSignature;
|
|
}
|
|
if (callSignatures.some(function (sig) { return ts.isInJSFile(sig.declaration) && !!ts.getJSDocClassTag(sig.declaration); })) {
|
|
error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
|
|
return resolveErrorCall(node);
|
|
}
|
|
return resolveCall(node, callSignatures, candidatesOutArray, checkMode, callChainFlags);
|
|
}
|
|
function isGenericFunctionReturningFunction(signature) {
|
|
return !!(signature.typeParameters && isFunctionType(getReturnTypeOfSignature(signature)));
|
|
}
|
|
function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) {
|
|
return isTypeAny(funcType) || isTypeAny(apparentFuncType) && !!(funcType.flags & 262144) ||
|
|
!numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & 1048576) && !(getReducedType(apparentFuncType).flags & 131072) && isTypeAssignableTo(funcType, globalFunctionType);
|
|
}
|
|
function resolveNewExpression(node, candidatesOutArray, checkMode) {
|
|
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 (isErrorType(expressionType)) {
|
|
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);
|
|
}
|
|
if (someSignature(constructSignatures, function (signature) { return !!(signature.flags & 4); })) {
|
|
error(node, ts.Diagnostics.Cannot_create_an_instance_of_an_abstract_class);
|
|
return resolveErrorCall(node);
|
|
}
|
|
var valueDecl = expressionType.symbol && ts.getClassLikeDeclarationOfSymbol(expressionType.symbol);
|
|
if (valueDecl && ts.hasSyntacticModifier(valueDecl, 128)) {
|
|
error(node, ts.Diagnostics.Cannot_create_an_instance_of_an_abstract_class);
|
|
return resolveErrorCall(node);
|
|
}
|
|
return resolveCall(node, constructSignatures, candidatesOutArray, checkMode, 0);
|
|
}
|
|
var callSignatures = getSignaturesOfType(expressionType, 0);
|
|
if (callSignatures.length) {
|
|
var signature = resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0);
|
|
if (!noImplicitAny) {
|
|
if (signature.declaration && !isJSConstructor(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.expression, expressionType, 1);
|
|
return resolveErrorCall(node);
|
|
}
|
|
function someSignature(signatures, f) {
|
|
if (ts.isArray(signatures)) {
|
|
return ts.some(signatures, function (signature) { return someSignature(signature, f); });
|
|
}
|
|
return signatures.compositeKind === 1048576 ? ts.some(signatures.compositeSignatures, f) : f(signatures);
|
|
}
|
|
function typeHasProtectedAccessibleBase(target, type) {
|
|
var baseTypes = getBaseTypes(type);
|
|
if (!ts.length(baseTypes)) {
|
|
return false;
|
|
}
|
|
var firstBase = baseTypes[0];
|
|
if (firstBase.flags & 2097152) {
|
|
var types = firstBase.types;
|
|
var mixinFlags = findMixins(types);
|
|
var i = 0;
|
|
for (var _i = 0, _a = firstBase.types; _i < _a.length; _i++) {
|
|
var intersectionMember = _a[_i];
|
|
if (!mixinFlags[i]) {
|
|
if (ts.getObjectFlags(intersectionMember) & (1 | 2)) {
|
|
if (intersectionMember.symbol === target) {
|
|
return true;
|
|
}
|
|
if (typeHasProtectedAccessibleBase(target, intersectionMember)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
return false;
|
|
}
|
|
if (firstBase.symbol === target) {
|
|
return true;
|
|
}
|
|
return typeHasProtectedAccessibleBase(target, firstBase);
|
|
}
|
|
function isConstructorAccessible(node, signature) {
|
|
if (!signature || !signature.declaration) {
|
|
return true;
|
|
}
|
|
var declaration = signature.declaration;
|
|
var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24);
|
|
if (!modifiers || declaration.kind !== 171) {
|
|
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 && modifiers & 16) {
|
|
var containingType = getTypeOfNode(containingClass);
|
|
if (typeHasProtectedAccessibleBase(declaration.parent.symbol, containingType)) {
|
|
return true;
|
|
}
|
|
}
|
|
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 invocationErrorDetails(errorTarget, apparentType, kind) {
|
|
var errorInfo;
|
|
var isCall = kind === 0;
|
|
var awaitedType = getAwaitedType(apparentType);
|
|
var maybeMissingAwait = awaitedType && getSignaturesOfType(awaitedType, kind).length > 0;
|
|
if (apparentType.flags & 1048576) {
|
|
var types = apparentType.types;
|
|
var hasSignatures = false;
|
|
for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
|
|
var constituent = types_19[_i];
|
|
var signatures = getSignaturesOfType(constituent, kind);
|
|
if (signatures.length !== 0) {
|
|
hasSignatures = true;
|
|
if (errorInfo) {
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
if (!errorInfo) {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, isCall ?
|
|
ts.Diagnostics.Type_0_has_no_call_signatures :
|
|
ts.Diagnostics.Type_0_has_no_construct_signatures, typeToString(constituent));
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, isCall ?
|
|
ts.Diagnostics.Not_all_constituents_of_type_0_are_callable :
|
|
ts.Diagnostics.Not_all_constituents_of_type_0_are_constructable, typeToString(apparentType));
|
|
}
|
|
if (hasSignatures) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!hasSignatures) {
|
|
errorInfo = ts.chainDiagnosticMessages(undefined, isCall ?
|
|
ts.Diagnostics.No_constituent_of_type_0_is_callable :
|
|
ts.Diagnostics.No_constituent_of_type_0_is_constructable, typeToString(apparentType));
|
|
}
|
|
if (!errorInfo) {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, isCall ?
|
|
ts.Diagnostics.Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other :
|
|
ts.Diagnostics.Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other, typeToString(apparentType));
|
|
}
|
|
}
|
|
else {
|
|
errorInfo = ts.chainDiagnosticMessages(errorInfo, isCall ?
|
|
ts.Diagnostics.Type_0_has_no_call_signatures :
|
|
ts.Diagnostics.Type_0_has_no_construct_signatures, typeToString(apparentType));
|
|
}
|
|
var headMessage = isCall ? ts.Diagnostics.This_expression_is_not_callable : ts.Diagnostics.This_expression_is_not_constructable;
|
|
if (ts.isCallExpression(errorTarget.parent) && errorTarget.parent.arguments.length === 0) {
|
|
var resolvedSymbol = getNodeLinks(errorTarget).resolvedSymbol;
|
|
if (resolvedSymbol && resolvedSymbol.flags & 32768) {
|
|
headMessage = ts.Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without;
|
|
}
|
|
}
|
|
return {
|
|
messageChain: ts.chainDiagnosticMessages(errorInfo, headMessage),
|
|
relatedMessage: maybeMissingAwait ? ts.Diagnostics.Did_you_forget_to_use_await : undefined,
|
|
};
|
|
}
|
|
function invocationError(errorTarget, apparentType, kind, relatedInformation) {
|
|
var _a = invocationErrorDetails(errorTarget, apparentType, kind), messageChain = _a.messageChain, relatedInfo = _a.relatedMessage;
|
|
var diagnostic = ts.createDiagnosticForNodeFromMessageChain(errorTarget, messageChain);
|
|
if (relatedInfo) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(errorTarget, relatedInfo));
|
|
}
|
|
if (ts.isCallExpression(errorTarget.parent)) {
|
|
var _b = getDiagnosticSpanForCallNode(errorTarget.parent, true), start = _b.start, length_8 = _b.length;
|
|
diagnostic.start = start;
|
|
diagnostic.length = length_8;
|
|
}
|
|
diagnostics.add(diagnostic);
|
|
invocationErrorRecovery(apparentType, kind, relatedInformation ? ts.addRelatedInfo(diagnostic, relatedInformation) : diagnostic);
|
|
}
|
|
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;
|
|
ts.addRelatedInfo(diagnostic, 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, checkMode) {
|
|
var tagType = checkExpression(node.tag);
|
|
var apparentType = getApparentType(tagType);
|
|
if (isErrorType(apparentType)) {
|
|
return resolveErrorCall(node);
|
|
}
|
|
var callSignatures = getSignaturesOfType(apparentType, 0);
|
|
var numConstructSignatures = getSignaturesOfType(apparentType, 1).length;
|
|
if (isUntypedFunctionCall(tagType, apparentType, callSignatures.length, numConstructSignatures)) {
|
|
return resolveUntypedCall(node);
|
|
}
|
|
if (!callSignatures.length) {
|
|
if (ts.isArrayLiteralExpression(node.parent)) {
|
|
var diagnostic = ts.createDiagnosticForNode(node.tag, ts.Diagnostics.It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked);
|
|
diagnostics.add(diagnostic);
|
|
return resolveErrorCall(node);
|
|
}
|
|
invocationError(node.tag, apparentType, 0);
|
|
return resolveErrorCall(node);
|
|
}
|
|
return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0);
|
|
}
|
|
function getDiagnosticHeadMessageForDecoratorResolution(node) {
|
|
switch (node.parent.kind) {
|
|
case 257:
|
|
case 226:
|
|
return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
|
|
case 164:
|
|
return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
|
|
case 167:
|
|
return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
|
|
default:
|
|
return ts.Debug.fail();
|
|
}
|
|
}
|
|
function resolveDecorator(node, candidatesOutArray, checkMode) {
|
|
var funcType = checkExpression(node.expression);
|
|
var apparentType = getApparentType(funcType);
|
|
if (isErrorType(apparentType)) {
|
|
return resolveErrorCall(node);
|
|
}
|
|
var callSignatures = getSignaturesOfType(apparentType, 0);
|
|
var numConstructSignatures = getSignaturesOfType(apparentType, 1).length;
|
|
if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, numConstructSignatures)) {
|
|
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 errorDetails = invocationErrorDetails(node.expression, apparentType, 0);
|
|
var messageChain = ts.chainDiagnosticMessages(errorDetails.messageChain, headMessage);
|
|
var diag = ts.createDiagnosticForNodeFromMessageChain(node.expression, messageChain);
|
|
if (errorDetails.relatedMessage) {
|
|
ts.addRelatedInfo(diag, ts.createDiagnosticForNode(node.expression, errorDetails.relatedMessage));
|
|
}
|
|
diagnostics.add(diag);
|
|
invocationErrorRecovery(apparentType, 0, diag);
|
|
return resolveErrorCall(node);
|
|
}
|
|
return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0, headMessage);
|
|
}
|
|
function createSignatureForJSXIntrinsic(node, result) {
|
|
var namespace = getJsxNamespaceAt(node);
|
|
var exports = namespace && getExportsOfSymbol(namespace);
|
|
var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968);
|
|
var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968, node);
|
|
var declaration = ts.factory.createFunctionTypeNode(undefined, [ts.factory.createParameterDeclaration(undefined, undefined, "props", undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, undefined) : ts.factory.createKeywordTypeNode(130));
|
|
var parameterSymbol = createSymbol(1, "props");
|
|
parameterSymbol.type = result;
|
|
return createSignature(declaration, undefined, undefined, [parameterSymbol], typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType, undefined, 1, 0);
|
|
}
|
|
function resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode) {
|
|
if (isJsxIntrinsicIdentifier(node.tagName)) {
|
|
var result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node);
|
|
var fakeSignature = createSignatureForJSXIntrinsic(node, result);
|
|
checkTypeAssignableToAndOptionallyElaborate(checkExpressionWithContextualType(node.attributes, getEffectiveFirstArgumentForJsxSignature(fakeSignature, node), undefined, 0), result, node.tagName, node.attributes);
|
|
if (ts.length(node.typeArguments)) {
|
|
ts.forEach(node.typeArguments, checkSourceElement);
|
|
diagnostics.add(ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), node.typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, 0, ts.length(node.typeArguments)));
|
|
}
|
|
return fakeSignature;
|
|
}
|
|
var exprTypes = checkExpression(node.tagName);
|
|
var apparentType = getApparentType(exprTypes);
|
|
if (isErrorType(apparentType)) {
|
|
return resolveErrorCall(node);
|
|
}
|
|
var signatures = getUninstantiatedJsxSignaturesOfType(exprTypes, node);
|
|
if (isUntypedFunctionCall(exprTypes, apparentType, signatures.length, 0)) {
|
|
return resolveUntypedCall(node);
|
|
}
|
|
if (signatures.length === 0) {
|
|
error(node.tagName, ts.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, ts.getTextOfNode(node.tagName));
|
|
return resolveErrorCall(node);
|
|
}
|
|
return resolveCall(node, signatures, candidatesOutArray, checkMode, 0);
|
|
}
|
|
function isPotentiallyUncalledDecorator(decorator, signatures) {
|
|
return signatures.length && ts.every(signatures, function (signature) {
|
|
return signature.minArgumentCount === 0 &&
|
|
!signatureHasRestParameter(signature) &&
|
|
signature.parameters.length < getDecoratorArgumentCount(decorator, signature);
|
|
});
|
|
}
|
|
function resolveSignature(node, candidatesOutArray, checkMode) {
|
|
switch (node.kind) {
|
|
case 208:
|
|
return resolveCallExpression(node, candidatesOutArray, checkMode);
|
|
case 209:
|
|
return resolveNewExpression(node, candidatesOutArray, checkMode);
|
|
case 210:
|
|
return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
|
|
case 165:
|
|
return resolveDecorator(node, candidatesOutArray, checkMode);
|
|
case 280:
|
|
case 279:
|
|
return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
|
|
}
|
|
throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
|
|
}
|
|
function getResolvedSignature(node, candidatesOutArray, checkMode) {
|
|
var links = getNodeLinks(node);
|
|
var cached = links.resolvedSignature;
|
|
if (cached && cached !== resolvingSignature && !candidatesOutArray) {
|
|
return cached;
|
|
}
|
|
links.resolvedSignature = resolvingSignature;
|
|
var result = resolveSignature(node, candidatesOutArray, checkMode || 0);
|
|
if (result !== resolvingSignature) {
|
|
links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached;
|
|
}
|
|
return result;
|
|
}
|
|
function isJSConstructor(node) {
|
|
var _a;
|
|
if (!node || !ts.isInJSFile(node)) {
|
|
return false;
|
|
}
|
|
var func = ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) ? node :
|
|
ts.isVariableDeclaration(node) && node.initializer && ts.isFunctionExpression(node.initializer) ? node.initializer :
|
|
undefined;
|
|
if (func) {
|
|
if (ts.getJSDocClassTag(node))
|
|
return true;
|
|
var symbol = getSymbolOfNode(func);
|
|
return !!((_a = symbol === null || symbol === void 0 ? void 0 : symbol.members) === null || _a === void 0 ? void 0 : _a.size);
|
|
}
|
|
return false;
|
|
}
|
|
function mergeJSSymbols(target, source) {
|
|
var _a, _b;
|
|
if (source) {
|
|
var links = getSymbolLinks(source);
|
|
if (!links.inferredClassSymbol || !links.inferredClassSymbol.has(getSymbolId(target))) {
|
|
var inferred = ts.isTransientSymbol(target) ? target : cloneSymbol(target);
|
|
inferred.exports = inferred.exports || ts.createSymbolTable();
|
|
inferred.members = inferred.members || ts.createSymbolTable();
|
|
inferred.flags |= source.flags & 32;
|
|
if ((_a = source.exports) === null || _a === void 0 ? void 0 : _a.size) {
|
|
mergeSymbolTable(inferred.exports, source.exports);
|
|
}
|
|
if ((_b = source.members) === null || _b === void 0 ? void 0 : _b.size) {
|
|
mergeSymbolTable(inferred.members, source.members);
|
|
}
|
|
(links.inferredClassSymbol || (links.inferredClassSymbol = new ts.Map())).set(getSymbolId(inferred), inferred);
|
|
return inferred;
|
|
}
|
|
return links.inferredClassSymbol.get(getSymbolId(target));
|
|
}
|
|
}
|
|
function getAssignedClassSymbol(decl) {
|
|
var _a;
|
|
var assignmentSymbol = decl && getSymbolOfExpando(decl, true);
|
|
var prototype = (_a = assignmentSymbol === null || assignmentSymbol === void 0 ? void 0 : assignmentSymbol.exports) === null || _a === void 0 ? void 0 : _a.get("prototype");
|
|
var init = (prototype === null || prototype === void 0 ? void 0 : prototype.valueDeclaration) && getAssignedJSPrototype(prototype.valueDeclaration);
|
|
return init ? getSymbolOfNode(init) : undefined;
|
|
}
|
|
function getSymbolOfExpando(node, allowDeclaration) {
|
|
if (!node.parent) {
|
|
return undefined;
|
|
}
|
|
var name;
|
|
var decl;
|
|
if (ts.isVariableDeclaration(node.parent) && node.parent.initializer === node) {
|
|
if (!ts.isInJSFile(node) && !(ts.isVarConst(node.parent) && ts.isFunctionLikeDeclaration(node))) {
|
|
return undefined;
|
|
}
|
|
name = node.parent.name;
|
|
decl = node.parent;
|
|
}
|
|
else if (ts.isBinaryExpression(node.parent)) {
|
|
var parentNode = node.parent;
|
|
var parentNodeOperator = node.parent.operatorToken.kind;
|
|
if (parentNodeOperator === 63 && (allowDeclaration || parentNode.right === node)) {
|
|
name = parentNode.left;
|
|
decl = name;
|
|
}
|
|
else if (parentNodeOperator === 56 || parentNodeOperator === 60) {
|
|
if (ts.isVariableDeclaration(parentNode.parent) && parentNode.parent.initializer === parentNode) {
|
|
name = parentNode.parent.name;
|
|
decl = parentNode.parent;
|
|
}
|
|
else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 && (allowDeclaration || parentNode.parent.right === parentNode)) {
|
|
name = parentNode.parent.left;
|
|
decl = name;
|
|
}
|
|
if (!name || !ts.isBindableStaticNameExpression(name) || !ts.isSameEntityName(name, parentNode.left)) {
|
|
return undefined;
|
|
}
|
|
}
|
|
}
|
|
else if (allowDeclaration && ts.isFunctionDeclaration(node)) {
|
|
name = node.name;
|
|
decl = node;
|
|
}
|
|
if (!decl || !name || (!allowDeclaration && !ts.getExpandoInitializer(node, ts.isPrototypeAccess(name)))) {
|
|
return undefined;
|
|
}
|
|
return getSymbolOfNode(decl);
|
|
}
|
|
function getAssignedJSPrototype(node) {
|
|
if (!node.parent) {
|
|
return false;
|
|
}
|
|
var parent = node.parent;
|
|
while (parent && parent.kind === 206) {
|
|
parent = parent.parent;
|
|
}
|
|
if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63) {
|
|
var right = ts.getInitializerOfBinaryExpression(parent);
|
|
return ts.isObjectLiteralExpression(right) && right;
|
|
}
|
|
}
|
|
function checkCallExpression(node, checkMode) {
|
|
var _a;
|
|
checkGrammarTypeArguments(node, node.typeArguments);
|
|
var signature = getResolvedSignature(node, undefined, checkMode);
|
|
if (signature === resolvingSignature) {
|
|
return silentNeverType;
|
|
}
|
|
checkDeprecatedSignature(signature, node);
|
|
if (node.expression.kind === 106) {
|
|
return voidType;
|
|
}
|
|
if (node.kind === 209) {
|
|
var declaration = signature.declaration;
|
|
if (declaration &&
|
|
declaration.kind !== 171 &&
|
|
declaration.kind !== 175 &&
|
|
declaration.kind !== 180 &&
|
|
!ts.isJSDocConstructSignature(declaration) &&
|
|
!isJSConstructor(declaration)) {
|
|
if (noImplicitAny) {
|
|
error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
|
|
}
|
|
return anyType;
|
|
}
|
|
}
|
|
if (ts.isInJSFile(node) && isCommonJsRequire(node)) {
|
|
return resolveExternalModuleTypeByLiteral(node.arguments[0]);
|
|
}
|
|
var returnType = getReturnTypeOfSignature(signature);
|
|
if (returnType.flags & 12288 && isSymbolOrSymbolForCall(node)) {
|
|
return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
|
|
}
|
|
if (node.kind === 208 && !node.questionDotToken && node.parent.kind === 238 &&
|
|
returnType.flags & 16384 && getTypePredicateOfSignature(signature)) {
|
|
if (!ts.isDottedName(node.expression)) {
|
|
error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
|
|
}
|
|
else if (!getEffectsSignature(node)) {
|
|
var diagnostic = error(node.expression, ts.Diagnostics.Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation);
|
|
getTypeOfDottedName(node.expression, diagnostic);
|
|
}
|
|
}
|
|
if (ts.isInJSFile(node)) {
|
|
var jsSymbol = getSymbolOfExpando(node, false);
|
|
if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
|
|
var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
jsAssignmentType.objectFlags |= 4096;
|
|
return getIntersectionType([returnType, jsAssignmentType]);
|
|
}
|
|
}
|
|
return returnType;
|
|
}
|
|
function checkDeprecatedSignature(signature, node) {
|
|
if (signature.declaration && signature.declaration.flags & 268435456) {
|
|
var suggestionNode = getDeprecatedSuggestionNode(node);
|
|
var name = ts.tryGetPropertyAccessOrIdentifierToString(ts.getInvokedExpression(node));
|
|
addDeprecatedSuggestionWithSignature(suggestionNode, signature.declaration, name, signatureToString(signature));
|
|
}
|
|
}
|
|
function getDeprecatedSuggestionNode(node) {
|
|
node = ts.skipParentheses(node);
|
|
switch (node.kind) {
|
|
case 208:
|
|
case 165:
|
|
case 209:
|
|
return getDeprecatedSuggestionNode(node.expression);
|
|
case 210:
|
|
return getDeprecatedSuggestionNode(node.tag);
|
|
case 280:
|
|
case 279:
|
|
return getDeprecatedSuggestionNode(node.tagName);
|
|
case 207:
|
|
return node.argumentExpression;
|
|
case 206:
|
|
return node.name;
|
|
case 178:
|
|
var typeReference = node;
|
|
return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
|
|
default:
|
|
return node;
|
|
}
|
|
}
|
|
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", 111551, undefined, undefined, false);
|
|
}
|
|
function checkImportCallExpression(node) {
|
|
checkGrammarImportCallExpression(node);
|
|
if (node.arguments.length === 0) {
|
|
return createPromiseReturnType(node, anyType);
|
|
}
|
|
var specifier = node.arguments[0];
|
|
var specifierType = checkExpressionCached(specifier);
|
|
var optionsType = node.arguments.length > 1 ? checkExpressionCached(node.arguments[1]) : undefined;
|
|
for (var i = 2; i < node.arguments.length; ++i) {
|
|
checkExpressionCached(node.arguments[i]);
|
|
}
|
|
if (specifierType.flags & 32768 || specifierType.flags & 65536 || !isTypeAssignableTo(specifierType, stringType)) {
|
|
error(specifier, ts.Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType));
|
|
}
|
|
if (optionsType) {
|
|
var importCallOptionsType = getGlobalImportCallOptionsType(true);
|
|
if (importCallOptionsType !== emptyObjectType) {
|
|
checkTypeAssignableTo(optionsType, getNullableType(importCallOptionsType, 32768), node.arguments[1]);
|
|
}
|
|
}
|
|
var moduleSymbol = resolveExternalModuleName(node, specifier);
|
|
if (moduleSymbol) {
|
|
var esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, true, false);
|
|
if (esModuleSymbol) {
|
|
return createPromiseReturnType(node, getTypeWithSyntheticDefaultOnly(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol, specifier) ||
|
|
getTypeWithSyntheticDefaultImportType(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol, specifier));
|
|
}
|
|
}
|
|
return createPromiseReturnType(node, anyType);
|
|
}
|
|
function createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol) {
|
|
var memberTable = ts.createSymbolTable();
|
|
var newSymbol = createSymbol(2097152, "default");
|
|
newSymbol.parent = originalSymbol;
|
|
newSymbol.nameType = getStringLiteralType("default");
|
|
newSymbol.aliasTarget = resolveSymbol(symbol);
|
|
memberTable.set("default", newSymbol);
|
|
return createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
}
|
|
function getTypeWithSyntheticDefaultOnly(type, symbol, originalSymbol, moduleSpecifier) {
|
|
var hasDefaultOnly = isOnlyImportedAsDefault(moduleSpecifier);
|
|
if (hasDefaultOnly && type && !isErrorType(type)) {
|
|
var synthType = type;
|
|
if (!synthType.defaultOnlyType) {
|
|
var type_5 = createDefaultPropertyWrapperForModule(symbol, originalSymbol);
|
|
synthType.defaultOnlyType = type_5;
|
|
}
|
|
return synthType.defaultOnlyType;
|
|
}
|
|
return undefined;
|
|
}
|
|
function getTypeWithSyntheticDefaultImportType(type, symbol, originalSymbol, moduleSpecifier) {
|
|
var _a;
|
|
if (allowSyntheticDefaultImports && type && !isErrorType(type)) {
|
|
var synthType = type;
|
|
if (!synthType.syntheticType) {
|
|
var file = (_a = originalSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(ts.isSourceFile);
|
|
var hasSyntheticDefault = canHaveSyntheticDefault(file, originalSymbol, false, moduleSpecifier);
|
|
if (hasSyntheticDefault) {
|
|
var anonymousSymbol = createSymbol(2048, "__type");
|
|
var defaultContainingObject = createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol);
|
|
anonymousSymbol.type = defaultContainingObject;
|
|
synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, 0, false) : 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, 111551, undefined, undefined, true);
|
|
if (resolvedRequire === requireSymbol) {
|
|
return true;
|
|
}
|
|
if (resolvedRequire.flags & 2097152) {
|
|
return false;
|
|
}
|
|
var targetDeclarationKind = resolvedRequire.flags & 16
|
|
? 256
|
|
: resolvedRequire.flags & 3
|
|
? 254
|
|
: 0;
|
|
if (targetDeclarationKind !== 0) {
|
|
var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
|
|
return !!decl && !!(decl.flags & 16777216);
|
|
}
|
|
return false;
|
|
}
|
|
function checkTaggedTemplateExpression(node) {
|
|
if (!checkGrammarTaggedTemplateChain(node))
|
|
checkGrammarTypeArguments(node, node.typeArguments);
|
|
if (languageVersion < 2) {
|
|
checkExternalEmitHelpers(node, 262144);
|
|
}
|
|
var signature = getResolvedSignature(node);
|
|
checkDeprecatedSignature(signature, node);
|
|
return getReturnTypeOfSignature(signature);
|
|
}
|
|
function checkAssertion(node) {
|
|
if (node.kind === 211) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
if (file && ts.fileExtensionIsOneOf(file.fileName, [".cts", ".mts"])) {
|
|
grammarErrorOnNode(node, ts.Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead);
|
|
}
|
|
}
|
|
return checkAssertionWorker(node, node.type, node.expression);
|
|
}
|
|
function isValidConstAssertionArgument(node) {
|
|
switch (node.kind) {
|
|
case 10:
|
|
case 14:
|
|
case 8:
|
|
case 9:
|
|
case 110:
|
|
case 95:
|
|
case 204:
|
|
case 205:
|
|
case 223:
|
|
return true;
|
|
case 212:
|
|
return isValidConstAssertionArgument(node.expression);
|
|
case 219:
|
|
var op = node.operator;
|
|
var arg = node.operand;
|
|
return op === 40 && (arg.kind === 8 || arg.kind === 9) ||
|
|
op === 39 && arg.kind === 8;
|
|
case 206:
|
|
case 207:
|
|
var expr = node.expression;
|
|
var symbol = getTypeOfNode(expr).symbol;
|
|
if (symbol && symbol.flags & 2097152) {
|
|
symbol = resolveAlias(symbol);
|
|
}
|
|
return !!(symbol && (symbol.flags & 384) && getEnumKind(symbol) === 1);
|
|
}
|
|
return false;
|
|
}
|
|
function checkAssertionWorker(errNode, type, expression, checkMode) {
|
|
var exprType = checkExpression(expression, checkMode);
|
|
if (ts.isConstTypeReference(type)) {
|
|
if (!isValidConstAssertionArgument(expression)) {
|
|
error(expression, ts.Diagnostics.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals);
|
|
}
|
|
return getRegularTypeOfLiteralType(exprType);
|
|
}
|
|
checkSourceElement(type);
|
|
exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(exprType));
|
|
var targetType = getTypeFromTypeNode(type);
|
|
if (!isErrorType(targetType)) {
|
|
addLazyDiagnostic(function () {
|
|
var widenedType = getWidenedType(exprType);
|
|
if (!isTypeComparableTo(targetType, widenedType)) {
|
|
checkTypeComparableTo(exprType, targetType, errNode, ts.Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first);
|
|
}
|
|
});
|
|
}
|
|
return targetType;
|
|
}
|
|
function checkNonNullChain(node) {
|
|
var leftType = checkExpression(node.expression);
|
|
var nonOptionalType = getOptionalExpressionType(leftType, node.expression);
|
|
return propagateOptionalTypeMarker(getNonNullableType(nonOptionalType), node, nonOptionalType !== leftType);
|
|
}
|
|
function checkNonNullAssertion(node) {
|
|
return node.flags & 32 ? checkNonNullChain(node) :
|
|
getNonNullableType(checkExpression(node.expression));
|
|
}
|
|
function checkExpressionWithTypeArguments(node) {
|
|
checkGrammarExpressionWithTypeArguments(node);
|
|
var exprType = node.kind === 228 ? checkExpression(node.expression) :
|
|
ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) :
|
|
checkExpression(node.exprName);
|
|
var typeArguments = node.typeArguments;
|
|
if (exprType === silentNeverType || isErrorType(exprType) || !ts.some(typeArguments)) {
|
|
return exprType;
|
|
}
|
|
var hasSomeApplicableSignature = false;
|
|
var nonApplicableType;
|
|
var result = getInstantiatedType(exprType);
|
|
var errorType = hasSomeApplicableSignature ? nonApplicableType : exprType;
|
|
if (errorType) {
|
|
diagnostics.add(ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable, typeToString(errorType)));
|
|
}
|
|
return result;
|
|
function getInstantiatedType(type) {
|
|
var hasSignatures = false;
|
|
var hasApplicableSignature = false;
|
|
var result = getInstantiatedTypePart(type);
|
|
hasSomeApplicableSignature || (hasSomeApplicableSignature = hasApplicableSignature);
|
|
if (hasSignatures && !hasApplicableSignature) {
|
|
nonApplicableType !== null && nonApplicableType !== void 0 ? nonApplicableType : (nonApplicableType = type);
|
|
}
|
|
return result;
|
|
function getInstantiatedTypePart(type) {
|
|
if (type.flags & 524288) {
|
|
var resolved = resolveStructuredTypeMembers(type);
|
|
var callSignatures = getInstantiatedSignatures(resolved.callSignatures);
|
|
var constructSignatures = getInstantiatedSignatures(resolved.constructSignatures);
|
|
hasSignatures || (hasSignatures = resolved.callSignatures.length !== 0 || resolved.constructSignatures.length !== 0);
|
|
hasApplicableSignature || (hasApplicableSignature = callSignatures.length !== 0 || constructSignatures.length !== 0);
|
|
if (callSignatures !== resolved.callSignatures || constructSignatures !== resolved.constructSignatures) {
|
|
var result_11 = createAnonymousType(undefined, resolved.members, callSignatures, constructSignatures, resolved.indexInfos);
|
|
result_11.objectFlags |= 8388608;
|
|
result_11.node = node;
|
|
return result_11;
|
|
}
|
|
}
|
|
else if (type.flags & 58982400) {
|
|
var constraint = getBaseConstraintOfType(type);
|
|
if (constraint) {
|
|
var instantiated = getInstantiatedTypePart(constraint);
|
|
if (instantiated !== constraint) {
|
|
return instantiated;
|
|
}
|
|
}
|
|
}
|
|
else if (type.flags & 1048576) {
|
|
return mapType(type, getInstantiatedType);
|
|
}
|
|
else if (type.flags & 2097152) {
|
|
return getIntersectionType(ts.sameMap(type.types, getInstantiatedTypePart));
|
|
}
|
|
return type;
|
|
}
|
|
}
|
|
function getInstantiatedSignatures(signatures) {
|
|
var applicableSignatures = ts.filter(signatures, function (sig) { return !!sig.typeParameters && hasCorrectTypeArgumentArity(sig, typeArguments); });
|
|
return ts.sameMap(applicableSignatures, function (sig) {
|
|
var typeArgumentTypes = checkTypeArguments(sig, typeArguments, true);
|
|
return typeArgumentTypes ? getSignatureInstantiation(sig, typeArgumentTypes, ts.isInJSFile(sig.declaration)) : sig;
|
|
});
|
|
}
|
|
}
|
|
function checkMetaProperty(node) {
|
|
checkGrammarMetaProperty(node);
|
|
if (node.keywordToken === 103) {
|
|
return checkNewTargetMetaProperty(node);
|
|
}
|
|
if (node.keywordToken === 100) {
|
|
return checkImportMetaProperty(node);
|
|
}
|
|
return ts.Debug.assertNever(node.keywordToken);
|
|
}
|
|
function checkMetaPropertyKeyword(node) {
|
|
switch (node.keywordToken) {
|
|
case 100:
|
|
return getGlobalImportMetaExpressionType();
|
|
case 103:
|
|
var type = checkNewTargetMetaProperty(node);
|
|
return isErrorType(type) ? errorType : createNewTargetExpressionType(type);
|
|
default:
|
|
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 === 171) {
|
|
var symbol = getSymbolOfNode(container.parent);
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
else {
|
|
var symbol = getSymbolOfNode(container);
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
}
|
|
function checkImportMetaProperty(node) {
|
|
if (moduleKind === ts.ModuleKind.Node16 || moduleKind === ts.ModuleKind.NodeNext) {
|
|
if (ts.getSourceFileOfNode(node).impliedNodeFormat !== ts.ModuleKind.ESNext) {
|
|
error(node, ts.Diagnostics.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output);
|
|
}
|
|
}
|
|
else if (moduleKind < ts.ModuleKind.ES2020 && moduleKind !== ts.ModuleKind.System) {
|
|
error(node, ts.Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext);
|
|
}
|
|
var file = ts.getSourceFileOfNode(node);
|
|
ts.Debug.assert(!!(file.flags & 4194304), "Containing file is missing import meta node flag.");
|
|
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 getTupleElementLabel(d) {
|
|
ts.Debug.assert(ts.isIdentifier(d.name));
|
|
return d.name.escapedText;
|
|
}
|
|
function getParameterNameAtPosition(signature, pos, overrideRestType) {
|
|
var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
if (pos < paramCount) {
|
|
return signature.parameters[pos].escapedName;
|
|
}
|
|
var restParameter = signature.parameters[paramCount] || unknownSymbol;
|
|
var restType = overrideRestType || getTypeOfSymbol(restParameter);
|
|
if (isTupleType(restType)) {
|
|
var associatedNames = restType.target.labeledElementDeclarations;
|
|
var index = pos - paramCount;
|
|
return associatedNames && getTupleElementLabel(associatedNames[index]) || restParameter.escapedName + "_" + index;
|
|
}
|
|
return restParameter.escapedName;
|
|
}
|
|
function getParameterIdentifierNameAtPosition(signature, pos) {
|
|
var _a;
|
|
if (((_a = signature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 317) {
|
|
return undefined;
|
|
}
|
|
var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
if (pos < paramCount) {
|
|
var param = signature.parameters[pos];
|
|
return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
|
|
}
|
|
var restParameter = signature.parameters[paramCount] || unknownSymbol;
|
|
if (!isParameterDeclarationWithIdentifierName(restParameter)) {
|
|
return undefined;
|
|
}
|
|
var restType = getTypeOfSymbol(restParameter);
|
|
if (isTupleType(restType)) {
|
|
var associatedNames = restType.target.labeledElementDeclarations;
|
|
var index = pos - paramCount;
|
|
var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
|
|
var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
|
|
return associatedName ? [
|
|
getTupleElementLabel(associatedName),
|
|
isRestTupleElement
|
|
] : undefined;
|
|
}
|
|
if (pos === paramCount) {
|
|
return [restParameter.escapedName, true];
|
|
}
|
|
return undefined;
|
|
}
|
|
function isParameterDeclarationWithIdentifierName(symbol) {
|
|
return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
|
|
}
|
|
function isValidDeclarationForTupleLabel(d) {
|
|
return d.kind === 197 || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
|
|
}
|
|
function getNameableDeclarationAtPosition(signature, pos) {
|
|
var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
if (pos < paramCount) {
|
|
var decl = signature.parameters[pos].valueDeclaration;
|
|
return decl && isValidDeclarationForTupleLabel(decl) ? decl : undefined;
|
|
}
|
|
var restParameter = signature.parameters[paramCount] || unknownSymbol;
|
|
var restType = getTypeOfSymbol(restParameter);
|
|
if (isTupleType(restType)) {
|
|
var associatedNames = restType.target.labeledElementDeclarations;
|
|
var index = pos - paramCount;
|
|
return associatedNames && associatedNames[index];
|
|
}
|
|
return restParameter.valueDeclaration && isValidDeclarationForTupleLabel(restParameter.valueDeclaration) ? restParameter.valueDeclaration : undefined;
|
|
}
|
|
function getTypeAtPosition(signature, pos) {
|
|
return tryGetTypeAtPosition(signature, pos) || anyType;
|
|
}
|
|
function tryGetTypeAtPosition(signature, pos) {
|
|
var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
if (pos < paramCount) {
|
|
return getTypeOfParameter(signature.parameters[pos]);
|
|
}
|
|
if (signatureHasRestParameter(signature)) {
|
|
var restType = getTypeOfSymbol(signature.parameters[paramCount]);
|
|
var index = pos - paramCount;
|
|
if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
|
|
return getIndexedAccessType(restType, getNumberLiteralType(index));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getRestTypeAtPosition(source, pos) {
|
|
var parameterCount = getParameterCount(source);
|
|
var minArgumentCount = getMinArgumentCount(source);
|
|
var restType = getEffectiveRestType(source);
|
|
if (restType && pos >= parameterCount - 1) {
|
|
return pos === parameterCount - 1 ? restType : createArrayType(getIndexedAccessType(restType, numberType));
|
|
}
|
|
var types = [];
|
|
var flags = [];
|
|
var names = [];
|
|
for (var i = pos; i < parameterCount; i++) {
|
|
if (!restType || i < parameterCount - 1) {
|
|
types.push(getTypeAtPosition(source, i));
|
|
flags.push(i < minArgumentCount ? 1 : 2);
|
|
}
|
|
else {
|
|
types.push(restType);
|
|
flags.push(8);
|
|
}
|
|
var name = getNameableDeclarationAtPosition(source, i);
|
|
if (name) {
|
|
names.push(name);
|
|
}
|
|
}
|
|
return createTupleType(types, flags, false, ts.length(names) === ts.length(types) ? names : undefined);
|
|
}
|
|
function getParameterCount(signature) {
|
|
var length = signature.parameters.length;
|
|
if (signatureHasRestParameter(signature)) {
|
|
var restType = getTypeOfSymbol(signature.parameters[length - 1]);
|
|
if (isTupleType(restType)) {
|
|
return length + restType.target.fixedLength - (restType.target.hasRestElement ? 0 : 1);
|
|
}
|
|
}
|
|
return length;
|
|
}
|
|
function getMinArgumentCount(signature, flags) {
|
|
var strongArityForUntypedJS = flags & 1;
|
|
var voidIsNonOptional = flags & 2;
|
|
if (voidIsNonOptional || signature.resolvedMinArgumentCount === undefined) {
|
|
var minArgumentCount = void 0;
|
|
if (signatureHasRestParameter(signature)) {
|
|
var restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
|
|
if (isTupleType(restType)) {
|
|
var firstOptionalIndex = ts.findIndex(restType.target.elementFlags, function (f) { return !(f & 1); });
|
|
var requiredCount = firstOptionalIndex < 0 ? restType.target.fixedLength : firstOptionalIndex;
|
|
if (requiredCount > 0) {
|
|
minArgumentCount = signature.parameters.length - 1 + requiredCount;
|
|
}
|
|
}
|
|
}
|
|
if (minArgumentCount === undefined) {
|
|
if (!strongArityForUntypedJS && signature.flags & 32) {
|
|
return 0;
|
|
}
|
|
minArgumentCount = signature.minArgumentCount;
|
|
}
|
|
if (voidIsNonOptional) {
|
|
return minArgumentCount;
|
|
}
|
|
for (var i = minArgumentCount - 1; i >= 0; i--) {
|
|
var type = getTypeAtPosition(signature, i);
|
|
if (filterType(type, acceptsVoid).flags & 131072) {
|
|
break;
|
|
}
|
|
minArgumentCount = i;
|
|
}
|
|
signature.resolvedMinArgumentCount = minArgumentCount;
|
|
}
|
|
return signature.resolvedMinArgumentCount;
|
|
}
|
|
function hasEffectiveRestParameter(signature) {
|
|
if (signatureHasRestParameter(signature)) {
|
|
var restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
|
|
return !isTupleType(restType) || restType.target.hasRestElement;
|
|
}
|
|
return false;
|
|
}
|
|
function getEffectiveRestType(signature) {
|
|
if (signatureHasRestParameter(signature)) {
|
|
var restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
|
|
if (!isTupleType(restType)) {
|
|
return restType;
|
|
}
|
|
if (restType.target.hasRestElement) {
|
|
return sliceTupleType(restType, restType.target.fixedLength);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getNonArrayRestType(signature) {
|
|
var restType = getEffectiveRestType(signature);
|
|
return restType && !isArrayType(restType) && !isTypeAny(restType) && (getReducedType(restType).flags & 131072) === 0 ? restType : undefined;
|
|
}
|
|
function getTypeOfFirstParameterOfSignature(signature) {
|
|
return getTypeOfFirstParameterOfSignatureWithFallback(signature, neverType);
|
|
}
|
|
function getTypeOfFirstParameterOfSignatureWithFallback(signature, fallbackType) {
|
|
return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : fallbackType;
|
|
}
|
|
function inferFromAnnotatedParameters(signature, context, inferenceContext) {
|
|
var len = signature.parameters.length - (signatureHasRestParameter(signature) ? 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(inferenceContext.inferences, getTypeFromTypeNode(typeNode), getTypeAtPosition(context, i));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function assignContextualParameterTypes(signature, context) {
|
|
if (context.typeParameters) {
|
|
if (!signature.typeParameters) {
|
|
signature.typeParameters = context.typeParameters;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
if (context.thisParameter) {
|
|
var parameter = signature.thisParameter;
|
|
if (!parameter || parameter.valueDeclaration && !parameter.valueDeclaration.type) {
|
|
if (!parameter) {
|
|
signature.thisParameter = createSymbolWithType(context.thisParameter, undefined);
|
|
}
|
|
assignParameterType(signature.thisParameter, getTypeOfSymbol(context.thisParameter));
|
|
}
|
|
}
|
|
var len = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
|
|
for (var i = 0; i < len; i++) {
|
|
var parameter = signature.parameters[i];
|
|
if (!ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) {
|
|
var contextualParameterType = tryGetTypeAtPosition(context, i);
|
|
assignParameterType(parameter, contextualParameterType);
|
|
}
|
|
}
|
|
if (signatureHasRestParameter(signature)) {
|
|
var parameter = ts.last(signature.parameters);
|
|
if (parameter.valueDeclaration
|
|
? !ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)
|
|
: !!(ts.getCheckFlags(parameter) & 65536)) {
|
|
var contextualParameterType = getRestTypeAtPosition(context, len);
|
|
assignParameterType(parameter, contextualParameterType);
|
|
}
|
|
}
|
|
}
|
|
function assignNonContextualParameterTypes(signature) {
|
|
if (signature.thisParameter) {
|
|
assignParameterType(signature.thisParameter);
|
|
}
|
|
for (var _i = 0, _a = signature.parameters; _i < _a.length; _i++) {
|
|
var parameter = _a[_i];
|
|
assignParameterType(parameter);
|
|
}
|
|
}
|
|
function assignParameterType(parameter, type) {
|
|
var links = getSymbolLinks(parameter);
|
|
if (!links.type) {
|
|
var declaration = parameter.valueDeclaration;
|
|
links.type = type || (declaration ? getWidenedTypeForVariableLikeDeclaration(declaration, true) : getTypeOfSymbol(parameter));
|
|
if (declaration && declaration.name.kind !== 79) {
|
|
if (links.type === unknownType) {
|
|
links.type = getTypeFromBindingPattern(declaration.name);
|
|
}
|
|
assignBindingElementTypes(declaration.name, links.type);
|
|
}
|
|
}
|
|
else if (type) {
|
|
ts.Debug.assertEqual(links.type, type, "Parameter symbol already has a cached type which differs from newly assigned type");
|
|
}
|
|
}
|
|
function assignBindingElementTypes(pattern, parentType) {
|
|
for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
|
|
var element = _a[_i];
|
|
if (!ts.isOmittedExpression(element)) {
|
|
var type = getBindingElementTypeFromParentType(element, parentType);
|
|
if (element.name.kind === 79) {
|
|
getSymbolLinks(getSymbolOfNode(element)).type = type;
|
|
}
|
|
else {
|
|
assignBindingElementTypes(element.name, type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function createPromiseType(promisedType) {
|
|
var globalPromiseType = getGlobalPromiseType(true);
|
|
if (globalPromiseType !== emptyGenericType) {
|
|
promisedType = getAwaitedTypeNoAlias(unwrapAwaitedType(promisedType)) || unknownType;
|
|
return createTypeReference(globalPromiseType, [promisedType]);
|
|
}
|
|
return unknownType;
|
|
}
|
|
function createPromiseLikeType(promisedType) {
|
|
var globalPromiseLikeType = getGlobalPromiseLikeType(true);
|
|
if (globalPromiseLikeType !== emptyGenericType) {
|
|
promisedType = getAwaitedTypeNoAlias(unwrapAwaitedType(promisedType)) || unknownType;
|
|
return createTypeReference(globalPromiseLikeType, [promisedType]);
|
|
}
|
|
return unknownType;
|
|
}
|
|
function createPromiseReturnType(func, promisedType) {
|
|
var promiseType = createPromiseType(promisedType);
|
|
if (promiseType === unknownType) {
|
|
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 createNewTargetExpressionType(targetType) {
|
|
var symbol = createSymbol(0, "NewTargetExpression");
|
|
var targetPropertySymbol = createSymbol(4, "target", 8);
|
|
targetPropertySymbol.parent = symbol;
|
|
targetPropertySymbol.type = targetType;
|
|
var members = ts.createSymbolTable([targetPropertySymbol]);
|
|
symbol.members = members;
|
|
return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
|
|
}
|
|
function getReturnTypeFromBody(func, checkMode) {
|
|
if (!func.body) {
|
|
return errorType;
|
|
}
|
|
var functionFlags = ts.getFunctionFlags(func);
|
|
var isAsync = (functionFlags & 2) !== 0;
|
|
var isGenerator = (functionFlags & 1) !== 0;
|
|
var returnType;
|
|
var yieldType;
|
|
var nextType;
|
|
var fallbackReturnType = voidType;
|
|
if (func.body.kind !== 235) {
|
|
returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8);
|
|
if (isAsync) {
|
|
returnType = unwrapAwaitedType(checkAwaitedType(returnType, false, 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 if (isGenerator) {
|
|
var returnTypes = checkAndAggregateReturnExpressionTypes(func, checkMode);
|
|
if (!returnTypes) {
|
|
fallbackReturnType = neverType;
|
|
}
|
|
else if (returnTypes.length > 0) {
|
|
returnType = getUnionType(returnTypes, 2);
|
|
}
|
|
var _a = checkAndAggregateYieldOperandTypes(func, checkMode), yieldTypes = _a.yieldTypes, nextTypes = _a.nextTypes;
|
|
yieldType = ts.some(yieldTypes) ? getUnionType(yieldTypes, 2) : undefined;
|
|
nextType = ts.some(nextTypes) ? getIntersectionType(nextTypes) : undefined;
|
|
}
|
|
else {
|
|
var types = checkAndAggregateReturnExpressionTypes(func, checkMode);
|
|
if (!types) {
|
|
return functionFlags & 2
|
|
? createPromiseReturnType(func, neverType)
|
|
: neverType;
|
|
}
|
|
if (types.length === 0) {
|
|
return functionFlags & 2
|
|
? createPromiseReturnType(func, voidType)
|
|
: voidType;
|
|
}
|
|
returnType = getUnionType(types, 2);
|
|
}
|
|
if (returnType || yieldType || nextType) {
|
|
if (yieldType)
|
|
reportErrorsFromWidening(func, yieldType, 3);
|
|
if (returnType)
|
|
reportErrorsFromWidening(func, returnType, 1);
|
|
if (nextType)
|
|
reportErrorsFromWidening(func, nextType, 2);
|
|
if (returnType && isUnitType(returnType) ||
|
|
yieldType && isUnitType(yieldType) ||
|
|
nextType && isUnitType(nextType)) {
|
|
var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
|
|
var contextualType = !contextualSignature ? undefined :
|
|
contextualSignature === getSignatureFromDeclaration(func) ? isGenerator ? undefined : returnType :
|
|
instantiateContextualType(getReturnTypeOfSignature(contextualSignature), func, undefined);
|
|
if (isGenerator) {
|
|
yieldType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(yieldType, contextualType, 0, isAsync);
|
|
returnType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(returnType, contextualType, 1, isAsync);
|
|
nextType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(nextType, contextualType, 2, isAsync);
|
|
}
|
|
else {
|
|
returnType = getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(returnType, contextualType, isAsync);
|
|
}
|
|
}
|
|
if (yieldType)
|
|
yieldType = getWidenedType(yieldType);
|
|
if (returnType)
|
|
returnType = getWidenedType(returnType);
|
|
if (nextType)
|
|
nextType = getWidenedType(nextType);
|
|
}
|
|
if (isGenerator) {
|
|
return createGeneratorReturnType(yieldType || neverType, returnType || fallbackReturnType, nextType || getContextualIterationType(2, func) || unknownType, isAsync);
|
|
}
|
|
else {
|
|
return isAsync
|
|
? createPromiseType(returnType || fallbackReturnType)
|
|
: returnType || fallbackReturnType;
|
|
}
|
|
}
|
|
function createGeneratorReturnType(yieldType, returnType, nextType, isAsyncGenerator) {
|
|
var resolver = isAsyncGenerator ? asyncIterationTypesResolver : syncIterationTypesResolver;
|
|
var globalGeneratorType = resolver.getGlobalGeneratorType(false);
|
|
yieldType = resolver.resolveIterationType(yieldType, undefined) || unknownType;
|
|
returnType = resolver.resolveIterationType(returnType, undefined) || unknownType;
|
|
nextType = resolver.resolveIterationType(nextType, undefined) || unknownType;
|
|
if (globalGeneratorType === emptyGenericType) {
|
|
var globalType = resolver.getGlobalIterableIteratorType(false);
|
|
var iterationTypes = globalType !== emptyGenericType ? getIterationTypesOfGlobalIterableType(globalType, resolver) : undefined;
|
|
var iterableIteratorReturnType = iterationTypes ? iterationTypes.returnType : anyType;
|
|
var iterableIteratorNextType = iterationTypes ? iterationTypes.nextType : undefinedType;
|
|
if (isTypeAssignableTo(returnType, iterableIteratorReturnType) &&
|
|
isTypeAssignableTo(iterableIteratorNextType, nextType)) {
|
|
if (globalType !== emptyGenericType) {
|
|
return createTypeFromGenericGlobalType(globalType, [yieldType]);
|
|
}
|
|
resolver.getGlobalIterableIteratorType(true);
|
|
return emptyObjectType;
|
|
}
|
|
resolver.getGlobalGeneratorType(true);
|
|
return emptyObjectType;
|
|
}
|
|
return createTypeFromGenericGlobalType(globalGeneratorType, [yieldType, returnType, nextType]);
|
|
}
|
|
function checkAndAggregateYieldOperandTypes(func, checkMode) {
|
|
var yieldTypes = [];
|
|
var nextTypes = [];
|
|
var isAsync = (ts.getFunctionFlags(func) & 2) !== 0;
|
|
ts.forEachYieldExpression(func.body, function (yieldExpression) {
|
|
var yieldExpressionType = yieldExpression.expression ? checkExpression(yieldExpression.expression, checkMode) : undefinedWideningType;
|
|
ts.pushIfUnique(yieldTypes, getYieldedTypeOfYieldExpression(yieldExpression, yieldExpressionType, anyType, isAsync));
|
|
var nextType;
|
|
if (yieldExpression.asteriskToken) {
|
|
var iterationTypes = getIterationTypesOfIterable(yieldExpressionType, isAsync ? 19 : 17, yieldExpression.expression);
|
|
nextType = iterationTypes && iterationTypes.nextType;
|
|
}
|
|
else {
|
|
nextType = getContextualType(yieldExpression, undefined);
|
|
}
|
|
if (nextType)
|
|
ts.pushIfUnique(nextTypes, nextType);
|
|
});
|
|
return { yieldTypes: yieldTypes, nextTypes: nextTypes };
|
|
}
|
|
function getYieldedTypeOfYieldExpression(node, expressionType, sentType, isAsync) {
|
|
var errorNode = node.expression || node;
|
|
var yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(isAsync ? 19 : 17, expressionType, sentType, errorNode) : 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 getNotEqualFactsFromTypeofSwitch(start, end, witnesses) {
|
|
var facts = 0;
|
|
for (var i = 0; i < witnesses.length; i++) {
|
|
var witness = i < start || i >= end ? witnesses[i] : undefined;
|
|
facts |= witness !== undefined ? typeofNEFacts.get(witness) || 32768 : 0;
|
|
}
|
|
return facts;
|
|
}
|
|
function isExhaustiveSwitchStatement(node) {
|
|
var links = getNodeLinks(node);
|
|
return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
|
|
}
|
|
function computeExhaustiveSwitchStatement(node) {
|
|
if (node.expression.kind === 216) {
|
|
var witnesses = getSwitchClauseTypeOfWitnesses(node);
|
|
if (!witnesses) {
|
|
return false;
|
|
}
|
|
var operandConstraint = getBaseConstraintOrType(getTypeOfExpression(node.expression.expression));
|
|
var notEqualFacts_2 = getNotEqualFactsFromTypeofSwitch(0, 0, witnesses);
|
|
if (operandConstraint.flags & 3) {
|
|
return (556800 & notEqualFacts_2) === 556800;
|
|
}
|
|
return !someType(operandConstraint, function (t) { return (getTypeFacts(t) & notEqualFacts_2) === notEqualFacts_2; });
|
|
}
|
|
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) {
|
|
return func.endFlowNode && isReachableFlowNode(func.endFlowNode);
|
|
}
|
|
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 && checkMode & ~8);
|
|
if (functionFlags & 2) {
|
|
type = unwrapAwaitedType(checkAwaitedType(type, false, 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 & 131072) {
|
|
hasReturnOfTypeNever = true;
|
|
}
|
|
ts.pushIfUnique(aggregatedTypes, type);
|
|
}
|
|
else {
|
|
hasReturnWithNoExpression = true;
|
|
}
|
|
});
|
|
if (aggregatedTypes.length === 0 && !hasReturnWithNoExpression && (hasReturnOfTypeNever || mayReturnNever(func))) {
|
|
return undefined;
|
|
}
|
|
if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression &&
|
|
!(isJSConstructor(func) && aggregatedTypes.some(function (t) { return t.symbol === func.symbol; }))) {
|
|
ts.pushIfUnique(aggregatedTypes, undefinedType);
|
|
}
|
|
return aggregatedTypes;
|
|
}
|
|
function mayReturnNever(func) {
|
|
switch (func.kind) {
|
|
case 213:
|
|
case 214:
|
|
return true;
|
|
case 169:
|
|
return func.parent.kind === 205;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) {
|
|
addLazyDiagnostic(checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics);
|
|
return;
|
|
function checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics() {
|
|
var functionFlags = ts.getFunctionFlags(func);
|
|
var type = returnType && unwrapReturnType(returnType, functionFlags);
|
|
if (type && maybeTypeOfKind(type, 1 | 16384)) {
|
|
return;
|
|
}
|
|
if (func.kind === 168 || ts.nodeIsMissing(func.body) || func.body.kind !== 235 || !functionHasImplicitReturn(func)) {
|
|
return;
|
|
}
|
|
var hasExplicitReturn = func.flags & 512;
|
|
var errorNode = ts.getEffectiveReturnTypeNode(func) || func;
|
|
if (type && type.flags & 131072) {
|
|
error(errorNode, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point);
|
|
}
|
|
else if (type && !hasExplicitReturn) {
|
|
error(errorNode, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value);
|
|
}
|
|
else if (type && strictNullChecks && !isTypeAssignableTo(undefinedType, type)) {
|
|
error(errorNode, ts.Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined);
|
|
}
|
|
else if (compilerOptions.noImplicitReturns) {
|
|
if (!type) {
|
|
if (!hasExplicitReturn) {
|
|
return;
|
|
}
|
|
var inferredReturnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
|
|
if (isUnwrappedReturnTypeVoidOrAny(func, inferredReturnType)) {
|
|
return;
|
|
}
|
|
}
|
|
error(errorNode, ts.Diagnostics.Not_all_code_paths_return_a_value);
|
|
}
|
|
}
|
|
}
|
|
function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
|
|
ts.Debug.assert(node.kind !== 169 || ts.isObjectLiteralMethod(node));
|
|
checkNodeDeferred(node);
|
|
if (ts.isFunctionExpression(node)) {
|
|
checkCollisionsForDeclarationName(node, node.name);
|
|
}
|
|
if (checkMode && checkMode & 4 && isContextSensitive(node)) {
|
|
if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
|
|
var contextualSignature = getContextualSignature(node);
|
|
if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
|
|
var links = getNodeLinks(node);
|
|
if (links.contextFreeType) {
|
|
return links.contextFreeType;
|
|
}
|
|
var returnType = getReturnTypeFromBody(node, checkMode);
|
|
var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, undefined, 0, 0);
|
|
var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
|
|
returnOnlyType.objectFlags |= 262144;
|
|
return links.contextFreeType = returnOnlyType;
|
|
}
|
|
}
|
|
return anyFunctionType;
|
|
}
|
|
var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
|
|
if (!hasGrammarError && node.kind === 213) {
|
|
checkGrammarForGenerator(node);
|
|
}
|
|
contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
|
|
return getTypeOfSymbol(getSymbolOfNode(node));
|
|
}
|
|
function contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
|
|
var links = getNodeLinks(node);
|
|
if (!(links.flags & 1024)) {
|
|
var contextualSignature = getContextualSignature(node);
|
|
if (!(links.flags & 1024)) {
|
|
links.flags |= 1024;
|
|
var signature = ts.firstOrUndefined(getSignaturesOfType(getTypeOfSymbol(getSymbolOfNode(node)), 0));
|
|
if (!signature) {
|
|
return;
|
|
}
|
|
if (isContextSensitive(node)) {
|
|
if (contextualSignature) {
|
|
var inferenceContext = getInferenceContext(node);
|
|
var instantiatedContextualSignature = void 0;
|
|
if (checkMode && checkMode & 2) {
|
|
inferFromAnnotatedParameters(signature, contextualSignature, inferenceContext);
|
|
var restType = getEffectiveRestType(contextualSignature);
|
|
if (restType && restType.flags & 262144) {
|
|
instantiatedContextualSignature = instantiateSignature(contextualSignature, inferenceContext.nonFixingMapper);
|
|
}
|
|
}
|
|
instantiatedContextualSignature || (instantiatedContextualSignature = inferenceContext ?
|
|
instantiateSignature(contextualSignature, inferenceContext.mapper) : contextualSignature);
|
|
assignContextualParameterTypes(signature, instantiatedContextualSignature);
|
|
}
|
|
else {
|
|
assignNonContextualParameterTypes(signature);
|
|
}
|
|
}
|
|
if (contextualSignature && !getReturnTypeFromAnnotation(node) && !signature.resolvedReturnType) {
|
|
var returnType = getReturnTypeFromBody(node, checkMode);
|
|
if (!signature.resolvedReturnType) {
|
|
signature.resolvedReturnType = returnType;
|
|
}
|
|
}
|
|
checkSignatureDeclaration(node);
|
|
}
|
|
}
|
|
}
|
|
function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
|
|
ts.Debug.assert(node.kind !== 169 || ts.isObjectLiteralMethod(node));
|
|
var functionFlags = ts.getFunctionFlags(node);
|
|
var returnType = getReturnTypeFromAnnotation(node);
|
|
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
|
|
if (node.body) {
|
|
if (!ts.getEffectiveReturnTypeNode(node)) {
|
|
getReturnTypeOfSignature(getSignatureFromDeclaration(node));
|
|
}
|
|
if (node.body.kind === 235) {
|
|
checkSourceElement(node.body);
|
|
}
|
|
else {
|
|
var exprType = checkExpression(node.body);
|
|
var returnOrPromisedType = returnType && unwrapReturnType(returnType, functionFlags);
|
|
if (returnOrPromisedType) {
|
|
if ((functionFlags & 3) === 2) {
|
|
var awaitedType = checkAwaitedType(exprType, false, 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);
|
|
checkTypeAssignableToAndOptionallyElaborate(awaitedType, returnOrPromisedType, node.body, node.body);
|
|
}
|
|
else {
|
|
checkTypeAssignableToAndOptionallyElaborate(exprType, returnOrPromisedType, node.body, node.body);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkArithmeticOperandType(operand, type, diagnostic, isAwaitValid) {
|
|
if (isAwaitValid === void 0) { isAwaitValid = false; }
|
|
if (!isTypeAssignableTo(type, numberOrBigIntType)) {
|
|
var awaitedType = isAwaitValid && getAwaitedTypeOfPromise(type);
|
|
errorAndMaybeSuggestAwait(operand, !!awaitedType && isTypeAssignableTo(awaitedType, numberOrBigIntType), diagnostic);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function isReadonlyAssignmentDeclaration(d) {
|
|
if (!ts.isCallExpression(d)) {
|
|
return false;
|
|
}
|
|
if (!ts.isBindableObjectDefinePropertyCall(d)) {
|
|
return false;
|
|
}
|
|
var objectLitType = checkExpressionCached(d.arguments[2]);
|
|
var valueType = getTypeOfPropertyOfType(objectLitType, "value");
|
|
if (valueType) {
|
|
var writableProp = getPropertyOfType(objectLitType, "writable");
|
|
var writableType = writableProp && getTypeOfSymbol(writableProp);
|
|
if (!writableType || writableType === falseType || writableType === regularFalseType) {
|
|
return true;
|
|
}
|
|
if (writableProp && writableProp.valueDeclaration && ts.isPropertyAssignment(writableProp.valueDeclaration)) {
|
|
var initializer = writableProp.valueDeclaration.initializer;
|
|
var rawOriginalType = checkExpression(initializer);
|
|
if (rawOriginalType === falseType || rawOriginalType === regularFalseType) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
var setProp = getPropertyOfType(objectLitType, "set");
|
|
return !setProp;
|
|
}
|
|
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 ||
|
|
ts.some(symbol.declarations, isReadonlyAssignmentDeclaration));
|
|
}
|
|
function isAssignmentToReadonlyEntity(expr, symbol, assignmentKind) {
|
|
var _a, _b;
|
|
if (assignmentKind === 0) {
|
|
return false;
|
|
}
|
|
if (isReadonlySymbol(symbol)) {
|
|
if (symbol.flags & 4 &&
|
|
ts.isAccessExpression(expr) &&
|
|
expr.expression.kind === 108) {
|
|
var ctor = ts.getContainingFunction(expr);
|
|
if (!(ctor && (ctor.kind === 171 || isJSConstructor(ctor)))) {
|
|
return true;
|
|
}
|
|
if (symbol.valueDeclaration) {
|
|
var isAssignmentDeclaration_1 = ts.isBinaryExpression(symbol.valueDeclaration);
|
|
var isLocalPropertyDeclaration = ctor.parent === symbol.valueDeclaration.parent;
|
|
var isLocalParameterProperty = ctor === symbol.valueDeclaration.parent;
|
|
var isLocalThisPropertyAssignment = isAssignmentDeclaration_1 && ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) === ctor.parent;
|
|
var isLocalThisPropertyAssignmentConstructorFunction = isAssignmentDeclaration_1 && ((_b = symbol.parent) === null || _b === void 0 ? void 0 : _b.valueDeclaration) === ctor;
|
|
var isWriteableSymbol = isLocalPropertyDeclaration
|
|
|| isLocalParameterProperty
|
|
|| isLocalThisPropertyAssignment
|
|
|| isLocalThisPropertyAssignmentConstructorFunction;
|
|
return !isWriteableSymbol;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
if (ts.isAccessExpression(expr)) {
|
|
var node = ts.skipParentheses(expr.expression);
|
|
if (node.kind === 79) {
|
|
var symbol_2 = getNodeLinks(node).resolvedSymbol;
|
|
if (symbol_2.flags & 2097152) {
|
|
var declaration = getDeclarationOfAliasSymbol(symbol_2);
|
|
return !!declaration && declaration.kind === 268;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
|
|
var node = ts.skipOuterExpressions(expr, 6 | 1);
|
|
if (node.kind !== 79 && !ts.isAccessExpression(node)) {
|
|
error(expr, invalidReferenceMessage);
|
|
return false;
|
|
}
|
|
if (node.flags & 32) {
|
|
error(expr, invalidOptionalChainMessage);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function checkDeleteExpression(node) {
|
|
checkExpression(node.expression);
|
|
var expr = ts.skipParentheses(node.expression);
|
|
if (!ts.isAccessExpression(expr)) {
|
|
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference);
|
|
return booleanType;
|
|
}
|
|
if (ts.isPropertyAccessExpression(expr) && ts.isPrivateIdentifier(expr.name)) {
|
|
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_private_identifier);
|
|
}
|
|
var links = getNodeLinks(expr);
|
|
var symbol = getExportSymbolOfValueSymbolIfExported(links.resolvedSymbol);
|
|
if (symbol) {
|
|
if (isReadonlySymbol(symbol)) {
|
|
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
|
|
}
|
|
checkDeleteExpressionMustBeOptional(expr, symbol);
|
|
}
|
|
return booleanType;
|
|
}
|
|
function checkDeleteExpressionMustBeOptional(expr, symbol) {
|
|
var type = getTypeOfSymbol(symbol);
|
|
if (strictNullChecks &&
|
|
!(type.flags & (3 | 131072)) &&
|
|
!(exactOptionalPropertyTypes ? symbol.flags & 16777216 : getTypeFacts(type) & 16777216)) {
|
|
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
|
|
}
|
|
}
|
|
function checkTypeOfExpression(node) {
|
|
checkExpression(node.expression);
|
|
return typeofType;
|
|
}
|
|
function checkVoidExpression(node) {
|
|
checkExpression(node.expression);
|
|
return undefinedWideningType;
|
|
}
|
|
function checkAwaitExpressionGrammar(node) {
|
|
var container = ts.getContainingFunctionOrClassStaticBlock(node);
|
|
if (container && ts.isClassStaticBlockDeclaration(container)) {
|
|
error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
|
|
}
|
|
else if (!(node.flags & 32768)) {
|
|
if (ts.isInTopLevelContext(node)) {
|
|
var sourceFile = ts.getSourceFileOfNode(node);
|
|
if (!hasParseDiagnostics(sourceFile)) {
|
|
var span = void 0;
|
|
if (!ts.isEffectiveExternalModule(sourceFile, compilerOptions)) {
|
|
span !== null && span !== void 0 ? span : (span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos));
|
|
var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module);
|
|
diagnostics.add(diagnostic);
|
|
}
|
|
switch (moduleKind) {
|
|
case ts.ModuleKind.Node16:
|
|
case ts.ModuleKind.NodeNext:
|
|
if (sourceFile.impliedNodeFormat === ts.ModuleKind.CommonJS) {
|
|
span !== null && span !== void 0 ? span : (span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos));
|
|
diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));
|
|
break;
|
|
}
|
|
case ts.ModuleKind.ES2022:
|
|
case ts.ModuleKind.ESNext:
|
|
case ts.ModuleKind.System:
|
|
if (languageVersion >= 4) {
|
|
break;
|
|
}
|
|
default:
|
|
span !== null && span !== void 0 ? span : (span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos));
|
|
diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var sourceFile = ts.getSourceFileOfNode(node);
|
|
if (!hasParseDiagnostics(sourceFile)) {
|
|
var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
|
|
var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
|
|
if (container && container.kind !== 171 && (ts.getFunctionFlags(container) & 2) === 0) {
|
|
var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
|
|
ts.addRelatedInfo(diagnostic, relatedInfo);
|
|
}
|
|
diagnostics.add(diagnostic);
|
|
}
|
|
}
|
|
}
|
|
if (isInParameterInitializerBeforeContainingFunction(node)) {
|
|
error(node, ts.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer);
|
|
}
|
|
}
|
|
function checkAwaitExpression(node) {
|
|
addLazyDiagnostic(function () { return checkAwaitExpressionGrammar(node); });
|
|
var operandType = checkExpression(node.expression);
|
|
var awaitedType = checkAwaitedType(operandType, true, node, ts.Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
|
|
if (awaitedType === operandType && !isErrorType(awaitedType) && !(operandType.flags & 3)) {
|
|
addErrorOrSuggestion(false, ts.createDiagnosticForNode(node, ts.Diagnostics.await_has_no_effect_on_the_type_of_this_expression));
|
|
}
|
|
return awaitedType;
|
|
}
|
|
function checkPrefixUnaryExpression(node) {
|
|
var operandType = checkExpression(node.operand);
|
|
if (operandType === silentNeverType) {
|
|
return silentNeverType;
|
|
}
|
|
switch (node.operand.kind) {
|
|
case 8:
|
|
switch (node.operator) {
|
|
case 40:
|
|
return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
|
|
case 39:
|
|
return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
|
|
}
|
|
break;
|
|
case 9:
|
|
if (node.operator === 40) {
|
|
return getFreshTypeOfLiteralType(getBigIntLiteralType({
|
|
negative: true,
|
|
base10Value: ts.parsePseudoBigInt(node.operand.text)
|
|
}));
|
|
}
|
|
}
|
|
switch (node.operator) {
|
|
case 39:
|
|
case 40:
|
|
case 54:
|
|
checkNonNullType(operandType, node.operand);
|
|
if (maybeTypeOfKindConsideringBaseConstraint(operandType, 12288)) {
|
|
error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
|
|
}
|
|
if (node.operator === 39) {
|
|
if (maybeTypeOfKindConsideringBaseConstraint(operandType, 2112)) {
|
|
error(node.operand, ts.Diagnostics.Operator_0_cannot_be_applied_to_type_1, ts.tokenToString(node.operator), typeToString(getBaseTypeOfLiteralType(operandType)));
|
|
}
|
|
return numberType;
|
|
}
|
|
return getUnaryResultType(operandType);
|
|
case 53:
|
|
checkTruthinessExpression(node.operand);
|
|
var facts = getTypeFacts(operandType) & (4194304 | 8388608);
|
|
return facts === 4194304 ? falseType :
|
|
facts === 8388608 ? trueType :
|
|
booleanType;
|
|
case 45:
|
|
case 46:
|
|
var ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_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, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access);
|
|
}
|
|
return getUnaryResultType(operandType);
|
|
}
|
|
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_bigint_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, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access);
|
|
}
|
|
return getUnaryResultType(operandType);
|
|
}
|
|
function getUnaryResultType(operandType) {
|
|
if (maybeTypeOfKind(operandType, 2112)) {
|
|
return isTypeAssignableToKind(operandType, 3) || maybeTypeOfKind(operandType, 296)
|
|
? numberOrBigIntType
|
|
: bigintType;
|
|
}
|
|
return numberType;
|
|
}
|
|
function maybeTypeOfKindConsideringBaseConstraint(type, kind) {
|
|
if (maybeTypeOfKind(type, kind)) {
|
|
return true;
|
|
}
|
|
var baseConstraint = getBaseConstraintOrType(type);
|
|
return !!baseConstraint && maybeTypeOfKind(baseConstraint, kind);
|
|
}
|
|
function maybeTypeOfKind(type, kind) {
|
|
if (type.flags & kind) {
|
|
return true;
|
|
}
|
|
if (type.flags & 3145728) {
|
|
var types = type.types;
|
|
for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
|
|
var t = types_20[_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 | 16384 | 32768 | 65536)) {
|
|
return false;
|
|
}
|
|
return !!(kind & 296) && isTypeAssignableTo(source, numberType) ||
|
|
!!(kind & 2112) && isTypeAssignableTo(source, bigintType) ||
|
|
!!(kind & 402653316) && isTypeAssignableTo(source, stringType) ||
|
|
!!(kind & 528) && isTypeAssignableTo(source, booleanType) ||
|
|
!!(kind & 16384) && isTypeAssignableTo(source, voidType) ||
|
|
!!(kind & 131072) && isTypeAssignableTo(source, neverType) ||
|
|
!!(kind & 65536) && isTypeAssignableTo(source, nullType) ||
|
|
!!(kind & 32768) && isTypeAssignableTo(source, undefinedType) ||
|
|
!!(kind & 4096) && isTypeAssignableTo(source, esSymbolType) ||
|
|
!!(kind & 67108864) && isTypeAssignableTo(source, nonPrimitiveType);
|
|
}
|
|
function allTypesAssignableToKind(source, kind, strict) {
|
|
return source.flags & 1048576 ?
|
|
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, 131068)) {
|
|
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;
|
|
}
|
|
if (ts.isPrivateIdentifier(left)) {
|
|
if (languageVersion < 99) {
|
|
checkExternalEmitHelpers(left, 2097152);
|
|
}
|
|
if (!getNodeLinks(left).resolvedSymbol && ts.getContainingClass(left)) {
|
|
var isUncheckedJS = isUncheckedJSSuggestion(left, rightType.symbol, true);
|
|
reportNonexistentProperty(left, rightType, isUncheckedJS);
|
|
}
|
|
}
|
|
else {
|
|
leftType = checkNonNullType(leftType, left);
|
|
if (!(allTypesAssignableToKind(leftType, 402653316 | 296 | 12288) ||
|
|
isTypeAssignableToKind(leftType, 4194304 | 134217728 | 268435456 | 262144))) {
|
|
error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_a_private_identifier_or_of_type_any_string_number_or_symbol);
|
|
}
|
|
}
|
|
rightType = checkNonNullType(rightType, right);
|
|
var rightTypeConstraint = getConstraintOfType(rightType);
|
|
if (!allTypesAssignableToKind(rightType, 67108864 | 58982400) ||
|
|
rightTypeConstraint && (isTypeAssignableToKind(rightType, 3145728) && !allTypesAssignableToKind(rightTypeConstraint, 67108864 | 58982400) ||
|
|
!maybeTypeOfKind(rightTypeConstraint, 67108864 | 58982400 | 524288))) {
|
|
error(right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_not_be_a_primitive);
|
|
}
|
|
return booleanType;
|
|
}
|
|
function checkObjectLiteralAssignment(node, sourceType, rightIsThis) {
|
|
var properties = node.properties;
|
|
if (strictNullChecks && properties.length === 0) {
|
|
return checkNonNullType(sourceType, node);
|
|
}
|
|
for (var i = 0; i < properties.length; i++) {
|
|
checkObjectLiteralDestructuringPropertyAssignment(node, sourceType, i, properties, rightIsThis);
|
|
}
|
|
return sourceType;
|
|
}
|
|
function checkObjectLiteralDestructuringPropertyAssignment(node, objectLiteralType, propertyIndex, allProperties, rightIsThis) {
|
|
if (rightIsThis === void 0) { rightIsThis = false; }
|
|
var properties = node.properties;
|
|
var property = properties[propertyIndex];
|
|
if (property.kind === 296 || property.kind === 297) {
|
|
var name = property.name;
|
|
var exprType = getLiteralTypeFromPropertyName(name);
|
|
if (isTypeUsableAsPropertyName(exprType)) {
|
|
var text = getPropertyNameFromType(exprType);
|
|
var prop = getPropertyOfType(objectLiteralType, text);
|
|
if (prop) {
|
|
markPropertyAsReferenced(prop, property, rightIsThis);
|
|
checkPropertyAccessibility(property, false, true, objectLiteralType, prop);
|
|
}
|
|
}
|
|
var elementType = getIndexedAccessType(objectLiteralType, exprType, 32, name);
|
|
var type = getFlowTypeOfDestructuring(property, elementType);
|
|
return checkDestructuringAssignment(property.kind === 297 ? property : property.initializer, type);
|
|
}
|
|
else if (property.kind === 298) {
|
|
if (propertyIndex < properties.length - 1) {
|
|
error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
|
|
}
|
|
else {
|
|
if (languageVersion < 99) {
|
|
checkExternalEmitHelpers(property, 4);
|
|
}
|
|
var nonRestNames = [];
|
|
if (allProperties) {
|
|
for (var _i = 0, allProperties_1 = allProperties; _i < allProperties_1.length; _i++) {
|
|
var otherProperty = allProperties_1[_i];
|
|
if (!ts.isSpreadAssignment(otherProperty)) {
|
|
nonRestNames.push(otherProperty.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 possiblyOutOfBoundsType = checkIteratedTypeOrElementType(65 | 128, sourceType, undefinedType, node) || errorType;
|
|
var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
|
|
for (var i = 0; i < elements.length; i++) {
|
|
var type = possiblyOutOfBoundsType;
|
|
if (node.elements[i].kind === 225) {
|
|
type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65, sourceType, undefinedType, node) || errorType);
|
|
}
|
|
checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
|
|
}
|
|
return sourceType;
|
|
}
|
|
function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
|
|
var elements = node.elements;
|
|
var element = elements[elementIndex];
|
|
if (element.kind !== 227) {
|
|
if (element.kind !== 225) {
|
|
var indexType = getNumberLiteralType(elementIndex);
|
|
if (isArrayLikeType(sourceType)) {
|
|
var accessFlags = 32 | (hasDefaultValue(element) ? 16 : 0);
|
|
var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
|
|
var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288) : elementType_2;
|
|
var type = getFlowTypeOfDestructuring(element, assignedType);
|
|
return checkDestructuringAssignment(element, type, checkMode);
|
|
}
|
|
return checkDestructuringAssignment(element, elementType, checkMode);
|
|
}
|
|
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 === 221 && restExpression.operatorToken.kind === 63) {
|
|
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);
|
|
var type = everyType(sourceType, isTupleType) ?
|
|
mapType(sourceType, function (t) { return sliceTupleType(t, elementIndex); }) :
|
|
createArrayType(elementType);
|
|
return checkDestructuringAssignment(restExpression, type, checkMode);
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
|
|
var target;
|
|
if (exprOrAssignment.kind === 297) {
|
|
var prop = exprOrAssignment;
|
|
if (prop.objectAssignmentInitializer) {
|
|
if (strictNullChecks &&
|
|
!(getTypeFacts(checkExpression(prop.objectAssignmentInitializer)) & 16777216)) {
|
|
sourceType = getTypeWithFacts(sourceType, 524288);
|
|
}
|
|
checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, checkMode);
|
|
}
|
|
target = exprOrAssignment.name;
|
|
}
|
|
else {
|
|
target = exprOrAssignment;
|
|
}
|
|
if (target.kind === 221 && target.operatorToken.kind === 63) {
|
|
checkBinaryExpression(target, checkMode);
|
|
target = target.left;
|
|
if (strictNullChecks) {
|
|
sourceType = getTypeWithFacts(sourceType, 524288);
|
|
}
|
|
}
|
|
if (target.kind === 205) {
|
|
return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
|
|
}
|
|
if (target.kind === 204) {
|
|
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 === 298 ?
|
|
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;
|
|
var optionalError = target.parent.kind === 298 ?
|
|
ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
|
|
ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
|
|
if (checkReferenceExpression(target, error, optionalError)) {
|
|
checkTypeAssignableToAndOptionallyElaborate(sourceType, targetType, target, target);
|
|
}
|
|
if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
|
|
checkExternalEmitHelpers(target.parent, 1048576);
|
|
}
|
|
return sourceType;
|
|
}
|
|
function isSideEffectFree(node) {
|
|
node = ts.skipParentheses(node);
|
|
switch (node.kind) {
|
|
case 79:
|
|
case 10:
|
|
case 13:
|
|
case 210:
|
|
case 223:
|
|
case 14:
|
|
case 8:
|
|
case 9:
|
|
case 110:
|
|
case 95:
|
|
case 104:
|
|
case 153:
|
|
case 213:
|
|
case 226:
|
|
case 214:
|
|
case 204:
|
|
case 205:
|
|
case 216:
|
|
case 230:
|
|
case 279:
|
|
case 278:
|
|
return true;
|
|
case 222:
|
|
return isSideEffectFree(node.whenTrue) &&
|
|
isSideEffectFree(node.whenFalse);
|
|
case 221:
|
|
if (ts.isAssignmentOperator(node.operatorToken.kind)) {
|
|
return false;
|
|
}
|
|
return isSideEffectFree(node.left) &&
|
|
isSideEffectFree(node.right);
|
|
case 219:
|
|
case 220:
|
|
switch (node.operator) {
|
|
case 53:
|
|
case 39:
|
|
case 40:
|
|
case 54:
|
|
return true;
|
|
}
|
|
return false;
|
|
case 217:
|
|
case 211:
|
|
case 229:
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isTypeEqualityComparableTo(source, target) {
|
|
return (target.flags & 98304) !== 0 || isTypeComparableTo(source, target);
|
|
}
|
|
function createCheckBinaryExpression() {
|
|
var trampoline = ts.createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState);
|
|
return function (node, checkMode) {
|
|
var result = trampoline(node, checkMode);
|
|
ts.Debug.assertIsDefined(result);
|
|
return result;
|
|
};
|
|
function onEnter(node, state, checkMode) {
|
|
if (state) {
|
|
state.stackIndex++;
|
|
state.skip = false;
|
|
setLeftType(state, undefined);
|
|
setLastResult(state, undefined);
|
|
}
|
|
else {
|
|
state = {
|
|
checkMode: checkMode,
|
|
skip: false,
|
|
stackIndex: 0,
|
|
typeStack: [undefined, undefined],
|
|
};
|
|
}
|
|
if (ts.isInJSFile(node) && ts.getAssignedExpandoInitializer(node)) {
|
|
state.skip = true;
|
|
setLastResult(state, checkExpression(node.right, checkMode));
|
|
return state;
|
|
}
|
|
checkGrammarNullishCoalesceWithLogicalExpression(node);
|
|
var operator = node.operatorToken.kind;
|
|
if (operator === 63 && (node.left.kind === 205 || node.left.kind === 204)) {
|
|
state.skip = true;
|
|
setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108));
|
|
return state;
|
|
}
|
|
return state;
|
|
}
|
|
function onLeft(left, state, _node) {
|
|
if (!state.skip) {
|
|
return maybeCheckExpression(state, left);
|
|
}
|
|
}
|
|
function onOperator(operatorToken, state, node) {
|
|
if (!state.skip) {
|
|
var leftType = getLastResult(state);
|
|
ts.Debug.assertIsDefined(leftType);
|
|
setLeftType(state, leftType);
|
|
setLastResult(state, undefined);
|
|
var operator = operatorToken.kind;
|
|
if (operator === 55 || operator === 56 || operator === 60) {
|
|
if (operator === 55) {
|
|
var parent = node.parent;
|
|
while (parent.kind === 212
|
|
|| ts.isBinaryExpression(parent) && (parent.operatorToken.kind === 55 || parent.operatorToken.kind === 56)) {
|
|
parent = parent.parent;
|
|
}
|
|
checkTestingKnownTruthyCallableOrAwaitableType(node.left, ts.isIfStatement(parent) ? parent.thenStatement : undefined);
|
|
}
|
|
checkTruthinessOfType(leftType, node.left);
|
|
}
|
|
}
|
|
}
|
|
function onRight(right, state, _node) {
|
|
if (!state.skip) {
|
|
return maybeCheckExpression(state, right);
|
|
}
|
|
}
|
|
function onExit(node, state) {
|
|
var result;
|
|
if (state.skip) {
|
|
result = getLastResult(state);
|
|
}
|
|
else {
|
|
var leftType = getLeftType(state);
|
|
ts.Debug.assertIsDefined(leftType);
|
|
var rightType = getLastResult(state);
|
|
ts.Debug.assertIsDefined(rightType);
|
|
result = checkBinaryLikeExpressionWorker(node.left, node.operatorToken, node.right, leftType, rightType, node);
|
|
}
|
|
state.skip = false;
|
|
setLeftType(state, undefined);
|
|
setLastResult(state, undefined);
|
|
state.stackIndex--;
|
|
return result;
|
|
}
|
|
function foldState(state, result, _side) {
|
|
setLastResult(state, result);
|
|
return state;
|
|
}
|
|
function maybeCheckExpression(state, node) {
|
|
if (ts.isBinaryExpression(node)) {
|
|
return node;
|
|
}
|
|
setLastResult(state, checkExpression(node, state.checkMode));
|
|
}
|
|
function getLeftType(state) {
|
|
return state.typeStack[state.stackIndex];
|
|
}
|
|
function setLeftType(state, type) {
|
|
state.typeStack[state.stackIndex] = type;
|
|
}
|
|
function getLastResult(state) {
|
|
return state.typeStack[state.stackIndex + 1];
|
|
}
|
|
function setLastResult(state, type) {
|
|
state.typeStack[state.stackIndex + 1] = type;
|
|
}
|
|
}
|
|
function checkGrammarNullishCoalesceWithLogicalExpression(node) {
|
|
var left = node.left, operatorToken = node.operatorToken, right = node.right;
|
|
if (operatorToken.kind === 60) {
|
|
if (ts.isBinaryExpression(left) && (left.operatorToken.kind === 56 || left.operatorToken.kind === 55)) {
|
|
grammarErrorOnNode(left, ts.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, ts.tokenToString(left.operatorToken.kind), ts.tokenToString(operatorToken.kind));
|
|
}
|
|
if (ts.isBinaryExpression(right) && (right.operatorToken.kind === 56 || right.operatorToken.kind === 55)) {
|
|
grammarErrorOnNode(right, ts.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, ts.tokenToString(right.operatorToken.kind), ts.tokenToString(operatorToken.kind));
|
|
}
|
|
}
|
|
}
|
|
function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
|
|
var operator = operatorToken.kind;
|
|
if (operator === 63 && (left.kind === 205 || left.kind === 204)) {
|
|
return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108);
|
|
}
|
|
var leftType;
|
|
if (operator === 55 || operator === 56 || operator === 60) {
|
|
leftType = checkTruthinessExpression(left, checkMode);
|
|
}
|
|
else {
|
|
leftType = checkExpression(left, checkMode);
|
|
}
|
|
var rightType = checkExpression(right, checkMode);
|
|
return checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, errorNode);
|
|
}
|
|
function checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, errorNode) {
|
|
var operator = operatorToken.kind;
|
|
switch (operator) {
|
|
case 41:
|
|
case 42:
|
|
case 66:
|
|
case 67:
|
|
case 43:
|
|
case 68:
|
|
case 44:
|
|
case 69:
|
|
case 40:
|
|
case 65:
|
|
case 47:
|
|
case 70:
|
|
case 48:
|
|
case 71:
|
|
case 49:
|
|
case 72:
|
|
case 51:
|
|
case 74:
|
|
case 52:
|
|
case 78:
|
|
case 50:
|
|
case 73:
|
|
if (leftType === silentNeverType || rightType === silentNeverType) {
|
|
return silentNeverType;
|
|
}
|
|
leftType = checkNonNullType(leftType, left);
|
|
rightType = checkNonNullType(rightType, right);
|
|
var suggestedOperator = void 0;
|
|
if ((leftType.flags & 528) &&
|
|
(rightType.flags & 528) &&
|
|
(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));
|
|
return numberType;
|
|
}
|
|
else {
|
|
var leftOk = checkArithmeticOperandType(left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, true);
|
|
var rightOk = checkArithmeticOperandType(right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, true);
|
|
var resultType_1;
|
|
if ((isTypeAssignableToKind(leftType, 3) && isTypeAssignableToKind(rightType, 3)) ||
|
|
!(maybeTypeOfKind(leftType, 2112) || maybeTypeOfKind(rightType, 2112))) {
|
|
resultType_1 = numberType;
|
|
}
|
|
else if (bothAreBigIntLike(leftType, rightType)) {
|
|
switch (operator) {
|
|
case 49:
|
|
case 72:
|
|
reportOperatorError();
|
|
break;
|
|
case 42:
|
|
case 67:
|
|
if (languageVersion < 3) {
|
|
error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
|
|
}
|
|
}
|
|
resultType_1 = bigintType;
|
|
}
|
|
else {
|
|
reportOperatorError(bothAreBigIntLike);
|
|
resultType_1 = errorType;
|
|
}
|
|
if (leftOk && rightOk) {
|
|
checkAssignmentOperator(resultType_1);
|
|
}
|
|
return resultType_1;
|
|
}
|
|
case 39:
|
|
case 64:
|
|
if (leftType === silentNeverType || rightType === silentNeverType) {
|
|
return silentNeverType;
|
|
}
|
|
if (!isTypeAssignableToKind(leftType, 402653316) && !isTypeAssignableToKind(rightType, 402653316)) {
|
|
leftType = checkNonNullType(leftType, left);
|
|
rightType = checkNonNullType(rightType, right);
|
|
}
|
|
var resultType = void 0;
|
|
if (isTypeAssignableToKind(leftType, 296, true) && isTypeAssignableToKind(rightType, 296, true)) {
|
|
resultType = numberType;
|
|
}
|
|
else if (isTypeAssignableToKind(leftType, 2112, true) && isTypeAssignableToKind(rightType, 2112, true)) {
|
|
resultType = bigintType;
|
|
}
|
|
else if (isTypeAssignableToKind(leftType, 402653316, true) || isTypeAssignableToKind(rightType, 402653316, true)) {
|
|
resultType = stringType;
|
|
}
|
|
else if (isTypeAny(leftType) || isTypeAny(rightType)) {
|
|
resultType = isErrorType(leftType) || isErrorType(rightType) ? errorType : anyType;
|
|
}
|
|
if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
|
|
return resultType;
|
|
}
|
|
if (!resultType) {
|
|
var closeEnoughKind_1 = 296 | 2112 | 402653316 | 3;
|
|
reportOperatorError(function (left, right) {
|
|
return isTypeAssignableToKind(left, closeEnoughKind_1) &&
|
|
isTypeAssignableToKind(right, closeEnoughKind_1);
|
|
});
|
|
return anyType;
|
|
}
|
|
if (operator === 64) {
|
|
checkAssignmentOperator(resultType);
|
|
}
|
|
return resultType;
|
|
case 29:
|
|
case 31:
|
|
case 32:
|
|
case 33:
|
|
if (checkForDisallowedESSymbolOperand(operator)) {
|
|
leftType = getBaseTypeOfLiteralType(checkNonNullType(leftType, left));
|
|
rightType = getBaseTypeOfLiteralType(checkNonNullType(rightType, right));
|
|
reportOperatorErrorUnless(function (left, right) {
|
|
return isTypeComparableTo(left, right) || isTypeComparableTo(right, left) || (isTypeAssignableTo(left, numberOrBigIntType) && isTypeAssignableTo(right, numberOrBigIntType));
|
|
});
|
|
}
|
|
return booleanType;
|
|
case 34:
|
|
case 35:
|
|
case 36:
|
|
case 37:
|
|
if (ts.isLiteralExpressionOfObject(left) || ts.isLiteralExpressionOfObject(right)) {
|
|
var eqType = operator === 34 || operator === 36;
|
|
error(errorNode, ts.Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value, eqType ? "false" : "true");
|
|
}
|
|
reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
|
|
return booleanType;
|
|
case 102:
|
|
return checkInstanceOfExpression(left, right, leftType, rightType);
|
|
case 101:
|
|
return checkInExpression(left, right, leftType, rightType);
|
|
case 55:
|
|
case 76: {
|
|
var resultType_2 = getTypeFacts(leftType) & 4194304 ?
|
|
getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
|
|
leftType;
|
|
if (operator === 76) {
|
|
checkAssignmentOperator(rightType);
|
|
}
|
|
return resultType_2;
|
|
}
|
|
case 56:
|
|
case 75: {
|
|
var resultType_3 = getTypeFacts(leftType) & 8388608 ?
|
|
getUnionType([getNonNullableType(removeDefinitelyFalsyTypes(leftType)), rightType], 2) :
|
|
leftType;
|
|
if (operator === 75) {
|
|
checkAssignmentOperator(rightType);
|
|
}
|
|
return resultType_3;
|
|
}
|
|
case 60:
|
|
case 77: {
|
|
var resultType_4 = getTypeFacts(leftType) & 262144 ?
|
|
getUnionType([getNonNullableType(leftType), rightType], 2) :
|
|
leftType;
|
|
if (operator === 77) {
|
|
checkAssignmentOperator(rightType);
|
|
}
|
|
return resultType_4;
|
|
}
|
|
case 63:
|
|
var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0;
|
|
checkAssignmentDeclaration(declKind, rightType);
|
|
if (isAssignmentDeclaration(declKind)) {
|
|
if (!(rightType.flags & 524288) ||
|
|
declKind !== 2 &&
|
|
declKind !== 6 &&
|
|
!isEmptyObjectType(rightType) &&
|
|
!isFunctionObjectType(rightType) &&
|
|
!(ts.getObjectFlags(rightType) & 1)) {
|
|
checkAssignmentOperator(rightType);
|
|
}
|
|
return leftType;
|
|
}
|
|
else {
|
|
checkAssignmentOperator(rightType);
|
|
return getRegularTypeOfObjectLiteral(rightType);
|
|
}
|
|
case 27:
|
|
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isEvalNode(right)) {
|
|
var sf = ts.getSourceFileOfNode(left);
|
|
var sourceText = sf.text;
|
|
var start_3 = ts.skipTrivia(sourceText, left.pos);
|
|
var isInDiag2657 = sf.parseDiagnostics.some(function (diag) {
|
|
if (diag.code !== ts.Diagnostics.JSX_expressions_must_have_one_parent_element.code)
|
|
return false;
|
|
return ts.textSpanContainsPosition(diag, start_3);
|
|
});
|
|
if (!isInDiag2657)
|
|
error(left, ts.Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects);
|
|
}
|
|
return rightType;
|
|
default:
|
|
return ts.Debug.fail();
|
|
}
|
|
function bothAreBigIntLike(left, right) {
|
|
return isTypeAssignableToKind(left, 2112) && isTypeAssignableToKind(right, 2112);
|
|
}
|
|
function checkAssignmentDeclaration(kind, rightType) {
|
|
if (kind === 2) {
|
|
for (var _i = 0, _a = getPropertiesOfObjectType(rightType); _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, 788968, undefined, name, false);
|
|
if ((symbol === null || symbol === void 0 ? void 0 : symbol.declarations) && symbol.declarations.some(ts.isJSDocTypedefTag)) {
|
|
addDuplicateDeclarationErrorsForSymbols(symbol, ts.Diagnostics.Duplicate_identifier_0, ts.unescapeLeadingUnderscores(name), prop);
|
|
addDuplicateDeclarationErrorsForSymbols(prop, ts.Diagnostics.Duplicate_identifier_0, ts.unescapeLeadingUnderscores(name), symbol);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isEvalNode(node) {
|
|
return node.kind === 79 && node.escapedText === "eval";
|
|
}
|
|
function checkForDisallowedESSymbolOperand(operator) {
|
|
var offendingSymbolOperand = maybeTypeOfKindConsideringBaseConstraint(leftType, 12288) ? left :
|
|
maybeTypeOfKindConsideringBaseConstraint(rightType, 12288) ? 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 51:
|
|
case 74:
|
|
return 56;
|
|
case 52:
|
|
case 78:
|
|
return 37;
|
|
case 50:
|
|
case 73:
|
|
return 55;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function checkAssignmentOperator(valueType) {
|
|
if (ts.isAssignmentOperator(operator)) {
|
|
addLazyDiagnostic(checkAssignmentOperatorWorker);
|
|
}
|
|
function checkAssignmentOperatorWorker() {
|
|
if (checkReferenceExpression(left, ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access, ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access)
|
|
&& (!ts.isIdentifier(left) || ts.unescapeLeadingUnderscores(left.escapedText) !== "exports")) {
|
|
var headMessage = void 0;
|
|
if (exactOptionalPropertyTypes && ts.isPropertyAccessExpression(left) && maybeTypeOfKind(valueType, 32768)) {
|
|
var target = getTypeOfPropertyOfType(getTypeOfExpression(left.expression), left.name.escapedText);
|
|
if (isExactOptionalPropertyMismatch(valueType, target)) {
|
|
headMessage = ts.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target;
|
|
}
|
|
}
|
|
checkTypeAssignableToAndOptionallyElaborate(valueType, leftType, left, right, headMessage);
|
|
}
|
|
}
|
|
}
|
|
function isAssignmentDeclaration(kind) {
|
|
var _a;
|
|
switch (kind) {
|
|
case 2:
|
|
return true;
|
|
case 1:
|
|
case 5:
|
|
case 6:
|
|
case 3:
|
|
case 4:
|
|
var symbol = getSymbolOfNode(left);
|
|
var init = ts.getAssignedExpandoInitializer(right);
|
|
return !!init && ts.isObjectLiteralExpression(init) &&
|
|
!!((_a = symbol === null || symbol === void 0 ? void 0 : symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function reportOperatorErrorUnless(typesAreCompatible) {
|
|
if (!typesAreCompatible(leftType, rightType)) {
|
|
reportOperatorError(typesAreCompatible);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function reportOperatorError(isRelated) {
|
|
var _a;
|
|
var wouldWorkWithAwait = false;
|
|
var errNode = errorNode || operatorToken;
|
|
if (isRelated) {
|
|
var awaitedLeftType = getAwaitedTypeNoAlias(leftType);
|
|
var awaitedRightType = getAwaitedTypeNoAlias(rightType);
|
|
wouldWorkWithAwait = !(awaitedLeftType === leftType && awaitedRightType === rightType)
|
|
&& !!(awaitedLeftType && awaitedRightType)
|
|
&& isRelated(awaitedLeftType, awaitedRightType);
|
|
}
|
|
var effectiveLeft = leftType;
|
|
var effectiveRight = rightType;
|
|
if (!wouldWorkWithAwait && isRelated) {
|
|
_a = getBaseTypesIfUnrelated(leftType, rightType, isRelated), effectiveLeft = _a[0], effectiveRight = _a[1];
|
|
}
|
|
var _b = getTypeNamesForErrorDisplay(effectiveLeft, effectiveRight), leftStr = _b[0], rightStr = _b[1];
|
|
if (!tryGiveBetterPrimaryError(errNode, wouldWorkWithAwait, leftStr, rightStr)) {
|
|
errorAndMaybeSuggestAwait(errNode, wouldWorkWithAwait, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(operatorToken.kind), leftStr, rightStr);
|
|
}
|
|
}
|
|
function tryGiveBetterPrimaryError(errNode, maybeMissingAwait, leftStr, rightStr) {
|
|
var typeName;
|
|
switch (operatorToken.kind) {
|
|
case 36:
|
|
case 34:
|
|
typeName = "false";
|
|
break;
|
|
case 37:
|
|
case 35:
|
|
typeName = "true";
|
|
}
|
|
if (typeName) {
|
|
return errorAndMaybeSuggestAwait(errNode, maybeMissingAwait, ts.Diagnostics.This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap, typeName, leftStr, rightStr);
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function getBaseTypesIfUnrelated(leftType, rightType, isRelated) {
|
|
var effectiveLeft = leftType;
|
|
var effectiveRight = rightType;
|
|
var leftBase = getBaseTypeOfLiteralType(leftType);
|
|
var rightBase = getBaseTypeOfLiteralType(rightType);
|
|
if (!isRelated(leftBase, rightBase)) {
|
|
effectiveLeft = leftBase;
|
|
effectiveRight = rightBase;
|
|
}
|
|
return [effectiveLeft, effectiveRight];
|
|
}
|
|
function checkYieldExpression(node) {
|
|
addLazyDiagnostic(checkYieldExpressionGrammar);
|
|
var func = ts.getContainingFunction(node);
|
|
if (!func)
|
|
return anyType;
|
|
var functionFlags = ts.getFunctionFlags(func);
|
|
if (!(functionFlags & 1)) {
|
|
return anyType;
|
|
}
|
|
var isAsync = (functionFlags & 2) !== 0;
|
|
if (node.asteriskToken) {
|
|
if (isAsync && languageVersion < 99) {
|
|
checkExternalEmitHelpers(node, 26624);
|
|
}
|
|
if (!isAsync && languageVersion < 2 && compilerOptions.downlevelIteration) {
|
|
checkExternalEmitHelpers(node, 256);
|
|
}
|
|
}
|
|
var returnType = getReturnTypeFromAnnotation(func);
|
|
var iterationTypes = returnType && getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsync);
|
|
var signatureYieldType = iterationTypes && iterationTypes.yieldType || anyType;
|
|
var signatureNextType = iterationTypes && iterationTypes.nextType || anyType;
|
|
var resolvedSignatureNextType = isAsync ? getAwaitedType(signatureNextType) || anyType : signatureNextType;
|
|
var yieldExpressionType = node.expression ? checkExpression(node.expression) : undefinedWideningType;
|
|
var yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, resolvedSignatureNextType, isAsync);
|
|
if (returnType && yieldedType) {
|
|
checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureYieldType, node.expression || node, node.expression);
|
|
}
|
|
if (node.asteriskToken) {
|
|
var use = isAsync ? 19 : 17;
|
|
return getIterationTypeOfIterable(use, 1, yieldExpressionType, node.expression)
|
|
|| anyType;
|
|
}
|
|
else if (returnType) {
|
|
return getIterationTypeOfGeneratorFunctionReturnType(2, returnType, isAsync)
|
|
|| anyType;
|
|
}
|
|
var type = getContextualIterationType(2, func);
|
|
if (!type) {
|
|
type = anyType;
|
|
addLazyDiagnostic(function () {
|
|
if (noImplicitAny && !ts.expressionResultIsUnused(node)) {
|
|
var contextualType = getContextualType(node, undefined);
|
|
if (!contextualType || isTypeAny(contextualType)) {
|
|
error(node, ts.Diagnostics.yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return type;
|
|
function checkYieldExpressionGrammar() {
|
|
if (!(node.flags & 8192)) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
function checkConditionalExpression(node, checkMode) {
|
|
checkTruthinessExpression(node.condition);
|
|
checkTestingKnownTruthyCallableOrAwaitableType(node.condition, node.whenTrue);
|
|
var type1 = checkExpression(node.whenTrue, checkMode);
|
|
var type2 = checkExpression(node.whenFalse, checkMode);
|
|
return getUnionType([type1, type2], 2);
|
|
}
|
|
function isTemplateLiteralContext(node) {
|
|
var parent = node.parent;
|
|
return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
|
|
ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
|
|
}
|
|
function checkTemplateExpression(node) {
|
|
var texts = [node.head.text];
|
|
var types = [];
|
|
for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) {
|
|
var span = _a[_i];
|
|
var type = checkExpression(span.expression);
|
|
if (maybeTypeOfKindConsideringBaseConstraint(type, 12288)) {
|
|
error(span.expression, ts.Diagnostics.Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String);
|
|
}
|
|
texts.push(span.literal.text);
|
|
types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
|
|
}
|
|
return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node, undefined) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
|
|
}
|
|
function isTemplateLiteralContextualType(type) {
|
|
return !!(type.flags & (128 | 134217728) ||
|
|
type.flags & 58982400 && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316));
|
|
}
|
|
function getContextNode(node) {
|
|
if (node.kind === 286 && !ts.isJsxSelfClosingElement(node.parent)) {
|
|
return node.parent.parent;
|
|
}
|
|
return node;
|
|
}
|
|
function checkExpressionWithContextualType(node, contextualType, inferenceContext, checkMode) {
|
|
var context = getContextNode(node);
|
|
var saveContextualType = context.contextualType;
|
|
var saveInferenceContext = context.inferenceContext;
|
|
try {
|
|
context.contextualType = contextualType;
|
|
context.inferenceContext = inferenceContext;
|
|
var type = checkExpression(node, checkMode | 1 | (inferenceContext ? 2 : 0));
|
|
if (inferenceContext && inferenceContext.intraExpressionInferenceSites) {
|
|
inferenceContext.intraExpressionInferenceSites = undefined;
|
|
}
|
|
var result = maybeTypeOfKind(type, 2944) && isLiteralOfContextualType(type, instantiateContextualType(contextualType, node, undefined)) ?
|
|
getRegularTypeOfLiteralType(type) : type;
|
|
return result;
|
|
}
|
|
finally {
|
|
context.contextualType = saveContextualType;
|
|
context.inferenceContext = saveInferenceContext;
|
|
}
|
|
}
|
|
function checkExpressionCached(node, checkMode) {
|
|
if (checkMode && checkMode !== 0) {
|
|
return checkExpression(node, checkMode);
|
|
}
|
|
var links = getNodeLinks(node);
|
|
if (!links.resolvedType) {
|
|
var saveFlowLoopStart = flowLoopStart;
|
|
var saveFlowTypeCache = flowTypeCache;
|
|
flowLoopStart = flowLoopCount;
|
|
flowTypeCache = undefined;
|
|
links.resolvedType = checkExpression(node, checkMode);
|
|
flowTypeCache = saveFlowTypeCache;
|
|
flowLoopStart = saveFlowLoopStart;
|
|
}
|
|
return links.resolvedType;
|
|
}
|
|
function isTypeAssertion(node) {
|
|
node = ts.skipParentheses(node, true);
|
|
return node.kind === 211 ||
|
|
node.kind === 229 ||
|
|
ts.isJSDocTypeAssertion(node);
|
|
}
|
|
function checkDeclarationInitializer(declaration, checkMode, contextualType) {
|
|
var initializer = ts.getEffectiveInitializer(declaration);
|
|
var type = getQuickTypeOfExpression(initializer) ||
|
|
(contextualType ?
|
|
checkExpressionWithContextualType(initializer, contextualType, undefined, checkMode || 0)
|
|
: checkExpressionCached(initializer, checkMode));
|
|
return ts.isParameter(declaration) && declaration.name.kind === 202 &&
|
|
isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
|
|
padTupleType(type, declaration.name) : type;
|
|
}
|
|
function padTupleType(type, pattern) {
|
|
var patternElements = pattern.elements;
|
|
var elementTypes = getTypeArguments(type).slice();
|
|
var elementFlags = type.target.elementFlags.slice();
|
|
for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
|
|
var e = patternElements[i];
|
|
if (i < patternElements.length - 1 || !(e.kind === 203 && e.dotDotDotToken)) {
|
|
elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, false, false) : anyType);
|
|
elementFlags.push(2);
|
|
if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
|
|
reportImplicitAny(e, anyType);
|
|
}
|
|
}
|
|
}
|
|
return createTupleType(elementTypes, elementFlags, type.target.readonly);
|
|
}
|
|
function widenTypeInferredFromInitializer(declaration, type) {
|
|
var widened = ts.getCombinedNodeFlags(declaration) & 2 || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
|
|
if (ts.isInJSFile(declaration)) {
|
|
if (isEmptyLiteralType(widened)) {
|
|
reportImplicitAny(declaration, anyType);
|
|
return anyType;
|
|
}
|
|
else if (isEmptyArrayLiteralType(widened)) {
|
|
reportImplicitAny(declaration, anyArrayType);
|
|
return anyArrayType;
|
|
}
|
|
}
|
|
return widened;
|
|
}
|
|
function isLiteralOfContextualType(candidateType, contextualType) {
|
|
if (contextualType) {
|
|
if (contextualType.flags & 3145728) {
|
|
var types = contextualType.types;
|
|
return ts.some(types, function (t) { return isLiteralOfContextualType(candidateType, t); });
|
|
}
|
|
if (contextualType.flags & 58982400) {
|
|
var constraint = getBaseConstraintOfType(contextualType) || unknownType;
|
|
return maybeTypeOfKind(constraint, 4) && maybeTypeOfKind(candidateType, 128) ||
|
|
maybeTypeOfKind(constraint, 8) && maybeTypeOfKind(candidateType, 256) ||
|
|
maybeTypeOfKind(constraint, 64) && maybeTypeOfKind(candidateType, 2048) ||
|
|
maybeTypeOfKind(constraint, 4096) && maybeTypeOfKind(candidateType, 8192) ||
|
|
isLiteralOfContextualType(candidateType, constraint);
|
|
}
|
|
return !!(contextualType.flags & (128 | 4194304 | 134217728 | 268435456) && maybeTypeOfKind(candidateType, 128) ||
|
|
contextualType.flags & 256 && maybeTypeOfKind(candidateType, 256) ||
|
|
contextualType.flags & 2048 && maybeTypeOfKind(candidateType, 2048) ||
|
|
contextualType.flags & 512 && maybeTypeOfKind(candidateType, 512) ||
|
|
contextualType.flags & 8192 && maybeTypeOfKind(candidateType, 8192));
|
|
}
|
|
return false;
|
|
}
|
|
function isConstContext(node) {
|
|
var parent = node.parent;
|
|
return ts.isAssertionExpression(parent) && ts.isConstTypeReference(parent.type) ||
|
|
ts.isJSDocTypeAssertion(parent) && ts.isConstTypeReference(ts.getJSDocTypeAssertionType(parent)) ||
|
|
(ts.isParenthesizedExpression(parent) || ts.isArrayLiteralExpression(parent) || ts.isSpreadElement(parent)) && isConstContext(parent) ||
|
|
(ts.isPropertyAssignment(parent) || ts.isShorthandPropertyAssignment(parent) || ts.isTemplateSpan(parent)) && isConstContext(parent.parent);
|
|
}
|
|
function checkExpressionForMutableLocation(node, checkMode, contextualType, forceTuple) {
|
|
var type = checkExpression(node, checkMode, forceTuple);
|
|
return isConstContext(node) || ts.isCommonJsExportedExpression(node) ? getRegularTypeOfLiteralType(type) :
|
|
isTypeAssertion(node) ? type :
|
|
getWidenedLiteralLikeTypeForContextualType(type, instantiateContextualType(arguments.length === 2 ? getContextualType(node, undefined) : contextualType, node, undefined));
|
|
}
|
|
function checkPropertyAssignment(node, checkMode) {
|
|
if (node.name.kind === 162) {
|
|
checkComputedPropertyName(node.name);
|
|
}
|
|
return checkExpressionForMutableLocation(node.initializer, checkMode);
|
|
}
|
|
function checkObjectLiteralMethod(node, checkMode) {
|
|
checkGrammarMethod(node);
|
|
if (node.name.kind === 162) {
|
|
checkComputedPropertyName(node.name);
|
|
}
|
|
var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
|
|
return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode);
|
|
}
|
|
function instantiateTypeWithSingleGenericCallSignature(node, type, checkMode) {
|
|
if (checkMode && checkMode & (2 | 8)) {
|
|
var callSignature = getSingleSignature(type, 0, true);
|
|
var constructSignature = getSingleSignature(type, 1, true);
|
|
var signature = callSignature || constructSignature;
|
|
if (signature && signature.typeParameters) {
|
|
var contextualType = getApparentTypeOfContextualType(node, 2);
|
|
if (contextualType) {
|
|
var contextualSignature = getSingleSignature(getNonNullableType(contextualType), callSignature ? 0 : 1, false);
|
|
if (contextualSignature && !contextualSignature.typeParameters) {
|
|
if (checkMode & 8) {
|
|
skippedGenericFunction(node, checkMode);
|
|
return anyFunctionType;
|
|
}
|
|
var context = getInferenceContext(node);
|
|
var returnType = context.signature && getReturnTypeOfSignature(context.signature);
|
|
var returnSignature = returnType && getSingleCallOrConstructSignature(returnType);
|
|
if (returnSignature && !returnSignature.typeParameters && !ts.every(context.inferences, hasInferenceCandidates)) {
|
|
var uniqueTypeParameters = getUniqueTypeParameters(context, signature.typeParameters);
|
|
var instantiatedSignature = getSignatureInstantiationWithoutFillingInTypeArguments(signature, uniqueTypeParameters);
|
|
var inferences_3 = ts.map(context.inferences, function (info) { return createInferenceInfo(info.typeParameter); });
|
|
applyToParameterTypes(instantiatedSignature, contextualSignature, function (source, target) {
|
|
inferTypes(inferences_3, source, target, 0, true);
|
|
});
|
|
if (ts.some(inferences_3, hasInferenceCandidates)) {
|
|
applyToReturnTypes(instantiatedSignature, contextualSignature, function (source, target) {
|
|
inferTypes(inferences_3, source, target);
|
|
});
|
|
if (!hasOverlappingInferences(context.inferences, inferences_3)) {
|
|
mergeInferences(context.inferences, inferences_3);
|
|
context.inferredTypeParameters = ts.concatenate(context.inferredTypeParameters, uniqueTypeParameters);
|
|
return getOrCreateTypeFromSignature(instantiatedSignature);
|
|
}
|
|
}
|
|
}
|
|
return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, context));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function skippedGenericFunction(node, checkMode) {
|
|
if (checkMode & 2) {
|
|
var context = getInferenceContext(node);
|
|
context.flags |= 4;
|
|
}
|
|
}
|
|
function hasInferenceCandidates(info) {
|
|
return !!(info.candidates || info.contraCandidates);
|
|
}
|
|
function hasOverlappingInferences(a, b) {
|
|
for (var i = 0; i < a.length; i++) {
|
|
if (hasInferenceCandidates(a[i]) && hasInferenceCandidates(b[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function mergeInferences(target, source) {
|
|
for (var i = 0; i < target.length; i++) {
|
|
if (!hasInferenceCandidates(target[i]) && hasInferenceCandidates(source[i])) {
|
|
target[i] = source[i];
|
|
}
|
|
}
|
|
}
|
|
function getUniqueTypeParameters(context, typeParameters) {
|
|
var result = [];
|
|
var oldTypeParameters;
|
|
var newTypeParameters;
|
|
for (var _i = 0, typeParameters_3 = typeParameters; _i < typeParameters_3.length; _i++) {
|
|
var tp = typeParameters_3[_i];
|
|
var name = tp.symbol.escapedName;
|
|
if (hasTypeParameterByName(context.inferredTypeParameters, name) || hasTypeParameterByName(result, name)) {
|
|
var newName = getUniqueTypeParameterName(ts.concatenate(context.inferredTypeParameters, result), name);
|
|
var symbol = createSymbol(262144, newName);
|
|
var newTypeParameter = createTypeParameter(symbol);
|
|
newTypeParameter.target = tp;
|
|
oldTypeParameters = ts.append(oldTypeParameters, tp);
|
|
newTypeParameters = ts.append(newTypeParameters, newTypeParameter);
|
|
result.push(newTypeParameter);
|
|
}
|
|
else {
|
|
result.push(tp);
|
|
}
|
|
}
|
|
if (newTypeParameters) {
|
|
var mapper = createTypeMapper(oldTypeParameters, newTypeParameters);
|
|
for (var _a = 0, newTypeParameters_1 = newTypeParameters; _a < newTypeParameters_1.length; _a++) {
|
|
var tp = newTypeParameters_1[_a];
|
|
tp.mapper = mapper;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function hasTypeParameterByName(typeParameters, name) {
|
|
return ts.some(typeParameters, function (tp) { return tp.symbol.escapedName === name; });
|
|
}
|
|
function getUniqueTypeParameterName(typeParameters, baseName) {
|
|
var len = baseName.length;
|
|
while (len > 1 && baseName.charCodeAt(len - 1) >= 48 && baseName.charCodeAt(len - 1) <= 57)
|
|
len--;
|
|
var s = baseName.slice(0, len);
|
|
for (var index = 1; true; index++) {
|
|
var augmentedName = s + index;
|
|
if (!hasTypeParameterByName(typeParameters, augmentedName)) {
|
|
return augmentedName;
|
|
}
|
|
}
|
|
}
|
|
function getReturnTypeOfSingleNonGenericCallSignature(funcType) {
|
|
var signature = getSingleCallSignature(funcType);
|
|
if (signature && !signature.typeParameters) {
|
|
return getReturnTypeOfSignature(signature);
|
|
}
|
|
}
|
|
function getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) {
|
|
var funcType = checkExpression(expr.expression);
|
|
var nonOptionalType = getOptionalExpressionType(funcType, expr.expression);
|
|
var returnType = getReturnTypeOfSingleNonGenericCallSignature(funcType);
|
|
return returnType && propagateOptionalTypeMarker(returnType, expr, nonOptionalType !== funcType);
|
|
}
|
|
function getTypeOfExpression(node) {
|
|
var quickType = getQuickTypeOfExpression(node);
|
|
if (quickType) {
|
|
return quickType;
|
|
}
|
|
if (node.flags & 134217728 && flowTypeCache) {
|
|
var cachedType = flowTypeCache[getNodeId(node)];
|
|
if (cachedType) {
|
|
return cachedType;
|
|
}
|
|
}
|
|
var startInvocationCount = flowInvocationCount;
|
|
var type = checkExpression(node);
|
|
if (flowInvocationCount !== startInvocationCount) {
|
|
var cache = flowTypeCache || (flowTypeCache = []);
|
|
cache[getNodeId(node)] = type;
|
|
ts.setNodeFlags(node, node.flags | 134217728);
|
|
}
|
|
return type;
|
|
}
|
|
function getQuickTypeOfExpression(node) {
|
|
var expr = ts.skipParentheses(node, true);
|
|
if (ts.isJSDocTypeAssertion(expr)) {
|
|
var type = ts.getJSDocTypeAssertionType(expr);
|
|
if (!ts.isConstTypeReference(type)) {
|
|
return getTypeFromTypeNode(type);
|
|
}
|
|
}
|
|
expr = ts.skipParentheses(node);
|
|
if (ts.isCallExpression(expr) && expr.expression.kind !== 106 && !ts.isRequireCall(expr, true) && !isSymbolOrSymbolForCall(expr)) {
|
|
var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
|
|
getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
|
|
if (type) {
|
|
return type;
|
|
}
|
|
}
|
|
else if (ts.isAssertionExpression(expr) && !ts.isConstTypeReference(expr.type)) {
|
|
return getTypeFromTypeNode(expr.type);
|
|
}
|
|
else if (node.kind === 8 || node.kind === 10 ||
|
|
node.kind === 110 || node.kind === 95) {
|
|
return checkExpression(node);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getContextFreeTypeOfExpression(node) {
|
|
var links = getNodeLinks(node);
|
|
if (links.contextFreeType) {
|
|
return links.contextFreeType;
|
|
}
|
|
var saveContextualType = node.contextualType;
|
|
node.contextualType = anyType;
|
|
try {
|
|
var type = links.contextFreeType = checkExpression(node, 4);
|
|
return type;
|
|
}
|
|
finally {
|
|
node.contextualType = saveContextualType;
|
|
}
|
|
}
|
|
function checkExpression(node, checkMode, forceTuple) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("check", "checkExpression", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath });
|
|
var saveCurrentNode = currentNode;
|
|
currentNode = node;
|
|
instantiationCount = 0;
|
|
var uninstantiatedType = checkExpressionWorker(node, checkMode, forceTuple);
|
|
var type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode);
|
|
if (isConstEnumObjectType(type)) {
|
|
checkConstEnumAccess(node, type);
|
|
}
|
|
currentNode = saveCurrentNode;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return type;
|
|
}
|
|
function checkConstEnumAccess(node, type) {
|
|
var ok = (node.parent.kind === 206 && node.parent.expression === node) ||
|
|
(node.parent.kind === 207 && node.parent.expression === node) ||
|
|
((node.kind === 79 || node.kind === 161) && isInRightSideOfImportOrExportAssignment(node) ||
|
|
(node.parent.kind === 181 && node.parent.exprName === node)) ||
|
|
(node.parent.kind === 275);
|
|
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);
|
|
}
|
|
if (compilerOptions.isolatedModules) {
|
|
ts.Debug.assert(!!(type.symbol.flags & 128));
|
|
var constEnumDeclaration = type.symbol.valueDeclaration;
|
|
if (constEnumDeclaration.flags & 16777216) {
|
|
error(node, ts.Diagnostics.Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided);
|
|
}
|
|
}
|
|
}
|
|
function checkParenthesizedExpression(node, checkMode) {
|
|
if (ts.hasJSDocNodes(node) && ts.isJSDocTypeAssertion(node)) {
|
|
var type = ts.getJSDocTypeAssertionType(node);
|
|
return checkAssertionWorker(type, type, node.expression, checkMode);
|
|
}
|
|
return checkExpression(node.expression, checkMode);
|
|
}
|
|
function checkExpressionWorker(node, checkMode, forceTuple) {
|
|
var kind = node.kind;
|
|
if (cancellationToken) {
|
|
switch (kind) {
|
|
case 226:
|
|
case 213:
|
|
case 214:
|
|
cancellationToken.throwIfCancellationRequested();
|
|
}
|
|
}
|
|
switch (kind) {
|
|
case 79:
|
|
return checkIdentifier(node, checkMode);
|
|
case 80:
|
|
return checkPrivateIdentifierExpression(node);
|
|
case 108:
|
|
return checkThisExpression(node);
|
|
case 106:
|
|
return checkSuperExpression(node);
|
|
case 104:
|
|
return nullWideningType;
|
|
case 14:
|
|
case 10:
|
|
return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
|
|
case 8:
|
|
checkGrammarNumericLiteral(node);
|
|
return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
|
|
case 9:
|
|
checkGrammarBigIntLiteral(node);
|
|
return getFreshTypeOfLiteralType(getBigIntLiteralType({
|
|
negative: false,
|
|
base10Value: ts.parsePseudoBigInt(node.text)
|
|
}));
|
|
case 110:
|
|
return trueType;
|
|
case 95:
|
|
return falseType;
|
|
case 223:
|
|
return checkTemplateExpression(node);
|
|
case 13:
|
|
return globalRegExpType;
|
|
case 204:
|
|
return checkArrayLiteral(node, checkMode, forceTuple);
|
|
case 205:
|
|
return checkObjectLiteral(node, checkMode);
|
|
case 206:
|
|
return checkPropertyAccessExpression(node, checkMode);
|
|
case 161:
|
|
return checkQualifiedName(node, checkMode);
|
|
case 207:
|
|
return checkIndexedAccess(node, checkMode);
|
|
case 208:
|
|
if (node.expression.kind === 100) {
|
|
return checkImportCallExpression(node);
|
|
}
|
|
case 209:
|
|
return checkCallExpression(node, checkMode);
|
|
case 210:
|
|
return checkTaggedTemplateExpression(node);
|
|
case 212:
|
|
return checkParenthesizedExpression(node, checkMode);
|
|
case 226:
|
|
return checkClassExpression(node);
|
|
case 213:
|
|
case 214:
|
|
return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
|
|
case 216:
|
|
return checkTypeOfExpression(node);
|
|
case 211:
|
|
case 229:
|
|
return checkAssertion(node);
|
|
case 230:
|
|
return checkNonNullAssertion(node);
|
|
case 228:
|
|
return checkExpressionWithTypeArguments(node);
|
|
case 231:
|
|
return checkMetaProperty(node);
|
|
case 215:
|
|
return checkDeleteExpression(node);
|
|
case 217:
|
|
return checkVoidExpression(node);
|
|
case 218:
|
|
return checkAwaitExpression(node);
|
|
case 219:
|
|
return checkPrefixUnaryExpression(node);
|
|
case 220:
|
|
return checkPostfixUnaryExpression(node);
|
|
case 221:
|
|
return checkBinaryExpression(node, checkMode);
|
|
case 222:
|
|
return checkConditionalExpression(node, checkMode);
|
|
case 225:
|
|
return checkSpreadExpression(node, checkMode);
|
|
case 227:
|
|
return undefinedWideningType;
|
|
case 224:
|
|
return checkYieldExpression(node);
|
|
case 232:
|
|
return checkSyntheticExpression(node);
|
|
case 288:
|
|
return checkJsxExpression(node, checkMode);
|
|
case 278:
|
|
return checkJsxElement(node, checkMode);
|
|
case 279:
|
|
return checkJsxSelfClosingElement(node, checkMode);
|
|
case 282:
|
|
return checkJsxFragment(node);
|
|
case 286:
|
|
return checkJsxAttributes(node, checkMode);
|
|
case 280:
|
|
ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
|
|
}
|
|
return errorType;
|
|
}
|
|
function checkTypeParameter(node) {
|
|
checkGrammarModifiers(node);
|
|
if (node.expression) {
|
|
grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected);
|
|
}
|
|
checkSourceElement(node.constraint);
|
|
checkSourceElement(node.default);
|
|
var typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
|
|
getBaseConstraintOfType(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(instantiateType(constraintType, makeUnaryTypeMapper(typeParameter, defaultType)), defaultType), node.default, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
|
|
}
|
|
checkNodeDeferred(node);
|
|
addLazyDiagnostic(function () { return checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); });
|
|
}
|
|
function checkTypeParameterDeferred(node) {
|
|
if (ts.isInterfaceDeclaration(node.parent) || ts.isClassLike(node.parent) || ts.isTypeAliasDeclaration(node.parent)) {
|
|
var typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
|
|
var modifiers = getVarianceModifiers(typeParameter);
|
|
if (modifiers) {
|
|
var symbol = getSymbolOfNode(node.parent);
|
|
if (ts.isTypeAliasDeclaration(node.parent) && !(ts.getObjectFlags(getDeclaredTypeOfSymbol(symbol)) & (16 | 32))) {
|
|
error(node, ts.Diagnostics.Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types);
|
|
}
|
|
else if (modifiers === 32768 || modifiers === 65536) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("checkTypes", "checkTypeParameterDeferred", { parent: getTypeId(getDeclaredTypeOfSymbol(symbol)), id: getTypeId(typeParameter) });
|
|
var source = createMarkerType(symbol, typeParameter, modifiers === 65536 ? markerSubTypeForCheck : markerSuperTypeForCheck);
|
|
var target = createMarkerType(symbol, typeParameter, modifiers === 65536 ? markerSuperTypeForCheck : markerSubTypeForCheck);
|
|
var saveVarianceTypeParameter = typeParameter;
|
|
varianceTypeParameter = typeParameter;
|
|
checkTypeAssignableTo(source, target, node, ts.Diagnostics.Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation);
|
|
varianceTypeParameter = saveVarianceTypeParameter;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkParameter(node) {
|
|
checkGrammarDecoratorsAndModifiers(node);
|
|
checkVariableLikeDeclaration(node);
|
|
var func = ts.getContainingFunction(node);
|
|
if (ts.hasSyntacticModifier(node, 16476)) {
|
|
if (!(func.kind === 171 && ts.nodeIsPresent(func.body))) {
|
|
error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
|
|
}
|
|
if (func.kind === 171 && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
|
|
error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
|
|
}
|
|
}
|
|
if ((node.questionToken || isJSDocOptionalParameter(node)) && 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 === 171 || func.kind === 175 || func.kind === 180) {
|
|
error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
|
|
}
|
|
if (func.kind === 214) {
|
|
error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
|
|
}
|
|
if (func.kind === 172 || func.kind === 173) {
|
|
error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
|
|
}
|
|
}
|
|
if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isTypeAssignableTo(getReducedType(getTypeOfSymbol(node.symbol)), anyReadonlyArrayType)) {
|
|
error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
|
|
}
|
|
}
|
|
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 signature = getSignatureFromDeclaration(parent);
|
|
var typePredicate = getTypePredicateOfSignature(signature);
|
|
if (!typePredicate) {
|
|
return;
|
|
}
|
|
checkSourceElement(node.type);
|
|
var parameterName = node.parameterName;
|
|
if (typePredicate.kind === 0 || typePredicate.kind === 2) {
|
|
getTypeFromThisTypeNode(parameterName);
|
|
}
|
|
else {
|
|
if (typePredicate.parameterIndex >= 0) {
|
|
if (signatureHasRestParameter(signature) && typePredicate.parameterIndex === signature.parameters.length - 1) {
|
|
error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter);
|
|
}
|
|
else {
|
|
if (typePredicate.type) {
|
|
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, getTypeOfSymbol(signature.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 214:
|
|
case 174:
|
|
case 256:
|
|
case 213:
|
|
case 179:
|
|
case 169:
|
|
case 168:
|
|
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 === 79 && 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 === 202 || name.kind === 201) {
|
|
if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkSignatureDeclaration(node) {
|
|
if (node.kind === 176) {
|
|
checkGrammarIndexSignature(node);
|
|
}
|
|
else if (node.kind === 179 || node.kind === 256 || node.kind === 180 ||
|
|
node.kind === 174 || node.kind === 171 ||
|
|
node.kind === 175) {
|
|
checkGrammarFunctionLikeDeclaration(node);
|
|
}
|
|
var functionFlags = ts.getFunctionFlags(node);
|
|
if (!(functionFlags & 4)) {
|
|
if ((functionFlags & 3) === 3 && languageVersion < 99) {
|
|
checkExternalEmitHelpers(node, 6144);
|
|
}
|
|
if ((functionFlags & 3) === 2 && languageVersion < 4) {
|
|
checkExternalEmitHelpers(node, 64);
|
|
}
|
|
if ((functionFlags & 3) !== 0 && languageVersion < 2) {
|
|
checkExternalEmitHelpers(node, 128);
|
|
}
|
|
}
|
|
checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
|
|
checkUnmatchedJSDocParameters(node);
|
|
ts.forEach(node.parameters, checkParameter);
|
|
if (node.type) {
|
|
checkSourceElement(node.type);
|
|
}
|
|
addLazyDiagnostic(checkSignatureDeclarationDiagnostics);
|
|
function checkSignatureDeclarationDiagnostics() {
|
|
checkCollisionWithArgumentsInGeneratedCode(node);
|
|
var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
|
|
if (noImplicitAny && !returnTypeNode) {
|
|
switch (node.kind) {
|
|
case 175:
|
|
error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
|
|
break;
|
|
case 174:
|
|
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 generatorYieldType = getIterationTypeOfGeneratorFunctionReturnType(0, returnType, (functionFlags_1 & 2) !== 0) || anyType;
|
|
var generatorReturnType = getIterationTypeOfGeneratorFunctionReturnType(1, returnType, (functionFlags_1 & 2) !== 0) || generatorYieldType;
|
|
var generatorNextType = getIterationTypeOfGeneratorFunctionReturnType(2, returnType, (functionFlags_1 & 2) !== 0) || unknownType;
|
|
var generatorInstantiation = createGeneratorReturnType(generatorYieldType, generatorReturnType, generatorNextType, !!(functionFlags_1 & 2));
|
|
checkTypeAssignableTo(generatorInstantiation, returnType, returnTypeNode);
|
|
}
|
|
}
|
|
else if ((functionFlags_1 & 3) === 2) {
|
|
checkAsyncFunctionReturnType(node, returnTypeNode);
|
|
}
|
|
}
|
|
if (node.kind !== 176 && node.kind !== 317) {
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
}
|
|
}
|
|
function checkClassForDuplicateDeclarations(node) {
|
|
var instanceNames = new ts.Map();
|
|
var staticNames = new ts.Map();
|
|
var privateIdentifiers = new ts.Map();
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (member.kind === 171) {
|
|
for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
|
|
var param = _c[_b];
|
|
if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
|
|
addName(instanceNames, param.name, param.name.escapedText, 3);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var isStaticMember = ts.isStatic(member);
|
|
var name = member.name;
|
|
if (!name) {
|
|
continue;
|
|
}
|
|
var isPrivate = ts.isPrivateIdentifier(name);
|
|
var privateStaticFlags = isPrivate && isStaticMember ? 16 : 0;
|
|
var names = isPrivate ? privateIdentifiers :
|
|
isStaticMember ? staticNames :
|
|
instanceNames;
|
|
var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
|
|
if (memberName) {
|
|
switch (member.kind) {
|
|
case 172:
|
|
addName(names, name, memberName, 1 | privateStaticFlags);
|
|
break;
|
|
case 173:
|
|
addName(names, name, memberName, 2 | privateStaticFlags);
|
|
break;
|
|
case 167:
|
|
addName(names, name, memberName, 3 | privateStaticFlags);
|
|
break;
|
|
case 169:
|
|
addName(names, name, memberName, 8 | privateStaticFlags);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function addName(names, location, name, meaning) {
|
|
var prev = names.get(name);
|
|
if (prev) {
|
|
if ((prev & 16) !== (meaning & 16)) {
|
|
error(location, ts.Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, ts.getTextOfNode(location));
|
|
}
|
|
else {
|
|
var prevIsMethod = !!(prev & 8);
|
|
var isMethod = !!(meaning & 8);
|
|
if (prevIsMethod || isMethod) {
|
|
if (prevIsMethod !== isMethod) {
|
|
error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location));
|
|
}
|
|
}
|
|
else if (prev & meaning & ~16) {
|
|
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 isStaticMember = ts.isStatic(member);
|
|
if (isStaticMember && 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 = new ts.Map();
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (member.kind === 166) {
|
|
var memberName = void 0;
|
|
var name = member.name;
|
|
switch (name.kind) {
|
|
case 10:
|
|
case 8:
|
|
memberName = name.text;
|
|
break;
|
|
case 79:
|
|
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 === 258) {
|
|
var nodeSymbol = getSymbolOfNode(node);
|
|
if (nodeSymbol.declarations && nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
|
|
return;
|
|
}
|
|
}
|
|
var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
|
|
if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
|
|
var indexSignatureMap_1 = new ts.Map();
|
|
var _loop_29 = function (declaration) {
|
|
if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
|
|
forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
|
|
var entry = indexSignatureMap_1.get(getTypeId(type));
|
|
if (entry) {
|
|
entry.declarations.push(declaration);
|
|
}
|
|
else {
|
|
indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
|
|
}
|
|
});
|
|
}
|
|
};
|
|
for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
_loop_29(declaration);
|
|
}
|
|
indexSignatureMap_1.forEach(function (entry) {
|
|
if (entry.declarations.length > 1) {
|
|
for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function checkPropertyDeclaration(node) {
|
|
if (!checkGrammarDecoratorsAndModifiers(node) && !checkGrammarProperty(node))
|
|
checkGrammarComputedPropertyName(node.name);
|
|
checkVariableLikeDeclaration(node);
|
|
setNodeLinksForPrivateIdentifierScope(node);
|
|
if (ts.hasSyntacticModifier(node, 128) && node.kind === 167 && node.initializer) {
|
|
error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
|
|
}
|
|
}
|
|
function checkPropertySignature(node) {
|
|
if (ts.isPrivateIdentifier(node.name)) {
|
|
error(node, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
}
|
|
return checkPropertyDeclaration(node);
|
|
}
|
|
function checkMethodDeclaration(node) {
|
|
if (!checkGrammarMethod(node))
|
|
checkGrammarComputedPropertyName(node.name);
|
|
if (ts.isMethodDeclaration(node) && node.asteriskToken && ts.isIdentifier(node.name) && ts.idText(node.name) === "constructor") {
|
|
error(node.name, ts.Diagnostics.Class_constructor_may_not_be_a_generator);
|
|
}
|
|
checkFunctionOrMethodDeclaration(node);
|
|
if (ts.hasSyntacticModifier(node, 128) && node.kind === 169 && node.body) {
|
|
error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
|
|
}
|
|
if (ts.isPrivateIdentifier(node.name) && !ts.getContainingClass(node)) {
|
|
error(node, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
}
|
|
setNodeLinksForPrivateIdentifierScope(node);
|
|
}
|
|
function setNodeLinksForPrivateIdentifierScope(node) {
|
|
if (ts.isPrivateIdentifier(node.name) && languageVersion < 99) {
|
|
for (var lexicalScope = ts.getEnclosingBlockScopeContainer(node); !!lexicalScope; lexicalScope = ts.getEnclosingBlockScopeContainer(lexicalScope)) {
|
|
getNodeLinks(lexicalScope).flags |= 67108864;
|
|
}
|
|
if (ts.isClassExpression(node.parent)) {
|
|
var enclosingIterationStatement = getEnclosingIterationStatement(node.parent);
|
|
if (enclosingIterationStatement) {
|
|
getNodeLinks(node.name).flags |= 524288;
|
|
getNodeLinks(enclosingIterationStatement).flags |= 65536;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkClassStaticBlockDeclaration(node) {
|
|
checkGrammarDecoratorsAndModifiers(node);
|
|
ts.forEachChild(node, checkSourceElement);
|
|
}
|
|
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;
|
|
}
|
|
addLazyDiagnostic(checkConstructorDeclarationDiagnostics);
|
|
return;
|
|
function isInstancePropertyWithInitializerOrPrivateIdentifierProperty(n) {
|
|
if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
|
|
return true;
|
|
}
|
|
return n.kind === 167 &&
|
|
!ts.isStatic(n) &&
|
|
!!n.initializer;
|
|
}
|
|
function checkConstructorDeclarationDiagnostics() {
|
|
var containingClassDecl = node.parent;
|
|
if (ts.getClassExtendsHeritageElement(containingClassDecl)) {
|
|
captureLexicalThis(node.parent, containingClassDecl);
|
|
var classExtendsNull = classDeclarationExtendsNull(containingClassDecl);
|
|
var superCall = findFirstSuperCall(node.body);
|
|
if (superCall) {
|
|
if (classExtendsNull) {
|
|
error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null);
|
|
}
|
|
var superCallShouldBeRootLevel = (ts.getEmitScriptTarget(compilerOptions) !== 99 || !useDefineForClassFields) &&
|
|
(ts.some(node.parent.members, isInstancePropertyWithInitializerOrPrivateIdentifierProperty) ||
|
|
ts.some(node.parameters, function (p) { return ts.hasSyntacticModifier(p, 16476); }));
|
|
if (superCallShouldBeRootLevel) {
|
|
if (!superCallIsRootLevelInConstructor(superCall, node.body)) {
|
|
error(superCall, ts.Diagnostics.A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers);
|
|
}
|
|
else {
|
|
var superCallStatement = void 0;
|
|
for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) {
|
|
var statement = _a[_i];
|
|
if (ts.isExpressionStatement(statement) && ts.isSuperCall(ts.skipOuterExpressions(statement.expression))) {
|
|
superCallStatement = statement;
|
|
break;
|
|
}
|
|
if (nodeImmediatelyReferencesSuperOrThis(statement)) {
|
|
break;
|
|
}
|
|
}
|
|
if (superCallStatement === undefined) {
|
|
error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (!classExtendsNull) {
|
|
error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function superCallIsRootLevelInConstructor(superCall, body) {
|
|
var superCallParent = ts.walkUpParenthesizedExpressions(superCall.parent);
|
|
return ts.isExpressionStatement(superCallParent) && superCallParent.parent === body;
|
|
}
|
|
function nodeImmediatelyReferencesSuperOrThis(node) {
|
|
if (node.kind === 106 || node.kind === 108) {
|
|
return true;
|
|
}
|
|
if (ts.isThisContainerOrFunctionBlock(node)) {
|
|
return false;
|
|
}
|
|
return !!ts.forEachChild(node, nodeImmediatelyReferencesSuperOrThis);
|
|
}
|
|
function checkAccessorDeclaration(node) {
|
|
if (ts.isIdentifier(node.name) && ts.idText(node.name) === "constructor") {
|
|
error(node.name, ts.Diagnostics.Class_constructor_may_not_be_an_accessor);
|
|
}
|
|
addLazyDiagnostic(checkAccessorDeclarationDiagnostics);
|
|
checkSourceElement(node.body);
|
|
setNodeLinksForPrivateIdentifierScope(node);
|
|
function checkAccessorDeclarationDiagnostics() {
|
|
if (!checkGrammarFunctionLikeDeclaration(node) && !checkGrammarAccessor(node))
|
|
checkGrammarComputedPropertyName(node.name);
|
|
checkDecorators(node);
|
|
checkSignatureDeclaration(node);
|
|
if (node.kind === 172) {
|
|
if (!(node.flags & 16777216) && ts.nodeIsPresent(node.body) && (node.flags & 256)) {
|
|
if (!(node.flags & 512)) {
|
|
error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
|
|
}
|
|
}
|
|
}
|
|
if (node.name.kind === 162) {
|
|
checkComputedPropertyName(node.name);
|
|
}
|
|
if (hasBindableName(node)) {
|
|
var symbol = getSymbolOfNode(node);
|
|
var getter = ts.getDeclarationOfKind(symbol, 172);
|
|
var setter = ts.getDeclarationOfKind(symbol, 173);
|
|
if (getter && setter && !(getNodeCheckFlags(getter) & 1)) {
|
|
getNodeLinks(getter).flags |= 1;
|
|
var getterFlags = ts.getEffectiveModifierFlags(getter);
|
|
var setterFlags = ts.getEffectiveModifierFlags(setter);
|
|
if ((getterFlags & 128) !== (setterFlags & 128)) {
|
|
error(getter.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract);
|
|
error(setter.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract);
|
|
}
|
|
if (((getterFlags & 16) && !(setterFlags & (16 | 8))) ||
|
|
((getterFlags & 8) && !(setterFlags & 8))) {
|
|
error(getter.name, ts.Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter);
|
|
error(setter.name, ts.Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter);
|
|
}
|
|
var getterType = getAnnotatedAccessorType(getter);
|
|
var setterType = getAnnotatedAccessorType(setter);
|
|
if (getterType && setterType) {
|
|
checkTypeAssignableTo(getterType, setterType, getter, ts.Diagnostics.The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type);
|
|
}
|
|
}
|
|
}
|
|
var returnType = getTypeOfAccessors(getSymbolOfNode(node));
|
|
if (node.kind === 172) {
|
|
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
|
|
}
|
|
}
|
|
}
|
|
function checkMissingDeclaration(node) {
|
|
checkDecorators(node);
|
|
}
|
|
function getEffectiveTypeArgumentAtIndex(node, typeParameters, index) {
|
|
if (index < typeParameters.length) {
|
|
return getTypeFromTypeNode(node.typeArguments[index]);
|
|
}
|
|
return getEffectiveTypeArguments(node, typeParameters)[index];
|
|
}
|
|
function getEffectiveTypeArguments(node, typeParameters) {
|
|
return fillMissingTypeArguments(ts.map(node.typeArguments, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), ts.isInJSFile(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 (!isErrorType(type)) {
|
|
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 === 178 && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
|
|
grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
|
|
}
|
|
ts.forEach(node.typeArguments, checkSourceElement);
|
|
var type = getTypeFromTypeReference(node);
|
|
if (!isErrorType(type)) {
|
|
if (node.typeArguments) {
|
|
addLazyDiagnostic(function () {
|
|
var typeParameters = getTypeParametersForTypeReference(node);
|
|
if (typeParameters) {
|
|
checkTypeArgumentConstraints(node, typeParameters);
|
|
}
|
|
});
|
|
}
|
|
var symbol = getNodeLinks(node).resolvedSymbol;
|
|
if (symbol) {
|
|
if (ts.some(symbol.declarations, function (d) { return isTypeDeclaration(d) && !!(d.flags & 268435456); })) {
|
|
addDeprecatedSuggestion(getDeprecatedSuggestionNode(node), symbol.declarations, symbol.escapedName);
|
|
}
|
|
if (type.flags & 32 && symbol.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);
|
|
if (!typeParameters)
|
|
return undefined;
|
|
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);
|
|
addLazyDiagnostic(checkTypeLiteralDiagnostics);
|
|
function checkTypeLiteralDiagnostics() {
|
|
var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
|
|
checkIndexConstraints(type, type.symbol);
|
|
checkTypeForDuplicateIndexSignatures(node);
|
|
checkObjectTypeForDuplicateDeclarations(node);
|
|
}
|
|
}
|
|
function checkArrayType(node) {
|
|
checkSourceElement(node.elementType);
|
|
}
|
|
function checkTupleType(node) {
|
|
var elementTypes = node.elements;
|
|
var seenOptionalElement = false;
|
|
var seenRestElement = false;
|
|
var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
|
|
for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
|
|
var e = elementTypes_1[_i];
|
|
if (e.kind !== 197 && hasNamedElement) {
|
|
grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
|
|
break;
|
|
}
|
|
var flags = getTupleElementFlags(e);
|
|
if (flags & 8) {
|
|
var type = getTypeFromTypeNode(e.type);
|
|
if (!isArrayLikeType(type)) {
|
|
error(e, ts.Diagnostics.A_rest_element_type_must_be_an_array_type);
|
|
break;
|
|
}
|
|
if (isArrayType(type) || isTupleType(type) && type.target.combinedFlags & 4) {
|
|
seenRestElement = true;
|
|
}
|
|
}
|
|
else if (flags & 4) {
|
|
if (seenRestElement) {
|
|
grammarErrorOnNode(e, ts.Diagnostics.A_rest_element_cannot_follow_another_rest_element);
|
|
break;
|
|
}
|
|
seenRestElement = true;
|
|
}
|
|
else if (flags & 2) {
|
|
if (seenRestElement) {
|
|
grammarErrorOnNode(e, ts.Diagnostics.An_optional_element_cannot_follow_a_rest_element);
|
|
break;
|
|
}
|
|
seenOptionalElement = true;
|
|
}
|
|
else if (seenOptionalElement) {
|
|
grammarErrorOnNode(e, ts.Diagnostics.A_required_element_cannot_follow_an_optional_element);
|
|
break;
|
|
}
|
|
}
|
|
ts.forEach(node.elements, checkSourceElement);
|
|
getTypeFromTypeNode(node);
|
|
}
|
|
function checkUnionOrIntersectionType(node) {
|
|
ts.forEach(node.types, checkSourceElement);
|
|
getTypeFromTypeNode(node);
|
|
}
|
|
function checkIndexedAccessIndexType(type, accessNode) {
|
|
if (!(type.flags & 8388608)) {
|
|
return type;
|
|
}
|
|
var objectType = type.objectType;
|
|
var indexType = type.indexType;
|
|
if (isTypeAssignableTo(indexType, getIndexType(objectType, false))) {
|
|
if (accessNode.kind === 207 && 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;
|
|
}
|
|
var apparentObjectType = getApparentType(objectType);
|
|
if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296)) {
|
|
return type;
|
|
}
|
|
if (isGenericObjectType(objectType)) {
|
|
var propertyName_1 = getPropertyNameFromIndex(indexType, accessNode);
|
|
if (propertyName_1) {
|
|
var propertySymbol = forEachType(apparentObjectType, function (t) { return getPropertyOfType(t, propertyName_1); });
|
|
if (propertySymbol && ts.getDeclarationModifierFlagsFromSymbol(propertySymbol) & 24) {
|
|
error(accessNode, ts.Diagnostics.Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter, ts.unescapeLeadingUnderscores(propertyName_1));
|
|
return errorType;
|
|
}
|
|
}
|
|
}
|
|
error(accessNode, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType));
|
|
return errorType;
|
|
}
|
|
function checkIndexedAccessType(node) {
|
|
checkSourceElement(node.objectType);
|
|
checkSourceElement(node.indexType);
|
|
checkIndexedAccessIndexType(getTypeFromIndexedAccessTypeNode(node), node);
|
|
}
|
|
function checkMappedType(node) {
|
|
checkGrammarMappedType(node);
|
|
checkSourceElement(node.typeParameter);
|
|
checkSourceElement(node.nameType);
|
|
checkSourceElement(node.type);
|
|
if (!node.type) {
|
|
reportImplicitAny(node, anyType);
|
|
}
|
|
var type = getTypeFromMappedTypeNode(node);
|
|
var nameType = getNameTypeFromMappedType(type);
|
|
if (nameType) {
|
|
checkTypeAssignableTo(nameType, keyofConstraintType, node.nameType);
|
|
}
|
|
else {
|
|
var constraintType = getConstraintTypeFromMappedType(type);
|
|
checkTypeAssignableTo(constraintType, keyofConstraintType, ts.getEffectiveConstraintOfTypeParameter(node.typeParameter));
|
|
}
|
|
}
|
|
function checkGrammarMappedType(node) {
|
|
var _a;
|
|
if ((_a = node.members) === null || _a === void 0 ? void 0 : _a.length) {
|
|
return grammarErrorOnNode(node.members[0], ts.Diagnostics.A_mapped_type_may_not_declare_properties_or_methods);
|
|
}
|
|
}
|
|
function checkThisType(node) {
|
|
getTypeFromThisTypeNode(node);
|
|
}
|
|
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 === 189 && n.parent.extendsType === n; })) {
|
|
grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
|
|
}
|
|
checkSourceElement(node.typeParameter);
|
|
var symbol = getSymbolOfNode(node.typeParameter);
|
|
if (symbol.declarations && symbol.declarations.length > 1) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.typeParametersChecked) {
|
|
links.typeParametersChecked = true;
|
|
var typeParameter = getDeclaredTypeOfTypeParameter(symbol);
|
|
var declarations = ts.getDeclarationsOfKind(symbol, 163);
|
|
if (!areTypeParametersIdentical(declarations, [typeParameter], function (decl) { return [decl]; })) {
|
|
var name = symbolToString(symbol);
|
|
for (var _i = 0, declarations_4 = declarations; _i < declarations_4.length; _i++) {
|
|
var declaration = declarations_4[_i];
|
|
error(declaration.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_constraints, name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
function checkTemplateLiteralType(node) {
|
|
for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) {
|
|
var span = _a[_i];
|
|
checkSourceElement(span.type);
|
|
var type = getTypeFromTypeNode(span.type);
|
|
checkTypeAssignableTo(type, templateConstraintType, span.type);
|
|
}
|
|
getTypeFromTypeNode(node);
|
|
}
|
|
function checkImportType(node) {
|
|
checkSourceElement(node.argument);
|
|
if (node.assertions) {
|
|
var override = ts.getResolutionModeOverrideForClause(node.assertions.assertClause, grammarErrorOnNode);
|
|
if (override) {
|
|
if (!ts.isNightly()) {
|
|
grammarErrorOnNode(node.assertions.assertClause, ts.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next);
|
|
}
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.Node16 && ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.NodeNext) {
|
|
grammarErrorOnNode(node.assertions.assertClause, ts.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext);
|
|
}
|
|
}
|
|
}
|
|
getTypeFromTypeNode(node);
|
|
}
|
|
function checkNamedTupleMember(node) {
|
|
if (node.dotDotDotToken && node.questionToken) {
|
|
grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
|
|
}
|
|
if (node.type.kind === 185) {
|
|
grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
|
|
}
|
|
if (node.type.kind === 186) {
|
|
grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
|
|
}
|
|
checkSourceElement(node.type);
|
|
getTypeFromTypeNode(node);
|
|
}
|
|
function isPrivateWithinAmbient(node) {
|
|
return (ts.hasEffectiveModifier(node, 8) || ts.isPrivateIdentifierClassElementDeclaration(node)) && !!(node.flags & 16777216);
|
|
}
|
|
function getEffectiveDeclarationFlags(n, flagsToCheck) {
|
|
var flags = ts.getCombinedModifierFlags(n);
|
|
if (n.parent.kind !== 258 &&
|
|
n.parent.kind !== 257 &&
|
|
n.parent.kind !== 226 &&
|
|
n.flags & 16777216) {
|
|
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) {
|
|
addLazyDiagnostic(function () { return checkFunctionOrConstructorSymbolWorker(symbol); });
|
|
}
|
|
function checkFunctionOrConstructorSymbolWorker(symbol) {
|
|
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.isPrivateIdentifier(node.name) && ts.isPrivateIdentifier(subsequentName) && node.name.escapedText === subsequentName.escapedText ||
|
|
ts.isComputedPropertyName(node.name) && ts.isComputedPropertyName(subsequentName) ||
|
|
ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
|
|
ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
|
|
var reportError = (node.kind === 169 || node.kind === 168) &&
|
|
ts.isStatic(node) !== ts.isStatic(subsequentNode);
|
|
if (reportError) {
|
|
var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
|
|
error(errorNode_1, diagnostic);
|
|
}
|
|
return;
|
|
}
|
|
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.hasSyntacticModifier(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;
|
|
var hasNonAmbientClass = false;
|
|
var functionDeclarations = [];
|
|
if (declarations) {
|
|
for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
|
|
var current = declarations_5[_i];
|
|
var node = current;
|
|
var inAmbientContext = node.flags & 16777216;
|
|
var inAmbientContextOrInterface = node.parent && (node.parent.kind === 258 || node.parent.kind === 182) || inAmbientContext;
|
|
if (inAmbientContextOrInterface) {
|
|
previousDeclaration = undefined;
|
|
}
|
|
if ((node.kind === 257 || node.kind === 226) && !inAmbientContext) {
|
|
hasNonAmbientClass = true;
|
|
}
|
|
if (node.kind === 256 || node.kind === 169 || node.kind === 168 || node.kind === 171) {
|
|
functionDeclarations.push(node);
|
|
var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
|
|
someNodeFlags |= currentNodeFlags;
|
|
allNodeFlags &= currentNodeFlags;
|
|
someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node);
|
|
allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node);
|
|
var bodyIsPresent = ts.nodeIsPresent(node.body);
|
|
if (bodyIsPresent && bodyDeclaration) {
|
|
if (isConstructor) {
|
|
multipleConstructorImplementation = true;
|
|
}
|
|
else {
|
|
duplicateFunctionDeclaration = true;
|
|
}
|
|
}
|
|
else if ((previousDeclaration === null || previousDeclaration === void 0 ? void 0 : previousDeclaration.parent) === node.parent && previousDeclaration.end !== node.pos) {
|
|
reportImplementationExpectedError(previousDeclaration);
|
|
}
|
|
if (bodyIsPresent) {
|
|
if (!bodyDeclaration) {
|
|
bodyDeclaration = node;
|
|
}
|
|
}
|
|
else {
|
|
hasOverloads = true;
|
|
}
|
|
previousDeclaration = node;
|
|
if (!inAmbientContextOrInterface) {
|
|
lastSeenNonAmbientDeclaration = node;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (multipleConstructorImplementation) {
|
|
ts.forEach(functionDeclarations, function (declaration) {
|
|
error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
|
|
});
|
|
}
|
|
if (duplicateFunctionDeclaration) {
|
|
ts.forEach(functionDeclarations, function (declaration) {
|
|
error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
|
|
});
|
|
}
|
|
if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 && declarations) {
|
|
var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 257; })
|
|
.map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
|
|
ts.forEach(declarations, function (declaration) {
|
|
var diagnostic = declaration.kind === 257
|
|
? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
|
|
: declaration.kind === 256
|
|
? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
|
|
: undefined;
|
|
if (diagnostic) {
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
|
|
}
|
|
});
|
|
}
|
|
if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body &&
|
|
!ts.hasSyntacticModifier(lastSeenNonAmbientDeclaration, 128) && !lastSeenNonAmbientDeclaration.questionToken) {
|
|
reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
|
|
}
|
|
if (hasOverloads) {
|
|
if (declarations) {
|
|
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_10 = signatures; _a < signatures_10.length; _a++) {
|
|
var signature = signatures_10[_a];
|
|
if (!isImplementationCompatibleWithOverload(bodySignature, signature)) {
|
|
ts.addRelatedInfo(error(signature.declaration, ts.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), ts.createDiagnosticForNode(bodyDeclaration, ts.Diagnostics.The_implementation_signature_is_declared_here));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkExportsOnMergedDeclarations(node) {
|
|
addLazyDiagnostic(function () { return checkExportsOnMergedDeclarationsWorker(node); });
|
|
}
|
|
function checkExportsOnMergedDeclarationsWorker(node) {
|
|
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));
|
|
}
|
|
}
|
|
}
|
|
function getDeclarationSpaces(decl) {
|
|
var d = decl;
|
|
switch (d.kind) {
|
|
case 258:
|
|
case 259:
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
return 2;
|
|
case 261:
|
|
return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0
|
|
? 4 | 1
|
|
: 4;
|
|
case 257:
|
|
case 260:
|
|
case 299:
|
|
return 2 | 1;
|
|
case 305:
|
|
return 2 | 1 | 4;
|
|
case 271:
|
|
case 221:
|
|
var node_2 = d;
|
|
var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
|
|
if (!ts.isEntityNameExpression(expression)) {
|
|
return 1;
|
|
}
|
|
d = expression;
|
|
case 265:
|
|
case 268:
|
|
case 267:
|
|
var result_12 = 0;
|
|
var target = resolveAlias(getSymbolOfNode(d));
|
|
ts.forEach(target.declarations, function (d) {
|
|
result_12 |= getDeclarationSpaces(d);
|
|
});
|
|
return result_12;
|
|
case 254:
|
|
case 203:
|
|
case 256:
|
|
case 270:
|
|
case 79:
|
|
return 1;
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(d);
|
|
}
|
|
}
|
|
}
|
|
function getAwaitedTypeOfPromise(type, errorNode, diagnosticMessage, arg0) {
|
|
var promisedType = getPromisedTypeOfPromise(type, errorNode);
|
|
return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage, arg0);
|
|
}
|
|
function getPromisedTypeOfPromise(type, errorNode, thisTypeForErrorOut) {
|
|
if (isTypeAny(type)) {
|
|
return undefined;
|
|
}
|
|
var typeAsPromise = type;
|
|
if (typeAsPromise.promisedTypeOfPromise) {
|
|
return typeAsPromise.promisedTypeOfPromise;
|
|
}
|
|
if (isReferenceToType(type, getGlobalPromiseType(false))) {
|
|
return typeAsPromise.promisedTypeOfPromise = getTypeArguments(type)[0];
|
|
}
|
|
if (allTypesAssignableToKind(type, 131068 | 131072)) {
|
|
return undefined;
|
|
}
|
|
var thenFunction = getTypeOfPropertyOfType(type, "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 thisTypeForError;
|
|
var candidates;
|
|
for (var _i = 0, thenSignatures_1 = thenSignatures; _i < thenSignatures_1.length; _i++) {
|
|
var thenSignature = thenSignatures_1[_i];
|
|
var thisType = getThisTypeOfSignature(thenSignature);
|
|
if (thisType && thisType !== voidType && !isTypeRelatedTo(type, thisType, subtypeRelation)) {
|
|
thisTypeForError = thisType;
|
|
}
|
|
else {
|
|
candidates = ts.append(candidates, thenSignature);
|
|
}
|
|
}
|
|
if (!candidates) {
|
|
ts.Debug.assertIsDefined(thisTypeForError);
|
|
if (thisTypeForErrorOut) {
|
|
thisTypeForErrorOut.value = thisTypeForError;
|
|
}
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1, typeToString(type), typeToString(thisTypeForError));
|
|
}
|
|
return undefined;
|
|
}
|
|
var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(candidates, getTypeOfFirstParameterOfSignature)), 2097152);
|
|
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, withAlias, errorNode, diagnosticMessage, arg0) {
|
|
var awaitedType = withAlias ?
|
|
getAwaitedType(type, errorNode, diagnosticMessage, arg0) :
|
|
getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, arg0);
|
|
return awaitedType || errorType;
|
|
}
|
|
function isThenableType(type) {
|
|
if (allTypesAssignableToKind(type, 131068 | 131072)) {
|
|
return false;
|
|
}
|
|
var thenFunction = getTypeOfPropertyOfType(type, "then");
|
|
return !!thenFunction && getSignaturesOfType(getTypeWithFacts(thenFunction, 2097152), 0).length > 0;
|
|
}
|
|
function isAwaitedTypeInstantiation(type) {
|
|
var _a;
|
|
if (type.flags & 16777216) {
|
|
var awaitedSymbol = getGlobalAwaitedSymbol(false);
|
|
return !!awaitedSymbol && type.aliasSymbol === awaitedSymbol && ((_a = type.aliasTypeArguments) === null || _a === void 0 ? void 0 : _a.length) === 1;
|
|
}
|
|
return false;
|
|
}
|
|
function unwrapAwaitedType(type) {
|
|
return type.flags & 1048576 ? mapType(type, unwrapAwaitedType) :
|
|
isAwaitedTypeInstantiation(type) ? type.aliasTypeArguments[0] :
|
|
type;
|
|
}
|
|
function isAwaitedTypeNeeded(type) {
|
|
if (isTypeAny(type) || isAwaitedTypeInstantiation(type)) {
|
|
return false;
|
|
}
|
|
if (isGenericObjectType(type)) {
|
|
var baseConstraint = getBaseConstraintOfType(type);
|
|
if (baseConstraint ?
|
|
baseConstraint.flags & 3 || isEmptyObjectType(baseConstraint) || isThenableType(baseConstraint) :
|
|
maybeTypeOfKind(type, 8650752)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function tryCreateAwaitedType(type) {
|
|
var awaitedSymbol = getGlobalAwaitedSymbol(true);
|
|
if (awaitedSymbol) {
|
|
return getTypeAliasInstantiation(awaitedSymbol, [unwrapAwaitedType(type)]);
|
|
}
|
|
return undefined;
|
|
}
|
|
function createAwaitedTypeIfNeeded(type) {
|
|
if (isAwaitedTypeNeeded(type)) {
|
|
var awaitedType = tryCreateAwaitedType(type);
|
|
if (awaitedType) {
|
|
return awaitedType;
|
|
}
|
|
}
|
|
ts.Debug.assert(getPromisedTypeOfPromise(type) === undefined, "type provided should not be a non-generic 'promise'-like.");
|
|
return type;
|
|
}
|
|
function getAwaitedType(type, errorNode, diagnosticMessage, arg0) {
|
|
var awaitedType = getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, arg0);
|
|
return awaitedType && createAwaitedTypeIfNeeded(awaitedType);
|
|
}
|
|
function getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, arg0) {
|
|
if (isTypeAny(type)) {
|
|
return type;
|
|
}
|
|
if (isAwaitedTypeInstantiation(type)) {
|
|
return type;
|
|
}
|
|
var typeAsAwaitable = type;
|
|
if (typeAsAwaitable.awaitedTypeOfType) {
|
|
return typeAsAwaitable.awaitedTypeOfType;
|
|
}
|
|
if (type.flags & 1048576) {
|
|
if (awaitedTypeStack.lastIndexOf(type.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;
|
|
}
|
|
var mapper = errorNode ? function (constituentType) { return getAwaitedTypeNoAlias(constituentType, errorNode, diagnosticMessage, arg0); } : getAwaitedTypeNoAlias;
|
|
awaitedTypeStack.push(type.id);
|
|
var mapped = mapType(type, mapper);
|
|
awaitedTypeStack.pop();
|
|
return typeAsAwaitable.awaitedTypeOfType = mapped;
|
|
}
|
|
if (isAwaitedTypeNeeded(type)) {
|
|
return typeAsAwaitable.awaitedTypeOfType = type;
|
|
}
|
|
var thisTypeForErrorOut = { value: undefined };
|
|
var promisedType = getPromisedTypeOfPromise(type, undefined, thisTypeForErrorOut);
|
|
if (promisedType) {
|
|
if (type.id === promisedType.id || awaitedTypeStack.lastIndexOf(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 = getAwaitedTypeNoAlias(promisedType, errorNode, diagnosticMessage, arg0);
|
|
awaitedTypeStack.pop();
|
|
if (!awaitedType) {
|
|
return undefined;
|
|
}
|
|
return typeAsAwaitable.awaitedTypeOfType = awaitedType;
|
|
}
|
|
if (isThenableType(type)) {
|
|
if (errorNode) {
|
|
ts.Debug.assertIsDefined(diagnosticMessage);
|
|
var chain = void 0;
|
|
if (thisTypeForErrorOut.value) {
|
|
chain = ts.chainDiagnosticMessages(chain, ts.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1, typeToString(type), typeToString(thisTypeForErrorOut.value));
|
|
}
|
|
chain = ts.chainDiagnosticMessages(chain, diagnosticMessage, arg0);
|
|
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, chain));
|
|
}
|
|
return undefined;
|
|
}
|
|
return typeAsAwaitable.awaitedTypeOfType = type;
|
|
}
|
|
function checkAsyncFunctionReturnType(node, returnTypeNode) {
|
|
var returnType = getTypeFromTypeNode(returnTypeNode);
|
|
if (languageVersion >= 2) {
|
|
if (isErrorType(returnType)) {
|
|
return;
|
|
}
|
|
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_Did_you_mean_to_write_Promise_0, typeToString(getAwaitedTypeNoAlias(returnType) || voidType));
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
markTypeNodeAsReferenced(returnTypeNode);
|
|
if (isErrorType(returnType)) {
|
|
return;
|
|
}
|
|
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;
|
|
}
|
|
var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551, true);
|
|
var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
|
|
if (isErrorType(promiseConstructorType)) {
|
|
if (promiseConstructorName.kind === 79 && 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;
|
|
}
|
|
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;
|
|
}
|
|
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;
|
|
}
|
|
var rootName = promiseConstructorName && ts.getFirstIdentifier(promiseConstructorName);
|
|
var collidingSymbol = getSymbol(node.locals, rootName.escapedText, 111551);
|
|
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;
|
|
}
|
|
}
|
|
checkAwaitedType(returnType, false, 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);
|
|
checkDeprecatedSignature(signature, node);
|
|
var returnType = getReturnTypeOfSignature(signature);
|
|
if (returnType.flags & 1) {
|
|
return;
|
|
}
|
|
var headMessage;
|
|
var expectedReturnType;
|
|
switch (node.parent.kind) {
|
|
case 257:
|
|
headMessage = ts.Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1;
|
|
var classSymbol = getSymbolOfNode(node.parent);
|
|
var classConstructorType = getTypeOfSymbol(classSymbol);
|
|
expectedReturnType = getUnionType([classConstructorType, voidType]);
|
|
break;
|
|
case 167:
|
|
case 164:
|
|
headMessage = ts.Diagnostics.Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any;
|
|
expectedReturnType = voidType;
|
|
break;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
headMessage = ts.Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1;
|
|
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 markTypeNodeAsReferenced(node) {
|
|
markEntityNameOrEntityExpressionAsReference(node && ts.getEntityNameFromTypeNode(node), false);
|
|
}
|
|
function markEntityNameOrEntityExpressionAsReference(typeName, forDecoratorMetadata) {
|
|
if (!typeName)
|
|
return;
|
|
var rootName = ts.getFirstIdentifier(typeName);
|
|
var meaning = (typeName.kind === 79 ? 788968 : 1920) | 2097152;
|
|
var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, undefined, undefined, true);
|
|
if (rootSymbol && rootSymbol.flags & 2097152) {
|
|
if (symbolIsValue(rootSymbol)
|
|
&& !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))
|
|
&& !getTypeOnlyAliasDeclaration(rootSymbol)) {
|
|
markAliasSymbolAsReferenced(rootSymbol);
|
|
}
|
|
else if (forDecoratorMetadata
|
|
&& compilerOptions.isolatedModules
|
|
&& ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015
|
|
&& !symbolIsValue(rootSymbol)
|
|
&& !ts.some(rootSymbol.declarations, ts.isTypeOnlyImportOrExportDeclaration)) {
|
|
var diag = error(typeName, ts.Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled);
|
|
var aliasDeclaration = ts.find(rootSymbol.declarations || ts.emptyArray, isAliasSymbolDeclaration);
|
|
if (aliasDeclaration) {
|
|
ts.addRelatedInfo(diag, ts.createDiagnosticForNode(aliasDeclaration, ts.Diagnostics._0_was_imported_here, ts.idText(rootName)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function markDecoratorMedataDataTypeNodeAsReferenced(node) {
|
|
var entityName = getEntityNameForDecoratorMetadata(node);
|
|
if (entityName && ts.isEntityName(entityName)) {
|
|
markEntityNameOrEntityExpressionAsReference(entityName, true);
|
|
}
|
|
}
|
|
function getEntityNameForDecoratorMetadata(node) {
|
|
if (node) {
|
|
switch (node.kind) {
|
|
case 188:
|
|
case 187:
|
|
return getEntityNameForDecoratorMetadataFromTypeList(node.types);
|
|
case 189:
|
|
return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
|
|
case 191:
|
|
case 197:
|
|
return getEntityNameForDecoratorMetadata(node.type);
|
|
case 178:
|
|
return node.typeName;
|
|
}
|
|
}
|
|
}
|
|
function getEntityNameForDecoratorMetadataFromTypeList(types) {
|
|
var commonEntityName;
|
|
for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
|
|
var typeNode = types_21[_i];
|
|
while (typeNode.kind === 191 || typeNode.kind === 197) {
|
|
typeNode = typeNode.type;
|
|
}
|
|
if (typeNode.kind === 143) {
|
|
continue;
|
|
}
|
|
if (!strictNullChecks && (typeNode.kind === 196 && typeNode.literal.kind === 104 || typeNode.kind === 153)) {
|
|
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;
|
|
}
|
|
function getParameterTypeNodeForDecoratorCheck(node) {
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(node);
|
|
return ts.isRestParameter(node) ? ts.getRestParameterElementType(typeNode) : typeNode;
|
|
}
|
|
function checkDecorators(node) {
|
|
if (!ts.canHaveDecorators(node) || !ts.hasDecorators(node) || !node.modifiers || !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_in_your_tsconfig_or_jsconfig_to_remove_this_warning);
|
|
}
|
|
var firstDecorator = ts.find(node.modifiers, ts.isDecorator);
|
|
if (!firstDecorator) {
|
|
return;
|
|
}
|
|
checkExternalEmitHelpers(firstDecorator, 8);
|
|
if (node.kind === 164) {
|
|
checkExternalEmitHelpers(firstDecorator, 32);
|
|
}
|
|
if (compilerOptions.emitDecoratorMetadata) {
|
|
checkExternalEmitHelpers(firstDecorator, 16);
|
|
switch (node.kind) {
|
|
case 257:
|
|
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 172:
|
|
case 173:
|
|
var otherKind = node.kind === 172 ? 173 : 172;
|
|
var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
|
|
markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
|
|
break;
|
|
case 169:
|
|
for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
|
|
var parameter = _c[_b];
|
|
markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
|
|
}
|
|
markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
|
|
break;
|
|
case 167:
|
|
markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
|
|
break;
|
|
case 164:
|
|
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;
|
|
}
|
|
}
|
|
for (var _f = 0, _g = node.modifiers; _f < _g.length; _f++) {
|
|
var modifier = _g[_f];
|
|
if (ts.isDecorator(modifier)) {
|
|
checkDecorator(modifier);
|
|
}
|
|
}
|
|
}
|
|
function checkFunctionDeclaration(node) {
|
|
addLazyDiagnostic(checkFunctionDeclarationDiagnostics);
|
|
function checkFunctionDeclarationDiagnostics() {
|
|
checkFunctionOrMethodDeclaration(node);
|
|
checkGrammarForGenerator(node);
|
|
checkCollisionsForDeclarationName(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);
|
|
checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
|
|
}
|
|
function checkJSDocTemplateTag(node) {
|
|
checkSourceElement(node.constraint);
|
|
for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) {
|
|
var tp = _a[_i];
|
|
checkSourceElement(tp);
|
|
}
|
|
}
|
|
function checkJSDocTypeTag(node) {
|
|
checkSourceElement(node.typeExpression);
|
|
}
|
|
function checkJSDocLinkLikeTag(node) {
|
|
if (node.name) {
|
|
resolveJSDocMemberName(node.name, true);
|
|
}
|
|
}
|
|
function checkJSDocParameterTag(node) {
|
|
checkSourceElement(node.typeExpression);
|
|
}
|
|
function checkJSDocPropertyTag(node) {
|
|
checkSourceElement(node.typeExpression);
|
|
}
|
|
function checkJSDocFunctionType(node) {
|
|
addLazyDiagnostic(checkJSDocFunctionTypeImplicitAny);
|
|
checkSignatureDeclaration(node);
|
|
function checkJSDocFunctionTypeImplicitAny() {
|
|
if (!node.type && !ts.isJSDocConstructSignature(node)) {
|
|
reportImplicitAny(node, anyType);
|
|
}
|
|
}
|
|
}
|
|
function checkJSDocImplementsTag(node) {
|
|
var classLike = ts.getEffectiveJSDocHost(node);
|
|
if (!classLike || !ts.isClassDeclaration(classLike) && !ts.isClassExpression(classLike)) {
|
|
error(classLike, ts.Diagnostics.JSDoc_0_is_not_attached_to_a_class, ts.idText(node.tagName));
|
|
}
|
|
}
|
|
function checkJSDocAugmentsTag(node) {
|
|
var classLike = ts.getEffectiveJSDocHost(node);
|
|
if (!classLike || !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.getClassExtendsHeritageElement(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 checkJSDocAccessibilityModifiers(node) {
|
|
var host = ts.getJSDocHost(node);
|
|
if (host && ts.isPrivateIdentifierClassElementDeclaration(host)) {
|
|
error(node, ts.Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier);
|
|
}
|
|
}
|
|
function getIdentifierFromEntityNameExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return node;
|
|
case 206:
|
|
return node.name;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function checkFunctionOrMethodDeclaration(node) {
|
|
var _a;
|
|
checkDecorators(node);
|
|
checkSignatureDeclaration(node);
|
|
var functionFlags = ts.getFunctionFlags(node);
|
|
if (node.name && node.name.kind === 162) {
|
|
checkComputedPropertyName(node.name);
|
|
}
|
|
if (hasBindableName(node)) {
|
|
var symbol = getSymbolOfNode(node);
|
|
var localSymbol = node.localSymbol || symbol;
|
|
var firstDeclaration = (_a = localSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (declaration) { return declaration.kind === node.kind && !(declaration.flags & 262144); });
|
|
if (node === firstDeclaration) {
|
|
checkFunctionOrConstructorSymbol(localSymbol);
|
|
}
|
|
if (symbol.parent) {
|
|
checkFunctionOrConstructorSymbol(symbol);
|
|
}
|
|
}
|
|
var body = node.kind === 168 ? undefined : node.body;
|
|
checkSourceElement(body);
|
|
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
|
|
addLazyDiagnostic(checkFunctionOrMethodDeclarationDiagnostics);
|
|
if (ts.isInJSFile(node)) {
|
|
var typeTag = ts.getJSDocTypeTag(node);
|
|
if (typeTag && typeTag.typeExpression && !getContextualCallSignature(getTypeFromTypeNode(typeTag.typeExpression), node)) {
|
|
error(typeTag.typeExpression.type, ts.Diagnostics.The_type_of_a_function_declaration_must_match_the_function_s_signature);
|
|
}
|
|
}
|
|
function checkFunctionOrMethodDeclarationDiagnostics() {
|
|
if (!ts.getEffectiveReturnTypeNode(node)) {
|
|
if (ts.nodeIsMissing(body) && !isPrivateWithinAmbient(node)) {
|
|
reportImplicitAny(node, anyType);
|
|
}
|
|
if (functionFlags & 1 && ts.nodeIsPresent(body)) {
|
|
getReturnTypeOfSignature(getSignatureFromDeclaration(node));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function registerForUnusedIdentifiersCheck(node) {
|
|
addLazyDiagnostic(registerForUnusedIdentifiersCheckDiagnostics);
|
|
function registerForUnusedIdentifiersCheckDiagnostics() {
|
|
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 257:
|
|
case 226:
|
|
checkUnusedClassMembers(node, addDiagnostic);
|
|
checkUnusedTypeParameters(node, addDiagnostic);
|
|
break;
|
|
case 305:
|
|
case 261:
|
|
case 235:
|
|
case 263:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
checkUnusedLocalsAndParameters(node, addDiagnostic);
|
|
break;
|
|
case 171:
|
|
case 213:
|
|
case 256:
|
|
case 214:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
if (node.body) {
|
|
checkUnusedLocalsAndParameters(node, addDiagnostic);
|
|
}
|
|
checkUnusedTypeParameters(node, addDiagnostic);
|
|
break;
|
|
case 168:
|
|
case 174:
|
|
case 175:
|
|
case 179:
|
|
case 180:
|
|
case 259:
|
|
case 258:
|
|
checkUnusedTypeParameters(node, addDiagnostic);
|
|
break;
|
|
case 190:
|
|
checkUnusedInferTypeParameter(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(declaration, 0, ts.createDiagnosticForNode(node, message, name));
|
|
}
|
|
function isIdentifierThatStartsWithUnderscore(node) {
|
|
return ts.isIdentifier(node) && ts.idText(node).charCodeAt(0) === 95;
|
|
}
|
|
function checkUnusedClassMembers(node, addDiagnostic) {
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
switch (member.kind) {
|
|
case 169:
|
|
case 167:
|
|
case 172:
|
|
case 173:
|
|
if (member.kind === 173 && member.symbol.flags & 32768) {
|
|
break;
|
|
}
|
|
var symbol = getSymbolOfNode(member);
|
|
if (!symbol.isReferenced
|
|
&& (ts.hasEffectiveModifier(member, 8) || ts.isNamedDeclaration(member) && ts.isPrivateIdentifier(member.name))
|
|
&& !(member.flags & 16777216)) {
|
|
addDiagnostic(member, 0, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
|
|
}
|
|
break;
|
|
case 171:
|
|
for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
|
|
var parameter = _c[_b];
|
|
if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8)) {
|
|
addDiagnostic(parameter, 0, ts.createDiagnosticForNode(parameter.name, ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read, ts.symbolName(parameter.symbol)));
|
|
}
|
|
}
|
|
break;
|
|
case 176:
|
|
case 234:
|
|
case 170:
|
|
break;
|
|
default:
|
|
ts.Debug.fail("Unexpected class member");
|
|
}
|
|
}
|
|
}
|
|
function checkUnusedInferTypeParameter(node, addDiagnostic) {
|
|
var typeParameter = node.typeParameter;
|
|
if (isTypeParameterUnused(typeParameter)) {
|
|
addDiagnostic(node, 1, ts.createDiagnosticForNode(node, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.idText(typeParameter.name)));
|
|
}
|
|
}
|
|
function checkUnusedTypeParameters(node, addDiagnostic) {
|
|
var declarations = getSymbolOfNode(node).declarations;
|
|
if (!declarations || ts.last(declarations) !== node)
|
|
return;
|
|
var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
|
|
var seenParentsWithEveryUnused = new ts.Set();
|
|
for (var _i = 0, typeParameters_4 = typeParameters; _i < typeParameters_4.length; _i++) {
|
|
var typeParameter = typeParameters_4[_i];
|
|
if (!isTypeParameterUnused(typeParameter))
|
|
continue;
|
|
var name = ts.idText(typeParameter.name);
|
|
var parent = typeParameter.parent;
|
|
if (parent.kind !== 190 && parent.typeParameters.every(isTypeParameterUnused)) {
|
|
if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
|
|
var sourceFile = ts.getSourceFileOfNode(parent);
|
|
var range = ts.isJSDocTemplateTag(parent)
|
|
? ts.rangeOfNode(parent)
|
|
: ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
|
|
var only = parent.typeParameters.length === 1;
|
|
var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
|
|
var arg0 = only ? name : undefined;
|
|
addDiagnostic(typeParameter, 1, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
|
|
}
|
|
}
|
|
else {
|
|
addDiagnostic(typeParameter, 1, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
|
|
}
|
|
}
|
|
}
|
|
function isTypeParameterUnused(typeParameter) {
|
|
return !(getMergedSymbol(typeParameter.symbol).isReferenced & 262144) && !isIdentifierThatStartsWithUnderscore(typeParameter.name);
|
|
}
|
|
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 isValidUnusedLocalDeclaration(declaration) {
|
|
if (ts.isBindingElement(declaration)) {
|
|
if (ts.isObjectBindingPattern(declaration.parent)) {
|
|
return !!(declaration.propertyName && isIdentifierThatStartsWithUnderscore(declaration.name));
|
|
}
|
|
return isIdentifierThatStartsWithUnderscore(declaration.name);
|
|
}
|
|
return ts.isAmbientModule(declaration) ||
|
|
(ts.isVariableDeclaration(declaration) && ts.isForInOrOfStatement(declaration.parent.parent) || isImportedDeclaration(declaration)) && isIdentifierThatStartsWithUnderscore(declaration.name);
|
|
}
|
|
function checkUnusedLocalsAndParameters(nodeWithLocals, addDiagnostic) {
|
|
var unusedImports = new ts.Map();
|
|
var unusedDestructures = new ts.Map();
|
|
var unusedVariables = new ts.Map();
|
|
nodeWithLocals.locals.forEach(function (local) {
|
|
if (local.flags & 262144 ? !(local.flags & 3 && !(local.isReferenced & 3)) : local.isReferenced || local.exportSymbol) {
|
|
return;
|
|
}
|
|
if (local.declarations) {
|
|
for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
if (isValidUnusedLocalDeclaration(declaration)) {
|
|
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);
|
|
var name = local.valueDeclaration && ts.getNameOfDeclaration(local.valueDeclaration);
|
|
if (parameter && name) {
|
|
if (!ts.isParameterPropertyDeclaration(parameter, parameter.parent) && !ts.parameterIsThisKeyword(parameter) && !isIdentifierThatStartsWithUnderscore(name)) {
|
|
if (ts.isBindingElement(declaration) && ts.isArrayBindingPattern(declaration.parent)) {
|
|
addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId);
|
|
}
|
|
else {
|
|
addDiagnostic(parameter, 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 === 268 ? 1 : importClause.namedBindings.elements.length)
|
|
: 0);
|
|
if (nDeclarations === unuseds.length) {
|
|
addDiagnostic(importDecl, 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 === 254 && bindingPattern.parent.parent.kind === 255) {
|
|
addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
|
|
}
|
|
else {
|
|
addDiagnostic(bindingPattern, kind, bindingElements.length === 1
|
|
? ts.createDiagnosticForNode(bindingPattern, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(bindingElements).name))
|
|
: 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(e, kind, ts.createDiagnosticForNode(e, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(e.name)));
|
|
}
|
|
}
|
|
});
|
|
unusedVariables.forEach(function (_a) {
|
|
var declarationList = _a[0], declarations = _a[1];
|
|
if (declarationList.declarations.length === declarations.length) {
|
|
addDiagnostic(declarationList, 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 === 237 ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
|
|
}
|
|
else {
|
|
for (var _i = 0, declarations_6 = declarations; _i < declarations_6.length; _i++) {
|
|
var decl = declarations_6[_i];
|
|
addDiagnostic(decl, 0, ts.createDiagnosticForNode(decl, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(decl.name)));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function checkPotentialUncheckedRenamedBindingElementsInTypes() {
|
|
var _a;
|
|
for (var _i = 0, potentialUnusedRenamedBindingElementsInTypes_1 = potentialUnusedRenamedBindingElementsInTypes; _i < potentialUnusedRenamedBindingElementsInTypes_1.length; _i++) {
|
|
var node = potentialUnusedRenamedBindingElementsInTypes_1[_i];
|
|
if (!((_a = getSymbolOfNode(node)) === null || _a === void 0 ? void 0 : _a.isReferenced)) {
|
|
var wrappingDeclaration = ts.walkUpBindingElementsAndPatterns(node);
|
|
ts.Debug.assert(ts.isParameterDeclaration(wrappingDeclaration), "Only parameter declaration should be checked here");
|
|
var diagnostic = ts.createDiagnosticForNode(node.name, ts.Diagnostics._0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation, ts.declarationNameToString(node.name), ts.declarationNameToString(node.propertyName));
|
|
if (!wrappingDeclaration.type) {
|
|
ts.addRelatedInfo(diagnostic, ts.createFileDiagnostic(ts.getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 1, ts.Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, ts.declarationNameToString(node.propertyName)));
|
|
}
|
|
diagnostics.add(diagnostic);
|
|
}
|
|
}
|
|
}
|
|
function bindingNameText(name) {
|
|
switch (name.kind) {
|
|
case 79:
|
|
return ts.idText(name);
|
|
case 202:
|
|
case 201:
|
|
return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
|
|
default:
|
|
return ts.Debug.assertNever(name);
|
|
}
|
|
}
|
|
function isImportedDeclaration(node) {
|
|
return node.kind === 267 || node.kind === 270 || node.kind === 268;
|
|
}
|
|
function importClauseFromImported(decl) {
|
|
return decl.kind === 267 ? decl : decl.kind === 268 ? decl.parent : decl.parent.parent;
|
|
}
|
|
function checkBlock(node) {
|
|
if (node.kind === 235) {
|
|
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 || !ts.hasRestParameter(node) || node.flags & 16777216 || ts.nodeIsMissing(node.body)) {
|
|
return;
|
|
}
|
|
ts.forEach(node.parameters, function (p) {
|
|
if (p.name && !ts.isBindingPattern(p.name) && p.name.escapedText === argumentsSymbol.escapedName) {
|
|
errorSkippedOn("noEmit", p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
|
|
}
|
|
});
|
|
}
|
|
function needCollisionCheckForIdentifier(node, identifier, name) {
|
|
if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
|
|
return false;
|
|
}
|
|
if (node.kind === 167 ||
|
|
node.kind === 166 ||
|
|
node.kind === 169 ||
|
|
node.kind === 168 ||
|
|
node.kind === 172 ||
|
|
node.kind === 173 ||
|
|
node.kind === 296) {
|
|
return false;
|
|
}
|
|
if (node.flags & 16777216) {
|
|
return false;
|
|
}
|
|
if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
|
|
if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
|
|
return false;
|
|
}
|
|
}
|
|
var root = ts.getRootDeclaration(node);
|
|
if (ts.isParameter(root) && 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 !== 79;
|
|
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 !== 79;
|
|
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 && !(moduleKind >= ts.ModuleKind.Node16 && ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS)) {
|
|
return;
|
|
}
|
|
if (!name || !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 === 305 && ts.isExternalOrCommonJsModule(parent)) {
|
|
errorSkippedOn("noEmit", 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 (!name || languageVersion >= 4 || !needCollisionCheckForIdentifier(node, name, "Promise")) {
|
|
return;
|
|
}
|
|
if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) {
|
|
return;
|
|
}
|
|
var parent = getDeclarationContainer(node);
|
|
if (parent.kind === 305 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048) {
|
|
errorSkippedOn("noEmit", 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 recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
|
|
if (languageVersion <= 8
|
|
&& (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
|
|
potentialWeakMapSetCollisions.push(node);
|
|
}
|
|
}
|
|
function checkWeakMapSetCollision(node) {
|
|
var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
|
|
if (getNodeCheckFlags(enclosingBlockScope) & 67108864) {
|
|
ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name) && typeof node.name.escapedText === "string", "The target of a WeakMap/WeakSet collision check should be an identifier");
|
|
errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
|
|
}
|
|
}
|
|
function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
|
|
if (name && languageVersion >= 2 && languageVersion <= 8
|
|
&& needCollisionCheckForIdentifier(node, name, "Reflect")) {
|
|
potentialReflectCollisions.push(node);
|
|
}
|
|
}
|
|
function checkReflectCollision(node) {
|
|
var hasCollision = false;
|
|
if (ts.isClassExpression(node)) {
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (getNodeCheckFlags(member) & 134217728) {
|
|
hasCollision = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (ts.isFunctionExpression(node)) {
|
|
if (getNodeCheckFlags(node) & 134217728) {
|
|
hasCollision = true;
|
|
}
|
|
}
|
|
else {
|
|
var container = ts.getEnclosingBlockScopeContainer(node);
|
|
if (container && getNodeCheckFlags(container) & 134217728) {
|
|
hasCollision = true;
|
|
}
|
|
}
|
|
if (hasCollision) {
|
|
ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
|
|
errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
|
|
}
|
|
}
|
|
function checkCollisionsForDeclarationName(node, name) {
|
|
if (!name)
|
|
return;
|
|
checkCollisionWithRequireExportsInGeneratedCode(node, name);
|
|
checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
|
|
recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
|
|
recordPotentialCollisionWithReflectInGeneratedCode(node, name);
|
|
if (ts.isClassLike(node)) {
|
|
checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
|
|
if (!(node.flags & 16777216)) {
|
|
checkClassNameCollisionWithObject(name);
|
|
}
|
|
}
|
|
else if (ts.isEnumDeclaration(node)) {
|
|
checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
|
|
}
|
|
}
|
|
function checkVarDeclaredNamesNotShadowed(node) {
|
|
if ((ts.getCombinedNodeFlags(node) & 3) !== 0 || ts.isParameterDeclaration(node)) {
|
|
return;
|
|
}
|
|
if (node.kind === 254 && !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, 255);
|
|
var container = varDeclList.parent.kind === 237 && varDeclList.parent.parent
|
|
? varDeclList.parent.parent
|
|
: undefined;
|
|
var namesShareScope = container &&
|
|
(container.kind === 235 && ts.isFunctionLike(container.parent) ||
|
|
container.kind === 262 ||
|
|
container.kind === 261 ||
|
|
container.kind === 305);
|
|
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 convertAutoToAny(type) {
|
|
return type === autoType ? anyType : type === autoArrayType ? anyArrayType : type;
|
|
}
|
|
function checkVariableLikeDeclaration(node) {
|
|
var _a;
|
|
checkDecorators(node);
|
|
if (!ts.isBindingElement(node)) {
|
|
checkSourceElement(node.type);
|
|
}
|
|
if (!node.name) {
|
|
return;
|
|
}
|
|
if (node.name.kind === 162) {
|
|
checkComputedPropertyName(node.name);
|
|
if (ts.hasOnlyExpressionInitializer(node) && node.initializer) {
|
|
checkExpressionCached(node.initializer);
|
|
}
|
|
}
|
|
if (ts.isBindingElement(node)) {
|
|
if (node.propertyName &&
|
|
ts.isIdentifier(node.name) &&
|
|
ts.isParameterDeclaration(node) &&
|
|
ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
|
|
potentialUnusedRenamedBindingElementsInTypes.push(node);
|
|
return;
|
|
}
|
|
if (ts.isObjectBindingPattern(node.parent) && node.dotDotDotToken && languageVersion < 5) {
|
|
checkExternalEmitHelpers(node, 4);
|
|
}
|
|
if (node.propertyName && node.propertyName.kind === 162) {
|
|
checkComputedPropertyName(node.propertyName);
|
|
}
|
|
var parent = node.parent.parent;
|
|
var parentCheckMode = node.dotDotDotToken ? 64 : 0;
|
|
var parentType = getTypeForBindingElementParent(parent, parentCheckMode);
|
|
var name = node.propertyName || node.name;
|
|
if (parentType && !ts.isBindingPattern(name)) {
|
|
var exprType = getLiteralTypeFromPropertyName(name);
|
|
if (isTypeUsableAsPropertyName(exprType)) {
|
|
var nameText = getPropertyNameFromType(exprType);
|
|
var property = getPropertyOfType(parentType, nameText);
|
|
if (property) {
|
|
markPropertyAsReferenced(property, undefined, false);
|
|
checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106, false, parentType, property);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.isBindingPattern(node.name)) {
|
|
if (node.name.kind === 202 && languageVersion < 2 && compilerOptions.downlevelIteration) {
|
|
checkExternalEmitHelpers(node, 512);
|
|
}
|
|
ts.forEach(node.name.elements, checkSourceElement);
|
|
}
|
|
if (ts.isParameter(node) && node.initializer && 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)) {
|
|
var needCheckInitializer = ts.hasOnlyExpressionInitializer(node) && node.initializer && node.parent.parent.kind !== 243;
|
|
var needCheckWidenedType = !ts.some(node.name.elements, ts.not(ts.isOmittedExpression));
|
|
if (needCheckInitializer || needCheckWidenedType) {
|
|
var widenedType = getWidenedTypeForVariableLikeDeclaration(node);
|
|
if (needCheckInitializer) {
|
|
var initializerType = checkExpressionCached(node.initializer);
|
|
if (strictNullChecks && needCheckWidenedType) {
|
|
checkNonNullNonVoidType(initializerType, node);
|
|
}
|
|
else {
|
|
checkTypeAssignableToAndOptionallyElaborate(initializerType, getWidenedTypeForVariableLikeDeclaration(node), node, node.initializer);
|
|
}
|
|
}
|
|
if (needCheckWidenedType) {
|
|
if (ts.isArrayBindingPattern(node.name)) {
|
|
checkIteratedTypeOrElementType(65, widenedType, undefinedType, node);
|
|
}
|
|
else if (strictNullChecks) {
|
|
checkNonNullNonVoidType(widenedType, node);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
var symbol = getSymbolOfNode(node);
|
|
if (symbol.flags & 2097152 && ts.isVariableDeclarationInitializedToBareOrAccessedRequire(node.kind === 203 ? node.parent.parent : node)) {
|
|
checkAliasSymbol(node);
|
|
return;
|
|
}
|
|
var type = convertAutoToAny(getTypeOfSymbol(symbol));
|
|
if (node === symbol.valueDeclaration) {
|
|
var initializer = ts.hasOnlyExpressionInitializer(node) && ts.getEffectiveInitializer(node);
|
|
if (initializer) {
|
|
var isJSObjectLiteralInitializer = ts.isInJSFile(node) &&
|
|
ts.isObjectLiteralExpression(initializer) &&
|
|
(initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
|
|
!!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
|
|
if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 243) {
|
|
checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, undefined);
|
|
}
|
|
}
|
|
if (symbol.declarations && symbol.declarations.length > 1) {
|
|
if (ts.some(symbol.declarations, function (d) { return d !== node && ts.isVariableLike(d) && !areDeclarationFlagsIdentical(d, node); })) {
|
|
error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var declarationType = convertAutoToAny(getWidenedTypeForVariableLikeDeclaration(node));
|
|
if (!isErrorType(type) && !isErrorType(declarationType) &&
|
|
!isTypeIdenticalTo(type, declarationType) &&
|
|
!(symbol.flags & 67108864)) {
|
|
errorNextVariableOrPropertyDeclarationMustHaveSameType(symbol.valueDeclaration, type, node, declarationType);
|
|
}
|
|
if (ts.hasOnlyExpressionInitializer(node) && node.initializer) {
|
|
checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(node.initializer), declarationType, node, node.initializer, undefined);
|
|
}
|
|
if (symbol.valueDeclaration && !areDeclarationFlagsIdentical(node, symbol.valueDeclaration)) {
|
|
error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
|
|
}
|
|
}
|
|
if (node.kind !== 167 && node.kind !== 166) {
|
|
checkExportsOnMergedDeclarations(node);
|
|
if (node.kind === 254 || node.kind === 203) {
|
|
checkVarDeclaredNamesNotShadowed(node);
|
|
}
|
|
checkCollisionsForDeclarationName(node, node.name);
|
|
}
|
|
}
|
|
function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
|
|
var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
|
|
var message = nextDeclaration.kind === 167 || nextDeclaration.kind === 166
|
|
? 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;
|
|
var declName = ts.declarationNameToString(nextDeclarationName);
|
|
var err = error(nextDeclarationName, message, declName, typeToString(firstType), typeToString(nextType));
|
|
if (firstDeclaration) {
|
|
ts.addRelatedInfo(err, ts.createDiagnosticForNode(firstDeclaration, ts.Diagnostics._0_was_also_declared_here, declName));
|
|
}
|
|
}
|
|
function areDeclarationFlagsIdentical(left, right) {
|
|
if ((left.kind === 164 && right.kind === 254) ||
|
|
(left.kind === 254 && right.kind === 164)) {
|
|
return true;
|
|
}
|
|
if (ts.hasQuestionToken(left) !== ts.hasQuestionToken(right)) {
|
|
return false;
|
|
}
|
|
var interestingFlags = 8 |
|
|
16 |
|
|
256 |
|
|
128 |
|
|
64 |
|
|
32;
|
|
return ts.getSelectedEffectiveModifierFlags(left, interestingFlags) === ts.getSelectedEffectiveModifierFlags(right, interestingFlags);
|
|
}
|
|
function checkVariableDeclaration(node) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("check", "checkVariableDeclaration", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath });
|
|
checkGrammarVariableDeclaration(node);
|
|
checkVariableLikeDeclaration(node);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
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);
|
|
checkTruthinessExpression(node.expression);
|
|
checkTestingKnownTruthyCallableOrAwaitableType(node.expression, node.thenStatement);
|
|
checkSourceElement(node.thenStatement);
|
|
if (node.thenStatement.kind === 236) {
|
|
error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
|
|
}
|
|
checkSourceElement(node.elseStatement);
|
|
}
|
|
function checkTestingKnownTruthyCallableOrAwaitableType(condExpr, body) {
|
|
if (!strictNullChecks)
|
|
return;
|
|
helper(condExpr, body);
|
|
while (ts.isBinaryExpression(condExpr) && condExpr.operatorToken.kind === 56) {
|
|
condExpr = condExpr.left;
|
|
helper(condExpr, body);
|
|
}
|
|
function helper(condExpr, body) {
|
|
var location = ts.isBinaryExpression(condExpr) &&
|
|
(condExpr.operatorToken.kind === 56 || condExpr.operatorToken.kind === 55)
|
|
? condExpr.right
|
|
: condExpr;
|
|
if (ts.isModuleExportsAccessExpression(location))
|
|
return;
|
|
var type = checkTruthinessExpression(location);
|
|
var isPropertyExpressionCast = ts.isPropertyAccessExpression(location) && isTypeAssertion(location.expression);
|
|
if (!(getTypeFacts(type) & 4194304) || isPropertyExpressionCast)
|
|
return;
|
|
var callSignatures = getSignaturesOfType(type, 0);
|
|
var isPromise = !!getAwaitedTypeOfPromise(type);
|
|
if (callSignatures.length === 0 && !isPromise) {
|
|
return;
|
|
}
|
|
var testedNode = ts.isIdentifier(location) ? location
|
|
: ts.isPropertyAccessExpression(location) ? location.name
|
|
: ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
|
|
: undefined;
|
|
var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
|
|
if (!testedSymbol && !isPromise) {
|
|
return;
|
|
}
|
|
var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
|
|
|| testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
|
|
if (!isUsed) {
|
|
if (isPromise) {
|
|
errorAndMaybeSuggestAwait(location, true, ts.Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined, getTypeNameForErrorDisplay(type));
|
|
}
|
|
else {
|
|
error(location, ts.Diagnostics.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isSymbolUsedInConditionBody(expr, body, testedNode, testedSymbol) {
|
|
return !!ts.forEachChild(body, function check(childNode) {
|
|
if (ts.isIdentifier(childNode)) {
|
|
var childSymbol = getSymbolAtLocation(childNode);
|
|
if (childSymbol && childSymbol === testedSymbol) {
|
|
if (ts.isIdentifier(expr) || ts.isIdentifier(testedNode) && ts.isBinaryExpression(testedNode.parent)) {
|
|
return true;
|
|
}
|
|
var testedExpression = testedNode.parent;
|
|
var childExpression = childNode.parent;
|
|
while (testedExpression && childExpression) {
|
|
if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
|
|
testedExpression.kind === 108 && childExpression.kind === 108) {
|
|
return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
|
|
}
|
|
else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
|
|
if (getSymbolAtLocation(testedExpression.name) !== getSymbolAtLocation(childExpression.name)) {
|
|
return false;
|
|
}
|
|
childExpression = childExpression.expression;
|
|
testedExpression = testedExpression.expression;
|
|
}
|
|
else if (ts.isCallExpression(testedExpression) && ts.isCallExpression(childExpression)) {
|
|
childExpression = childExpression.expression;
|
|
testedExpression = testedExpression.expression;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ts.forEachChild(childNode, check);
|
|
});
|
|
}
|
|
function isSymbolUsedInBinaryExpressionChain(node, testedSymbol) {
|
|
while (ts.isBinaryExpression(node) && node.operatorToken.kind === 55) {
|
|
var isUsed = ts.forEachChild(node.right, function visit(child) {
|
|
if (ts.isIdentifier(child)) {
|
|
var symbol = getSymbolAtLocation(child);
|
|
if (symbol && symbol === testedSymbol) {
|
|
return true;
|
|
}
|
|
}
|
|
return ts.forEachChild(child, visit);
|
|
});
|
|
if (isUsed) {
|
|
return true;
|
|
}
|
|
node = node.parent;
|
|
}
|
|
return false;
|
|
}
|
|
function checkDoStatement(node) {
|
|
checkGrammarStatementInAmbientContext(node);
|
|
checkSourceElement(node.statement);
|
|
checkTruthinessExpression(node.expression);
|
|
}
|
|
function checkWhileStatement(node) {
|
|
checkGrammarStatementInAmbientContext(node);
|
|
checkTruthinessExpression(node.expression);
|
|
checkSourceElement(node.statement);
|
|
}
|
|
function checkTruthinessOfType(type, node) {
|
|
if (type.flags & 16384) {
|
|
error(node, ts.Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness);
|
|
}
|
|
return type;
|
|
}
|
|
function checkTruthinessExpression(node, checkMode) {
|
|
return checkTruthinessOfType(checkExpression(node, checkMode), node);
|
|
}
|
|
function checkForStatement(node) {
|
|
if (!checkGrammarStatementInAmbientContext(node)) {
|
|
if (node.initializer && node.initializer.kind === 255) {
|
|
checkGrammarVariableDeclarationList(node.initializer);
|
|
}
|
|
}
|
|
if (node.initializer) {
|
|
if (node.initializer.kind === 255) {
|
|
ts.forEach(node.initializer.declarations, checkVariableDeclaration);
|
|
}
|
|
else {
|
|
checkExpression(node.initializer);
|
|
}
|
|
}
|
|
if (node.condition)
|
|
checkTruthinessExpression(node.condition);
|
|
if (node.incrementor)
|
|
checkExpression(node.incrementor);
|
|
checkSourceElement(node.statement);
|
|
if (node.locals) {
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
}
|
|
function checkForOfStatement(node) {
|
|
checkGrammarForInOrForOfStatement(node);
|
|
var container = ts.getContainingFunctionOrClassStaticBlock(node);
|
|
if (node.awaitModifier) {
|
|
if (container && ts.isClassStaticBlockDeclaration(container)) {
|
|
grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
|
|
}
|
|
else {
|
|
var functionFlags = ts.getFunctionFlags(container);
|
|
if ((functionFlags & (4 | 2)) === 2 && languageVersion < 99) {
|
|
checkExternalEmitHelpers(node, 16384);
|
|
}
|
|
}
|
|
}
|
|
else if (compilerOptions.downlevelIteration && languageVersion < 2) {
|
|
checkExternalEmitHelpers(node, 256);
|
|
}
|
|
if (node.initializer.kind === 255) {
|
|
checkForInOrForOfVariableDeclaration(node);
|
|
}
|
|
else {
|
|
var varExpr = node.initializer;
|
|
var iteratedType = checkRightHandSideOfForOf(node);
|
|
if (varExpr.kind === 204 || varExpr.kind === 205) {
|
|
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, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access);
|
|
if (iteratedType) {
|
|
checkTypeAssignableToAndOptionallyElaborate(iteratedType, leftType, varExpr, node.expression);
|
|
}
|
|
}
|
|
}
|
|
checkSourceElement(node.statement);
|
|
if (node.locals) {
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
}
|
|
function checkForInStatement(node) {
|
|
checkGrammarForInOrForOfStatement(node);
|
|
var rightType = getNonNullableTypeIfNeeded(checkExpression(node.expression));
|
|
if (node.initializer.kind === 255) {
|
|
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 === 204 || varExpr.kind === 205) {
|
|
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, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access);
|
|
}
|
|
}
|
|
if (rightType === neverType || !isTypeAssignableToKind(rightType, 67108864 | 58982400)) {
|
|
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(statement) {
|
|
var use = statement.awaitModifier ? 15 : 13;
|
|
return checkIteratedTypeOrElementType(use, checkNonNullExpression(statement.expression), undefinedType, statement.expression);
|
|
}
|
|
function checkIteratedTypeOrElementType(use, inputType, sentType, errorNode) {
|
|
if (isTypeAny(inputType)) {
|
|
return inputType;
|
|
}
|
|
return getIteratedTypeOrElementType(use, inputType, sentType, errorNode, true) || anyType;
|
|
}
|
|
function getIteratedTypeOrElementType(use, inputType, sentType, errorNode, checkAssignability) {
|
|
var allowAsyncIterables = (use & 2) !== 0;
|
|
if (inputType === neverType) {
|
|
reportTypeNotIterableError(errorNode, inputType, allowAsyncIterables);
|
|
return undefined;
|
|
}
|
|
var uplevelIteration = languageVersion >= 2;
|
|
var downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration;
|
|
var possibleOutOfBounds = compilerOptions.noUncheckedIndexedAccess && !!(use & 128);
|
|
if (uplevelIteration || downlevelIteration || allowAsyncIterables) {
|
|
var iterationTypes = getIterationTypesOfIterable(inputType, use, uplevelIteration ? errorNode : undefined);
|
|
if (checkAssignability) {
|
|
if (iterationTypes) {
|
|
var diagnostic = use & 8 ? ts.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0 :
|
|
use & 32 ? ts.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0 :
|
|
use & 64 ? ts.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0 :
|
|
use & 16 ? ts.Diagnostics.Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0 :
|
|
undefined;
|
|
if (diagnostic) {
|
|
checkTypeAssignableTo(sentType, iterationTypes.nextType, errorNode, diagnostic);
|
|
}
|
|
}
|
|
}
|
|
if (iterationTypes || uplevelIteration) {
|
|
return possibleOutOfBounds ? includeUndefinedInIndexSignature(iterationTypes && iterationTypes.yieldType) : (iterationTypes && iterationTypes.yieldType);
|
|
}
|
|
}
|
|
var arrayType = inputType;
|
|
var reportedError = false;
|
|
var hasStringConstituent = false;
|
|
if (use & 4) {
|
|
if (arrayType.flags & 1048576) {
|
|
var arrayTypes = inputType.types;
|
|
var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 402653316); });
|
|
if (filteredTypes !== arrayTypes) {
|
|
arrayType = getUnionType(filteredTypes, 2);
|
|
}
|
|
}
|
|
else if (arrayType.flags & 402653316) {
|
|
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 & 131072) {
|
|
return possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType;
|
|
}
|
|
}
|
|
}
|
|
if (!isArrayLikeType(arrayType)) {
|
|
if (errorNode && !reportedError) {
|
|
var allowsStrings = !!(use & 4) && !hasStringConstituent;
|
|
var _a = getIterationDiagnosticDetails(allowsStrings, downlevelIteration), defaultDiagnostic = _a[0], maybeMissingAwait = _a[1];
|
|
errorAndMaybeSuggestAwait(errorNode, maybeMissingAwait && !!getAwaitedTypeOfPromise(arrayType), defaultDiagnostic, typeToString(arrayType));
|
|
}
|
|
return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
|
|
}
|
|
var arrayElementType = getIndexTypeOfType(arrayType, numberType);
|
|
if (hasStringConstituent && arrayElementType) {
|
|
if (arrayElementType.flags & 402653316 && !compilerOptions.noUncheckedIndexedAccess) {
|
|
return stringType;
|
|
}
|
|
return getUnionType(possibleOutOfBounds ? [arrayElementType, stringType, undefinedType] : [arrayElementType, stringType], 2);
|
|
}
|
|
return (use & 128) ? includeUndefinedInIndexSignature(arrayElementType) : arrayElementType;
|
|
function getIterationDiagnosticDetails(allowsStrings, downlevelIteration) {
|
|
var _a;
|
|
if (downlevelIteration) {
|
|
return allowsStrings
|
|
? [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, true]
|
|
: [ts.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator, true];
|
|
}
|
|
var yieldType = getIterationTypeOfIterable(use, 0, inputType, undefined);
|
|
if (yieldType) {
|
|
return [ts.Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher, false];
|
|
}
|
|
if (isES2015OrLaterIterable((_a = inputType.symbol) === null || _a === void 0 ? void 0 : _a.escapedName)) {
|
|
return [ts.Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher, true];
|
|
}
|
|
return allowsStrings
|
|
? [ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type, true]
|
|
: [ts.Diagnostics.Type_0_is_not_an_array_type, true];
|
|
}
|
|
}
|
|
function isES2015OrLaterIterable(n) {
|
|
switch (n) {
|
|
case "Float32Array":
|
|
case "Float64Array":
|
|
case "Int16Array":
|
|
case "Int32Array":
|
|
case "Int8Array":
|
|
case "NodeList":
|
|
case "Uint16Array":
|
|
case "Uint32Array":
|
|
case "Uint8Array":
|
|
case "Uint8ClampedArray":
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getIterationTypeOfIterable(use, typeKind, inputType, errorNode) {
|
|
if (isTypeAny(inputType)) {
|
|
return undefined;
|
|
}
|
|
var iterationTypes = getIterationTypesOfIterable(inputType, use, errorNode);
|
|
return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(typeKind)];
|
|
}
|
|
function createIterationTypes(yieldType, returnType, nextType) {
|
|
if (yieldType === void 0) { yieldType = neverType; }
|
|
if (returnType === void 0) { returnType = neverType; }
|
|
if (nextType === void 0) { nextType = unknownType; }
|
|
if (yieldType.flags & 67359327 &&
|
|
returnType.flags & (1 | 131072 | 2 | 16384 | 32768) &&
|
|
nextType.flags & (1 | 131072 | 2 | 16384 | 32768)) {
|
|
var id = getTypeListId([yieldType, returnType, nextType]);
|
|
var iterationTypes = iterationTypesCache.get(id);
|
|
if (!iterationTypes) {
|
|
iterationTypes = { yieldType: yieldType, returnType: returnType, nextType: nextType };
|
|
iterationTypesCache.set(id, iterationTypes);
|
|
}
|
|
return iterationTypes;
|
|
}
|
|
return { yieldType: yieldType, returnType: returnType, nextType: nextType };
|
|
}
|
|
function combineIterationTypes(array) {
|
|
var yieldTypes;
|
|
var returnTypes;
|
|
var nextTypes;
|
|
for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
|
|
var iterationTypes = array_11[_i];
|
|
if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
|
|
continue;
|
|
}
|
|
if (iterationTypes === anyIterationTypes) {
|
|
return anyIterationTypes;
|
|
}
|
|
yieldTypes = ts.append(yieldTypes, iterationTypes.yieldType);
|
|
returnTypes = ts.append(returnTypes, iterationTypes.returnType);
|
|
nextTypes = ts.append(nextTypes, iterationTypes.nextType);
|
|
}
|
|
if (yieldTypes || returnTypes || nextTypes) {
|
|
return createIterationTypes(yieldTypes && getUnionType(yieldTypes), returnTypes && getUnionType(returnTypes), nextTypes && getIntersectionType(nextTypes));
|
|
}
|
|
return noIterationTypes;
|
|
}
|
|
function getCachedIterationTypes(type, cacheKey) {
|
|
return type[cacheKey];
|
|
}
|
|
function setCachedIterationTypes(type, cacheKey, cachedTypes) {
|
|
return type[cacheKey] = cachedTypes;
|
|
}
|
|
function getIterationTypesOfIterable(type, use, errorNode) {
|
|
var _a, _b;
|
|
if (isTypeAny(type)) {
|
|
return anyIterationTypes;
|
|
}
|
|
if (!(type.flags & 1048576)) {
|
|
var errorOutputContainer = errorNode ? { errors: undefined } : undefined;
|
|
var iterationTypes_1 = getIterationTypesOfIterableWorker(type, use, errorNode, errorOutputContainer);
|
|
if (iterationTypes_1 === noIterationTypes) {
|
|
if (errorNode) {
|
|
var rootDiag = reportTypeNotIterableError(errorNode, type, !!(use & 2));
|
|
if (errorOutputContainer === null || errorOutputContainer === void 0 ? void 0 : errorOutputContainer.errors) {
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([rootDiag], errorOutputContainer.errors, false));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
else if ((_a = errorOutputContainer === null || errorOutputContainer === void 0 ? void 0 : errorOutputContainer.errors) === null || _a === void 0 ? void 0 : _a.length) {
|
|
for (var _i = 0, _c = errorOutputContainer.errors; _i < _c.length; _i++) {
|
|
var diag = _c[_i];
|
|
diagnostics.add(diag);
|
|
}
|
|
}
|
|
return iterationTypes_1;
|
|
}
|
|
var cacheKey = use & 2 ? "iterationTypesOfAsyncIterable" : "iterationTypesOfIterable";
|
|
var cachedTypes = getCachedIterationTypes(type, cacheKey);
|
|
if (cachedTypes)
|
|
return cachedTypes === noIterationTypes ? undefined : cachedTypes;
|
|
var allIterationTypes;
|
|
for (var _d = 0, _e = type.types; _d < _e.length; _d++) {
|
|
var constituent = _e[_d];
|
|
var errorOutputContainer = errorNode ? { errors: undefined } : undefined;
|
|
var iterationTypes_2 = getIterationTypesOfIterableWorker(constituent, use, errorNode, errorOutputContainer);
|
|
if (iterationTypes_2 === noIterationTypes) {
|
|
if (errorNode) {
|
|
var rootDiag = reportTypeNotIterableError(errorNode, type, !!(use & 2));
|
|
if (errorOutputContainer === null || errorOutputContainer === void 0 ? void 0 : errorOutputContainer.errors) {
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([rootDiag], errorOutputContainer.errors, false));
|
|
}
|
|
}
|
|
setCachedIterationTypes(type, cacheKey, noIterationTypes);
|
|
return undefined;
|
|
}
|
|
else if ((_b = errorOutputContainer === null || errorOutputContainer === void 0 ? void 0 : errorOutputContainer.errors) === null || _b === void 0 ? void 0 : _b.length) {
|
|
for (var _f = 0, _g = errorOutputContainer.errors; _f < _g.length; _f++) {
|
|
var diag = _g[_f];
|
|
diagnostics.add(diag);
|
|
}
|
|
}
|
|
allIterationTypes = ts.append(allIterationTypes, iterationTypes_2);
|
|
}
|
|
var iterationTypes = allIterationTypes ? combineIterationTypes(allIterationTypes) : noIterationTypes;
|
|
setCachedIterationTypes(type, cacheKey, iterationTypes);
|
|
return iterationTypes === noIterationTypes ? undefined : iterationTypes;
|
|
}
|
|
function getAsyncFromSyncIterationTypes(iterationTypes, errorNode) {
|
|
if (iterationTypes === noIterationTypes)
|
|
return noIterationTypes;
|
|
if (iterationTypes === anyIterationTypes)
|
|
return anyIterationTypes;
|
|
var yieldType = iterationTypes.yieldType, returnType = iterationTypes.returnType, nextType = iterationTypes.nextType;
|
|
if (errorNode) {
|
|
getGlobalAwaitedSymbol(true);
|
|
}
|
|
return createIterationTypes(getAwaitedType(yieldType, errorNode) || anyType, getAwaitedType(returnType, errorNode) || anyType, nextType);
|
|
}
|
|
function getIterationTypesOfIterableWorker(type, use, errorNode, errorOutputContainer) {
|
|
if (isTypeAny(type)) {
|
|
return anyIterationTypes;
|
|
}
|
|
var noCache = false;
|
|
if (use & 2) {
|
|
var iterationTypes = getIterationTypesOfIterableCached(type, asyncIterationTypesResolver) ||
|
|
getIterationTypesOfIterableFast(type, asyncIterationTypesResolver);
|
|
if (iterationTypes) {
|
|
if (iterationTypes === noIterationTypes && errorNode) {
|
|
noCache = true;
|
|
}
|
|
else {
|
|
return use & 8 ?
|
|
getAsyncFromSyncIterationTypes(iterationTypes, errorNode) :
|
|
iterationTypes;
|
|
}
|
|
}
|
|
}
|
|
if (use & 1) {
|
|
var iterationTypes = getIterationTypesOfIterableCached(type, syncIterationTypesResolver) ||
|
|
getIterationTypesOfIterableFast(type, syncIterationTypesResolver);
|
|
if (iterationTypes) {
|
|
if (iterationTypes === noIterationTypes && errorNode) {
|
|
noCache = true;
|
|
}
|
|
else {
|
|
if (use & 2) {
|
|
if (iterationTypes !== noIterationTypes) {
|
|
iterationTypes = getAsyncFromSyncIterationTypes(iterationTypes, errorNode);
|
|
return noCache ? iterationTypes : setCachedIterationTypes(type, "iterationTypesOfAsyncIterable", iterationTypes);
|
|
}
|
|
}
|
|
else {
|
|
return iterationTypes;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (use & 2) {
|
|
var iterationTypes = getIterationTypesOfIterableSlow(type, asyncIterationTypesResolver, errorNode, errorOutputContainer, noCache);
|
|
if (iterationTypes !== noIterationTypes) {
|
|
return iterationTypes;
|
|
}
|
|
}
|
|
if (use & 1) {
|
|
var iterationTypes = getIterationTypesOfIterableSlow(type, syncIterationTypesResolver, errorNode, errorOutputContainer, noCache);
|
|
if (iterationTypes !== noIterationTypes) {
|
|
if (use & 2) {
|
|
iterationTypes = getAsyncFromSyncIterationTypes(iterationTypes, errorNode);
|
|
return noCache ? iterationTypes : setCachedIterationTypes(type, "iterationTypesOfAsyncIterable", iterationTypes);
|
|
}
|
|
else {
|
|
return iterationTypes;
|
|
}
|
|
}
|
|
}
|
|
return noIterationTypes;
|
|
}
|
|
function getIterationTypesOfIterableCached(type, resolver) {
|
|
return getCachedIterationTypes(type, resolver.iterableCacheKey);
|
|
}
|
|
function getIterationTypesOfGlobalIterableType(globalType, resolver) {
|
|
var globalIterationTypes = getIterationTypesOfIterableCached(globalType, resolver) ||
|
|
getIterationTypesOfIterableSlow(globalType, resolver, undefined, undefined, false);
|
|
return globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes;
|
|
}
|
|
function getIterationTypesOfIterableFast(type, resolver) {
|
|
var globalType;
|
|
if (isReferenceToType(type, globalType = resolver.getGlobalIterableType(false)) ||
|
|
isReferenceToType(type, globalType = resolver.getGlobalIterableIteratorType(false))) {
|
|
var yieldType = getTypeArguments(type)[0];
|
|
var _a = getIterationTypesOfGlobalIterableType(globalType, resolver), returnType = _a.returnType, nextType = _a.nextType;
|
|
return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType(yieldType, undefined) || yieldType, resolver.resolveIterationType(returnType, undefined) || returnType, nextType));
|
|
}
|
|
if (isReferenceToType(type, resolver.getGlobalGeneratorType(false))) {
|
|
var _b = getTypeArguments(type), yieldType = _b[0], returnType = _b[1], nextType = _b[2];
|
|
return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType(yieldType, undefined) || yieldType, resolver.resolveIterationType(returnType, undefined) || returnType, nextType));
|
|
}
|
|
}
|
|
function getPropertyNameForKnownSymbolName(symbolName) {
|
|
var ctorType = getGlobalESSymbolConstructorSymbol(false);
|
|
var uniqueType = ctorType && getTypeOfPropertyOfType(getTypeOfSymbol(ctorType), ts.escapeLeadingUnderscores(symbolName));
|
|
return uniqueType && isTypeUsableAsPropertyName(uniqueType) ? getPropertyNameFromType(uniqueType) : "__@".concat(symbolName);
|
|
}
|
|
function getIterationTypesOfIterableSlow(type, resolver, errorNode, errorOutputContainer, noCache) {
|
|
var _a;
|
|
var method = getPropertyOfType(type, getPropertyNameForKnownSymbolName(resolver.iteratorSymbolName));
|
|
var methodType = method && !(method.flags & 16777216) ? getTypeOfSymbol(method) : undefined;
|
|
if (isTypeAny(methodType)) {
|
|
return noCache ? anyIterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, anyIterationTypes);
|
|
}
|
|
var signatures = methodType ? getSignaturesOfType(methodType, 0) : undefined;
|
|
if (!ts.some(signatures)) {
|
|
return noCache ? noIterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, noIterationTypes);
|
|
}
|
|
var iteratorType = getIntersectionType(ts.map(signatures, getReturnTypeOfSignature));
|
|
var iterationTypes = (_a = getIterationTypesOfIteratorWorker(iteratorType, resolver, errorNode, errorOutputContainer, noCache)) !== null && _a !== void 0 ? _a : noIterationTypes;
|
|
return noCache ? iterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, iterationTypes);
|
|
}
|
|
function reportTypeNotIterableError(errorNode, type, allowAsyncIterables) {
|
|
var message = 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;
|
|
return errorAndMaybeSuggestAwait(errorNode, !!getAwaitedTypeOfPromise(type), message, typeToString(type));
|
|
}
|
|
function getIterationTypesOfIterator(type, resolver, errorNode, errorOutputContainer) {
|
|
return getIterationTypesOfIteratorWorker(type, resolver, errorNode, errorOutputContainer, false);
|
|
}
|
|
function getIterationTypesOfIteratorWorker(type, resolver, errorNode, errorOutputContainer, noCache) {
|
|
if (isTypeAny(type)) {
|
|
return anyIterationTypes;
|
|
}
|
|
var iterationTypes = getIterationTypesOfIteratorCached(type, resolver) ||
|
|
getIterationTypesOfIteratorFast(type, resolver);
|
|
if (iterationTypes === noIterationTypes && errorNode) {
|
|
iterationTypes = undefined;
|
|
noCache = true;
|
|
}
|
|
iterationTypes !== null && iterationTypes !== void 0 ? iterationTypes : (iterationTypes = getIterationTypesOfIteratorSlow(type, resolver, errorNode, errorOutputContainer, noCache));
|
|
return iterationTypes === noIterationTypes ? undefined : iterationTypes;
|
|
}
|
|
function getIterationTypesOfIteratorCached(type, resolver) {
|
|
return getCachedIterationTypes(type, resolver.iteratorCacheKey);
|
|
}
|
|
function getIterationTypesOfIteratorFast(type, resolver) {
|
|
var globalType = resolver.getGlobalIterableIteratorType(false);
|
|
if (isReferenceToType(type, globalType)) {
|
|
var yieldType = getTypeArguments(type)[0];
|
|
var globalIterationTypes = getIterationTypesOfIteratorCached(globalType, resolver) ||
|
|
getIterationTypesOfIteratorSlow(globalType, resolver, undefined, undefined, false);
|
|
var _a = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes, returnType = _a.returnType, nextType = _a.nextType;
|
|
return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType));
|
|
}
|
|
if (isReferenceToType(type, resolver.getGlobalIteratorType(false)) ||
|
|
isReferenceToType(type, resolver.getGlobalGeneratorType(false))) {
|
|
var _b = getTypeArguments(type), yieldType = _b[0], returnType = _b[1], nextType = _b[2];
|
|
return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType));
|
|
}
|
|
}
|
|
function isIteratorResult(type, kind) {
|
|
var doneType = getTypeOfPropertyOfType(type, "done") || falseType;
|
|
return isTypeAssignableTo(kind === 0 ? falseType : trueType, doneType);
|
|
}
|
|
function isYieldIteratorResult(type) {
|
|
return isIteratorResult(type, 0);
|
|
}
|
|
function isReturnIteratorResult(type) {
|
|
return isIteratorResult(type, 1);
|
|
}
|
|
function getIterationTypesOfIteratorResult(type) {
|
|
if (isTypeAny(type)) {
|
|
return anyIterationTypes;
|
|
}
|
|
var cachedTypes = getCachedIterationTypes(type, "iterationTypesOfIteratorResult");
|
|
if (cachedTypes) {
|
|
return cachedTypes;
|
|
}
|
|
if (isReferenceToType(type, getGlobalIteratorYieldResultType(false))) {
|
|
var yieldType_1 = getTypeArguments(type)[0];
|
|
return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes(yieldType_1, undefined, undefined));
|
|
}
|
|
if (isReferenceToType(type, getGlobalIteratorReturnResultType(false))) {
|
|
var returnType_1 = getTypeArguments(type)[0];
|
|
return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes(undefined, returnType_1, undefined));
|
|
}
|
|
var yieldIteratorResult = filterType(type, isYieldIteratorResult);
|
|
var yieldType = yieldIteratorResult !== neverType ? getTypeOfPropertyOfType(yieldIteratorResult, "value") : undefined;
|
|
var returnIteratorResult = filterType(type, isReturnIteratorResult);
|
|
var returnType = returnIteratorResult !== neverType ? getTypeOfPropertyOfType(returnIteratorResult, "value") : undefined;
|
|
if (!yieldType && !returnType) {
|
|
return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", noIterationTypes);
|
|
}
|
|
return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes(yieldType, returnType || voidType, undefined));
|
|
}
|
|
function getIterationTypesOfMethod(type, resolver, methodName, errorNode, errorOutputContainer) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
var method = getPropertyOfType(type, methodName);
|
|
if (!method && methodName !== "next") {
|
|
return undefined;
|
|
}
|
|
var methodType = method && !(methodName === "next" && (method.flags & 16777216))
|
|
? methodName === "next" ? getTypeOfSymbol(method) : getTypeWithFacts(getTypeOfSymbol(method), 2097152)
|
|
: undefined;
|
|
if (isTypeAny(methodType)) {
|
|
return methodName === "next" ? anyIterationTypes : anyIterationTypesExceptNext;
|
|
}
|
|
var methodSignatures = methodType ? getSignaturesOfType(methodType, 0) : ts.emptyArray;
|
|
if (methodSignatures.length === 0) {
|
|
if (errorNode) {
|
|
var diagnostic = methodName === "next"
|
|
? resolver.mustHaveANextMethodDiagnostic
|
|
: resolver.mustBeAMethodDiagnostic;
|
|
if (errorOutputContainer) {
|
|
(_a = errorOutputContainer.errors) !== null && _a !== void 0 ? _a : (errorOutputContainer.errors = []);
|
|
errorOutputContainer.errors.push(ts.createDiagnosticForNode(errorNode, diagnostic, methodName));
|
|
}
|
|
else {
|
|
error(errorNode, diagnostic, methodName);
|
|
}
|
|
}
|
|
return methodName === "next" ? noIterationTypes : undefined;
|
|
}
|
|
if ((methodType === null || methodType === void 0 ? void 0 : methodType.symbol) && methodSignatures.length === 1) {
|
|
var globalGeneratorType = resolver.getGlobalGeneratorType(false);
|
|
var globalIteratorType = resolver.getGlobalIteratorType(false);
|
|
var isGeneratorMethod = ((_c = (_b = globalGeneratorType.symbol) === null || _b === void 0 ? void 0 : _b.members) === null || _c === void 0 ? void 0 : _c.get(methodName)) === methodType.symbol;
|
|
var isIteratorMethod = !isGeneratorMethod && ((_e = (_d = globalIteratorType.symbol) === null || _d === void 0 ? void 0 : _d.members) === null || _e === void 0 ? void 0 : _e.get(methodName)) === methodType.symbol;
|
|
if (isGeneratorMethod || isIteratorMethod) {
|
|
var globalType = isGeneratorMethod ? globalGeneratorType : globalIteratorType;
|
|
var mapper = methodType.mapper;
|
|
return createIterationTypes(getMappedType(globalType.typeParameters[0], mapper), getMappedType(globalType.typeParameters[1], mapper), methodName === "next" ? getMappedType(globalType.typeParameters[2], mapper) : undefined);
|
|
}
|
|
}
|
|
var methodParameterTypes;
|
|
var methodReturnTypes;
|
|
for (var _i = 0, methodSignatures_1 = methodSignatures; _i < methodSignatures_1.length; _i++) {
|
|
var signature = methodSignatures_1[_i];
|
|
if (methodName !== "throw" && ts.some(signature.parameters)) {
|
|
methodParameterTypes = ts.append(methodParameterTypes, getTypeAtPosition(signature, 0));
|
|
}
|
|
methodReturnTypes = ts.append(methodReturnTypes, getReturnTypeOfSignature(signature));
|
|
}
|
|
var returnTypes;
|
|
var nextType;
|
|
if (methodName !== "throw") {
|
|
var methodParameterType = methodParameterTypes ? getUnionType(methodParameterTypes) : unknownType;
|
|
if (methodName === "next") {
|
|
nextType = methodParameterType;
|
|
}
|
|
else if (methodName === "return") {
|
|
var resolvedMethodParameterType = resolver.resolveIterationType(methodParameterType, errorNode) || anyType;
|
|
returnTypes = ts.append(returnTypes, resolvedMethodParameterType);
|
|
}
|
|
}
|
|
var yieldType;
|
|
var methodReturnType = methodReturnTypes ? getIntersectionType(methodReturnTypes) : neverType;
|
|
var resolvedMethodReturnType = resolver.resolveIterationType(methodReturnType, errorNode) || anyType;
|
|
var iterationTypes = getIterationTypesOfIteratorResult(resolvedMethodReturnType);
|
|
if (iterationTypes === noIterationTypes) {
|
|
if (errorNode) {
|
|
if (errorOutputContainer) {
|
|
(_f = errorOutputContainer.errors) !== null && _f !== void 0 ? _f : (errorOutputContainer.errors = []);
|
|
errorOutputContainer.errors.push(ts.createDiagnosticForNode(errorNode, resolver.mustHaveAValueDiagnostic, methodName));
|
|
}
|
|
else {
|
|
error(errorNode, resolver.mustHaveAValueDiagnostic, methodName);
|
|
}
|
|
}
|
|
yieldType = anyType;
|
|
returnTypes = ts.append(returnTypes, anyType);
|
|
}
|
|
else {
|
|
yieldType = iterationTypes.yieldType;
|
|
returnTypes = ts.append(returnTypes, iterationTypes.returnType);
|
|
}
|
|
return createIterationTypes(yieldType, getUnionType(returnTypes), nextType);
|
|
}
|
|
function getIterationTypesOfIteratorSlow(type, resolver, errorNode, errorOutputContainer, noCache) {
|
|
var iterationTypes = combineIterationTypes([
|
|
getIterationTypesOfMethod(type, resolver, "next", errorNode, errorOutputContainer),
|
|
getIterationTypesOfMethod(type, resolver, "return", errorNode, errorOutputContainer),
|
|
getIterationTypesOfMethod(type, resolver, "throw", errorNode, errorOutputContainer),
|
|
]);
|
|
return noCache ? iterationTypes : setCachedIterationTypes(type, resolver.iteratorCacheKey, iterationTypes);
|
|
}
|
|
function getIterationTypeOfGeneratorFunctionReturnType(kind, returnType, isAsyncGenerator) {
|
|
if (isTypeAny(returnType)) {
|
|
return undefined;
|
|
}
|
|
var iterationTypes = getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsyncGenerator);
|
|
return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(kind)];
|
|
}
|
|
function getIterationTypesOfGeneratorFunctionReturnType(type, isAsyncGenerator) {
|
|
if (isTypeAny(type)) {
|
|
return anyIterationTypes;
|
|
}
|
|
var use = isAsyncGenerator ? 2 : 1;
|
|
var resolver = isAsyncGenerator ? asyncIterationTypesResolver : syncIterationTypesResolver;
|
|
return getIterationTypesOfIterable(type, use, undefined) ||
|
|
getIterationTypesOfIterator(type, resolver, undefined, undefined);
|
|
}
|
|
function checkBreakOrContinueStatement(node) {
|
|
if (!checkGrammarStatementInAmbientContext(node))
|
|
checkGrammarBreakOrContinueStatement(node);
|
|
}
|
|
function unwrapReturnType(returnType, functionFlags) {
|
|
var isGenerator = !!(functionFlags & 1);
|
|
var isAsync = !!(functionFlags & 2);
|
|
if (isGenerator) {
|
|
var returnIterationType = getIterationTypeOfGeneratorFunctionReturnType(1, returnType, isAsync);
|
|
if (!returnIterationType) {
|
|
return errorType;
|
|
}
|
|
return isAsync ? getAwaitedTypeNoAlias(unwrapAwaitedType(returnIterationType)) : returnIterationType;
|
|
}
|
|
return isAsync ? getAwaitedTypeNoAlias(returnType) || errorType : returnType;
|
|
}
|
|
function isUnwrappedReturnTypeVoidOrAny(func, returnType) {
|
|
var unwrappedReturnType = unwrapReturnType(returnType, ts.getFunctionFlags(func));
|
|
return !!unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16384 | 3);
|
|
}
|
|
function checkReturnStatement(node) {
|
|
var _a;
|
|
if (checkGrammarStatementInAmbientContext(node)) {
|
|
return;
|
|
}
|
|
var container = ts.getContainingFunctionOrClassStaticBlock(node);
|
|
if (container && ts.isClassStaticBlockDeclaration(container)) {
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
|
|
return;
|
|
}
|
|
if (!container) {
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
|
|
return;
|
|
}
|
|
var signature = getSignatureFromDeclaration(container);
|
|
var returnType = getReturnTypeOfSignature(signature);
|
|
var functionFlags = ts.getFunctionFlags(container);
|
|
if (strictNullChecks || node.expression || returnType.flags & 131072) {
|
|
var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
|
|
if (container.kind === 173) {
|
|
if (node.expression) {
|
|
error(node, ts.Diagnostics.Setters_cannot_return_a_value);
|
|
}
|
|
}
|
|
else if (container.kind === 171) {
|
|
if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
|
|
error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
|
|
}
|
|
}
|
|
else if (getReturnTypeFromAnnotation(container)) {
|
|
var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
|
|
var unwrappedExprType = functionFlags & 2
|
|
? checkAwaitedType(exprType, false, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
|
|
: exprType;
|
|
if (unwrappedReturnType) {
|
|
checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, node, node.expression);
|
|
}
|
|
}
|
|
}
|
|
else if (container.kind !== 171 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
|
|
error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
|
|
}
|
|
}
|
|
function checkWithStatement(node) {
|
|
if (!checkGrammarStatementInAmbientContext(node)) {
|
|
if (node.flags & 32768) {
|
|
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 === 290 && !hasDuplicateDefaultClause) {
|
|
if (firstDefaultClause === undefined) {
|
|
firstDefaultClause = clause;
|
|
}
|
|
else {
|
|
grammarErrorOnNode(clause, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
|
|
hasDuplicateDefaultClause = true;
|
|
}
|
|
}
|
|
if (clause.kind === 289) {
|
|
addLazyDiagnostic(createLazyCaseClauseDiagnostics(clause));
|
|
}
|
|
ts.forEach(clause.statements, checkSourceElement);
|
|
if (compilerOptions.noFallthroughCasesInSwitch && clause.fallthroughFlowNode && isReachableFlowNode(clause.fallthroughFlowNode)) {
|
|
error(clause, ts.Diagnostics.Fallthrough_case_in_switch);
|
|
}
|
|
function createLazyCaseClauseDiagnostics(clause) {
|
|
return function () {
|
|
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);
|
|
}
|
|
};
|
|
}
|
|
});
|
|
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 === 250 && 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 (ts.isIdentifier(node.expression) && !node.expression.escapedText) {
|
|
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) {
|
|
var declaration = catchClause.variableDeclaration;
|
|
var typeNode = ts.getEffectiveTypeAnnotationNode(ts.getRootDeclaration(declaration));
|
|
if (typeNode) {
|
|
var type = getTypeForVariableLikeDeclaration(declaration, false, 0);
|
|
if (type && !(type.flags & 3)) {
|
|
grammarErrorOnFirstToken(typeNode, ts.Diagnostics.Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified);
|
|
}
|
|
}
|
|
else if (declaration.initializer) {
|
|
grammarErrorOnFirstToken(declaration.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 === null || blockLocal === void 0 ? void 0 : blockLocal.valueDeclaration) && (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, symbol, isStaticIndex) {
|
|
var indexInfos = getIndexInfosOfType(type);
|
|
if (indexInfos.length === 0) {
|
|
return;
|
|
}
|
|
for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
if (!(isStaticIndex && prop.flags & 4194304)) {
|
|
checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576, true), getNonMissingTypeOfSymbol(prop));
|
|
}
|
|
}
|
|
var typeDeclaration = symbol.valueDeclaration;
|
|
if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
|
|
for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
|
|
var member = _c[_b];
|
|
if (!ts.isStatic(member) && !hasBindableName(member)) {
|
|
var symbol_3 = getSymbolOfNode(member);
|
|
checkIndexConstraintForProperty(type, symbol_3, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol_3));
|
|
}
|
|
}
|
|
}
|
|
if (indexInfos.length > 1) {
|
|
for (var _d = 0, indexInfos_8 = indexInfos; _d < indexInfos_8.length; _d++) {
|
|
var info = indexInfos_8[_d];
|
|
checkIndexConstraintForIndexSignature(type, info);
|
|
}
|
|
}
|
|
}
|
|
function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
|
|
var declaration = prop.valueDeclaration;
|
|
var name = ts.getNameOfDeclaration(declaration);
|
|
if (name && ts.isPrivateIdentifier(name)) {
|
|
return;
|
|
}
|
|
var indexInfos = getApplicableIndexInfos(type, propNameType);
|
|
var interfaceDeclaration = ts.getObjectFlags(type) & 2 ? ts.getDeclarationOfKind(type.symbol, 258) : undefined;
|
|
var propDeclaration = declaration && declaration.kind === 221 ||
|
|
name && name.kind === 162 ? declaration : undefined;
|
|
var localPropDeclaration = getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
|
|
var _loop_30 = function (info) {
|
|
var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
|
|
var errorNode = localPropDeclaration || localIndexDeclaration ||
|
|
(interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
|
|
if (errorNode && !isTypeAssignableTo(propType, info.type)) {
|
|
var diagnostic = createError(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
|
|
if (propDeclaration && errorNode !== propDeclaration) {
|
|
ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(propDeclaration, ts.Diagnostics._0_is_declared_here, symbolToString(prop)));
|
|
}
|
|
diagnostics.add(diagnostic);
|
|
}
|
|
};
|
|
for (var _i = 0, indexInfos_9 = indexInfos; _i < indexInfos_9.length; _i++) {
|
|
var info = indexInfos_9[_i];
|
|
_loop_30(info);
|
|
}
|
|
}
|
|
function checkIndexConstraintForIndexSignature(type, checkInfo) {
|
|
var declaration = checkInfo.declaration;
|
|
var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
|
|
var interfaceDeclaration = ts.getObjectFlags(type) & 2 ? ts.getDeclarationOfKind(type.symbol, 258) : undefined;
|
|
var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
|
|
var _loop_31 = function (info) {
|
|
if (info === checkInfo)
|
|
return "continue";
|
|
var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
|
|
var errorNode = localCheckDeclaration || localIndexDeclaration ||
|
|
(interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
|
|
if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
|
|
error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
|
|
}
|
|
};
|
|
for (var _i = 0, indexInfos_10 = indexInfos; _i < indexInfos_10.length; _i++) {
|
|
var info = indexInfos_10[_i];
|
|
_loop_31(info);
|
|
}
|
|
}
|
|
function checkTypeNameIsReserved(name, message) {
|
|
switch (name.escapedText) {
|
|
case "any":
|
|
case "unknown":
|
|
case "never":
|
|
case "number":
|
|
case "bigint":
|
|
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 || ts.getSourceFileOfNode(name).impliedNodeFormat === ts.ModuleKind.CommonJS)) {
|
|
error(name, ts.Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ts.ModuleKind[moduleKind]);
|
|
}
|
|
}
|
|
function checkUnmatchedJSDocParameters(node) {
|
|
var jsdocParameters = ts.filter(ts.getJSDocTags(node), ts.isJSDocParameterTag);
|
|
if (!ts.length(jsdocParameters))
|
|
return;
|
|
var isJs = ts.isInJSFile(node);
|
|
var parameters = new ts.Set();
|
|
var excludedParameters = new ts.Set();
|
|
ts.forEach(node.parameters, function (_a, index) {
|
|
var name = _a.name;
|
|
if (ts.isIdentifier(name)) {
|
|
parameters.add(name.escapedText);
|
|
}
|
|
if (ts.isBindingPattern(name)) {
|
|
excludedParameters.add(index);
|
|
}
|
|
});
|
|
var containsArguments = containsArgumentsReference(node);
|
|
if (containsArguments) {
|
|
var lastJSDocParam = ts.lastOrUndefined(jsdocParameters);
|
|
if (isJs && lastJSDocParam && ts.isIdentifier(lastJSDocParam.name) && lastJSDocParam.typeExpression &&
|
|
lastJSDocParam.typeExpression.type && !parameters.has(lastJSDocParam.name.escapedText) && !isArrayType(getTypeFromTypeNode(lastJSDocParam.typeExpression.type))) {
|
|
error(lastJSDocParam.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(lastJSDocParam.name));
|
|
}
|
|
}
|
|
else {
|
|
ts.forEach(jsdocParameters, function (_a, index) {
|
|
var name = _a.name;
|
|
if (excludedParameters.has(index) || ts.isIdentifier(name) && parameters.has(name.escapedText)) {
|
|
return;
|
|
}
|
|
if (ts.isQualifiedName(name)) {
|
|
if (isJs) {
|
|
error(name, ts.Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1, ts.entityNameToString(name), ts.entityNameToString(name.left));
|
|
}
|
|
}
|
|
else {
|
|
errorOrSuggestion(isJs, name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, ts.idText(name));
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function checkTypeParameters(typeParameterDeclarations) {
|
|
var seenDefault = false;
|
|
if (typeParameterDeclarations) {
|
|
for (var i = 0; i < typeParameterDeclarations.length; i++) {
|
|
var node = typeParameterDeclarations[i];
|
|
checkTypeParameter(node);
|
|
addLazyDiagnostic(createCheckTypeParameterDiagnostic(node, i));
|
|
}
|
|
}
|
|
function createCheckTypeParameterDiagnostic(node, i) {
|
|
return function () {
|
|
if (node.default) {
|
|
seenDefault = true;
|
|
checkTypeParametersNotReferenced(node.default, typeParameterDeclarations, i);
|
|
}
|
|
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 checkTypeParametersNotReferenced(root, typeParameters, index) {
|
|
visit(root);
|
|
function visit(node) {
|
|
if (node.kind === 178) {
|
|
var type = getTypeFromTypeReference(node);
|
|
if (type.flags & 262144) {
|
|
for (var i = index; i < typeParameters.length; i++) {
|
|
if (type.symbol === getSymbolOfNode(typeParameters[i])) {
|
|
error(node, ts.Diagnostics.Type_parameter_defaults_can_only_reference_previously_declared_type_parameters);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ts.forEachChild(node, visit);
|
|
}
|
|
}
|
|
function checkTypeParameterListsIdentical(symbol) {
|
|
if (symbol.declarations && symbol.declarations.length === 1) {
|
|
return;
|
|
}
|
|
var links = getSymbolLinks(symbol);
|
|
if (!links.typeParametersChecked) {
|
|
links.typeParametersChecked = true;
|
|
var declarations = getClassOrInterfaceDeclarationsOfSymbol(symbol);
|
|
if (!declarations || declarations.length <= 1) {
|
|
return;
|
|
}
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
if (!areTypeParametersIdentical(declarations, type.localTypeParameters, ts.getEffectiveTypeParameterDeclarations)) {
|
|
var name = symbolToString(symbol);
|
|
for (var _i = 0, declarations_7 = declarations; _i < declarations_7.length; _i++) {
|
|
var declaration = declarations_7[_i];
|
|
error(declaration.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function areTypeParametersIdentical(declarations, targetParameters, getTypeParameterDeclarations) {
|
|
var maxTypeArgumentCount = ts.length(targetParameters);
|
|
var minTypeArgumentCount = getMinTypeArgumentCount(targetParameters);
|
|
for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
|
|
var declaration = declarations_8[_i];
|
|
var sourceParameters = getTypeParameterDeclarations(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 constraint = ts.getEffectiveConstraintOfTypeParameter(source);
|
|
var sourceConstraint = constraint && getTypeFromTypeNode(constraint);
|
|
var targetConstraint = getConstraintOfTypeParameter(target);
|
|
if (sourceConstraint && 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) {
|
|
var firstDecorator = ts.find(node.modifiers, ts.isDecorator);
|
|
if (firstDecorator && ts.some(node.members, function (p) { return ts.hasStaticModifier(p) && ts.isPrivateIdentifierClassElementDeclaration(p); })) {
|
|
grammarErrorOnNode(firstDecorator, ts.Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator);
|
|
}
|
|
if (!node.name && !ts.hasSyntacticModifier(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);
|
|
checkCollisionsForDeclarationName(node, 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);
|
|
checkFunctionOrConstructorSymbol(symbol);
|
|
checkClassForDuplicateDeclarations(node);
|
|
var nodeInAmbientContext = !!(node.flags & 16777216);
|
|
if (!nodeInAmbientContext) {
|
|
checkClassForStaticPropertyNameConflicts(node);
|
|
}
|
|
var baseTypeNode = ts.getEffectiveBaseTypeNode(node);
|
|
if (baseTypeNode) {
|
|
ts.forEach(baseTypeNode.typeArguments, checkSourceElement);
|
|
if (languageVersion < 2) {
|
|
checkExternalEmitHelpers(baseTypeNode.parent, 1);
|
|
}
|
|
var extendsNode = ts.getClassExtendsHeritageElement(node);
|
|
if (extendsNode && extendsNode !== baseTypeNode) {
|
|
checkExpression(extendsNode.expression);
|
|
}
|
|
var baseTypes_2 = getBaseTypes(type);
|
|
if (baseTypes_2.length) {
|
|
addLazyDiagnostic(function () {
|
|
var baseType = baseTypes_2[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, type.thisType);
|
|
if (!checkTypeAssignableTo(typeWithThis, baseWithThis, undefined)) {
|
|
issueMemberSpecificError(node, typeWithThis, baseWithThis, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
|
|
}
|
|
else {
|
|
checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
|
|
}
|
|
if (baseConstructorType.flags & 8650752) {
|
|
if (!isMixinConstructorType(staticType)) {
|
|
error(node.name || node, ts.Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any);
|
|
}
|
|
else {
|
|
var constructSignatures = getSignaturesOfType(baseConstructorType, 1);
|
|
if (constructSignatures.some(function (signature) { return signature.flags & 4; }) && !ts.hasSyntacticModifier(node, 128)) {
|
|
error(node.name || node, ts.Diagnostics.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract);
|
|
}
|
|
}
|
|
}
|
|
if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32) && !(baseConstructorType.flags & 8650752)) {
|
|
var constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode);
|
|
if (ts.forEach(constructors, function (sig) { return !isJSConstructor(sig.declaration) && !isTypeIdenticalTo(getReturnTypeOfSignature(sig), baseType); })) {
|
|
error(baseTypeNode.expression, ts.Diagnostics.Base_constructors_must_all_have_the_same_return_type);
|
|
}
|
|
}
|
|
checkKindsOfPropertyMemberOverrides(type, baseType);
|
|
});
|
|
}
|
|
}
|
|
checkMembersForOverrideModifier(node, type, typeWithThis, staticType);
|
|
var implementedTypeNodes = ts.getEffectiveImplementsTypeNodes(node);
|
|
if (implementedTypeNodes) {
|
|
for (var _i = 0, implementedTypeNodes_1 = implementedTypeNodes; _i < implementedTypeNodes_1.length; _i++) {
|
|
var typeRefNode = implementedTypeNodes_1[_i];
|
|
if (!ts.isEntityNameExpression(typeRefNode.expression) || ts.isOptionalChain(typeRefNode.expression)) {
|
|
error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
|
|
}
|
|
checkTypeReferenceNode(typeRefNode);
|
|
addLazyDiagnostic(createImplementsDiagnostics(typeRefNode));
|
|
}
|
|
}
|
|
addLazyDiagnostic(function () {
|
|
checkIndexConstraints(type, symbol);
|
|
checkIndexConstraints(staticType, symbol, true);
|
|
checkTypeForDuplicateIndexSignatures(node);
|
|
checkPropertyInitialization(node);
|
|
});
|
|
function createImplementsDiagnostics(typeRefNode) {
|
|
return function () {
|
|
var t = getReducedType(getTypeFromTypeNode(typeRefNode));
|
|
if (!isErrorType(t)) {
|
|
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_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|
|
function checkMembersForOverrideModifier(node, type, typeWithThis, staticType) {
|
|
var baseTypeNode = ts.getEffectiveBaseTypeNode(node);
|
|
var baseTypes = baseTypeNode && getBaseTypes(type);
|
|
var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
|
|
var baseStaticType = getBaseConstructorTypeOfClass(type);
|
|
var _loop_32 = function (member) {
|
|
if (ts.hasAmbientModifier(member)) {
|
|
return "continue";
|
|
}
|
|
if (ts.isConstructorDeclaration(member)) {
|
|
ts.forEach(member.parameters, function (param) {
|
|
if (ts.isParameterPropertyDeclaration(param, member)) {
|
|
checkExistingMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, param, true);
|
|
}
|
|
});
|
|
}
|
|
checkExistingMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, member, false);
|
|
};
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
_loop_32(member);
|
|
}
|
|
}
|
|
function checkExistingMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, member, memberIsParameterProperty, reportErrors) {
|
|
if (reportErrors === void 0) { reportErrors = true; }
|
|
var declaredProp = member.name
|
|
&& getSymbolAtLocation(member.name)
|
|
|| getSymbolAtLocation(member);
|
|
if (!declaredProp) {
|
|
return 0;
|
|
}
|
|
return checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, ts.hasOverrideModifier(member), ts.hasAbstractModifier(member), ts.isStatic(member), memberIsParameterProperty, ts.symbolName(declaredProp), reportErrors ? member : undefined);
|
|
}
|
|
function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, memberName, errorNode) {
|
|
var isJs = ts.isInJSFile(node);
|
|
var nodeInAmbientContext = !!(node.flags & 16777216);
|
|
if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) {
|
|
var memberEscapedName = ts.escapeLeadingUnderscores(memberName);
|
|
var thisType = memberIsStatic ? staticType : typeWithThis;
|
|
var baseType = memberIsStatic ? baseStaticType : baseWithThis;
|
|
var prop = getPropertyOfType(thisType, memberEscapedName);
|
|
var baseProp = getPropertyOfType(baseType, memberEscapedName);
|
|
var baseClassName = typeToString(baseWithThis);
|
|
if (prop && !baseProp && memberHasOverrideModifier) {
|
|
if (errorNode) {
|
|
var suggestion = getSuggestedSymbolForNonexistentClassMember(memberName, baseType);
|
|
suggestion ?
|
|
error(errorNode, isJs ?
|
|
ts.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 :
|
|
ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
|
|
error(errorNode, isJs ?
|
|
ts.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 :
|
|
ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
|
|
}
|
|
return 2;
|
|
}
|
|
else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
|
|
var baseHasAbstract = ts.some(baseProp.declarations, ts.hasAbstractModifier);
|
|
if (memberHasOverrideModifier) {
|
|
return 0;
|
|
}
|
|
if (!baseHasAbstract) {
|
|
if (errorNode) {
|
|
var diag = memberIsParameterProperty ?
|
|
isJs ?
|
|
ts.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 :
|
|
ts.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 :
|
|
isJs ?
|
|
ts.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 :
|
|
ts.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0;
|
|
error(errorNode, diag, baseClassName);
|
|
}
|
|
return 1;
|
|
}
|
|
else if (memberHasAbstractModifier && baseHasAbstract) {
|
|
if (errorNode) {
|
|
error(errorNode, ts.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0, baseClassName);
|
|
}
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else if (memberHasOverrideModifier) {
|
|
if (errorNode) {
|
|
var className = typeToString(type);
|
|
error(errorNode, isJs ?
|
|
ts.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class :
|
|
ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class, className);
|
|
}
|
|
return 2;
|
|
}
|
|
return 0;
|
|
}
|
|
function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
|
|
var issuedMemberError = false;
|
|
var _loop_33 = function (member) {
|
|
if (ts.isStatic(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_33(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.hasEffectiveModifier(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 getMemberOverrideModifierStatus(node, member) {
|
|
if (!member.name) {
|
|
return 0;
|
|
}
|
|
var symbol = getSymbolOfNode(node);
|
|
var type = getDeclaredTypeOfSymbol(symbol);
|
|
var typeWithThis = getTypeWithThisArgument(type);
|
|
var staticType = getTypeOfSymbol(symbol);
|
|
var baseTypeNode = ts.getEffectiveBaseTypeNode(node);
|
|
var baseTypes = baseTypeNode && getBaseTypes(type);
|
|
var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
|
|
var baseStaticType = getBaseConstructorTypeOfClass(type);
|
|
var memberHasOverrideModifier = member.parent
|
|
? ts.hasOverrideModifier(member)
|
|
: ts.hasSyntacticModifier(member, 16384);
|
|
var memberName = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(member.name));
|
|
return checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, ts.hasAbstractModifier(member), ts.isStatic(member), false, memberName);
|
|
}
|
|
function getTargetSymbol(s) {
|
|
return ts.getCheckFlags(s) & 1 ? s.target : s;
|
|
}
|
|
function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
|
|
return ts.filter(symbol.declarations, function (d) {
|
|
return d.kind === 257 || d.kind === 258;
|
|
});
|
|
}
|
|
function checkKindsOfPropertyMemberOverrides(type, baseType) {
|
|
var _a, _b, _c, _d;
|
|
var baseProperties = getPropertiesOfType(baseType);
|
|
var _loop_34 = function (baseProperty) {
|
|
var base = getTargetSymbol(baseProperty);
|
|
if (base.flags & 4194304) {
|
|
return "continue";
|
|
}
|
|
var baseSymbol = getPropertyOfObjectType(type, base.escapedName);
|
|
if (!baseSymbol) {
|
|
return "continue";
|
|
}
|
|
var derived = getTargetSymbol(baseSymbol);
|
|
var baseDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(base);
|
|
ts.Debug.assert(!!derived, "derived should point to something, even if it is the base class' declaration.");
|
|
if (derived === base) {
|
|
var derivedClassDecl = ts.getClassLikeDeclarationOfSymbol(type.symbol);
|
|
if (baseDeclarationFlags & 128 && (!derivedClassDecl || !ts.hasSyntacticModifier(derivedClassDecl, 128))) {
|
|
for (var _e = 0, _f = getBaseTypes(type); _e < _f.length; _e++) {
|
|
var otherBaseType = _f[_e];
|
|
if (otherBaseType === baseType)
|
|
continue;
|
|
var baseSymbol_1 = getPropertyOfObjectType(otherBaseType, base.escapedName);
|
|
var derivedElsewhere = baseSymbol_1 && getTargetSymbol(baseSymbol_1);
|
|
if (derivedElsewhere && derivedElsewhere !== base) {
|
|
return "continue-basePropertyCheck";
|
|
}
|
|
}
|
|
if (derivedClassDecl.kind === 226) {
|
|
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) {
|
|
return "continue";
|
|
}
|
|
var errorMessage = void 0;
|
|
var basePropertyFlags = base.flags & 98308;
|
|
var derivedPropertyFlags = derived.flags & 98308;
|
|
if (basePropertyFlags && derivedPropertyFlags) {
|
|
if ((ts.getCheckFlags(base) & 6
|
|
? (_a = base.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return isPropertyAbstractOrInterface(d, baseDeclarationFlags); })
|
|
: (_b = base.declarations) === null || _b === void 0 ? void 0 : _b.every(function (d) { return isPropertyAbstractOrInterface(d, baseDeclarationFlags); }))
|
|
|| ts.getCheckFlags(base) & 262144
|
|
|| derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
|
|
return "continue";
|
|
}
|
|
var overriddenInstanceProperty = basePropertyFlags !== 4 && derivedPropertyFlags === 4;
|
|
var overriddenInstanceAccessor = basePropertyFlags === 4 && derivedPropertyFlags !== 4;
|
|
if (overriddenInstanceProperty || overriddenInstanceAccessor) {
|
|
var errorMessage_1 = overriddenInstanceProperty ?
|
|
ts.Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property :
|
|
ts.Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor;
|
|
error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
|
|
}
|
|
else if (useDefineForClassFields) {
|
|
var uninitialized = (_c = derived.declarations) === null || _c === void 0 ? void 0 : _c.find(function (d) { return d.kind === 167 && !d.initializer; });
|
|
if (uninitialized
|
|
&& !(derived.flags & 33554432)
|
|
&& !(baseDeclarationFlags & 128)
|
|
&& !(derivedDeclarationFlags & 128)
|
|
&& !((_d = derived.declarations) === null || _d === void 0 ? void 0 : _d.some(function (d) { return !!(d.flags & 16777216); }))) {
|
|
var constructor = findConstructorDeclaration(ts.getClassLikeDeclarationOfSymbol(type.symbol));
|
|
var propName = uninitialized.name;
|
|
if (uninitialized.exclamationToken
|
|
|| !constructor
|
|
|| !ts.isIdentifier(propName)
|
|
|| !strictNullChecks
|
|
|| !isPropertyInitializedInConstructor(propName, type, constructor)) {
|
|
var errorMessage_2 = ts.Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration;
|
|
error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_2, symbolToString(base), typeToString(baseType));
|
|
}
|
|
}
|
|
}
|
|
return "continue";
|
|
}
|
|
else if (isPrototypeProperty(base)) {
|
|
if (isPrototypeProperty(derived) || derived.flags & 4) {
|
|
return "continue";
|
|
}
|
|
else {
|
|
ts.Debug.assert(!!(derived.flags & 98304));
|
|
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
|
|
}
|
|
}
|
|
else if (base.flags & 98304) {
|
|
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
|
|
}
|
|
else {
|
|
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));
|
|
}
|
|
};
|
|
basePropertyCheck: for (var _i = 0, baseProperties_1 = baseProperties; _i < baseProperties_1.length; _i++) {
|
|
var baseProperty = baseProperties_1[_i];
|
|
var state_10 = _loop_34(baseProperty);
|
|
switch (state_10) {
|
|
case "continue-basePropertyCheck": continue basePropertyCheck;
|
|
}
|
|
}
|
|
}
|
|
function isPropertyAbstractOrInterface(declaration, baseDeclarationFlags) {
|
|
return baseDeclarationFlags & 128 && (!ts.isPropertyDeclaration(declaration) || !declaration.initializer)
|
|
|| ts.isInterfaceDeclaration(declaration.parent);
|
|
}
|
|
function getNonInheritedProperties(type, baseTypes, properties) {
|
|
if (!ts.length(baseTypes)) {
|
|
return properties;
|
|
}
|
|
var seen = new ts.Map();
|
|
ts.forEach(properties, function (p) {
|
|
seen.set(p.escapedName, p);
|
|
});
|
|
for (var _i = 0, baseTypes_3 = baseTypes; _i < baseTypes_3.length; _i++) {
|
|
var base = baseTypes_3[_i];
|
|
var properties_5 = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType));
|
|
for (var _a = 0, properties_4 = properties_5; _a < properties_4.length; _a++) {
|
|
var prop = properties_4[_a];
|
|
var existing = seen.get(prop.escapedName);
|
|
if (existing && prop.parent === existing.parent) {
|
|
seen.delete(prop.escapedName);
|
|
}
|
|
}
|
|
}
|
|
return ts.arrayFrom(seen.values());
|
|
}
|
|
function checkInheritedPropertiesAreIdentical(type, typeNode) {
|
|
var baseTypes = getBaseTypes(type);
|
|
if (baseTypes.length < 2) {
|
|
return true;
|
|
}
|
|
var seen = new ts.Map();
|
|
ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) {
|
|
seen.set(p.escapedName, { prop: p, containingType: type });
|
|
});
|
|
var ok = true;
|
|
for (var _i = 0, baseTypes_4 = baseTypes; _i < baseTypes_4.length; _i++) {
|
|
var base = baseTypes_4[_i];
|
|
var properties = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType));
|
|
for (var _a = 0, properties_6 = properties; _a < properties_6.length; _a++) {
|
|
var prop = properties_6[_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 & 16777216) {
|
|
return;
|
|
}
|
|
var constructor = findConstructorDeclaration(node);
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (ts.getEffectiveModifierFlags(member) & 2) {
|
|
continue;
|
|
}
|
|
if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
|
|
var propName = member.name;
|
|
if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName) || ts.isComputedPropertyName(propName)) {
|
|
var type = getTypeOfSymbol(getSymbolOfNode(member));
|
|
if (!(type.flags & 3 || containsUndefinedType(type))) {
|
|
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 isPropertyWithoutInitializer(node) {
|
|
return node.kind === 167 &&
|
|
!ts.hasAbstractModifier(node) &&
|
|
!node.exclamationToken &&
|
|
!node.initializer;
|
|
}
|
|
function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
|
|
for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
|
|
var staticBlock = staticBlocks_2[_i];
|
|
if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
|
|
var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
|
|
ts.setParent(reference.expression, reference);
|
|
ts.setParent(reference, staticBlock);
|
|
reference.flowNode = staticBlock.returnFlowNode;
|
|
var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
|
|
if (!containsUndefinedType(flowType)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isPropertyInitializedInConstructor(propName, propType, constructor) {
|
|
var reference = ts.isComputedPropertyName(propName)
|
|
? ts.factory.createElementAccessExpression(ts.factory.createThis(), propName.expression)
|
|
: ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
|
|
ts.setParent(reference.expression, reference);
|
|
ts.setParent(reference, constructor);
|
|
reference.flowNode = constructor.returnFlowNode;
|
|
var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
|
|
return !containsUndefinedType(flowType);
|
|
}
|
|
function checkInterfaceDeclaration(node) {
|
|
if (!checkGrammarDecoratorsAndModifiers(node))
|
|
checkGrammarInterfaceDeclaration(node);
|
|
checkTypeParameters(node.typeParameters);
|
|
addLazyDiagnostic(function () {
|
|
checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
|
|
checkExportsOnMergedDeclarations(node);
|
|
var symbol = getSymbolOfNode(node);
|
|
checkTypeParameterListsIdentical(symbol);
|
|
var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 258);
|
|
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, symbol);
|
|
}
|
|
}
|
|
checkObjectTypeForDuplicateDeclarations(node);
|
|
});
|
|
ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) {
|
|
if (!ts.isEntityNameExpression(heritageElement.expression) || ts.isOptionalChain(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);
|
|
addLazyDiagnostic(function () {
|
|
checkTypeForDuplicateIndexSignatures(node);
|
|
registerForUnusedIdentifiersCheck(node);
|
|
});
|
|
}
|
|
function checkTypeAliasDeclaration(node) {
|
|
checkGrammarDecoratorsAndModifiers(node);
|
|
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
|
|
checkExportsOnMergedDeclarations(node);
|
|
checkTypeParameters(node.typeParameters);
|
|
if (node.type.kind === 138) {
|
|
if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
|
|
error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
|
|
}
|
|
}
|
|
else {
|
|
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 (ts.isComputedNonLiteralName(member.name)) {
|
|
error(member.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
|
|
}
|
|
else {
|
|
var text = ts.getTextOfPropertyName(member.name);
|
|
if (ts.isNumericLiteralName(text) && !ts.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 & 16777216 && !ts.isEnumConst(member.parent) && getEnumKind(getSymbolOfNode(member.parent)) === 0) {
|
|
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.isEnumConst(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.const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values);
|
|
}
|
|
else if (member.parent.flags & 16777216) {
|
|
error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression);
|
|
}
|
|
else {
|
|
var source = checkExpression(initializer);
|
|
if (!isTypeAssignableToKind(source, 296)) {
|
|
error(initializer, ts.Diagnostics.Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhaustiveness_checks_consider_using_an_object_literal_instead, typeToString(source));
|
|
}
|
|
else {
|
|
checkTypeAssignableTo(source, getDeclaredTypeOfSymbol(getSymbolOfNode(member.parent)), initializer, undefined);
|
|
}
|
|
}
|
|
return value;
|
|
function evaluate(expr) {
|
|
switch (expr.kind) {
|
|
case 219:
|
|
var value_2 = evaluate(expr.operand);
|
|
if (typeof value_2 === "number") {
|
|
switch (expr.operator) {
|
|
case 39: return value_2;
|
|
case 40: return -value_2;
|
|
case 54: return ~value_2;
|
|
}
|
|
}
|
|
break;
|
|
case 221:
|
|
var left = evaluate(expr.left);
|
|
var right = evaluate(expr.right);
|
|
if (typeof left === "number" && typeof right === "number") {
|
|
switch (expr.operatorToken.kind) {
|
|
case 51: return left | right;
|
|
case 50: return left & right;
|
|
case 48: return left >> right;
|
|
case 49: return left >>> right;
|
|
case 47: return left << right;
|
|
case 52: return left ^ right;
|
|
case 41: return left * right;
|
|
case 43: return left / right;
|
|
case 39: return left + right;
|
|
case 40: return left - right;
|
|
case 44: return left % right;
|
|
case 42: return Math.pow(left, right);
|
|
}
|
|
}
|
|
else if (typeof left === "string" && typeof right === "string" && expr.operatorToken.kind === 39) {
|
|
return left + right;
|
|
}
|
|
break;
|
|
case 10:
|
|
case 14:
|
|
return expr.text;
|
|
case 8:
|
|
checkGrammarNumericLiteral(expr);
|
|
return +expr.text;
|
|
case 212:
|
|
return evaluate(expr.expression);
|
|
case 79:
|
|
var identifier = expr;
|
|
if (ts.isInfinityOrNaNString(identifier.escapedText)) {
|
|
return +(identifier.escapedText);
|
|
}
|
|
return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
|
|
case 207:
|
|
case 206:
|
|
if (isConstantMemberAccess(expr)) {
|
|
var type = getTypeOfExpression(expr.expression);
|
|
if (type.symbol && type.symbol.flags & 384) {
|
|
var name = void 0;
|
|
if (expr.kind === 206) {
|
|
name = expr.name.escapedText;
|
|
}
|
|
else {
|
|
name = ts.escapeLeadingUnderscores(ts.cast(expr.argumentExpression, ts.isLiteralExpression).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 (declaration && isBlockScopedNameDeclaredBeforeUse(declaration, member) && ts.isEnumDeclaration(declaration.parent)) {
|
|
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;
|
|
}
|
|
else {
|
|
error(expr, ts.Diagnostics.Property_0_is_used_before_being_assigned, symbolToString(memberSymbol));
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function isConstantMemberAccess(node) {
|
|
var type = getTypeOfExpression(node);
|
|
if (type === errorType) {
|
|
return false;
|
|
}
|
|
return node.kind === 79 ||
|
|
node.kind === 206 && isConstantMemberAccess(node.expression) ||
|
|
node.kind === 207 && isConstantMemberAccess(node.expression) &&
|
|
ts.isStringLiteralLike(node.argumentExpression);
|
|
}
|
|
function checkEnumDeclaration(node) {
|
|
addLazyDiagnostic(function () { return checkEnumDeclarationWorker(node); });
|
|
}
|
|
function checkEnumDeclarationWorker(node) {
|
|
checkGrammarDecoratorsAndModifiers(node);
|
|
checkCollisionsForDeclarationName(node, node.name);
|
|
checkExportsOnMergedDeclarations(node);
|
|
node.members.forEach(checkEnumMember);
|
|
computeEnumMemberValues(node);
|
|
var enumSymbol = getSymbolOfNode(node);
|
|
var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind);
|
|
if (node === firstDeclaration) {
|
|
if (enumSymbol.declarations && enumSymbol.declarations.length > 1) {
|
|
var enumIsConst_1 = ts.isEnumConst(node);
|
|
ts.forEach(enumSymbol.declarations, function (decl) {
|
|
if (ts.isEnumDeclaration(decl) && ts.isEnumConst(decl) !== enumIsConst_1) {
|
|
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 !== 260) {
|
|
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 checkEnumMember(node) {
|
|
if (ts.isPrivateIdentifier(node.name)) {
|
|
error(node, ts.Diagnostics.An_enum_member_cannot_be_named_with_a_private_identifier);
|
|
}
|
|
}
|
|
function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
|
|
var declarations = symbol.declarations;
|
|
if (declarations) {
|
|
for (var _i = 0, declarations_9 = declarations; _i < declarations_9.length; _i++) {
|
|
var declaration = declarations_9[_i];
|
|
if ((declaration.kind === 257 ||
|
|
(declaration.kind === 256 && ts.nodeIsPresent(declaration.body))) &&
|
|
!(declaration.flags & 16777216)) {
|
|
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 (node.body) {
|
|
checkSourceElement(node.body);
|
|
if (!ts.isGlobalScopeAugmentation(node)) {
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
}
|
|
addLazyDiagnostic(checkModuleDeclarationDiagnostics);
|
|
function checkModuleDeclarationDiagnostics() {
|
|
var isGlobalAugmentation = ts.isGlobalScopeAugmentation(node);
|
|
var inAmbientContext = node.flags & 16777216;
|
|
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_at_the_top_level_of_a_namespace_or_module;
|
|
if (checkGrammarModuleElementContext(node, contextErrorMessage)) {
|
|
return;
|
|
}
|
|
if (!checkGrammarDecoratorsAndModifiers(node)) {
|
|
if (!inAmbientContext && node.name.kind === 10) {
|
|
grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
|
|
}
|
|
}
|
|
if (ts.isIdentifier(node.name)) {
|
|
checkCollisionsForDeclarationName(node, node.name);
|
|
}
|
|
checkExportsOnMergedDeclarations(node);
|
|
var symbol = getSymbolOfNode(node);
|
|
if (symbol.flags & 512
|
|
&& !inAmbientContext
|
|
&& symbol.declarations
|
|
&& symbol.declarations.length > 1
|
|
&& isInstantiatedModule(node, ts.shouldPreserveConstEnums(compilerOptions))) {
|
|
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, 257);
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function checkModuleAugmentationElement(node, isGlobalAugmentation) {
|
|
var _a;
|
|
switch (node.kind) {
|
|
case 237:
|
|
for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
|
|
var decl = _b[_i];
|
|
checkModuleAugmentationElement(decl, isGlobalAugmentation);
|
|
}
|
|
break;
|
|
case 271:
|
|
case 272:
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
|
|
break;
|
|
case 265:
|
|
case 266:
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
|
|
break;
|
|
case 203:
|
|
case 254:
|
|
var name = node.name;
|
|
if (ts.isBindingPattern(name)) {
|
|
for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
|
|
var el = _d[_c];
|
|
checkModuleAugmentationElement(el, isGlobalAugmentation);
|
|
}
|
|
break;
|
|
}
|
|
case 257:
|
|
case 260:
|
|
case 256:
|
|
case 258:
|
|
case 261:
|
|
case 259:
|
|
if (isGlobalAugmentation) {
|
|
return;
|
|
}
|
|
var symbol = getSymbolOfNode(node);
|
|
if (symbol) {
|
|
var reportError = !(symbol.flags & 33554432);
|
|
if (!reportError) {
|
|
reportError = !!((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.declarations) && ts.isExternalModuleAugmentation(symbol.parent.declarations[0]);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
function getFirstNonModuleExportsIdentifier(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return node;
|
|
case 161:
|
|
do {
|
|
node = node.left;
|
|
} while (node.kind !== 79);
|
|
return node;
|
|
case 206:
|
|
do {
|
|
if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
|
|
return node.name;
|
|
}
|
|
node = node.expression;
|
|
} while (node.kind !== 79);
|
|
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 === 262 && ts.isAmbientModule(node.parent.parent);
|
|
if (node.parent.kind !== 305 && !inAmbientExternalModule) {
|
|
error(moduleName, node.kind === 272 ?
|
|
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;
|
|
}
|
|
}
|
|
if (!ts.isImportEqualsDeclaration(node) && node.assertClause) {
|
|
var hasError = false;
|
|
for (var _i = 0, _a = node.assertClause.elements; _i < _a.length; _i++) {
|
|
var clause = _a[_i];
|
|
if (!ts.isStringLiteral(clause.value)) {
|
|
hasError = true;
|
|
error(clause.value, ts.Diagnostics.Import_assertion_values_must_be_string_literal_expressions);
|
|
}
|
|
}
|
|
return !hasError;
|
|
}
|
|
return true;
|
|
}
|
|
function checkAliasSymbol(node) {
|
|
var _a, _b, _c, _d, _e;
|
|
var symbol = getSymbolOfNode(node);
|
|
var target = resolveAlias(symbol);
|
|
if (target !== unknownSymbol) {
|
|
symbol = getMergedSymbol(symbol.exportSymbol || symbol);
|
|
if (ts.isInJSFile(node) && !(target.flags & 111551) && !ts.isTypeOnlyImportOrExportDeclaration(node)) {
|
|
var errorNode = ts.isImportOrExportSpecifier(node) ? node.propertyName || node.name :
|
|
ts.isNamedDeclaration(node) ? node.name :
|
|
node;
|
|
ts.Debug.assert(node.kind !== 274);
|
|
if (node.kind === 275) {
|
|
var diag = error(errorNode, ts.Diagnostics.Types_cannot_appear_in_export_declarations_in_JavaScript_files);
|
|
var alreadyExportedSymbol = (_b = (_a = ts.getSourceFileOfNode(node).symbol) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.get((node.propertyName || node.name).escapedText);
|
|
if (alreadyExportedSymbol === target) {
|
|
var exportingDeclaration = (_c = alreadyExportedSymbol.declarations) === null || _c === void 0 ? void 0 : _c.find(ts.isJSDocNode);
|
|
if (exportingDeclaration) {
|
|
ts.addRelatedInfo(diag, ts.createDiagnosticForNode(exportingDeclaration, ts.Diagnostics._0_is_automatically_exported_here, ts.unescapeLeadingUnderscores(alreadyExportedSymbol.escapedName)));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.assert(node.kind !== 254);
|
|
var importDeclaration = ts.findAncestor(node, ts.or(ts.isImportDeclaration, ts.isImportEqualsDeclaration));
|
|
var moduleSpecifier = (_e = (importDeclaration && ((_d = ts.tryGetModuleSpecifierFromDeclaration(importDeclaration)) === null || _d === void 0 ? void 0 : _d.text))) !== null && _e !== void 0 ? _e : "...";
|
|
var importedIdentifier = ts.unescapeLeadingUnderscores(ts.isIdentifier(errorNode) ? errorNode.escapedText : symbol.escapedName);
|
|
error(errorNode, ts.Diagnostics._0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation, importedIdentifier, "import(\"".concat(moduleSpecifier, "\").").concat(importedIdentifier));
|
|
}
|
|
return;
|
|
}
|
|
var excludedMeanings = (symbol.flags & (111551 | 1048576) ? 111551 : 0) |
|
|
(symbol.flags & 788968 ? 788968 : 0) |
|
|
(symbol.flags & 1920 ? 1920 : 0);
|
|
if (target.flags & excludedMeanings) {
|
|
var message = node.kind === 275 ?
|
|
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
|
|
&& !ts.isTypeOnlyImportOrExportDeclaration(node)
|
|
&& !(node.flags & 16777216)) {
|
|
var typeOnlyAlias = getTypeOnlyAliasDeclaration(symbol);
|
|
var isType = !(target.flags & 111551);
|
|
if (isType || typeOnlyAlias) {
|
|
switch (node.kind) {
|
|
case 267:
|
|
case 270:
|
|
case 265: {
|
|
if (compilerOptions.preserveValueImports) {
|
|
ts.Debug.assertIsDefined(node.name, "An ImportClause with a symbol should have a name");
|
|
var message = isType
|
|
? ts.Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled
|
|
: ts.Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled;
|
|
var name = ts.idText(node.kind === 270 ? node.propertyName || node.name : node.name);
|
|
addTypeOnlyDeclarationRelatedInfo(error(node, message, name), isType ? undefined : typeOnlyAlias, name);
|
|
}
|
|
if (isType && node.kind === 265 && ts.hasEffectiveModifier(node, 1)) {
|
|
error(node, ts.Diagnostics.Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided);
|
|
}
|
|
break;
|
|
}
|
|
case 275: {
|
|
if (ts.getSourceFileOfNode(typeOnlyAlias) !== ts.getSourceFileOfNode(node)) {
|
|
var message = isType
|
|
? ts.Diagnostics.Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type
|
|
: ts.Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isolatedModules_is_enabled;
|
|
var name = ts.idText(node.propertyName || node.name);
|
|
addTypeOnlyDeclarationRelatedInfo(error(node, message, name), isType ? undefined : typeOnlyAlias, name);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.isImportSpecifier(node)) {
|
|
var targetSymbol = checkDeprecatedAliasedSymbol(symbol, node);
|
|
if (isDeprecatedAliasedSymbol(targetSymbol) && targetSymbol.declarations) {
|
|
addDeprecatedSuggestion(node, targetSymbol.declarations, targetSymbol.escapedName);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isDeprecatedAliasedSymbol(symbol) {
|
|
return !!symbol.declarations && ts.every(symbol.declarations, function (d) { return !!(ts.getCombinedNodeFlags(d) & 268435456); });
|
|
}
|
|
function checkDeprecatedAliasedSymbol(symbol, location) {
|
|
if (!(symbol.flags & 2097152))
|
|
return symbol;
|
|
var targetSymbol = resolveAlias(symbol);
|
|
if (targetSymbol === unknownSymbol)
|
|
return targetSymbol;
|
|
while (symbol.flags & 2097152) {
|
|
var target = getImmediateAliasedSymbol(symbol);
|
|
if (target) {
|
|
if (target === targetSymbol)
|
|
break;
|
|
if (target.declarations && ts.length(target.declarations)) {
|
|
if (isDeprecatedAliasedSymbol(target)) {
|
|
addDeprecatedSuggestion(location, target.declarations, target.escapedName);
|
|
break;
|
|
}
|
|
else {
|
|
if (symbol === targetSymbol)
|
|
break;
|
|
symbol = target;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
return targetSymbol;
|
|
}
|
|
function checkImportBinding(node) {
|
|
checkCollisionsForDeclarationName(node, node.name);
|
|
checkAliasSymbol(node);
|
|
if (node.kind === 270 &&
|
|
ts.idText(node.propertyName || node.name) === "default" &&
|
|
ts.getESModuleInterop(compilerOptions) &&
|
|
moduleKind !== ts.ModuleKind.System && (moduleKind < ts.ModuleKind.ES2015 || ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS)) {
|
|
checkExternalEmitHelpers(node, 131072);
|
|
}
|
|
}
|
|
function checkAssertClause(declaration) {
|
|
var _a;
|
|
if (declaration.assertClause) {
|
|
var validForTypeAssertions = ts.isExclusivelyTypeOnlyImportOrExport(declaration);
|
|
var override = ts.getResolutionModeOverrideForClause(declaration.assertClause, validForTypeAssertions ? grammarErrorOnNode : undefined);
|
|
if (validForTypeAssertions && override) {
|
|
if (!ts.isNightly()) {
|
|
grammarErrorOnNode(declaration.assertClause, ts.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next);
|
|
}
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.Node16 && ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.NodeNext) {
|
|
return grammarErrorOnNode(declaration.assertClause, ts.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext);
|
|
}
|
|
return;
|
|
}
|
|
var mode = (moduleKind === ts.ModuleKind.NodeNext) && declaration.moduleSpecifier && getUsageModeForExpression(declaration.moduleSpecifier);
|
|
if (mode !== ts.ModuleKind.ESNext && moduleKind !== ts.ModuleKind.ESNext) {
|
|
return grammarErrorOnNode(declaration.assertClause, moduleKind === ts.ModuleKind.NodeNext
|
|
? ts.Diagnostics.Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls
|
|
: ts.Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext);
|
|
}
|
|
if (ts.isImportDeclaration(declaration) ? (_a = declaration.importClause) === null || _a === void 0 ? void 0 : _a.isTypeOnly : declaration.isTypeOnly) {
|
|
return grammarErrorOnNode(declaration.assertClause, ts.Diagnostics.Import_assertions_cannot_be_used_with_type_only_imports_or_exports);
|
|
}
|
|
if (override) {
|
|
return grammarErrorOnNode(declaration.assertClause, ts.Diagnostics.resolution_mode_can_only_be_set_for_type_only_imports);
|
|
}
|
|
}
|
|
}
|
|
function checkImportDeclaration(node) {
|
|
if (checkGrammarModuleElementContext(node, ts.isInJSFile(node) ? ts.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : ts.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) {
|
|
return;
|
|
}
|
|
if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers);
|
|
}
|
|
if (checkExternalImportOrExportDeclaration(node)) {
|
|
var importClause = node.importClause;
|
|
if (importClause && !checkGrammarImportClause(importClause)) {
|
|
if (importClause.name) {
|
|
checkImportBinding(importClause);
|
|
}
|
|
if (importClause.namedBindings) {
|
|
if (importClause.namedBindings.kind === 268) {
|
|
checkImportBinding(importClause.namedBindings);
|
|
if (moduleKind !== ts.ModuleKind.System && (moduleKind < ts.ModuleKind.ES2015 || ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS) && ts.getESModuleInterop(compilerOptions)) {
|
|
checkExternalEmitHelpers(node, 65536);
|
|
}
|
|
}
|
|
else {
|
|
var moduleExisted = resolveExternalModuleName(node, node.moduleSpecifier);
|
|
if (moduleExisted) {
|
|
ts.forEach(importClause.namedBindings.elements, checkImportBinding);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
checkAssertClause(node);
|
|
}
|
|
function checkImportEqualsDeclaration(node) {
|
|
if (checkGrammarModuleElementContext(node, ts.isInJSFile(node) ? ts.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : ts.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) {
|
|
return;
|
|
}
|
|
checkGrammarDecoratorsAndModifiers(node);
|
|
if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) {
|
|
checkImportBinding(node);
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
markExportAsReferenced(node);
|
|
}
|
|
if (node.moduleReference.kind !== 277) {
|
|
var target = resolveAlias(getSymbolOfNode(node));
|
|
if (target !== unknownSymbol) {
|
|
if (target.flags & 111551) {
|
|
var moduleName = ts.getFirstIdentifier(node.moduleReference);
|
|
if (!(resolveEntityName(moduleName, 111551 | 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 & 788968) {
|
|
checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
|
|
}
|
|
}
|
|
if (node.isTypeOnly) {
|
|
grammarErrorOnNode(node, ts.Diagnostics.An_import_alias_cannot_use_import_type);
|
|
}
|
|
}
|
|
else {
|
|
if (moduleKind >= ts.ModuleKind.ES2015 && ts.getSourceFileOfNode(node).impliedNodeFormat === undefined && !node.isTypeOnly && !(node.flags & 16777216)) {
|
|
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.isInJSFile(node) ? ts.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module : ts.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) {
|
|
return;
|
|
}
|
|
if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasSyntacticModifiers(node)) {
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers);
|
|
}
|
|
if (node.moduleSpecifier && node.exportClause && ts.isNamedExports(node.exportClause) && ts.length(node.exportClause.elements) && languageVersion === 0) {
|
|
checkExternalEmitHelpers(node, 4194304);
|
|
}
|
|
checkGrammarExportDeclaration(node);
|
|
if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) {
|
|
if (node.exportClause && !ts.isNamespaceExport(node.exportClause)) {
|
|
ts.forEach(node.exportClause.elements, checkExportSpecifier);
|
|
var inAmbientExternalModule = node.parent.kind === 262 && ts.isAmbientModule(node.parent.parent);
|
|
var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 262 &&
|
|
!node.moduleSpecifier && node.flags & 16777216;
|
|
if (node.parent.kind !== 305 && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
|
|
error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
|
|
}
|
|
}
|
|
else {
|
|
var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
|
|
if (moduleSymbol && hasExportAssignmentSymbol(moduleSymbol)) {
|
|
error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol));
|
|
}
|
|
else if (node.exportClause) {
|
|
checkAliasSymbol(node.exportClause);
|
|
}
|
|
if (moduleKind !== ts.ModuleKind.System && (moduleKind < ts.ModuleKind.ES2015 || ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS)) {
|
|
if (node.exportClause) {
|
|
if (ts.getESModuleInterop(compilerOptions)) {
|
|
checkExternalEmitHelpers(node, 65536);
|
|
}
|
|
}
|
|
else {
|
|
checkExternalEmitHelpers(node, 32768);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
checkAssertClause(node);
|
|
}
|
|
function checkGrammarExportDeclaration(node) {
|
|
var _a;
|
|
if (node.isTypeOnly) {
|
|
if (((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) === 273) {
|
|
return checkGrammarNamedImportsOrExports(node.exportClause);
|
|
}
|
|
else {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarModuleElementContext(node, errorMessage) {
|
|
var isInAppropriateContext = node.parent.kind === 305 || node.parent.kind === 262 || node.parent.kind === 261;
|
|
if (!isInAppropriateContext) {
|
|
grammarErrorOnFirstToken(node, errorMessage);
|
|
}
|
|
return !isInAppropriateContext;
|
|
}
|
|
function importClauseContainsReferencedImport(importClause) {
|
|
return ts.forEachImportClauseDeclaration(importClause, function (declaration) {
|
|
return !!getSymbolOfNode(declaration).isReferenced;
|
|
});
|
|
}
|
|
function importClauseContainsConstEnumUsedAsValue(importClause) {
|
|
return ts.forEachImportClauseDeclaration(importClause, function (declaration) {
|
|
return !!getSymbolLinks(getSymbolOfNode(declaration)).constEnumReferenced;
|
|
});
|
|
}
|
|
function canConvertImportDeclarationToTypeOnly(statement) {
|
|
return ts.isImportDeclaration(statement) &&
|
|
statement.importClause &&
|
|
!statement.importClause.isTypeOnly &&
|
|
importClauseContainsReferencedImport(statement.importClause) &&
|
|
!isReferencedAliasDeclaration(statement.importClause, true) &&
|
|
!importClauseContainsConstEnumUsedAsValue(statement.importClause);
|
|
}
|
|
function canConvertImportEqualsDeclarationToTypeOnly(statement) {
|
|
return ts.isImportEqualsDeclaration(statement) &&
|
|
ts.isExternalModuleReference(statement.moduleReference) &&
|
|
!statement.isTypeOnly &&
|
|
getSymbolOfNode(statement).isReferenced &&
|
|
!isReferencedAliasDeclaration(statement, false) &&
|
|
!getSymbolLinks(getSymbolOfNode(statement)).constEnumReferenced;
|
|
}
|
|
function checkImportsForTypeOnlyConversion(sourceFile) {
|
|
for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
|
|
var statement = _a[_i];
|
|
if (canConvertImportDeclarationToTypeOnly(statement) || canConvertImportEqualsDeclarationToTypeOnly(statement)) {
|
|
error(statement, ts.Diagnostics.This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error);
|
|
}
|
|
}
|
|
}
|
|
function checkExportSpecifier(node) {
|
|
checkAliasSymbol(node);
|
|
if (ts.getEmitDeclarations(compilerOptions)) {
|
|
collectLinkedAliases(node.propertyName || node.name, true);
|
|
}
|
|
if (!node.parent.parent.moduleSpecifier) {
|
|
var exportedName = node.propertyName || node.name;
|
|
var symbol = resolveName(exportedName, exportedName.escapedText, 111551 | 788968 | 1920 | 2097152, undefined, undefined, true);
|
|
if (symbol && (symbol === undefinedSymbol || symbol === globalThisSymbol || symbol.declarations && 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 {
|
|
if (!node.isTypeOnly && !node.parent.parent.isTypeOnly) {
|
|
markExportAsReferenced(node);
|
|
}
|
|
var target = symbol && (symbol.flags & 2097152 ? resolveAlias(symbol) : symbol);
|
|
if (!target || target === unknownSymbol || target.flags & 111551) {
|
|
checkExpressionCached(node.propertyName || node.name);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (ts.getESModuleInterop(compilerOptions) &&
|
|
moduleKind !== ts.ModuleKind.System &&
|
|
(moduleKind < ts.ModuleKind.ES2015 || ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS) &&
|
|
ts.idText(node.propertyName || node.name) === "default") {
|
|
checkExternalEmitHelpers(node, 131072);
|
|
}
|
|
}
|
|
}
|
|
function checkExportAssignment(node) {
|
|
var illegalContextMessage = node.isExportEquals
|
|
? ts.Diagnostics.An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration
|
|
: ts.Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration;
|
|
if (checkGrammarModuleElementContext(node, illegalContextMessage)) {
|
|
return;
|
|
}
|
|
var container = node.parent.kind === 305 ? node.parent : node.parent.parent;
|
|
if (container.kind === 261 && !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.hasEffectiveModifiers(node)) {
|
|
grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
|
|
}
|
|
var typeAnnotationNode = ts.getEffectiveTypeAnnotationNode(node);
|
|
if (typeAnnotationNode) {
|
|
checkTypeAssignableTo(checkExpressionCached(node.expression), getTypeFromTypeNode(typeAnnotationNode), node.expression);
|
|
}
|
|
if (node.expression.kind === 79) {
|
|
var id = node.expression;
|
|
var sym = resolveEntityName(id, 67108863, true, true, node);
|
|
if (sym) {
|
|
markAliasReferenced(sym, id);
|
|
var target = sym.flags & 2097152 ? resolveAlias(sym) : sym;
|
|
if (target === unknownSymbol || target.flags & 111551) {
|
|
checkExpressionCached(node.expression);
|
|
}
|
|
}
|
|
else {
|
|
checkExpressionCached(node.expression);
|
|
}
|
|
if (ts.getEmitDeclarations(compilerOptions)) {
|
|
collectLinkedAliases(node.expression, true);
|
|
}
|
|
}
|
|
else {
|
|
checkExpressionCached(node.expression);
|
|
}
|
|
checkExternalModuleExports(container);
|
|
if ((node.flags & 16777216) && !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 & 16777216)) {
|
|
if (moduleKind >= ts.ModuleKind.ES2015 && ts.getSourceFileOfNode(node).impliedNodeFormat !== ts.ModuleKind.CommonJS) {
|
|
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 (declaration && !isTopLevelInExternalModuleAugmentation(declaration) && !ts.isInJSFile(declaration)) {
|
|
error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
|
|
}
|
|
}
|
|
var exports_3 = getExportsOfModule(moduleSymbol);
|
|
if (exports_3) {
|
|
exports_3.forEach(function (_a, id) {
|
|
var declarations = _a.declarations, flags = _a.flags;
|
|
if (id === "__export") {
|
|
return;
|
|
}
|
|
if (flags & (1920 | 384)) {
|
|
return;
|
|
}
|
|
var exportedDeclarationsCount = ts.countWhere(declarations, ts.and(isNotOverloadAndNotAccessor, ts.not(ts.isInterfaceDeclaration)));
|
|
if (flags & 524288 && exportedDeclarationsCount <= 2) {
|
|
return;
|
|
}
|
|
if (exportedDeclarationsCount > 1) {
|
|
if (!isDuplicatedCommonJSExport(declarations)) {
|
|
for (var _i = 0, _b = declarations; _i < _b.length; _i++) {
|
|
var declaration = _b[_i];
|
|
if (isNotOverload(declaration)) {
|
|
diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Cannot_redeclare_exported_variable_0, ts.unescapeLeadingUnderscores(id)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
links.exportsChecked = true;
|
|
}
|
|
}
|
|
function isDuplicatedCommonJSExport(declarations) {
|
|
return declarations
|
|
&& declarations.length > 1
|
|
&& declarations.every(function (d) { return ts.isInJSFile(d) && ts.isAccessExpression(d) && (ts.isExportsIdentifier(d.expression) || ts.isModuleExportsAccessExpression(d.expression)); });
|
|
}
|
|
function checkSourceElement(node) {
|
|
if (node) {
|
|
var saveCurrentNode = currentNode;
|
|
currentNode = node;
|
|
instantiationCount = 0;
|
|
checkSourceElementWorker(node);
|
|
currentNode = saveCurrentNode;
|
|
}
|
|
}
|
|
function checkSourceElementWorker(node) {
|
|
ts.forEach(node.jsDoc, function (_a) {
|
|
var comment = _a.comment, tags = _a.tags;
|
|
checkJSDocCommentWorker(comment);
|
|
ts.forEach(tags, function (tag) {
|
|
checkJSDocCommentWorker(tag.comment);
|
|
if (ts.isInJSFile(node)) {
|
|
checkSourceElement(tag);
|
|
}
|
|
});
|
|
});
|
|
var kind = node.kind;
|
|
if (cancellationToken) {
|
|
switch (kind) {
|
|
case 261:
|
|
case 257:
|
|
case 258:
|
|
case 256:
|
|
cancellationToken.throwIfCancellationRequested();
|
|
}
|
|
}
|
|
if (kind >= 237 && kind <= 253 && node.flowNode && !isReachableFlowNode(node.flowNode)) {
|
|
errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
|
|
}
|
|
switch (kind) {
|
|
case 163:
|
|
return checkTypeParameter(node);
|
|
case 164:
|
|
return checkParameter(node);
|
|
case 167:
|
|
return checkPropertyDeclaration(node);
|
|
case 166:
|
|
return checkPropertySignature(node);
|
|
case 180:
|
|
case 179:
|
|
case 174:
|
|
case 175:
|
|
case 176:
|
|
return checkSignatureDeclaration(node);
|
|
case 169:
|
|
case 168:
|
|
return checkMethodDeclaration(node);
|
|
case 170:
|
|
return checkClassStaticBlockDeclaration(node);
|
|
case 171:
|
|
return checkConstructorDeclaration(node);
|
|
case 172:
|
|
case 173:
|
|
return checkAccessorDeclaration(node);
|
|
case 178:
|
|
return checkTypeReferenceNode(node);
|
|
case 177:
|
|
return checkTypePredicate(node);
|
|
case 181:
|
|
return checkTypeQuery(node);
|
|
case 182:
|
|
return checkTypeLiteral(node);
|
|
case 183:
|
|
return checkArrayType(node);
|
|
case 184:
|
|
return checkTupleType(node);
|
|
case 187:
|
|
case 188:
|
|
return checkUnionOrIntersectionType(node);
|
|
case 191:
|
|
case 185:
|
|
case 186:
|
|
return checkSourceElement(node.type);
|
|
case 192:
|
|
return checkThisType(node);
|
|
case 193:
|
|
return checkTypeOperator(node);
|
|
case 189:
|
|
return checkConditionalType(node);
|
|
case 190:
|
|
return checkInferType(node);
|
|
case 198:
|
|
return checkTemplateLiteralType(node);
|
|
case 200:
|
|
return checkImportType(node);
|
|
case 197:
|
|
return checkNamedTupleMember(node);
|
|
case 328:
|
|
return checkJSDocAugmentsTag(node);
|
|
case 329:
|
|
return checkJSDocImplementsTag(node);
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
return checkJSDocTypeAliasTag(node);
|
|
case 344:
|
|
return checkJSDocTemplateTag(node);
|
|
case 343:
|
|
return checkJSDocTypeTag(node);
|
|
case 324:
|
|
case 325:
|
|
case 326:
|
|
return checkJSDocLinkLikeTag(node);
|
|
case 340:
|
|
return checkJSDocParameterTag(node);
|
|
case 347:
|
|
return checkJSDocPropertyTag(node);
|
|
case 317:
|
|
checkJSDocFunctionType(node);
|
|
case 315:
|
|
case 314:
|
|
case 312:
|
|
case 313:
|
|
case 322:
|
|
checkJSDocTypeIsInJsFile(node);
|
|
ts.forEachChild(node, checkSourceElement);
|
|
return;
|
|
case 318:
|
|
checkJSDocVariadicType(node);
|
|
return;
|
|
case 309:
|
|
return checkSourceElement(node.type);
|
|
case 333:
|
|
case 335:
|
|
case 334:
|
|
return checkJSDocAccessibilityModifiers(node);
|
|
case 194:
|
|
return checkIndexedAccessType(node);
|
|
case 195:
|
|
return checkMappedType(node);
|
|
case 256:
|
|
return checkFunctionDeclaration(node);
|
|
case 235:
|
|
case 262:
|
|
return checkBlock(node);
|
|
case 237:
|
|
return checkVariableStatement(node);
|
|
case 238:
|
|
return checkExpressionStatement(node);
|
|
case 239:
|
|
return checkIfStatement(node);
|
|
case 240:
|
|
return checkDoStatement(node);
|
|
case 241:
|
|
return checkWhileStatement(node);
|
|
case 242:
|
|
return checkForStatement(node);
|
|
case 243:
|
|
return checkForInStatement(node);
|
|
case 244:
|
|
return checkForOfStatement(node);
|
|
case 245:
|
|
case 246:
|
|
return checkBreakOrContinueStatement(node);
|
|
case 247:
|
|
return checkReturnStatement(node);
|
|
case 248:
|
|
return checkWithStatement(node);
|
|
case 249:
|
|
return checkSwitchStatement(node);
|
|
case 250:
|
|
return checkLabeledStatement(node);
|
|
case 251:
|
|
return checkThrowStatement(node);
|
|
case 252:
|
|
return checkTryStatement(node);
|
|
case 254:
|
|
return checkVariableDeclaration(node);
|
|
case 203:
|
|
return checkBindingElement(node);
|
|
case 257:
|
|
return checkClassDeclaration(node);
|
|
case 258:
|
|
return checkInterfaceDeclaration(node);
|
|
case 259:
|
|
return checkTypeAliasDeclaration(node);
|
|
case 260:
|
|
return checkEnumDeclaration(node);
|
|
case 261:
|
|
return checkModuleDeclaration(node);
|
|
case 266:
|
|
return checkImportDeclaration(node);
|
|
case 265:
|
|
return checkImportEqualsDeclaration(node);
|
|
case 272:
|
|
return checkExportDeclaration(node);
|
|
case 271:
|
|
return checkExportAssignment(node);
|
|
case 236:
|
|
case 253:
|
|
checkGrammarStatementInAmbientContext(node);
|
|
return;
|
|
case 276:
|
|
return checkMissingDeclaration(node);
|
|
}
|
|
}
|
|
function checkJSDocCommentWorker(node) {
|
|
if (ts.isArray(node)) {
|
|
ts.forEach(node, function (tag) {
|
|
if (ts.isJSDocLinkLike(tag)) {
|
|
checkSourceElement(tag);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
function checkJSDocTypeIsInJsFile(node) {
|
|
if (!ts.isInJSFile(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);
|
|
var isCallbackTag = ts.isJSDocCallbackTag(paramTag.parent.parent);
|
|
if (host_1 || isCallbackTag) {
|
|
var lastParamDeclaration = isCallbackTag
|
|
? ts.lastOrUndefined(paramTag.parent.parent.typeExpression.parameters)
|
|
: 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) {
|
|
var enclosingFile = ts.getSourceFileOfNode(node);
|
|
var links = getNodeLinks(enclosingFile);
|
|
if (!(links.flags & 1)) {
|
|
links.deferredNodes || (links.deferredNodes = new ts.Set());
|
|
links.deferredNodes.add(node);
|
|
}
|
|
}
|
|
function checkDeferredNodes(context) {
|
|
var links = getNodeLinks(context);
|
|
if (links.deferredNodes) {
|
|
links.deferredNodes.forEach(checkDeferredNode);
|
|
}
|
|
}
|
|
function checkDeferredNode(node) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("check", "checkDeferredNode", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath });
|
|
var saveCurrentNode = currentNode;
|
|
currentNode = node;
|
|
instantiationCount = 0;
|
|
switch (node.kind) {
|
|
case 208:
|
|
case 209:
|
|
case 210:
|
|
case 165:
|
|
case 280:
|
|
resolveUntypedCall(node);
|
|
break;
|
|
case 213:
|
|
case 214:
|
|
case 169:
|
|
case 168:
|
|
checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
|
|
break;
|
|
case 172:
|
|
case 173:
|
|
checkAccessorDeclaration(node);
|
|
break;
|
|
case 226:
|
|
checkClassExpressionDeferred(node);
|
|
break;
|
|
case 163:
|
|
checkTypeParameterDeferred(node);
|
|
break;
|
|
case 279:
|
|
checkJsxSelfClosingElementDeferred(node);
|
|
break;
|
|
case 278:
|
|
checkJsxElementDeferred(node);
|
|
break;
|
|
}
|
|
currentNode = saveCurrentNode;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
function checkSourceFile(node) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("check", "checkSourceFile", { path: node.path }, true);
|
|
ts.performance.mark("beforeCheck");
|
|
checkSourceFileWorker(node);
|
|
ts.performance.mark("afterCheck");
|
|
ts.performance.measure("Check", "beforeCheck", "afterCheck");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
function unusedIsError(kind, isAmbient) {
|
|
if (isAmbient) {
|
|
return false;
|
|
}
|
|
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 (ts.skipTypeChecking(node, compilerOptions, host)) {
|
|
return;
|
|
}
|
|
checkGrammarSourceFile(node);
|
|
ts.clear(potentialThisCollisions);
|
|
ts.clear(potentialNewTargetCollisions);
|
|
ts.clear(potentialWeakMapSetCollisions);
|
|
ts.clear(potentialReflectCollisions);
|
|
ts.clear(potentialUnusedRenamedBindingElementsInTypes);
|
|
ts.forEach(node.statements, checkSourceElement);
|
|
checkSourceElement(node.endOfFileToken);
|
|
checkDeferredNodes(node);
|
|
if (ts.isExternalOrCommonJsModule(node)) {
|
|
registerForUnusedIdentifiersCheck(node);
|
|
}
|
|
addLazyDiagnostic(function () {
|
|
if (!node.isDeclarationFile && (compilerOptions.noUnusedLocals || compilerOptions.noUnusedParameters)) {
|
|
checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(node), function (containingNode, kind, diag) {
|
|
if (!ts.containsParseError(containingNode) && unusedIsError(kind, !!(containingNode.flags & 16777216))) {
|
|
diagnostics.add(diag);
|
|
}
|
|
});
|
|
}
|
|
if (!node.isDeclarationFile) {
|
|
checkPotentialUncheckedRenamedBindingElementsInTypes();
|
|
}
|
|
});
|
|
if (compilerOptions.importsNotUsedAsValues === 2 &&
|
|
!node.isDeclarationFile &&
|
|
ts.isExternalModule(node)) {
|
|
checkImportsForTypeOnlyConversion(node);
|
|
}
|
|
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);
|
|
}
|
|
if (potentialWeakMapSetCollisions.length) {
|
|
ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
|
|
ts.clear(potentialWeakMapSetCollisions);
|
|
}
|
|
if (potentialReflectCollisions.length) {
|
|
ts.forEach(potentialReflectCollisions, checkReflectCollision);
|
|
ts.clear(potentialReflectCollisions);
|
|
}
|
|
links.flags |= 1;
|
|
}
|
|
}
|
|
function getDiagnostics(sourceFile, ct) {
|
|
try {
|
|
cancellationToken = ct;
|
|
return getDiagnosticsWorker(sourceFile);
|
|
}
|
|
finally {
|
|
cancellationToken = undefined;
|
|
}
|
|
}
|
|
function ensurePendingDiagnosticWorkComplete() {
|
|
for (var _i = 0, deferredDiagnosticsCallbacks_1 = deferredDiagnosticsCallbacks; _i < deferredDiagnosticsCallbacks_1.length; _i++) {
|
|
var cb = deferredDiagnosticsCallbacks_1[_i];
|
|
cb();
|
|
}
|
|
deferredDiagnosticsCallbacks = [];
|
|
}
|
|
function checkSourceFileWithEagerDiagnostics(sourceFile) {
|
|
ensurePendingDiagnosticWorkComplete();
|
|
var oldAddLazyDiagnostics = addLazyDiagnostic;
|
|
addLazyDiagnostic = function (cb) { return cb(); };
|
|
checkSourceFile(sourceFile);
|
|
addLazyDiagnostic = oldAddLazyDiagnostics;
|
|
}
|
|
function getDiagnosticsWorker(sourceFile) {
|
|
if (sourceFile) {
|
|
ensurePendingDiagnosticWorkComplete();
|
|
var previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics();
|
|
var previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length;
|
|
checkSourceFileWithEagerDiagnostics(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(), checkSourceFileWithEagerDiagnostics);
|
|
return diagnostics.getDiagnostics();
|
|
}
|
|
function getGlobalDiagnostics() {
|
|
ensurePendingDiagnosticWorkComplete();
|
|
return diagnostics.getGlobalDiagnostics();
|
|
}
|
|
function getSymbolsInScope(location, meaning) {
|
|
if (location.flags & 33554432) {
|
|
return [];
|
|
}
|
|
var symbols = ts.createSymbolTable();
|
|
var isStaticSymbol = false;
|
|
populateSymbols();
|
|
symbols.delete("this");
|
|
return symbolsToArray(symbols);
|
|
function populateSymbols() {
|
|
while (location) {
|
|
if (location.locals && !isGlobalSourceFile(location)) {
|
|
copySymbols(location.locals, meaning);
|
|
}
|
|
switch (location.kind) {
|
|
case 305:
|
|
if (!ts.isExternalModule(location))
|
|
break;
|
|
case 261:
|
|
copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475);
|
|
break;
|
|
case 260:
|
|
copySymbols(getSymbolOfNode(location).exports, meaning & 8);
|
|
break;
|
|
case 226:
|
|
var className = location.name;
|
|
if (className) {
|
|
copySymbol(location.symbol, meaning);
|
|
}
|
|
case 257:
|
|
case 258:
|
|
if (!isStaticSymbol) {
|
|
copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968);
|
|
}
|
|
break;
|
|
case 213:
|
|
var funcName = location.name;
|
|
if (funcName) {
|
|
copySymbol(location.symbol, meaning);
|
|
}
|
|
break;
|
|
}
|
|
if (ts.introducesArgumentsExoticObject(location)) {
|
|
copySymbol(argumentsSymbol, meaning);
|
|
}
|
|
isStaticSymbol = ts.isStatic(location);
|
|
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 copyLocallyVisibleExportSymbols(source, meaning) {
|
|
if (meaning) {
|
|
source.forEach(function (symbol) {
|
|
if (!ts.getDeclarationOfKind(symbol, 275) && !ts.getDeclarationOfKind(symbol, 274)) {
|
|
copySymbol(symbol, meaning);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
function isTypeDeclarationName(name) {
|
|
return name.kind === 79 &&
|
|
isTypeDeclaration(name.parent) &&
|
|
ts.getNameOfDeclaration(name.parent) === name;
|
|
}
|
|
function isTypeDeclaration(node) {
|
|
switch (node.kind) {
|
|
case 163:
|
|
case 257:
|
|
case 258:
|
|
case 259:
|
|
case 260:
|
|
case 345:
|
|
case 338:
|
|
case 339:
|
|
return true;
|
|
case 267:
|
|
return node.isTypeOnly;
|
|
case 270:
|
|
case 275:
|
|
return node.parent.parent.isTypeOnly;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
function isTypeReferenceIdentifier(node) {
|
|
while (node.parent.kind === 161) {
|
|
node = node.parent;
|
|
}
|
|
return node.parent.kind === 178;
|
|
}
|
|
function isHeritageClauseElementIdentifier(node) {
|
|
while (node.parent.kind === 206) {
|
|
node = node.parent;
|
|
}
|
|
return node.parent.kind === 228;
|
|
}
|
|
function forEachEnclosingClass(node, callback) {
|
|
var result;
|
|
while (true) {
|
|
node = ts.getContainingClass(node);
|
|
if (!node)
|
|
break;
|
|
if (result = callback(node))
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
function isNodeUsedDuringClassInitialization(node) {
|
|
return !!ts.findAncestor(node, function (element) {
|
|
if (ts.isConstructorDeclaration(element) && ts.nodeIsPresent(element.body) || ts.isPropertyDeclaration(element)) {
|
|
return true;
|
|
}
|
|
else if (ts.isClassLike(element) || 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 === 161) {
|
|
nodeOnRightSide = nodeOnRightSide.parent;
|
|
}
|
|
if (nodeOnRightSide.parent.kind === 265) {
|
|
return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
|
|
}
|
|
if (nodeOnRightSide.parent.kind === 271) {
|
|
return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
|
|
}
|
|
return undefined;
|
|
}
|
|
function isInRightSideOfImportOrExportAssignment(node) {
|
|
return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined;
|
|
}
|
|
function getSpecialPropertyAssignmentSymbolFromEntityName(entityName) {
|
|
var specialPropertyAssignmentKind = ts.getAssignmentDeclarationKind(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 === 200 && parent.qualifier === node) {
|
|
return parent;
|
|
}
|
|
return undefined;
|
|
}
|
|
function getSymbolOfNameOrPropertyAccessExpression(name) {
|
|
if (ts.isDeclarationName(name)) {
|
|
return getSymbolOfNode(name.parent);
|
|
}
|
|
if (ts.isInJSFile(name) &&
|
|
name.parent.kind === 206 &&
|
|
name.parent === name.parent.parent.left) {
|
|
if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
|
|
var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
|
|
if (specialPropertyAssignmentSymbol) {
|
|
return specialPropertyAssignmentSymbol;
|
|
}
|
|
}
|
|
}
|
|
if (name.parent.kind === 271 && ts.isEntityNameExpression(name)) {
|
|
var success = resolveEntityName(name, 111551 | 788968 | 1920 | 2097152, true);
|
|
if (success && success !== unknownSymbol) {
|
|
return success;
|
|
}
|
|
}
|
|
else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
|
|
var importEqualsDeclaration = ts.getAncestor(name, 265);
|
|
ts.Debug.assert(importEqualsDeclaration !== undefined);
|
|
return getSymbolOfPartOfRightHandSideOfImportEquals(name, true);
|
|
}
|
|
if (ts.isEntityName(name)) {
|
|
var possibleImportNode = isImportTypeQualifierPart(name);
|
|
if (possibleImportNode) {
|
|
getTypeFromTypeNode(possibleImportNode);
|
|
var sym = getNodeLinks(name).resolvedSymbol;
|
|
return sym === unknownSymbol ? undefined : sym;
|
|
}
|
|
}
|
|
while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
|
|
name = name.parent;
|
|
}
|
|
if (isHeritageClauseElementIdentifier(name)) {
|
|
var meaning = 0;
|
|
if (name.parent.kind === 228) {
|
|
meaning = 788968;
|
|
if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
|
|
meaning |= 111551;
|
|
}
|
|
}
|
|
else {
|
|
meaning = 1920;
|
|
}
|
|
meaning |= 2097152;
|
|
var entityNameSymbol = ts.isEntityNameExpression(name) ? resolveEntityName(name, meaning) : undefined;
|
|
if (entityNameSymbol) {
|
|
return entityNameSymbol;
|
|
}
|
|
}
|
|
if (name.parent.kind === 340) {
|
|
return ts.getParameterSymbolFromJSDoc(name.parent);
|
|
}
|
|
if (name.parent.kind === 163 && name.parent.parent.kind === 344) {
|
|
ts.Debug.assert(!ts.isInJSFile(name));
|
|
var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
|
|
return typeParameter && typeParameter.symbol;
|
|
}
|
|
if (ts.isExpressionNode(name)) {
|
|
if (ts.nodeIsMissing(name)) {
|
|
return undefined;
|
|
}
|
|
var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
|
|
var meaning = isJSDoc_1 ? 788968 | 1920 | 111551 : 111551;
|
|
if (name.kind === 79) {
|
|
if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
|
|
var symbol = getIntrinsicTagSymbol(name.parent);
|
|
return symbol === unknownSymbol ? undefined : symbol;
|
|
}
|
|
var result = resolveEntityName(name, meaning, false, true, ts.getHostSignatureFromJSDoc(name));
|
|
if (!result && isJSDoc_1) {
|
|
var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
|
|
if (container) {
|
|
return resolveJSDocMemberName(name, false, getSymbolOfNode(container));
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
else if (ts.isPrivateIdentifier(name)) {
|
|
return getSymbolForPrivateIdentifierExpression(name);
|
|
}
|
|
else if (name.kind === 206 || name.kind === 161) {
|
|
var links = getNodeLinks(name);
|
|
if (links.resolvedSymbol) {
|
|
return links.resolvedSymbol;
|
|
}
|
|
if (name.kind === 206) {
|
|
checkPropertyAccessExpression(name, 0);
|
|
}
|
|
else {
|
|
checkQualifiedName(name, 0);
|
|
}
|
|
if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
|
|
return resolveJSDocMemberName(name);
|
|
}
|
|
return links.resolvedSymbol;
|
|
}
|
|
else if (ts.isJSDocMemberName(name)) {
|
|
return resolveJSDocMemberName(name);
|
|
}
|
|
}
|
|
else if (isTypeReferenceIdentifier(name)) {
|
|
var meaning = name.parent.kind === 178 ? 788968 : 1920;
|
|
var symbol = resolveEntityName(name, meaning, false, true);
|
|
return symbol && symbol !== unknownSymbol ? symbol : getUnresolvedSymbolForEntityName(name);
|
|
}
|
|
if (name.parent.kind === 177) {
|
|
return resolveEntityName(name, 1);
|
|
}
|
|
return undefined;
|
|
}
|
|
function resolveJSDocMemberName(name, ignoreErrors, container) {
|
|
if (ts.isEntityName(name)) {
|
|
var meaning = 788968 | 1920 | 111551;
|
|
var symbol = resolveEntityName(name, meaning, ignoreErrors, true, ts.getHostSignatureFromJSDoc(name));
|
|
if (!symbol && ts.isIdentifier(name) && container) {
|
|
symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
|
|
}
|
|
if (symbol) {
|
|
return symbol;
|
|
}
|
|
}
|
|
var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left, ignoreErrors, container);
|
|
var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
|
|
if (left) {
|
|
var proto = left.flags & 111551 && getPropertyOfType(getTypeOfSymbol(left), "prototype");
|
|
var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
|
|
return getPropertyOfType(t, right);
|
|
}
|
|
}
|
|
function getSymbolAtLocation(node, ignoreErrors) {
|
|
if (node.kind === 305) {
|
|
return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
|
|
}
|
|
var parent = node.parent;
|
|
var grandParent = parent.parent;
|
|
if (node.flags & 33554432) {
|
|
return undefined;
|
|
}
|
|
if (isDeclarationNameOrImportPropertyName(node)) {
|
|
var parentSymbol = getSymbolOfNode(parent);
|
|
return ts.isImportOrExportSpecifier(node.parent) && node.parent.propertyName === node
|
|
? getImmediateAliasedSymbol(parentSymbol)
|
|
: parentSymbol;
|
|
}
|
|
else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
|
|
return getSymbolOfNode(parent.parent);
|
|
}
|
|
if (node.kind === 79) {
|
|
if (isInRightSideOfImportOrExportAssignment(node)) {
|
|
return getSymbolOfNameOrPropertyAccessExpression(node);
|
|
}
|
|
else if (parent.kind === 203 &&
|
|
grandParent.kind === 201 &&
|
|
node === parent.propertyName) {
|
|
var typeOfPattern = getTypeOfNode(grandParent);
|
|
var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
|
|
if (propertyDeclaration) {
|
|
return propertyDeclaration;
|
|
}
|
|
}
|
|
else if (ts.isMetaProperty(parent) && parent.name === node) {
|
|
if (parent.keywordToken === 103 && ts.idText(node) === "target") {
|
|
return checkNewTargetMetaProperty(parent).symbol;
|
|
}
|
|
if (parent.keywordToken === 100 && ts.idText(node) === "meta") {
|
|
return getGlobalImportMetaExpressionType().members.get("meta");
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
switch (node.kind) {
|
|
case 79:
|
|
case 80:
|
|
case 206:
|
|
case 161:
|
|
if (!ts.isThisInTypeQuery(node)) {
|
|
return getSymbolOfNameOrPropertyAccessExpression(node);
|
|
}
|
|
case 108:
|
|
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 192:
|
|
return getTypeFromThisTypeNode(node).symbol;
|
|
case 106:
|
|
return checkExpression(node).symbol;
|
|
case 134:
|
|
var constructorDeclaration = node.parent;
|
|
if (constructorDeclaration && constructorDeclaration.kind === 171) {
|
|
return constructorDeclaration.parent.symbol;
|
|
}
|
|
return undefined;
|
|
case 10:
|
|
case 14:
|
|
if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
|
|
((node.parent.kind === 266 || node.parent.kind === 272) && node.parent.moduleSpecifier === node) ||
|
|
((ts.isInJSFile(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, ignoreErrors);
|
|
}
|
|
if (ts.isCallExpression(parent) && ts.isBindableObjectDefinePropertyCall(parent) && parent.arguments[1] === node) {
|
|
return getSymbolOfNode(parent);
|
|
}
|
|
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 88:
|
|
case 98:
|
|
case 38:
|
|
case 84:
|
|
return getSymbolOfNode(node.parent);
|
|
case 200:
|
|
return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
|
|
case 93:
|
|
return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
|
|
case 100:
|
|
case 103:
|
|
return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
|
|
case 231:
|
|
return checkExpression(node).symbol;
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
function getIndexInfosAtLocation(node) {
|
|
if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
|
|
var keyType_1 = getLiteralTypeFromPropertyName(node);
|
|
var objectType = getTypeOfExpression(node.parent.expression);
|
|
var objectTypes = objectType.flags & 1048576 ? objectType.types : [objectType];
|
|
return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
|
|
}
|
|
return undefined;
|
|
}
|
|
function getShorthandAssignmentValueSymbol(location) {
|
|
if (location && location.kind === 297) {
|
|
return resolveEntityName(location.name, 111551 | 2097152);
|
|
}
|
|
return undefined;
|
|
}
|
|
function getExportSpecifierLocalTargetSymbol(node) {
|
|
if (ts.isExportSpecifier(node)) {
|
|
return node.parent.parent.moduleSpecifier ?
|
|
getExternalModuleMember(node.parent.parent, node) :
|
|
resolveEntityName(node.propertyName || node.name, 111551 | 788968 | 1920 | 2097152);
|
|
}
|
|
else {
|
|
return resolveEntityName(node, 111551 | 788968 | 1920 | 2097152);
|
|
}
|
|
}
|
|
function getTypeOfNode(node) {
|
|
if (ts.isSourceFile(node) && !ts.isExternalModule(node)) {
|
|
return errorType;
|
|
}
|
|
if (node.flags & 33554432) {
|
|
return errorType;
|
|
}
|
|
var classDecl = ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node);
|
|
var classType = classDecl && getDeclaredTypeOfClassOrInterface(getSymbolOfNode(classDecl.class));
|
|
if (ts.isPartOfTypeNode(node)) {
|
|
var typeFromTypeNode = getTypeFromTypeNode(node);
|
|
return classType ? getTypeWithThisArgument(typeFromTypeNode, classType.thisType) : typeFromTypeNode;
|
|
}
|
|
if (ts.isExpressionNode(node)) {
|
|
return getRegularTypeOfExpression(node);
|
|
}
|
|
if (classType && !classDecl.isImplements) {
|
|
var baseType = ts.firstOrUndefined(getBaseTypes(classType));
|
|
return baseType ? getTypeWithThisArgument(baseType, classType.thisType) : errorType;
|
|
}
|
|
if (isTypeDeclaration(node)) {
|
|
var symbol = getSymbolOfNode(node);
|
|
return getDeclaredTypeOfSymbol(symbol);
|
|
}
|
|
if (isTypeDeclarationName(node)) {
|
|
var symbol = getSymbolAtLocation(node);
|
|
return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
|
|
}
|
|
if (ts.isDeclaration(node)) {
|
|
var symbol = getSymbolOfNode(node);
|
|
return symbol ? getTypeOfSymbol(symbol) : errorType;
|
|
}
|
|
if (isDeclarationNameOrImportPropertyName(node)) {
|
|
var symbol = getSymbolAtLocation(node);
|
|
if (symbol) {
|
|
return getTypeOfSymbol(symbol);
|
|
}
|
|
return errorType;
|
|
}
|
|
if (ts.isBindingPattern(node)) {
|
|
return getTypeForVariableLikeDeclaration(node.parent, true, 0) || errorType;
|
|
}
|
|
if (isInRightSideOfImportOrExportAssignment(node)) {
|
|
var symbol = getSymbolAtLocation(node);
|
|
if (symbol) {
|
|
var declaredType = getDeclaredTypeOfSymbol(symbol);
|
|
return !isErrorType(declaredType) ? declaredType : getTypeOfSymbol(symbol);
|
|
}
|
|
}
|
|
if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
|
|
return checkMetaPropertyKeyword(node.parent);
|
|
}
|
|
return errorType;
|
|
}
|
|
function getTypeOfAssignmentPattern(expr) {
|
|
ts.Debug.assert(expr.kind === 205 || expr.kind === 204);
|
|
if (expr.parent.kind === 244) {
|
|
var iteratedType = checkRightHandSideOfForOf(expr.parent);
|
|
return checkDestructuringAssignment(expr, iteratedType || errorType);
|
|
}
|
|
if (expr.parent.kind === 221) {
|
|
var iteratedType = getTypeOfExpression(expr.parent.right);
|
|
return checkDestructuringAssignment(expr, iteratedType || errorType);
|
|
}
|
|
if (expr.parent.kind === 296) {
|
|
var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
|
|
var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
|
|
var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
|
|
return checkObjectLiteralDestructuringPropertyAssignment(node_3, typeOfParentObjectLiteral, propertyIndex);
|
|
}
|
|
var node = ts.cast(expr.parent, ts.isArrayLiteralExpression);
|
|
var typeOfArrayLiteral = getTypeOfAssignmentPattern(node) || errorType;
|
|
var elementType = checkIteratedTypeOrElementType(65, typeOfArrayLiteral, undefinedType, expr.parent) || errorType;
|
|
return checkArrayLiteralDestructuringElementAssignment(node, typeOfArrayLiteral, node.elements.indexOf(expr), elementType);
|
|
}
|
|
function getPropertySymbolOfDestructuringAssignment(location) {
|
|
var typeOfObjectLiteral = getTypeOfAssignmentPattern(ts.cast(location.parent.parent, ts.isAssignmentPattern));
|
|
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.isStatic(node)
|
|
? getTypeOfSymbol(classSymbol)
|
|
: getDeclaredTypeOfSymbol(classSymbol);
|
|
}
|
|
function getClassElementPropertyKeyType(element) {
|
|
var name = element.name;
|
|
switch (name.kind) {
|
|
case 79:
|
|
return getStringLiteralType(ts.idText(name));
|
|
case 8:
|
|
case 10:
|
|
return getStringLiteralType(name.text);
|
|
case 162:
|
|
var nameType = checkComputedPropertyName(name);
|
|
return isTypeAssignableToKind(nameType, 12288) ? nameType : stringType;
|
|
default:
|
|
return ts.Debug.fail("Unsupported property name.");
|
|
}
|
|
}
|
|
function getAugmentedPropertiesOfType(type) {
|
|
type = getApparentType(type);
|
|
var propsByName = ts.createSymbolTable(getPropertiesOfType(type));
|
|
var functionType = getSignaturesOfType(type, 0).length ? globalCallableFunctionType :
|
|
getSignaturesOfType(type, 1).length ? globalNewableFunctionType :
|
|
undefined;
|
|
if (functionType) {
|
|
ts.forEach(getPropertiesOfType(functionType), 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(tryGetTarget(symbol));
|
|
}
|
|
return undefined;
|
|
}
|
|
function tryGetTarget(symbol) {
|
|
var target;
|
|
var next = symbol;
|
|
while (next = getSymbolLinks(next).target) {
|
|
target = next;
|
|
}
|
|
return target;
|
|
}
|
|
function isArgumentsLocalBinding(nodeIn) {
|
|
if (ts.isGeneratedIdentifier(nodeIn))
|
|
return false;
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier);
|
|
if (!node)
|
|
return false;
|
|
var parent = node.parent;
|
|
if (!parent)
|
|
return false;
|
|
var isPropertyName = ((ts.isPropertyAccessExpression(parent)
|
|
|| ts.isPropertyAssignment(parent))
|
|
&& parent.name === node);
|
|
return !isPropertyName && getReferencedValueSymbol(node) === argumentsSymbol;
|
|
}
|
|
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 & 111551)
|
|
: ts.forEachEntry(getExportsOfModule(moduleSymbol), isValue);
|
|
}
|
|
return symbolLinks.exportsSomeValue;
|
|
function isValue(s) {
|
|
s = resolveSymbol(s);
|
|
return s && !!(s.flags & 111551);
|
|
}
|
|
}
|
|
function isNameOfModuleOrEnumDeclaration(node) {
|
|
return ts.isModuleOrEnumDeclaration(node.parent) && node === node.parent.name;
|
|
}
|
|
function getReferencedExportContainer(nodeIn, prefixLocals) {
|
|
var _a;
|
|
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 && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 305) {
|
|
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) {
|
|
if (nodeIn.generatedImportReference) {
|
|
return nodeIn.generatedImportReference;
|
|
}
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isIdentifier);
|
|
if (node) {
|
|
var symbol = getReferencedValueSymbol(node);
|
|
if (isNonLocalAlias(symbol, 111551) && !getTypeOnlyAliasDeclaration(symbol)) {
|
|
return getDeclarationOfAliasSymbol(symbol);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
|
|
return symbol.valueDeclaration
|
|
&& ts.isBindingElement(symbol.valueDeclaration)
|
|
&& ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 292;
|
|
}
|
|
function isSymbolOfDeclarationWithCollidingName(symbol) {
|
|
if (symbol.flags & 418 && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
|
|
var links = getSymbolLinks(symbol);
|
|
if (links.isDeclarationWithCollidingName === undefined) {
|
|
var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
|
|
if (ts.isStatementWithLocals(container) || isSymbolOfDestructuredElementOfCatchBinding(symbol)) {
|
|
var nodeLinks_1 = getNodeLinks(symbol.valueDeclaration);
|
|
if (resolveName(container.parent, symbol.escapedName, 111551, undefined, undefined, false)) {
|
|
links.isDeclarationWithCollidingName = true;
|
|
}
|
|
else if (nodeLinks_1.flags & 262144) {
|
|
var isDeclaredInLoop = nodeLinks_1.flags & 524288;
|
|
var inLoopInitializer = ts.isIterationStatement(container, false);
|
|
var inLoopBodyBlock = container.kind === 235 && 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 265:
|
|
return isAliasResolvedToValue(getSymbolOfNode(node));
|
|
case 267:
|
|
case 268:
|
|
case 270:
|
|
case 275:
|
|
var symbol = getSymbolOfNode(node);
|
|
return !!symbol && isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
|
|
case 272:
|
|
var exportClause = node.exportClause;
|
|
return !!exportClause && (ts.isNamespaceExport(exportClause) ||
|
|
ts.some(exportClause.elements, isValueAliasDeclaration));
|
|
case 271:
|
|
return node.expression && node.expression.kind === 79 ?
|
|
isAliasResolvedToValue(getSymbolOfNode(node)) :
|
|
true;
|
|
}
|
|
return false;
|
|
}
|
|
function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
|
|
if (node === undefined || node.parent.kind !== 305 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
|
|
return false;
|
|
}
|
|
var isValue = isAliasResolvedToValue(getSymbolOfNode(node));
|
|
return isValue && node.moduleReference && !ts.nodeIsMissing(node.moduleReference);
|
|
}
|
|
function isAliasResolvedToValue(symbol) {
|
|
if (!symbol) {
|
|
return false;
|
|
}
|
|
var target = getExportSymbolOfValueSymbolIfExported(resolveAlias(symbol));
|
|
if (target === unknownSymbol) {
|
|
return true;
|
|
}
|
|
return !!(target.flags & 111551) &&
|
|
(ts.shouldPreserveConstEnums(compilerOptions) || !isConstEnumOrConstEnumOnlyModule(target));
|
|
}
|
|
function isConstEnumOrConstEnumOnlyModule(s) {
|
|
return isConstEnumSymbol(s) || !!s.constEnumOnlyModule;
|
|
}
|
|
function isReferencedAliasDeclaration(node, checkChildren) {
|
|
if (isAliasSymbolDeclaration(node)) {
|
|
var symbol = getSymbolOfNode(node);
|
|
var links = symbol && getSymbolLinks(symbol);
|
|
if (links === null || links === void 0 ? void 0 : links.referenced) {
|
|
return true;
|
|
}
|
|
var target = getSymbolLinks(symbol).aliasTarget;
|
|
if (target && ts.getEffectiveModifierFlags(node) & 1 &&
|
|
target.flags & 111551 &&
|
|
(ts.shouldPreserveConstEnums(compilerOptions) || !isConstEnumOrConstEnumOnlyModule(target))) {
|
|
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.hasSyntacticModifier(parameter, 16476);
|
|
}
|
|
function isOptionalUninitializedParameterProperty(parameter) {
|
|
return strictNullChecks &&
|
|
isOptionalParameter(parameter) &&
|
|
!parameter.initializer &&
|
|
ts.hasSyntacticModifier(parameter, 16476);
|
|
}
|
|
function isExpandoFunctionDeclaration(node) {
|
|
var declaration = ts.getParseTreeNode(node, ts.isFunctionDeclaration);
|
|
if (!declaration) {
|
|
return false;
|
|
}
|
|
var symbol = getSymbolOfNode(declaration);
|
|
if (!symbol || !(symbol.flags & 16)) {
|
|
return false;
|
|
}
|
|
return !!ts.forEachEntry(getExportsOfSymbol(symbol), function (p) { return p.flags & 111551 && p.valueDeclaration && ts.isPropertyAccessExpression(p.valueDeclaration); });
|
|
}
|
|
function getPropertiesOfContainerFunction(node) {
|
|
var declaration = ts.getParseTreeNode(node, ts.isFunctionDeclaration);
|
|
if (!declaration) {
|
|
return ts.emptyArray;
|
|
}
|
|
var symbol = getSymbolOfNode(declaration);
|
|
return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
|
|
}
|
|
function getNodeCheckFlags(node) {
|
|
var _a;
|
|
var nodeId = node.id || 0;
|
|
if (nodeId < 0 || nodeId >= nodeLinks.length)
|
|
return 0;
|
|
return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
|
|
}
|
|
function getEnumMemberValue(node) {
|
|
computeEnumMemberValues(node.parent);
|
|
return getNodeLinks(node).enumMemberValue;
|
|
}
|
|
function canHaveConstantValue(node) {
|
|
switch (node.kind) {
|
|
case 299:
|
|
case 206:
|
|
case 207:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getConstantValue(node) {
|
|
if (node.kind === 299) {
|
|
return getEnumMemberValue(node);
|
|
}
|
|
var symbol = getNodeLinks(node).resolvedSymbol;
|
|
if (symbol && (symbol.flags & 8)) {
|
|
var member = symbol.valueDeclaration;
|
|
if (ts.isEnumConst(member.parent)) {
|
|
return getEnumMemberValue(member);
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function isFunctionType(type) {
|
|
return !!(type.flags & 524288) && getSignaturesOfType(type, 0).length > 0;
|
|
}
|
|
function getTypeReferenceSerializationKind(typeNameIn, location) {
|
|
var _a, _b;
|
|
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 isTypeOnly = false;
|
|
if (ts.isQualifiedName(typeName)) {
|
|
var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551, true, true, location);
|
|
isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
|
|
}
|
|
var valueSymbol = resolveEntityName(typeName, 111551, true, true, location);
|
|
var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 ? resolveAlias(valueSymbol) : valueSymbol;
|
|
isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
|
|
var typeSymbol = resolveEntityName(typeName, 788968, true, false, location);
|
|
if (resolvedSymbol && resolvedSymbol === typeSymbol) {
|
|
var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false);
|
|
if (globalPromiseSymbol && resolvedSymbol === globalPromiseSymbol) {
|
|
return ts.TypeReferenceSerializationKind.Promise;
|
|
}
|
|
var constructorType = getTypeOfSymbol(resolvedSymbol);
|
|
if (constructorType && isConstructorType(constructorType)) {
|
|
return isTypeOnly ? ts.TypeReferenceSerializationKind.TypeWithCallSignature : ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue;
|
|
}
|
|
}
|
|
if (!typeSymbol) {
|
|
return isTypeOnly ? ts.TypeReferenceSerializationKind.ObjectType : ts.TypeReferenceSerializationKind.Unknown;
|
|
}
|
|
var type = getDeclaredTypeOfSymbol(typeSymbol);
|
|
if (isErrorType(type)) {
|
|
return isTypeOnly ? ts.TypeReferenceSerializationKind.ObjectType : ts.TypeReferenceSerializationKind.Unknown;
|
|
}
|
|
else if (type.flags & 3) {
|
|
return ts.TypeReferenceSerializationKind.ObjectType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 16384 | 98304 | 131072)) {
|
|
return ts.TypeReferenceSerializationKind.VoidNullableOrNeverType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 528)) {
|
|
return ts.TypeReferenceSerializationKind.BooleanType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 296)) {
|
|
return ts.TypeReferenceSerializationKind.NumberLikeType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 2112)) {
|
|
return ts.TypeReferenceSerializationKind.BigIntLikeType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 402653316)) {
|
|
return ts.TypeReferenceSerializationKind.StringLikeType;
|
|
}
|
|
else if (isTupleType(type)) {
|
|
return ts.TypeReferenceSerializationKind.ArrayLikeType;
|
|
}
|
|
else if (isTypeAssignableToKind(type, 12288)) {
|
|
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.factory.createToken(130);
|
|
}
|
|
var symbol = getSymbolOfNode(declaration);
|
|
var type = symbol && !(symbol.flags & (2048 | 131072))
|
|
? getWidenedLiteralType(getTypeOfSymbol(symbol))
|
|
: errorType;
|
|
if (type.flags & 8192 &&
|
|
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.factory.createToken(130);
|
|
}
|
|
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.factory.createToken(130);
|
|
}
|
|
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, 111551 | 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.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node)) {
|
|
return isFreshLiteralType(getTypeOfSymbol(getSymbolOfNode(node)));
|
|
}
|
|
return false;
|
|
}
|
|
function literalTypeToNode(type, enclosing, tracker) {
|
|
var enumResult = type.flags & 1024 ? nodeBuilder.symbolToExpression(type.symbol, 111551, enclosing, undefined, tracker)
|
|
: type === trueType ? ts.factory.createTrue() : type === falseType && ts.factory.createFalse();
|
|
if (enumResult)
|
|
return enumResult;
|
|
var literalValue = type.value;
|
|
return typeof literalValue === "object" ? ts.factory.createBigIntLiteral(literalValue) :
|
|
typeof literalValue === "number" ? ts.factory.createNumericLiteral(literalValue) :
|
|
ts.factory.createStringLiteral(literalValue);
|
|
}
|
|
function createLiteralConstValue(node, tracker) {
|
|
var type = getTypeOfSymbol(getSymbolOfNode(node));
|
|
return literalTypeToNode(type, node, tracker);
|
|
}
|
|
function getJsxFactoryEntity(location) {
|
|
return location ? (getJsxNamespace(location), (ts.getSourceFileOfNode(location).localJsxFactory || _jsxFactoryEntity)) : _jsxFactoryEntity;
|
|
}
|
|
function getJsxFragmentFactoryEntity(location) {
|
|
if (location) {
|
|
var file = ts.getSourceFileOfNode(location);
|
|
if (file) {
|
|
if (file.localJsxFragmentFactory) {
|
|
return file.localJsxFragmentFactory;
|
|
}
|
|
var jsxFragPragmas = file.pragmas.get("jsxfrag");
|
|
var jsxFragPragma = ts.isArray(jsxFragPragmas) ? jsxFragPragmas[0] : jsxFragPragmas;
|
|
if (jsxFragPragma) {
|
|
file.localJsxFragmentFactory = ts.parseIsolatedEntityName(jsxFragPragma.arguments.factory, languageVersion);
|
|
return file.localJsxFragmentFactory;
|
|
}
|
|
}
|
|
}
|
|
if (compilerOptions.jsxFragmentFactory) {
|
|
return ts.parseIsolatedEntityName(compilerOptions.jsxFragmentFactory, languageVersion);
|
|
}
|
|
}
|
|
function createResolver() {
|
|
var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives();
|
|
var fileToDirective;
|
|
if (resolvedTypeReferenceDirectives) {
|
|
fileToDirective = new ts.Map();
|
|
resolvedTypeReferenceDirectives.forEach(function (resolvedDirective, key, mode) {
|
|
if (!resolvedDirective || !resolvedDirective.resolvedFileName) {
|
|
return;
|
|
}
|
|
var file = host.getSourceFile(resolvedDirective.resolvedFileName);
|
|
if (file) {
|
|
addReferencedFilesToTypeDirective(file, key, mode);
|
|
}
|
|
});
|
|
}
|
|
return {
|
|
getReferencedExportContainer: getReferencedExportContainer,
|
|
getReferencedImportDeclaration: getReferencedImportDeclaration,
|
|
getReferencedDeclarationWithCollidingName: getReferencedDeclarationWithCollidingName,
|
|
isDeclarationWithCollidingName: isDeclarationWithCollidingName,
|
|
isValueAliasDeclaration: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? isValueAliasDeclaration(node) : true;
|
|
},
|
|
hasGlobalName: hasGlobalName,
|
|
isReferencedAliasDeclaration: function (nodeIn, checkChildren) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? isReferencedAliasDeclaration(node, checkChildren) : true;
|
|
},
|
|
getNodeCheckFlags: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn);
|
|
return node ? getNodeCheckFlags(node) : 0;
|
|
},
|
|
isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName,
|
|
isDeclarationVisible: isDeclarationVisible,
|
|
isImplementationOfOverload: isImplementationOfOverload,
|
|
isRequiredInitializedParameter: isRequiredInitializedParameter,
|
|
isOptionalUninitializedParameterProperty: isOptionalUninitializedParameterProperty,
|
|
isExpandoFunctionDeclaration: isExpandoFunctionDeclaration,
|
|
getPropertiesOfContainerFunction: getPropertiesOfContainerFunction,
|
|
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: function (nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.hasPossibleExternalModuleReference);
|
|
return node && getExternalModuleFileFromDeclaration(node);
|
|
},
|
|
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) & 4096);
|
|
},
|
|
getJsxFactoryEntity: getJsxFactoryEntity,
|
|
getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
|
|
getAllAccessorDeclarations: function (accessor) {
|
|
accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration);
|
|
var otherKind = accessor.kind === 173 ? 172 : 173;
|
|
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 === 173 ? accessor : otherAccessor;
|
|
var getAccessor = accessor.kind === 172 ? accessor : otherAccessor;
|
|
return {
|
|
firstAccessor: firstAccessor,
|
|
secondAccessor: secondAccessor,
|
|
setAccessor: setAccessor,
|
|
getAccessor: getAccessor
|
|
};
|
|
},
|
|
getSymbolOfExternalModuleSpecifier: function (moduleName) { return resolveExternalModuleNameWorker(moduleName, moduleName, undefined); },
|
|
isBindingCapturedByNode: function (node, decl) {
|
|
var parseNode = ts.getParseTreeNode(node);
|
|
var parseDecl = ts.getParseTreeNode(decl);
|
|
return !!parseNode && !!parseDecl && (ts.isVariableDeclaration(parseDecl) || ts.isBindingElement(parseDecl)) && isBindingCapturedByNode(parseNode, parseDecl);
|
|
},
|
|
getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
|
|
var n = ts.getParseTreeNode(node);
|
|
ts.Debug.assert(n && n.kind === 305, "Non-sourcefile node passed into getDeclarationsForSourceFile");
|
|
var sym = getSymbolOfNode(node);
|
|
if (!sym) {
|
|
return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
|
|
}
|
|
return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, tracker, bundled);
|
|
},
|
|
isImportRequiredByAugmentation: isImportRequiredByAugmentation,
|
|
};
|
|
function isImportRequiredByAugmentation(node) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
if (!file.symbol)
|
|
return false;
|
|
var importTarget = getExternalModuleFileFromDeclaration(node);
|
|
if (!importTarget)
|
|
return false;
|
|
if (importTarget === file)
|
|
return false;
|
|
var exports = getExportsOfModule(file.symbol);
|
|
for (var _i = 0, _a = ts.arrayFrom(exports.values()); _i < _a.length; _i++) {
|
|
var s = _a[_i];
|
|
if (s.mergeId) {
|
|
var merged = getMergedSymbol(s);
|
|
if (merged.declarations) {
|
|
for (var _b = 0, _c = merged.declarations; _b < _c.length; _b++) {
|
|
var d = _c[_b];
|
|
var declFile = ts.getSourceFileOfNode(d);
|
|
if (declFile === importTarget) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function isInHeritageClause(node) {
|
|
return node.parent && node.parent.kind === 228 && node.parent.parent && node.parent.parent.kind === 291;
|
|
}
|
|
function getTypeReferenceDirectivesForEntityName(node) {
|
|
if (!fileToDirective) {
|
|
return undefined;
|
|
}
|
|
var meaning;
|
|
if (node.parent.kind === 162) {
|
|
meaning = 111551 | 1048576;
|
|
}
|
|
else {
|
|
meaning = 788968 | 1920;
|
|
if ((node.kind === 79 && isInTypeQuery(node)) || (node.kind === 206 && !isInHeritageClause(node))) {
|
|
meaning = 111551 | 1048576;
|
|
}
|
|
}
|
|
var symbol = resolveEntityName(node, meaning, true);
|
|
return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined;
|
|
}
|
|
function getTypeReferenceDirectivesForSymbol(symbol, meaning) {
|
|
if (!fileToDirective || !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 === 305 && 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 addReferencedFilesToTypeDirective(file, key, mode) {
|
|
if (fileToDirective.has(file.path))
|
|
return;
|
|
fileToDirective.set(file.path, [key, mode]);
|
|
for (var _i = 0, _a = file.referencedFiles; _i < _a.length; _i++) {
|
|
var _b = _a[_i], fileName = _b.fileName, resolutionMode = _b.resolutionMode;
|
|
var resolvedFile = ts.resolveTripleslashReference(fileName, file.fileName);
|
|
var referencedFile = host.getSourceFile(resolvedFile);
|
|
if (referencedFile) {
|
|
addReferencedFilesToTypeDirective(referencedFile, key, resolutionMode || file.impliedNodeFormat);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getExternalModuleFileFromDeclaration(declaration) {
|
|
var specifier = declaration.kind === 261 ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
|
|
var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, undefined);
|
|
if (!moduleSymbol) {
|
|
return undefined;
|
|
}
|
|
return ts.getDeclarationOfKind(moduleSymbol, 305);
|
|
}
|
|
function initializeTypeChecker() {
|
|
for (var _i = 0, _a = host.getSourceFiles(); _i < _a.length; _i++) {
|
|
var file = _a[_i];
|
|
ts.bindSourceFile(file, compilerOptions);
|
|
}
|
|
amalgamatedDuplicates = new ts.Map();
|
|
var augmentations;
|
|
for (var _b = 0, _c = host.getSourceFiles(); _b < _c.length; _b++) {
|
|
var file = _c[_b];
|
|
if (file.redirectInfo) {
|
|
continue;
|
|
}
|
|
if (!ts.isExternalOrCommonJsModule(file)) {
|
|
var fileGlobalThisSymbol = file.locals.get("globalThis");
|
|
if (fileGlobalThisSymbol === null || fileGlobalThisSymbol === void 0 ? void 0 : fileGlobalThisSymbol.declarations) {
|
|
for (var _d = 0, _e = fileGlobalThisSymbol.declarations; _d < _e.length; _d++) {
|
|
var declaration = _e[_d];
|
|
diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0, "globalThis"));
|
|
}
|
|
}
|
|
mergeSymbolTable(globals, file.locals);
|
|
}
|
|
if (file.jsGlobalAugmentations) {
|
|
mergeSymbolTable(globals, file.jsGlobalAugmentations);
|
|
}
|
|
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 _f = 0, augmentations_1 = augmentations; _f < augmentations_1.length; _f++) {
|
|
var list = augmentations_1[_f];
|
|
for (var _g = 0, list_1 = list; _g < list_1.length; _g++) {
|
|
var augmentation = list_1[_g];
|
|
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;
|
|
getSymbolLinks(globalThisSymbol).type = createObjectType(16, globalThisSymbol);
|
|
globalArrayType = getGlobalType("Array", 1, true);
|
|
globalObjectType = getGlobalType("Object", 0, true);
|
|
globalFunctionType = getGlobalType("Function", 0, true);
|
|
globalCallableFunctionType = strictBindCallApply && getGlobalType("CallableFunction", 0, true) || globalFunctionType;
|
|
globalNewableFunctionType = strictBindCallApply && getGlobalType("NewableFunction", 0, true) || globalFunctionType;
|
|
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, ts.emptyArray);
|
|
}
|
|
globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", 1) || globalArrayType;
|
|
anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
|
|
globalThisType = getGlobalTypeOrUndefined("ThisType", 1);
|
|
if (augmentations) {
|
|
for (var _h = 0, augmentations_2 = augmentations; _h < augmentations_2.length; _h++) {
|
|
var list = augmentations_2[_h];
|
|
for (var _j = 0, list_2 = list; _j < list_2.length; _j++) {
|
|
var augmentation = list_2[_j];
|
|
if (ts.isGlobalScopeAugmentation(augmentation.parent))
|
|
continue;
|
|
mergeModuleAugmentation(augmentation);
|
|
}
|
|
}
|
|
}
|
|
amalgamatedDuplicates.forEach(function (_a) {
|
|
var firstFile = _a.firstFile, secondFile = _a.secondFile, conflictingSymbols = _a.conflictingSymbols;
|
|
if (conflictingSymbols.size < 8) {
|
|
conflictingSymbols.forEach(function (_a, symbolName) {
|
|
var isBlockScoped = _a.isBlockScoped, firstFileLocations = _a.firstFileLocations, secondFileLocations = _a.secondFileLocations;
|
|
var message = isBlockScoped ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
|
|
for (var _i = 0, firstFileLocations_1 = firstFileLocations; _i < firstFileLocations_1.length; _i++) {
|
|
var node = firstFileLocations_1[_i];
|
|
addDuplicateDeclarationError(node, message, symbolName, secondFileLocations);
|
|
}
|
|
for (var _b = 0, secondFileLocations_1 = secondFileLocations; _b < secondFileLocations_1.length; _b++) {
|
|
var node = secondFileLocations_1[_b];
|
|
addDuplicateDeclarationError(node, message, symbolName, firstFileLocations);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
var list = ts.arrayFrom(conflictingSymbols.keys()).join(", ");
|
|
diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Conflicts_are_in_this_file)));
|
|
diagnostics.add(ts.addRelatedInfo(ts.createDiagnosticForNode(secondFile, ts.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), ts.createDiagnosticForNode(firstFile, ts.Diagnostics.Conflicts_are_in_this_file)));
|
|
}
|
|
});
|
|
amalgamatedDuplicates = undefined;
|
|
}
|
|
function checkExternalEmitHelpers(location, helpers) {
|
|
if ((requestedExternalEmitHelpers & helpers) !== helpers && compilerOptions.importHelpers) {
|
|
var sourceFile = ts.getSourceFileOfNode(location);
|
|
if (ts.isEffectiveExternalModule(sourceFile, compilerOptions) && !(location.flags & 16777216)) {
|
|
var helpersModule = resolveHelpersModule(sourceFile, location);
|
|
if (helpersModule !== unknownSymbol) {
|
|
var uncheckedHelpers = helpers & ~requestedExternalEmitHelpers;
|
|
for (var helper = 1; helper <= 4194304; helper <<= 1) {
|
|
if (uncheckedHelpers & helper) {
|
|
var name = getHelperName(helper);
|
|
var symbol = getSymbol(helpersModule.exports, ts.escapeLeadingUnderscores(name), 111551);
|
|
if (!symbol) {
|
|
error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name);
|
|
}
|
|
else if (helper & 524288) {
|
|
if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 3; })) {
|
|
error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 4);
|
|
}
|
|
}
|
|
else if (helper & 1048576) {
|
|
if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 4; })) {
|
|
error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
|
|
}
|
|
}
|
|
else if (helper & 1024) {
|
|
if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
|
|
error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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 "__spreadArray";
|
|
case 2048: return "__await";
|
|
case 4096: return "__asyncGenerator";
|
|
case 8192: return "__asyncDelegator";
|
|
case 16384: return "__asyncValues";
|
|
case 32768: return "__exportStar";
|
|
case 65536: return "__importStar";
|
|
case 131072: return "__importDefault";
|
|
case 262144: return "__makeTemplateObject";
|
|
case 524288: return "__classPrivateFieldGet";
|
|
case 1048576: return "__classPrivateFieldSet";
|
|
case 2097152: return "__classPrivateFieldIn";
|
|
case 4194304: return "__createBinding";
|
|
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 (ts.canHaveIllegalDecorators(node) && ts.some(node.illegalDecorators)) {
|
|
return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
|
|
}
|
|
if (!ts.canHaveDecorators(node) || !ts.hasDecorators(node)) {
|
|
return false;
|
|
}
|
|
if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
|
|
if (node.kind === 169 && !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 === 172 || node.kind === 173) {
|
|
var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
|
|
if (ts.hasDecorators(accessors.firstAccessor) && 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, lastOverride;
|
|
var flags = 0;
|
|
for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
|
|
var modifier = _a[_i];
|
|
if (ts.isDecorator(modifier))
|
|
continue;
|
|
if (modifier.kind !== 145) {
|
|
if (node.kind === 166 || node.kind === 168) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
|
|
}
|
|
if (node.kind === 176 && (modifier.kind !== 124 || !ts.isClassLike(node.parent))) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
|
|
}
|
|
}
|
|
if (modifier.kind !== 101 && modifier.kind !== 144) {
|
|
if (node.kind === 163) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_parameter, ts.tokenToString(modifier.kind));
|
|
}
|
|
}
|
|
switch (modifier.kind) {
|
|
case 85:
|
|
if (node.kind !== 260) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85));
|
|
}
|
|
break;
|
|
case 159:
|
|
if (flags & 16384) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
|
|
}
|
|
else if (flags & 2) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "override", "declare");
|
|
}
|
|
else if (flags & 64) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "override", "readonly");
|
|
}
|
|
else if (flags & 256) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "override", "async");
|
|
}
|
|
flags |= 16384;
|
|
lastOverride = modifier;
|
|
break;
|
|
case 123:
|
|
case 122:
|
|
case 121:
|
|
var text = visibilityToString(ts.modifierToFlag(modifier.kind));
|
|
if (flags & 28) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
|
|
}
|
|
else if (flags & 16384) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "override");
|
|
}
|
|
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 === 262 || node.parent.kind === 305) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
|
|
}
|
|
else if (flags & 128) {
|
|
if (modifier.kind === 121) {
|
|
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");
|
|
}
|
|
}
|
|
else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier);
|
|
}
|
|
flags |= ts.modifierToFlag(modifier.kind);
|
|
break;
|
|
case 124:
|
|
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 === 262 || node.parent.kind === 305) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
|
|
}
|
|
else if (node.kind === 164) {
|
|
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");
|
|
}
|
|
else if (flags & 16384) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "override");
|
|
}
|
|
flags |= 32;
|
|
lastStatic = modifier;
|
|
break;
|
|
case 145:
|
|
if (flags & 64) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
|
|
}
|
|
else if (node.kind !== 167 && node.kind !== 166 && node.kind !== 176 && node.kind !== 164) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
|
|
}
|
|
flags |= 64;
|
|
break;
|
|
case 93:
|
|
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 (ts.isClassLike(node.parent)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
|
|
}
|
|
else if (node.kind === 164) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
|
|
}
|
|
flags |= 1;
|
|
break;
|
|
case 88:
|
|
var container = node.parent.kind === 305 ? node.parent : node.parent.parent;
|
|
if (container.kind === 261 && !ts.isAmbientModule(container)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
|
|
}
|
|
else if (!(flags & 1)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
|
|
}
|
|
flags |= 512;
|
|
break;
|
|
case 135:
|
|
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 (flags & 16384) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "override");
|
|
}
|
|
else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
|
|
}
|
|
else if (node.kind === 164) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
|
|
}
|
|
else if ((node.parent.flags & 16777216) && node.parent.kind === 262) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
|
|
}
|
|
else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "declare");
|
|
}
|
|
flags |= 2;
|
|
lastDeclare = modifier;
|
|
break;
|
|
case 126:
|
|
if (flags & 128) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
|
|
}
|
|
if (node.kind !== 257 &&
|
|
node.kind !== 180) {
|
|
if (node.kind !== 169 &&
|
|
node.kind !== 167 &&
|
|
node.kind !== 172 &&
|
|
node.kind !== 173) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
|
|
}
|
|
if (!(node.parent.kind === 257 && ts.hasSyntacticModifier(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");
|
|
}
|
|
if (flags & 256 && lastAsync) {
|
|
return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "async", "abstract");
|
|
}
|
|
if (flags & 16384) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
|
|
}
|
|
}
|
|
if (ts.isNamedDeclaration(node) && node.name.kind === 80) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
|
|
}
|
|
flags |= 128;
|
|
break;
|
|
case 131:
|
|
if (flags & 256) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
|
|
}
|
|
else if (flags & 2 || node.parent.flags & 16777216) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
|
|
}
|
|
else if (node.kind === 164) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
|
|
}
|
|
if (flags & 128) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "async", "abstract");
|
|
}
|
|
flags |= 256;
|
|
lastAsync = modifier;
|
|
break;
|
|
case 101:
|
|
case 144:
|
|
var inOutFlag = modifier.kind === 101 ? 32768 : 65536;
|
|
var inOutText = modifier.kind === 101 ? "in" : "out";
|
|
if (node.kind !== 163 || !(ts.isInterfaceDeclaration(node.parent) || ts.isClassLike(node.parent) || ts.isTypeAliasDeclaration(node.parent))) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias, inOutText);
|
|
}
|
|
if (flags & inOutFlag) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, inOutText);
|
|
}
|
|
if (inOutFlag & 32768 && flags & 65536) {
|
|
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "in", "out");
|
|
}
|
|
flags |= inOutFlag;
|
|
break;
|
|
}
|
|
}
|
|
if (node.kind === 171) {
|
|
if (flags & 32) {
|
|
return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
|
|
}
|
|
if (flags & 16384) {
|
|
return grammarErrorOnNode(lastOverride, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "override");
|
|
}
|
|
if (flags & 256) {
|
|
return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async");
|
|
}
|
|
return false;
|
|
}
|
|
else if ((node.kind === 266 || node.kind === 265) && flags & 2) {
|
|
return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
|
|
}
|
|
else if (node.kind === 164 && (flags & 16476) && ts.isBindingPattern(node.name)) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
|
|
}
|
|
else if (node.kind === 164 && (flags & 16476) && 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 172:
|
|
case 173:
|
|
case 171:
|
|
case 167:
|
|
case 166:
|
|
case 169:
|
|
case 168:
|
|
case 176:
|
|
case 261:
|
|
case 266:
|
|
case 265:
|
|
case 272:
|
|
case 271:
|
|
case 213:
|
|
case 214:
|
|
case 164:
|
|
case 163:
|
|
return false;
|
|
case 170:
|
|
case 296:
|
|
case 297:
|
|
case 264:
|
|
case 179:
|
|
case 276:
|
|
return true;
|
|
default:
|
|
if (node.parent.kind === 262 || node.parent.kind === 305) {
|
|
return false;
|
|
}
|
|
switch (node.kind) {
|
|
case 256:
|
|
return nodeHasAnyModifiersExcept(node, 131);
|
|
case 257:
|
|
case 180:
|
|
return nodeHasAnyModifiersExcept(node, 126);
|
|
case 226:
|
|
case 258:
|
|
case 237:
|
|
case 259:
|
|
return true;
|
|
case 260:
|
|
return nodeHasAnyModifiersExcept(node, 85);
|
|
default:
|
|
ts.Debug.assertNever(node);
|
|
}
|
|
}
|
|
}
|
|
function nodeHasAnyModifiersExcept(node, allowedModifier) {
|
|
for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
|
|
var modifier = _a[_i];
|
|
if (ts.isDecorator(modifier))
|
|
continue;
|
|
return modifier.kind !== allowedModifier;
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarAsyncModifier(node, asyncModifier) {
|
|
switch (node.kind) {
|
|
case 169:
|
|
case 256:
|
|
case 213:
|
|
case 214:
|
|
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 & 16777216)) {
|
|
checkGrammarForDisallowedTrailingComma(parameters, ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma);
|
|
}
|
|
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 (isOptionalParameter(parameter)) {
|
|
seenOptionalParameter = true;
|
|
if (parameter.questionToken && 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 getNonSimpleParameters(parameters) {
|
|
return ts.filter(parameters, function (parameter) { return !!parameter.initializer || ts.isBindingPattern(parameter.name) || ts.isRestParameter(parameter); });
|
|
}
|
|
function checkGrammarForUseStrictSimpleParameterList(node) {
|
|
if (languageVersion >= 3) {
|
|
var useStrictDirective_1 = node.body && ts.isBlock(node.body) && ts.findUseStrictPrologue(node.body.statements);
|
|
if (useStrictDirective_1) {
|
|
var nonSimpleParameters = getNonSimpleParameters(node.parameters);
|
|
if (ts.length(nonSimpleParameters)) {
|
|
ts.forEach(nonSimpleParameters, function (parameter) {
|
|
ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
|
|
});
|
|
var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
|
|
ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarFunctionLikeDeclaration(node) {
|
|
var file = ts.getSourceFileOfNode(node);
|
|
return checkGrammarDecoratorsAndModifiers(node) ||
|
|
checkGrammarTypeParameterList(node.typeParameters, file) ||
|
|
checkGrammarParameterList(node.parameters) ||
|
|
checkGrammarArrowFunction(node, file) ||
|
|
(ts.isFunctionLikeDeclaration(node) && checkGrammarForUseStrictSimpleParameterList(node));
|
|
}
|
|
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;
|
|
}
|
|
if (node.typeParameters && !(ts.length(node.typeParameters) > 1 || node.typeParameters.hasTrailingComma || node.typeParameters[0].constraint)) {
|
|
if (file && ts.fileExtensionIsOneOf(file.fileName, [".mts", ".cts"])) {
|
|
grammarErrorOnNode(node.typeParameters[0], ts.Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint);
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
checkGrammarForDisallowedTrailingComma(node.parameters, ts.Diagnostics.An_index_signature_cannot_have_a_trailing_comma);
|
|
if (parameter.dotDotDotToken) {
|
|
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
|
|
}
|
|
if (ts.hasEffectiveModifiers(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);
|
|
}
|
|
var type = getTypeFromTypeNode(parameter.type);
|
|
if (someType(type, function (t) { return !!(t.flags & 8576); }) || isGenericType(type)) {
|
|
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
|
|
}
|
|
if (!everyType(type, isValidIndexKeyType)) {
|
|
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
|
|
}
|
|
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 checkGrammarTaggedTemplateChain(node) {
|
|
if (node.questionDotToken || node.flags & 32) {
|
|
return grammarErrorOnNode(node.template, ts.Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain);
|
|
}
|
|
return false;
|
|
}
|
|
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) {
|
|
if (ts.isExpressionWithTypeArguments(node) && ts.isImportKeyword(node.expression) && node.typeArguments) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments);
|
|
}
|
|
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 === 94) {
|
|
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 === 117);
|
|
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 === 94) {
|
|
if (seenExtendsClause) {
|
|
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
|
|
}
|
|
seenExtendsClause = true;
|
|
}
|
|
else {
|
|
ts.Debug.assert(heritageClause.token === 117);
|
|
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
|
|
}
|
|
checkGrammarHeritageClause(heritageClause);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarComputedPropertyName(node) {
|
|
if (node.kind !== 162) {
|
|
return false;
|
|
}
|
|
var computedPropertyName = node;
|
|
if (computedPropertyName.expression.kind === 221 && computedPropertyName.expression.operatorToken.kind === 27) {
|
|
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 === 256 ||
|
|
node.kind === 213 ||
|
|
node.kind === 169);
|
|
if (node.flags & 16777216) {
|
|
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 checkGrammarForInvalidExclamationToken(exclamationToken, message) {
|
|
return !!exclamationToken && grammarErrorOnNode(exclamationToken, message);
|
|
}
|
|
function checkGrammarObjectLiteralExpression(node, inDestructuring) {
|
|
var seen = new ts.Map();
|
|
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
|
|
var prop = _a[_i];
|
|
if (prop.kind === 298) {
|
|
if (inDestructuring) {
|
|
var expression = ts.skipParentheses(prop.expression);
|
|
if (ts.isArrayLiteralExpression(expression) || ts.isObjectLiteralExpression(expression)) {
|
|
return grammarErrorOnNode(prop.expression, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
var name = prop.name;
|
|
if (name.kind === 162) {
|
|
checkGrammarComputedPropertyName(name);
|
|
}
|
|
if (prop.kind === 297 && !inDestructuring && prop.objectAssignmentInitializer) {
|
|
grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
|
|
}
|
|
if (name.kind === 80) {
|
|
grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
|
|
}
|
|
if (ts.canHaveModifiers(prop) && prop.modifiers) {
|
|
for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
|
|
var mod = _c[_b];
|
|
if (ts.isModifier(mod) && (mod.kind !== 131 || prop.kind !== 169)) {
|
|
grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
|
|
}
|
|
}
|
|
}
|
|
else if (ts.canHaveIllegalModifiers(prop) && prop.modifiers) {
|
|
for (var _d = 0, _e = prop.modifiers; _d < _e.length; _d++) {
|
|
var mod = _e[_d];
|
|
grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
|
|
}
|
|
}
|
|
var currentKind = void 0;
|
|
switch (prop.kind) {
|
|
case 297:
|
|
case 296:
|
|
checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
|
|
checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
|
|
if (name.kind === 8) {
|
|
checkGrammarNumericLiteral(name);
|
|
}
|
|
currentKind = 4;
|
|
break;
|
|
case 169:
|
|
currentKind = 8;
|
|
break;
|
|
case 172:
|
|
currentKind = 1;
|
|
break;
|
|
case 173:
|
|
currentKind = 2;
|
|
break;
|
|
default:
|
|
throw ts.Debug.assertNever(prop, "Unexpected syntax kind:" + prop.kind);
|
|
}
|
|
if (!inDestructuring) {
|
|
var effectiveName = ts.getPropertyNameForPropertyNameNode(name);
|
|
if (effectiveName === undefined) {
|
|
continue;
|
|
}
|
|
var existingKind = seen.get(effectiveName);
|
|
if (!existingKind) {
|
|
seen.set(effectiveName, currentKind);
|
|
}
|
|
else {
|
|
if ((currentKind & 8) && (existingKind & 8)) {
|
|
grammarErrorOnNode(name, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name));
|
|
}
|
|
else if ((currentKind & 4) && (existingKind & 4)) {
|
|
grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name, ts.getTextOfNode(name));
|
|
}
|
|
else if ((currentKind & 3) && (existingKind & 3)) {
|
|
if (existingKind !== 3 && 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) {
|
|
checkGrammarJsxName(node.tagName);
|
|
checkGrammarTypeArguments(node, node.typeArguments);
|
|
var seen = new ts.Map();
|
|
for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
|
|
var attr = _a[_i];
|
|
if (attr.kind === 287) {
|
|
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 === 288 && !initializer.expression) {
|
|
return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
|
|
}
|
|
}
|
|
}
|
|
function checkGrammarJsxName(node) {
|
|
if (ts.isPropertyAccessExpression(node)) {
|
|
var propName = node;
|
|
do {
|
|
var check_1 = checkGrammarJsxNestedIdentifier(propName.name);
|
|
if (check_1) {
|
|
return check_1;
|
|
}
|
|
propName = propName.expression;
|
|
} while (ts.isPropertyAccessExpression(propName));
|
|
var check = checkGrammarJsxNestedIdentifier(propName);
|
|
if (check) {
|
|
return check;
|
|
}
|
|
}
|
|
function checkGrammarJsxNestedIdentifier(name) {
|
|
if (ts.isIdentifier(name) && ts.idText(name).indexOf(":") !== -1) {
|
|
return grammarErrorOnNode(name, ts.Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names);
|
|
}
|
|
}
|
|
}
|
|
function checkGrammarJsxExpression(node) {
|
|
if (node.expression && ts.isCommaSequence(node.expression)) {
|
|
return grammarErrorOnNode(node.expression, ts.Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array);
|
|
}
|
|
}
|
|
function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
|
|
if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
|
|
return true;
|
|
}
|
|
if (forInOrOfStatement.kind === 244 && forInOrOfStatement.awaitModifier) {
|
|
if (!(forInOrOfStatement.flags & 32768)) {
|
|
var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
|
|
if (ts.isInTopLevelContext(forInOrOfStatement)) {
|
|
if (!hasParseDiagnostics(sourceFile)) {
|
|
if (!ts.isEffectiveExternalModule(sourceFile, compilerOptions)) {
|
|
diagnostics.add(ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module));
|
|
}
|
|
switch (moduleKind) {
|
|
case ts.ModuleKind.Node16:
|
|
case ts.ModuleKind.NodeNext:
|
|
if (sourceFile.impliedNodeFormat === ts.ModuleKind.CommonJS) {
|
|
diagnostics.add(ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));
|
|
break;
|
|
}
|
|
case ts.ModuleKind.ES2022:
|
|
case ts.ModuleKind.ESNext:
|
|
case ts.ModuleKind.System:
|
|
if (languageVersion >= 4) {
|
|
break;
|
|
}
|
|
default:
|
|
diagnostics.add(ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (!hasParseDiagnostics(sourceFile)) {
|
|
var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
|
|
var func = ts.getContainingFunction(forInOrOfStatement);
|
|
if (func && func.kind !== 171) {
|
|
ts.Debug.assert((ts.getFunctionFlags(func) & 2) === 0, "Enclosing function should never be an async function.");
|
|
var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
|
|
ts.addRelatedInfo(diagnostic, relatedInfo);
|
|
}
|
|
diagnostics.add(diagnostic);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768) &&
|
|
ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
|
|
grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
|
|
return false;
|
|
}
|
|
if (forInOrOfStatement.initializer.kind === 255) {
|
|
var variableList = forInOrOfStatement.initializer;
|
|
if (!checkGrammarVariableDeclarationList(variableList)) {
|
|
var declarations = variableList.declarations;
|
|
if (!declarations.length) {
|
|
return false;
|
|
}
|
|
if (declarations.length > 1) {
|
|
var diagnostic = forInOrOfStatement.kind === 243
|
|
? 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 === 243
|
|
? 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 === 243
|
|
? 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) {
|
|
if (!(accessor.flags & 16777216) && (accessor.parent.kind !== 182) && (accessor.parent.kind !== 258)) {
|
|
if (languageVersion < 1) {
|
|
return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
|
|
}
|
|
if (languageVersion < 2 && ts.isPrivateIdentifier(accessor.name)) {
|
|
return grammarErrorOnNode(accessor.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
|
|
}
|
|
if (accessor.body === undefined && !ts.hasSyntacticModifier(accessor, 128)) {
|
|
return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
|
|
}
|
|
}
|
|
if (accessor.body) {
|
|
if (ts.hasSyntacticModifier(accessor, 128)) {
|
|
return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
|
|
}
|
|
if (accessor.parent.kind === 182 || accessor.parent.kind === 258) {
|
|
return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
|
|
}
|
|
}
|
|
if (accessor.typeParameters) {
|
|
return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
|
|
}
|
|
if (!doesAccessorHaveCorrectParameterCount(accessor)) {
|
|
return grammarErrorOnNode(accessor.name, accessor.kind === 172 ?
|
|
ts.Diagnostics.A_get_accessor_cannot_have_parameters :
|
|
ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
|
|
}
|
|
if (accessor.kind === 173) {
|
|
if (accessor.type) {
|
|
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
|
|
}
|
|
var parameter = ts.Debug.checkDefined(ts.getSetAccessorValueParameter(accessor), "Return value does not match parameter count assertion.");
|
|
if (parameter.dotDotDotToken) {
|
|
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
|
|
}
|
|
if (parameter.questionToken) {
|
|
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
|
|
}
|
|
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 === 172 ? 0 : 1);
|
|
}
|
|
function getAccessorThisParameter(accessor) {
|
|
if (accessor.parameters.length === (accessor.kind === 172 ? 1 : 2)) {
|
|
return ts.getThisParameter(accessor);
|
|
}
|
|
}
|
|
function checkGrammarTypeOperatorNode(node) {
|
|
if (node.operator === 154) {
|
|
if (node.type.kind !== 151) {
|
|
return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(151));
|
|
}
|
|
var parent = ts.walkUpParenthesizedTypes(node.parent);
|
|
if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
|
|
var host_2 = ts.getJSDocHost(parent);
|
|
if (host_2) {
|
|
parent = ts.getSingleVariableOfVariableStatement(host_2) || host_2;
|
|
}
|
|
}
|
|
switch (parent.kind) {
|
|
case 254:
|
|
var decl = parent;
|
|
if (decl.name.kind !== 79) {
|
|
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 167:
|
|
if (!ts.isStatic(parent) ||
|
|
!ts.hasEffectiveReadonlyModifier(parent)) {
|
|
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 166:
|
|
if (!ts.hasSyntacticModifier(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);
|
|
}
|
|
}
|
|
else if (node.operator === 145) {
|
|
if (node.type.kind !== 183 && node.type.kind !== 184) {
|
|
return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(151));
|
|
}
|
|
}
|
|
}
|
|
function checkGrammarForInvalidDynamicName(node, message) {
|
|
if (isNonBindableDynamicName(node)) {
|
|
return grammarErrorOnNode(node, message);
|
|
}
|
|
}
|
|
function checkGrammarMethod(node) {
|
|
if (checkGrammarFunctionLikeDeclaration(node)) {
|
|
return true;
|
|
}
|
|
if (node.kind === 169) {
|
|
if (node.parent.kind === 205) {
|
|
if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 131)) {
|
|
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 (checkGrammarForInvalidExclamationToken(node.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context)) {
|
|
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 (languageVersion < 2 && ts.isPrivateIdentifier(node.name)) {
|
|
return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
|
|
}
|
|
if (node.flags & 16777216) {
|
|
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 === 169 && !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 === 258) {
|
|
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 === 182) {
|
|
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.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
|
|
}
|
|
switch (current.kind) {
|
|
case 250:
|
|
if (node.label && current.label.escapedText === node.label.escapedText) {
|
|
var isMisplacedContinueLabel = node.kind === 245
|
|
&& !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 249:
|
|
if (node.kind === 246 && !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 === 246
|
|
? 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 === 246
|
|
? 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.propertyName) {
|
|
return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_have_a_property_name);
|
|
}
|
|
}
|
|
if (node.dotDotDotToken && node.initializer) {
|
|
return grammarErrorAtPos(node, node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
|
|
}
|
|
}
|
|
function isStringOrNumberLiteralExpression(expr) {
|
|
return ts.isStringOrNumericLiteralLike(expr) ||
|
|
expr.kind === 219 && expr.operator === 40 &&
|
|
expr.operand.kind === 8;
|
|
}
|
|
function isBigIntLiteralExpression(expr) {
|
|
return expr.kind === 9 ||
|
|
expr.kind === 219 && expr.operator === 40 &&
|
|
expr.operand.kind === 9;
|
|
}
|
|
function isSimpleLiteralEnumReference(expr) {
|
|
if ((ts.isPropertyAccessExpression(expr) || (ts.isElementAccessExpression(expr) && isStringOrNumberLiteralExpression(expr.argumentExpression))) &&
|
|
ts.isEntityNameExpression(expr.expression)) {
|
|
return !!(checkExpressionCached(expr).flags & 1024);
|
|
}
|
|
}
|
|
function checkAmbientInitializer(node) {
|
|
var initializer = node.initializer;
|
|
if (initializer) {
|
|
var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
|
|
isSimpleLiteralEnumReference(initializer) ||
|
|
initializer.kind === 110 || initializer.kind === 95 ||
|
|
isBigIntLiteralExpression(initializer));
|
|
var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
|
|
if (isConstOrReadonly && !node.type) {
|
|
if (isInvalidInitializer) {
|
|
return grammarErrorOnNode(initializer, ts.Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference);
|
|
}
|
|
}
|
|
else {
|
|
return grammarErrorOnNode(initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
|
|
}
|
|
}
|
|
}
|
|
function checkGrammarVariableDeclaration(node) {
|
|
if (node.parent.parent.kind !== 243 && node.parent.parent.kind !== 244) {
|
|
if (node.flags & 16777216) {
|
|
checkAmbientInitializer(node);
|
|
}
|
|
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.isVarConst(node)) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
|
|
}
|
|
}
|
|
}
|
|
if (node.exclamationToken && (node.parent.parent.kind !== 237 || !node.type || node.initializer || node.flags & 16777216)) {
|
|
var message = node.initializer
|
|
? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
|
|
: !node.type
|
|
? ts.Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations
|
|
: ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context;
|
|
return grammarErrorOnNode(node.exclamationToken, message);
|
|
}
|
|
if ((moduleKind < ts.ModuleKind.ES2015 || ts.getSourceFileOfNode(node).impliedNodeFormat === ts.ModuleKind.CommonJS) && moduleKind !== ts.ModuleKind.System &&
|
|
!(node.parent.parent.flags & 16777216) && ts.hasSyntacticModifier(node.parent.parent, 1)) {
|
|
checkESModuleMarker(node.name);
|
|
}
|
|
var checkLetConstNames = (ts.isLet(node) || ts.isVarConst(node));
|
|
return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
|
|
}
|
|
function checkESModuleMarker(name) {
|
|
if (name.kind === 79) {
|
|
if (ts.idText(name) === "__esModule") {
|
|
return grammarErrorOnNodeSkippedOn("noEmit", 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_2 = elements; _i < elements_2.length; _i++) {
|
|
var element = elements_2[_i];
|
|
if (!ts.isOmittedExpression(element)) {
|
|
return checkESModuleMarker(element.name);
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarNameInLetOrConstDeclarations(name) {
|
|
if (name.kind === 79) {
|
|
if (name.originalKeywordKind === 119) {
|
|
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_3 = elements; _i < elements_3.length; _i++) {
|
|
var element = elements_3[_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 239:
|
|
case 240:
|
|
case 241:
|
|
case 248:
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
return false;
|
|
case 250:
|
|
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.isVarConst(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 103:
|
|
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 100:
|
|
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 grammarErrorOnNodeSkippedOn(key, node, message, arg0, arg1, arg2) {
|
|
var sourceFile = ts.getSourceFileOfNode(node);
|
|
if (!hasParseDiagnostics(sourceFile)) {
|
|
errorSkippedOn(key, node, 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.isInJSFile(node) ? ts.getJSDocTypeParameterDeclarations(node) : undefined;
|
|
var range = node.typeParameters || jsdocTypeParameters && ts.firstOrUndefined(jsdocTypeParameters);
|
|
if (range) {
|
|
var pos = range.pos === range.end ? range.pos : ts.skipTrivia(ts.getSourceFileOfNode(node).text, range.pos);
|
|
return grammarErrorAtPos(node, pos, range.end - pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
|
|
}
|
|
}
|
|
function checkGrammarConstructorTypeAnnotation(node) {
|
|
var type = node.type || ts.getEffectiveReturnTypeNode(node);
|
|
if (type) {
|
|
return grammarErrorOnNode(type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
|
|
}
|
|
}
|
|
function checkGrammarProperty(node) {
|
|
if (ts.isComputedPropertyName(node.name) && ts.isBinaryExpression(node.name.expression) && node.name.expression.operatorToken.kind === 101) {
|
|
return grammarErrorOnNode(node.parent.members[0], ts.Diagnostics.A_mapped_type_may_not_declare_properties_or_methods);
|
|
}
|
|
if (ts.isClassLike(node.parent)) {
|
|
if (ts.isStringLiteral(node.name) && node.name.text === "constructor") {
|
|
return grammarErrorOnNode(node.name, ts.Diagnostics.Classes_may_not_have_a_field_named_constructor);
|
|
}
|
|
if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type)) {
|
|
return true;
|
|
}
|
|
if (languageVersion < 2 && ts.isPrivateIdentifier(node.name)) {
|
|
return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
|
|
}
|
|
}
|
|
else if (node.parent.kind === 258) {
|
|
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;
|
|
}
|
|
ts.Debug.assertNode(node, ts.isPropertySignature);
|
|
if (node.initializer) {
|
|
return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
|
|
}
|
|
}
|
|
else if (ts.isTypeLiteralNode(node.parent)) {
|
|
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;
|
|
}
|
|
ts.Debug.assertNode(node, ts.isPropertySignature);
|
|
if (node.initializer) {
|
|
return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_type_literal_property_cannot_have_an_initializer);
|
|
}
|
|
}
|
|
if (node.flags & 16777216) {
|
|
checkAmbientInitializer(node);
|
|
}
|
|
if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
|
|
node.flags & 16777216 || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
|
|
var message = node.initializer
|
|
? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
|
|
: !node.type
|
|
? ts.Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations
|
|
: ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context;
|
|
return grammarErrorOnNode(node.exclamationToken, message);
|
|
}
|
|
}
|
|
function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
|
|
if (node.kind === 258 ||
|
|
node.kind === 259 ||
|
|
node.kind === 266 ||
|
|
node.kind === 265 ||
|
|
node.kind === 272 ||
|
|
node.kind === 271 ||
|
|
node.kind === 264 ||
|
|
ts.hasSyntacticModifier(node, 2 | 1 | 512)) {
|
|
return false;
|
|
}
|
|
return grammarErrorOnFirstToken(node, ts.Diagnostics.Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier);
|
|
}
|
|
function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
|
|
for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
if (ts.isDeclaration(decl) || decl.kind === 237) {
|
|
if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarSourceFile(node) {
|
|
return !!(node.flags & 16777216) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
|
|
}
|
|
function checkGrammarStatementInAmbientContext(node) {
|
|
if (node.flags & 16777216) {
|
|
var links = getNodeLinks(node);
|
|
if (!links.hasReportedStatementInAmbientContext && (ts.isFunctionLike(node.parent) || ts.isAccessor(node.parent))) {
|
|
return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
|
|
}
|
|
if (node.parent.kind === 235 || node.parent.kind === 262 || node.parent.kind === 305) {
|
|
var links_2 = getNodeLinks(node.parent);
|
|
if (!links_2.hasReportedStatementInAmbientContext) {
|
|
return links_2.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, 196)) {
|
|
diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
|
|
}
|
|
else if (ts.isChildOfNodeWithKind(node, 299)) {
|
|
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 === 40;
|
|
var literal = (withMinus ? "-" : "") + "0o" + node.text;
|
|
return grammarErrorOnNode(withMinus ? node.parent : node, diagnosticMessage, literal);
|
|
}
|
|
}
|
|
checkNumericLiteralValueSize(node);
|
|
return false;
|
|
}
|
|
function checkNumericLiteralValueSize(node) {
|
|
var isFractional = ts.getTextOfNode(node).indexOf(".") !== -1;
|
|
var isScientific = node.numericLiteralFlags & 16;
|
|
if (isFractional || isScientific) {
|
|
return;
|
|
}
|
|
var value = +node.text;
|
|
if (value <= Math.pow(2, 53) - 1) {
|
|
return;
|
|
}
|
|
addErrorOrSuggestion(false, ts.createDiagnosticForNode(node, ts.Diagnostics.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers));
|
|
}
|
|
function checkGrammarBigIntLiteral(node) {
|
|
var literalType = ts.isLiteralTypeNode(node.parent) ||
|
|
ts.isPrefixUnaryExpression(node.parent) && ts.isLiteralTypeNode(node.parent.parent);
|
|
if (!literalType) {
|
|
if (languageVersion < 7) {
|
|
if (grammarErrorOnNode(node, ts.Diagnostics.BigInt_literals_are_not_available_when_targeting_lower_than_ES2020)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
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 checkGrammarImportClause(node) {
|
|
var _a;
|
|
if (node.isTypeOnly && node.name && node.namedBindings) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both);
|
|
}
|
|
if (node.isTypeOnly && ((_a = node.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 269) {
|
|
return checkGrammarNamedImportsOrExports(node.namedBindings);
|
|
}
|
|
return false;
|
|
}
|
|
function checkGrammarNamedImportsOrExports(namedBindings) {
|
|
return !!ts.forEach(namedBindings.elements, function (specifier) {
|
|
if (specifier.isTypeOnly) {
|
|
return grammarErrorOnFirstToken(specifier, specifier.kind === 270
|
|
? ts.Diagnostics.The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement
|
|
: ts.Diagnostics.The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement);
|
|
}
|
|
});
|
|
}
|
|
function checkGrammarImportCallExpression(node) {
|
|
if (moduleKind === ts.ModuleKind.ES2015) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext);
|
|
}
|
|
if (node.typeArguments) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments);
|
|
}
|
|
var nodeArguments = node.arguments;
|
|
if (moduleKind !== ts.ModuleKind.ESNext && moduleKind !== ts.ModuleKind.NodeNext) {
|
|
checkGrammarForDisallowedTrailingComma(nodeArguments);
|
|
if (nodeArguments.length > 1) {
|
|
var assertionArgument = nodeArguments[1];
|
|
return grammarErrorOnNode(assertionArgument, ts.Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext);
|
|
}
|
|
}
|
|
if (nodeArguments.length === 0 || nodeArguments.length > 2) {
|
|
return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments);
|
|
}
|
|
var spreadElement = ts.find(nodeArguments, ts.isSpreadElement);
|
|
if (spreadElement) {
|
|
return grammarErrorOnNode(spreadElement, ts.Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element);
|
|
}
|
|
return false;
|
|
}
|
|
function findMatchingTypeReferenceOrTypeAliasReference(source, unionTarget) {
|
|
var sourceObjectFlags = ts.getObjectFlags(source);
|
|
if (sourceObjectFlags & (4 | 16) && unionTarget.flags & 1048576) {
|
|
return ts.find(unionTarget.types, function (target) {
|
|
if (target.flags & 524288) {
|
|
var overlapObjFlags = sourceObjectFlags & ts.getObjectFlags(target);
|
|
if (overlapObjFlags & 4) {
|
|
return source.target === target.target;
|
|
}
|
|
if (overlapObjFlags & 16) {
|
|
return !!source.aliasSymbol && source.aliasSymbol === target.aliasSymbol;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
}
|
|
function findBestTypeForObjectLiteral(source, unionTarget) {
|
|
if (ts.getObjectFlags(source) & 128 && someType(unionTarget, isArrayLikeType)) {
|
|
return ts.find(unionTarget.types, function (t) { return !isArrayLikeType(t); });
|
|
}
|
|
}
|
|
function findBestTypeForInvokable(source, unionTarget) {
|
|
var signatureKind = 0;
|
|
var hasSignatures = getSignaturesOfType(source, signatureKind).length > 0 ||
|
|
(signatureKind = 1, getSignaturesOfType(source, signatureKind).length > 0);
|
|
if (hasSignatures) {
|
|
return ts.find(unionTarget.types, function (t) { return getSignaturesOfType(t, signatureKind).length > 0; });
|
|
}
|
|
}
|
|
function findMostOverlappyType(source, unionTarget) {
|
|
var bestMatch;
|
|
if (!(source.flags & (131068 | 406847488))) {
|
|
var matchingCount = 0;
|
|
for (var _i = 0, _a = unionTarget.types; _i < _a.length; _i++) {
|
|
var target = _a[_i];
|
|
if (!(target.flags & (131068 | 406847488))) {
|
|
var overlap = getIntersectionType([getIndexType(source), getIndexType(target)]);
|
|
if (overlap.flags & 4194304) {
|
|
return target;
|
|
}
|
|
else if (isUnitType(overlap) || overlap.flags & 1048576) {
|
|
var len = overlap.flags & 1048576 ? ts.countWhere(overlap.types, isUnitType) : 1;
|
|
if (len >= matchingCount) {
|
|
bestMatch = target;
|
|
matchingCount = len;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return bestMatch;
|
|
}
|
|
function filterPrimitivesIfContainsNonPrimitive(type) {
|
|
if (maybeTypeOfKind(type, 67108864)) {
|
|
var result = filterType(type, function (t) { return !(t.flags & 131068); });
|
|
if (!(result.flags & 131072)) {
|
|
return result;
|
|
}
|
|
}
|
|
return type;
|
|
}
|
|
function findMatchingDiscriminantType(source, target, isRelatedTo, skipPartial) {
|
|
if (target.flags & 1048576 && source.flags & (2097152 | 524288)) {
|
|
var match = getMatchingUnionConstituentForType(target, source);
|
|
if (match) {
|
|
return match;
|
|
}
|
|
var sourceProperties = getPropertiesOfType(source);
|
|
if (sourceProperties) {
|
|
var sourcePropertiesFiltered = findDiscriminantProperties(sourceProperties, target);
|
|
if (sourcePropertiesFiltered) {
|
|
return discriminateTypeByDiscriminableItems(target, ts.map(sourcePropertiesFiltered, function (p) { return [function () { return getTypeOfSymbol(p); }, p.escapedName]; }), isRelatedTo, undefined, skipPartial);
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.createTypeChecker = createTypeChecker;
|
|
function isNotAccessor(declaration) {
|
|
return !ts.isAccessor(declaration);
|
|
}
|
|
function isNotOverload(declaration) {
|
|
return (declaration.kind !== 256 && declaration.kind !== 169) ||
|
|
!!declaration.body;
|
|
}
|
|
function isDeclarationNameOrImportPropertyName(name) {
|
|
switch (name.parent.kind) {
|
|
case 270:
|
|
case 275:
|
|
return ts.isIdentifier(name);
|
|
default:
|
|
return ts.isDeclarationName(name);
|
|
}
|
|
}
|
|
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.LibraryManagedAttributes = "LibraryManagedAttributes";
|
|
})(JsxNames || (JsxNames = {}));
|
|
function getIterationTypesKeyFromIterationTypeKind(typeKind) {
|
|
switch (typeKind) {
|
|
case 0: return "yieldType";
|
|
case 1: return "returnType";
|
|
case 2: return "nextType";
|
|
}
|
|
}
|
|
function signatureHasRestParameter(s) {
|
|
return !!(s.flags & 1);
|
|
}
|
|
ts.signatureHasRestParameter = signatureHasRestParameter;
|
|
function signatureHasLiteralTypes(s) {
|
|
return !!(s.flags & 2);
|
|
}
|
|
ts.signatureHasLiteralTypes = signatureHasLiteralTypes;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function visitNode(node, visitor, test, lift) {
|
|
if (node === undefined || visitor === undefined) {
|
|
return 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);
|
|
return visitedNode;
|
|
}
|
|
ts.visitNode = visitNode;
|
|
function visitNodes(nodes, visitor, test, start, count) {
|
|
if (nodes === undefined || visitor === undefined) {
|
|
return nodes;
|
|
}
|
|
var length = nodes.length;
|
|
if (start === undefined || start < 0) {
|
|
start = 0;
|
|
}
|
|
if (count === undefined || count > length - start) {
|
|
count = length - start;
|
|
}
|
|
var hasTrailingComma;
|
|
var pos = -1;
|
|
var end = -1;
|
|
if (start > 0 || count < length) {
|
|
hasTrailingComma = nodes.hasTrailingComma && start + count === length;
|
|
}
|
|
else {
|
|
pos = nodes.pos;
|
|
end = nodes.end;
|
|
hasTrailingComma = nodes.hasTrailingComma;
|
|
}
|
|
var updated = visitArrayWorker(nodes, visitor, test, start, count);
|
|
if (updated !== nodes) {
|
|
var updatedArray = ts.factory.createNodeArray(updated, hasTrailingComma);
|
|
ts.setTextRangePosEnd(updatedArray, pos, end);
|
|
return updatedArray;
|
|
}
|
|
return nodes;
|
|
}
|
|
ts.visitNodes = visitNodes;
|
|
function visitArray(nodes, visitor, test, start, count) {
|
|
if (nodes === undefined) {
|
|
return nodes;
|
|
}
|
|
var length = nodes.length;
|
|
if (start === undefined || start < 0) {
|
|
start = 0;
|
|
}
|
|
if (count === undefined || count > length - start) {
|
|
count = length - start;
|
|
}
|
|
return visitArrayWorker(nodes, visitor, test, start, count);
|
|
}
|
|
ts.visitArray = visitArray;
|
|
function visitArrayWorker(nodes, visitor, test, start, count) {
|
|
var updated;
|
|
var length = nodes.length;
|
|
if (start > 0 || count < length) {
|
|
updated = [];
|
|
}
|
|
for (var i = 0; i < count; i++) {
|
|
var node = nodes[i + start];
|
|
var visited = node !== undefined ? visitor(node) : undefined;
|
|
if (updated !== undefined || visited === undefined || visited !== node) {
|
|
if (updated === undefined) {
|
|
updated = nodes.slice(0, i);
|
|
}
|
|
if (visited) {
|
|
if (ts.isArray(visited)) {
|
|
for (var _i = 0, visited_1 = visited; _i < visited_1.length; _i++) {
|
|
var visitedNode = visited_1[_i];
|
|
void ts.Debug.assertNode(visitedNode, test);
|
|
updated.push(visitedNode);
|
|
}
|
|
}
|
|
else {
|
|
void ts.Debug.assertNode(visited, test);
|
|
updated.push(visited);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return updated !== null && updated !== void 0 ? updated : nodes;
|
|
}
|
|
function visitLexicalEnvironment(statements, visitor, context, start, ensureUseStrict, nodesVisitor) {
|
|
if (nodesVisitor === void 0) { nodesVisitor = visitNodes; }
|
|
context.startLexicalEnvironment();
|
|
statements = nodesVisitor(statements, visitor, ts.isStatement, start);
|
|
if (ensureUseStrict)
|
|
statements = context.factory.ensureUseStrict(statements);
|
|
return ts.factory.mergeLexicalEnvironment(statements, context.endLexicalEnvironment());
|
|
}
|
|
ts.visitLexicalEnvironment = visitLexicalEnvironment;
|
|
function visitParameterList(nodes, visitor, context, nodesVisitor) {
|
|
if (nodesVisitor === void 0) { nodesVisitor = visitNodes; }
|
|
var updated;
|
|
context.startLexicalEnvironment();
|
|
if (nodes) {
|
|
context.setLexicalEnvironmentFlags(1, true);
|
|
updated = nodesVisitor(nodes, visitor, ts.isParameterDeclaration);
|
|
if (context.getLexicalEnvironmentFlags() & 2 &&
|
|
ts.getEmitScriptTarget(context.getCompilerOptions()) >= 2) {
|
|
updated = addDefaultValueAssignmentsIfNeeded(updated, context);
|
|
}
|
|
context.setLexicalEnvironmentFlags(1, false);
|
|
}
|
|
context.suspendLexicalEnvironment();
|
|
return updated;
|
|
}
|
|
ts.visitParameterList = visitParameterList;
|
|
function addDefaultValueAssignmentsIfNeeded(parameters, context) {
|
|
var result;
|
|
for (var i = 0; i < parameters.length; i++) {
|
|
var parameter = parameters[i];
|
|
var updated = addDefaultValueAssignmentIfNeeded(parameter, context);
|
|
if (result || updated !== parameter) {
|
|
if (!result)
|
|
result = parameters.slice(0, i);
|
|
result[i] = updated;
|
|
}
|
|
}
|
|
if (result) {
|
|
return ts.setTextRange(context.factory.createNodeArray(result, parameters.hasTrailingComma), parameters);
|
|
}
|
|
return parameters;
|
|
}
|
|
function addDefaultValueAssignmentIfNeeded(parameter, context) {
|
|
return parameter.dotDotDotToken ? parameter :
|
|
ts.isBindingPattern(parameter.name) ? addDefaultValueAssignmentForBindingPattern(parameter, context) :
|
|
parameter.initializer ? addDefaultValueAssignmentForInitializer(parameter, parameter.name, parameter.initializer, context) :
|
|
parameter;
|
|
}
|
|
function addDefaultValueAssignmentForBindingPattern(parameter, context) {
|
|
var factory = context.factory;
|
|
context.addInitializationStatement(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(parameter.name, undefined, parameter.type, parameter.initializer ?
|
|
factory.createConditionalExpression(factory.createStrictEquality(factory.getGeneratedNameForNode(parameter), factory.createVoidZero()), undefined, parameter.initializer, undefined, factory.getGeneratedNameForNode(parameter)) :
|
|
factory.getGeneratedNameForNode(parameter)),
|
|
])));
|
|
return factory.updateParameterDeclaration(parameter, parameter.modifiers, parameter.dotDotDotToken, factory.getGeneratedNameForNode(parameter), parameter.questionToken, parameter.type, undefined);
|
|
}
|
|
function addDefaultValueAssignmentForInitializer(parameter, name, initializer, context) {
|
|
var factory = context.factory;
|
|
context.addInitializationStatement(factory.createIfStatement(factory.createTypeCheck(factory.cloneNode(name), "undefined"), ts.setEmitFlags(ts.setTextRange(factory.createBlock([
|
|
factory.createExpressionStatement(ts.setEmitFlags(ts.setTextRange(factory.createAssignment(ts.setEmitFlags(factory.cloneNode(name), 48), ts.setEmitFlags(initializer, 48 | ts.getEmitFlags(initializer) | 1536)), parameter), 1536))
|
|
]), parameter), 1 | 32 | 384 | 1536)));
|
|
return factory.updateParameterDeclaration(parameter, parameter.modifiers, parameter.dotDotDotToken, parameter.name, parameter.questionToken, parameter.type, undefined);
|
|
}
|
|
function visitFunctionBody(node, visitor, context, nodeVisitor) {
|
|
if (nodeVisitor === void 0) { nodeVisitor = visitNode; }
|
|
context.resumeLexicalEnvironment();
|
|
var updated = nodeVisitor(node, visitor, ts.isConciseBody);
|
|
var declarations = context.endLexicalEnvironment();
|
|
if (ts.some(declarations)) {
|
|
if (!updated) {
|
|
return context.factory.createBlock(declarations);
|
|
}
|
|
var block = context.factory.converters.convertToFunctionBlock(updated);
|
|
var statements = ts.factory.mergeLexicalEnvironment(block.statements, declarations);
|
|
return context.factory.updateBlock(block, statements);
|
|
}
|
|
return updated;
|
|
}
|
|
ts.visitFunctionBody = visitFunctionBody;
|
|
function visitIterationBody(body, visitor, context) {
|
|
context.startBlockScope();
|
|
var updated = visitNode(body, visitor, ts.isStatement, context.factory.liftToBlock);
|
|
var declarations = context.endBlockScope();
|
|
if (ts.some(declarations)) {
|
|
if (ts.isBlock(updated)) {
|
|
declarations.push.apply(declarations, updated.statements);
|
|
return context.factory.updateBlock(updated, declarations);
|
|
}
|
|
declarations.push(updated);
|
|
return context.factory.createBlock(declarations);
|
|
}
|
|
return updated;
|
|
}
|
|
ts.visitIterationBody = visitIterationBody;
|
|
function visitEachChild(node, visitor, context, nodesVisitor, tokenVisitor, nodeVisitor) {
|
|
if (nodesVisitor === void 0) { nodesVisitor = visitNodes; }
|
|
if (nodeVisitor === void 0) { nodeVisitor = visitNode; }
|
|
if (node === undefined) {
|
|
return undefined;
|
|
}
|
|
var kind = node.kind;
|
|
if ((kind > 0 && kind <= 160) || kind === 192) {
|
|
return node;
|
|
}
|
|
var factory = context.factory;
|
|
switch (kind) {
|
|
case 79:
|
|
ts.Debug.type(node);
|
|
return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
|
|
case 161:
|
|
ts.Debug.type(node);
|
|
return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
|
|
case 162:
|
|
ts.Debug.type(node);
|
|
return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 163:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeParameterDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
|
|
case 164:
|
|
ts.Debug.type(node);
|
|
return factory.updateParameterDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 165:
|
|
ts.Debug.type(node);
|
|
return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 166:
|
|
ts.Debug.type(node);
|
|
return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 167:
|
|
ts.Debug.type(node);
|
|
return factory.updatePropertyDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 168:
|
|
ts.Debug.type(node);
|
|
return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 169:
|
|
ts.Debug.type(node);
|
|
return factory.updateMethodDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 171:
|
|
ts.Debug.type(node);
|
|
return factory.updateConstructorDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 172:
|
|
ts.Debug.type(node);
|
|
return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 173:
|
|
ts.Debug.type(node);
|
|
return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 170:
|
|
ts.Debug.type(node);
|
|
context.startLexicalEnvironment();
|
|
context.suspendLexicalEnvironment();
|
|
return factory.updateClassStaticBlockDeclaration(node, visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 174:
|
|
ts.Debug.type(node);
|
|
return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 175:
|
|
ts.Debug.type(node);
|
|
return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 176:
|
|
ts.Debug.type(node);
|
|
return factory.updateIndexSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 177:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 178:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
|
|
case 179:
|
|
ts.Debug.type(node);
|
|
return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 180:
|
|
ts.Debug.type(node);
|
|
return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 181:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
|
|
case 182:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
|
|
case 183:
|
|
ts.Debug.type(node);
|
|
return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
|
|
case 184:
|
|
ts.Debug.type(node);
|
|
return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
|
|
case 185:
|
|
ts.Debug.type(node);
|
|
return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 186:
|
|
ts.Debug.type(node);
|
|
return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 187:
|
|
ts.Debug.type(node);
|
|
return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
|
|
case 188:
|
|
ts.Debug.type(node);
|
|
return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
|
|
case 189:
|
|
ts.Debug.type(node);
|
|
return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
|
|
case 190:
|
|
ts.Debug.type(node);
|
|
return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
|
|
case 200:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.assertions, visitor, ts.isNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
|
|
case 295:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportTypeAssertionContainer(node, nodeVisitor(node.assertClause, visitor, ts.isNode), node.multiLine);
|
|
case 197:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamedTupleMember(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 191:
|
|
ts.Debug.type(node);
|
|
return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 193:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 194:
|
|
ts.Debug.type(node);
|
|
return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
|
|
case 195:
|
|
ts.Debug.type(node);
|
|
return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodesVisitor(node.members, visitor, ts.isTypeElement));
|
|
case 196:
|
|
ts.Debug.type(node);
|
|
return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
|
|
case 198:
|
|
ts.Debug.type(node);
|
|
return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
|
|
case 199:
|
|
ts.Debug.type(node);
|
|
return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
|
|
case 201:
|
|
ts.Debug.type(node);
|
|
return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
|
|
case 202:
|
|
ts.Debug.type(node);
|
|
return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
|
|
case 203:
|
|
ts.Debug.type(node);
|
|
return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 204:
|
|
ts.Debug.type(node);
|
|
return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
|
|
case 205:
|
|
ts.Debug.type(node);
|
|
return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
|
|
case 206:
|
|
if (node.flags & 32) {
|
|
ts.Debug.type(node);
|
|
return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
|
|
}
|
|
ts.Debug.type(node);
|
|
return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
|
|
case 207:
|
|
if (node.flags & 32) {
|
|
ts.Debug.type(node);
|
|
return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
|
|
}
|
|
ts.Debug.type(node);
|
|
return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
|
|
case 208:
|
|
if (node.flags & 32) {
|
|
ts.Debug.type(node);
|
|
return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
|
|
}
|
|
ts.Debug.type(node);
|
|
return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
|
|
case 209:
|
|
ts.Debug.type(node);
|
|
return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
|
|
case 210:
|
|
ts.Debug.type(node);
|
|
return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
|
|
case 211:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 212:
|
|
ts.Debug.type(node);
|
|
return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 213:
|
|
ts.Debug.type(node);
|
|
return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 214:
|
|
ts.Debug.type(node);
|
|
return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 215:
|
|
ts.Debug.type(node);
|
|
return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 216:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 217:
|
|
ts.Debug.type(node);
|
|
return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 218:
|
|
ts.Debug.type(node);
|
|
return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 219:
|
|
ts.Debug.type(node);
|
|
return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
|
|
case 220:
|
|
ts.Debug.type(node);
|
|
return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
|
|
case 221:
|
|
ts.Debug.type(node);
|
|
return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
|
|
case 222:
|
|
ts.Debug.type(node);
|
|
return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
|
|
case 223:
|
|
ts.Debug.type(node);
|
|
return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
|
|
case 224:
|
|
ts.Debug.type(node);
|
|
return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 225:
|
|
ts.Debug.type(node);
|
|
return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 226:
|
|
ts.Debug.type(node);
|
|
return factory.updateClassExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
|
|
case 228:
|
|
ts.Debug.type(node);
|
|
return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
|
|
case 229:
|
|
ts.Debug.type(node);
|
|
return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 230:
|
|
if (node.flags & 32) {
|
|
ts.Debug.type(node);
|
|
return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
}
|
|
ts.Debug.type(node);
|
|
return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 231:
|
|
ts.Debug.type(node);
|
|
return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 233:
|
|
ts.Debug.type(node);
|
|
return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
|
|
case 235:
|
|
ts.Debug.type(node);
|
|
return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
|
|
case 237:
|
|
ts.Debug.type(node);
|
|
return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
|
|
case 238:
|
|
ts.Debug.type(node);
|
|
return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 239:
|
|
ts.Debug.type(node);
|
|
return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
|
|
case 240:
|
|
ts.Debug.type(node);
|
|
return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 241:
|
|
ts.Debug.type(node);
|
|
return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
|
|
case 242:
|
|
ts.Debug.type(node);
|
|
return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
|
|
case 243:
|
|
ts.Debug.type(node);
|
|
return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
|
|
case 244:
|
|
ts.Debug.type(node);
|
|
return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
|
|
case 245:
|
|
ts.Debug.type(node);
|
|
return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
|
|
case 246:
|
|
ts.Debug.type(node);
|
|
return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
|
|
case 247:
|
|
ts.Debug.type(node);
|
|
return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 248:
|
|
ts.Debug.type(node);
|
|
return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
|
|
case 249:
|
|
ts.Debug.type(node);
|
|
return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
|
|
case 250:
|
|
ts.Debug.type(node);
|
|
return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
|
|
case 251:
|
|
ts.Debug.type(node);
|
|
return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 252:
|
|
ts.Debug.type(node);
|
|
return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
|
|
case 254:
|
|
ts.Debug.type(node);
|
|
return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 255:
|
|
ts.Debug.type(node);
|
|
return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
|
|
case 256:
|
|
ts.Debug.type(node);
|
|
return factory.updateFunctionDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
|
|
case 257:
|
|
ts.Debug.type(node);
|
|
return factory.updateClassDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifierLike), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
|
|
case 258:
|
|
ts.Debug.type(node);
|
|
return factory.updateInterfaceDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
|
|
case 259:
|
|
ts.Debug.type(node);
|
|
return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
|
|
case 260:
|
|
ts.Debug.type(node);
|
|
return factory.updateEnumDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
|
|
case 261:
|
|
ts.Debug.type(node);
|
|
return factory.updateModuleDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
|
|
case 262:
|
|
ts.Debug.type(node);
|
|
return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
|
|
case 263:
|
|
ts.Debug.type(node);
|
|
return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
|
|
case 264:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 265:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
|
|
case 266:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression), nodeVisitor(node.assertClause, visitor, ts.isAssertClause));
|
|
case 293:
|
|
ts.Debug.type(node);
|
|
return factory.updateAssertClause(node, nodesVisitor(node.elements, visitor, ts.isAssertEntry), node.multiLine);
|
|
case 294:
|
|
ts.Debug.type(node);
|
|
return factory.updateAssertEntry(node, nodeVisitor(node.name, visitor, ts.isAssertionKey), nodeVisitor(node.value, visitor, ts.isExpressionNode));
|
|
case 267:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
|
|
case 268:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 274:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 269:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
|
|
case 270:
|
|
ts.Debug.type(node);
|
|
return factory.updateImportSpecifier(node, node.isTypeOnly, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 271:
|
|
ts.Debug.type(node);
|
|
return factory.updateExportAssignment(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 272:
|
|
ts.Debug.type(node);
|
|
return factory.updateExportDeclaration(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression), nodeVisitor(node.assertClause, visitor, ts.isAssertClause));
|
|
case 273:
|
|
ts.Debug.type(node);
|
|
return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
|
|
case 275:
|
|
ts.Debug.type(node);
|
|
return factory.updateExportSpecifier(node, node.isTypeOnly, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
|
|
case 277:
|
|
ts.Debug.type(node);
|
|
return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 278:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
|
|
case 279:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
|
|
case 280:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
|
|
case 281:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
|
|
case 282:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
|
|
case 285:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
|
|
case 286:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
|
|
case 287:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 288:
|
|
ts.Debug.type(node);
|
|
return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 289:
|
|
ts.Debug.type(node);
|
|
return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
|
|
case 290:
|
|
ts.Debug.type(node);
|
|
return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
|
|
case 291:
|
|
ts.Debug.type(node);
|
|
return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
|
|
case 292:
|
|
ts.Debug.type(node);
|
|
return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
|
|
case 296:
|
|
ts.Debug.type(node);
|
|
return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 297:
|
|
ts.Debug.type(node);
|
|
return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
|
|
case 298:
|
|
ts.Debug.type(node);
|
|
return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 299:
|
|
ts.Debug.type(node);
|
|
return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
|
|
case 305:
|
|
ts.Debug.type(node);
|
|
return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
|
|
case 350:
|
|
ts.Debug.type(node);
|
|
return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
|
|
case 351:
|
|
ts.Debug.type(node);
|
|
return factory.updateCommaListExpression(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 = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createSourceMapGenerator(host, file, sourceRoot, sourcesDirectoryPath, generatorOptions) {
|
|
var _a = generatorOptions.extendedDiagnostics
|
|
? ts.performance.createTimer("Source Map", "beforeSourcemap", "afterSourcemap")
|
|
: ts.performance.nullTimer, enter = _a.enter, exit = _a.exit;
|
|
var rawSources = [];
|
|
var sources = [];
|
|
var sourceToSourceIndexMap = new ts.Map();
|
|
var sourcesContent;
|
|
var names = [];
|
|
var nameToNameIndexMap;
|
|
var mappingCharCodes = [];
|
|
var mappings = "";
|
|
var lastGeneratedLine = 0;
|
|
var lastGeneratedCharacter = 0;
|
|
var lastSourceIndex = 0;
|
|
var lastSourceLine = 0;
|
|
var lastSourceCharacter = 0;
|
|
var lastNameIndex = 0;
|
|
var hasLast = false;
|
|
var pendingGeneratedLine = 0;
|
|
var pendingGeneratedCharacter = 0;
|
|
var pendingSourceIndex = 0;
|
|
var pendingSourceLine = 0;
|
|
var pendingSourceCharacter = 0;
|
|
var pendingNameIndex = 0;
|
|
var hasPending = false;
|
|
var hasPendingSource = false;
|
|
var hasPendingName = false;
|
|
return {
|
|
getSources: function () { return rawSources; },
|
|
addSource: addSource,
|
|
setSourceContent: setSourceContent,
|
|
addName: addName,
|
|
addMapping: addMapping,
|
|
appendSourceMap: appendSourceMap,
|
|
toJSON: toJSON,
|
|
toString: function () { return JSON.stringify(toJSON()); }
|
|
};
|
|
function addSource(fileName) {
|
|
enter();
|
|
var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true);
|
|
var sourceIndex = sourceToSourceIndexMap.get(source);
|
|
if (sourceIndex === undefined) {
|
|
sourceIndex = sources.length;
|
|
sources.push(source);
|
|
rawSources.push(fileName);
|
|
sourceToSourceIndexMap.set(source, sourceIndex);
|
|
}
|
|
exit();
|
|
return sourceIndex;
|
|
}
|
|
function setSourceContent(sourceIndex, content) {
|
|
enter();
|
|
if (content !== null) {
|
|
if (!sourcesContent)
|
|
sourcesContent = [];
|
|
while (sourcesContent.length < sourceIndex) {
|
|
sourcesContent.push(null);
|
|
}
|
|
sourcesContent[sourceIndex] = content;
|
|
}
|
|
exit();
|
|
}
|
|
function addName(name) {
|
|
enter();
|
|
if (!nameToNameIndexMap)
|
|
nameToNameIndexMap = new ts.Map();
|
|
var nameIndex = nameToNameIndexMap.get(name);
|
|
if (nameIndex === undefined) {
|
|
nameIndex = names.length;
|
|
names.push(name);
|
|
nameToNameIndexMap.set(name, nameIndex);
|
|
}
|
|
exit();
|
|
return nameIndex;
|
|
}
|
|
function isNewGeneratedPosition(generatedLine, generatedCharacter) {
|
|
return !hasPending
|
|
|| pendingGeneratedLine !== generatedLine
|
|
|| pendingGeneratedCharacter !== generatedCharacter;
|
|
}
|
|
function isBacktrackingSourcePosition(sourceIndex, sourceLine, sourceCharacter) {
|
|
return sourceIndex !== undefined
|
|
&& sourceLine !== undefined
|
|
&& sourceCharacter !== undefined
|
|
&& pendingSourceIndex === sourceIndex
|
|
&& (pendingSourceLine > sourceLine
|
|
|| pendingSourceLine === sourceLine && pendingSourceCharacter > sourceCharacter);
|
|
}
|
|
function addMapping(generatedLine, generatedCharacter, sourceIndex, sourceLine, sourceCharacter, nameIndex) {
|
|
ts.Debug.assert(generatedLine >= pendingGeneratedLine, "generatedLine cannot backtrack");
|
|
ts.Debug.assert(generatedCharacter >= 0, "generatedCharacter cannot be negative");
|
|
ts.Debug.assert(sourceIndex === undefined || sourceIndex >= 0, "sourceIndex cannot be negative");
|
|
ts.Debug.assert(sourceLine === undefined || sourceLine >= 0, "sourceLine cannot be negative");
|
|
ts.Debug.assert(sourceCharacter === undefined || sourceCharacter >= 0, "sourceCharacter cannot be negative");
|
|
enter();
|
|
if (isNewGeneratedPosition(generatedLine, generatedCharacter) ||
|
|
isBacktrackingSourcePosition(sourceIndex, sourceLine, sourceCharacter)) {
|
|
commitPendingMapping();
|
|
pendingGeneratedLine = generatedLine;
|
|
pendingGeneratedCharacter = generatedCharacter;
|
|
hasPendingSource = false;
|
|
hasPendingName = false;
|
|
hasPending = true;
|
|
}
|
|
if (sourceIndex !== undefined && sourceLine !== undefined && sourceCharacter !== undefined) {
|
|
pendingSourceIndex = sourceIndex;
|
|
pendingSourceLine = sourceLine;
|
|
pendingSourceCharacter = sourceCharacter;
|
|
hasPendingSource = true;
|
|
if (nameIndex !== undefined) {
|
|
pendingNameIndex = nameIndex;
|
|
hasPendingName = true;
|
|
}
|
|
}
|
|
exit();
|
|
}
|
|
function appendSourceMap(generatedLine, generatedCharacter, map, sourceMapPath, start, end) {
|
|
ts.Debug.assert(generatedLine >= pendingGeneratedLine, "generatedLine cannot backtrack");
|
|
ts.Debug.assert(generatedCharacter >= 0, "generatedCharacter cannot be negative");
|
|
enter();
|
|
var sourceIndexToNewSourceIndexMap = [];
|
|
var nameIndexToNewNameIndexMap;
|
|
var mappingIterator = decodeMappings(map.mappings);
|
|
for (var iterResult = mappingIterator.next(); !iterResult.done; iterResult = mappingIterator.next()) {
|
|
var raw = iterResult.value;
|
|
if (end && (raw.generatedLine > end.line ||
|
|
(raw.generatedLine === end.line && raw.generatedCharacter > end.character))) {
|
|
break;
|
|
}
|
|
if (start && (raw.generatedLine < start.line ||
|
|
(start.line === raw.generatedLine && raw.generatedCharacter < start.character))) {
|
|
continue;
|
|
}
|
|
var newSourceIndex = void 0;
|
|
var newSourceLine = void 0;
|
|
var newSourceCharacter = void 0;
|
|
var newNameIndex = void 0;
|
|
if (raw.sourceIndex !== undefined) {
|
|
newSourceIndex = sourceIndexToNewSourceIndexMap[raw.sourceIndex];
|
|
if (newSourceIndex === undefined) {
|
|
var rawPath = map.sources[raw.sourceIndex];
|
|
var relativePath = map.sourceRoot ? ts.combinePaths(map.sourceRoot, rawPath) : rawPath;
|
|
var combinedPath = ts.combinePaths(ts.getDirectoryPath(sourceMapPath), relativePath);
|
|
sourceIndexToNewSourceIndexMap[raw.sourceIndex] = newSourceIndex = addSource(combinedPath);
|
|
if (map.sourcesContent && typeof map.sourcesContent[raw.sourceIndex] === "string") {
|
|
setSourceContent(newSourceIndex, map.sourcesContent[raw.sourceIndex]);
|
|
}
|
|
}
|
|
newSourceLine = raw.sourceLine;
|
|
newSourceCharacter = raw.sourceCharacter;
|
|
if (map.names && raw.nameIndex !== undefined) {
|
|
if (!nameIndexToNewNameIndexMap)
|
|
nameIndexToNewNameIndexMap = [];
|
|
newNameIndex = nameIndexToNewNameIndexMap[raw.nameIndex];
|
|
if (newNameIndex === undefined) {
|
|
nameIndexToNewNameIndexMap[raw.nameIndex] = newNameIndex = addName(map.names[raw.nameIndex]);
|
|
}
|
|
}
|
|
}
|
|
var rawGeneratedLine = raw.generatedLine - (start ? start.line : 0);
|
|
var newGeneratedLine = rawGeneratedLine + generatedLine;
|
|
var rawGeneratedCharacter = start && start.line === raw.generatedLine ? raw.generatedCharacter - start.character : raw.generatedCharacter;
|
|
var newGeneratedCharacter = rawGeneratedLine === 0 ? rawGeneratedCharacter + generatedCharacter : rawGeneratedCharacter;
|
|
addMapping(newGeneratedLine, newGeneratedCharacter, newSourceIndex, newSourceLine, newSourceCharacter, newNameIndex);
|
|
}
|
|
exit();
|
|
}
|
|
function shouldCommitMapping() {
|
|
return !hasLast
|
|
|| lastGeneratedLine !== pendingGeneratedLine
|
|
|| lastGeneratedCharacter !== pendingGeneratedCharacter
|
|
|| lastSourceIndex !== pendingSourceIndex
|
|
|| lastSourceLine !== pendingSourceLine
|
|
|| lastSourceCharacter !== pendingSourceCharacter
|
|
|| lastNameIndex !== pendingNameIndex;
|
|
}
|
|
function appendMappingCharCode(charCode) {
|
|
mappingCharCodes.push(charCode);
|
|
if (mappingCharCodes.length >= 1024) {
|
|
flushMappingBuffer();
|
|
}
|
|
}
|
|
function commitPendingMapping() {
|
|
if (!hasPending || !shouldCommitMapping()) {
|
|
return;
|
|
}
|
|
enter();
|
|
if (lastGeneratedLine < pendingGeneratedLine) {
|
|
do {
|
|
appendMappingCharCode(59);
|
|
lastGeneratedLine++;
|
|
} while (lastGeneratedLine < pendingGeneratedLine);
|
|
lastGeneratedCharacter = 0;
|
|
}
|
|
else {
|
|
ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
|
|
if (hasLast) {
|
|
appendMappingCharCode(44);
|
|
}
|
|
}
|
|
appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
|
|
lastGeneratedCharacter = pendingGeneratedCharacter;
|
|
if (hasPendingSource) {
|
|
appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
|
|
lastSourceIndex = pendingSourceIndex;
|
|
appendBase64VLQ(pendingSourceLine - lastSourceLine);
|
|
lastSourceLine = pendingSourceLine;
|
|
appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
|
|
lastSourceCharacter = pendingSourceCharacter;
|
|
if (hasPendingName) {
|
|
appendBase64VLQ(pendingNameIndex - lastNameIndex);
|
|
lastNameIndex = pendingNameIndex;
|
|
}
|
|
}
|
|
hasLast = true;
|
|
exit();
|
|
}
|
|
function flushMappingBuffer() {
|
|
if (mappingCharCodes.length > 0) {
|
|
mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
|
|
mappingCharCodes.length = 0;
|
|
}
|
|
}
|
|
function toJSON() {
|
|
commitPendingMapping();
|
|
flushMappingBuffer();
|
|
return {
|
|
version: 3,
|
|
file: file,
|
|
sourceRoot: sourceRoot,
|
|
sources: sources,
|
|
names: names,
|
|
mappings: mappings,
|
|
sourcesContent: sourcesContent,
|
|
};
|
|
}
|
|
function appendBase64VLQ(inValue) {
|
|
if (inValue < 0) {
|
|
inValue = ((-inValue) << 1) + 1;
|
|
}
|
|
else {
|
|
inValue = inValue << 1;
|
|
}
|
|
do {
|
|
var currentDigit = inValue & 31;
|
|
inValue = inValue >> 5;
|
|
if (inValue > 0) {
|
|
currentDigit = currentDigit | 32;
|
|
}
|
|
appendMappingCharCode(base64FormatEncode(currentDigit));
|
|
} while (inValue > 0);
|
|
}
|
|
}
|
|
ts.createSourceMapGenerator = createSourceMapGenerator;
|
|
var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\r?\n?$/;
|
|
var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
|
|
function getLineInfo(text, lineStarts) {
|
|
return {
|
|
getLineCount: function () { return lineStarts.length; },
|
|
getLineText: function (line) { return text.substring(lineStarts[line], lineStarts[line + 1]); }
|
|
};
|
|
}
|
|
ts.getLineInfo = getLineInfo;
|
|
function tryGetSourceMappingURL(lineInfo) {
|
|
for (var index = lineInfo.getLineCount() - 1; index >= 0; index--) {
|
|
var line = lineInfo.getLineText(index);
|
|
var comment = sourceMapCommentRegExp.exec(line);
|
|
if (comment) {
|
|
return ts.trimStringEnd(comment[1]);
|
|
}
|
|
else if (!line.match(whitespaceOrMapCommentRegExp)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
ts.tryGetSourceMappingURL = tryGetSourceMappingURL;
|
|
function isStringOrNull(x) {
|
|
return typeof x === "string" || x === null;
|
|
}
|
|
function isRawSourceMap(x) {
|
|
return x !== null
|
|
&& typeof x === "object"
|
|
&& x.version === 3
|
|
&& typeof x.file === "string"
|
|
&& typeof x.mappings === "string"
|
|
&& ts.isArray(x.sources) && ts.every(x.sources, ts.isString)
|
|
&& (x.sourceRoot === undefined || x.sourceRoot === null || typeof x.sourceRoot === "string")
|
|
&& (x.sourcesContent === undefined || x.sourcesContent === null || ts.isArray(x.sourcesContent) && ts.every(x.sourcesContent, isStringOrNull))
|
|
&& (x.names === undefined || x.names === null || ts.isArray(x.names) && ts.every(x.names, ts.isString));
|
|
}
|
|
ts.isRawSourceMap = isRawSourceMap;
|
|
function tryParseRawSourceMap(text) {
|
|
try {
|
|
var parsed = JSON.parse(text);
|
|
if (isRawSourceMap(parsed)) {
|
|
return parsed;
|
|
}
|
|
}
|
|
catch (_a) {
|
|
}
|
|
return undefined;
|
|
}
|
|
ts.tryParseRawSourceMap = tryParseRawSourceMap;
|
|
function decodeMappings(mappings) {
|
|
var done = false;
|
|
var pos = 0;
|
|
var generatedLine = 0;
|
|
var generatedCharacter = 0;
|
|
var sourceIndex = 0;
|
|
var sourceLine = 0;
|
|
var sourceCharacter = 0;
|
|
var nameIndex = 0;
|
|
var error;
|
|
return {
|
|
get pos() { return pos; },
|
|
get error() { return error; },
|
|
get state() { return captureMapping(true, true); },
|
|
next: function () {
|
|
while (!done && pos < mappings.length) {
|
|
var ch = mappings.charCodeAt(pos);
|
|
if (ch === 59) {
|
|
generatedLine++;
|
|
generatedCharacter = 0;
|
|
pos++;
|
|
continue;
|
|
}
|
|
if (ch === 44) {
|
|
pos++;
|
|
continue;
|
|
}
|
|
var hasSource = false;
|
|
var hasName = false;
|
|
generatedCharacter += base64VLQFormatDecode();
|
|
if (hasReportedError())
|
|
return stopIterating();
|
|
if (generatedCharacter < 0)
|
|
return setErrorAndStopIterating("Invalid generatedCharacter found");
|
|
if (!isSourceMappingSegmentEnd()) {
|
|
hasSource = true;
|
|
sourceIndex += base64VLQFormatDecode();
|
|
if (hasReportedError())
|
|
return stopIterating();
|
|
if (sourceIndex < 0)
|
|
return setErrorAndStopIterating("Invalid sourceIndex found");
|
|
if (isSourceMappingSegmentEnd())
|
|
return setErrorAndStopIterating("Unsupported Format: No entries after sourceIndex");
|
|
sourceLine += base64VLQFormatDecode();
|
|
if (hasReportedError())
|
|
return stopIterating();
|
|
if (sourceLine < 0)
|
|
return setErrorAndStopIterating("Invalid sourceLine found");
|
|
if (isSourceMappingSegmentEnd())
|
|
return setErrorAndStopIterating("Unsupported Format: No entries after sourceLine");
|
|
sourceCharacter += base64VLQFormatDecode();
|
|
if (hasReportedError())
|
|
return stopIterating();
|
|
if (sourceCharacter < 0)
|
|
return setErrorAndStopIterating("Invalid sourceCharacter found");
|
|
if (!isSourceMappingSegmentEnd()) {
|
|
hasName = true;
|
|
nameIndex += base64VLQFormatDecode();
|
|
if (hasReportedError())
|
|
return stopIterating();
|
|
if (nameIndex < 0)
|
|
return setErrorAndStopIterating("Invalid nameIndex found");
|
|
if (!isSourceMappingSegmentEnd())
|
|
return setErrorAndStopIterating("Unsupported Error Format: Entries after nameIndex");
|
|
}
|
|
}
|
|
return { value: captureMapping(hasSource, hasName), done: done };
|
|
}
|
|
return stopIterating();
|
|
}
|
|
};
|
|
function captureMapping(hasSource, hasName) {
|
|
return {
|
|
generatedLine: generatedLine,
|
|
generatedCharacter: generatedCharacter,
|
|
sourceIndex: hasSource ? sourceIndex : undefined,
|
|
sourceLine: hasSource ? sourceLine : undefined,
|
|
sourceCharacter: hasSource ? sourceCharacter : undefined,
|
|
nameIndex: hasName ? nameIndex : undefined
|
|
};
|
|
}
|
|
function stopIterating() {
|
|
done = true;
|
|
return { value: undefined, done: true };
|
|
}
|
|
function setError(message) {
|
|
if (error === undefined) {
|
|
error = message;
|
|
}
|
|
}
|
|
function setErrorAndStopIterating(message) {
|
|
setError(message);
|
|
return stopIterating();
|
|
}
|
|
function hasReportedError() {
|
|
return error !== undefined;
|
|
}
|
|
function isSourceMappingSegmentEnd() {
|
|
return (pos === mappings.length ||
|
|
mappings.charCodeAt(pos) === 44 ||
|
|
mappings.charCodeAt(pos) === 59);
|
|
}
|
|
function base64VLQFormatDecode() {
|
|
var moreDigits = true;
|
|
var shiftCount = 0;
|
|
var value = 0;
|
|
for (; moreDigits; pos++) {
|
|
if (pos >= mappings.length)
|
|
return setError("Error in decoding base64VLQFormatDecode, past the mapping string"), -1;
|
|
var currentByte = base64FormatDecode(mappings.charCodeAt(pos));
|
|
if (currentByte === -1)
|
|
return setError("Invalid character in VLQ"), -1;
|
|
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;
|
|
}
|
|
}
|
|
ts.decodeMappings = decodeMappings;
|
|
function sameMapping(left, right) {
|
|
return left === right
|
|
|| left.generatedLine === right.generatedLine
|
|
&& left.generatedCharacter === right.generatedCharacter
|
|
&& left.sourceIndex === right.sourceIndex
|
|
&& left.sourceLine === right.sourceLine
|
|
&& left.sourceCharacter === right.sourceCharacter
|
|
&& left.nameIndex === right.nameIndex;
|
|
}
|
|
ts.sameMapping = sameMapping;
|
|
function isSourceMapping(mapping) {
|
|
return mapping.sourceIndex !== undefined
|
|
&& mapping.sourceLine !== undefined
|
|
&& mapping.sourceCharacter !== undefined;
|
|
}
|
|
ts.isSourceMapping = isSourceMapping;
|
|
function base64FormatEncode(value) {
|
|
return value >= 0 && value < 26 ? 65 + value :
|
|
value >= 26 && value < 52 ? 97 + value - 26 :
|
|
value >= 52 && value < 62 ? 48 + value - 52 :
|
|
value === 62 ? 43 :
|
|
value === 63 ? 47 :
|
|
ts.Debug.fail("".concat(value, ": not a base64 value"));
|
|
}
|
|
function base64FormatDecode(ch) {
|
|
return ch >= 65 && ch <= 90 ? ch - 65 :
|
|
ch >= 97 && ch <= 122 ? ch - 97 + 26 :
|
|
ch >= 48 && ch <= 57 ? ch - 48 + 52 :
|
|
ch === 43 ? 62 :
|
|
ch === 47 ? 63 :
|
|
-1;
|
|
}
|
|
function isSourceMappedPosition(value) {
|
|
return value.sourceIndex !== undefined
|
|
&& value.sourcePosition !== undefined;
|
|
}
|
|
function sameMappedPosition(left, right) {
|
|
return left.generatedPosition === right.generatedPosition
|
|
&& left.sourceIndex === right.sourceIndex
|
|
&& left.sourcePosition === right.sourcePosition;
|
|
}
|
|
function compareSourcePositions(left, right) {
|
|
ts.Debug.assert(left.sourceIndex === right.sourceIndex);
|
|
return ts.compareValues(left.sourcePosition, right.sourcePosition);
|
|
}
|
|
function compareGeneratedPositions(left, right) {
|
|
return ts.compareValues(left.generatedPosition, right.generatedPosition);
|
|
}
|
|
function getSourcePositionOfMapping(value) {
|
|
return value.sourcePosition;
|
|
}
|
|
function getGeneratedPositionOfMapping(value) {
|
|
return value.generatedPosition;
|
|
}
|
|
function createDocumentPositionMapper(host, map, mapPath) {
|
|
var mapDirectory = ts.getDirectoryPath(mapPath);
|
|
var sourceRoot = map.sourceRoot ? ts.getNormalizedAbsolutePath(map.sourceRoot, mapDirectory) : mapDirectory;
|
|
var generatedAbsoluteFilePath = ts.getNormalizedAbsolutePath(map.file, mapDirectory);
|
|
var generatedFile = host.getSourceFileLike(generatedAbsoluteFilePath);
|
|
var sourceFileAbsolutePaths = map.sources.map(function (source) { return ts.getNormalizedAbsolutePath(source, sourceRoot); });
|
|
var sourceToSourceIndexMap = new ts.Map(sourceFileAbsolutePaths.map(function (source, i) { return [host.getCanonicalFileName(source), i]; }));
|
|
var decodedMappings;
|
|
var generatedMappings;
|
|
var sourceMappings;
|
|
return {
|
|
getSourcePosition: getSourcePosition,
|
|
getGeneratedPosition: getGeneratedPosition
|
|
};
|
|
function processMapping(mapping) {
|
|
var generatedPosition = generatedFile !== undefined
|
|
? ts.getPositionOfLineAndCharacter(generatedFile, mapping.generatedLine, mapping.generatedCharacter, true)
|
|
: -1;
|
|
var source;
|
|
var sourcePosition;
|
|
if (isSourceMapping(mapping)) {
|
|
var sourceFile = host.getSourceFileLike(sourceFileAbsolutePaths[mapping.sourceIndex]);
|
|
source = map.sources[mapping.sourceIndex];
|
|
sourcePosition = sourceFile !== undefined
|
|
? ts.getPositionOfLineAndCharacter(sourceFile, mapping.sourceLine, mapping.sourceCharacter, true)
|
|
: -1;
|
|
}
|
|
return {
|
|
generatedPosition: generatedPosition,
|
|
source: source,
|
|
sourceIndex: mapping.sourceIndex,
|
|
sourcePosition: sourcePosition,
|
|
nameIndex: mapping.nameIndex
|
|
};
|
|
}
|
|
function getDecodedMappings() {
|
|
if (decodedMappings === undefined) {
|
|
var decoder = decodeMappings(map.mappings);
|
|
var mappings = ts.arrayFrom(decoder, processMapping);
|
|
if (decoder.error !== undefined) {
|
|
if (host.log) {
|
|
host.log("Encountered error while decoding sourcemap: ".concat(decoder.error));
|
|
}
|
|
decodedMappings = ts.emptyArray;
|
|
}
|
|
else {
|
|
decodedMappings = mappings;
|
|
}
|
|
}
|
|
return decodedMappings;
|
|
}
|
|
function getSourceMappings(sourceIndex) {
|
|
if (sourceMappings === undefined) {
|
|
var lists = [];
|
|
for (var _i = 0, _a = getDecodedMappings(); _i < _a.length; _i++) {
|
|
var mapping = _a[_i];
|
|
if (!isSourceMappedPosition(mapping))
|
|
continue;
|
|
var list = lists[mapping.sourceIndex];
|
|
if (!list)
|
|
lists[mapping.sourceIndex] = list = [];
|
|
list.push(mapping);
|
|
}
|
|
sourceMappings = lists.map(function (list) { return ts.sortAndDeduplicate(list, compareSourcePositions, sameMappedPosition); });
|
|
}
|
|
return sourceMappings[sourceIndex];
|
|
}
|
|
function getGeneratedMappings() {
|
|
if (generatedMappings === undefined) {
|
|
var list = [];
|
|
for (var _i = 0, _a = getDecodedMappings(); _i < _a.length; _i++) {
|
|
var mapping = _a[_i];
|
|
list.push(mapping);
|
|
}
|
|
generatedMappings = ts.sortAndDeduplicate(list, compareGeneratedPositions, sameMappedPosition);
|
|
}
|
|
return generatedMappings;
|
|
}
|
|
function getGeneratedPosition(loc) {
|
|
var sourceIndex = sourceToSourceIndexMap.get(host.getCanonicalFileName(loc.fileName));
|
|
if (sourceIndex === undefined)
|
|
return loc;
|
|
var sourceMappings = getSourceMappings(sourceIndex);
|
|
if (!ts.some(sourceMappings))
|
|
return loc;
|
|
var targetIndex = ts.binarySearchKey(sourceMappings, loc.pos, getSourcePositionOfMapping, ts.compareValues);
|
|
if (targetIndex < 0) {
|
|
targetIndex = ~targetIndex;
|
|
}
|
|
var mapping = sourceMappings[targetIndex];
|
|
if (mapping === undefined || mapping.sourceIndex !== sourceIndex) {
|
|
return loc;
|
|
}
|
|
return { fileName: generatedAbsoluteFilePath, pos: mapping.generatedPosition };
|
|
}
|
|
function getSourcePosition(loc) {
|
|
var generatedMappings = getGeneratedMappings();
|
|
if (!ts.some(generatedMappings))
|
|
return loc;
|
|
var targetIndex = ts.binarySearchKey(generatedMappings, loc.pos, getGeneratedPositionOfMapping, ts.compareValues);
|
|
if (targetIndex < 0) {
|
|
targetIndex = ~targetIndex;
|
|
}
|
|
var mapping = generatedMappings[targetIndex];
|
|
if (mapping === undefined || !isSourceMappedPosition(mapping)) {
|
|
return loc;
|
|
}
|
|
return { fileName: sourceFileAbsolutePaths[mapping.sourceIndex], pos: mapping.sourcePosition };
|
|
}
|
|
}
|
|
ts.createDocumentPositionMapper = createDocumentPositionMapper;
|
|
ts.identitySourceMapConsumer = {
|
|
getSourcePosition: ts.identity,
|
|
getGeneratedPosition: ts.identity
|
|
};
|
|
})(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(context, transformSourceFile) {
|
|
return transformSourceFileOrBundle;
|
|
function transformSourceFileOrBundle(node) {
|
|
return node.kind === 305 ? transformSourceFile(node) : transformBundle(node);
|
|
}
|
|
function transformBundle(node) {
|
|
return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
|
|
}
|
|
}
|
|
ts.chainBundle = chainBundle;
|
|
function getExportNeedsImportStarHelper(node) {
|
|
return !!ts.getNamespaceDeclarationNode(node);
|
|
}
|
|
ts.getExportNeedsImportStarHelper = getExportNeedsImportStarHelper;
|
|
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(context, sourceFile, resolver, compilerOptions) {
|
|
var externalImports = [];
|
|
var exportSpecifiers = ts.createMultiMap();
|
|
var exportedBindings = [];
|
|
var uniqueExports = new ts.Map();
|
|
var exportedNames;
|
|
var hasExportDefault = false;
|
|
var exportEquals;
|
|
var hasExportStarsToExportValues = false;
|
|
var hasImportStar = false;
|
|
var hasImportDefault = false;
|
|
for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
|
|
var node = _a[_i];
|
|
switch (node.kind) {
|
|
case 266:
|
|
externalImports.push(node);
|
|
if (!hasImportStar && getImportNeedsImportStarHelper(node)) {
|
|
hasImportStar = true;
|
|
}
|
|
if (!hasImportDefault && getImportNeedsImportDefaultHelper(node)) {
|
|
hasImportDefault = true;
|
|
}
|
|
break;
|
|
case 265:
|
|
if (node.moduleReference.kind === 277) {
|
|
externalImports.push(node);
|
|
}
|
|
break;
|
|
case 272:
|
|
if (node.moduleSpecifier) {
|
|
if (!node.exportClause) {
|
|
externalImports.push(node);
|
|
hasExportStarsToExportValues = true;
|
|
}
|
|
else {
|
|
externalImports.push(node);
|
|
if (ts.isNamedExports(node.exportClause)) {
|
|
addExportedNamesForExportDeclaration(node);
|
|
}
|
|
else {
|
|
var name = node.exportClause.name;
|
|
if (!uniqueExports.get(ts.idText(name))) {
|
|
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name);
|
|
uniqueExports.set(ts.idText(name), true);
|
|
exportedNames = ts.append(exportedNames, name);
|
|
}
|
|
hasImportStar = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
addExportedNamesForExportDeclaration(node);
|
|
}
|
|
break;
|
|
case 271:
|
|
if (node.isExportEquals && !exportEquals) {
|
|
exportEquals = node;
|
|
}
|
|
break;
|
|
case 237:
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
|
|
var decl = _c[_b];
|
|
exportedNames = collectExportedVariableInfo(decl, uniqueExports, exportedNames);
|
|
}
|
|
}
|
|
break;
|
|
case 256:
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
if (ts.hasSyntacticModifier(node, 512)) {
|
|
if (!hasExportDefault) {
|
|
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), context.factory.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 257:
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
if (ts.hasSyntacticModifier(node, 512)) {
|
|
if (!hasExportDefault) {
|
|
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), context.factory.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 externalHelpersImportDeclaration = ts.createExternalHelpersImportDeclarationIfNeeded(context.factory, context.getEmitHelperFactory(), sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStar, hasImportDefault);
|
|
if (externalHelpersImportDeclaration) {
|
|
externalImports.unshift(externalHelpersImportDeclaration);
|
|
}
|
|
return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames, externalHelpersImportDeclaration: externalHelpersImportDeclaration };
|
|
function addExportedNamesForExportDeclaration(node) {
|
|
for (var _i = 0, _a = ts.cast(node.exportClause, ts.isNamedExports).elements; _i < _a.length; _i++) {
|
|
var specifier = _a[_i];
|
|
if (!uniqueExports.get(ts.idText(specifier.name))) {
|
|
var name = specifier.propertyName || specifier.name;
|
|
if (!node.moduleSpecifier) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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 isSimpleInlineableExpression(expression) {
|
|
return !ts.isIdentifier(expression) && isSimpleCopiableExpression(expression);
|
|
}
|
|
ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
|
|
function isCompoundAssignment(kind) {
|
|
return kind >= 64
|
|
&& kind <= 78;
|
|
}
|
|
ts.isCompoundAssignment = isCompoundAssignment;
|
|
function getNonAssignmentOperatorForCompoundAssignment(kind) {
|
|
switch (kind) {
|
|
case 64: return 39;
|
|
case 65: return 40;
|
|
case 66: return 41;
|
|
case 67: return 42;
|
|
case 68: return 43;
|
|
case 69: return 44;
|
|
case 70: return 47;
|
|
case 71: return 48;
|
|
case 72: return 49;
|
|
case 73: return 50;
|
|
case 74: return 51;
|
|
case 78: return 52;
|
|
case 75: return 56;
|
|
case 76: return 55;
|
|
case 77: return 60;
|
|
}
|
|
}
|
|
ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
|
|
function getSuperCallFromStatement(statement) {
|
|
if (!ts.isExpressionStatement(statement)) {
|
|
return undefined;
|
|
}
|
|
var expression = ts.skipParentheses(statement.expression);
|
|
return ts.isSuperCall(expression)
|
|
? expression
|
|
: undefined;
|
|
}
|
|
ts.getSuperCallFromStatement = getSuperCallFromStatement;
|
|
function findSuperStatementIndex(statements, indexAfterLastPrologueStatement) {
|
|
for (var i = indexAfterLastPrologueStatement; i < statements.length; i += 1) {
|
|
var statement = statements[i];
|
|
if (getSuperCallFromStatement(statement)) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
ts.findSuperStatementIndex = findSuperStatementIndex;
|
|
function getProperties(node, requireInitializer, isStatic) {
|
|
return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
|
|
}
|
|
ts.getProperties = getProperties;
|
|
function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
|
|
return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
|
|
}
|
|
function getStaticPropertiesAndClassStaticBlock(node) {
|
|
return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
|
|
}
|
|
ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
|
|
function isInitializedOrStaticProperty(member, requireInitializer, isStatic) {
|
|
return ts.isPropertyDeclaration(member)
|
|
&& (!!member.initializer || !requireInitializer)
|
|
&& ts.hasStaticModifier(member) === isStatic;
|
|
}
|
|
function isStaticPropertyDeclaration(member) {
|
|
return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
|
|
}
|
|
function isInitializedProperty(member) {
|
|
return member.kind === 167
|
|
&& member.initializer !== undefined;
|
|
}
|
|
ts.isInitializedProperty = isInitializedProperty;
|
|
function isNonStaticMethodOrAccessorWithPrivateName(member) {
|
|
return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
|
|
}
|
|
ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
|
|
function getDecoratorsOfParameters(node) {
|
|
var decorators;
|
|
if (node) {
|
|
var parameters = node.parameters;
|
|
var firstParameterIsThis = parameters.length > 0 && ts.parameterIsThisKeyword(parameters[0]);
|
|
var firstParameterOffset = firstParameterIsThis ? 1 : 0;
|
|
var numParameters = firstParameterIsThis ? parameters.length - 1 : parameters.length;
|
|
for (var i = 0; i < numParameters; i++) {
|
|
var parameter = parameters[i + firstParameterOffset];
|
|
if (decorators || ts.hasDecorators(parameter)) {
|
|
if (!decorators) {
|
|
decorators = new Array(numParameters);
|
|
}
|
|
decorators[i] = ts.getDecorators(parameter);
|
|
}
|
|
}
|
|
}
|
|
return decorators;
|
|
}
|
|
function getAllDecoratorsOfClass(node) {
|
|
var decorators = ts.getDecorators(node);
|
|
var parameters = getDecoratorsOfParameters(ts.getFirstConstructorWithBody(node));
|
|
if (!ts.some(decorators) && !ts.some(parameters)) {
|
|
return undefined;
|
|
}
|
|
return {
|
|
decorators: decorators,
|
|
parameters: parameters
|
|
};
|
|
}
|
|
ts.getAllDecoratorsOfClass = getAllDecoratorsOfClass;
|
|
function getAllDecoratorsOfClassElement(member, parent) {
|
|
switch (member.kind) {
|
|
case 172:
|
|
case 173:
|
|
return getAllDecoratorsOfAccessors(member, parent);
|
|
case 169:
|
|
return getAllDecoratorsOfMethod(member);
|
|
case 167:
|
|
return getAllDecoratorsOfProperty(member);
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.getAllDecoratorsOfClassElement = getAllDecoratorsOfClassElement;
|
|
function getAllDecoratorsOfAccessors(accessor, parent) {
|
|
if (!accessor.body) {
|
|
return undefined;
|
|
}
|
|
var _a = ts.getAllAccessorDeclarations(parent.members, accessor), firstAccessor = _a.firstAccessor, secondAccessor = _a.secondAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor;
|
|
var firstAccessorWithDecorators = ts.hasDecorators(firstAccessor) ? firstAccessor :
|
|
secondAccessor && ts.hasDecorators(secondAccessor) ? secondAccessor :
|
|
undefined;
|
|
if (!firstAccessorWithDecorators || accessor !== firstAccessorWithDecorators) {
|
|
return undefined;
|
|
}
|
|
var decorators = ts.getDecorators(firstAccessorWithDecorators);
|
|
var parameters = getDecoratorsOfParameters(setAccessor);
|
|
if (!ts.some(decorators) && !ts.some(parameters)) {
|
|
return undefined;
|
|
}
|
|
return {
|
|
decorators: decorators,
|
|
parameters: parameters,
|
|
getDecorators: getAccessor && ts.getDecorators(getAccessor),
|
|
setDecorators: setAccessor && ts.getDecorators(setAccessor)
|
|
};
|
|
}
|
|
function getAllDecoratorsOfMethod(method) {
|
|
if (!method.body) {
|
|
return undefined;
|
|
}
|
|
var decorators = ts.getDecorators(method);
|
|
var parameters = getDecoratorsOfParameters(method);
|
|
if (!ts.some(decorators) && !ts.some(parameters)) {
|
|
return undefined;
|
|
}
|
|
return { decorators: decorators, parameters: parameters };
|
|
}
|
|
function getAllDecoratorsOfProperty(property) {
|
|
var decorators = ts.getDecorators(property);
|
|
if (!ts.some(decorators)) {
|
|
return undefined;
|
|
}
|
|
return { decorators: decorators };
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
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: function (elements) { return makeArrayAssignmentPattern(context.factory, elements); },
|
|
createObjectBindingOrAssignmentPattern: function (elements) { return makeObjectAssignmentPattern(context.factory, elements); },
|
|
createArrayBindingOrAssignmentElement: makeAssignmentElement,
|
|
visitor: visitor
|
|
};
|
|
if (value) {
|
|
value = ts.visitNode(value, visitor, ts.isExpression);
|
|
if (ts.isIdentifier(value) && bindingOrAssignmentElementAssignsToName(node, value.escapedText) ||
|
|
bindingOrAssignmentElementContainsNonLiteralComputedName(node)) {
|
|
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 context.factory.inlineExpressions(expressions) || context.factory.createOmittedExpression();
|
|
function emitExpression(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(context.factory.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_4 = elements; _i < elements_4.length; _i++) {
|
|
var element = elements_4[_i];
|
|
if (bindingOrAssignmentElementAssignsToName(element, escapedName)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function bindingOrAssignmentElementContainsNonLiteralComputedName(element) {
|
|
var propertyName = ts.tryGetPropertyNameOfBindingOrAssignmentElement(element);
|
|
if (propertyName && ts.isComputedPropertyName(propertyName) && !ts.isLiteralExpression(propertyName.expression)) {
|
|
return true;
|
|
}
|
|
var target = ts.getTargetOfBindingOrAssignmentElement(element);
|
|
return !!target && ts.isBindingOrAssignmentPattern(target) && bindingOrAssignmentPatternContainsNonLiteralComputedName(target);
|
|
}
|
|
function bindingOrAssignmentPatternContainsNonLiteralComputedName(pattern) {
|
|
return !!ts.forEach(ts.getElementsOfBindingOrAssignmentPattern(pattern), bindingOrAssignmentElementContainsNonLiteralComputedName);
|
|
}
|
|
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: function (elements) { return makeArrayBindingPattern(context.factory, elements); },
|
|
createObjectBindingOrAssignmentPattern: function (elements) { return makeObjectBindingPattern(context.factory, elements); },
|
|
createArrayBindingOrAssignmentElement: function (name) { return makeBindingElement(context.factory, name); },
|
|
visitor: visitor
|
|
};
|
|
if (ts.isVariableDeclaration(node)) {
|
|
var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
|
|
if (initializer && (ts.isIdentifier(initializer) && bindingOrAssignmentElementAssignsToName(node, initializer.escapedText) ||
|
|
bindingOrAssignmentElementContainsNonLiteralComputedName(node))) {
|
|
initializer = ensureIdentifier(flattenContext, ts.visitNode(initializer, flattenContext.visitor), false, initializer);
|
|
node = context.factory.updateVariableDeclaration(node, node.name, undefined, undefined, initializer);
|
|
}
|
|
}
|
|
flattenBindingOrAssignmentElement(flattenContext, node, rval, node, skipInitializer);
|
|
if (pendingExpressions) {
|
|
var temp = context.factory.createTempVariable(undefined);
|
|
if (hoistTempVariables) {
|
|
var value = context.factory.inlineExpressions(pendingExpressions);
|
|
pendingExpressions = undefined;
|
|
emitBindingOrAssignment(temp, value, undefined, undefined);
|
|
}
|
|
else {
|
|
context.hoistVariableDeclaration(temp);
|
|
var pendingDeclaration = ts.last(pendingDeclarations);
|
|
pendingDeclaration.pendingExpressions = ts.append(pendingDeclaration.pendingExpressions, context.factory.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 = context.factory.createVariableDeclaration(name, undefined, undefined, pendingExpressions_1 ? context.factory.inlineExpressions(ts.append(pendingExpressions_1, value)) : value);
|
|
variable.original = original;
|
|
ts.setTextRange(variable, location);
|
|
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 = context.factory.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) {
|
|
var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element);
|
|
if (!skipInitializer) {
|
|
var initializer = ts.visitNode(ts.getInitializerOfBindingOrAssignmentElement(element), flattenContext.visitor, ts.isExpression);
|
|
if (initializer) {
|
|
if (value) {
|
|
value = createDefaultValueCheck(flattenContext, value, initializer, location);
|
|
if (!ts.isSimpleInlineableExpression(initializer) && ts.isBindingOrAssignmentPattern(bindingTarget)) {
|
|
value = ensureIdentifier(flattenContext, value, true, location);
|
|
}
|
|
}
|
|
else {
|
|
value = initializer;
|
|
}
|
|
}
|
|
else if (!value) {
|
|
value = flattenContext.context.factory.createVoidZero();
|
|
}
|
|
}
|
|
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 & (32768 | 65536))
|
|
&& !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (32768 | 65536))
|
|
&& !ts.isComputedPropertyName(propertyName)) {
|
|
bindingElements = ts.append(bindingElements, ts.visitNode(element, flattenContext.visitor));
|
|
}
|
|
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 = flattenContext.context.getEmitHelperFactory().createRestHelper(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.setTextRange(flattenContext.context.getEmitHelperFactory().createReadHelper(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 & 65536 || flattenContext.hasTransformedPriorElement && !isSimpleBindingOrAssignmentElement(element)) {
|
|
flattenContext.hasTransformedPriorElement = true;
|
|
var temp = flattenContext.context.factory.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 = flattenContext.context.factory.createElementAccessExpression(value, i);
|
|
flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
|
|
}
|
|
else if (i === numElements - 1) {
|
|
var rhsValue = flattenContext.context.factory.createArraySliceCall(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 isSimpleBindingOrAssignmentElement(element) {
|
|
var target = ts.getTargetOfBindingOrAssignmentElement(element);
|
|
if (!target || ts.isOmittedExpression(target))
|
|
return true;
|
|
var propertyName = ts.tryGetPropertyNameOfBindingOrAssignmentElement(element);
|
|
if (propertyName && !ts.isPropertyNameLiteral(propertyName))
|
|
return false;
|
|
var initializer = ts.getInitializerOfBindingOrAssignmentElement(element);
|
|
if (initializer && !ts.isSimpleInlineableExpression(initializer))
|
|
return false;
|
|
if (ts.isBindingOrAssignmentPattern(target))
|
|
return ts.every(ts.getElementsOfBindingOrAssignmentPattern(target), isSimpleBindingOrAssignmentElement);
|
|
return ts.isIdentifier(target);
|
|
}
|
|
function createDefaultValueCheck(flattenContext, value, defaultValue, location) {
|
|
value = ensureIdentifier(flattenContext, value, true, location);
|
|
return flattenContext.context.factory.createConditionalExpression(flattenContext.context.factory.createTypeCheck(value, "undefined"), undefined, defaultValue, undefined, value);
|
|
}
|
|
function createDestructuringPropertyAccess(flattenContext, value, propertyName) {
|
|
if (ts.isComputedPropertyName(propertyName)) {
|
|
var argumentExpression = ensureIdentifier(flattenContext, ts.visitNode(propertyName.expression, flattenContext.visitor), false, propertyName);
|
|
return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression);
|
|
}
|
|
else if (ts.isStringOrNumericLiteralLike(propertyName)) {
|
|
var argumentExpression = ts.factory.cloneNode(propertyName);
|
|
return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression);
|
|
}
|
|
else {
|
|
var name = flattenContext.context.factory.createIdentifier(ts.idText(propertyName));
|
|
return flattenContext.context.factory.createPropertyAccessExpression(value, name);
|
|
}
|
|
}
|
|
function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) {
|
|
if (ts.isIdentifier(value) && reuseIdentifierExpressions) {
|
|
return value;
|
|
}
|
|
else {
|
|
var temp = flattenContext.context.factory.createTempVariable(undefined);
|
|
if (flattenContext.hoistTempVariables) {
|
|
flattenContext.context.hoistVariableDeclaration(temp);
|
|
flattenContext.emitExpression(ts.setTextRange(flattenContext.context.factory.createAssignment(temp, value), location));
|
|
}
|
|
else {
|
|
flattenContext.emitBindingOrAssignment(temp, value, location, undefined);
|
|
}
|
|
return temp;
|
|
}
|
|
}
|
|
function makeArrayBindingPattern(factory, elements) {
|
|
ts.Debug.assertEachNode(elements, ts.isArrayBindingElement);
|
|
return factory.createArrayBindingPattern(elements);
|
|
}
|
|
function makeArrayAssignmentPattern(factory, elements) {
|
|
return factory.createArrayLiteralExpression(ts.map(elements, factory.converters.convertToArrayAssignmentElement));
|
|
}
|
|
function makeObjectBindingPattern(factory, elements) {
|
|
ts.Debug.assertEachNode(elements, ts.isBindingElement);
|
|
return factory.createObjectBindingPattern(elements);
|
|
}
|
|
function makeObjectAssignmentPattern(factory, elements) {
|
|
return factory.createObjectLiteralExpression(ts.map(elements, factory.converters.convertToObjectAssignmentElement));
|
|
}
|
|
function makeBindingElement(factory, name) {
|
|
return factory.createBindingElement(undefined, undefined, name);
|
|
}
|
|
function makeAssignmentElement(name) {
|
|
return name;
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var ProcessLevel;
|
|
(function (ProcessLevel) {
|
|
ProcessLevel[ProcessLevel["LiftRestriction"] = 0] = "LiftRestriction";
|
|
ProcessLevel[ProcessLevel["All"] = 1] = "All";
|
|
})(ProcessLevel = ts.ProcessLevel || (ts.ProcessLevel = {}));
|
|
function processTaggedTemplateExpression(context, node, visitor, currentSourceFile, recordTaggedTemplateString, level) {
|
|
var tag = ts.visitNode(node.tag, visitor, ts.isExpression);
|
|
var templateArguments = [undefined];
|
|
var cookedStrings = [];
|
|
var rawStrings = [];
|
|
var template = node.template;
|
|
if (level === ProcessLevel.LiftRestriction && !ts.hasInvalidEscape(template)) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
if (ts.isNoSubstitutionTemplateLiteral(template)) {
|
|
cookedStrings.push(createTemplateCooked(template));
|
|
rawStrings.push(getRawLiteral(template, currentSourceFile));
|
|
}
|
|
else {
|
|
cookedStrings.push(createTemplateCooked(template.head));
|
|
rawStrings.push(getRawLiteral(template.head, currentSourceFile));
|
|
for (var _i = 0, _a = template.templateSpans; _i < _a.length; _i++) {
|
|
var templateSpan = _a[_i];
|
|
cookedStrings.push(createTemplateCooked(templateSpan.literal));
|
|
rawStrings.push(getRawLiteral(templateSpan.literal, currentSourceFile));
|
|
templateArguments.push(ts.visitNode(templateSpan.expression, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
var helperCall = context.getEmitHelperFactory().createTemplateObjectHelper(ts.factory.createArrayLiteralExpression(cookedStrings), ts.factory.createArrayLiteralExpression(rawStrings));
|
|
if (ts.isExternalModule(currentSourceFile)) {
|
|
var tempVar = ts.factory.createUniqueName("templateObject");
|
|
recordTaggedTemplateString(tempVar);
|
|
templateArguments[0] = ts.factory.createLogicalOr(tempVar, ts.factory.createAssignment(tempVar, helperCall));
|
|
}
|
|
else {
|
|
templateArguments[0] = helperCall;
|
|
}
|
|
return ts.factory.createCallExpression(tag, undefined, templateArguments);
|
|
}
|
|
ts.processTaggedTemplateExpression = processTaggedTemplateExpression;
|
|
function createTemplateCooked(template) {
|
|
return template.templateFlags ? ts.factory.createVoidZero() : ts.factory.createStringLiteral(template.text);
|
|
}
|
|
function getRawLiteral(node, currentSourceFile) {
|
|
var text = node.rawText;
|
|
if (text === undefined) {
|
|
ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
|
|
text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
|
|
var isLast = node.kind === 14 || node.kind === 17;
|
|
text = text.substring(1, text.length - (isLast ? 1 : 2));
|
|
}
|
|
text = text.replace(/\r\n?/g, "\n");
|
|
return ts.setTextRange(ts.factory.createStringLiteral(text), node);
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var USE_NEW_TYPE_METADATA_FORMAT = false;
|
|
function transformTypeScript(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
|
|
var resolver = context.getEmitResolver();
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var moduleKind = ts.getEmitModuleKind(compilerOptions);
|
|
var typeSerializer = compilerOptions.emitDecoratorMetadata ? ts.createRuntimeTypeSerializer(context) : undefined;
|
|
var previousOnEmitNode = context.onEmitNode;
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onEmitNode = onEmitNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
context.enableSubstitution(206);
|
|
context.enableSubstitution(207);
|
|
var currentSourceFile;
|
|
var currentNamespace;
|
|
var currentNamespaceContainerName;
|
|
var currentLexicalScope;
|
|
var currentScopeFirstDeclarationsOfName;
|
|
var currentClassHasParameterProperties;
|
|
var enabledSubstitutions;
|
|
var applicableSubstitutions;
|
|
return transformSourceFileOrBundle;
|
|
function transformSourceFileOrBundle(node) {
|
|
if (node.kind === 306) {
|
|
return transformBundle(node);
|
|
}
|
|
return transformSourceFile(node);
|
|
}
|
|
function transformBundle(node) {
|
|
return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
|
|
if (prepend.kind === 308) {
|
|
return ts.createUnparsedSourceFile(prepend, "js");
|
|
}
|
|
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 = currentLexicalScope;
|
|
var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName;
|
|
var savedCurrentClassHasParameterProperties = currentClassHasParameterProperties;
|
|
onBeforeVisitNode(node);
|
|
var visited = f(node);
|
|
if (currentLexicalScope !== savedCurrentScope) {
|
|
currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
|
|
}
|
|
currentLexicalScope = savedCurrentScope;
|
|
currentClassHasParameterProperties = savedCurrentClassHasParameterProperties;
|
|
return visited;
|
|
}
|
|
function onBeforeVisitNode(node) {
|
|
switch (node.kind) {
|
|
case 305:
|
|
case 263:
|
|
case 262:
|
|
case 235:
|
|
currentLexicalScope = node;
|
|
currentScopeFirstDeclarationsOfName = undefined;
|
|
break;
|
|
case 257:
|
|
case 256:
|
|
if (ts.hasSyntacticModifier(node, 2)) {
|
|
break;
|
|
}
|
|
if (node.name) {
|
|
recordEmittedDeclarationInScope(node);
|
|
}
|
|
else {
|
|
ts.Debug.assert(node.kind === 257 || ts.hasSyntacticModifier(node, 512));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
function visitor(node) {
|
|
return saveStateAndInvoke(node, visitorWorker);
|
|
}
|
|
function visitorWorker(node) {
|
|
if (node.transformFlags & 1) {
|
|
return visitTypeScript(node);
|
|
}
|
|
return node;
|
|
}
|
|
function sourceElementVisitor(node) {
|
|
return saveStateAndInvoke(node, sourceElementVisitorWorker);
|
|
}
|
|
function sourceElementVisitorWorker(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
case 265:
|
|
case 271:
|
|
case 272:
|
|
return visitElidableStatement(node);
|
|
default:
|
|
return visitorWorker(node);
|
|
}
|
|
}
|
|
function visitElidableStatement(node) {
|
|
var parsed = ts.getParseTreeNode(node);
|
|
if (parsed !== node) {
|
|
if (node.transformFlags & 1) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 266:
|
|
return visitImportDeclaration(node);
|
|
case 265:
|
|
return visitImportEqualsDeclaration(node);
|
|
case 271:
|
|
return visitExportAssignment(node);
|
|
case 272:
|
|
return visitExportDeclaration(node);
|
|
default:
|
|
ts.Debug.fail("Unhandled ellided statement");
|
|
}
|
|
}
|
|
function namespaceElementVisitor(node) {
|
|
return saveStateAndInvoke(node, namespaceElementVisitorWorker);
|
|
}
|
|
function namespaceElementVisitorWorker(node) {
|
|
if (node.kind === 272 ||
|
|
node.kind === 266 ||
|
|
node.kind === 267 ||
|
|
(node.kind === 265 &&
|
|
node.moduleReference.kind === 277)) {
|
|
return undefined;
|
|
}
|
|
else if (node.transformFlags & 1 || ts.hasSyntacticModifier(node, 1)) {
|
|
return visitTypeScript(node);
|
|
}
|
|
return node;
|
|
}
|
|
function getClassElementVisitor(parent) {
|
|
return function (node) { return saveStateAndInvoke(node, function (n) { return classElementVisitorWorker(n, parent); }); };
|
|
}
|
|
function classElementVisitorWorker(node, parent) {
|
|
switch (node.kind) {
|
|
case 171:
|
|
return visitConstructor(node);
|
|
case 167:
|
|
return visitPropertyDeclaration(node, parent);
|
|
case 172:
|
|
return visitGetAccessor(node, parent);
|
|
case 173:
|
|
return visitSetAccessor(node, parent);
|
|
case 169:
|
|
return visitMethodDeclaration(node, parent);
|
|
case 170:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 234:
|
|
return node;
|
|
case 176:
|
|
return;
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
}
|
|
function getObjectLiteralElementVisitor(parent) {
|
|
return function (node) { return saveStateAndInvoke(node, function (n) { return objectLiteralElementVisitorWorker(n, parent); }); };
|
|
}
|
|
function objectLiteralElementVisitorWorker(node, parent) {
|
|
switch (node.kind) {
|
|
case 296:
|
|
case 297:
|
|
case 298:
|
|
return visitor(node);
|
|
case 172:
|
|
return visitGetAccessor(node, parent);
|
|
case 173:
|
|
return visitSetAccessor(node, parent);
|
|
case 169:
|
|
return visitMethodDeclaration(node, parent);
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
}
|
|
function modifierVisitor(node) {
|
|
if (ts.isDecorator(node))
|
|
return undefined;
|
|
if (ts.modifierToFlag(node.kind) & 116958) {
|
|
return undefined;
|
|
}
|
|
else if (currentNamespace && node.kind === 93) {
|
|
return undefined;
|
|
}
|
|
return node;
|
|
}
|
|
function visitTypeScript(node) {
|
|
if (ts.isStatement(node) && ts.hasSyntacticModifier(node, 2)) {
|
|
return factory.createNotEmittedStatement(node);
|
|
}
|
|
switch (node.kind) {
|
|
case 93:
|
|
case 88:
|
|
return currentNamespace ? undefined : node;
|
|
case 123:
|
|
case 121:
|
|
case 122:
|
|
case 126:
|
|
case 159:
|
|
case 85:
|
|
case 135:
|
|
case 145:
|
|
case 101:
|
|
case 144:
|
|
case 183:
|
|
case 184:
|
|
case 185:
|
|
case 186:
|
|
case 182:
|
|
case 177:
|
|
case 163:
|
|
case 130:
|
|
case 155:
|
|
case 133:
|
|
case 150:
|
|
case 147:
|
|
case 143:
|
|
case 114:
|
|
case 151:
|
|
case 180:
|
|
case 179:
|
|
case 181:
|
|
case 178:
|
|
case 187:
|
|
case 188:
|
|
case 189:
|
|
case 191:
|
|
case 192:
|
|
case 193:
|
|
case 194:
|
|
case 195:
|
|
case 196:
|
|
case 176:
|
|
return undefined;
|
|
case 259:
|
|
return factory.createNotEmittedStatement(node);
|
|
case 264:
|
|
return undefined;
|
|
case 258:
|
|
return factory.createNotEmittedStatement(node);
|
|
case 257:
|
|
return visitClassDeclaration(node);
|
|
case 226:
|
|
return visitClassExpression(node);
|
|
case 291:
|
|
return visitHeritageClause(node);
|
|
case 228:
|
|
return visitExpressionWithTypeArguments(node);
|
|
case 205:
|
|
return visitObjectLiteralExpression(node);
|
|
case 171:
|
|
case 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 170:
|
|
return ts.Debug.fail("Class and object literal elements must be visited with their respective visitors");
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 213:
|
|
return visitFunctionExpression(node);
|
|
case 214:
|
|
return visitArrowFunction(node);
|
|
case 164:
|
|
return visitParameter(node);
|
|
case 212:
|
|
return visitParenthesizedExpression(node);
|
|
case 211:
|
|
case 229:
|
|
return visitAssertionExpression(node);
|
|
case 208:
|
|
return visitCallExpression(node);
|
|
case 209:
|
|
return visitNewExpression(node);
|
|
case 210:
|
|
return visitTaggedTemplateExpression(node);
|
|
case 230:
|
|
return visitNonNullExpression(node);
|
|
case 260:
|
|
return visitEnumDeclaration(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 254:
|
|
return visitVariableDeclaration(node);
|
|
case 261:
|
|
return visitModuleDeclaration(node);
|
|
case 265:
|
|
return visitImportEqualsDeclaration(node);
|
|
case 279:
|
|
return visitJsxSelfClosingElement(node);
|
|
case 280:
|
|
return visitJsxJsxOpeningElement(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitSourceFile(node) {
|
|
var alwaysStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") &&
|
|
!(ts.isExternalModule(node) && moduleKind >= ts.ModuleKind.ES2015) &&
|
|
!ts.isJsonSourceFile(node);
|
|
return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, 0, alwaysStrict));
|
|
}
|
|
function visitObjectLiteralExpression(node) {
|
|
return factory.updateObjectLiteralExpression(node, ts.visitNodes(node.properties, getObjectLiteralElementVisitor(node), ts.isObjectLiteralElement));
|
|
}
|
|
function getClassFacts(node, staticProperties) {
|
|
var facts = 0;
|
|
if (ts.some(staticProperties))
|
|
facts |= 1;
|
|
var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
|
|
if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104)
|
|
facts |= 64;
|
|
if (ts.classOrConstructorParameterIsDecorated(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 hasTypeScriptClassSyntax(node) {
|
|
return !!(node.transformFlags & 8192);
|
|
}
|
|
function isClassLikeDeclarationWithTypeScriptSyntax(node) {
|
|
return ts.hasDecorators(node)
|
|
|| ts.some(node.typeParameters)
|
|
|| ts.some(node.heritageClauses, hasTypeScriptClassSyntax)
|
|
|| ts.some(node.members, hasTypeScriptClassSyntax);
|
|
}
|
|
function visitClassDeclaration(node) {
|
|
if (!isClassLikeDeclarationWithTypeScriptSyntax(node) && !(currentNamespace && ts.hasSyntacticModifier(node, 1))) {
|
|
return factory.updateClassDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, getClassElementVisitor(node), ts.isClassElement));
|
|
}
|
|
var staticProperties = ts.getProperties(node, true, true);
|
|
var facts = getClassFacts(node, staticProperties);
|
|
if (facts & 128) {
|
|
context.startLexicalEnvironment();
|
|
}
|
|
var name = node.name || (facts & 5 ? factory.getGeneratedNameForNode(node) : undefined);
|
|
var allDecorators = ts.getAllDecoratorsOfClass(node);
|
|
var decorators = transformAllDecoratorsOfDeclaration(node, node, allDecorators);
|
|
var modifiers = !(facts & 128)
|
|
? ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier)
|
|
: ts.elideNodes(factory, node.modifiers);
|
|
var classStatement = factory.updateClassDeclaration(node, ts.concatenate(decorators, modifiers), name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node));
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
if (facts & 1) {
|
|
emitFlags |= 32;
|
|
}
|
|
ts.setEmitFlags(classStatement, emitFlags);
|
|
var statements = [classStatement];
|
|
if (facts & 128) {
|
|
var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentSourceFile.text, node.members.end), 19);
|
|
var localName = factory.getInternalName(node);
|
|
var outer = factory.createPartiallyEmittedExpression(localName);
|
|
ts.setTextRangeEnd(outer, closingBraceLocation.end);
|
|
ts.setEmitFlags(outer, 1536);
|
|
var statement = factory.createReturnStatement(outer);
|
|
ts.setTextRangePos(statement, closingBraceLocation.pos);
|
|
ts.setEmitFlags(statement, 1536 | 384);
|
|
statements.push(statement);
|
|
ts.insertStatementsAfterStandardPrologue(statements, context.endLexicalEnvironment());
|
|
var iife = factory.createImmediatelyInvokedArrowFunction(statements);
|
|
ts.setEmitFlags(iife, 33554432);
|
|
var varStatement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.getLocalName(node, false, false), undefined, 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(factory.createExportDefault(factory.getLocalName(node, false, true)));
|
|
}
|
|
else if (facts & 16) {
|
|
statements.push(factory.createExternalModuleExport(factory.getLocalName(node, false, true)));
|
|
}
|
|
}
|
|
if (statements.length > 1) {
|
|
statements.push(factory.createEndOfDeclarationMarker(node));
|
|
ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 4194304);
|
|
}
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
function visitClassExpression(node) {
|
|
var allDecorators = ts.getAllDecoratorsOfClass(node);
|
|
var decorators = transformAllDecoratorsOfDeclaration(node, node, allDecorators);
|
|
return factory.updateClassExpression(node, decorators, node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), isClassLikeDeclarationWithTypeScriptSyntax(node) ?
|
|
transformClassMembers(node) :
|
|
ts.visitNodes(node.members, getClassElementVisitor(node), ts.isClassElement));
|
|
}
|
|
function transformClassMembers(node) {
|
|
var members = [];
|
|
var constructor = ts.getFirstConstructorWithBody(node);
|
|
var parametersWithPropertyAssignments = constructor &&
|
|
ts.filter(constructor.parameters, function (p) { return ts.isParameterPropertyDeclaration(p, constructor); });
|
|
if (parametersWithPropertyAssignments) {
|
|
for (var _i = 0, parametersWithPropertyAssignments_1 = parametersWithPropertyAssignments; _i < parametersWithPropertyAssignments_1.length; _i++) {
|
|
var parameter = parametersWithPropertyAssignments_1[_i];
|
|
if (ts.isIdentifier(parameter.name)) {
|
|
members.push(ts.setOriginalNode(factory.createPropertyDeclaration(undefined, parameter.name, undefined, undefined, undefined), parameter));
|
|
}
|
|
}
|
|
}
|
|
ts.addRange(members, ts.visitNodes(node.members, getClassElementVisitor(node), ts.isClassElement));
|
|
return ts.setTextRange(factory.createNodeArray(members), node.members);
|
|
}
|
|
function transformAllDecoratorsOfDeclaration(node, container, allDecorators) {
|
|
var _a, _b, _c, _d;
|
|
if (!allDecorators) {
|
|
return undefined;
|
|
}
|
|
var decorators = ts.visitArray(allDecorators.decorators, visitor, ts.isDecorator);
|
|
var parameterDecorators = ts.flatMap(allDecorators.parameters, transformDecoratorsOfParameter);
|
|
var metadataDecorators = ts.some(decorators) || ts.some(parameterDecorators) ? getTypeMetadata(node, container) : undefined;
|
|
var result = factory.createNodeArray(ts.concatenate(ts.concatenate(decorators, parameterDecorators), metadataDecorators));
|
|
var pos = (_b = (_a = ts.firstOrUndefined(allDecorators.decorators)) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : -1;
|
|
var end = (_d = (_c = ts.lastOrUndefined(allDecorators.decorators)) === null || _c === void 0 ? void 0 : _c.end) !== null && _d !== void 0 ? _d : -1;
|
|
ts.setTextRangePosEnd(result, pos, end);
|
|
return result;
|
|
}
|
|
function transformDecoratorsOfParameter(parameterDecorators, parameterOffset) {
|
|
if (parameterDecorators) {
|
|
var decorators = [];
|
|
for (var _i = 0, parameterDecorators_1 = parameterDecorators; _i < parameterDecorators_1.length; _i++) {
|
|
var parameterDecorator = parameterDecorators_1[_i];
|
|
var expression = ts.visitNode(parameterDecorator.expression, visitor, ts.isExpression);
|
|
var helper = emitHelpers().createParamHelper(expression, parameterOffset);
|
|
ts.setTextRange(helper, parameterDecorator.expression);
|
|
ts.setEmitFlags(helper, 1536);
|
|
var decorator = factory.createDecorator(helper);
|
|
ts.setSourceMapRange(decorator, parameterDecorator.expression);
|
|
ts.setCommentRange(decorator, parameterDecorator.expression);
|
|
ts.setEmitFlags(decorator, 1536);
|
|
decorators.push(decorator);
|
|
}
|
|
return decorators;
|
|
}
|
|
}
|
|
function getTypeMetadata(node, container) {
|
|
return USE_NEW_TYPE_METADATA_FORMAT ?
|
|
getNewTypeMetadata(node, container) :
|
|
getOldTypeMetadata(node, container);
|
|
}
|
|
function getOldTypeMetadata(node, container) {
|
|
if (typeSerializer) {
|
|
var decorators = void 0;
|
|
if (shouldAddTypeMetadata(node)) {
|
|
var typeMetadata = emitHelpers().createMetadataHelper("design:type", typeSerializer.serializeTypeOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node));
|
|
decorators = ts.append(decorators, factory.createDecorator(typeMetadata));
|
|
}
|
|
if (shouldAddParamTypesMetadata(node)) {
|
|
var paramTypesMetadata = emitHelpers().createMetadataHelper("design:paramtypes", typeSerializer.serializeParameterTypesOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node, container));
|
|
decorators = ts.append(decorators, factory.createDecorator(paramTypesMetadata));
|
|
}
|
|
if (shouldAddReturnTypeMetadata(node)) {
|
|
var returnTypeMetadata = emitHelpers().createMetadataHelper("design:returntype", typeSerializer.serializeReturnTypeOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node));
|
|
decorators = ts.append(decorators, factory.createDecorator(returnTypeMetadata));
|
|
}
|
|
return decorators;
|
|
}
|
|
}
|
|
function getNewTypeMetadata(node, container) {
|
|
if (typeSerializer) {
|
|
var properties = void 0;
|
|
if (shouldAddTypeMetadata(node)) {
|
|
var typeProperty = factory.createPropertyAssignment("type", factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(38), typeSerializer.serializeTypeOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node)));
|
|
properties = ts.append(properties, typeProperty);
|
|
}
|
|
if (shouldAddParamTypesMetadata(node)) {
|
|
var paramTypeProperty = factory.createPropertyAssignment("paramTypes", factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(38), typeSerializer.serializeParameterTypesOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node, container)));
|
|
properties = ts.append(properties, paramTypeProperty);
|
|
}
|
|
if (shouldAddReturnTypeMetadata(node)) {
|
|
var returnTypeProperty = factory.createPropertyAssignment("returnType", factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(38), typeSerializer.serializeReturnTypeOfNode({ currentLexicalScope: currentLexicalScope, currentNameScope: container }, node)));
|
|
properties = ts.append(properties, returnTypeProperty);
|
|
}
|
|
if (properties) {
|
|
var typeInfoMetadata = emitHelpers().createMetadataHelper("design:typeinfo", factory.createObjectLiteralExpression(properties, true));
|
|
return [factory.createDecorator(typeInfoMetadata)];
|
|
}
|
|
}
|
|
}
|
|
function shouldAddTypeMetadata(node) {
|
|
var kind = node.kind;
|
|
return kind === 169
|
|
|| kind === 172
|
|
|| kind === 173
|
|
|| kind === 167;
|
|
}
|
|
function shouldAddReturnTypeMetadata(node) {
|
|
return node.kind === 169;
|
|
}
|
|
function shouldAddParamTypesMetadata(node) {
|
|
switch (node.kind) {
|
|
case 257:
|
|
case 226:
|
|
return ts.getFirstConstructorWithBody(node) !== undefined;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getExpressionForPropertyName(member, generateNameForComputedPropertyName) {
|
|
var name = member.name;
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
return factory.createIdentifier("");
|
|
}
|
|
else if (ts.isComputedPropertyName(name)) {
|
|
return generateNameForComputedPropertyName && !ts.isSimpleInlineableExpression(name.expression)
|
|
? factory.getGeneratedNameForNode(name)
|
|
: name.expression;
|
|
}
|
|
else if (ts.isIdentifier(name)) {
|
|
return factory.createStringLiteral(ts.idText(name));
|
|
}
|
|
else {
|
|
return factory.cloneNode(name);
|
|
}
|
|
}
|
|
function visitPropertyNameOfClassElement(member) {
|
|
var name = member.name;
|
|
if (ts.isComputedPropertyName(name) && ((!ts.hasStaticModifier(member) && currentClassHasParameterProperties) || ts.hasDecorators(member))) {
|
|
var expression = ts.visitNode(name.expression, visitor, ts.isExpression);
|
|
var innerExpression = ts.skipPartiallyEmittedExpressions(expression);
|
|
if (!ts.isSimpleInlineableExpression(innerExpression)) {
|
|
var generatedName = factory.getGeneratedNameForNode(name);
|
|
hoistVariableDeclaration(generatedName);
|
|
return factory.updateComputedPropertyName(name, factory.createAssignment(generatedName, expression));
|
|
}
|
|
}
|
|
return ts.visitNode(name, visitor, ts.isPropertyName);
|
|
}
|
|
function visitHeritageClause(node) {
|
|
if (node.token === 117) {
|
|
return undefined;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitExpressionWithTypeArguments(node) {
|
|
return factory.updateExpressionWithTypeArguments(node, ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression), undefined);
|
|
}
|
|
function shouldEmitFunctionLikeDeclaration(node) {
|
|
return !ts.nodeIsMissing(node.body);
|
|
}
|
|
function visitPropertyDeclaration(node, parent) {
|
|
var isAmbient = node.flags & 16777216 || ts.hasSyntacticModifier(node, 128);
|
|
if (isAmbient && !ts.hasDecorators(node)) {
|
|
return undefined;
|
|
}
|
|
var allDecorators = ts.getAllDecoratorsOfClassElement(node, parent);
|
|
var decorators = transformAllDecoratorsOfDeclaration(node, parent, allDecorators);
|
|
if (isAmbient) {
|
|
return factory.updatePropertyDeclaration(node, ts.concatenate(decorators, factory.createModifiersFromModifierFlags(2)), ts.visitNode(node.name, visitor, ts.isPropertyName), undefined, undefined, undefined);
|
|
}
|
|
return factory.updatePropertyDeclaration(node, ts.concatenate(decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike)), visitPropertyNameOfClassElement(node), undefined, undefined, ts.visitNode(node.initializer, visitor));
|
|
}
|
|
function visitConstructor(node) {
|
|
if (!shouldEmitFunctionLikeDeclaration(node)) {
|
|
return undefined;
|
|
}
|
|
return factory.updateConstructorDeclaration(node, undefined, ts.visitParameterList(node.parameters, visitor, context), transformConstructorBody(node.body, node));
|
|
}
|
|
function transformConstructorBody(body, constructor) {
|
|
var parametersWithPropertyAssignments = constructor &&
|
|
ts.filter(constructor.parameters, function (p) { return ts.isParameterPropertyDeclaration(p, constructor); });
|
|
if (!ts.some(parametersWithPropertyAssignments)) {
|
|
return ts.visitFunctionBody(body, visitor, context);
|
|
}
|
|
var statements = [];
|
|
resumeLexicalEnvironment();
|
|
var prologueStatementCount = factory.copyPrologue(body.statements, statements, false, visitor);
|
|
var superStatementIndex = ts.findSuperStatementIndex(body.statements, prologueStatementCount);
|
|
if (superStatementIndex >= 0) {
|
|
ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, prologueStatementCount, superStatementIndex + 1 - prologueStatementCount));
|
|
}
|
|
var parameterPropertyAssignments = ts.mapDefined(parametersWithPropertyAssignments, transformParameterWithPropertyAssignment);
|
|
if (superStatementIndex >= 0) {
|
|
ts.addRange(statements, parameterPropertyAssignments);
|
|
}
|
|
else {
|
|
statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, prologueStatementCount), true), parameterPropertyAssignments, true), statements.slice(prologueStatementCount), true);
|
|
}
|
|
var start = superStatementIndex >= 0 ? superStatementIndex + 1 : prologueStatementCount;
|
|
ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, start));
|
|
statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
|
|
var block = factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), body.statements), true);
|
|
ts.setTextRange(block, body);
|
|
ts.setOriginalNode(block, body);
|
|
return block;
|
|
}
|
|
function transformParameterWithPropertyAssignment(node) {
|
|
var name = node.name;
|
|
if (!ts.isIdentifier(name)) {
|
|
return undefined;
|
|
}
|
|
var propertyName = ts.setParent(ts.setTextRange(factory.cloneNode(name), name), name.parent);
|
|
ts.setEmitFlags(propertyName, 1536 | 48);
|
|
var localName = ts.setParent(ts.setTextRange(factory.cloneNode(name), name), name.parent);
|
|
ts.setEmitFlags(localName, 1536);
|
|
return ts.startOnNewLine(ts.removeAllComments(ts.setTextRange(ts.setOriginalNode(factory.createExpressionStatement(factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createThis(), propertyName), node.name), localName)), node), ts.moveRangePos(node, -1))));
|
|
}
|
|
function visitMethodDeclaration(node, parent) {
|
|
if (!(node.transformFlags & 1)) {
|
|
return node;
|
|
}
|
|
if (!shouldEmitFunctionLikeDeclaration(node)) {
|
|
return undefined;
|
|
}
|
|
var allDecorators = ts.isClassLike(parent) ? ts.getAllDecoratorsOfClassElement(node, parent) : undefined;
|
|
var decorators = ts.isClassLike(parent) ? transformAllDecoratorsOfDeclaration(node, parent, allDecorators) : undefined;
|
|
return factory.updateMethodDeclaration(node, ts.concatenate(decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike)), node.asteriskToken, visitPropertyNameOfClassElement(node), undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context));
|
|
}
|
|
function shouldEmitAccessorDeclaration(node) {
|
|
return !(ts.nodeIsMissing(node.body) && ts.hasSyntacticModifier(node, 128));
|
|
}
|
|
function visitGetAccessor(node, parent) {
|
|
if (!(node.transformFlags & 1)) {
|
|
return node;
|
|
}
|
|
if (!shouldEmitAccessorDeclaration(node)) {
|
|
return undefined;
|
|
}
|
|
var decorators = ts.isClassLike(parent) ?
|
|
transformAllDecoratorsOfDeclaration(node, parent, ts.getAllDecoratorsOfClassElement(node, parent)) :
|
|
undefined;
|
|
return factory.updateGetAccessorDeclaration(node, ts.concatenate(decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike)), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || factory.createBlock([]));
|
|
}
|
|
function visitSetAccessor(node, parent) {
|
|
if (!(node.transformFlags & 1)) {
|
|
return node;
|
|
}
|
|
if (!shouldEmitAccessorDeclaration(node)) {
|
|
return undefined;
|
|
}
|
|
var decorators = ts.isClassLike(parent) ?
|
|
transformAllDecoratorsOfDeclaration(node, parent, ts.getAllDecoratorsOfClassElement(node, parent)) :
|
|
undefined;
|
|
return factory.updateSetAccessorDeclaration(node, ts.concatenate(decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike)), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), ts.visitFunctionBody(node.body, visitor, context) || factory.createBlock([]));
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
if (!shouldEmitFunctionLikeDeclaration(node)) {
|
|
return factory.createNotEmittedStatement(node);
|
|
}
|
|
var updated = factory.updateFunctionDeclaration(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) || factory.createBlock([]));
|
|
if (isExportOfNamespace(node)) {
|
|
var statements = [updated];
|
|
addExportMemberAssignment(statements, node);
|
|
return statements;
|
|
}
|
|
return updated;
|
|
}
|
|
function visitFunctionExpression(node) {
|
|
if (!shouldEmitFunctionLikeDeclaration(node)) {
|
|
return factory.createOmittedExpression();
|
|
}
|
|
var updated = factory.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) || factory.createBlock([]));
|
|
return updated;
|
|
}
|
|
function visitArrowFunction(node) {
|
|
var updated = factory.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 updated = factory.updateParameterDeclaration(node, ts.elideNodes(factory, node.modifiers), node.dotDotDotToken, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
|
|
if (updated !== node) {
|
|
ts.setCommentRange(updated, node);
|
|
ts.setTextRange(updated, ts.moveRangePastModifiers(node));
|
|
ts.setSourceMapRange(updated, ts.moveRangePastModifiers(node));
|
|
ts.setEmitFlags(updated.name, 32);
|
|
}
|
|
return updated;
|
|
}
|
|
function visitVariableStatement(node) {
|
|
if (isExportOfNamespace(node)) {
|
|
var variables = ts.getInitializedVariables(node.declarationList);
|
|
if (variables.length === 0) {
|
|
return undefined;
|
|
}
|
|
return ts.setTextRange(factory.createExpressionStatement(factory.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(factory.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), ts.visitNode(node.initializer, visitor, ts.isExpression)), node);
|
|
}
|
|
}
|
|
function visitVariableDeclaration(node) {
|
|
var updated = factory.updateVariableDeclaration(node, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
|
|
if (node.type) {
|
|
ts.setTypeNode(updated.name, node.type);
|
|
}
|
|
return updated;
|
|
}
|
|
function visitParenthesizedExpression(node) {
|
|
var innerExpression = ts.skipOuterExpressions(node.expression, ~6);
|
|
if (ts.isAssertionExpression(innerExpression)) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
return factory.createPartiallyEmittedExpression(expression, node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitAssertionExpression(node) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
return factory.createPartiallyEmittedExpression(expression, node);
|
|
}
|
|
function visitNonNullExpression(node) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression);
|
|
return factory.createPartiallyEmittedExpression(expression, node);
|
|
}
|
|
function visitCallExpression(node) {
|
|
return factory.updateCallExpression(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression));
|
|
}
|
|
function visitNewExpression(node) {
|
|
return factory.updateNewExpression(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression));
|
|
}
|
|
function visitTaggedTemplateExpression(node) {
|
|
return factory.updateTaggedTemplateExpression(node, ts.visitNode(node.tag, visitor, ts.isExpression), undefined, ts.visitNode(node.template, visitor, ts.isExpression));
|
|
}
|
|
function visitJsxSelfClosingElement(node) {
|
|
return factory.updateJsxSelfClosingElement(node, ts.visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), undefined, ts.visitNode(node.attributes, visitor, ts.isJsxAttributes));
|
|
}
|
|
function visitJsxJsxOpeningElement(node) {
|
|
return factory.updateJsxOpeningElement(node, ts.visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), undefined, ts.visitNode(node.attributes, visitor, ts.isJsxAttributes));
|
|
}
|
|
function shouldEmitEnumDeclaration(node) {
|
|
return !ts.isEnumConst(node)
|
|
|| ts.shouldPreserveConstEnums(compilerOptions);
|
|
}
|
|
function visitEnumDeclaration(node) {
|
|
if (!shouldEmitEnumDeclaration(node)) {
|
|
return factory.createNotEmittedStatement(node);
|
|
}
|
|
var statements = [];
|
|
var emitFlags = 2;
|
|
var varAdded = addVarForEnumOrModuleDeclaration(statements, node);
|
|
if (varAdded) {
|
|
if (moduleKind !== ts.ModuleKind.System || currentLexicalScope !== currentSourceFile) {
|
|
emitFlags |= 512;
|
|
}
|
|
}
|
|
var parameterName = getNamespaceParameterName(node);
|
|
var containerName = getNamespaceContainerName(node);
|
|
var exportName = ts.hasSyntacticModifier(node, 1)
|
|
? factory.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true)
|
|
: factory.getLocalName(node, false, true);
|
|
var moduleArg = factory.createLogicalOr(exportName, factory.createAssignment(exportName, factory.createObjectLiteralExpression()));
|
|
if (hasNamespaceQualifiedExportName(node)) {
|
|
var localName = factory.getLocalName(node, false, true);
|
|
moduleArg = factory.createAssignment(localName, moduleArg);
|
|
}
|
|
var enumStatement = factory.createExpressionStatement(factory.createCallExpression(factory.createFunctionExpression(undefined, undefined, undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, parameterName)], undefined, transformEnumBody(node, containerName)), undefined, [moduleArg]));
|
|
ts.setOriginalNode(enumStatement, node);
|
|
if (varAdded) {
|
|
ts.setSyntheticLeadingComments(enumStatement, undefined);
|
|
ts.setSyntheticTrailingComments(enumStatement, undefined);
|
|
}
|
|
ts.setTextRange(enumStatement, node);
|
|
ts.addEmitFlags(enumStatement, emitFlags);
|
|
statements.push(enumStatement);
|
|
statements.push(factory.createEndOfDeclarationMarker(node));
|
|
return statements;
|
|
}
|
|
function transformEnumBody(node, localName) {
|
|
var savedCurrentNamespaceLocalName = currentNamespaceContainerName;
|
|
currentNamespaceContainerName = localName;
|
|
var statements = [];
|
|
startLexicalEnvironment();
|
|
var members = ts.map(node.members, transformEnumMember);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
ts.addRange(statements, members);
|
|
currentNamespaceContainerName = savedCurrentNamespaceLocalName;
|
|
return factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), node.members), true);
|
|
}
|
|
function transformEnumMember(member) {
|
|
var name = getExpressionForPropertyName(member, false);
|
|
var valueExpression = transformEnumMemberDeclarationValue(member);
|
|
var innerAssignment = factory.createAssignment(factory.createElementAccessExpression(currentNamespaceContainerName, name), valueExpression);
|
|
var outerAssignment = valueExpression.kind === 10 ?
|
|
innerAssignment :
|
|
factory.createAssignment(factory.createElementAccessExpression(currentNamespaceContainerName, innerAssignment), name);
|
|
return ts.setTextRange(factory.createExpressionStatement(ts.setTextRange(outerAssignment, member)), member);
|
|
}
|
|
function transformEnumMemberDeclarationValue(member) {
|
|
var value = resolver.getConstantValue(member);
|
|
if (value !== undefined) {
|
|
return typeof value === "string" ? factory.createStringLiteral(value) : factory.createNumericLiteral(value);
|
|
}
|
|
else {
|
|
enableSubstitutionForNonQualifiedEnumMembers();
|
|
if (member.initializer) {
|
|
return ts.visitNode(member.initializer, visitor, ts.isExpression);
|
|
}
|
|
else {
|
|
return factory.createVoidZero();
|
|
}
|
|
}
|
|
}
|
|
function shouldEmitModuleDeclaration(nodeIn) {
|
|
var node = ts.getParseTreeNode(nodeIn, ts.isModuleDeclaration);
|
|
if (!node) {
|
|
return true;
|
|
}
|
|
return ts.isInstantiatedModule(node, ts.shouldPreserveConstEnums(compilerOptions));
|
|
}
|
|
function hasNamespaceQualifiedExportName(node) {
|
|
return isExportOfNamespace(node)
|
|
|| (isExternalModuleExport(node)
|
|
&& moduleKind !== ts.ModuleKind.ES2015
|
|
&& moduleKind !== ts.ModuleKind.ES2020
|
|
&& moduleKind !== ts.ModuleKind.ES2022
|
|
&& moduleKind !== ts.ModuleKind.ESNext
|
|
&& moduleKind !== ts.ModuleKind.System);
|
|
}
|
|
function recordEmittedDeclarationInScope(node) {
|
|
if (!currentScopeFirstDeclarationsOfName) {
|
|
currentScopeFirstDeclarationsOfName = new ts.Map();
|
|
}
|
|
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 = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.getLocalName(node, false, true))
|
|
], currentLexicalScope.kind === 305 ? 0 : 1));
|
|
ts.setOriginalNode(statement, node);
|
|
recordEmittedDeclarationInScope(node);
|
|
if (isFirstEmittedDeclarationInScope(node)) {
|
|
if (node.kind === 260) {
|
|
ts.setSourceMapRange(statement.declarationList, node);
|
|
}
|
|
else {
|
|
ts.setSourceMapRange(statement, node);
|
|
}
|
|
ts.setCommentRange(statement, node);
|
|
ts.addEmitFlags(statement, 1024 | 4194304);
|
|
statements.push(statement);
|
|
return true;
|
|
}
|
|
else {
|
|
var mergeMarker = factory.createMergeDeclarationMarker(statement);
|
|
ts.setEmitFlags(mergeMarker, 1536 | 4194304);
|
|
statements.push(mergeMarker);
|
|
return false;
|
|
}
|
|
}
|
|
function visitModuleDeclaration(node) {
|
|
if (!shouldEmitModuleDeclaration(node)) {
|
|
return factory.createNotEmittedStatement(node);
|
|
}
|
|
ts.Debug.assertNode(node.name, ts.isIdentifier, "A TypeScript namespace should have an Identifier name.");
|
|
enableSubstitutionForNamespaceExports();
|
|
var statements = [];
|
|
var emitFlags = 2;
|
|
var varAdded = addVarForEnumOrModuleDeclaration(statements, node);
|
|
if (varAdded) {
|
|
if (moduleKind !== ts.ModuleKind.System || currentLexicalScope !== currentSourceFile) {
|
|
emitFlags |= 512;
|
|
}
|
|
}
|
|
var parameterName = getNamespaceParameterName(node);
|
|
var containerName = getNamespaceContainerName(node);
|
|
var exportName = ts.hasSyntacticModifier(node, 1)
|
|
? factory.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true)
|
|
: factory.getLocalName(node, false, true);
|
|
var moduleArg = factory.createLogicalOr(exportName, factory.createAssignment(exportName, factory.createObjectLiteralExpression()));
|
|
if (hasNamespaceQualifiedExportName(node)) {
|
|
var localName = factory.getLocalName(node, false, true);
|
|
moduleArg = factory.createAssignment(localName, moduleArg);
|
|
}
|
|
var moduleStatement = factory.createExpressionStatement(factory.createCallExpression(factory.createFunctionExpression(undefined, undefined, undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, parameterName)], undefined, transformModuleBody(node, containerName)), undefined, [moduleArg]));
|
|
ts.setOriginalNode(moduleStatement, node);
|
|
if (varAdded) {
|
|
ts.setSyntheticLeadingComments(moduleStatement, undefined);
|
|
ts.setSyntheticTrailingComments(moduleStatement, undefined);
|
|
}
|
|
ts.setTextRange(moduleStatement, node);
|
|
ts.addEmitFlags(moduleStatement, emitFlags);
|
|
statements.push(moduleStatement);
|
|
statements.push(factory.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;
|
|
if (node.body) {
|
|
if (node.body.kind === 262) {
|
|
saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
|
|
statementsLocation = node.body.statements;
|
|
blockLocation = node.body;
|
|
}
|
|
else {
|
|
var result = visitModuleDeclaration(node.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.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
currentNamespaceContainerName = savedCurrentNamespaceContainerName;
|
|
currentNamespace = savedCurrentNamespace;
|
|
currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
|
|
var block = factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), statementsLocation), true);
|
|
ts.setTextRange(block, blockLocation);
|
|
if (!node.body || node.body.kind !== 262) {
|
|
ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536);
|
|
}
|
|
return block;
|
|
}
|
|
function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
|
|
if (moduleDeclaration.body.kind === 261) {
|
|
var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
|
|
return recursiveInnerModule || moduleDeclaration.body;
|
|
}
|
|
}
|
|
function visitImportDeclaration(node) {
|
|
if (!node.importClause) {
|
|
return node;
|
|
}
|
|
if (node.importClause.isTypeOnly) {
|
|
return undefined;
|
|
}
|
|
var importClause = ts.visitNode(node.importClause, visitImportClause, ts.isImportClause);
|
|
return importClause ||
|
|
compilerOptions.importsNotUsedAsValues === 1 ||
|
|
compilerOptions.importsNotUsedAsValues === 2
|
|
? factory.updateImportDeclaration(node, undefined, importClause, node.moduleSpecifier, node.assertClause)
|
|
: undefined;
|
|
}
|
|
function visitImportClause(node) {
|
|
ts.Debug.assert(!node.isTypeOnly);
|
|
var name = shouldEmitAliasDeclaration(node) ? node.name : undefined;
|
|
var namedBindings = ts.visitNode(node.namedBindings, visitNamedImportBindings, ts.isNamedImportBindings);
|
|
return (name || namedBindings) ? factory.updateImportClause(node, false, name, namedBindings) : undefined;
|
|
}
|
|
function visitNamedImportBindings(node) {
|
|
if (node.kind === 268) {
|
|
return shouldEmitAliasDeclaration(node) ? node : undefined;
|
|
}
|
|
else {
|
|
var allowEmpty = compilerOptions.preserveValueImports && (compilerOptions.importsNotUsedAsValues === 1 ||
|
|
compilerOptions.importsNotUsedAsValues === 2);
|
|
var elements = ts.visitNodes(node.elements, visitImportSpecifier, ts.isImportSpecifier);
|
|
return allowEmpty || ts.some(elements) ? factory.updateNamedImports(node, elements) : undefined;
|
|
}
|
|
}
|
|
function visitImportSpecifier(node) {
|
|
return !node.isTypeOnly && shouldEmitAliasDeclaration(node) ? node : undefined;
|
|
}
|
|
function visitExportAssignment(node) {
|
|
return resolver.isValueAliasDeclaration(node)
|
|
? ts.visitEachChild(node, visitor, context)
|
|
: undefined;
|
|
}
|
|
function visitExportDeclaration(node) {
|
|
if (node.isTypeOnly) {
|
|
return undefined;
|
|
}
|
|
if (!node.exportClause || ts.isNamespaceExport(node.exportClause)) {
|
|
return node;
|
|
}
|
|
var allowEmpty = !!node.moduleSpecifier && (compilerOptions.importsNotUsedAsValues === 1 ||
|
|
compilerOptions.importsNotUsedAsValues === 2);
|
|
var exportClause = ts.visitNode(node.exportClause, function (bindings) { return visitNamedExportBindings(bindings, allowEmpty); }, ts.isNamedExportBindings);
|
|
return exportClause
|
|
? factory.updateExportDeclaration(node, undefined, node.isTypeOnly, exportClause, node.moduleSpecifier, node.assertClause)
|
|
: undefined;
|
|
}
|
|
function visitNamedExports(node, allowEmpty) {
|
|
var elements = ts.visitNodes(node.elements, visitExportSpecifier, ts.isExportSpecifier);
|
|
return allowEmpty || ts.some(elements) ? factory.updateNamedExports(node, elements) : undefined;
|
|
}
|
|
function visitNamespaceExports(node) {
|
|
return factory.updateNamespaceExport(node, ts.visitNode(node.name, visitor, ts.isIdentifier));
|
|
}
|
|
function visitNamedExportBindings(node, allowEmpty) {
|
|
return ts.isNamespaceExport(node) ? visitNamespaceExports(node) : visitNamedExports(node, allowEmpty);
|
|
}
|
|
function visitExportSpecifier(node) {
|
|
return !node.isTypeOnly && resolver.isValueAliasDeclaration(node) ? node : undefined;
|
|
}
|
|
function shouldEmitImportEqualsDeclaration(node) {
|
|
return shouldEmitAliasDeclaration(node)
|
|
|| (!ts.isExternalModule(currentSourceFile)
|
|
&& resolver.isTopLevelValueImportEqualsWithEntityName(node));
|
|
}
|
|
function visitImportEqualsDeclaration(node) {
|
|
if (node.isTypeOnly) {
|
|
return undefined;
|
|
}
|
|
if (ts.isExternalModuleImportEqualsDeclaration(node)) {
|
|
var isReferenced = shouldEmitAliasDeclaration(node);
|
|
if (!isReferenced && compilerOptions.importsNotUsedAsValues === 1) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createImportDeclaration(undefined, undefined, node.moduleReference.expression, undefined), node), node);
|
|
}
|
|
return isReferenced ? ts.visitEachChild(node, visitor, context) : undefined;
|
|
}
|
|
if (!shouldEmitImportEqualsDeclaration(node)) {
|
|
return undefined;
|
|
}
|
|
var moduleReference = ts.createExpressionFromEntityName(factory, node.moduleReference);
|
|
ts.setEmitFlags(moduleReference, 1536 | 2048);
|
|
if (isNamedExternalModuleExport(node) || !isExportOfNamespace(node)) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
|
|
ts.setOriginalNode(factory.createVariableDeclaration(node.name, undefined, undefined, moduleReference), node)
|
|
])), node), node);
|
|
}
|
|
else {
|
|
return ts.setOriginalNode(createNamespaceExport(node.name, moduleReference, node), node);
|
|
}
|
|
}
|
|
function isExportOfNamespace(node) {
|
|
return currentNamespace !== undefined && ts.hasSyntacticModifier(node, 1);
|
|
}
|
|
function isExternalModuleExport(node) {
|
|
return currentNamespace === undefined && ts.hasSyntacticModifier(node, 1);
|
|
}
|
|
function isNamedExternalModuleExport(node) {
|
|
return isExternalModuleExport(node)
|
|
&& !ts.hasSyntacticModifier(node, 512);
|
|
}
|
|
function isDefaultExternalModuleExport(node) {
|
|
return isExternalModuleExport(node)
|
|
&& ts.hasSyntacticModifier(node, 512);
|
|
}
|
|
function addExportMemberAssignment(statements, node) {
|
|
var expression = factory.createAssignment(factory.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true), factory.getLocalName(node));
|
|
ts.setSourceMapRange(expression, ts.createRange(node.name ? node.name.pos : node.pos, node.end));
|
|
var statement = factory.createExpressionStatement(expression);
|
|
ts.setSourceMapRange(statement, ts.createRange(-1, node.end));
|
|
statements.push(statement);
|
|
}
|
|
function createNamespaceExport(exportName, exportValue, location) {
|
|
return ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(factory.getNamespaceMemberName(currentNamespaceContainerName, exportName, false, true), exportValue)), location);
|
|
}
|
|
function createNamespaceExportExpression(exportName, exportValue, location) {
|
|
return ts.setTextRange(factory.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(exportName), exportValue), location);
|
|
}
|
|
function getNamespaceMemberNameWithSourceMapsAndWithoutComments(name) {
|
|
return factory.getNamespaceMemberName(currentNamespaceContainerName, name, false, true);
|
|
}
|
|
function getNamespaceParameterName(node) {
|
|
var name = factory.getGeneratedNameForNode(node);
|
|
ts.setSourceMapRange(name, node.name);
|
|
return name;
|
|
}
|
|
function getNamespaceContainerName(node) {
|
|
return factory.getGeneratedNameForNode(node);
|
|
}
|
|
function enableSubstitutionForNonQualifiedEnumMembers() {
|
|
if ((enabledSubstitutions & 8) === 0) {
|
|
enabledSubstitutions |= 8;
|
|
context.enableSubstitution(79);
|
|
}
|
|
}
|
|
function enableSubstitutionForNamespaceExports() {
|
|
if ((enabledSubstitutions & 2) === 0) {
|
|
enabledSubstitutions |= 2;
|
|
context.enableSubstitution(79);
|
|
context.enableSubstitution(297);
|
|
context.enableEmitNotification(261);
|
|
}
|
|
}
|
|
function isTransformedModuleDeclaration(node) {
|
|
return ts.getOriginalNode(node).kind === 261;
|
|
}
|
|
function isTransformedEnumDeclaration(node) {
|
|
return ts.getOriginalNode(node).kind === 260;
|
|
}
|
|
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 = factory.createAssignment(exportedName, node.objectAssignmentInitializer);
|
|
return ts.setTextRange(factory.createPropertyAssignment(name, initializer), node);
|
|
}
|
|
return ts.setTextRange(factory.createPropertyAssignment(name, exportedName), node);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
case 206:
|
|
return substitutePropertyAccessExpression(node);
|
|
case 207:
|
|
return substituteElementAccessExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpressionIdentifier(node) {
|
|
return trySubstituteNamespaceExportedName(node)
|
|
|| node;
|
|
}
|
|
function trySubstituteNamespaceExportedName(node) {
|
|
if (enabledSubstitutions & applicableSubstitutions && !ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
|
|
var container = resolver.getReferencedExportContainer(node, false);
|
|
if (container && container.kind !== 305) {
|
|
var substitute = (applicableSubstitutions & 2 && container.kind === 261) ||
|
|
(applicableSubstitutions & 8 && container.kind === 260);
|
|
if (substitute) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), node);
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function substitutePropertyAccessExpression(node) {
|
|
return substituteConstantValue(node);
|
|
}
|
|
function substituteElementAccessExpression(node) {
|
|
return substituteConstantValue(node);
|
|
}
|
|
function safeMultiLineComment(value) {
|
|
return value.replace(/\*\//g, "*_/");
|
|
}
|
|
function substituteConstantValue(node) {
|
|
var constantValue = tryGetConstEnumValue(node);
|
|
if (constantValue !== undefined) {
|
|
ts.setConstantValue(node, constantValue);
|
|
var substitute = typeof constantValue === "string" ? factory.createStringLiteral(constantValue) : factory.createNumericLiteral(constantValue);
|
|
if (!compilerOptions.removeComments) {
|
|
var originalNode = ts.getOriginalNode(node, ts.isAccessExpression);
|
|
ts.addSyntheticTrailingComment(substitute, 3, " ".concat(safeMultiLineComment(ts.getTextOfNode(originalNode)), " "));
|
|
}
|
|
return substitute;
|
|
}
|
|
return node;
|
|
}
|
|
function tryGetConstEnumValue(node) {
|
|
if (compilerOptions.isolatedModules) {
|
|
return undefined;
|
|
}
|
|
return ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node) ? resolver.getConstantValue(node) : undefined;
|
|
}
|
|
function shouldEmitAliasDeclaration(node) {
|
|
return compilerOptions.preserveValueImports
|
|
? resolver.isValueAliasDeclaration(node)
|
|
: resolver.isReferencedAliasDeclaration(node);
|
|
}
|
|
}
|
|
ts.transformTypeScript = transformTypeScript;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformClassFields(context) {
|
|
var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
|
|
var resolver = context.getEmitResolver();
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
|
|
var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 9;
|
|
var shouldTransformThisInStaticInitializers = languageVersion < 9;
|
|
var shouldTransformSuperInStaticInitializers = shouldTransformThisInStaticInitializers && languageVersion >= 2;
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
var previousOnEmitNode = context.onEmitNode;
|
|
context.onEmitNode = onEmitNode;
|
|
var enabledSubstitutions;
|
|
var classAliases;
|
|
var pendingExpressions;
|
|
var pendingStatements;
|
|
var classLexicalEnvironmentStack = [];
|
|
var classLexicalEnvironmentMap = new ts.Map();
|
|
var currentClassLexicalEnvironment;
|
|
var currentComputedPropertyNameClassLexicalEnvironment;
|
|
var currentStaticPropertyDeclarationOrStaticBlock;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
var options = context.getCompilerOptions();
|
|
if (node.isDeclarationFile
|
|
|| useDefineForClassFields && ts.getEmitScriptTarget(options) >= 9) {
|
|
return node;
|
|
}
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
ts.addEmitHelpers(visited, context.readEmitHelpers());
|
|
return visited;
|
|
}
|
|
function visitorWorker(node, valueIsDiscarded) {
|
|
if (node.transformFlags & 16777216) {
|
|
switch (node.kind) {
|
|
case 226:
|
|
case 257:
|
|
return visitClassLike(node);
|
|
case 167:
|
|
return visitPropertyDeclaration(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 80:
|
|
return visitPrivateIdentifier(node);
|
|
case 170:
|
|
return visitClassStaticBlockDeclaration(node);
|
|
}
|
|
}
|
|
if (node.transformFlags & 16777216 ||
|
|
node.transformFlags & 134217728 &&
|
|
shouldTransformSuperInStaticInitializers &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
switch (node.kind) {
|
|
case 219:
|
|
case 220:
|
|
return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
|
|
case 221:
|
|
return visitBinaryExpression(node, valueIsDiscarded);
|
|
case 208:
|
|
return visitCallExpression(node);
|
|
case 210:
|
|
return visitTaggedTemplateExpression(node);
|
|
case 206:
|
|
return visitPropertyAccessExpression(node);
|
|
case 207:
|
|
return visitElementAccessExpression(node);
|
|
case 238:
|
|
return visitExpressionStatement(node);
|
|
case 242:
|
|
return visitForStatement(node);
|
|
case 256:
|
|
case 213:
|
|
case 171:
|
|
case 169:
|
|
case 172:
|
|
case 173: {
|
|
var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
|
|
currentStaticPropertyDeclarationOrStaticBlock = undefined;
|
|
var result = ts.visitEachChild(node, visitor, context);
|
|
currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function discardedValueVisitor(node) {
|
|
return visitorWorker(node, true);
|
|
}
|
|
function visitor(node) {
|
|
return visitorWorker(node, false);
|
|
}
|
|
function heritageClauseVisitor(node) {
|
|
switch (node.kind) {
|
|
case 291:
|
|
return ts.visitEachChild(node, heritageClauseVisitor, context);
|
|
case 228:
|
|
return visitExpressionWithTypeArguments(node);
|
|
}
|
|
return visitor(node);
|
|
}
|
|
function visitorDestructuringTarget(node) {
|
|
switch (node.kind) {
|
|
case 205:
|
|
case 204:
|
|
return visitAssignmentPattern(node);
|
|
default:
|
|
return visitor(node);
|
|
}
|
|
}
|
|
function visitPrivateIdentifier(node) {
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
return node;
|
|
}
|
|
if (ts.isStatement(node.parent)) {
|
|
return node;
|
|
}
|
|
return ts.setOriginalNode(factory.createIdentifier(""), node);
|
|
}
|
|
function visitPrivateIdentifierInInExpression(node) {
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
return node;
|
|
}
|
|
var privId = node.left;
|
|
ts.Debug.assertNode(privId, ts.isPrivateIdentifier);
|
|
ts.Debug.assert(node.operatorToken.kind === 101);
|
|
var info = accessPrivateIdentifier(privId);
|
|
if (info) {
|
|
var receiver = ts.visitNode(node.right, visitor, ts.isExpression);
|
|
return ts.setOriginalNode(context.getEmitHelperFactory().createClassPrivateFieldInHelper(info.brandCheckIdentifier, receiver), node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function classElementVisitor(node) {
|
|
switch (node.kind) {
|
|
case 171:
|
|
return undefined;
|
|
case 172:
|
|
case 173:
|
|
case 169:
|
|
return visitMethodOrAccessorDeclaration(node);
|
|
case 167:
|
|
return visitPropertyDeclaration(node);
|
|
case 162:
|
|
return visitComputedPropertyName(node);
|
|
case 234:
|
|
return node;
|
|
default:
|
|
return visitor(node);
|
|
}
|
|
}
|
|
function visitVariableStatement(node) {
|
|
var savedPendingStatements = pendingStatements;
|
|
pendingStatements = [];
|
|
var visitedNode = ts.visitEachChild(node, visitor, context);
|
|
var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
|
|
visitedNode;
|
|
pendingStatements = savedPendingStatements;
|
|
return statement;
|
|
}
|
|
function visitComputedPropertyName(name) {
|
|
var node = ts.visitEachChild(name, visitor, context);
|
|
if (ts.some(pendingExpressions)) {
|
|
var expressions = pendingExpressions;
|
|
expressions.push(node.expression);
|
|
pendingExpressions = [];
|
|
node = factory.updateComputedPropertyName(node, factory.inlineExpressions(expressions));
|
|
}
|
|
return node;
|
|
}
|
|
function visitMethodOrAccessorDeclaration(node) {
|
|
ts.Debug.assert(!ts.hasDecorators(node));
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
|
|
return ts.visitEachChild(node, classElementVisitor, context);
|
|
}
|
|
var info = accessPrivateIdentifier(node.name);
|
|
ts.Debug.assert(info, "Undeclared private name for property declaration.");
|
|
if (!info.isValid) {
|
|
return node;
|
|
}
|
|
var functionName = getHoistedFunctionName(node);
|
|
if (functionName) {
|
|
getPendingExpressions().push(factory.createAssignment(functionName, factory.createFunctionExpression(ts.filter(node.modifiers, function (m) { return ts.isModifier(m) && !ts.isStaticModifier(m); }), node.asteriskToken, functionName, undefined, ts.visitParameterList(node.parameters, classElementVisitor, context), undefined, ts.visitFunctionBody(node.body, classElementVisitor, context))));
|
|
}
|
|
return undefined;
|
|
}
|
|
function getHoistedFunctionName(node) {
|
|
ts.Debug.assert(ts.isPrivateIdentifier(node.name));
|
|
var info = accessPrivateIdentifier(node.name);
|
|
ts.Debug.assert(info, "Undeclared private name for property declaration.");
|
|
if (info.kind === "m") {
|
|
return info.methodName;
|
|
}
|
|
if (info.kind === "a") {
|
|
if (ts.isGetAccessor(node)) {
|
|
return info.getterName;
|
|
}
|
|
if (ts.isSetAccessor(node)) {
|
|
return info.setterName;
|
|
}
|
|
}
|
|
}
|
|
function visitPropertyDeclaration(node) {
|
|
ts.Debug.assert(!ts.hasDecorators(node));
|
|
if (ts.isPrivateIdentifier(node.name)) {
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
if (ts.isStatic(node)) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
return factory.updatePropertyDeclaration(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), node.name, undefined, undefined, undefined);
|
|
}
|
|
var info = accessPrivateIdentifier(node.name);
|
|
ts.Debug.assert(info, "Undeclared private name for property declaration.");
|
|
if (!info.isValid) {
|
|
return node;
|
|
}
|
|
}
|
|
var expr = getPropertyNameExpressionIfNeeded(node.name, !!node.initializer || useDefineForClassFields);
|
|
if (expr && !ts.isSimpleInlineableExpression(expr)) {
|
|
getPendingExpressions().push(expr);
|
|
}
|
|
if (ts.isStatic(node) && !shouldTransformPrivateElementsOrClassStaticBlocks && !useDefineForClassFields) {
|
|
var initializerStatement = transformPropertyOrClassStaticBlock(node, factory.createThis());
|
|
if (initializerStatement) {
|
|
var staticBlock = factory.createClassStaticBlockDeclaration(factory.createBlock([initializerStatement]));
|
|
ts.setOriginalNode(staticBlock, node);
|
|
ts.setCommentRange(staticBlock, node);
|
|
ts.setCommentRange(initializerStatement, { pos: -1, end: -1 });
|
|
ts.setSyntheticLeadingComments(initializerStatement, undefined);
|
|
ts.setSyntheticTrailingComments(initializerStatement, undefined);
|
|
return staticBlock;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function createPrivateIdentifierAccess(info, receiver) {
|
|
return createPrivateIdentifierAccessHelper(info, ts.visitNode(receiver, visitor, ts.isExpression));
|
|
}
|
|
function createPrivateIdentifierAccessHelper(info, receiver) {
|
|
ts.setCommentRange(receiver, ts.moveRangePos(receiver, -1));
|
|
switch (info.kind) {
|
|
case "a":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldGetHelper(receiver, info.brandCheckIdentifier, info.kind, info.getterName);
|
|
case "m":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldGetHelper(receiver, info.brandCheckIdentifier, info.kind, info.methodName);
|
|
case "f":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldGetHelper(receiver, info.brandCheckIdentifier, info.kind, info.variableName);
|
|
default:
|
|
ts.Debug.assertNever(info, "Unknown private element type");
|
|
}
|
|
}
|
|
function visitPropertyAccessExpression(node) {
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
|
|
var privateIdentifierInfo = accessPrivateIdentifier(node.name);
|
|
if (privateIdentifierInfo) {
|
|
return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
|
|
}
|
|
}
|
|
if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(node) &&
|
|
ts.isIdentifier(node.name) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
return visitInvalidSuperProperty(node);
|
|
}
|
|
if (classConstructor && superClassReference) {
|
|
var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
|
|
ts.setOriginalNode(superProperty, node.expression);
|
|
ts.setTextRange(superProperty, node.expression);
|
|
return superProperty;
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitElementAccessExpression(node) {
|
|
if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(node) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
return visitInvalidSuperProperty(node);
|
|
}
|
|
if (classConstructor && superClassReference) {
|
|
var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
|
|
ts.setOriginalNode(superProperty, node.expression);
|
|
ts.setTextRange(superProperty, node.expression);
|
|
return superProperty;
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
|
|
if (node.operator === 45 || node.operator === 46) {
|
|
var operand = ts.skipParentheses(node.operand);
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(operand)) {
|
|
var info = void 0;
|
|
if (info = accessPrivateIdentifier(operand.name)) {
|
|
var receiver = ts.visitNode(operand.expression, visitor, ts.isExpression);
|
|
var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
|
|
var expression = createPrivateIdentifierAccess(info, readExpression);
|
|
var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
|
|
expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
|
|
expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63);
|
|
ts.setOriginalNode(expression, node);
|
|
ts.setTextRange(expression, node);
|
|
if (temp) {
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
else if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(operand) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
var expression = visitInvalidSuperProperty(operand);
|
|
return ts.isPrefixUnaryExpression(node) ?
|
|
factory.updatePrefixUnaryExpression(node, expression) :
|
|
factory.updatePostfixUnaryExpression(node, expression);
|
|
}
|
|
if (classConstructor && superClassReference) {
|
|
var setterName = void 0;
|
|
var getterName = void 0;
|
|
if (ts.isPropertyAccessExpression(operand)) {
|
|
if (ts.isIdentifier(operand.name)) {
|
|
getterName = setterName = factory.createStringLiteralFromNode(operand.name);
|
|
}
|
|
}
|
|
else {
|
|
if (ts.isSimpleInlineableExpression(operand.argumentExpression)) {
|
|
getterName = setterName = operand.argumentExpression;
|
|
}
|
|
else {
|
|
getterName = factory.createTempVariable(hoistVariableDeclaration);
|
|
setterName = factory.createAssignment(getterName, ts.visitNode(operand.argumentExpression, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
if (setterName && getterName) {
|
|
var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
|
|
ts.setTextRange(expression, operand);
|
|
var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
|
|
expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
|
|
expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
|
|
ts.setOriginalNode(expression, node);
|
|
ts.setTextRange(expression, node);
|
|
if (temp) {
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitForStatement(node) {
|
|
return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
|
|
}
|
|
function visitExpressionStatement(node) {
|
|
return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
|
|
}
|
|
function createCopiableReceiverExpr(receiver) {
|
|
var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
|
|
if (ts.isSimpleInlineableExpression(receiver)) {
|
|
return { readExpression: clone, initializeExpression: undefined };
|
|
}
|
|
var readExpression = factory.createTempVariable(hoistVariableDeclaration);
|
|
var initializeExpression = factory.createAssignment(readExpression, clone);
|
|
return { readExpression: readExpression, initializeExpression: initializeExpression };
|
|
}
|
|
function visitCallExpression(node) {
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
|
|
var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
|
|
if (ts.isCallChain(node)) {
|
|
return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), undefined, undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
|
|
}
|
|
return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
|
|
}
|
|
if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(node.expression) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
(currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
|
|
var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
|
|
ts.setOriginalNode(invocation, node);
|
|
ts.setTextRange(invocation, node);
|
|
return invocation;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitTaggedTemplateExpression(node) {
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
|
|
var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
|
|
return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
|
|
}
|
|
if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(node.tag) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
(currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
|
|
var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
|
|
ts.setOriginalNode(invocation, node);
|
|
ts.setTextRange(invocation, node);
|
|
return factory.updateTaggedTemplateExpression(node, invocation, undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function transformClassStaticBlockDeclaration(node) {
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
if (currentClassLexicalEnvironment) {
|
|
classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
|
|
}
|
|
startLexicalEnvironment();
|
|
var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
|
|
currentStaticPropertyDeclarationOrStaticBlock = node;
|
|
var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
|
|
statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
|
|
currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
|
|
var iife = factory.createImmediatelyInvokedArrowFunction(statements);
|
|
ts.setOriginalNode(iife, node);
|
|
ts.setTextRange(iife, node);
|
|
ts.addEmitFlags(iife, 2);
|
|
return iife;
|
|
}
|
|
}
|
|
function visitBinaryExpression(node, valueIsDiscarded) {
|
|
if (ts.isDestructuringAssignment(node)) {
|
|
var savedPendingExpressions = pendingExpressions;
|
|
pendingExpressions = undefined;
|
|
node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
|
|
var expr = ts.some(pendingExpressions) ?
|
|
factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
|
|
node;
|
|
pendingExpressions = savedPendingExpressions;
|
|
return expr;
|
|
}
|
|
if (ts.isAssignmentExpression(node)) {
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
|
|
var info = accessPrivateIdentifier(node.left.name);
|
|
if (info) {
|
|
return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
|
|
}
|
|
}
|
|
else if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(node.left) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
|
|
}
|
|
if (classConstructor && superClassReference) {
|
|
var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
|
|
ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
|
|
undefined;
|
|
if (setterName) {
|
|
var expression = ts.visitNode(node.right, visitor, ts.isExpression);
|
|
if (ts.isCompoundAssignment(node.operatorToken.kind)) {
|
|
var getterName = setterName;
|
|
if (!ts.isSimpleInlineableExpression(setterName)) {
|
|
getterName = factory.createTempVariable(hoistVariableDeclaration);
|
|
setterName = factory.createAssignment(getterName, setterName);
|
|
}
|
|
var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
|
|
ts.setOriginalNode(superPropertyGet, node.left);
|
|
ts.setTextRange(superPropertyGet, node.left);
|
|
expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
|
|
if (temp) {
|
|
expression = factory.createAssignment(temp, expression);
|
|
ts.setTextRange(temp, node);
|
|
}
|
|
expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
|
|
ts.setOriginalNode(expression, node);
|
|
ts.setTextRange(expression, node);
|
|
if (temp) {
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (node.operatorToken.kind === 101 && ts.isPrivateIdentifier(node.left)) {
|
|
return visitPrivateIdentifierInInExpression(node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function createPrivateIdentifierAssignment(info, receiver, right, operator) {
|
|
receiver = ts.visitNode(receiver, visitor, ts.isExpression);
|
|
right = ts.visitNode(right, visitor, ts.isExpression);
|
|
if (ts.isCompoundAssignment(operator)) {
|
|
var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
|
|
receiver = initializeExpression || readExpression;
|
|
right = factory.createBinaryExpression(createPrivateIdentifierAccessHelper(info, readExpression), ts.getNonAssignmentOperatorForCompoundAssignment(operator), right);
|
|
}
|
|
ts.setCommentRange(receiver, ts.moveRangePos(receiver, -1));
|
|
switch (info.kind) {
|
|
case "a":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldSetHelper(receiver, info.brandCheckIdentifier, right, info.kind, info.setterName);
|
|
case "m":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldSetHelper(receiver, info.brandCheckIdentifier, right, info.kind, undefined);
|
|
case "f":
|
|
return context.getEmitHelperFactory().createClassPrivateFieldSetHelper(receiver, info.brandCheckIdentifier, right, info.kind, info.variableName);
|
|
default:
|
|
ts.Debug.assertNever(info, "Unknown private element type");
|
|
}
|
|
}
|
|
function visitClassLike(node) {
|
|
if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
var savedPendingExpressions = pendingExpressions;
|
|
pendingExpressions = undefined;
|
|
startClassLexicalEnvironment();
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
var name = ts.getNameOfDeclaration(node);
|
|
if (name && ts.isIdentifier(name)) {
|
|
getPrivateIdentifierEnvironment().className = ts.idText(name);
|
|
}
|
|
var privateInstanceMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node);
|
|
if (ts.some(privateInstanceMethodsAndAccessors)) {
|
|
getPrivateIdentifierEnvironment().weakSetName = createHoistedVariableForClass("instances", privateInstanceMethodsAndAccessors[0].name);
|
|
}
|
|
}
|
|
var result = ts.isClassDeclaration(node) ?
|
|
visitClassDeclaration(node) :
|
|
visitClassExpression(node);
|
|
endClassLexicalEnvironment();
|
|
pendingExpressions = savedPendingExpressions;
|
|
return result;
|
|
}
|
|
function doesClassElementNeedTransform(node) {
|
|
return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
|
|
}
|
|
function getPrivateInstanceMethodsAndAccessors(node) {
|
|
return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
|
|
}
|
|
function getClassFacts(node) {
|
|
var facts = 0;
|
|
var original = ts.getOriginalNode(node);
|
|
if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
|
|
facts |= 1;
|
|
}
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (!ts.isStatic(member))
|
|
continue;
|
|
if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
facts |= 2;
|
|
}
|
|
if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
|
|
if (shouldTransformThisInStaticInitializers && member.transformFlags & 16384) {
|
|
facts |= 8;
|
|
if (!(facts & 1)) {
|
|
facts |= 2;
|
|
}
|
|
}
|
|
if (shouldTransformSuperInStaticInitializers && member.transformFlags & 134217728) {
|
|
if (!(facts & 1)) {
|
|
facts |= 2 | 4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return facts;
|
|
}
|
|
function visitExpressionWithTypeArguments(node) {
|
|
var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0;
|
|
if (facts & 4) {
|
|
var temp = factory.createTempVariable(hoistVariableDeclaration, true);
|
|
getClassLexicalEnvironment().superClassReference = temp;
|
|
return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), undefined);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitClassDeclaration(node) {
|
|
var facts = getClassFacts(node);
|
|
if (facts) {
|
|
getClassLexicalEnvironment().facts = facts;
|
|
}
|
|
if (facts & 8) {
|
|
enableSubstitutionForClassStaticThisOrSuperReference();
|
|
}
|
|
var pendingClassReferenceAssignment;
|
|
if (facts & 2) {
|
|
var temp = factory.createTempVariable(hoistVariableDeclaration, true);
|
|
getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
|
|
pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
|
|
}
|
|
var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
|
|
var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104);
|
|
var statements = [
|
|
factory.updateClassDeclaration(node, node.modifiers, node.name, undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
|
|
];
|
|
if (pendingClassReferenceAssignment) {
|
|
getPendingExpressions().unshift(pendingClassReferenceAssignment);
|
|
}
|
|
if (ts.some(pendingExpressions)) {
|
|
statements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
|
|
}
|
|
var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
|
|
if (ts.some(staticProperties)) {
|
|
addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
|
|
}
|
|
return statements;
|
|
}
|
|
function visitClassExpression(node) {
|
|
var facts = getClassFacts(node);
|
|
if (facts) {
|
|
getClassLexicalEnvironment().facts = facts;
|
|
}
|
|
if (facts & 8) {
|
|
enableSubstitutionForClassStaticThisOrSuperReference();
|
|
}
|
|
var isDecoratedClassDeclaration = !!(facts & 1);
|
|
var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
|
|
var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
|
|
var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104);
|
|
var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216;
|
|
var temp;
|
|
function createClassTempVar() {
|
|
var classCheckFlags = resolver.getNodeCheckFlags(node);
|
|
var isClassWithConstructorReference = classCheckFlags & 16777216;
|
|
var requiresBlockScopedVar = classCheckFlags & 524288;
|
|
return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
|
|
}
|
|
if (facts & 2) {
|
|
temp = createClassTempVar();
|
|
getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
|
|
}
|
|
var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), node.name, undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
|
|
var hasTransformableStatics = shouldTransformPrivateElementsOrClassStaticBlocks && ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || ts.isPrivateIdentifier(p.name); });
|
|
if (hasTransformableStatics || ts.some(pendingExpressions)) {
|
|
if (isDecoratedClassDeclaration) {
|
|
ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
|
|
if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
|
|
pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
|
|
}
|
|
if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
|
|
addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
|
|
}
|
|
if (temp) {
|
|
return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
|
|
}
|
|
return classExpression;
|
|
}
|
|
else {
|
|
var expressions = [];
|
|
temp || (temp = createClassTempVar());
|
|
if (isClassWithConstructorReference) {
|
|
enableSubstitutionForClassAliases();
|
|
var alias = factory.cloneNode(temp);
|
|
alias.autoGenerateFlags &= ~8;
|
|
classAliases[ts.getOriginalNodeId(node)] = alias;
|
|
}
|
|
ts.setEmitFlags(classExpression, 65536 | ts.getEmitFlags(classExpression));
|
|
expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
|
|
ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
|
|
ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
|
|
expressions.push(ts.startOnNewLine(temp));
|
|
return factory.inlineExpressions(expressions);
|
|
}
|
|
}
|
|
return classExpression;
|
|
}
|
|
function visitClassStaticBlockDeclaration(node) {
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
return ts.visitEachChild(node, classElementVisitor, context);
|
|
}
|
|
return undefined;
|
|
}
|
|
function transformClassMembers(node, isDerivedClass) {
|
|
var members = [];
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks) {
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (ts.isPrivateIdentifierClassElementDeclaration(member)) {
|
|
addPrivateIdentifierToEnvironment(member);
|
|
}
|
|
}
|
|
if (ts.some(getPrivateInstanceMethodsAndAccessors(node))) {
|
|
createBrandCheckWeakSetForPrivateMethods();
|
|
}
|
|
}
|
|
var constructor = transformConstructor(node, isDerivedClass);
|
|
var visitedMembers = ts.visitNodes(node.members, classElementVisitor, ts.isClassElement);
|
|
if (constructor) {
|
|
members.push(constructor);
|
|
}
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks && ts.some(pendingExpressions)) {
|
|
members.push(factory.createClassStaticBlockDeclaration(factory.createBlock([
|
|
factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))
|
|
])));
|
|
pendingExpressions = undefined;
|
|
}
|
|
ts.addRange(members, visitedMembers);
|
|
return ts.setTextRange(factory.createNodeArray(members), node.members);
|
|
}
|
|
function createBrandCheckWeakSetForPrivateMethods() {
|
|
var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
|
|
ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
|
|
getPendingExpressions().push(factory.createAssignment(weakSetName, factory.createNewExpression(factory.createIdentifier("WeakSet"), undefined, [])));
|
|
}
|
|
function isClassElementThatRequiresConstructorStatement(member) {
|
|
if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128)) {
|
|
return false;
|
|
}
|
|
if (useDefineForClassFields) {
|
|
return languageVersion < 9;
|
|
}
|
|
return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
|
|
}
|
|
function transformConstructor(node, isDerivedClass) {
|
|
var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
|
|
var elements = node.members.filter(isClassElementThatRequiresConstructorStatement);
|
|
if (!ts.some(elements)) {
|
|
return constructor;
|
|
}
|
|
var parameters = ts.visitParameterList(constructor ? constructor.parameters : undefined, visitor, context);
|
|
var body = transformConstructorBody(node, constructor, isDerivedClass);
|
|
if (!body) {
|
|
return undefined;
|
|
}
|
|
return ts.startOnNewLine(ts.setOriginalNode(ts.setTextRange(factory.createConstructorDeclaration(undefined, parameters !== null && parameters !== void 0 ? parameters : [], body), constructor || node), constructor));
|
|
}
|
|
function transformConstructorBody(node, constructor, isDerivedClass) {
|
|
var _a;
|
|
var properties = ts.getProperties(node, false, false);
|
|
if (!useDefineForClassFields) {
|
|
properties = ts.filter(properties, function (property) { return !!property.initializer || ts.isPrivateIdentifier(property.name); });
|
|
}
|
|
var privateMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node);
|
|
var needsConstructorBody = ts.some(properties) || ts.some(privateMethodsAndAccessors);
|
|
if (!constructor && !needsConstructorBody) {
|
|
return ts.visitFunctionBody(undefined, visitor, context);
|
|
}
|
|
resumeLexicalEnvironment();
|
|
var needsSyntheticConstructor = !constructor && isDerivedClass;
|
|
var indexOfFirstStatementAfterSuperAndPrologue = 0;
|
|
var prologueStatementCount = 0;
|
|
var superStatementIndex = -1;
|
|
var statements = [];
|
|
if ((_a = constructor === null || constructor === void 0 ? void 0 : constructor.body) === null || _a === void 0 ? void 0 : _a.statements) {
|
|
prologueStatementCount = factory.copyPrologue(constructor.body.statements, statements, false, visitor);
|
|
superStatementIndex = ts.findSuperStatementIndex(constructor.body.statements, prologueStatementCount);
|
|
if (superStatementIndex >= 0) {
|
|
indexOfFirstStatementAfterSuperAndPrologue = superStatementIndex + 1;
|
|
statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, prologueStatementCount), true), ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, prologueStatementCount, indexOfFirstStatementAfterSuperAndPrologue - prologueStatementCount), true), statements.slice(prologueStatementCount), true);
|
|
}
|
|
else if (prologueStatementCount >= 0) {
|
|
indexOfFirstStatementAfterSuperAndPrologue = prologueStatementCount;
|
|
}
|
|
}
|
|
if (needsSyntheticConstructor) {
|
|
statements.push(factory.createExpressionStatement(factory.createCallExpression(factory.createSuper(), undefined, [factory.createSpreadElement(factory.createIdentifier("arguments"))])));
|
|
}
|
|
var parameterPropertyDeclarationCount = 0;
|
|
if (constructor === null || constructor === void 0 ? void 0 : constructor.body) {
|
|
if (useDefineForClassFields) {
|
|
statements = statements.filter(function (statement) { return !ts.isParameterPropertyDeclaration(ts.getOriginalNode(statement), constructor); });
|
|
}
|
|
else {
|
|
for (var _i = 0, _b = constructor.body.statements; _i < _b.length; _i++) {
|
|
var statement = _b[_i];
|
|
if (ts.isParameterPropertyDeclaration(ts.getOriginalNode(statement), constructor)) {
|
|
parameterPropertyDeclarationCount++;
|
|
}
|
|
}
|
|
if (parameterPropertyDeclarationCount > 0) {
|
|
var parameterProperties = ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatementAfterSuperAndPrologue, parameterPropertyDeclarationCount);
|
|
if (superStatementIndex >= 0) {
|
|
ts.addRange(statements, parameterProperties);
|
|
}
|
|
else {
|
|
var superAndPrologueStatementCount = prologueStatementCount;
|
|
if (needsSyntheticConstructor)
|
|
superAndPrologueStatementCount++;
|
|
statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, superAndPrologueStatementCount), true), parameterProperties, true), statements.slice(superAndPrologueStatementCount), true);
|
|
}
|
|
indexOfFirstStatementAfterSuperAndPrologue += parameterPropertyDeclarationCount;
|
|
}
|
|
}
|
|
}
|
|
var receiver = factory.createThis();
|
|
addMethodStatements(statements, privateMethodsAndAccessors, receiver);
|
|
addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
|
|
if (constructor) {
|
|
ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitBodyStatement, ts.isStatement, indexOfFirstStatementAfterSuperAndPrologue));
|
|
}
|
|
statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
|
|
return ts.setTextRange(factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true), constructor ? constructor.body : undefined);
|
|
function visitBodyStatement(statement) {
|
|
if (useDefineForClassFields && ts.isParameterPropertyDeclaration(ts.getOriginalNode(statement), constructor)) {
|
|
return undefined;
|
|
}
|
|
return visitor(statement);
|
|
}
|
|
}
|
|
function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
|
|
for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
|
|
var property = properties_7[_i];
|
|
if (ts.isStatic(property) && !shouldTransformPrivateElementsOrClassStaticBlocks && !useDefineForClassFields) {
|
|
continue;
|
|
}
|
|
var statement = transformPropertyOrClassStaticBlock(property, receiver);
|
|
if (!statement) {
|
|
continue;
|
|
}
|
|
statements.push(statement);
|
|
}
|
|
}
|
|
function transformPropertyOrClassStaticBlock(property, receiver) {
|
|
var expression = ts.isClassStaticBlockDeclaration(property) ?
|
|
transformClassStaticBlockDeclaration(property) :
|
|
transformProperty(property, receiver);
|
|
if (!expression) {
|
|
return undefined;
|
|
}
|
|
var statement = factory.createExpressionStatement(expression);
|
|
ts.setSourceMapRange(statement, ts.moveRangePastModifiers(property));
|
|
ts.setCommentRange(statement, property);
|
|
ts.setOriginalNode(statement, property);
|
|
ts.setSyntheticLeadingComments(expression, undefined);
|
|
ts.setSyntheticTrailingComments(expression, undefined);
|
|
return statement;
|
|
}
|
|
function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
|
|
var expressions = [];
|
|
for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
|
|
var property = propertiesOrClassStaticBlocks_1[_i];
|
|
var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
|
|
if (!expression) {
|
|
continue;
|
|
}
|
|
ts.startOnNewLine(expression);
|
|
ts.setSourceMapRange(expression, ts.moveRangePastModifiers(property));
|
|
ts.setCommentRange(expression, property);
|
|
ts.setOriginalNode(expression, property);
|
|
expressions.push(expression);
|
|
}
|
|
return expressions;
|
|
}
|
|
function transformProperty(property, receiver) {
|
|
var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
|
|
var transformed = transformPropertyWorker(property, receiver);
|
|
if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
|
|
ts.setOriginalNode(transformed, property);
|
|
ts.addEmitFlags(transformed, 2);
|
|
classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
|
|
}
|
|
currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
|
|
return transformed;
|
|
}
|
|
function transformPropertyWorker(property, receiver) {
|
|
var _a;
|
|
var emitAssignment = !useDefineForClassFields;
|
|
var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
|
|
? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
|
|
: property.name;
|
|
if (ts.hasStaticModifier(property)) {
|
|
currentStaticPropertyDeclarationOrStaticBlock = property;
|
|
}
|
|
if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
|
|
var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
|
|
if (privateIdentifierInfo) {
|
|
if (privateIdentifierInfo.kind === "f") {
|
|
if (!privateIdentifierInfo.isStatic) {
|
|
return createPrivateInstanceFieldInitializer(receiver, ts.visitNode(property.initializer, visitor, ts.isExpression), privateIdentifierInfo.brandCheckIdentifier);
|
|
}
|
|
else {
|
|
return createPrivateStaticFieldInitializer(privateIdentifierInfo.variableName, ts.visitNode(property.initializer, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.fail("Undeclared private name for property declaration.");
|
|
}
|
|
}
|
|
if ((ts.isPrivateIdentifier(propertyName) || ts.hasStaticModifier(property)) && !property.initializer) {
|
|
return undefined;
|
|
}
|
|
var propertyOriginalNode = ts.getOriginalNode(property);
|
|
if (ts.hasSyntacticModifier(propertyOriginalNode, 128)) {
|
|
return undefined;
|
|
}
|
|
var initializer = property.initializer || emitAssignment ? (_a = ts.visitNode(property.initializer, visitor, ts.isExpression)) !== null && _a !== void 0 ? _a : factory.createVoidZero()
|
|
: ts.isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && ts.isIdentifier(propertyName) ? propertyName
|
|
: factory.createVoidZero();
|
|
if (emitAssignment || ts.isPrivateIdentifier(propertyName)) {
|
|
var memberAccess = ts.createMemberAccessForPropertyName(factory, receiver, propertyName, propertyName);
|
|
return factory.createAssignment(memberAccess, initializer);
|
|
}
|
|
else {
|
|
var name = ts.isComputedPropertyName(propertyName) ? propertyName.expression
|
|
: ts.isIdentifier(propertyName) ? factory.createStringLiteral(ts.unescapeLeadingUnderscores(propertyName.escapedText))
|
|
: propertyName;
|
|
var descriptor = factory.createPropertyDescriptor({ value: initializer, configurable: true, writable: true, enumerable: true });
|
|
return factory.createObjectDefinePropertyCall(receiver, name, descriptor);
|
|
}
|
|
}
|
|
function enableSubstitutionForClassAliases() {
|
|
if ((enabledSubstitutions & 1) === 0) {
|
|
enabledSubstitutions |= 1;
|
|
context.enableSubstitution(79);
|
|
classAliases = [];
|
|
}
|
|
}
|
|
function enableSubstitutionForClassStaticThisOrSuperReference() {
|
|
if ((enabledSubstitutions & 2) === 0) {
|
|
enabledSubstitutions |= 2;
|
|
context.enableSubstitution(108);
|
|
context.enableEmitNotification(256);
|
|
context.enableEmitNotification(213);
|
|
context.enableEmitNotification(171);
|
|
context.enableEmitNotification(172);
|
|
context.enableEmitNotification(173);
|
|
context.enableEmitNotification(169);
|
|
context.enableEmitNotification(167);
|
|
context.enableEmitNotification(162);
|
|
}
|
|
}
|
|
function addMethodStatements(statements, methods, receiver) {
|
|
if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
|
|
return;
|
|
}
|
|
var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
|
|
ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
|
|
statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
|
|
}
|
|
function visitInvalidSuperProperty(node) {
|
|
return ts.isPropertyAccessExpression(node) ?
|
|
factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
|
|
factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
var original = ts.getOriginalNode(node);
|
|
if (original.id) {
|
|
var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
|
|
if (classLexicalEnvironment) {
|
|
var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
|
|
var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
|
|
currentClassLexicalEnvironment = classLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentClassLexicalEnvironment = savedClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
|
|
return;
|
|
}
|
|
}
|
|
switch (node.kind) {
|
|
case 213:
|
|
if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144) {
|
|
break;
|
|
}
|
|
case 256:
|
|
case 171: {
|
|
var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
|
|
var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
|
|
currentClassLexicalEnvironment = undefined;
|
|
currentComputedPropertyNameClassLexicalEnvironment = undefined;
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentClassLexicalEnvironment = savedClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
|
|
return;
|
|
}
|
|
case 172:
|
|
case 173:
|
|
case 169:
|
|
case 167: {
|
|
var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
|
|
var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
|
|
currentClassLexicalEnvironment = undefined;
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentClassLexicalEnvironment = savedClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
|
|
return;
|
|
}
|
|
case 162: {
|
|
var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
|
|
var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
|
|
currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = undefined;
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentClassLexicalEnvironment = savedClassLexicalEnvironment;
|
|
currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
|
|
return;
|
|
}
|
|
}
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
}
|
|
function onSubstituteNode(hint, node) {
|
|
node = previousOnSubstituteNode(hint, node);
|
|
if (hint === 1) {
|
|
return substituteExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
case 108:
|
|
return substituteThisExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteThisExpression(node) {
|
|
if (enabledSubstitutions & 2 && currentClassLexicalEnvironment) {
|
|
var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
|
|
if (facts & 1) {
|
|
return factory.createParenthesizedExpression(factory.createVoidZero());
|
|
}
|
|
if (classConstructor) {
|
|
return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpressionIdentifier(node) {
|
|
return trySubstituteClassAlias(node) || node;
|
|
}
|
|
function trySubstituteClassAlias(node) {
|
|
if (enabledSubstitutions & 1) {
|
|
if (resolver.getNodeCheckFlags(node) & 33554432) {
|
|
var declaration = resolver.getReferencedValueDeclaration(node);
|
|
if (declaration) {
|
|
var classAlias = classAliases[declaration.id];
|
|
if (classAlias) {
|
|
var clone_2 = factory.cloneNode(classAlias);
|
|
ts.setSourceMapRange(clone_2, node);
|
|
ts.setCommentRange(clone_2, node);
|
|
return clone_2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function getPropertyNameExpressionIfNeeded(name, shouldHoist) {
|
|
if (ts.isComputedPropertyName(name)) {
|
|
var expression = ts.visitNode(name.expression, visitor, ts.isExpression);
|
|
var innerExpression = ts.skipPartiallyEmittedExpressions(expression);
|
|
var inlinable = ts.isSimpleInlineableExpression(innerExpression);
|
|
var alreadyTransformed = ts.isAssignmentExpression(innerExpression) && ts.isGeneratedIdentifier(innerExpression.left);
|
|
if (!alreadyTransformed && !inlinable && shouldHoist) {
|
|
var generatedName = factory.getGeneratedNameForNode(name);
|
|
if (resolver.getNodeCheckFlags(name) & 524288) {
|
|
addBlockScopedVariable(generatedName);
|
|
}
|
|
else {
|
|
hoistVariableDeclaration(generatedName);
|
|
}
|
|
return factory.createAssignment(generatedName, expression);
|
|
}
|
|
return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
|
|
}
|
|
}
|
|
function startClassLexicalEnvironment() {
|
|
classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
|
|
currentClassLexicalEnvironment = undefined;
|
|
}
|
|
function endClassLexicalEnvironment() {
|
|
currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
|
|
}
|
|
function getClassLexicalEnvironment() {
|
|
return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
|
|
facts: 0,
|
|
classConstructor: undefined,
|
|
superClassReference: undefined,
|
|
privateIdentifierEnvironment: undefined,
|
|
});
|
|
}
|
|
function getPrivateIdentifierEnvironment() {
|
|
var lex = getClassLexicalEnvironment();
|
|
lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
|
|
className: "",
|
|
identifiers: new ts.Map()
|
|
});
|
|
return lex.privateIdentifierEnvironment;
|
|
}
|
|
function getPendingExpressions() {
|
|
return pendingExpressions || (pendingExpressions = []);
|
|
}
|
|
function addPrivateIdentifierToEnvironment(node) {
|
|
var _a;
|
|
var text = ts.getTextOfPropertyName(node.name);
|
|
var lex = getClassLexicalEnvironment();
|
|
var classConstructor = lex.classConstructor;
|
|
var privateEnv = getPrivateIdentifierEnvironment();
|
|
var weakSetName = privateEnv.weakSetName;
|
|
var assignmentExpressions = [];
|
|
var privateName = node.name.escapedText;
|
|
var previousInfo = privateEnv.identifiers.get(privateName);
|
|
var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
|
|
if (ts.hasStaticModifier(node)) {
|
|
ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
|
|
if (ts.isPropertyDeclaration(node)) {
|
|
var variableName = createHoistedVariableForPrivateName(text, node);
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "f",
|
|
variableName: variableName,
|
|
brandCheckIdentifier: classConstructor,
|
|
isStatic: true,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
else if (ts.isMethodDeclaration(node)) {
|
|
var functionName = createHoistedVariableForPrivateName(text, node);
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "m",
|
|
methodName: functionName,
|
|
brandCheckIdentifier: classConstructor,
|
|
isStatic: true,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
else if (ts.isGetAccessorDeclaration(node)) {
|
|
var getterName = createHoistedVariableForPrivateName(text + "_get", node);
|
|
if ((previousInfo === null || previousInfo === void 0 ? void 0 : previousInfo.kind) === "a" && previousInfo.isStatic && !previousInfo.getterName) {
|
|
previousInfo.getterName = getterName;
|
|
}
|
|
else {
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "a",
|
|
getterName: getterName,
|
|
setterName: undefined,
|
|
brandCheckIdentifier: classConstructor,
|
|
isStatic: true,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
}
|
|
else if (ts.isSetAccessorDeclaration(node)) {
|
|
var setterName = createHoistedVariableForPrivateName(text + "_set", node);
|
|
if ((previousInfo === null || previousInfo === void 0 ? void 0 : previousInfo.kind) === "a" && previousInfo.isStatic && !previousInfo.setterName) {
|
|
previousInfo.setterName = setterName;
|
|
}
|
|
else {
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "a",
|
|
getterName: undefined,
|
|
setterName: setterName,
|
|
brandCheckIdentifier: classConstructor,
|
|
isStatic: true,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.assertNever(node, "Unknown class element type.");
|
|
}
|
|
}
|
|
else if (ts.isPropertyDeclaration(node)) {
|
|
var weakMapName = createHoistedVariableForPrivateName(text, node);
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "f",
|
|
brandCheckIdentifier: weakMapName,
|
|
isStatic: false,
|
|
variableName: undefined,
|
|
isValid: isValid,
|
|
});
|
|
assignmentExpressions.push(factory.createAssignment(weakMapName, factory.createNewExpression(factory.createIdentifier("WeakMap"), undefined, [])));
|
|
}
|
|
else if (ts.isMethodDeclaration(node)) {
|
|
ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "m",
|
|
methodName: createHoistedVariableForPrivateName(text, node),
|
|
brandCheckIdentifier: weakSetName,
|
|
isStatic: false,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
else if (ts.isAccessor(node)) {
|
|
ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
|
|
if (ts.isGetAccessor(node)) {
|
|
var getterName = createHoistedVariableForPrivateName(text + "_get", node);
|
|
if ((previousInfo === null || previousInfo === void 0 ? void 0 : previousInfo.kind) === "a" && !previousInfo.isStatic && !previousInfo.getterName) {
|
|
previousInfo.getterName = getterName;
|
|
}
|
|
else {
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "a",
|
|
getterName: getterName,
|
|
setterName: undefined,
|
|
brandCheckIdentifier: weakSetName,
|
|
isStatic: false,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
var setterName = createHoistedVariableForPrivateName(text + "_set", node);
|
|
if ((previousInfo === null || previousInfo === void 0 ? void 0 : previousInfo.kind) === "a" && !previousInfo.isStatic && !previousInfo.setterName) {
|
|
previousInfo.setterName = setterName;
|
|
}
|
|
else {
|
|
privateEnv.identifiers.set(privateName, {
|
|
kind: "a",
|
|
getterName: undefined,
|
|
setterName: setterName,
|
|
brandCheckIdentifier: weakSetName,
|
|
isStatic: false,
|
|
isValid: isValid,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.assertNever(node, "Unknown class element type.");
|
|
}
|
|
(_a = getPendingExpressions()).push.apply(_a, assignmentExpressions);
|
|
}
|
|
function createHoistedVariableForClass(name, node) {
|
|
var className = getPrivateIdentifierEnvironment().className;
|
|
var prefix = className ? "_".concat(className) : "";
|
|
var identifier = factory.createUniqueName("".concat(prefix, "_").concat(name), 16);
|
|
if (resolver.getNodeCheckFlags(node) & 524288) {
|
|
addBlockScopedVariable(identifier);
|
|
}
|
|
else {
|
|
hoistVariableDeclaration(identifier);
|
|
}
|
|
return identifier;
|
|
}
|
|
function createHoistedVariableForPrivateName(privateName, node) {
|
|
return createHoistedVariableForClass(privateName.substring(1), node.name);
|
|
}
|
|
function accessPrivateIdentifier(name) {
|
|
var _a;
|
|
if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
|
|
var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
|
|
if (info) {
|
|
return info;
|
|
}
|
|
}
|
|
for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
|
|
var env = classLexicalEnvironmentStack[i];
|
|
if (!env) {
|
|
continue;
|
|
}
|
|
var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
|
|
if (info) {
|
|
return info;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function wrapPrivateIdentifierForDestructuringTarget(node) {
|
|
var parameter = factory.getGeneratedNameForNode(node);
|
|
var info = accessPrivateIdentifier(node.name);
|
|
if (!info) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
var receiver = node.expression;
|
|
if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
|
|
receiver = factory.createTempVariable(hoistVariableDeclaration, true);
|
|
getPendingExpressions().push(factory.createBinaryExpression(receiver, 63, ts.visitNode(node.expression, visitor, ts.isExpression)));
|
|
}
|
|
return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63));
|
|
}
|
|
function visitArrayAssignmentTarget(node) {
|
|
var target = ts.getTargetOfBindingOrAssignmentElement(node);
|
|
if (target) {
|
|
var wrapped = void 0;
|
|
if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
|
|
wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
|
|
}
|
|
else if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(target) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
wrapped = visitInvalidSuperProperty(target);
|
|
}
|
|
else if (classConstructor && superClassReference) {
|
|
var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
|
|
ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
|
|
undefined;
|
|
if (name) {
|
|
var temp = factory.createTempVariable(undefined);
|
|
wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
|
|
}
|
|
}
|
|
}
|
|
if (wrapped) {
|
|
if (ts.isAssignmentExpression(node)) {
|
|
return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
|
|
}
|
|
else if (ts.isSpreadElement(node)) {
|
|
return factory.updateSpreadElement(node, wrapped);
|
|
}
|
|
else {
|
|
return wrapped;
|
|
}
|
|
}
|
|
}
|
|
return ts.visitNode(node, visitorDestructuringTarget);
|
|
}
|
|
function visitObjectAssignmentTarget(node) {
|
|
if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
|
|
var target = ts.getTargetOfBindingOrAssignmentElement(node);
|
|
var wrapped = void 0;
|
|
if (target) {
|
|
if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
|
|
wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
|
|
}
|
|
else if (shouldTransformSuperInStaticInitializers &&
|
|
ts.isSuperProperty(target) &&
|
|
currentStaticPropertyDeclarationOrStaticBlock &&
|
|
currentClassLexicalEnvironment) {
|
|
var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
|
|
if (facts & 1) {
|
|
wrapped = visitInvalidSuperProperty(target);
|
|
}
|
|
else if (classConstructor && superClassReference) {
|
|
var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
|
|
ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
|
|
undefined;
|
|
if (name) {
|
|
var temp = factory.createTempVariable(undefined);
|
|
wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ts.isPropertyAssignment(node)) {
|
|
var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
|
|
return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
|
|
initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
|
|
ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
|
|
}
|
|
if (ts.isSpreadAssignment(node)) {
|
|
return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
|
|
}
|
|
ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
|
|
}
|
|
return ts.visitNode(node, visitor);
|
|
}
|
|
function visitAssignmentPattern(node) {
|
|
if (ts.isArrayLiteralExpression(node)) {
|
|
return factory.updateArrayLiteralExpression(node, ts.visitNodes(node.elements, visitArrayAssignmentTarget, ts.isExpression));
|
|
}
|
|
else {
|
|
return factory.updateObjectLiteralExpression(node, ts.visitNodes(node.properties, visitObjectAssignmentTarget, ts.isObjectLiteralElementLike));
|
|
}
|
|
}
|
|
}
|
|
ts.transformClassFields = transformClassFields;
|
|
function createPrivateStaticFieldInitializer(variableName, initializer) {
|
|
return ts.factory.createAssignment(variableName, ts.factory.createObjectLiteralExpression([
|
|
ts.factory.createPropertyAssignment("value", initializer || ts.factory.createVoidZero())
|
|
]));
|
|
}
|
|
function createPrivateInstanceFieldInitializer(receiver, initializer, weakMapName) {
|
|
return ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(weakMapName, "set"), undefined, [receiver, initializer || ts.factory.createVoidZero()]);
|
|
}
|
|
function createPrivateInstanceMethodInitializer(receiver, weakSetName) {
|
|
return ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(weakSetName, "add"), undefined, [receiver]);
|
|
}
|
|
function isReservedPrivateName(node) {
|
|
return node.escapedText === "#constructor";
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createRuntimeTypeSerializer(context) {
|
|
var hoistVariableDeclaration = context.hoistVariableDeclaration;
|
|
var resolver = context.getEmitResolver();
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var strictNullChecks = ts.getStrictOptionValue(compilerOptions, "strictNullChecks");
|
|
var currentLexicalScope;
|
|
var currentNameScope;
|
|
return {
|
|
serializeTypeNode: function (serializerContext, node) { return setSerializerContextAnd(serializerContext, serializeTypeNode, node); },
|
|
serializeTypeOfNode: function (serializerContext, node) { return setSerializerContextAnd(serializerContext, serializeTypeOfNode, node); },
|
|
serializeParameterTypesOfNode: function (serializerContext, node, container) { return setSerializerContextAnd(serializerContext, serializeParameterTypesOfNode, node, container); },
|
|
serializeReturnTypeOfNode: function (serializerContext, node) { return setSerializerContextAnd(serializerContext, serializeReturnTypeOfNode, node); },
|
|
};
|
|
function setSerializerContextAnd(serializerContext, cb, node, arg) {
|
|
var savedCurrentLexicalScope = currentLexicalScope;
|
|
var savedCurrentNameScope = currentNameScope;
|
|
currentLexicalScope = serializerContext.currentLexicalScope;
|
|
currentNameScope = serializerContext.currentNameScope;
|
|
var result = arg === undefined ? cb(node) : cb(node, arg);
|
|
currentLexicalScope = savedCurrentLexicalScope;
|
|
currentNameScope = savedCurrentNameScope;
|
|
return result;
|
|
}
|
|
function getAccessorTypeNode(node) {
|
|
var accessors = resolver.getAllAccessorDeclarations(node);
|
|
return accessors.setAccessor && ts.getSetAccessorTypeAnnotationNode(accessors.setAccessor)
|
|
|| accessors.getAccessor && ts.getEffectiveReturnTypeNode(accessors.getAccessor);
|
|
}
|
|
function serializeTypeOfNode(node) {
|
|
switch (node.kind) {
|
|
case 167:
|
|
case 164:
|
|
return serializeTypeNode(node.type);
|
|
case 173:
|
|
case 172:
|
|
return serializeTypeNode(getAccessorTypeNode(node));
|
|
case 257:
|
|
case 226:
|
|
case 169:
|
|
return ts.factory.createIdentifier("Function");
|
|
default:
|
|
return ts.factory.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.factory.createArrayLiteralExpression(expressions);
|
|
}
|
|
function getParametersOfDecoratedDeclaration(node, container) {
|
|
if (container && node.kind === 172) {
|
|
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.factory.createIdentifier("Promise");
|
|
}
|
|
return ts.factory.createVoidZero();
|
|
}
|
|
function serializeTypeNode(node) {
|
|
if (node === undefined) {
|
|
return ts.factory.createIdentifier("Object");
|
|
}
|
|
node = ts.skipTypeParentheses(node);
|
|
switch (node.kind) {
|
|
case 114:
|
|
case 153:
|
|
case 143:
|
|
return ts.factory.createVoidZero();
|
|
case 179:
|
|
case 180:
|
|
return ts.factory.createIdentifier("Function");
|
|
case 183:
|
|
case 184:
|
|
return ts.factory.createIdentifier("Array");
|
|
case 177:
|
|
return node.assertsModifier ?
|
|
ts.factory.createVoidZero() :
|
|
ts.factory.createIdentifier("Boolean");
|
|
case 133:
|
|
return ts.factory.createIdentifier("Boolean");
|
|
case 198:
|
|
case 150:
|
|
return ts.factory.createIdentifier("String");
|
|
case 148:
|
|
return ts.factory.createIdentifier("Object");
|
|
case 196:
|
|
return serializeLiteralOfLiteralTypeNode(node.literal);
|
|
case 147:
|
|
return ts.factory.createIdentifier("Number");
|
|
case 158:
|
|
return getGlobalConstructor("BigInt", 7);
|
|
case 151:
|
|
return getGlobalConstructor("Symbol", 2);
|
|
case 178:
|
|
return serializeTypeReferenceNode(node);
|
|
case 188:
|
|
return serializeUnionOrIntersectionConstituents(node.types, true);
|
|
case 187:
|
|
return serializeUnionOrIntersectionConstituents(node.types, false);
|
|
case 189:
|
|
return serializeUnionOrIntersectionConstituents([node.trueType, node.falseType], false);
|
|
case 193:
|
|
if (node.operator === 145) {
|
|
return serializeTypeNode(node.type);
|
|
}
|
|
break;
|
|
case 181:
|
|
case 194:
|
|
case 195:
|
|
case 182:
|
|
case 130:
|
|
case 155:
|
|
case 192:
|
|
case 200:
|
|
break;
|
|
case 312:
|
|
case 313:
|
|
case 317:
|
|
case 318:
|
|
case 319:
|
|
break;
|
|
case 314:
|
|
case 315:
|
|
case 316:
|
|
return serializeTypeNode(node.type);
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
return ts.factory.createIdentifier("Object");
|
|
}
|
|
function serializeLiteralOfLiteralTypeNode(node) {
|
|
switch (node.kind) {
|
|
case 10:
|
|
case 14:
|
|
return ts.factory.createIdentifier("String");
|
|
case 219: {
|
|
var operand = node.operand;
|
|
switch (operand.kind) {
|
|
case 8:
|
|
case 9:
|
|
return serializeLiteralOfLiteralTypeNode(operand);
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(operand);
|
|
}
|
|
}
|
|
case 8:
|
|
return ts.factory.createIdentifier("Number");
|
|
case 9:
|
|
return getGlobalConstructor("BigInt", 7);
|
|
case 110:
|
|
case 95:
|
|
return ts.factory.createIdentifier("Boolean");
|
|
case 104:
|
|
return ts.factory.createVoidZero();
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
}
|
|
function serializeUnionOrIntersectionConstituents(types, isIntersection) {
|
|
var serializedType;
|
|
for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
|
|
var typeNode = types_22[_i];
|
|
typeNode = ts.skipTypeParentheses(typeNode);
|
|
if (typeNode.kind === 143) {
|
|
if (isIntersection)
|
|
return ts.factory.createVoidZero();
|
|
continue;
|
|
}
|
|
if (typeNode.kind === 155) {
|
|
if (!isIntersection)
|
|
return ts.factory.createIdentifier("Object");
|
|
continue;
|
|
}
|
|
if (typeNode.kind === 130) {
|
|
return ts.factory.createIdentifier("Object");
|
|
}
|
|
if (!strictNullChecks && ((ts.isLiteralTypeNode(typeNode) && typeNode.literal.kind === 104) || typeNode.kind === 153)) {
|
|
continue;
|
|
}
|
|
var serializedConstituent = serializeTypeNode(typeNode);
|
|
if (ts.isIdentifier(serializedConstituent) && serializedConstituent.escapedText === "Object") {
|
|
return serializedConstituent;
|
|
}
|
|
if (serializedType) {
|
|
if (!equateSerializedTypeNodes(serializedType, serializedConstituent)) {
|
|
return ts.factory.createIdentifier("Object");
|
|
}
|
|
}
|
|
else {
|
|
serializedType = serializedConstituent;
|
|
}
|
|
}
|
|
return serializedType !== null && serializedType !== void 0 ? serializedType : (ts.factory.createVoidZero());
|
|
}
|
|
function equateSerializedTypeNodes(left, right) {
|
|
return (ts.isGeneratedIdentifier(left) ? ts.isGeneratedIdentifier(right) :
|
|
ts.isIdentifier(left) ? ts.isIdentifier(right)
|
|
&& left.escapedText === right.escapedText :
|
|
ts.isPropertyAccessExpression(left) ? ts.isPropertyAccessExpression(right)
|
|
&& equateSerializedTypeNodes(left.expression, right.expression)
|
|
&& equateSerializedTypeNodes(left.name, right.name) :
|
|
ts.isVoidExpression(left) ? ts.isVoidExpression(right)
|
|
&& ts.isNumericLiteral(left.expression) && left.expression.text === "0"
|
|
&& ts.isNumericLiteral(right.expression) && right.expression.text === "0" :
|
|
ts.isStringLiteral(left) ? ts.isStringLiteral(right)
|
|
&& left.text === right.text :
|
|
ts.isTypeOfExpression(left) ? ts.isTypeOfExpression(right)
|
|
&& equateSerializedTypeNodes(left.expression, right.expression) :
|
|
ts.isParenthesizedExpression(left) ? ts.isParenthesizedExpression(right)
|
|
&& equateSerializedTypeNodes(left.expression, right.expression) :
|
|
ts.isConditionalExpression(left) ? ts.isConditionalExpression(right)
|
|
&& equateSerializedTypeNodes(left.condition, right.condition)
|
|
&& equateSerializedTypeNodes(left.whenTrue, right.whenTrue)
|
|
&& equateSerializedTypeNodes(left.whenFalse, right.whenFalse) :
|
|
ts.isBinaryExpression(left) ? ts.isBinaryExpression(right)
|
|
&& left.operatorToken.kind === right.operatorToken.kind
|
|
&& equateSerializedTypeNodes(left.left, right.left)
|
|
&& equateSerializedTypeNodes(left.right, right.right) :
|
|
false);
|
|
}
|
|
function serializeTypeReferenceNode(node) {
|
|
var kind = resolver.getTypeReferenceSerializationKind(node.typeName, currentNameScope !== null && currentNameScope !== void 0 ? currentNameScope : currentLexicalScope);
|
|
switch (kind) {
|
|
case ts.TypeReferenceSerializationKind.Unknown:
|
|
if (ts.findAncestor(node, function (n) { return n.parent && ts.isConditionalTypeNode(n.parent) && (n.parent.trueType === n || n.parent.falseType === n); })) {
|
|
return ts.factory.createIdentifier("Object");
|
|
}
|
|
var serialized = serializeEntityNameAsExpressionFallback(node.typeName);
|
|
var temp = ts.factory.createTempVariable(hoistVariableDeclaration);
|
|
return ts.factory.createConditionalExpression(ts.factory.createTypeCheck(ts.factory.createAssignment(temp, serialized), "function"), undefined, temp, undefined, ts.factory.createIdentifier("Object"));
|
|
case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:
|
|
return serializeEntityNameAsExpression(node.typeName);
|
|
case ts.TypeReferenceSerializationKind.VoidNullableOrNeverType:
|
|
return ts.factory.createVoidZero();
|
|
case ts.TypeReferenceSerializationKind.BigIntLikeType:
|
|
return getGlobalConstructor("BigInt", 7);
|
|
case ts.TypeReferenceSerializationKind.BooleanType:
|
|
return ts.factory.createIdentifier("Boolean");
|
|
case ts.TypeReferenceSerializationKind.NumberLikeType:
|
|
return ts.factory.createIdentifier("Number");
|
|
case ts.TypeReferenceSerializationKind.StringLikeType:
|
|
return ts.factory.createIdentifier("String");
|
|
case ts.TypeReferenceSerializationKind.ArrayLikeType:
|
|
return ts.factory.createIdentifier("Array");
|
|
case ts.TypeReferenceSerializationKind.ESSymbolType:
|
|
return getGlobalConstructor("Symbol", 2);
|
|
case ts.TypeReferenceSerializationKind.TypeWithCallSignature:
|
|
return ts.factory.createIdentifier("Function");
|
|
case ts.TypeReferenceSerializationKind.Promise:
|
|
return ts.factory.createIdentifier("Promise");
|
|
case ts.TypeReferenceSerializationKind.ObjectType:
|
|
return ts.factory.createIdentifier("Object");
|
|
default:
|
|
return ts.Debug.assertNever(kind);
|
|
}
|
|
}
|
|
function createCheckedValue(left, right) {
|
|
return ts.factory.createLogicalAnd(ts.factory.createStrictInequality(ts.factory.createTypeOfExpression(left), ts.factory.createStringLiteral("undefined")), right);
|
|
}
|
|
function serializeEntityNameAsExpressionFallback(node) {
|
|
if (node.kind === 79) {
|
|
var copied = serializeEntityNameAsExpression(node);
|
|
return createCheckedValue(copied, copied);
|
|
}
|
|
if (node.left.kind === 79) {
|
|
return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
|
|
}
|
|
var left = serializeEntityNameAsExpressionFallback(node.left);
|
|
var temp = ts.factory.createTempVariable(hoistVariableDeclaration);
|
|
return ts.factory.createLogicalAnd(ts.factory.createLogicalAnd(left.left, ts.factory.createStrictInequality(ts.factory.createAssignment(temp, left.right), ts.factory.createVoidZero())), ts.factory.createPropertyAccessExpression(temp, node.right));
|
|
}
|
|
function serializeEntityNameAsExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
|
|
name.original = undefined;
|
|
ts.setParent(name, ts.getParseTreeNode(currentLexicalScope));
|
|
return name;
|
|
case 161:
|
|
return serializeQualifiedNameAsExpression(node);
|
|
}
|
|
}
|
|
function serializeQualifiedNameAsExpression(node) {
|
|
return ts.factory.createPropertyAccessExpression(serializeEntityNameAsExpression(node.left), node.right);
|
|
}
|
|
function getGlobalConstructorWithFallback(name) {
|
|
return ts.factory.createConditionalExpression(ts.factory.createTypeCheck(ts.factory.createIdentifier(name), "function"), undefined, ts.factory.createIdentifier(name), undefined, ts.factory.createIdentifier("Object"));
|
|
}
|
|
function getGlobalConstructor(name, minLanguageVersion) {
|
|
return languageVersion < minLanguageVersion ?
|
|
getGlobalConstructorWithFallback(name) :
|
|
ts.factory.createIdentifier(name);
|
|
}
|
|
}
|
|
ts.createRuntimeTypeSerializer = createRuntimeTypeSerializer;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformLegacyDecorators(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory, hoistVariableDeclaration = context.hoistVariableDeclaration;
|
|
var resolver = context.getEmitResolver();
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
var classAliases;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
ts.addEmitHelpers(visited, context.readEmitHelpers());
|
|
return visited;
|
|
}
|
|
function modifierVisitor(node) {
|
|
return ts.isDecorator(node) ? undefined : node;
|
|
}
|
|
function visitor(node) {
|
|
if (!(node.transformFlags & 33554432)) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 165:
|
|
return undefined;
|
|
case 257:
|
|
return visitClassDeclaration(node);
|
|
case 226:
|
|
return visitClassExpression(node);
|
|
case 171:
|
|
return visitConstructorDeclaration(node);
|
|
case 169:
|
|
return visitMethodDeclaration(node);
|
|
case 173:
|
|
return visitSetAccessorDeclaration(node);
|
|
case 172:
|
|
return visitGetAccessorDeclaration(node);
|
|
case 167:
|
|
return visitPropertyDeclaration(node);
|
|
case 164:
|
|
return visitParameterDeclaration(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitClassDeclaration(node) {
|
|
if (!(ts.classOrConstructorParameterIsDecorated(node) || ts.childIsDecorated(node)))
|
|
return ts.visitEachChild(node, visitor, context);
|
|
var statements = ts.hasDecorators(node) ?
|
|
transformClassDeclarationWithClassDecorators(node, node.name) :
|
|
transformClassDeclarationWithoutClassDecorators(node, node.name);
|
|
if (statements.length > 1) {
|
|
statements.push(factory.createEndOfDeclarationMarker(node));
|
|
ts.setEmitFlags(statements[0], ts.getEmitFlags(statements[0]) | 4194304);
|
|
}
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
function decoratorContainsPrivateIdentifierInExpression(decorator) {
|
|
return !!(decorator.transformFlags & 536870912);
|
|
}
|
|
function parameterDecoratorsContainPrivateIdentifierInExpression(parameterDecorators) {
|
|
return ts.some(parameterDecorators, decoratorContainsPrivateIdentifierInExpression);
|
|
}
|
|
function hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node) {
|
|
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
|
|
var member = _a[_i];
|
|
if (!ts.canHaveDecorators(member))
|
|
continue;
|
|
var allDecorators = ts.getAllDecoratorsOfClassElement(member, node);
|
|
if (ts.some(allDecorators === null || allDecorators === void 0 ? void 0 : allDecorators.decorators, decoratorContainsPrivateIdentifierInExpression))
|
|
return true;
|
|
if (ts.some(allDecorators === null || allDecorators === void 0 ? void 0 : allDecorators.parameters, parameterDecoratorsContainPrivateIdentifierInExpression))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function transformDecoratorsOfClassElements(node, members) {
|
|
var decorationStatements = [];
|
|
addClassElementDecorationStatements(decorationStatements, node, false);
|
|
addClassElementDecorationStatements(decorationStatements, node, true);
|
|
if (hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node)) {
|
|
members = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], members, true), [
|
|
factory.createClassStaticBlockDeclaration(factory.createBlock(decorationStatements, true))
|
|
], false)), members);
|
|
decorationStatements = undefined;
|
|
}
|
|
return { decorationStatements: decorationStatements, members: members };
|
|
}
|
|
function transformClassDeclarationWithoutClassDecorators(node, name) {
|
|
var _a;
|
|
var modifiers = ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier);
|
|
var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause);
|
|
var members = ts.visitNodes(node.members, visitor, ts.isClassElement);
|
|
var decorationStatements = [];
|
|
(_a = transformDecoratorsOfClassElements(node, members), members = _a.members, decorationStatements = _a.decorationStatements);
|
|
var updated = factory.updateClassDeclaration(node, modifiers, name, undefined, heritageClauses, members);
|
|
return ts.addRange([updated], decorationStatements);
|
|
}
|
|
function transformClassDeclarationWithClassDecorators(node, name) {
|
|
var _a;
|
|
var location = ts.moveRangePastModifiers(node);
|
|
var classAlias = getClassAliasIfNeeded(node);
|
|
var declName = languageVersion <= 2 ?
|
|
factory.getInternalName(node, false, true) :
|
|
factory.getLocalName(node, false, true);
|
|
var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause);
|
|
var members = ts.visitNodes(node.members, visitor, ts.isClassElement);
|
|
var decorationStatements = [];
|
|
(_a = transformDecoratorsOfClassElements(node, members), members = _a.members, decorationStatements = _a.decorationStatements);
|
|
var classExpression = factory.createClassExpression(undefined, name, undefined, heritageClauses, members);
|
|
ts.setOriginalNode(classExpression, node);
|
|
ts.setTextRange(classExpression, location);
|
|
var statement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(declName, undefined, undefined, classAlias ? factory.createAssignment(classAlias, classExpression) : classExpression)
|
|
], 1));
|
|
ts.setOriginalNode(statement, node);
|
|
ts.setTextRange(statement, location);
|
|
ts.setCommentRange(statement, node);
|
|
var statements = [statement];
|
|
ts.addRange(statements, decorationStatements);
|
|
addConstructorDecorationStatement(statements, node);
|
|
return statements;
|
|
}
|
|
function visitClassExpression(node) {
|
|
return factory.updateClassExpression(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement));
|
|
}
|
|
function visitConstructorDeclaration(node) {
|
|
return factory.updateConstructorDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), ts.visitNode(node.body, visitor, ts.isBlock));
|
|
}
|
|
function finishClassElement(updated, original) {
|
|
if (updated !== original) {
|
|
ts.setCommentRange(updated, original);
|
|
ts.setSourceMapRange(updated, ts.moveRangePastModifiers(original));
|
|
}
|
|
return updated;
|
|
}
|
|
function visitMethodDeclaration(node) {
|
|
return finishClassElement(factory.updateMethodDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.visitNode(node.name, visitor, ts.isPropertyName), undefined, undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, visitor, ts.isBlock)), node);
|
|
}
|
|
function visitGetAccessorDeclaration(node) {
|
|
return finishClassElement(factory.updateGetAccessorDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, visitor, ts.isBlock)), node);
|
|
}
|
|
function visitSetAccessorDeclaration(node) {
|
|
return finishClassElement(factory.updateSetAccessorDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), ts.visitNode(node.body, visitor, ts.isBlock)), node);
|
|
}
|
|
function visitPropertyDeclaration(node) {
|
|
if (node.flags & 16777216 || ts.hasSyntacticModifier(node, 2)) {
|
|
return undefined;
|
|
}
|
|
return finishClassElement(factory.updatePropertyDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.visitNode(node.name, visitor, ts.isPropertyName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression)), node);
|
|
}
|
|
function visitParameterDeclaration(node) {
|
|
var updated = factory.updateParameterDeclaration(node, ts.elideNodes(factory, node.modifiers), node.dotDotDotToken, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
|
|
if (updated !== node) {
|
|
ts.setCommentRange(updated, node);
|
|
ts.setTextRange(updated, ts.moveRangePastModifiers(node));
|
|
ts.setSourceMapRange(updated, ts.moveRangePastModifiers(node));
|
|
ts.setEmitFlags(updated.name, 32);
|
|
}
|
|
return updated;
|
|
}
|
|
function transformAllDecoratorsOfDeclaration(allDecorators) {
|
|
if (!allDecorators) {
|
|
return undefined;
|
|
}
|
|
var decoratorExpressions = [];
|
|
ts.addRange(decoratorExpressions, ts.map(allDecorators.decorators, transformDecorator));
|
|
ts.addRange(decoratorExpressions, ts.flatMap(allDecorators.parameters, transformDecoratorsOfParameter));
|
|
return decoratorExpressions;
|
|
}
|
|
function addClassElementDecorationStatements(statements, node, isStatic) {
|
|
ts.addRange(statements, ts.map(generateClassElementDecorationExpressions(node, isStatic), function (expr) { return factory.createExpressionStatement(expr); }));
|
|
}
|
|
function isDecoratedClassElement(member, isStaticElement, parent) {
|
|
return ts.nodeOrChildIsDecorated(member, parent)
|
|
&& isStaticElement === ts.isStatic(member);
|
|
}
|
|
function getDecoratedClassElements(node, isStatic) {
|
|
return ts.filter(node.members, function (m) { return isDecoratedClassElement(m, isStatic, node); });
|
|
}
|
|
function generateClassElementDecorationExpressions(node, isStatic) {
|
|
var members = getDecoratedClassElements(node, isStatic);
|
|
var expressions;
|
|
for (var _i = 0, members_8 = members; _i < members_8.length; _i++) {
|
|
var member = members_8[_i];
|
|
expressions = ts.append(expressions, generateClassElementDecorationExpression(node, member));
|
|
}
|
|
return expressions;
|
|
}
|
|
function generateClassElementDecorationExpression(node, member) {
|
|
var allDecorators = ts.getAllDecoratorsOfClassElement(member, node);
|
|
var decoratorExpressions = transformAllDecoratorsOfDeclaration(allDecorators);
|
|
if (!decoratorExpressions) {
|
|
return undefined;
|
|
}
|
|
var prefix = getClassMemberPrefix(node, member);
|
|
var memberName = getExpressionForPropertyName(member, !ts.hasSyntacticModifier(member, 2));
|
|
var descriptor = languageVersion > 0
|
|
? member.kind === 167
|
|
? factory.createVoidZero()
|
|
: factory.createNull()
|
|
: undefined;
|
|
var helper = emitHelpers().createDecorateHelper(decoratorExpressions, prefix, memberName, descriptor);
|
|
ts.setEmitFlags(helper, 1536);
|
|
ts.setSourceMapRange(helper, ts.moveRangePastModifiers(member));
|
|
return helper;
|
|
}
|
|
function addConstructorDecorationStatement(statements, node) {
|
|
var expression = generateConstructorDecorationExpression(node);
|
|
if (expression) {
|
|
statements.push(ts.setOriginalNode(factory.createExpressionStatement(expression), node));
|
|
}
|
|
}
|
|
function generateConstructorDecorationExpression(node) {
|
|
var allDecorators = ts.getAllDecoratorsOfClass(node);
|
|
var decoratorExpressions = transformAllDecoratorsOfDeclaration(allDecorators);
|
|
if (!decoratorExpressions) {
|
|
return undefined;
|
|
}
|
|
var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
|
|
var localName = languageVersion <= 2 ?
|
|
factory.getInternalName(node, false, true) :
|
|
factory.getLocalName(node, false, true);
|
|
var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
|
|
var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
|
|
ts.setEmitFlags(expression, 1536);
|
|
ts.setSourceMapRange(expression, ts.moveRangePastModifiers(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 = emitHelpers().createParamHelper(transformDecorator(decorator), parameterOffset);
|
|
ts.setTextRange(helper, decorator.expression);
|
|
ts.setEmitFlags(helper, 1536);
|
|
expressions.push(helper);
|
|
}
|
|
}
|
|
return expressions;
|
|
}
|
|
function getExpressionForPropertyName(member, generateNameForComputedPropertyName) {
|
|
var name = member.name;
|
|
if (ts.isPrivateIdentifier(name)) {
|
|
return factory.createIdentifier("");
|
|
}
|
|
else if (ts.isComputedPropertyName(name)) {
|
|
return generateNameForComputedPropertyName && !ts.isSimpleInlineableExpression(name.expression)
|
|
? factory.getGeneratedNameForNode(name)
|
|
: name.expression;
|
|
}
|
|
else if (ts.isIdentifier(name)) {
|
|
return factory.createStringLiteral(ts.idText(name));
|
|
}
|
|
else {
|
|
return factory.cloneNode(name);
|
|
}
|
|
}
|
|
function enableSubstitutionForClassAliases() {
|
|
if (!classAliases) {
|
|
context.enableSubstitution(79);
|
|
classAliases = [];
|
|
}
|
|
}
|
|
function getClassAliasIfNeeded(node) {
|
|
if (resolver.getNodeCheckFlags(node) & 16777216) {
|
|
enableSubstitutionForClassAliases();
|
|
var classAlias = factory.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 factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
|
|
}
|
|
function getClassMemberPrefix(node, member) {
|
|
return ts.isStatic(member)
|
|
? factory.getDeclarationName(node)
|
|
: getClassPrototype(node);
|
|
}
|
|
function onSubstituteNode(hint, node) {
|
|
node = previousOnSubstituteNode(hint, node);
|
|
if (hint === 1) {
|
|
return substituteExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpressionIdentifier(node) {
|
|
var _a;
|
|
return (_a = trySubstituteClassAlias(node)) !== null && _a !== void 0 ? _a : node;
|
|
}
|
|
function trySubstituteClassAlias(node) {
|
|
if (classAliases) {
|
|
if (resolver.getNodeCheckFlags(node) & 33554432) {
|
|
var declaration = resolver.getReferencedValueDeclaration(node);
|
|
if (declaration) {
|
|
var classAlias = classAliases[declaration.id];
|
|
if (classAlias) {
|
|
var clone_3 = factory.cloneNode(classAlias);
|
|
ts.setSourceMapRange(clone_3, node);
|
|
ts.setCommentRange(clone_3, node);
|
|
return clone_3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.transformLegacyDecorators = transformLegacyDecorators;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES2017(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory, 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 capturedSuperProperties;
|
|
var hasSuperElementAccess;
|
|
var substitutedSuperAccessors = [];
|
|
var contextFlags = 0;
|
|
var previousOnEmitNode = context.onEmitNode;
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onEmitNode = onEmitNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
setContextFlag(1, false);
|
|
setContextFlag(2, !ts.isEffectiveStrictModeSourceFile(node, compilerOptions));
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
ts.addEmitHelpers(visited, context.readEmitHelpers());
|
|
return visited;
|
|
}
|
|
function setContextFlag(flag, val) {
|
|
contextFlags = val ? contextFlags | flag : contextFlags & ~flag;
|
|
}
|
|
function inContext(flags) {
|
|
return (contextFlags & flags) !== 0;
|
|
}
|
|
function inTopLevelContext() {
|
|
return !inContext(1);
|
|
}
|
|
function inHasLexicalThisContext() {
|
|
return inContext(2);
|
|
}
|
|
function doWithContext(flags, cb, value) {
|
|
var contextFlagsToSet = flags & ~contextFlags;
|
|
if (contextFlagsToSet) {
|
|
setContextFlag(contextFlagsToSet, true);
|
|
var result = cb(value);
|
|
setContextFlag(contextFlagsToSet, false);
|
|
return result;
|
|
}
|
|
return cb(value);
|
|
}
|
|
function visitDefault(node) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
if ((node.transformFlags & 256) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 131:
|
|
return undefined;
|
|
case 218:
|
|
return visitAwaitExpression(node);
|
|
case 169:
|
|
return doWithContext(1 | 2, visitMethodDeclaration, node);
|
|
case 256:
|
|
return doWithContext(1 | 2, visitFunctionDeclaration, node);
|
|
case 213:
|
|
return doWithContext(1 | 2, visitFunctionExpression, node);
|
|
case 214:
|
|
return doWithContext(1, visitArrowFunction, node);
|
|
case 206:
|
|
if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106) {
|
|
capturedSuperProperties.add(node.name.escapedText);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 207:
|
|
if (capturedSuperProperties && node.expression.kind === 106) {
|
|
hasSuperElementAccess = true;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 172:
|
|
case 173:
|
|
case 171:
|
|
case 257:
|
|
case 226:
|
|
return doWithContext(1 | 2, visitDefault, node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function asyncBodyVisitor(node) {
|
|
if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
|
|
switch (node.kind) {
|
|
case 237:
|
|
return visitVariableStatementInAsyncBody(node);
|
|
case 242:
|
|
return visitForStatementInAsyncBody(node);
|
|
case 243:
|
|
return visitForInStatementInAsyncBody(node);
|
|
case 244:
|
|
return visitForOfStatementInAsyncBody(node);
|
|
case 292:
|
|
return visitCatchClauseInAsyncBody(node);
|
|
case 235:
|
|
case 249:
|
|
case 263:
|
|
case 289:
|
|
case 290:
|
|
case 252:
|
|
case 240:
|
|
case 241:
|
|
case 239:
|
|
case 248:
|
|
case 250:
|
|
return ts.visitEachChild(node, asyncBodyVisitor, context);
|
|
default:
|
|
return ts.Debug.assertNever(node, "Unhandled node.");
|
|
}
|
|
}
|
|
return visitor(node);
|
|
}
|
|
function visitCatchClauseInAsyncBody(node) {
|
|
var catchClauseNames = new ts.Set();
|
|
recordDeclarationName(node.variableDeclaration, catchClauseNames);
|
|
var catchClauseUnshadowedNames;
|
|
catchClauseNames.forEach(function (_, escapedName) {
|
|
if (enclosingFunctionParameterNames.has(escapedName)) {
|
|
if (!catchClauseUnshadowedNames) {
|
|
catchClauseUnshadowedNames = new ts.Set(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 ? factory.createExpressionStatement(expression) : undefined;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitForInStatementInAsyncBody(node) {
|
|
return factory.updateForInStatement(node, isVariableDeclarationListWithCollidingName(node.initializer)
|
|
? visitVariableDeclarationListWithCollidingNames(node.initializer, true)
|
|
: ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, asyncBodyVisitor, context));
|
|
}
|
|
function visitForOfStatementInAsyncBody(node) {
|
|
return factory.updateForOfStatement(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.visitIterationBody(node.statement, asyncBodyVisitor, context));
|
|
}
|
|
function visitForStatementInAsyncBody(node) {
|
|
var initializer = node.initializer;
|
|
return factory.updateForStatement(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.visitIterationBody(node.statement, asyncBodyVisitor, context));
|
|
}
|
|
function visitAwaitExpression(node) {
|
|
if (inTopLevelContext()) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createYieldExpression(undefined, ts.visitNode(node.expression, visitor, ts.isExpression)), node), node);
|
|
}
|
|
function visitMethodDeclaration(node) {
|
|
return factory.updateMethodDeclaration(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), 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 factory.updateFunctionDeclaration(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), 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 factory.updateFunctionExpression(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), 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 factory.updateArrowFunction(node, ts.visitNodes(node.modifiers, visitor, ts.isModifierLike), 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.add(name.escapedText);
|
|
}
|
|
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(factory.converters.convertToAssignmentElementTarget(node.declarations[0].name), visitor, ts.isExpression);
|
|
}
|
|
return undefined;
|
|
}
|
|
return factory.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(factory.createAssignment(factory.converters.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 === 214;
|
|
var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0;
|
|
var savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames;
|
|
enclosingFunctionParameterNames = new ts.Set();
|
|
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
|
|
var parameter = _a[_i];
|
|
recordDeclarationName(parameter, enclosingFunctionParameterNames);
|
|
}
|
|
var savedCapturedSuperProperties = capturedSuperProperties;
|
|
var savedHasSuperElementAccess = hasSuperElementAccess;
|
|
if (!isArrowFunction) {
|
|
capturedSuperProperties = new ts.Set();
|
|
hasSuperElementAccess = false;
|
|
}
|
|
var result;
|
|
if (!isArrowFunction) {
|
|
var statements = [];
|
|
var statementOffset = factory.copyPrologue(node.body.statements, statements, false, visitor);
|
|
statements.push(factory.createReturnStatement(emitHelpers().createAwaiterHelper(inHasLexicalThisContext(), hasLexicalArguments, promiseConstructor, transformAsyncFunctionBodyWorker(node.body, statementOffset))));
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var emitSuperHelpers = languageVersion >= 2 && resolver.getNodeCheckFlags(node) & (4096 | 2048);
|
|
if (emitSuperHelpers) {
|
|
enableSubstitutionForAsyncMethodsWithSuper();
|
|
if (capturedSuperProperties.size) {
|
|
var variableStatement = createSuperAccessVariableStatement(factory, resolver, node, capturedSuperProperties);
|
|
substitutedSuperAccessors[ts.getNodeId(variableStatement)] = true;
|
|
ts.insertStatementsAfterStandardPrologue(statements, [variableStatement]);
|
|
}
|
|
}
|
|
var block = factory.createBlock(statements, true);
|
|
ts.setTextRange(block, node.body);
|
|
if (emitSuperHelpers && hasSuperElementAccess) {
|
|
if (resolver.getNodeCheckFlags(node) & 4096) {
|
|
ts.addEmitHelper(block, ts.advancedAsyncSuperHelper);
|
|
}
|
|
else if (resolver.getNodeCheckFlags(node) & 2048) {
|
|
ts.addEmitHelper(block, ts.asyncSuperHelper);
|
|
}
|
|
}
|
|
result = block;
|
|
}
|
|
else {
|
|
var expression = emitHelpers().createAwaiterHelper(inHasLexicalThisContext(), hasLexicalArguments, promiseConstructor, transformAsyncFunctionBodyWorker(node.body));
|
|
var declarations = endLexicalEnvironment();
|
|
if (ts.some(declarations)) {
|
|
var block = factory.converters.convertToFunctionBlock(expression);
|
|
result = factory.updateBlock(block, ts.setTextRange(factory.createNodeArray(ts.concatenate(declarations, block.statements)), block.statements));
|
|
}
|
|
else {
|
|
result = expression;
|
|
}
|
|
}
|
|
enclosingFunctionParameterNames = savedEnclosingFunctionParameterNames;
|
|
if (!isArrowFunction) {
|
|
capturedSuperProperties = savedCapturedSuperProperties;
|
|
hasSuperElementAccess = savedHasSuperElementAccess;
|
|
}
|
|
return result;
|
|
}
|
|
function transformAsyncFunctionBodyWorker(body, start) {
|
|
if (ts.isBlock(body)) {
|
|
return factory.updateBlock(body, ts.visitNodes(body.statements, asyncBodyVisitor, ts.isStatement, start));
|
|
}
|
|
else {
|
|
return factory.converters.convertToFunctionBlock(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(208);
|
|
context.enableSubstitution(206);
|
|
context.enableSubstitution(207);
|
|
context.enableEmitNotification(257);
|
|
context.enableEmitNotification(169);
|
|
context.enableEmitNotification(172);
|
|
context.enableEmitNotification(173);
|
|
context.enableEmitNotification(171);
|
|
context.enableEmitNotification(237);
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
else if (enabledSubstitutions && substitutedSuperAccessors[ts.getNodeId(node)]) {
|
|
var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags;
|
|
enclosingSuperContainerFlags = 0;
|
|
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 206:
|
|
return substitutePropertyAccessExpression(node);
|
|
case 207:
|
|
return substituteElementAccessExpression(node);
|
|
case 208:
|
|
return substituteCallExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substitutePropertyAccessExpression(node) {
|
|
if (node.expression.kind === 106) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 | 32), node.name), node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteElementAccessExpression(node) {
|
|
if (node.expression.kind === 106) {
|
|
return createSuperElementAccessInAsyncMethod(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 factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), undefined, __spreadArray([
|
|
factory.createThis()
|
|
], node.arguments, true));
|
|
}
|
|
return node;
|
|
}
|
|
function isSuperContainer(node) {
|
|
var kind = node.kind;
|
|
return kind === 257
|
|
|| kind === 171
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173;
|
|
}
|
|
function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
|
|
if (enclosingSuperContainerFlags & 4096) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.createCallExpression(factory.createUniqueName("_superIndex", 16 | 32), undefined, [argumentExpression]), "value"), location);
|
|
}
|
|
else {
|
|
return ts.setTextRange(factory.createCallExpression(factory.createUniqueName("_superIndex", 16 | 32), undefined, [argumentExpression]), location);
|
|
}
|
|
}
|
|
}
|
|
ts.transformES2017 = transformES2017;
|
|
function createSuperAccessVariableStatement(factory, resolver, node, names) {
|
|
var hasBinding = (resolver.getNodeCheckFlags(node) & 4096) !== 0;
|
|
var accessors = [];
|
|
names.forEach(function (_, key) {
|
|
var name = ts.unescapeLeadingUnderscores(key);
|
|
var getterAndSetter = [];
|
|
getterAndSetter.push(factory.createPropertyAssignment("get", factory.createArrowFunction(undefined, undefined, [], undefined, undefined, ts.setEmitFlags(factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createSuper(), 4), name), 4))));
|
|
if (hasBinding) {
|
|
getterAndSetter.push(factory.createPropertyAssignment("set", factory.createArrowFunction(undefined, undefined, [
|
|
factory.createParameterDeclaration(undefined, undefined, "v", undefined, undefined, undefined)
|
|
], undefined, undefined, factory.createAssignment(ts.setEmitFlags(factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createSuper(), 4), name), 4), factory.createIdentifier("v")))));
|
|
}
|
|
accessors.push(factory.createPropertyAssignment(name, factory.createObjectLiteralExpression(getterAndSetter)));
|
|
});
|
|
return factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.createUniqueName("_super", 16 | 32), undefined, undefined, factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "create"), undefined, [
|
|
factory.createNull(),
|
|
factory.createObjectLiteralExpression(accessors, true)
|
|
]))
|
|
], 2));
|
|
}
|
|
ts.createSuperAccessVariableStatement = createSuperAccessVariableStatement;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES2018(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory, 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 exportedVariableStatement = false;
|
|
var enabledSubstitutions;
|
|
var enclosingFunctionFlags;
|
|
var parametersWithPrecedingObjectRestOrSpread;
|
|
var enclosingSuperContainerFlags = 0;
|
|
var hierarchyFacts = 0;
|
|
var currentSourceFile;
|
|
var taggedTemplateStringDeclarations;
|
|
var capturedSuperProperties;
|
|
var hasSuperElementAccess;
|
|
var substitutedSuperAccessors = [];
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function affectsSubtree(excludeFacts, includeFacts) {
|
|
return hierarchyFacts !== (hierarchyFacts & ~excludeFacts | includeFacts);
|
|
}
|
|
function enterSubtree(excludeFacts, includeFacts) {
|
|
var ancestorFacts = hierarchyFacts;
|
|
hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 3;
|
|
return ancestorFacts;
|
|
}
|
|
function exitSubtree(ancestorFacts) {
|
|
hierarchyFacts = ancestorFacts;
|
|
}
|
|
function recordTaggedTemplateString(temp) {
|
|
taggedTemplateStringDeclarations = ts.append(taggedTemplateStringDeclarations, factory.createVariableDeclaration(temp));
|
|
}
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
currentSourceFile = node;
|
|
var visited = visitSourceFile(node);
|
|
ts.addEmitHelpers(visited, context.readEmitHelpers());
|
|
currentSourceFile = undefined;
|
|
taggedTemplateStringDeclarations = undefined;
|
|
return visited;
|
|
}
|
|
function visitor(node) {
|
|
return visitorWorker(node, false);
|
|
}
|
|
function visitorWithUnusedExpressionResult(node) {
|
|
return visitorWorker(node, true);
|
|
}
|
|
function visitorNoAsyncModifier(node) {
|
|
if (node.kind === 131) {
|
|
return undefined;
|
|
}
|
|
return node;
|
|
}
|
|
function doWithHierarchyFacts(cb, value, excludeFacts, includeFacts) {
|
|
if (affectsSubtree(excludeFacts, includeFacts)) {
|
|
var ancestorFacts = enterSubtree(excludeFacts, includeFacts);
|
|
var result = cb(value);
|
|
exitSubtree(ancestorFacts);
|
|
return result;
|
|
}
|
|
return cb(value);
|
|
}
|
|
function visitDefault(node) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitorWorker(node, expressionResultIsUnused) {
|
|
if ((node.transformFlags & 128) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 218:
|
|
return visitAwaitExpression(node);
|
|
case 224:
|
|
return visitYieldExpression(node);
|
|
case 247:
|
|
return visitReturnStatement(node);
|
|
case 250:
|
|
return visitLabeledStatement(node);
|
|
case 205:
|
|
return visitObjectLiteralExpression(node);
|
|
case 221:
|
|
return visitBinaryExpression(node, expressionResultIsUnused);
|
|
case 351:
|
|
return visitCommaListExpression(node, expressionResultIsUnused);
|
|
case 292:
|
|
return visitCatchClause(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 254:
|
|
return visitVariableDeclaration(node);
|
|
case 240:
|
|
case 241:
|
|
case 243:
|
|
return doWithHierarchyFacts(visitDefault, node, 0, 2);
|
|
case 244:
|
|
return visitForOfStatement(node, undefined);
|
|
case 242:
|
|
return doWithHierarchyFacts(visitForStatement, node, 0, 2);
|
|
case 217:
|
|
return visitVoidExpression(node);
|
|
case 171:
|
|
return doWithHierarchyFacts(visitConstructorDeclaration, node, 2, 1);
|
|
case 169:
|
|
return doWithHierarchyFacts(visitMethodDeclaration, node, 2, 1);
|
|
case 172:
|
|
return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2, 1);
|
|
case 173:
|
|
return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2, 1);
|
|
case 256:
|
|
return doWithHierarchyFacts(visitFunctionDeclaration, node, 2, 1);
|
|
case 213:
|
|
return doWithHierarchyFacts(visitFunctionExpression, node, 2, 1);
|
|
case 214:
|
|
return doWithHierarchyFacts(visitArrowFunction, node, 2, 0);
|
|
case 164:
|
|
return visitParameter(node);
|
|
case 238:
|
|
return visitExpressionStatement(node);
|
|
case 212:
|
|
return visitParenthesizedExpression(node, expressionResultIsUnused);
|
|
case 210:
|
|
return visitTaggedTemplateExpression(node);
|
|
case 206:
|
|
if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106) {
|
|
capturedSuperProperties.add(node.name.escapedText);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 207:
|
|
if (capturedSuperProperties && node.expression.kind === 106) {
|
|
hasSuperElementAccess = true;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 257:
|
|
case 226:
|
|
return doWithHierarchyFacts(visitDefault, node, 2, 1);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitAwaitExpression(node) {
|
|
if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createYieldExpression(undefined, emitHelpers().createAwaitHelper(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(ts.Debug.checkDefined(node.expression), visitor, ts.isExpression);
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createYieldExpression(undefined, emitHelpers().createAwaitHelper(factory.updateYieldExpression(node, node.asteriskToken, ts.setTextRange(emitHelpers().createAsyncDelegatorHelper(ts.setTextRange(emitHelpers().createAsyncValuesHelper(expression), expression)), expression)))), node), node);
|
|
}
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createYieldExpression(undefined, createDownlevelAwait(node.expression
|
|
? ts.visitNode(node.expression, visitor, ts.isExpression)
|
|
: factory.createVoidZero())), node), node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitReturnStatement(node) {
|
|
if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) {
|
|
return factory.updateReturnStatement(node, createDownlevelAwait(node.expression ? ts.visitNode(node.expression, visitor, ts.isExpression) : factory.createVoidZero()));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitLabeledStatement(node) {
|
|
if (enclosingFunctionFlags & 2) {
|
|
var statement = ts.unwrapInnermostStatementOfLabel(node);
|
|
if (statement.kind === 244 && statement.awaitModifier) {
|
|
return visitForOfStatement(statement, node);
|
|
}
|
|
return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function chunkObjectLiteralElements(elements) {
|
|
var chunkObject;
|
|
var objects = [];
|
|
for (var _i = 0, elements_5 = elements; _i < elements_5.length; _i++) {
|
|
var e = elements_5[_i];
|
|
if (e.kind === 298) {
|
|
if (chunkObject) {
|
|
objects.push(factory.createObjectLiteralExpression(chunkObject));
|
|
chunkObject = undefined;
|
|
}
|
|
var target = e.expression;
|
|
objects.push(ts.visitNode(target, visitor, ts.isExpression));
|
|
}
|
|
else {
|
|
chunkObject = ts.append(chunkObject, e.kind === 296
|
|
? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
|
|
: ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
|
|
}
|
|
}
|
|
if (chunkObject) {
|
|
objects.push(factory.createObjectLiteralExpression(chunkObject));
|
|
}
|
|
return objects;
|
|
}
|
|
function visitObjectLiteralExpression(node) {
|
|
if (node.transformFlags & 65536) {
|
|
var objects = chunkObjectLiteralElements(node.properties);
|
|
if (objects.length && objects[0].kind !== 205) {
|
|
objects.unshift(factory.createObjectLiteralExpression());
|
|
}
|
|
var expression = objects[0];
|
|
if (objects.length > 1) {
|
|
for (var i = 1; i < objects.length; i++) {
|
|
expression = emitHelpers().createAssignHelper([expression, objects[i]]);
|
|
}
|
|
return expression;
|
|
}
|
|
else {
|
|
return emitHelpers().createAssignHelper(objects);
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitExpressionStatement(node) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
function visitParenthesizedExpression(node, expressionResultIsUnused) {
|
|
return ts.visitEachChild(node, expressionResultIsUnused ? visitorWithUnusedExpressionResult : visitor, context);
|
|
}
|
|
function visitSourceFile(node) {
|
|
var ancestorFacts = enterSubtree(2, ts.isEffectiveStrictModeSourceFile(node, compilerOptions) ?
|
|
0 :
|
|
1);
|
|
exportedVariableStatement = false;
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
var statement = ts.concatenate(visited.statements, taggedTemplateStringDeclarations && [
|
|
factory.createVariableStatement(undefined, factory.createVariableDeclarationList(taggedTemplateStringDeclarations))
|
|
]);
|
|
var result = factory.updateSourceFile(visited, ts.setTextRange(factory.createNodeArray(statement), node.statements));
|
|
exitSubtree(ancestorFacts);
|
|
return result;
|
|
}
|
|
function visitTaggedTemplateExpression(node) {
|
|
return ts.processTaggedTemplateExpression(context, node, visitor, currentSourceFile, recordTaggedTemplateString, ts.ProcessLevel.LiftRestriction);
|
|
}
|
|
function visitBinaryExpression(node, expressionResultIsUnused) {
|
|
if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 65536) {
|
|
return ts.flattenDestructuringAssignment(node, visitor, context, 1, !expressionResultIsUnused);
|
|
}
|
|
if (node.operatorToken.kind === 27) {
|
|
return factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorWithUnusedExpressionResult, ts.isExpression), node.operatorToken, ts.visitNode(node.right, expressionResultIsUnused ? visitorWithUnusedExpressionResult : visitor, ts.isExpression));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitCommaListExpression(node, expressionResultIsUnused) {
|
|
if (expressionResultIsUnused) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
var result;
|
|
for (var i = 0; i < node.elements.length; i++) {
|
|
var element = node.elements[i];
|
|
var visited = ts.visitNode(element, i < node.elements.length - 1 ? visitorWithUnusedExpressionResult : visitor, ts.isExpression);
|
|
if (result || visited !== element) {
|
|
result || (result = node.elements.slice(0, i));
|
|
result.push(visited);
|
|
}
|
|
}
|
|
var elements = result ? ts.setTextRange(factory.createNodeArray(result), node.elements) : node.elements;
|
|
return factory.updateCommaListExpression(node, elements);
|
|
}
|
|
function visitCatchClause(node) {
|
|
if (node.variableDeclaration &&
|
|
ts.isBindingPattern(node.variableDeclaration.name) &&
|
|
node.variableDeclaration.name.transformFlags & 65536) {
|
|
var name = factory.getGeneratedNameForNode(node.variableDeclaration.name);
|
|
var updatedDecl = factory.updateVariableDeclaration(node.variableDeclaration, node.variableDeclaration.name, undefined, undefined, name);
|
|
var visitedBindings = ts.flattenDestructuringBinding(updatedDecl, visitor, context, 1);
|
|
var block = ts.visitNode(node.block, visitor, ts.isBlock);
|
|
if (ts.some(visitedBindings)) {
|
|
block = factory.updateBlock(block, __spreadArray([
|
|
factory.createVariableStatement(undefined, visitedBindings)
|
|
], block.statements, true));
|
|
}
|
|
return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, undefined, undefined, undefined), block);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitVariableStatement(node) {
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
var savedExportedVariableStatement = exportedVariableStatement;
|
|
exportedVariableStatement = true;
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
exportedVariableStatement = savedExportedVariableStatement;
|
|
return visited;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitVariableDeclaration(node) {
|
|
if (exportedVariableStatement) {
|
|
var savedExportedVariableStatement = exportedVariableStatement;
|
|
exportedVariableStatement = false;
|
|
var visited = visitVariableDeclarationWorker(node, true);
|
|
exportedVariableStatement = savedExportedVariableStatement;
|
|
return visited;
|
|
}
|
|
return visitVariableDeclarationWorker(node, false);
|
|
}
|
|
function visitVariableDeclarationWorker(node, exportedVariableStatement) {
|
|
if (ts.isBindingPattern(node.name) && node.name.transformFlags & 65536) {
|
|
return ts.flattenDestructuringBinding(node, visitor, context, 1, undefined, exportedVariableStatement);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitForStatement(node) {
|
|
return factory.updateForStatement(node, ts.visitNode(node.initializer, visitorWithUnusedExpressionResult, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitorWithUnusedExpressionResult, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
|
|
}
|
|
function visitVoidExpression(node) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
function visitForOfStatement(node, outermostLabeledStatement) {
|
|
var ancestorFacts = enterSubtree(0, 2);
|
|
if (node.initializer.transformFlags & 65536) {
|
|
node = transformForOfStatementWithObjectRest(node);
|
|
}
|
|
var result = node.awaitModifier ?
|
|
transformForAwaitOfStatement(node, outermostLabeledStatement, ancestorFacts) :
|
|
factory.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement);
|
|
exitSubtree(ancestorFacts);
|
|
return result;
|
|
}
|
|
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 = factory.createTempVariable(undefined);
|
|
var statements = [ts.createForOfBindingStatement(factory, 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 factory.updateForOfStatement(node, node.awaitModifier, ts.setTextRange(factory.createVariableDeclarationList([
|
|
ts.setTextRange(factory.createVariableDeclaration(temp), node.initializer)
|
|
], 1), node.initializer), node.expression, ts.setTextRange(factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), statementsLocation), true), bodyLocation));
|
|
}
|
|
return node;
|
|
}
|
|
function convertForOfStatementHead(node, boundValue) {
|
|
var binding = ts.createForOfBindingStatement(factory, node.initializer, boundValue);
|
|
var bodyLocation;
|
|
var statementsLocation;
|
|
var statements = [ts.visitNode(binding, visitor, ts.isStatement)];
|
|
var statement = ts.visitIterationBody(node.statement, visitor, context);
|
|
if (ts.isBlock(statement)) {
|
|
ts.addRange(statements, statement.statements);
|
|
bodyLocation = statement;
|
|
statementsLocation = statement.statements;
|
|
}
|
|
else {
|
|
statements.push(statement);
|
|
}
|
|
return ts.setEmitFlags(ts.setTextRange(factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), statementsLocation), true), bodyLocation), 48 | 384);
|
|
}
|
|
function createDownlevelAwait(expression) {
|
|
return enclosingFunctionFlags & 1
|
|
? factory.createYieldExpression(undefined, emitHelpers().createAwaitHelper(expression))
|
|
: factory.createAwaitExpression(expression);
|
|
}
|
|
function transformForAwaitOfStatement(node, outermostLabeledStatement, ancestorFacts) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
var iterator = ts.isIdentifier(expression) ? factory.getGeneratedNameForNode(expression) : factory.createTempVariable(undefined);
|
|
var result = ts.isIdentifier(expression) ? factory.getGeneratedNameForNode(iterator) : factory.createTempVariable(undefined);
|
|
var errorRecord = factory.createUniqueName("e");
|
|
var catchVariable = factory.getGeneratedNameForNode(errorRecord);
|
|
var returnMethod = factory.createTempVariable(undefined);
|
|
var callValues = ts.setTextRange(emitHelpers().createAsyncValuesHelper(expression), node.expression);
|
|
var callNext = factory.createCallExpression(factory.createPropertyAccessExpression(iterator, "next"), undefined, []);
|
|
var getDone = factory.createPropertyAccessExpression(result, "done");
|
|
var getValue = factory.createPropertyAccessExpression(result, "value");
|
|
var callReturn = factory.createFunctionCallCall(returnMethod, iterator, []);
|
|
hoistVariableDeclaration(errorRecord);
|
|
hoistVariableDeclaration(returnMethod);
|
|
var initializer = ancestorFacts & 2 ?
|
|
factory.inlineExpressions([factory.createAssignment(errorRecord, factory.createVoidZero()), callValues]) :
|
|
callValues;
|
|
var forStatement = ts.setEmitFlags(ts.setTextRange(factory.createForStatement(ts.setEmitFlags(ts.setTextRange(factory.createVariableDeclarationList([
|
|
ts.setTextRange(factory.createVariableDeclaration(iterator, undefined, undefined, initializer), node.expression),
|
|
factory.createVariableDeclaration(result)
|
|
]), node.expression), 2097152), factory.createComma(factory.createAssignment(result, createDownlevelAwait(callNext)), factory.createLogicalNot(getDone)), undefined, convertForOfStatementHead(node, getValue)), node), 256);
|
|
ts.setOriginalNode(forStatement, node);
|
|
return factory.createTryStatement(factory.createBlock([
|
|
factory.restoreEnclosingLabel(forStatement, outermostLabeledStatement)
|
|
]), factory.createCatchClause(factory.createVariableDeclaration(catchVariable), ts.setEmitFlags(factory.createBlock([
|
|
factory.createExpressionStatement(factory.createAssignment(errorRecord, factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("error", catchVariable)
|
|
])))
|
|
]), 1)), factory.createBlock([
|
|
factory.createTryStatement(factory.createBlock([
|
|
ts.setEmitFlags(factory.createIfStatement(factory.createLogicalAnd(factory.createLogicalAnd(result, factory.createLogicalNot(getDone)), factory.createAssignment(returnMethod, factory.createPropertyAccessExpression(iterator, "return"))), factory.createExpressionStatement(createDownlevelAwait(callReturn))), 1)
|
|
]), undefined, ts.setEmitFlags(factory.createBlock([
|
|
ts.setEmitFlags(factory.createIfStatement(errorRecord, factory.createThrowStatement(factory.createPropertyAccessExpression(errorRecord, "error"))), 1)
|
|
]), 1))
|
|
]));
|
|
}
|
|
function parameterVisitor(node) {
|
|
ts.Debug.assertNode(node, ts.isParameter);
|
|
return visitParameter(node);
|
|
}
|
|
function visitParameter(node) {
|
|
if (parametersWithPrecedingObjectRestOrSpread === null || parametersWithPrecedingObjectRestOrSpread === void 0 ? void 0 : parametersWithPrecedingObjectRestOrSpread.has(node)) {
|
|
return factory.updateParameterDeclaration(node, undefined, node.dotDotDotToken, ts.isBindingPattern(node.name) ? factory.getGeneratedNameForNode(node) : node.name, undefined, undefined, undefined);
|
|
}
|
|
if (node.transformFlags & 65536) {
|
|
return factory.updateParameterDeclaration(node, undefined, node.dotDotDotToken, factory.getGeneratedNameForNode(node), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function collectParametersWithPrecedingObjectRestOrSpread(node) {
|
|
var parameters;
|
|
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
|
|
var parameter = _a[_i];
|
|
if (parameters) {
|
|
parameters.add(parameter);
|
|
}
|
|
else if (parameter.transformFlags & 65536) {
|
|
parameters = new ts.Set();
|
|
}
|
|
}
|
|
return parameters;
|
|
}
|
|
function visitConstructorDeclaration(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateConstructorDeclaration(node, node.modifiers, ts.visitParameterList(node.parameters, parameterVisitor, context), transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitGetAccessorDeclaration(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateGetAccessorDeclaration(node, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, parameterVisitor, context), undefined, transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitSetAccessorDeclaration(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateSetAccessorDeclaration(node, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, parameterVisitor, context), transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitMethodDeclaration(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateMethodDeclaration(node, enclosingFunctionFlags & 1
|
|
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifierLike)
|
|
: 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, parameterVisitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
|
|
? transformAsyncGeneratorFunctionBody(node)
|
|
: transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateFunctionDeclaration(node, enclosingFunctionFlags & 1
|
|
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
|
|
: node.modifiers, enclosingFunctionFlags & 2
|
|
? undefined
|
|
: node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, parameterVisitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
|
|
? transformAsyncGeneratorFunctionBody(node)
|
|
: transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitArrowFunction(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.updateArrowFunction(node, node.modifiers, undefined, ts.visitParameterList(node.parameters, parameterVisitor, context), undefined, node.equalsGreaterThanToken, transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function visitFunctionExpression(node) {
|
|
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
|
|
var savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread;
|
|
enclosingFunctionFlags = ts.getFunctionFlags(node);
|
|
parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node);
|
|
var updated = factory.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, parameterVisitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
|
|
? transformAsyncGeneratorFunctionBody(node)
|
|
: transformFunctionBody(node));
|
|
enclosingFunctionFlags = savedEnclosingFunctionFlags;
|
|
parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread;
|
|
return updated;
|
|
}
|
|
function transformAsyncGeneratorFunctionBody(node) {
|
|
resumeLexicalEnvironment();
|
|
var statements = [];
|
|
var statementOffset = factory.copyPrologue(node.body.statements, statements, false, visitor);
|
|
appendObjectRestAssignmentsIfNeeded(statements, node);
|
|
var savedCapturedSuperProperties = capturedSuperProperties;
|
|
var savedHasSuperElementAccess = hasSuperElementAccess;
|
|
capturedSuperProperties = new ts.Set();
|
|
hasSuperElementAccess = false;
|
|
var returnStatement = factory.createReturnStatement(emitHelpers().createAsyncGeneratorHelper(factory.createFunctionExpression(undefined, factory.createToken(41), node.name && factory.getGeneratedNameForNode(node.name), undefined, [], undefined, factory.updateBlock(node.body, ts.visitLexicalEnvironment(node.body.statements, visitor, context, statementOffset))), !!(hierarchyFacts & 1)));
|
|
var emitSuperHelpers = languageVersion >= 2 && resolver.getNodeCheckFlags(node) & (4096 | 2048);
|
|
if (emitSuperHelpers) {
|
|
enableSubstitutionForAsyncMethodsWithSuper();
|
|
var variableStatement = ts.createSuperAccessVariableStatement(factory, resolver, node, capturedSuperProperties);
|
|
substitutedSuperAccessors[ts.getNodeId(variableStatement)] = true;
|
|
ts.insertStatementsAfterStandardPrologue(statements, [variableStatement]);
|
|
}
|
|
statements.push(returnStatement);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var block = factory.updateBlock(node.body, statements);
|
|
if (emitSuperHelpers && hasSuperElementAccess) {
|
|
if (resolver.getNodeCheckFlags(node) & 4096) {
|
|
ts.addEmitHelper(block, ts.advancedAsyncSuperHelper);
|
|
}
|
|
else if (resolver.getNodeCheckFlags(node) & 2048) {
|
|
ts.addEmitHelper(block, ts.asyncSuperHelper);
|
|
}
|
|
}
|
|
capturedSuperProperties = savedCapturedSuperProperties;
|
|
hasSuperElementAccess = savedHasSuperElementAccess;
|
|
return block;
|
|
}
|
|
function transformFunctionBody(node) {
|
|
var _a;
|
|
resumeLexicalEnvironment();
|
|
var statementOffset = 0;
|
|
var statements = [];
|
|
var body = (_a = ts.visitNode(node.body, visitor, ts.isConciseBody)) !== null && _a !== void 0 ? _a : factory.createBlock([]);
|
|
if (ts.isBlock(body)) {
|
|
statementOffset = factory.copyPrologue(body.statements, statements, false, visitor);
|
|
}
|
|
ts.addRange(statements, appendObjectRestAssignmentsIfNeeded(undefined, node));
|
|
var leadingStatements = endLexicalEnvironment();
|
|
if (statementOffset > 0 || ts.some(statements) || ts.some(leadingStatements)) {
|
|
var block = factory.converters.convertToFunctionBlock(body, true);
|
|
ts.insertStatementsAfterStandardPrologue(statements, leadingStatements);
|
|
ts.addRange(statements, block.statements.slice(statementOffset));
|
|
return factory.updateBlock(block, ts.setTextRange(factory.createNodeArray(statements), block.statements));
|
|
}
|
|
return body;
|
|
}
|
|
function appendObjectRestAssignmentsIfNeeded(statements, node) {
|
|
var containsPrecedingObjectRestOrSpread = false;
|
|
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
|
|
var parameter = _a[_i];
|
|
if (containsPrecedingObjectRestOrSpread) {
|
|
if (ts.isBindingPattern(parameter.name)) {
|
|
if (parameter.name.elements.length > 0) {
|
|
var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 0, factory.getGeneratedNameForNode(parameter));
|
|
if (ts.some(declarations)) {
|
|
var declarationList = factory.createVariableDeclarationList(declarations);
|
|
var statement = factory.createVariableStatement(undefined, declarationList);
|
|
ts.setEmitFlags(statement, 1048576);
|
|
statements = ts.append(statements, statement);
|
|
}
|
|
}
|
|
else if (parameter.initializer) {
|
|
var name = factory.getGeneratedNameForNode(parameter);
|
|
var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
|
|
var assignment = factory.createAssignment(name, initializer);
|
|
var statement = factory.createExpressionStatement(assignment);
|
|
ts.setEmitFlags(statement, 1048576);
|
|
statements = ts.append(statements, statement);
|
|
}
|
|
}
|
|
else if (parameter.initializer) {
|
|
var name = factory.cloneNode(parameter.name);
|
|
ts.setTextRange(name, parameter.name);
|
|
ts.setEmitFlags(name, 48);
|
|
var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
|
|
ts.addEmitFlags(initializer, 48 | 1536);
|
|
var assignment = factory.createAssignment(name, initializer);
|
|
ts.setTextRange(assignment, parameter);
|
|
ts.setEmitFlags(assignment, 1536);
|
|
var block = factory.createBlock([factory.createExpressionStatement(assignment)]);
|
|
ts.setTextRange(block, parameter);
|
|
ts.setEmitFlags(block, 1 | 32 | 384 | 1536);
|
|
var typeCheck = factory.createTypeCheck(factory.cloneNode(parameter.name), "undefined");
|
|
var statement = factory.createIfStatement(typeCheck, block);
|
|
ts.startOnNewLine(statement);
|
|
ts.setTextRange(statement, parameter);
|
|
ts.setEmitFlags(statement, 384 | 32 | 1048576 | 1536);
|
|
statements = ts.append(statements, statement);
|
|
}
|
|
}
|
|
else if (parameter.transformFlags & 65536) {
|
|
containsPrecedingObjectRestOrSpread = true;
|
|
var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1, factory.getGeneratedNameForNode(parameter), false, true);
|
|
if (ts.some(declarations)) {
|
|
var declarationList = factory.createVariableDeclarationList(declarations);
|
|
var statement = factory.createVariableStatement(undefined, declarationList);
|
|
ts.setEmitFlags(statement, 1048576);
|
|
statements = ts.append(statements, statement);
|
|
}
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function enableSubstitutionForAsyncMethodsWithSuper() {
|
|
if ((enabledSubstitutions & 1) === 0) {
|
|
enabledSubstitutions |= 1;
|
|
context.enableSubstitution(208);
|
|
context.enableSubstitution(206);
|
|
context.enableSubstitution(207);
|
|
context.enableEmitNotification(257);
|
|
context.enableEmitNotification(169);
|
|
context.enableEmitNotification(172);
|
|
context.enableEmitNotification(173);
|
|
context.enableEmitNotification(171);
|
|
context.enableEmitNotification(237);
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
else if (enabledSubstitutions && substitutedSuperAccessors[ts.getNodeId(node)]) {
|
|
var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags;
|
|
enclosingSuperContainerFlags = 0;
|
|
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 206:
|
|
return substitutePropertyAccessExpression(node);
|
|
case 207:
|
|
return substituteElementAccessExpression(node);
|
|
case 208:
|
|
return substituteCallExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substitutePropertyAccessExpression(node) {
|
|
if (node.expression.kind === 106) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 | 32), node.name), node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteElementAccessExpression(node) {
|
|
if (node.expression.kind === 106) {
|
|
return createSuperElementAccessInAsyncMethod(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 factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), undefined, __spreadArray([
|
|
factory.createThis()
|
|
], node.arguments, true));
|
|
}
|
|
return node;
|
|
}
|
|
function isSuperContainer(node) {
|
|
var kind = node.kind;
|
|
return kind === 257
|
|
|| kind === 171
|
|
|| kind === 169
|
|
|| kind === 172
|
|
|| kind === 173;
|
|
}
|
|
function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
|
|
if (enclosingSuperContainerFlags & 4096) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.createCallExpression(factory.createIdentifier("_superIndex"), undefined, [argumentExpression]), "value"), location);
|
|
}
|
|
else {
|
|
return ts.setTextRange(factory.createCallExpression(factory.createIdentifier("_superIndex"), undefined, [argumentExpression]), location);
|
|
}
|
|
}
|
|
}
|
|
ts.transformES2018 = transformES2018;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES2019(context) {
|
|
var factory = context.factory;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
if ((node.transformFlags & 64) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 292:
|
|
return visitCatchClause(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitCatchClause(node) {
|
|
if (!node.variableDeclaration) {
|
|
return factory.updateCatchClause(node, factory.createVariableDeclaration(factory.createTempVariable(undefined)), ts.visitNode(node.block, visitor, ts.isBlock));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
ts.transformES2019 = transformES2019;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES2020(context) {
|
|
var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration;
|
|
return ts.chainBundle(context, 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 208: {
|
|
var updated = visitNonOptionalCallExpression(node, false);
|
|
ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
|
|
return updated;
|
|
}
|
|
case 206:
|
|
case 207:
|
|
if (ts.isOptionalChain(node)) {
|
|
var updated = visitOptionalExpression(node, false, false);
|
|
ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
|
|
return updated;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 221:
|
|
if (node.operatorToken.kind === 60) {
|
|
return transformNullishCoalescingExpression(node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
case 215:
|
|
return visitDeleteExpression(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function flattenChain(chain) {
|
|
ts.Debug.assertNotNode(chain, ts.isNonNullChain);
|
|
var links = [chain];
|
|
while (!chain.questionDotToken && !ts.isTaggedTemplateExpression(chain)) {
|
|
chain = ts.cast(ts.skipPartiallyEmittedExpressions(chain.expression), ts.isOptionalChain);
|
|
ts.Debug.assertNotNode(chain, ts.isNonNullChain);
|
|
links.unshift(chain);
|
|
}
|
|
return { expression: chain.expression, chain: links };
|
|
}
|
|
function visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete) {
|
|
var expression = visitNonOptionalExpression(node.expression, captureThisArg, isDelete);
|
|
if (ts.isSyntheticReference(expression)) {
|
|
return factory.createSyntheticReferenceExpression(factory.updateParenthesizedExpression(node, expression.expression), expression.thisArg);
|
|
}
|
|
return factory.updateParenthesizedExpression(node, expression);
|
|
}
|
|
function visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete) {
|
|
if (ts.isOptionalChain(node)) {
|
|
return visitOptionalExpression(node, captureThisArg, isDelete);
|
|
}
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
ts.Debug.assertNotNode(expression, ts.isSyntheticReference);
|
|
var thisArg;
|
|
if (captureThisArg) {
|
|
if (!ts.isSimpleCopiableExpression(expression)) {
|
|
thisArg = factory.createTempVariable(hoistVariableDeclaration);
|
|
expression = factory.createAssignment(thisArg, expression);
|
|
}
|
|
else {
|
|
thisArg = expression;
|
|
}
|
|
}
|
|
expression = node.kind === 206
|
|
? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
|
|
: factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
|
|
return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
|
|
}
|
|
function visitNonOptionalCallExpression(node, captureThisArg) {
|
|
if (ts.isOptionalChain(node)) {
|
|
return visitOptionalExpression(node, captureThisArg, false);
|
|
}
|
|
if (ts.isParenthesizedExpression(node.expression) && ts.isOptionalChain(ts.skipParentheses(node.expression))) {
|
|
var expression = visitNonOptionalParenthesizedExpression(node.expression, true, false);
|
|
var args = ts.visitNodes(node.arguments, visitor, ts.isExpression);
|
|
if (ts.isSyntheticReference(expression)) {
|
|
return ts.setTextRange(factory.createFunctionCallCall(expression.expression, expression.thisArg, args), node);
|
|
}
|
|
return factory.updateCallExpression(node, expression, undefined, args);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitNonOptionalExpression(node, captureThisArg, isDelete) {
|
|
switch (node.kind) {
|
|
case 212: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
|
|
case 206:
|
|
case 207: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
|
|
case 208: return visitNonOptionalCallExpression(node, captureThisArg);
|
|
default: return ts.visitNode(node, visitor, ts.isExpression);
|
|
}
|
|
}
|
|
function visitOptionalExpression(node, captureThisArg, isDelete) {
|
|
var _a = flattenChain(node), expression = _a.expression, chain = _a.chain;
|
|
var left = visitNonOptionalExpression(ts.skipPartiallyEmittedExpressions(expression), ts.isCallChain(chain[0]), false);
|
|
var leftThisArg = ts.isSyntheticReference(left) ? left.thisArg : undefined;
|
|
var capturedLeft = ts.isSyntheticReference(left) ? left.expression : left;
|
|
var leftExpression = factory.restoreOuterExpressions(expression, capturedLeft, 8);
|
|
if (!ts.isSimpleCopiableExpression(capturedLeft)) {
|
|
capturedLeft = factory.createTempVariable(hoistVariableDeclaration);
|
|
leftExpression = factory.createAssignment(capturedLeft, leftExpression);
|
|
}
|
|
var rightExpression = capturedLeft;
|
|
var thisArg;
|
|
for (var i = 0; i < chain.length; i++) {
|
|
var segment = chain[i];
|
|
switch (segment.kind) {
|
|
case 206:
|
|
case 207:
|
|
if (i === chain.length - 1 && captureThisArg) {
|
|
if (!ts.isSimpleCopiableExpression(rightExpression)) {
|
|
thisArg = factory.createTempVariable(hoistVariableDeclaration);
|
|
rightExpression = factory.createAssignment(thisArg, rightExpression);
|
|
}
|
|
else {
|
|
thisArg = rightExpression;
|
|
}
|
|
}
|
|
rightExpression = segment.kind === 206
|
|
? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
|
|
: factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
|
|
break;
|
|
case 208:
|
|
if (i === 0 && leftThisArg) {
|
|
if (!ts.isGeneratedIdentifier(leftThisArg)) {
|
|
leftThisArg = factory.cloneNode(leftThisArg);
|
|
ts.addEmitFlags(leftThisArg, 1536);
|
|
}
|
|
rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
|
|
}
|
|
else {
|
|
rightExpression = factory.createCallExpression(rightExpression, undefined, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
|
|
}
|
|
break;
|
|
}
|
|
ts.setOriginalNode(rightExpression, segment);
|
|
}
|
|
var target = isDelete
|
|
? factory.createConditionalExpression(createNotNullCondition(leftExpression, capturedLeft, true), undefined, factory.createTrue(), undefined, factory.createDeleteExpression(rightExpression))
|
|
: factory.createConditionalExpression(createNotNullCondition(leftExpression, capturedLeft, true), undefined, factory.createVoidZero(), undefined, rightExpression);
|
|
ts.setTextRange(target, node);
|
|
return thisArg ? factory.createSyntheticReferenceExpression(target, thisArg) : target;
|
|
}
|
|
function createNotNullCondition(left, right, invert) {
|
|
return factory.createBinaryExpression(factory.createBinaryExpression(left, factory.createToken(invert ? 36 : 37), factory.createNull()), factory.createToken(invert ? 56 : 55), factory.createBinaryExpression(right, factory.createToken(invert ? 36 : 37), factory.createVoidZero()));
|
|
}
|
|
function transformNullishCoalescingExpression(node) {
|
|
var left = ts.visitNode(node.left, visitor, ts.isExpression);
|
|
var right = left;
|
|
if (!ts.isSimpleCopiableExpression(left)) {
|
|
right = factory.createTempVariable(hoistVariableDeclaration);
|
|
left = factory.createAssignment(right, left);
|
|
}
|
|
return ts.setTextRange(factory.createConditionalExpression(createNotNullCondition(left, right), undefined, right, undefined, ts.visitNode(node.right, visitor, ts.isExpression)), node);
|
|
}
|
|
function visitDeleteExpression(node) {
|
|
return ts.isOptionalChain(ts.skipParentheses(node.expression))
|
|
? ts.setOriginalNode(visitNonOptionalExpression(node.expression, false, true), node)
|
|
: factory.updateDeleteExpression(node, ts.visitNode(node.expression, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
ts.transformES2020 = transformES2020;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES2021(context) {
|
|
var hoistVariableDeclaration = context.hoistVariableDeclaration, factory = context.factory;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
if ((node.transformFlags & 16) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 221:
|
|
var binaryExpression = node;
|
|
if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
|
|
return transformLogicalAssignment(binaryExpression);
|
|
}
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function transformLogicalAssignment(binaryExpression) {
|
|
var operator = binaryExpression.operatorToken;
|
|
var nonAssignmentOperator = ts.getNonAssignmentOperatorForCompoundAssignment(operator.kind);
|
|
var left = ts.skipParentheses(ts.visitNode(binaryExpression.left, visitor, ts.isLeftHandSideExpression));
|
|
var assignmentTarget = left;
|
|
var right = ts.skipParentheses(ts.visitNode(binaryExpression.right, visitor, ts.isExpression));
|
|
if (ts.isAccessExpression(left)) {
|
|
var propertyAccessTargetSimpleCopiable = ts.isSimpleCopiableExpression(left.expression);
|
|
var propertyAccessTarget = propertyAccessTargetSimpleCopiable ? left.expression :
|
|
factory.createTempVariable(hoistVariableDeclaration);
|
|
var propertyAccessTargetAssignment = propertyAccessTargetSimpleCopiable ? left.expression : factory.createAssignment(propertyAccessTarget, left.expression);
|
|
if (ts.isPropertyAccessExpression(left)) {
|
|
assignmentTarget = factory.createPropertyAccessExpression(propertyAccessTarget, left.name);
|
|
left = factory.createPropertyAccessExpression(propertyAccessTargetAssignment, left.name);
|
|
}
|
|
else {
|
|
var elementAccessArgumentSimpleCopiable = ts.isSimpleCopiableExpression(left.argumentExpression);
|
|
var elementAccessArgument = elementAccessArgumentSimpleCopiable ? left.argumentExpression :
|
|
factory.createTempVariable(hoistVariableDeclaration);
|
|
assignmentTarget = factory.createElementAccessExpression(propertyAccessTarget, elementAccessArgument);
|
|
left = factory.createElementAccessExpression(propertyAccessTargetAssignment, elementAccessArgumentSimpleCopiable ? left.argumentExpression : factory.createAssignment(elementAccessArgument, left.argumentExpression));
|
|
}
|
|
}
|
|
return factory.createBinaryExpression(left, nonAssignmentOperator, factory.createParenthesizedExpression(factory.createAssignment(assignmentTarget, right)));
|
|
}
|
|
}
|
|
ts.transformES2021 = transformES2021;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformESNext(context) {
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
if ((node.transformFlags & 4) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
}
|
|
ts.transformESNext = transformESNext;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformJsx(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory;
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var currentSourceFile;
|
|
var currentFileState;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function getCurrentFileNameExpression() {
|
|
if (currentFileState.filenameDeclaration) {
|
|
return currentFileState.filenameDeclaration.name;
|
|
}
|
|
var declaration = factory.createVariableDeclaration(factory.createUniqueName("_jsxFileName", 16 | 32), undefined, undefined, factory.createStringLiteral(currentSourceFile.fileName));
|
|
currentFileState.filenameDeclaration = declaration;
|
|
return currentFileState.filenameDeclaration.name;
|
|
}
|
|
function getJsxFactoryCalleePrimitive(isStaticChildren) {
|
|
return compilerOptions.jsx === 5 ? "jsxDEV" : isStaticChildren ? "jsxs" : "jsx";
|
|
}
|
|
function getJsxFactoryCallee(isStaticChildren) {
|
|
var type = getJsxFactoryCalleePrimitive(isStaticChildren);
|
|
return getImplicitImportForName(type);
|
|
}
|
|
function getImplicitJsxFragmentReference() {
|
|
return getImplicitImportForName("Fragment");
|
|
}
|
|
function getImplicitImportForName(name) {
|
|
var _a, _b;
|
|
var importSource = name === "createElement"
|
|
? currentFileState.importSpecifier
|
|
: ts.getJSXRuntimeImport(currentFileState.importSpecifier, compilerOptions);
|
|
var existing = (_b = (_a = currentFileState.utilizedImplicitRuntimeImports) === null || _a === void 0 ? void 0 : _a.get(importSource)) === null || _b === void 0 ? void 0 : _b.get(name);
|
|
if (existing) {
|
|
return existing.name;
|
|
}
|
|
if (!currentFileState.utilizedImplicitRuntimeImports) {
|
|
currentFileState.utilizedImplicitRuntimeImports = new ts.Map();
|
|
}
|
|
var specifierSourceImports = currentFileState.utilizedImplicitRuntimeImports.get(importSource);
|
|
if (!specifierSourceImports) {
|
|
specifierSourceImports = new ts.Map();
|
|
currentFileState.utilizedImplicitRuntimeImports.set(importSource, specifierSourceImports);
|
|
}
|
|
var generatedName = factory.createUniqueName("_".concat(name), 16 | 32 | 64);
|
|
var specifier = factory.createImportSpecifier(false, factory.createIdentifier(name), generatedName);
|
|
generatedName.generatedImportReference = specifier;
|
|
specifierSourceImports.set(name, specifier);
|
|
return generatedName;
|
|
}
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
currentSourceFile = node;
|
|
currentFileState = {};
|
|
currentFileState.importSpecifier = ts.getJSXImplicitImportBase(compilerOptions, node);
|
|
var visited = ts.visitEachChild(node, visitor, context);
|
|
ts.addEmitHelpers(visited, context.readEmitHelpers());
|
|
var statements = visited.statements;
|
|
if (currentFileState.filenameDeclaration) {
|
|
statements = ts.insertStatementAfterCustomPrologue(statements.slice(), factory.createVariableStatement(undefined, factory.createVariableDeclarationList([currentFileState.filenameDeclaration], 2)));
|
|
}
|
|
if (currentFileState.utilizedImplicitRuntimeImports) {
|
|
for (var _i = 0, _a = ts.arrayFrom(currentFileState.utilizedImplicitRuntimeImports.entries()); _i < _a.length; _i++) {
|
|
var _b = _a[_i], importSource = _b[0], importSpecifiersMap = _b[1];
|
|
if (ts.isExternalModule(node)) {
|
|
var importStatement = factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamedImports(ts.arrayFrom(importSpecifiersMap.values()))), factory.createStringLiteral(importSource), undefined);
|
|
ts.setParentRecursive(importStatement, false);
|
|
statements = ts.insertStatementAfterCustomPrologue(statements.slice(), importStatement);
|
|
}
|
|
else if (ts.isExternalOrCommonJsModule(node)) {
|
|
var requireStatement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.createObjectBindingPattern(ts.map(ts.arrayFrom(importSpecifiersMap.values()), function (s) { return factory.createBindingElement(undefined, s.propertyName, s.name); })), undefined, undefined, factory.createCallExpression(factory.createIdentifier("require"), undefined, [factory.createStringLiteral(importSource)]))
|
|
], 2));
|
|
ts.setParentRecursive(requireStatement, false);
|
|
statements = ts.insertStatementAfterCustomPrologue(statements.slice(), requireStatement);
|
|
}
|
|
else {
|
|
}
|
|
}
|
|
}
|
|
if (statements !== visited.statements) {
|
|
visited = factory.updateSourceFile(visited, statements);
|
|
}
|
|
currentFileState = undefined;
|
|
return visited;
|
|
}
|
|
function visitor(node) {
|
|
if (node.transformFlags & 2) {
|
|
return visitorWorker(node);
|
|
}
|
|
else {
|
|
return node;
|
|
}
|
|
}
|
|
function visitorWorker(node) {
|
|
switch (node.kind) {
|
|
case 278:
|
|
return visitJsxElement(node, false);
|
|
case 279:
|
|
return visitJsxSelfClosingElement(node, false);
|
|
case 282:
|
|
return visitJsxFragment(node, false);
|
|
case 288:
|
|
return visitJsxExpression(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function transformJsxChildToExpression(node) {
|
|
switch (node.kind) {
|
|
case 11:
|
|
return visitJsxText(node);
|
|
case 288:
|
|
return visitJsxExpression(node);
|
|
case 278:
|
|
return visitJsxElement(node, true);
|
|
case 279:
|
|
return visitJsxSelfClosingElement(node, true);
|
|
case 282:
|
|
return visitJsxFragment(node, true);
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
}
|
|
function hasKeyAfterPropsSpread(node) {
|
|
var spread = false;
|
|
for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
|
|
var elem = _a[_i];
|
|
if (ts.isJsxSpreadAttribute(elem)) {
|
|
spread = true;
|
|
}
|
|
else if (spread && ts.isJsxAttribute(elem) && elem.name.escapedText === "key") {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function shouldUseCreateElement(node) {
|
|
return currentFileState.importSpecifier === undefined || hasKeyAfterPropsSpread(node);
|
|
}
|
|
function visitJsxElement(node, isChild) {
|
|
var tagTransform = shouldUseCreateElement(node.openingElement) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX;
|
|
return tagTransform(node.openingElement, node.children, isChild, node);
|
|
}
|
|
function visitJsxSelfClosingElement(node, isChild) {
|
|
var tagTransform = shouldUseCreateElement(node) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX;
|
|
return tagTransform(node, undefined, isChild, node);
|
|
}
|
|
function visitJsxFragment(node, isChild) {
|
|
var tagTransform = currentFileState.importSpecifier === undefined ? visitJsxOpeningFragmentCreateElement : visitJsxOpeningFragmentJSX;
|
|
return tagTransform(node.openingFragment, node.children, isChild, node);
|
|
}
|
|
function convertJsxChildrenToChildrenPropObject(children) {
|
|
var prop = convertJsxChildrenToChildrenPropAssignment(children);
|
|
return prop && factory.createObjectLiteralExpression([prop]);
|
|
}
|
|
function convertJsxChildrenToChildrenPropAssignment(children) {
|
|
var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
|
|
if (ts.length(nonWhitespaceChildren) === 1 && !nonWhitespaceChildren[0].dotDotDotToken) {
|
|
var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
|
|
return result_13 && factory.createPropertyAssignment("children", result_13);
|
|
}
|
|
var result = ts.mapDefined(children, transformJsxChildToExpression);
|
|
return ts.length(result) ? factory.createPropertyAssignment("children", factory.createArrayLiteralExpression(result)) : undefined;
|
|
}
|
|
function visitJsxOpeningLikeElementJSX(node, children, isChild, location) {
|
|
var tagName = getTagName(node);
|
|
var childrenProp = children && children.length ? convertJsxChildrenToChildrenPropAssignment(children) : undefined;
|
|
var keyAttr = ts.find(node.attributes.properties, function (p) { return !!p.name && ts.isIdentifier(p.name) && p.name.escapedText === "key"; });
|
|
var attrs = keyAttr ? ts.filter(node.attributes.properties, function (p) { return p !== keyAttr; }) : node.attributes.properties;
|
|
var objectProperties = ts.length(attrs) ? transformJsxAttributesToObjectProps(attrs, childrenProp) :
|
|
factory.createObjectLiteralExpression(childrenProp ? [childrenProp] : ts.emptyArray);
|
|
return visitJsxOpeningLikeElementOrFragmentJSX(tagName, objectProperties, keyAttr, children || ts.emptyArray, isChild, location);
|
|
}
|
|
function visitJsxOpeningLikeElementOrFragmentJSX(tagName, objectProperties, keyAttr, children, isChild, location) {
|
|
var _a;
|
|
var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
|
|
var isStaticChildren = ts.length(nonWhitespaceChildren) > 1 || !!((_a = nonWhitespaceChildren[0]) === null || _a === void 0 ? void 0 : _a.dotDotDotToken);
|
|
var args = [tagName, objectProperties];
|
|
if (keyAttr) {
|
|
args.push(transformJsxAttributeInitializer(keyAttr.initializer));
|
|
}
|
|
if (compilerOptions.jsx === 5) {
|
|
var originalFile = ts.getOriginalNode(currentSourceFile);
|
|
if (originalFile && ts.isSourceFile(originalFile)) {
|
|
if (keyAttr === undefined) {
|
|
args.push(factory.createVoidZero());
|
|
}
|
|
args.push(isStaticChildren ? factory.createTrue() : factory.createFalse());
|
|
var lineCol = ts.getLineAndCharacterOfPosition(originalFile, location.pos);
|
|
args.push(factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("fileName", getCurrentFileNameExpression()),
|
|
factory.createPropertyAssignment("lineNumber", factory.createNumericLiteral(lineCol.line + 1)),
|
|
factory.createPropertyAssignment("columnNumber", factory.createNumericLiteral(lineCol.character + 1))
|
|
]));
|
|
args.push(factory.createThis());
|
|
}
|
|
}
|
|
var element = ts.setTextRange(factory.createCallExpression(getJsxFactoryCallee(isStaticChildren), undefined, args), location);
|
|
if (isChild) {
|
|
ts.startOnNewLine(element);
|
|
}
|
|
return element;
|
|
}
|
|
function visitJsxOpeningLikeElementCreateElement(node, children, isChild, location) {
|
|
var tagName = getTagName(node);
|
|
var attrs = node.attributes.properties;
|
|
var objectProperties = ts.length(attrs) ? transformJsxAttributesToObjectProps(attrs) :
|
|
factory.createNull();
|
|
var callee = currentFileState.importSpecifier === undefined
|
|
? ts.createJsxFactoryExpression(factory, context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, node)
|
|
: getImplicitImportForName("createElement");
|
|
var element = ts.createExpressionForJsxElement(factory, callee, tagName, objectProperties, ts.mapDefined(children, transformJsxChildToExpression), location);
|
|
if (isChild) {
|
|
ts.startOnNewLine(element);
|
|
}
|
|
return element;
|
|
}
|
|
function visitJsxOpeningFragmentJSX(_node, children, isChild, location) {
|
|
var childrenProps;
|
|
if (children && children.length) {
|
|
var result = convertJsxChildrenToChildrenPropObject(children);
|
|
if (result) {
|
|
childrenProps = result;
|
|
}
|
|
}
|
|
return visitJsxOpeningLikeElementOrFragmentJSX(getImplicitJsxFragmentReference(), childrenProps || factory.createObjectLiteralExpression([]), undefined, children, isChild, location);
|
|
}
|
|
function visitJsxOpeningFragmentCreateElement(node, children, isChild, location) {
|
|
var element = ts.createExpressionForJsxFragment(factory, context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), context.getEmitResolver().getJsxFragmentFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, ts.mapDefined(children, transformJsxChildToExpression), node, location);
|
|
if (isChild) {
|
|
ts.startOnNewLine(element);
|
|
}
|
|
return element;
|
|
}
|
|
function transformJsxSpreadAttributeToSpreadAssignment(node) {
|
|
return factory.createSpreadAssignment(ts.visitNode(node.expression, visitor, ts.isExpression));
|
|
}
|
|
function transformJsxAttributesToObjectProps(attrs, children) {
|
|
var target = ts.getEmitScriptTarget(compilerOptions);
|
|
return target && target >= 5 ? factory.createObjectLiteralExpression(transformJsxAttributesToProps(attrs, children)) :
|
|
transformJsxAttributesToExpression(attrs, children);
|
|
}
|
|
function transformJsxAttributesToProps(attrs, children) {
|
|
var props = ts.flatten(ts.spanMap(attrs, ts.isJsxSpreadAttribute, function (attrs, isSpread) {
|
|
return ts.map(attrs, function (attr) { return isSpread ? transformJsxSpreadAttributeToSpreadAssignment(attr) : transformJsxAttributeToObjectLiteralElement(attr); });
|
|
}));
|
|
if (children) {
|
|
props.push(children);
|
|
}
|
|
return props;
|
|
}
|
|
function transformJsxAttributesToExpression(attrs, children) {
|
|
var expressions = ts.flatten(ts.spanMap(attrs, ts.isJsxSpreadAttribute, function (attrs, isSpread) { return isSpread
|
|
? ts.map(attrs, transformJsxSpreadAttributeToExpression)
|
|
: factory.createObjectLiteralExpression(ts.map(attrs, transformJsxAttributeToObjectLiteralElement)); }));
|
|
if (ts.isJsxSpreadAttribute(attrs[0])) {
|
|
expressions.unshift(factory.createObjectLiteralExpression());
|
|
}
|
|
if (children) {
|
|
expressions.push(factory.createObjectLiteralExpression([children]));
|
|
}
|
|
return ts.singleOrUndefined(expressions) || emitHelpers().createAssignHelper(expressions);
|
|
}
|
|
function transformJsxSpreadAttributeToExpression(node) {
|
|
return ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
}
|
|
function transformJsxAttributeToObjectLiteralElement(node) {
|
|
var name = getAttributeName(node);
|
|
var expression = transformJsxAttributeInitializer(node.initializer);
|
|
return factory.createPropertyAssignment(name, expression);
|
|
}
|
|
function transformJsxAttributeInitializer(node) {
|
|
if (node === undefined) {
|
|
return factory.createTrue();
|
|
}
|
|
if (node.kind === 10) {
|
|
var singleQuote = node.singleQuote !== undefined ? node.singleQuote : !ts.isStringDoubleQuoted(node, currentSourceFile);
|
|
var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
|
|
return ts.setTextRange(literal, node);
|
|
}
|
|
if (node.kind === 288) {
|
|
if (node.expression === undefined) {
|
|
return factory.createTrue();
|
|
}
|
|
return ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
}
|
|
if (ts.isJsxElement(node)) {
|
|
return visitJsxElement(node, false);
|
|
}
|
|
if (ts.isJsxSelfClosingElement(node)) {
|
|
return visitJsxSelfClosingElement(node, false);
|
|
}
|
|
if (ts.isJsxFragment(node)) {
|
|
return visitJsxFragment(node, false);
|
|
}
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
function visitJsxText(node) {
|
|
var fixed = fixupWhitespaceAndDecodeEntities(node.text);
|
|
return fixed === undefined ? undefined : factory.createStringLiteral(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 ts.utf16EncodeAsString(parseInt(decimal, 10));
|
|
}
|
|
else if (hex) {
|
|
return ts.utf16EncodeAsString(parseInt(hex, 16));
|
|
}
|
|
else {
|
|
var ch = entities.get(word);
|
|
return ch ? ts.utf16EncodeAsString(ch) : match;
|
|
}
|
|
});
|
|
}
|
|
function tryDecodeEntities(text) {
|
|
var decoded = decodeEntities(text);
|
|
return decoded === text ? undefined : decoded;
|
|
}
|
|
function getTagName(node) {
|
|
if (node.kind === 278) {
|
|
return getTagName(node.openingElement);
|
|
}
|
|
else {
|
|
var name = node.tagName;
|
|
if (ts.isIdentifier(name) && ts.isIntrinsicJsxName(name.escapedText)) {
|
|
return factory.createStringLiteral(ts.idText(name));
|
|
}
|
|
else {
|
|
return ts.createExpressionFromEntityName(factory, name);
|
|
}
|
|
}
|
|
}
|
|
function getAttributeName(node) {
|
|
var name = node.name;
|
|
var text = ts.idText(name);
|
|
if (/^[A-Za-z_]\w*$/.test(text)) {
|
|
return name;
|
|
}
|
|
else {
|
|
return factory.createStringLiteral(text);
|
|
}
|
|
}
|
|
function visitJsxExpression(node) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
return node.dotDotDotToken ? factory.createSpreadElement(expression) : expression;
|
|
}
|
|
}
|
|
ts.transformJsx = transformJsx;
|
|
var entities = new ts.Map(ts.getEntries({
|
|
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 factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
if ((node.transformFlags & 512) === 0) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 221:
|
|
return visitBinaryExpression(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitBinaryExpression(node) {
|
|
switch (node.operatorToken.kind) {
|
|
case 67:
|
|
return visitExponentiationAssignmentExpression(node);
|
|
case 42:
|
|
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 = factory.createTempVariable(hoistVariableDeclaration);
|
|
var argumentExpressionTemp = factory.createTempVariable(hoistVariableDeclaration);
|
|
target = ts.setTextRange(factory.createElementAccessExpression(ts.setTextRange(factory.createAssignment(expressionTemp, left.expression), left.expression), ts.setTextRange(factory.createAssignment(argumentExpressionTemp, left.argumentExpression), left.argumentExpression)), left);
|
|
value = ts.setTextRange(factory.createElementAccessExpression(expressionTemp, argumentExpressionTemp), left);
|
|
}
|
|
else if (ts.isPropertyAccessExpression(left)) {
|
|
var expressionTemp = factory.createTempVariable(hoistVariableDeclaration);
|
|
target = ts.setTextRange(factory.createPropertyAccessExpression(ts.setTextRange(factory.createAssignment(expressionTemp, left.expression), left.expression), left.name), left);
|
|
value = ts.setTextRange(factory.createPropertyAccessExpression(expressionTemp, left.name), left);
|
|
}
|
|
else {
|
|
target = left;
|
|
value = left;
|
|
}
|
|
return ts.setTextRange(factory.createAssignment(target, ts.setTextRange(factory.createGlobalMethodCall("Math", "pow", [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.setTextRange(factory.createGlobalMethodCall("Math", "pow", [left, right]), node);
|
|
}
|
|
}
|
|
ts.transformES2016 = transformES2016;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createSpreadSegment(kind, expression) {
|
|
return { kind: kind, expression: expression };
|
|
}
|
|
function transformES2015(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory, 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, factory.createVariableDeclaration(temp));
|
|
}
|
|
var convertedLoopState;
|
|
var enabledSubstitutions;
|
|
return ts.chainBundle(context, 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) & 32767;
|
|
return ancestorFacts;
|
|
}
|
|
function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
|
|
hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 | ancestorFacts;
|
|
}
|
|
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
|
return (hierarchyFacts & 8192) !== 0
|
|
&& node.kind === 247
|
|
&& !node.expression;
|
|
}
|
|
function isOrMayContainReturnCompletion(node) {
|
|
return node.transformFlags & 4194304
|
|
&& (ts.isReturnStatement(node)
|
|
|| ts.isIfStatement(node)
|
|
|| ts.isWithStatement(node)
|
|
|| ts.isSwitchStatement(node)
|
|
|| ts.isCaseBlock(node)
|
|
|| ts.isCaseClause(node)
|
|
|| ts.isDefaultClause(node)
|
|
|| ts.isTryStatement(node)
|
|
|| ts.isCatchClause(node)
|
|
|| ts.isLabeledStatement(node)
|
|
|| ts.isIterationStatement(node, false)
|
|
|| ts.isBlock(node));
|
|
}
|
|
function shouldVisitNode(node) {
|
|
return (node.transformFlags & 1024) !== 0
|
|
|| convertedLoopState !== undefined
|
|
|| (hierarchyFacts & 8192 && isOrMayContainReturnCompletion(node))
|
|
|| (ts.isIterationStatement(node, false) && shouldConvertIterationStatement(node))
|
|
|| (ts.getEmitFlags(node) & 33554432) !== 0;
|
|
}
|
|
function visitor(node) {
|
|
return shouldVisitNode(node) ? visitorWorker(node, false) : node;
|
|
}
|
|
function visitorWithUnusedExpressionResult(node) {
|
|
return shouldVisitNode(node) ? visitorWorker(node, true) : node;
|
|
}
|
|
function classWrapperStatementVisitor(node) {
|
|
if (shouldVisitNode(node)) {
|
|
var original = ts.getOriginalNode(node);
|
|
if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
|
|
var ancestorFacts = enterSubtree(32670, 16449);
|
|
var result = visitorWorker(node, false);
|
|
exitSubtree(ancestorFacts, 98304, 0);
|
|
return result;
|
|
}
|
|
return visitorWorker(node, false);
|
|
}
|
|
return node;
|
|
}
|
|
function callExpressionVisitor(node) {
|
|
if (node.kind === 106) {
|
|
return visitSuperKeyword(true);
|
|
}
|
|
return visitor(node);
|
|
}
|
|
function visitorWorker(node, expressionResultIsUnused) {
|
|
switch (node.kind) {
|
|
case 124:
|
|
return undefined;
|
|
case 257:
|
|
return visitClassDeclaration(node);
|
|
case 226:
|
|
return visitClassExpression(node);
|
|
case 164:
|
|
return visitParameter(node);
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 214:
|
|
return visitArrowFunction(node);
|
|
case 213:
|
|
return visitFunctionExpression(node);
|
|
case 254:
|
|
return visitVariableDeclaration(node);
|
|
case 79:
|
|
return visitIdentifier(node);
|
|
case 255:
|
|
return visitVariableDeclarationList(node);
|
|
case 249:
|
|
return visitSwitchStatement(node);
|
|
case 263:
|
|
return visitCaseBlock(node);
|
|
case 235:
|
|
return visitBlock(node, false);
|
|
case 246:
|
|
case 245:
|
|
return visitBreakOrContinueStatement(node);
|
|
case 250:
|
|
return visitLabeledStatement(node);
|
|
case 240:
|
|
case 241:
|
|
return visitDoOrWhileStatement(node, undefined);
|
|
case 242:
|
|
return visitForStatement(node, undefined);
|
|
case 243:
|
|
return visitForInStatement(node, undefined);
|
|
case 244:
|
|
return visitForOfStatement(node, undefined);
|
|
case 238:
|
|
return visitExpressionStatement(node);
|
|
case 205:
|
|
return visitObjectLiteralExpression(node);
|
|
case 292:
|
|
return visitCatchClause(node);
|
|
case 297:
|
|
return visitShorthandPropertyAssignment(node);
|
|
case 162:
|
|
return visitComputedPropertyName(node);
|
|
case 204:
|
|
return visitArrayLiteralExpression(node);
|
|
case 208:
|
|
return visitCallExpression(node);
|
|
case 209:
|
|
return visitNewExpression(node);
|
|
case 212:
|
|
return visitParenthesizedExpression(node, expressionResultIsUnused);
|
|
case 221:
|
|
return visitBinaryExpression(node, expressionResultIsUnused);
|
|
case 351:
|
|
return visitCommaListExpression(node, expressionResultIsUnused);
|
|
case 14:
|
|
case 15:
|
|
case 16:
|
|
case 17:
|
|
return visitTemplateLiteral(node);
|
|
case 10:
|
|
return visitStringLiteral(node);
|
|
case 8:
|
|
return visitNumericLiteral(node);
|
|
case 210:
|
|
return visitTaggedTemplateExpression(node);
|
|
case 223:
|
|
return visitTemplateExpression(node);
|
|
case 224:
|
|
return visitYieldExpression(node);
|
|
case 225:
|
|
return visitSpreadElement(node);
|
|
case 106:
|
|
return visitSuperKeyword(false);
|
|
case 108:
|
|
return visitThisKeyword(node);
|
|
case 231:
|
|
return visitMetaProperty(node);
|
|
case 169:
|
|
return visitMethodDeclaration(node);
|
|
case 172:
|
|
case 173:
|
|
return visitAccessorDeclaration(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 247:
|
|
return visitReturnStatement(node);
|
|
case 217:
|
|
return visitVoidExpression(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitSourceFile(node) {
|
|
var ancestorFacts = enterSubtree(8064, 64);
|
|
var prologue = [];
|
|
var statements = [];
|
|
startLexicalEnvironment();
|
|
var statementOffset = factory.copyPrologue(node.statements, prologue, false, visitor);
|
|
ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
|
|
if (taggedTemplateStringDeclarations) {
|
|
statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(taggedTemplateStringDeclarations)));
|
|
}
|
|
factory.mergeLexicalEnvironment(prologue, endLexicalEnvironment());
|
|
insertCaptureThisForNodeIfNeeded(prologue, node);
|
|
exitSubtree(ancestorFacts, 0, 0);
|
|
return factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(ts.concatenate(prologue, 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(7104, 0);
|
|
var updated = ts.visitEachChild(node, visitor, context);
|
|
exitSubtree(ancestorFacts, 0, 0);
|
|
return updated;
|
|
}
|
|
function returnCapturedThis(node) {
|
|
return ts.setOriginalNode(factory.createReturnStatement(factory.createUniqueName("_this", 16 | 32)), node);
|
|
}
|
|
function visitReturnStatement(node) {
|
|
if (convertedLoopState) {
|
|
convertedLoopState.nonLocalJumps |= 8;
|
|
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
|
node = returnCapturedThis(node);
|
|
}
|
|
return factory.createReturnStatement(factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment(factory.createIdentifier("value"), node.expression
|
|
? ts.visitNode(node.expression, visitor, ts.isExpression)
|
|
: factory.createVoidZero())
|
|
]));
|
|
}
|
|
else if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
|
return returnCapturedThis(node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitThisKeyword(node) {
|
|
if (hierarchyFacts & 2 && !(hierarchyFacts & 16384)) {
|
|
hierarchyFacts |= 65536;
|
|
}
|
|
if (convertedLoopState) {
|
|
if (hierarchyFacts & 2) {
|
|
convertedLoopState.containsLexicalThis = true;
|
|
return node;
|
|
}
|
|
return convertedLoopState.thisName || (convertedLoopState.thisName = factory.createUniqueName("this"));
|
|
}
|
|
return node;
|
|
}
|
|
function visitVoidExpression(node) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
function visitIdentifier(node) {
|
|
if (!convertedLoopState) {
|
|
return node;
|
|
}
|
|
if (resolver.isArgumentsLocalBinding(node)) {
|
|
return convertedLoopState.argumentsName || (convertedLoopState.argumentsName = factory.createUniqueName("arguments"));
|
|
}
|
|
return node;
|
|
}
|
|
function visitBreakOrContinueStatement(node) {
|
|
if (convertedLoopState) {
|
|
var jump = node.kind === 246 ? 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 === 246) {
|
|
convertedLoopState.nonLocalJumps |= 2;
|
|
labelMarker = "break";
|
|
}
|
|
else {
|
|
convertedLoopState.nonLocalJumps |= 4;
|
|
labelMarker = "continue";
|
|
}
|
|
}
|
|
else {
|
|
if (node.kind === 246) {
|
|
labelMarker = "break-".concat(label.escapedText);
|
|
setLabeledJump(convertedLoopState, true, ts.idText(label), labelMarker);
|
|
}
|
|
else {
|
|
labelMarker = "continue-".concat(label.escapedText);
|
|
setLabeledJump(convertedLoopState, false, ts.idText(label), labelMarker);
|
|
}
|
|
}
|
|
var returnExpression = factory.createStringLiteral(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 = factory.createBinaryExpression(expr, 27, copyExpr);
|
|
}
|
|
}
|
|
returnExpression = factory.createBinaryExpression(expr, 27, returnExpression);
|
|
}
|
|
return factory.createReturnStatement(returnExpression);
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitClassDeclaration(node) {
|
|
var variable = factory.createVariableDeclaration(factory.getLocalName(node, true), undefined, undefined, transformClassLikeDeclarationToExpression(node));
|
|
ts.setOriginalNode(variable, node);
|
|
var statements = [];
|
|
var statement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([variable]));
|
|
ts.setOriginalNode(statement, node);
|
|
ts.setTextRange(statement, node);
|
|
ts.startOnNewLine(statement);
|
|
statements.push(statement);
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
var exportStatement = ts.hasSyntacticModifier(node, 512)
|
|
? factory.createExportDefault(factory.getLocalName(node))
|
|
: factory.createExternalModuleExport(factory.getLocalName(node));
|
|
ts.setOriginalNode(exportStatement, statement);
|
|
statements.push(exportStatement);
|
|
}
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
if ((emitFlags & 4194304) === 0) {
|
|
statements.push(factory.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.getClassExtendsHeritageElement(node);
|
|
var classFunction = factory.createFunctionExpression(undefined, undefined, undefined, undefined, extendsClauseElement ? [factory.createParameterDeclaration(undefined, undefined, factory.createUniqueName("_super", 16 | 32))] : [], undefined, transformClassBody(node, extendsClauseElement));
|
|
ts.setEmitFlags(classFunction, (ts.getEmitFlags(node) & 65536) | 524288);
|
|
var inner = factory.createPartiallyEmittedExpression(classFunction);
|
|
ts.setTextRangeEnd(inner, node.end);
|
|
ts.setEmitFlags(inner, 1536);
|
|
var outer = factory.createPartiallyEmittedExpression(inner);
|
|
ts.setTextRangeEnd(outer, ts.skipTrivia(currentText, node.pos));
|
|
ts.setEmitFlags(outer, 1536);
|
|
var result = factory.createParenthesizedExpression(factory.createCallExpression(outer, undefined, extendsClauseElement
|
|
? [ts.visitNode(extendsClauseElement.expression, visitor, ts.isExpression)]
|
|
: []));
|
|
ts.addSyntheticLeadingComment(result, 3, "* @class ");
|
|
return result;
|
|
}
|
|
function transformClassBody(node, extendsClauseElement) {
|
|
var statements = [];
|
|
var name = factory.getInternalName(node);
|
|
var constructorLikeName = ts.isIdentifierANonContextualKeyword(name) ? factory.getGeneratedNameForNode(name) : name;
|
|
startLexicalEnvironment();
|
|
addExtendsHelperIfNeeded(statements, node, extendsClauseElement);
|
|
addConstructor(statements, node, constructorLikeName, extendsClauseElement);
|
|
addClassMembers(statements, node);
|
|
var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentText, node.members.end), 19);
|
|
var outer = factory.createPartiallyEmittedExpression(constructorLikeName);
|
|
ts.setTextRangeEnd(outer, closingBraceLocation.end);
|
|
ts.setEmitFlags(outer, 1536);
|
|
var statement = factory.createReturnStatement(outer);
|
|
ts.setTextRangePos(statement, closingBraceLocation.pos);
|
|
ts.setEmitFlags(statement, 1536 | 384);
|
|
statements.push(statement);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var block = factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), node.members), true);
|
|
ts.setEmitFlags(block, 1536);
|
|
return block;
|
|
}
|
|
function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) {
|
|
if (extendsClauseElement) {
|
|
statements.push(ts.setTextRange(factory.createExpressionStatement(emitHelpers().createExtendsHelper(factory.getInternalName(node))), extendsClauseElement));
|
|
}
|
|
}
|
|
function addConstructor(statements, node, name, extendsClauseElement) {
|
|
var savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var ancestorFacts = enterSubtree(32662, 73);
|
|
var constructor = ts.getFirstConstructorWithBody(node);
|
|
var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
|
|
var constructorFunction = factory.createFunctionDeclaration(undefined, undefined, name, 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, 98304, 0);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
}
|
|
function transformConstructorParameters(constructor, hasSynthesizedSuper) {
|
|
return ts.visitParameterList(constructor && !hasSynthesizedSuper ? constructor.parameters : undefined, visitor, context)
|
|
|| [];
|
|
}
|
|
function createDefaultConstructorBody(node, isDerivedClass) {
|
|
var statements = [];
|
|
resumeLexicalEnvironment();
|
|
factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
|
|
if (isDerivedClass) {
|
|
statements.push(factory.createReturnStatement(createDefaultSuperCallOrThis()));
|
|
}
|
|
var statementsArray = factory.createNodeArray(statements);
|
|
ts.setTextRange(statementsArray, node.members);
|
|
var block = factory.createBlock(statementsArray, true);
|
|
ts.setTextRange(block, node);
|
|
ts.setEmitFlags(block, 1536);
|
|
return block;
|
|
}
|
|
function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
|
|
var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104;
|
|
if (!constructor)
|
|
return createDefaultConstructorBody(node, isDerivedClass);
|
|
var prologue = [];
|
|
var statements = [];
|
|
resumeLexicalEnvironment();
|
|
var existingPrologue = ts.takeWhile(constructor.body.statements, ts.isPrologueDirective);
|
|
var _a = findSuperCallAndStatementIndex(constructor.body.statements, existingPrologue), superCall = _a.superCall, superStatementIndex = _a.superStatementIndex;
|
|
var postSuperStatementsStart = superStatementIndex === -1 ? existingPrologue.length : superStatementIndex + 1;
|
|
var statementOffset = postSuperStatementsStart;
|
|
if (!hasSynthesizedSuper)
|
|
statementOffset = factory.copyStandardPrologue(constructor.body.statements, prologue, statementOffset, false);
|
|
if (!hasSynthesizedSuper)
|
|
statementOffset = factory.copyCustomPrologue(constructor.body.statements, statements, statementOffset, visitor, undefined);
|
|
var superCallExpression;
|
|
if (hasSynthesizedSuper) {
|
|
superCallExpression = createDefaultSuperCallOrThis();
|
|
}
|
|
else if (superCall) {
|
|
superCallExpression = visitSuperCallInBody(superCall);
|
|
}
|
|
if (superCallExpression) {
|
|
hierarchyFacts |= 8192;
|
|
}
|
|
addDefaultValueAssignmentsIfNeeded(prologue, constructor);
|
|
addRestParameterIfNeeded(prologue, constructor, hasSynthesizedSuper);
|
|
ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset));
|
|
factory.mergeLexicalEnvironment(prologue, endLexicalEnvironment());
|
|
insertCaptureNewTargetIfNeeded(prologue, constructor, false);
|
|
if (isDerivedClass || superCallExpression) {
|
|
if (superCallExpression && postSuperStatementsStart === constructor.body.statements.length && !(constructor.body.transformFlags & 16384)) {
|
|
var superCall_1 = ts.cast(ts.cast(superCallExpression, ts.isBinaryExpression).left, ts.isCallExpression);
|
|
var returnStatement = factory.createReturnStatement(superCallExpression);
|
|
ts.setCommentRange(returnStatement, ts.getCommentRange(superCall_1));
|
|
ts.setEmitFlags(superCall_1, 1536);
|
|
statements.push(returnStatement);
|
|
}
|
|
else {
|
|
if (superStatementIndex <= existingPrologue.length) {
|
|
insertCaptureThisForNode(statements, constructor, superCallExpression || createActualThis());
|
|
}
|
|
else {
|
|
insertCaptureThisForNode(prologue, constructor, createActualThis());
|
|
if (superCallExpression) {
|
|
insertSuperThisCaptureThisForNode(statements, superCallExpression);
|
|
}
|
|
}
|
|
if (!isSufficientlyCoveredByReturnStatements(constructor.body)) {
|
|
statements.push(factory.createReturnStatement(factory.createUniqueName("_this", 16 | 32)));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
insertCaptureThisForNodeIfNeeded(prologue, constructor);
|
|
}
|
|
var body = factory.createBlock(ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], existingPrologue, true), prologue, true), (superStatementIndex <= existingPrologue.length ? ts.emptyArray : ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, existingPrologue.length, superStatementIndex - existingPrologue.length)), true), statements, true)), constructor.body.statements), true);
|
|
ts.setTextRange(body, constructor.body);
|
|
return body;
|
|
}
|
|
function findSuperCallAndStatementIndex(originalBodyStatements, existingPrologue) {
|
|
for (var i = existingPrologue.length; i < originalBodyStatements.length; i += 1) {
|
|
var superCall = ts.getSuperCallFromStatement(originalBodyStatements[i]);
|
|
if (superCall) {
|
|
return {
|
|
superCall: superCall,
|
|
superStatementIndex: i,
|
|
};
|
|
}
|
|
}
|
|
return {
|
|
superStatementIndex: -1,
|
|
};
|
|
}
|
|
function isSufficientlyCoveredByReturnStatements(statement) {
|
|
if (statement.kind === 247) {
|
|
return true;
|
|
}
|
|
else if (statement.kind === 239) {
|
|
var ifStatement = statement;
|
|
if (ifStatement.elseStatement) {
|
|
return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
|
|
isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement);
|
|
}
|
|
}
|
|
else if (statement.kind === 235) {
|
|
var lastStatement = ts.lastOrUndefined(statement.statements);
|
|
if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function createActualThis() {
|
|
return ts.setEmitFlags(factory.createThis(), 4);
|
|
}
|
|
function createDefaultSuperCallOrThis() {
|
|
return factory.createLogicalOr(factory.createLogicalAnd(factory.createStrictInequality(factory.createUniqueName("_super", 16 | 32), factory.createNull()), factory.createFunctionApplyCall(factory.createUniqueName("_super", 16 | 32), createActualThis(), factory.createIdentifier("arguments"))), createActualThis());
|
|
}
|
|
function visitParameter(node) {
|
|
if (node.dotDotDotToken) {
|
|
return undefined;
|
|
}
|
|
else if (ts.isBindingPattern(node.name)) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createParameterDeclaration(undefined, undefined, factory.getGeneratedNameForNode(node), undefined, undefined, undefined), node), node);
|
|
}
|
|
else if (node.initializer) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createParameterDeclaration(undefined, undefined, node.name, undefined, undefined, undefined), node), node);
|
|
}
|
|
else {
|
|
return node;
|
|
}
|
|
}
|
|
function hasDefaultValueOrBindingPattern(node) {
|
|
return node.initializer !== undefined
|
|
|| ts.isBindingPattern(node.name);
|
|
}
|
|
function addDefaultValueAssignmentsIfNeeded(statements, node) {
|
|
if (!ts.some(node.parameters, hasDefaultValueOrBindingPattern)) {
|
|
return false;
|
|
}
|
|
var added = false;
|
|
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)) {
|
|
added = insertDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) || added;
|
|
}
|
|
else if (initializer) {
|
|
insertDefaultValueAssignmentForInitializer(statements, parameter, name, initializer);
|
|
added = true;
|
|
}
|
|
}
|
|
return added;
|
|
}
|
|
function insertDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) {
|
|
if (name.elements.length > 0) {
|
|
ts.insertStatementAfterCustomPrologue(statements, ts.setEmitFlags(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0, factory.getGeneratedNameForNode(parameter)))), 1048576));
|
|
return true;
|
|
}
|
|
else if (initializer) {
|
|
ts.insertStatementAfterCustomPrologue(statements, ts.setEmitFlags(factory.createExpressionStatement(factory.createAssignment(factory.getGeneratedNameForNode(parameter), ts.visitNode(initializer, visitor, ts.isExpression))), 1048576));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function insertDefaultValueAssignmentForInitializer(statements, parameter, name, initializer) {
|
|
initializer = ts.visitNode(initializer, visitor, ts.isExpression);
|
|
var statement = factory.createIfStatement(factory.createTypeCheck(factory.cloneNode(name), "undefined"), ts.setEmitFlags(ts.setTextRange(factory.createBlock([
|
|
factory.createExpressionStatement(ts.setEmitFlags(ts.setTextRange(factory.createAssignment(ts.setEmitFlags(ts.setParent(ts.setTextRange(factory.cloneNode(name), name), name.parent), 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);
|
|
ts.insertStatementAfterCustomPrologue(statements, statement);
|
|
}
|
|
function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) {
|
|
return !!(node && node.dotDotDotToken && !inConstructorWithSynthesizedSuper);
|
|
}
|
|
function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) {
|
|
var prologueStatements = [];
|
|
var parameter = ts.lastOrUndefined(node.parameters);
|
|
if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) {
|
|
return false;
|
|
}
|
|
var declarationName = parameter.name.kind === 79 ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(undefined);
|
|
ts.setEmitFlags(declarationName, 48);
|
|
var expressionName = parameter.name.kind === 79 ? factory.cloneNode(parameter.name) : declarationName;
|
|
var restIndex = node.parameters.length - 1;
|
|
var temp = factory.createLoopVariable();
|
|
prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(declarationName, undefined, undefined, factory.createArrayLiteralExpression([]))
|
|
])), parameter), 1048576));
|
|
var forStatement = factory.createForStatement(ts.setTextRange(factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(temp, undefined, undefined, factory.createNumericLiteral(restIndex))
|
|
]), parameter), ts.setTextRange(factory.createLessThan(temp, factory.createPropertyAccessExpression(factory.createIdentifier("arguments"), "length")), parameter), ts.setTextRange(factory.createPostfixIncrement(temp), parameter), factory.createBlock([
|
|
ts.startOnNewLine(ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(factory.createElementAccessExpression(expressionName, restIndex === 0
|
|
? temp
|
|
: factory.createSubtract(temp, factory.createNumericLiteral(restIndex))), factory.createElementAccessExpression(factory.createIdentifier("arguments"), temp))), parameter))
|
|
]));
|
|
ts.setEmitFlags(forStatement, 1048576);
|
|
ts.startOnNewLine(forStatement);
|
|
prologueStatements.push(forStatement);
|
|
if (parameter.name.kind !== 79) {
|
|
prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0, expressionName))), parameter), 1048576));
|
|
}
|
|
ts.insertStatementsAfterCustomPrologue(statements, prologueStatements);
|
|
return true;
|
|
}
|
|
function insertCaptureThisForNodeIfNeeded(statements, node) {
|
|
if (hierarchyFacts & 65536 && node.kind !== 214) {
|
|
insertCaptureThisForNode(statements, node, factory.createThis());
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function insertSuperThisCaptureThisForNode(statements, superExpression) {
|
|
enableSubstitutionsForCapturedThis();
|
|
var assignSuperExpression = factory.createExpressionStatement(factory.createBinaryExpression(factory.createThis(), 63, superExpression));
|
|
ts.insertStatementAfterCustomPrologue(statements, assignSuperExpression);
|
|
ts.setCommentRange(assignSuperExpression, ts.getOriginalNode(superExpression).parent);
|
|
}
|
|
function insertCaptureThisForNode(statements, node, initializer) {
|
|
enableSubstitutionsForCapturedThis();
|
|
var captureThisStatement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.createUniqueName("_this", 16 | 32), undefined, undefined, initializer)
|
|
]));
|
|
ts.setEmitFlags(captureThisStatement, 1536 | 1048576);
|
|
ts.setSourceMapRange(captureThisStatement, node);
|
|
ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
|
|
}
|
|
function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
|
|
if (hierarchyFacts & 32768) {
|
|
var newTarget = void 0;
|
|
switch (node.kind) {
|
|
case 214:
|
|
return statements;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
newTarget = factory.createVoidZero();
|
|
break;
|
|
case 171:
|
|
newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4), "constructor");
|
|
break;
|
|
case 256:
|
|
case 213:
|
|
newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4), 102, factory.getLocalName(node))), undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4), "constructor"), undefined, factory.createVoidZero());
|
|
break;
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
var captureNewTargetStatement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.createUniqueName("_newTarget", 16 | 32), undefined, undefined, newTarget)
|
|
]));
|
|
ts.setEmitFlags(captureNewTargetStatement, 1536 | 1048576);
|
|
if (copyOnWrite) {
|
|
statements = statements.slice();
|
|
}
|
|
ts.insertStatementAfterCustomPrologue(statements, 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 234:
|
|
statements.push(transformSemicolonClassElementToStatement(member));
|
|
break;
|
|
case 169:
|
|
statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
|
|
break;
|
|
case 172:
|
|
case 173:
|
|
var accessors = ts.getAllAccessorDeclarations(node.members, member);
|
|
if (member === accessors.firstAccessor) {
|
|
statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
|
|
}
|
|
break;
|
|
case 171:
|
|
case 170:
|
|
break;
|
|
default:
|
|
ts.Debug.failBadSyntaxKind(member, currentSourceFile && currentSourceFile.fileName);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
function transformSemicolonClassElementToStatement(member) {
|
|
return ts.setTextRange(factory.createEmptyStatement(), member);
|
|
}
|
|
function transformClassMethodDeclarationToStatement(receiver, member, container) {
|
|
var commentRange = ts.getCommentRange(member);
|
|
var sourceMapRange = ts.getSourceMapRange(member);
|
|
var memberFunction = transformFunctionLikeToExpression(member, member, undefined, container);
|
|
var propertyName = ts.visitNode(member.name, visitor, ts.isPropertyName);
|
|
var e;
|
|
if (!ts.isPrivateIdentifier(propertyName) && ts.getUseDefineForClassFields(context.getCompilerOptions())) {
|
|
var name = ts.isComputedPropertyName(propertyName) ? propertyName.expression
|
|
: ts.isIdentifier(propertyName) ? factory.createStringLiteral(ts.unescapeLeadingUnderscores(propertyName.escapedText))
|
|
: propertyName;
|
|
e = factory.createObjectDefinePropertyCall(receiver, name, factory.createPropertyDescriptor({ value: memberFunction, enumerable: false, writable: true, configurable: true }));
|
|
}
|
|
else {
|
|
var memberName = ts.createMemberAccessForPropertyName(factory, receiver, propertyName, member.name);
|
|
e = factory.createAssignment(memberName, memberFunction);
|
|
}
|
|
ts.setEmitFlags(memberFunction, 1536);
|
|
ts.setSourceMapRange(memberFunction, sourceMapRange);
|
|
var statement = ts.setTextRange(factory.createExpressionStatement(e), member);
|
|
ts.setOriginalNode(statement, member);
|
|
ts.setCommentRange(statement, commentRange);
|
|
ts.setEmitFlags(statement, 48);
|
|
return statement;
|
|
}
|
|
function transformAccessorsToStatement(receiver, accessors, container) {
|
|
var statement = factory.createExpressionStatement(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 target = ts.setParent(ts.setTextRange(factory.cloneNode(receiver), receiver), receiver.parent);
|
|
ts.setEmitFlags(target, 1536 | 32);
|
|
ts.setSourceMapRange(target, firstAccessor.name);
|
|
var visitedAccessorName = ts.visitNode(firstAccessor.name, visitor, ts.isPropertyName);
|
|
if (ts.isPrivateIdentifier(visitedAccessorName)) {
|
|
return ts.Debug.failBadSyntaxKind(visitedAccessorName, "Encountered unhandled private identifier while transforming ES2015.");
|
|
}
|
|
var propertyName = ts.createExpressionForPropertyName(factory, visitedAccessorName);
|
|
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 = factory.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 = factory.createPropertyAssignment("set", setterFunction);
|
|
ts.setCommentRange(setter, ts.getCommentRange(setAccessor));
|
|
properties.push(setter);
|
|
}
|
|
properties.push(factory.createPropertyAssignment("enumerable", getAccessor || setAccessor ? factory.createFalse() : factory.createTrue()), factory.createPropertyAssignment("configurable", factory.createTrue()));
|
|
var call = factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "defineProperty"), undefined, [
|
|
target,
|
|
propertyName,
|
|
factory.createObjectLiteralExpression(properties, true)
|
|
]);
|
|
if (startsOnNewLine) {
|
|
ts.startOnNewLine(call);
|
|
}
|
|
return call;
|
|
}
|
|
function visitArrowFunction(node) {
|
|
if (node.transformFlags & 16384 && !(hierarchyFacts & 16384)) {
|
|
hierarchyFacts |= 65536;
|
|
}
|
|
var savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var ancestorFacts = enterSubtree(15232, 66);
|
|
var func = factory.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(32662, 69)
|
|
: enterSubtree(32670, 65);
|
|
var savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var parameters = ts.visitParameterList(node.parameters, visitor, context);
|
|
var body = transformFunctionBody(node);
|
|
var name = hierarchyFacts & 32768
|
|
? factory.getLocalName(node)
|
|
: node.name;
|
|
exitSubtree(ancestorFacts, 98304, 0);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
return factory.updateFunctionExpression(node, undefined, node.asteriskToken, name, undefined, parameters, undefined, body);
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
var savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var ancestorFacts = enterSubtree(32670, 65);
|
|
var parameters = ts.visitParameterList(node.parameters, visitor, context);
|
|
var body = transformFunctionBody(node);
|
|
var name = hierarchyFacts & 32768
|
|
? factory.getLocalName(node)
|
|
: node.name;
|
|
exitSubtree(ancestorFacts, 98304, 0);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
return factory.updateFunctionDeclaration(node, 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.isStatic(node)
|
|
? enterSubtree(32670, 65 | 8)
|
|
: enterSubtree(32670, 65);
|
|
var parameters = ts.visitParameterList(node.parameters, visitor, context);
|
|
var body = transformFunctionBody(node);
|
|
if (hierarchyFacts & 32768 && !name && (node.kind === 256 || node.kind === 213)) {
|
|
name = factory.getGeneratedNameForNode(node);
|
|
}
|
|
exitSubtree(ancestorFacts, 98304, 0);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
return ts.setOriginalNode(ts.setTextRange(factory.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 prologue = [];
|
|
var statements = [];
|
|
var body = node.body;
|
|
var statementOffset;
|
|
resumeLexicalEnvironment();
|
|
if (ts.isBlock(body)) {
|
|
statementOffset = factory.copyStandardPrologue(body.statements, prologue, 0, false);
|
|
statementOffset = factory.copyCustomPrologue(body.statements, statements, statementOffset, visitor, ts.isHoistedFunction);
|
|
statementOffset = factory.copyCustomPrologue(body.statements, statements, statementOffset, visitor, ts.isHoistedVariableStatement);
|
|
}
|
|
multiLine = addDefaultValueAssignmentsIfNeeded(statements, node) || multiLine;
|
|
multiLine = addRestParameterIfNeeded(statements, node, false) || multiLine;
|
|
if (ts.isBlock(body)) {
|
|
statementOffset = factory.copyCustomPrologue(body.statements, 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 === 214);
|
|
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 = factory.createReturnStatement(expression);
|
|
ts.setTextRange(returnStatement, body);
|
|
ts.moveSyntheticComments(returnStatement, body);
|
|
ts.setEmitFlags(returnStatement, 384 | 32 | 1024);
|
|
statements.push(returnStatement);
|
|
closeBraceLocation = body;
|
|
}
|
|
factory.mergeLexicalEnvironment(prologue, endLexicalEnvironment());
|
|
insertCaptureNewTargetIfNeeded(prologue, node, false);
|
|
insertCaptureThisForNodeIfNeeded(prologue, node);
|
|
if (ts.some(prologue)) {
|
|
multiLine = true;
|
|
}
|
|
statements.unshift.apply(statements, prologue);
|
|
if (ts.isBlock(body) && ts.arrayIsEqualTo(statements, body.statements)) {
|
|
return body;
|
|
}
|
|
var block = factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), statementsLocation), multiLine);
|
|
ts.setTextRange(block, node.body);
|
|
if (!multiLine && singleLine) {
|
|
ts.setEmitFlags(block, 1);
|
|
}
|
|
if (closeBraceLocation) {
|
|
ts.setTokenSourceMapRange(block, 19, closeBraceLocation);
|
|
}
|
|
ts.setOriginalNode(block, node.body);
|
|
return block;
|
|
}
|
|
function visitBlock(node, isFunctionBody) {
|
|
if (isFunctionBody) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
var ancestorFacts = hierarchyFacts & 256
|
|
? enterSubtree(7104, 512)
|
|
: enterSubtree(6976, 128);
|
|
var updated = ts.visitEachChild(node, visitor, context);
|
|
exitSubtree(ancestorFacts, 0, 0);
|
|
return updated;
|
|
}
|
|
function visitExpressionStatement(node) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
function visitParenthesizedExpression(node, expressionResultIsUnused) {
|
|
return ts.visitEachChild(node, expressionResultIsUnused ? visitorWithUnusedExpressionResult : visitor, context);
|
|
}
|
|
function visitBinaryExpression(node, expressionResultIsUnused) {
|
|
if (ts.isDestructuringAssignment(node)) {
|
|
return ts.flattenDestructuringAssignment(node, visitor, context, 0, !expressionResultIsUnused);
|
|
}
|
|
if (node.operatorToken.kind === 27) {
|
|
return factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorWithUnusedExpressionResult, ts.isExpression), node.operatorToken, ts.visitNode(node.right, expressionResultIsUnused ? visitorWithUnusedExpressionResult : visitor, ts.isExpression));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitCommaListExpression(node, expressionResultIsUnused) {
|
|
if (expressionResultIsUnused) {
|
|
return ts.visitEachChild(node, visitorWithUnusedExpressionResult, context);
|
|
}
|
|
var result;
|
|
for (var i = 0; i < node.elements.length; i++) {
|
|
var element = node.elements[i];
|
|
var visited = ts.visitNode(element, i < node.elements.length - 1 ? visitorWithUnusedExpressionResult : visitor, ts.isExpression);
|
|
if (result || visited !== element) {
|
|
result || (result = node.elements.slice(0, i));
|
|
result.push(visited);
|
|
}
|
|
}
|
|
var elements = result ? ts.setTextRange(factory.createNodeArray(result), node.elements) : node.elements;
|
|
return factory.updateCommaListExpression(node, elements);
|
|
}
|
|
function isVariableStatementOfTypeScriptClassWrapper(node) {
|
|
return node.declarationList.declarations.length === 1
|
|
&& !!node.declarationList.declarations[0].initializer
|
|
&& !!(ts.getEmitFlags(node.declarationList.declarations[0].initializer) & 33554432);
|
|
}
|
|
function visitVariableStatement(node) {
|
|
var ancestorFacts = enterSubtree(0, ts.hasSyntacticModifier(node, 1) ? 32 : 0);
|
|
var updated;
|
|
if (convertedLoopState && (node.declarationList.flags & 3) === 0 && !isVariableStatementOfTypeScriptClassWrapper(node)) {
|
|
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 = factory.createBinaryExpression(decl.name, 63, ts.visitNode(decl.initializer, visitor, ts.isExpression));
|
|
ts.setTextRange(assignment, decl);
|
|
}
|
|
assignments = ts.append(assignments, assignment);
|
|
}
|
|
}
|
|
if (assignments) {
|
|
updated = ts.setTextRange(factory.createExpressionStatement(factory.inlineExpressions(assignments)), node);
|
|
}
|
|
else {
|
|
updated = undefined;
|
|
}
|
|
}
|
|
else {
|
|
updated = ts.visitEachChild(node, visitor, context);
|
|
}
|
|
exitSubtree(ancestorFacts, 0, 0);
|
|
return updated;
|
|
}
|
|
function visitVariableDeclarationList(node) {
|
|
if (node.flags & 3 || node.transformFlags & 524288) {
|
|
if (node.flags & 3) {
|
|
enableSubstitutionsForBlockScopedBindings();
|
|
}
|
|
var declarations = ts.flatMap(node.declarations, node.flags & 1
|
|
? visitVariableDeclarationInLetDeclarationList
|
|
: visitVariableDeclaration);
|
|
var declarationList = factory.createVariableDeclarationList(declarations);
|
|
ts.setOriginalNode(declarationList, node);
|
|
ts.setTextRange(declarationList, node);
|
|
ts.setCommentRange(declarationList, node);
|
|
if (node.transformFlags & 524288
|
|
&& (ts.isBindingPattern(node.declarations[0].name) || ts.isBindingPattern(ts.last(node.declarations).name))) {
|
|
ts.setSourceMapRange(declarationList, getRangeUnion(declarations));
|
|
}
|
|
return declarationList;
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function getRangeUnion(declarations) {
|
|
var pos = -1, end = -1;
|
|
for (var _i = 0, declarations_10 = declarations; _i < declarations_10.length; _i++) {
|
|
var node = declarations_10[_i];
|
|
pos = pos === -1 ? node.pos : node.pos === -1 ? pos : Math.min(pos, node.pos);
|
|
end = Math.max(end, node.end);
|
|
}
|
|
return ts.createRange(pos, end);
|
|
}
|
|
function shouldEmitExplicitInitializerForLetDeclaration(node) {
|
|
var flags = resolver.getNodeCheckFlags(node);
|
|
var isCapturedInFunction = flags & 262144;
|
|
var isDeclaredInLoop = flags & 524288;
|
|
var emittedAsTopLevel = (hierarchyFacts & 64) !== 0
|
|
|| (isCapturedInFunction
|
|
&& isDeclaredInLoop
|
|
&& (hierarchyFacts & 512) !== 0);
|
|
var emitExplicitInitializer = !emittedAsTopLevel
|
|
&& (hierarchyFacts & 4096) === 0
|
|
&& (!resolver.isDeclarationWithCollidingName(node)
|
|
|| (isDeclaredInLoop
|
|
&& !isCapturedInFunction
|
|
&& (hierarchyFacts & (2048 | 4096)) === 0));
|
|
return emitExplicitInitializer;
|
|
}
|
|
function visitVariableDeclarationInLetDeclarationList(node) {
|
|
var name = node.name;
|
|
if (ts.isBindingPattern(name)) {
|
|
return visitVariableDeclaration(node);
|
|
}
|
|
if (!node.initializer && shouldEmitExplicitInitializerForLetDeclaration(node)) {
|
|
return factory.updateVariableDeclaration(node, node.name, undefined, undefined, factory.createVoidZero());
|
|
}
|
|
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 = new ts.Map();
|
|
}
|
|
var statement = ts.unwrapInnermostStatementOfLabel(node, convertedLoopState && recordLabel);
|
|
return ts.isIterationStatement(statement, false)
|
|
? visitIterationStatement(statement, node)
|
|
: factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node, convertedLoopState && resetLabel);
|
|
}
|
|
function visitIterationStatement(node, outermostLabeledStatement) {
|
|
switch (node.kind) {
|
|
case 240:
|
|
case 241:
|
|
return visitDoOrWhileStatement(node, outermostLabeledStatement);
|
|
case 242:
|
|
return visitForStatement(node, outermostLabeledStatement);
|
|
case 243:
|
|
return visitForInStatement(node, outermostLabeledStatement);
|
|
case 244:
|
|
return visitForOfStatement(node, outermostLabeledStatement);
|
|
}
|
|
}
|
|
function visitIterationStatementWithFacts(excludeFacts, includeFacts, node, outermostLabeledStatement, convert) {
|
|
var ancestorFacts = enterSubtree(excludeFacts, includeFacts);
|
|
var updated = convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, ancestorFacts, convert);
|
|
exitSubtree(ancestorFacts, 0, 0);
|
|
return updated;
|
|
}
|
|
function visitDoOrWhileStatement(node, outermostLabeledStatement) {
|
|
return visitIterationStatementWithFacts(0, 1280, node, outermostLabeledStatement);
|
|
}
|
|
function visitForStatement(node, outermostLabeledStatement) {
|
|
return visitIterationStatementWithFacts(5056, 3328, node, outermostLabeledStatement);
|
|
}
|
|
function visitEachChildOfForStatement(node) {
|
|
return factory.updateForStatement(node, ts.visitNode(node.initializer, visitorWithUnusedExpressionResult, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitorWithUnusedExpressionResult, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, factory.liftToBlock));
|
|
}
|
|
function visitForInStatement(node, outermostLabeledStatement) {
|
|
return visitIterationStatementWithFacts(3008, 5376, node, outermostLabeledStatement);
|
|
}
|
|
function visitForOfStatement(node, outermostLabeledStatement) {
|
|
return visitIterationStatementWithFacts(3008, 5376, 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(factory.createVariableDeclarationList(declarations), node.initializer);
|
|
ts.setOriginalNode(declarationList, node.initializer);
|
|
ts.setSourceMapRange(declarationList, ts.createRange(declarations[0].pos, ts.last(declarations).end));
|
|
statements.push(factory.createVariableStatement(undefined, declarationList));
|
|
}
|
|
else {
|
|
statements.push(ts.setTextRange(factory.createVariableStatement(undefined, ts.setOriginalNode(ts.setTextRange(factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : factory.createTempVariable(undefined), undefined, undefined, boundValue)
|
|
]), ts.moveRangePos(initializer, -1)), initializer)), ts.moveRangeEnd(initializer, -1)));
|
|
}
|
|
}
|
|
else {
|
|
var assignment = factory.createAssignment(initializer, boundValue);
|
|
if (ts.isDestructuringAssignment(assignment)) {
|
|
statements.push(factory.createExpressionStatement(visitBinaryExpression(assignment, true)));
|
|
}
|
|
else {
|
|
ts.setTextRangeEnd(assignment, initializer.end);
|
|
statements.push(ts.setTextRange(factory.createExpressionStatement(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, factory.liftToBlock);
|
|
if (ts.isBlock(statement)) {
|
|
return factory.updateBlock(statement, ts.setTextRange(factory.createNodeArray(ts.concatenate(statements, statement.statements)), statement.statements));
|
|
}
|
|
else {
|
|
statements.push(statement);
|
|
return createSyntheticBlockForConvertedStatements(statements);
|
|
}
|
|
}
|
|
}
|
|
function createSyntheticBlockForConvertedStatements(statements) {
|
|
return ts.setEmitFlags(factory.createBlock(factory.createNodeArray(statements), true), 48 | 384);
|
|
}
|
|
function convertForOfStatementForArray(node, outermostLabeledStatement, convertedLoopBodyStatements) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
var counter = factory.createLoopVariable();
|
|
var rhsReference = ts.isIdentifier(expression) ? factory.getGeneratedNameForNode(expression) : factory.createTempVariable(undefined);
|
|
ts.setEmitFlags(expression, 48 | ts.getEmitFlags(expression));
|
|
var forStatement = ts.setTextRange(factory.createForStatement(ts.setEmitFlags(ts.setTextRange(factory.createVariableDeclarationList([
|
|
ts.setTextRange(factory.createVariableDeclaration(counter, undefined, undefined, factory.createNumericLiteral(0)), ts.moveRangePos(node.expression, -1)),
|
|
ts.setTextRange(factory.createVariableDeclaration(rhsReference, undefined, undefined, expression), node.expression)
|
|
]), node.expression), 2097152), ts.setTextRange(factory.createLessThan(counter, factory.createPropertyAccessExpression(rhsReference, "length")), node.expression), ts.setTextRange(factory.createPostfixIncrement(counter), node.expression), convertForOfStatementHead(node, factory.createElementAccessExpression(rhsReference, counter), convertedLoopBodyStatements)), node);
|
|
ts.setEmitFlags(forStatement, 256);
|
|
ts.setTextRange(forStatement, node);
|
|
return factory.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel);
|
|
}
|
|
function convertForOfStatementForIterable(node, outermostLabeledStatement, convertedLoopBodyStatements, ancestorFacts) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
var iterator = ts.isIdentifier(expression) ? factory.getGeneratedNameForNode(expression) : factory.createTempVariable(undefined);
|
|
var result = ts.isIdentifier(expression) ? factory.getGeneratedNameForNode(iterator) : factory.createTempVariable(undefined);
|
|
var errorRecord = factory.createUniqueName("e");
|
|
var catchVariable = factory.getGeneratedNameForNode(errorRecord);
|
|
var returnMethod = factory.createTempVariable(undefined);
|
|
var values = ts.setTextRange(emitHelpers().createValuesHelper(expression), node.expression);
|
|
var next = factory.createCallExpression(factory.createPropertyAccessExpression(iterator, "next"), undefined, []);
|
|
hoistVariableDeclaration(errorRecord);
|
|
hoistVariableDeclaration(returnMethod);
|
|
var initializer = ancestorFacts & 1024
|
|
? factory.inlineExpressions([factory.createAssignment(errorRecord, factory.createVoidZero()), values])
|
|
: values;
|
|
var forStatement = ts.setEmitFlags(ts.setTextRange(factory.createForStatement(ts.setEmitFlags(ts.setTextRange(factory.createVariableDeclarationList([
|
|
ts.setTextRange(factory.createVariableDeclaration(iterator, undefined, undefined, initializer), node.expression),
|
|
factory.createVariableDeclaration(result, undefined, undefined, next)
|
|
]), node.expression), 2097152), factory.createLogicalNot(factory.createPropertyAccessExpression(result, "done")), factory.createAssignment(result, next), convertForOfStatementHead(node, factory.createPropertyAccessExpression(result, "value"), convertedLoopBodyStatements)), node), 256);
|
|
return factory.createTryStatement(factory.createBlock([
|
|
factory.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel)
|
|
]), factory.createCatchClause(factory.createVariableDeclaration(catchVariable), ts.setEmitFlags(factory.createBlock([
|
|
factory.createExpressionStatement(factory.createAssignment(errorRecord, factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("error", catchVariable)
|
|
])))
|
|
]), 1)), factory.createBlock([
|
|
factory.createTryStatement(factory.createBlock([
|
|
ts.setEmitFlags(factory.createIfStatement(factory.createLogicalAnd(factory.createLogicalAnd(result, factory.createLogicalNot(factory.createPropertyAccessExpression(result, "done"))), factory.createAssignment(returnMethod, factory.createPropertyAccessExpression(iterator, "return"))), factory.createExpressionStatement(factory.createFunctionCallCall(returnMethod, iterator, []))), 1),
|
|
]), undefined, ts.setEmitFlags(factory.createBlock([
|
|
ts.setEmitFlags(factory.createIfStatement(errorRecord, factory.createThrowStatement(factory.createPropertyAccessExpression(errorRecord, "error"))), 1)
|
|
]), 1))
|
|
]));
|
|
}
|
|
function visitObjectLiteralExpression(node) {
|
|
var properties = node.properties;
|
|
var numInitialProperties = -1, hasComputed = false;
|
|
for (var i = 0; i < properties.length; i++) {
|
|
var property = properties[i];
|
|
if ((property.transformFlags & 1048576 &&
|
|
hierarchyFacts & 4)
|
|
|| (hasComputed = ts.Debug.checkDefined(property.name).kind === 162)) {
|
|
numInitialProperties = i;
|
|
break;
|
|
}
|
|
}
|
|
if (numInitialProperties < 0) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
var temp = factory.createTempVariable(hoistVariableDeclaration);
|
|
var expressions = [];
|
|
var assignment = factory.createAssignment(temp, ts.setEmitFlags(factory.createObjectLiteralExpression(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), node.multiLine), hasComputed ? 65536 : 0));
|
|
if (node.multiLine) {
|
|
ts.startOnNewLine(assignment);
|
|
}
|
|
expressions.push(assignment);
|
|
addObjectLiteralMembers(expressions, node, temp, numInitialProperties);
|
|
expressions.push(node.multiLine ? ts.startOnNewLine(ts.setParent(ts.setTextRange(factory.cloneNode(temp), temp), temp.parent)) : temp);
|
|
return factory.inlineExpressions(expressions);
|
|
}
|
|
function shouldConvertPartOfIterationStatement(node) {
|
|
return (resolver.getNodeCheckFlags(node) & 131072) !== 0;
|
|
}
|
|
function shouldConvertInitializerOfForStatement(node) {
|
|
return ts.isForStatement(node) && !!node.initializer && shouldConvertPartOfIterationStatement(node.initializer);
|
|
}
|
|
function shouldConvertConditionOfForStatement(node) {
|
|
return ts.isForStatement(node) && !!node.condition && shouldConvertPartOfIterationStatement(node.condition);
|
|
}
|
|
function shouldConvertIncrementorOfForStatement(node) {
|
|
return ts.isForStatement(node) && !!node.incrementor && shouldConvertPartOfIterationStatement(node.incrementor);
|
|
}
|
|
function shouldConvertIterationStatement(node) {
|
|
return shouldConvertBodyOfIterationStatement(node)
|
|
|| shouldConvertInitializerOfForStatement(node);
|
|
}
|
|
function shouldConvertBodyOfIterationStatement(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 === 79) {
|
|
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, ancestorFacts, convert) {
|
|
if (!shouldConvertIterationStatement(node)) {
|
|
var saveAllowedNonLabeledJumps = void 0;
|
|
if (convertedLoopState) {
|
|
saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps;
|
|
convertedLoopState.allowedNonLabeledJumps = 2 | 4;
|
|
}
|
|
var result = convert
|
|
? convert(node, outermostLabeledStatement, undefined, ancestorFacts)
|
|
: factory.restoreEnclosingLabel(ts.isForStatement(node) ? visitEachChildOfForStatement(node) : ts.visitEachChild(node, visitor, context), outermostLabeledStatement, convertedLoopState && resetLabel);
|
|
if (convertedLoopState) {
|
|
convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps;
|
|
}
|
|
return result;
|
|
}
|
|
var currentState = createConvertedLoopState(node);
|
|
var statements = [];
|
|
var outerConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = currentState;
|
|
var initializerFunction = shouldConvertInitializerOfForStatement(node) ? createFunctionForInitializerOfForStatement(node, currentState) : undefined;
|
|
var bodyFunction = shouldConvertBodyOfIterationStatement(node) ? createFunctionForBodyOfIterationStatement(node, currentState, outerConvertedLoopState) : undefined;
|
|
convertedLoopState = outerConvertedLoopState;
|
|
if (initializerFunction)
|
|
statements.push(initializerFunction.functionDeclaration);
|
|
if (bodyFunction)
|
|
statements.push(bodyFunction.functionDeclaration);
|
|
addExtraDeclarationsForConvertedLoop(statements, currentState, outerConvertedLoopState);
|
|
if (initializerFunction) {
|
|
statements.push(generateCallToConvertedLoopInitializer(initializerFunction.functionName, initializerFunction.containsYield));
|
|
}
|
|
var loop;
|
|
if (bodyFunction) {
|
|
if (convert) {
|
|
loop = convert(node, outermostLabeledStatement, bodyFunction.part, ancestorFacts);
|
|
}
|
|
else {
|
|
var clone_4 = convertIterationStatementCore(node, initializerFunction, factory.createBlock(bodyFunction.part, true));
|
|
loop = factory.restoreEnclosingLabel(clone_4, outermostLabeledStatement, convertedLoopState && resetLabel);
|
|
}
|
|
}
|
|
else {
|
|
var clone_5 = convertIterationStatementCore(node, initializerFunction, ts.visitNode(node.statement, visitor, ts.isStatement, factory.liftToBlock));
|
|
loop = factory.restoreEnclosingLabel(clone_5, outermostLabeledStatement, convertedLoopState && resetLabel);
|
|
}
|
|
statements.push(loop);
|
|
return statements;
|
|
}
|
|
function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
|
|
switch (node.kind) {
|
|
case 242: return convertForStatement(node, initializerFunction, convertedLoopBody);
|
|
case 243: return convertForInStatement(node, convertedLoopBody);
|
|
case 244: return convertForOfStatement(node, convertedLoopBody);
|
|
case 240: return convertDoStatement(node, convertedLoopBody);
|
|
case 241: return convertWhileStatement(node, convertedLoopBody);
|
|
default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
|
|
}
|
|
}
|
|
function convertForStatement(node, initializerFunction, convertedLoopBody) {
|
|
var shouldConvertCondition = node.condition && shouldConvertPartOfIterationStatement(node.condition);
|
|
var shouldConvertIncrementor = shouldConvertCondition || node.incrementor && shouldConvertPartOfIterationStatement(node.incrementor);
|
|
return factory.updateForStatement(node, ts.visitNode(initializerFunction ? initializerFunction.part : node.initializer, visitorWithUnusedExpressionResult, ts.isForInitializer), ts.visitNode(shouldConvertCondition ? undefined : node.condition, visitor, ts.isExpression), ts.visitNode(shouldConvertIncrementor ? undefined : node.incrementor, visitorWithUnusedExpressionResult, ts.isExpression), convertedLoopBody);
|
|
}
|
|
function convertForOfStatement(node, convertedLoopBody) {
|
|
return factory.updateForOfStatement(node, undefined, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.expression, visitor, ts.isExpression), convertedLoopBody);
|
|
}
|
|
function convertForInStatement(node, convertedLoopBody) {
|
|
return factory.updateForInStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.expression, visitor, ts.isExpression), convertedLoopBody);
|
|
}
|
|
function convertDoStatement(node, convertedLoopBody) {
|
|
return factory.updateDoStatement(node, convertedLoopBody, ts.visitNode(node.expression, visitor, ts.isExpression));
|
|
}
|
|
function convertWhileStatement(node, convertedLoopBody) {
|
|
return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), convertedLoopBody);
|
|
}
|
|
function createConvertedLoopState(node) {
|
|
var loopInitializer;
|
|
switch (node.kind) {
|
|
case 242:
|
|
case 243:
|
|
case 244:
|
|
var initializer = node.initializer;
|
|
if (initializer && initializer.kind === 255) {
|
|
loopInitializer = initializer;
|
|
}
|
|
break;
|
|
}
|
|
var loopParameters = [];
|
|
var loopOutParameters = [];
|
|
if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3)) {
|
|
var hasCapturedBindingsInForHead = shouldConvertInitializerOfForStatement(node) ||
|
|
shouldConvertConditionOfForStatement(node) ||
|
|
shouldConvertIncrementorOfForStatement(node);
|
|
for (var _i = 0, _a = loopInitializer.declarations; _i < _a.length; _i++) {
|
|
var decl = _a[_i];
|
|
processLoopVariableDeclaration(node, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead);
|
|
}
|
|
}
|
|
var currentState = { loopParameters: loopParameters, loopOutParameters: loopOutParameters };
|
|
if (convertedLoopState) {
|
|
if (convertedLoopState.argumentsName) {
|
|
currentState.argumentsName = convertedLoopState.argumentsName;
|
|
}
|
|
if (convertedLoopState.thisName) {
|
|
currentState.thisName = convertedLoopState.thisName;
|
|
}
|
|
if (convertedLoopState.hoistedLocalVariables) {
|
|
currentState.hoistedLocalVariables = convertedLoopState.hoistedLocalVariables;
|
|
}
|
|
}
|
|
return currentState;
|
|
}
|
|
function addExtraDeclarationsForConvertedLoop(statements, state, outerState) {
|
|
var extraVariableDeclarations;
|
|
if (state.argumentsName) {
|
|
if (outerState) {
|
|
outerState.argumentsName = state.argumentsName;
|
|
}
|
|
else {
|
|
(extraVariableDeclarations || (extraVariableDeclarations = [])).push(factory.createVariableDeclaration(state.argumentsName, undefined, undefined, factory.createIdentifier("arguments")));
|
|
}
|
|
}
|
|
if (state.thisName) {
|
|
if (outerState) {
|
|
outerState.thisName = state.thisName;
|
|
}
|
|
else {
|
|
(extraVariableDeclarations || (extraVariableDeclarations = [])).push(factory.createVariableDeclaration(state.thisName, undefined, undefined, factory.createIdentifier("this")));
|
|
}
|
|
}
|
|
if (state.hoistedLocalVariables) {
|
|
if (outerState) {
|
|
outerState.hoistedLocalVariables = state.hoistedLocalVariables;
|
|
}
|
|
else {
|
|
if (!extraVariableDeclarations) {
|
|
extraVariableDeclarations = [];
|
|
}
|
|
for (var _i = 0, _a = state.hoistedLocalVariables; _i < _a.length; _i++) {
|
|
var identifier = _a[_i];
|
|
extraVariableDeclarations.push(factory.createVariableDeclaration(identifier));
|
|
}
|
|
}
|
|
}
|
|
if (state.loopOutParameters.length) {
|
|
if (!extraVariableDeclarations) {
|
|
extraVariableDeclarations = [];
|
|
}
|
|
for (var _b = 0, _c = state.loopOutParameters; _b < _c.length; _b++) {
|
|
var outParam = _c[_b];
|
|
extraVariableDeclarations.push(factory.createVariableDeclaration(outParam.outParamName));
|
|
}
|
|
}
|
|
if (state.conditionVariable) {
|
|
if (!extraVariableDeclarations) {
|
|
extraVariableDeclarations = [];
|
|
}
|
|
extraVariableDeclarations.push(factory.createVariableDeclaration(state.conditionVariable, undefined, undefined, factory.createFalse()));
|
|
}
|
|
if (extraVariableDeclarations) {
|
|
statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(extraVariableDeclarations)));
|
|
}
|
|
}
|
|
function createOutVariable(p) {
|
|
return factory.createVariableDeclaration(p.originalName, undefined, undefined, p.outParamName);
|
|
}
|
|
function createFunctionForInitializerOfForStatement(node, currentState) {
|
|
var functionName = factory.createUniqueName("_loop_init");
|
|
var containsYield = (node.initializer.transformFlags & 1048576) !== 0;
|
|
var emitFlags = 0;
|
|
if (currentState.containsLexicalThis)
|
|
emitFlags |= 8;
|
|
if (containsYield && hierarchyFacts & 4)
|
|
emitFlags |= 262144;
|
|
var statements = [];
|
|
statements.push(factory.createVariableStatement(undefined, node.initializer));
|
|
copyOutParameters(currentState.loopOutParameters, 2, 1, statements);
|
|
var functionDeclaration = factory.createVariableStatement(undefined, ts.setEmitFlags(factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(functionName, undefined, undefined, ts.setEmitFlags(factory.createFunctionExpression(undefined, containsYield ? factory.createToken(41) : undefined, undefined, undefined, undefined, undefined, ts.visitNode(factory.createBlock(statements, true), visitor, ts.isBlock)), emitFlags))
|
|
]), 2097152));
|
|
var part = factory.createVariableDeclarationList(ts.map(currentState.loopOutParameters, createOutVariable));
|
|
return { functionName: functionName, containsYield: containsYield, functionDeclaration: functionDeclaration, part: part };
|
|
}
|
|
function createFunctionForBodyOfIterationStatement(node, currentState, outerState) {
|
|
var functionName = factory.createUniqueName("_loop");
|
|
startLexicalEnvironment();
|
|
var statement = ts.visitNode(node.statement, visitor, ts.isStatement, factory.liftToBlock);
|
|
var lexicalEnvironment = endLexicalEnvironment();
|
|
var statements = [];
|
|
if (shouldConvertConditionOfForStatement(node) || shouldConvertIncrementorOfForStatement(node)) {
|
|
currentState.conditionVariable = factory.createUniqueName("inc");
|
|
if (node.incrementor) {
|
|
statements.push(factory.createIfStatement(currentState.conditionVariable, factory.createExpressionStatement(ts.visitNode(node.incrementor, visitor, ts.isExpression)), factory.createExpressionStatement(factory.createAssignment(currentState.conditionVariable, factory.createTrue()))));
|
|
}
|
|
else {
|
|
statements.push(factory.createIfStatement(factory.createLogicalNot(currentState.conditionVariable), factory.createExpressionStatement(factory.createAssignment(currentState.conditionVariable, factory.createTrue()))));
|
|
}
|
|
if (shouldConvertConditionOfForStatement(node)) {
|
|
statements.push(factory.createIfStatement(factory.createPrefixUnaryExpression(53, ts.visitNode(node.condition, visitor, ts.isExpression)), ts.visitNode(factory.createBreakStatement(), visitor, ts.isStatement)));
|
|
}
|
|
}
|
|
if (ts.isBlock(statement)) {
|
|
ts.addRange(statements, statement.statements);
|
|
}
|
|
else {
|
|
statements.push(statement);
|
|
}
|
|
copyOutParameters(currentState.loopOutParameters, 1, 1, statements);
|
|
ts.insertStatementsAfterStandardPrologue(statements, lexicalEnvironment);
|
|
var loopBody = factory.createBlock(statements, true);
|
|
if (ts.isBlock(statement))
|
|
ts.setOriginalNode(loopBody, statement);
|
|
var containsYield = (node.statement.transformFlags & 1048576) !== 0;
|
|
var emitFlags = 524288;
|
|
if (currentState.containsLexicalThis)
|
|
emitFlags |= 8;
|
|
if (containsYield && (hierarchyFacts & 4) !== 0)
|
|
emitFlags |= 262144;
|
|
var functionDeclaration = factory.createVariableStatement(undefined, ts.setEmitFlags(factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(functionName, undefined, undefined, ts.setEmitFlags(factory.createFunctionExpression(undefined, containsYield ? factory.createToken(41) : undefined, undefined, undefined, currentState.loopParameters, undefined, loopBody), emitFlags))
|
|
]), 2097152));
|
|
var part = generateCallToConvertedLoop(functionName, currentState, outerState, containsYield);
|
|
return { functionName: functionName, containsYield: containsYield, functionDeclaration: functionDeclaration, part: part };
|
|
}
|
|
function copyOutParameter(outParam, copyDirection) {
|
|
var source = copyDirection === 0 ? outParam.outParamName : outParam.originalName;
|
|
var target = copyDirection === 0 ? outParam.originalName : outParam.outParamName;
|
|
return factory.createBinaryExpression(target, 63, source);
|
|
}
|
|
function copyOutParameters(outParams, partFlags, copyDirection, statements) {
|
|
for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
|
|
var outParam = outParams_1[_i];
|
|
if (outParam.flags & partFlags) {
|
|
statements.push(factory.createExpressionStatement(copyOutParameter(outParam, copyDirection)));
|
|
}
|
|
}
|
|
}
|
|
function generateCallToConvertedLoopInitializer(initFunctionExpressionName, containsYield) {
|
|
var call = factory.createCallExpression(initFunctionExpressionName, undefined, []);
|
|
var callResult = containsYield
|
|
? factory.createYieldExpression(factory.createToken(41), ts.setEmitFlags(call, 8388608))
|
|
: call;
|
|
return factory.createExpressionStatement(callResult);
|
|
}
|
|
function generateCallToConvertedLoop(loopFunctionExpressionName, state, outerState, containsYield) {
|
|
var statements = [];
|
|
var isSimpleLoop = !(state.nonLocalJumps & ~4) &&
|
|
!state.labeledNonLocalBreaks &&
|
|
!state.labeledNonLocalContinues;
|
|
var call = factory.createCallExpression(loopFunctionExpressionName, undefined, ts.map(state.loopParameters, function (p) { return p.name; }));
|
|
var callResult = containsYield
|
|
? factory.createYieldExpression(factory.createToken(41), ts.setEmitFlags(call, 8388608))
|
|
: call;
|
|
if (isSimpleLoop) {
|
|
statements.push(factory.createExpressionStatement(callResult));
|
|
copyOutParameters(state.loopOutParameters, 1, 0, statements);
|
|
}
|
|
else {
|
|
var loopResultName = factory.createUniqueName("state");
|
|
var stateVariable = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration(loopResultName, undefined, undefined, callResult)]));
|
|
statements.push(stateVariable);
|
|
copyOutParameters(state.loopOutParameters, 1, 0, statements);
|
|
if (state.nonLocalJumps & 8) {
|
|
var returnStatement = void 0;
|
|
if (outerState) {
|
|
outerState.nonLocalJumps |= 8;
|
|
returnStatement = factory.createReturnStatement(loopResultName);
|
|
}
|
|
else {
|
|
returnStatement = factory.createReturnStatement(factory.createPropertyAccessExpression(loopResultName, "value"));
|
|
}
|
|
statements.push(factory.createIfStatement(factory.createTypeCheck(loopResultName, "object"), returnStatement));
|
|
}
|
|
if (state.nonLocalJumps & 2) {
|
|
statements.push(factory.createIfStatement(factory.createStrictEquality(loopResultName, factory.createStringLiteral("break")), factory.createBreakStatement()));
|
|
}
|
|
if (state.labeledNonLocalBreaks || state.labeledNonLocalContinues) {
|
|
var caseClauses = [];
|
|
processLabeledJumps(state.labeledNonLocalBreaks, true, loopResultName, outerState, caseClauses);
|
|
processLabeledJumps(state.labeledNonLocalContinues, false, loopResultName, outerState, caseClauses);
|
|
statements.push(factory.createSwitchStatement(loopResultName, factory.createCaseBlock(caseClauses)));
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function setLabeledJump(state, isBreak, labelText, labelMarker) {
|
|
if (isBreak) {
|
|
if (!state.labeledNonLocalBreaks) {
|
|
state.labeledNonLocalBreaks = new ts.Map();
|
|
}
|
|
state.labeledNonLocalBreaks.set(labelText, labelMarker);
|
|
}
|
|
else {
|
|
if (!state.labeledNonLocalContinues) {
|
|
state.labeledNonLocalContinues = new ts.Map();
|
|
}
|
|
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 = factory.createIdentifier(labelText);
|
|
statements.push(isBreak ? factory.createBreakStatement(label) : factory.createContinueStatement(label));
|
|
}
|
|
else {
|
|
setLabeledJump(outerLoop, isBreak, labelText, labelMarker);
|
|
statements.push(factory.createReturnStatement(loopResultName));
|
|
}
|
|
caseClauses.push(factory.createCaseClause(factory.createStringLiteral(labelMarker), statements));
|
|
});
|
|
}
|
|
function processLoopVariableDeclaration(container, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead) {
|
|
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(container, element, loopParameters, loopOutParameters, hasCapturedBindingsInForHead);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
loopParameters.push(factory.createParameterDeclaration(undefined, undefined, name));
|
|
var checkFlags = resolver.getNodeCheckFlags(decl);
|
|
if (checkFlags & 4194304 || hasCapturedBindingsInForHead) {
|
|
var outParamName = factory.createUniqueName("out_" + ts.idText(name));
|
|
var flags = 0;
|
|
if (checkFlags & 4194304) {
|
|
flags |= 1;
|
|
}
|
|
if (ts.isForStatement(container)) {
|
|
if (container.initializer && resolver.isBindingCapturedByNode(container.initializer, decl)) {
|
|
flags |= 2;
|
|
}
|
|
if (container.condition && resolver.isBindingCapturedByNode(container.condition, decl) ||
|
|
container.incrementor && resolver.isBindingCapturedByNode(container.incrementor, decl)) {
|
|
flags |= 1;
|
|
}
|
|
}
|
|
loopOutParameters.push({ flags: flags, 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 172:
|
|
case 173:
|
|
var accessors = ts.getAllAccessorDeclarations(node.properties, property);
|
|
if (property === accessors.firstAccessor) {
|
|
expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
|
|
}
|
|
break;
|
|
case 169:
|
|
expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
|
|
break;
|
|
case 296:
|
|
expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
|
|
break;
|
|
case 297:
|
|
expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
|
|
break;
|
|
default:
|
|
ts.Debug.failBadSyntaxKind(node);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
function transformPropertyAssignmentToExpression(property, receiver, startsOnNewLine) {
|
|
var expression = factory.createAssignment(ts.createMemberAccessForPropertyName(factory, 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 = factory.createAssignment(ts.createMemberAccessForPropertyName(factory, receiver, ts.visitNode(property.name, visitor, ts.isPropertyName)), factory.cloneNode(property.name));
|
|
ts.setTextRange(expression, property);
|
|
if (startsOnNewLine) {
|
|
ts.startOnNewLine(expression);
|
|
}
|
|
return expression;
|
|
}
|
|
function transformObjectLiteralMethodDeclarationToExpression(method, receiver, container, startsOnNewLine) {
|
|
var expression = factory.createAssignment(ts.createMemberAccessForPropertyName(factory, receiver, ts.visitNode(method.name, visitor, ts.isPropertyName)), transformFunctionLikeToExpression(method, method, undefined, container));
|
|
ts.setTextRange(expression, method);
|
|
if (startsOnNewLine) {
|
|
ts.startOnNewLine(expression);
|
|
}
|
|
return expression;
|
|
}
|
|
function visitCatchClause(node) {
|
|
var ancestorFacts = enterSubtree(7104, 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 = factory.createTempVariable(undefined);
|
|
var newVariableDeclaration = factory.createVariableDeclaration(temp);
|
|
ts.setTextRange(newVariableDeclaration, node.variableDeclaration);
|
|
var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0, temp);
|
|
var list = factory.createVariableDeclarationList(vars);
|
|
ts.setTextRange(list, node.variableDeclaration);
|
|
var destructure = factory.createVariableStatement(undefined, list);
|
|
updated = factory.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 factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
|
|
}
|
|
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(factory.createPropertyAssignment(node.name, functionExpression), node);
|
|
}
|
|
function visitAccessorDeclaration(node) {
|
|
ts.Debug.assert(!ts.isComputedPropertyName(node.name));
|
|
var savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var ancestorFacts = enterSubtree(32670, 65);
|
|
var updated;
|
|
var parameters = ts.visitParameterList(node.parameters, visitor, context);
|
|
var body = transformFunctionBody(node);
|
|
if (node.kind === 172) {
|
|
updated = factory.updateGetAccessorDeclaration(node, node.modifiers, node.name, parameters, node.type, body);
|
|
}
|
|
else {
|
|
updated = factory.updateSetAccessorDeclaration(node, node.modifiers, node.name, parameters, body);
|
|
}
|
|
exitSubtree(ancestorFacts, 98304, 0);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
return updated;
|
|
}
|
|
function visitShorthandPropertyAssignment(node) {
|
|
return ts.setTextRange(factory.createPropertyAssignment(node.name, visitIdentifier(factory.cloneNode(node.name))), node);
|
|
}
|
|
function visitComputedPropertyName(node) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitYieldExpression(node) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitArrayLiteralExpression(node) {
|
|
if (ts.some(node.elements, ts.isSpreadElement)) {
|
|
return transformAndSpreadElements(node.elements, false, !!node.multiLine, !!node.elements.hasTrailingComma);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitCallExpression(node) {
|
|
if (ts.getEmitFlags(node) & 33554432) {
|
|
return visitTypeScriptClassWrapper(node);
|
|
}
|
|
var expression = ts.skipOuterExpressions(node.expression);
|
|
if (expression.kind === 106 ||
|
|
ts.isSuperProperty(expression) ||
|
|
ts.some(node.arguments, ts.isSpreadElement)) {
|
|
return visitCallExpressionWithPotentialCapturedThisAssignment(node, true);
|
|
}
|
|
return factory.updateCallExpression(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 savedConvertedLoopState = convertedLoopState;
|
|
convertedLoopState = undefined;
|
|
var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
|
|
convertedLoopState = savedConvertedLoopState;
|
|
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);
|
|
if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27) {
|
|
aliasAssignment = ts.tryCast(initializer.left, 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(factory.createExpressionStatement(factory.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 factory.restoreOuterExpressions(node.expression, factory.restoreOuterExpressions(variable.initializer, factory.restoreOuterExpressions(aliasAssignment && aliasAssignment.right, factory.updateCallExpression(call, factory.restoreOuterExpressions(call.expression, factory.updateFunctionExpression(func, undefined, undefined, undefined, undefined, func.parameters, undefined, factory.updateBlock(func.body, statements))), undefined, call.arguments))));
|
|
}
|
|
function visitSuperCallInBody(node) {
|
|
return visitCallExpressionWithPotentialCapturedThisAssignment(node, false);
|
|
}
|
|
function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) {
|
|
if (node.transformFlags & 32768 ||
|
|
node.expression.kind === 106 ||
|
|
ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
|
|
var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
|
|
if (node.expression.kind === 106) {
|
|
ts.setEmitFlags(thisArg, 4);
|
|
}
|
|
var resultingCall = void 0;
|
|
if (node.transformFlags & 32768) {
|
|
resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, true, false, false));
|
|
}
|
|
else {
|
|
resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
|
|
}
|
|
if (node.expression.kind === 106) {
|
|
var initializer = factory.createLogicalOr(resultingCall, createActualThis());
|
|
resultingCall = assignToCapturedThis
|
|
? factory.createAssignment(factory.createUniqueName("_this", 16 | 32), initializer)
|
|
: initializer;
|
|
}
|
|
return ts.setOriginalNode(resultingCall, node);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitNewExpression(node) {
|
|
if (ts.some(node.arguments, ts.isSpreadElement)) {
|
|
var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
|
|
return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), true, false, false)), undefined, []);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function transformAndSpreadElements(elements, isArgumentList, 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 (segments.length === 1) {
|
|
var firstSegment = segments[0];
|
|
if (isArgumentList && !compilerOptions.downlevelIteration
|
|
|| ts.isPackedArrayLiteral(firstSegment.expression)
|
|
|| ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
|
|
return firstSegment.expression;
|
|
}
|
|
}
|
|
var helpers = emitHelpers();
|
|
var startsWithSpread = segments[0].kind !== 0;
|
|
var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
|
|
segments[0].expression;
|
|
for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
|
|
var segment = segments[i];
|
|
expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 && !isArgumentList);
|
|
}
|
|
return expression;
|
|
}
|
|
function partitionSpread(node) {
|
|
return ts.isSpreadElement(node)
|
|
? visitSpanOfSpreads
|
|
: visitSpanOfNonSpreads;
|
|
}
|
|
function visitSpanOfSpreads(chunk) {
|
|
return ts.map(chunk, visitExpressionOfSpread);
|
|
}
|
|
function visitExpressionOfSpread(node) {
|
|
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
|
|
var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 : 1;
|
|
if (compilerOptions.downlevelIteration && kind === 1 && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
|
|
expression = emitHelpers().createReadHelper(expression, undefined);
|
|
kind = 2;
|
|
}
|
|
return createSpreadSegment(kind, expression);
|
|
}
|
|
function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
|
|
var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
|
|
return createSpreadSegment(0, expression);
|
|
}
|
|
function visitSpreadElement(node) {
|
|
return ts.visitNode(node.expression, visitor, ts.isExpression);
|
|
}
|
|
function visitTemplateLiteral(node) {
|
|
return ts.setTextRange(factory.createStringLiteral(node.text), node);
|
|
}
|
|
function visitStringLiteral(node) {
|
|
if (node.hasExtendedUnicodeEscape) {
|
|
return ts.setTextRange(factory.createStringLiteral(node.text), node);
|
|
}
|
|
return node;
|
|
}
|
|
function visitNumericLiteral(node) {
|
|
if (node.numericLiteralFlags & 384) {
|
|
return ts.setTextRange(factory.createNumericLiteral(node.text), node);
|
|
}
|
|
return node;
|
|
}
|
|
function visitTaggedTemplateExpression(node) {
|
|
return ts.processTaggedTemplateExpression(context, node, visitor, currentSourceFile, recordTaggedTemplateString, ts.ProcessLevel.All);
|
|
}
|
|
function visitTemplateExpression(node) {
|
|
var expression = factory.createStringLiteral(node.head.text);
|
|
for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) {
|
|
var span = _a[_i];
|
|
var args = [ts.visitNode(span.expression, visitor, ts.isExpression)];
|
|
if (span.literal.text.length > 0) {
|
|
args.push(factory.createStringLiteral(span.literal.text));
|
|
}
|
|
expression = factory.createCallExpression(factory.createPropertyAccessExpression(expression, "concat"), undefined, args);
|
|
}
|
|
return ts.setTextRange(expression, node);
|
|
}
|
|
function visitSuperKeyword(isExpressionOfCall) {
|
|
return hierarchyFacts & 8
|
|
&& !isExpressionOfCall
|
|
? factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 | 32), "prototype")
|
|
: factory.createUniqueName("_super", 16 | 32);
|
|
}
|
|
function visitMetaProperty(node) {
|
|
if (node.keywordToken === 103 && node.name.escapedText === "target") {
|
|
hierarchyFacts |= 32768;
|
|
return factory.createUniqueName("_newTarget", 16 | 32);
|
|
}
|
|
return node;
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
if (enabledSubstitutions & 1 && ts.isFunctionLike(node)) {
|
|
var ancestorFacts = enterSubtree(32670, 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(79);
|
|
}
|
|
}
|
|
function enableSubstitutionsForCapturedThis() {
|
|
if ((enabledSubstitutions & 1) === 0) {
|
|
enabledSubstitutions |= 1;
|
|
context.enableSubstitution(108);
|
|
context.enableEmitNotification(171);
|
|
context.enableEmitNotification(169);
|
|
context.enableEmitNotification(172);
|
|
context.enableEmitNotification(173);
|
|
context.enableEmitNotification(214);
|
|
context.enableEmitNotification(213);
|
|
context.enableEmitNotification(256);
|
|
}
|
|
}
|
|
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(factory.getGeneratedNameForNode(original), node);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function isNameOfDeclarationWithCollidingName(node) {
|
|
switch (node.parent.kind) {
|
|
case 203:
|
|
case 257:
|
|
case 260:
|
|
case 254:
|
|
return node.parent.name === node
|
|
&& resolver.isDeclarationWithCollidingName(node.parent);
|
|
}
|
|
return false;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
case 108:
|
|
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(factory.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(factory.createUniqueName("_this", 16 | 32), node);
|
|
}
|
|
return node;
|
|
}
|
|
function getClassMemberPrefix(node, member) {
|
|
return ts.isStatic(member)
|
|
? factory.getInternalName(node)
|
|
: factory.createPropertyAccessExpression(factory.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 !== 238) {
|
|
return false;
|
|
}
|
|
var statementExpression = statement.expression;
|
|
if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 208) {
|
|
return false;
|
|
}
|
|
var callTarget = statementExpression.expression;
|
|
if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106) {
|
|
return false;
|
|
}
|
|
var callArgument = ts.singleOrUndefined(statementExpression.arguments);
|
|
if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 225) {
|
|
return false;
|
|
}
|
|
var expression = callArgument.expression;
|
|
return ts.isIdentifier(expression) && expression.escapedText === "arguments";
|
|
}
|
|
}
|
|
ts.transformES2015 = transformES2015;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformES5(context) {
|
|
var factory = context.factory;
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var previousOnEmitNode;
|
|
var noSubstitution;
|
|
if (compilerOptions.jsx === 1 || compilerOptions.jsx === 3) {
|
|
previousOnEmitNode = context.onEmitNode;
|
|
context.onEmitNode = onEmitNode;
|
|
context.enableEmitNotification(280);
|
|
context.enableEmitNotification(281);
|
|
context.enableEmitNotification(279);
|
|
noSubstitution = [];
|
|
}
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
context.enableSubstitution(206);
|
|
context.enableSubstitution(296);
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
return node;
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
switch (node.kind) {
|
|
case 280:
|
|
case 281:
|
|
case 279:
|
|
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) {
|
|
if (ts.isPrivateIdentifier(node.name)) {
|
|
return node;
|
|
}
|
|
var literalName = trySubstituteReservedName(node.name);
|
|
if (literalName) {
|
|
return ts.setTextRange(factory.createElementAccessExpression(node.expression, literalName), node);
|
|
}
|
|
return node;
|
|
}
|
|
function substitutePropertyAssignment(node) {
|
|
var literalName = ts.isIdentifier(node.name) && trySubstituteReservedName(node.name);
|
|
if (literalName) {
|
|
return factory.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 >= 81 && token <= 116) {
|
|
return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
ts.transformES5 = transformES5;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
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 factory = context.factory, emitHelpers = context.getEmitHelperFactory, 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(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile || (node.transformFlags & 2048) === 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 (ts.isFunctionLikeDeclaration(node) && node.asteriskToken) {
|
|
return visitGenerator(node);
|
|
}
|
|
else if (transformFlags & 2048) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
else {
|
|
return node;
|
|
}
|
|
}
|
|
function visitJavaScriptInStatementContainingYield(node) {
|
|
switch (node.kind) {
|
|
case 240:
|
|
return visitDoStatement(node);
|
|
case 241:
|
|
return visitWhileStatement(node);
|
|
case 249:
|
|
return visitSwitchStatement(node);
|
|
case 250:
|
|
return visitLabeledStatement(node);
|
|
default:
|
|
return visitJavaScriptInGeneratorFunctionBody(node);
|
|
}
|
|
}
|
|
function visitJavaScriptInGeneratorFunctionBody(node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 213:
|
|
return visitFunctionExpression(node);
|
|
case 172:
|
|
case 173:
|
|
return visitAccessorDeclaration(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 242:
|
|
return visitForStatement(node);
|
|
case 243:
|
|
return visitForInStatement(node);
|
|
case 246:
|
|
return visitBreakStatement(node);
|
|
case 245:
|
|
return visitContinueStatement(node);
|
|
case 247:
|
|
return visitReturnStatement(node);
|
|
default:
|
|
if (node.transformFlags & 1048576) {
|
|
return visitJavaScriptContainingYield(node);
|
|
}
|
|
else if (node.transformFlags & (2048 | 4194304)) {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
else {
|
|
return node;
|
|
}
|
|
}
|
|
}
|
|
function visitJavaScriptContainingYield(node) {
|
|
switch (node.kind) {
|
|
case 221:
|
|
return visitBinaryExpression(node);
|
|
case 351:
|
|
return visitCommaListExpression(node);
|
|
case 222:
|
|
return visitConditionalExpression(node);
|
|
case 224:
|
|
return visitYieldExpression(node);
|
|
case 204:
|
|
return visitArrayLiteralExpression(node);
|
|
case 205:
|
|
return visitObjectLiteralExpression(node);
|
|
case 207:
|
|
return visitElementAccessExpression(node);
|
|
case 208:
|
|
return visitCallExpression(node);
|
|
case 209:
|
|
return visitNewExpression(node);
|
|
default:
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitGenerator(node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 213:
|
|
return visitFunctionExpression(node);
|
|
default:
|
|
return ts.Debug.failBadSyntaxKind(node);
|
|
}
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
if (node.asteriskToken) {
|
|
node = ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(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(factory.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 = factory.createTempVariable(undefined);
|
|
resumeLexicalEnvironment();
|
|
var statementOffset = factory.copyPrologue(body.statements, statements, false, visitor);
|
|
transformAndEmitStatements(body.statements, statementOffset);
|
|
var buildResult = build();
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
statements.push(factory.createReturnStatement(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(factory.createBlock(statements, body.multiLine), body);
|
|
}
|
|
function visitVariableStatement(node) {
|
|
if (node.transformFlags & 1048576) {
|
|
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(factory.createExpressionStatement(factory.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 visitRightAssociativeBinaryExpression(node) {
|
|
var left = node.left, right = node.right;
|
|
if (containsYield(right)) {
|
|
var target = void 0;
|
|
switch (left.kind) {
|
|
case 206:
|
|
target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
|
|
break;
|
|
case 207:
|
|
target = factory.updateElementAccessExpression(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 (ts.isCompoundAssignment(operator)) {
|
|
return ts.setTextRange(factory.createAssignment(target, ts.setTextRange(factory.createBinaryExpression(cacheExpression(target), ts.getNonAssignmentOperatorForCompoundAssignment(operator), ts.visitNode(right, visitor, ts.isExpression)), node)), node);
|
|
}
|
|
else {
|
|
return factory.updateBinaryExpression(node, target, node.operatorToken, 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 === 27) {
|
|
return visitCommaExpression(node);
|
|
}
|
|
return factory.updateBinaryExpression(node, cacheExpression(ts.visitNode(node.left, visitor, ts.isExpression)), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitCommaExpression(node) {
|
|
var pendingExpressions = [];
|
|
visit(node.left);
|
|
visit(node.right);
|
|
return factory.inlineExpressions(pendingExpressions);
|
|
function visit(node) {
|
|
if (ts.isBinaryExpression(node) && node.operatorToken.kind === 27) {
|
|
visit(node.left);
|
|
visit(node.right);
|
|
}
|
|
else {
|
|
if (containsYield(node) && pendingExpressions.length > 0) {
|
|
emitWorker(1, [factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))]);
|
|
pendingExpressions = [];
|
|
}
|
|
pendingExpressions.push(ts.visitNode(node, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
}
|
|
function visitCommaListExpression(node) {
|
|
var pendingExpressions = [];
|
|
for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
|
|
var elem = _a[_i];
|
|
if (ts.isBinaryExpression(elem) && elem.operatorToken.kind === 27) {
|
|
pendingExpressions.push(visitCommaExpression(elem));
|
|
}
|
|
else {
|
|
if (containsYield(elem) && pendingExpressions.length > 0) {
|
|
emitWorker(1, [factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions))]);
|
|
pendingExpressions = [];
|
|
}
|
|
pendingExpressions.push(ts.visitNode(elem, visitor, ts.isExpression));
|
|
}
|
|
}
|
|
return factory.inlineExpressions(pendingExpressions);
|
|
}
|
|
function visitLogicalBinaryExpression(node) {
|
|
var resultLabel = defineLabel();
|
|
var resultLocal = declareLocal();
|
|
emitAssignment(resultLocal, ts.visitNode(node.left, visitor, ts.isExpression), node.left);
|
|
if (node.operatorToken.kind === 55) {
|
|
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 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.setTextRange(emitHelpers().createValuesHelper(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, factory.createArrayLiteralExpression(leadingElement
|
|
? __spreadArray([leadingElement], initialElements, true) : initialElements));
|
|
leadingElement = undefined;
|
|
}
|
|
var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
|
|
return temp
|
|
? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
|
|
: ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
|
|
function reduceElement(expressions, element) {
|
|
if (containsYield(element) && expressions.length > 0) {
|
|
var hasAssignedTemp = temp !== undefined;
|
|
if (!temp) {
|
|
temp = declareLocal();
|
|
}
|
|
emitAssignment(temp, hasAssignedTemp
|
|
? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
|
|
: factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : 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, factory.createObjectLiteralExpression(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), multiLine));
|
|
var expressions = ts.reduceLeft(properties, reduceProperty, [], numInitialProperties);
|
|
expressions.push(multiLine ? ts.startOnNewLine(ts.setParent(ts.setTextRange(factory.cloneNode(temp), temp), temp.parent)) : temp);
|
|
return factory.inlineExpressions(expressions);
|
|
function reduceProperty(expressions, property) {
|
|
if (containsYield(property) && expressions.length > 0) {
|
|
emitStatement(factory.createExpressionStatement(factory.inlineExpressions(expressions)));
|
|
expressions = [];
|
|
}
|
|
var expression = ts.createExpressionForObjectLiteralElementLike(factory, 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)) {
|
|
return factory.updateElementAccessExpression(node, cacheExpression(ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression)), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitCallExpression(node) {
|
|
if (!ts.isImportCall(node) && ts.forEach(node.arguments, containsYield)) {
|
|
var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion, true), target = _a.target, thisArg = _a.thisArg;
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createFunctionApplyCall(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 = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createNewExpression(factory.createFunctionApplyCall(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments, factory.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 235:
|
|
return transformAndEmitBlock(node);
|
|
case 238:
|
|
return transformAndEmitExpressionStatement(node);
|
|
case 239:
|
|
return transformAndEmitIfStatement(node);
|
|
case 240:
|
|
return transformAndEmitDoStatement(node);
|
|
case 241:
|
|
return transformAndEmitWhileStatement(node);
|
|
case 242:
|
|
return transformAndEmitForStatement(node);
|
|
case 243:
|
|
return transformAndEmitForInStatement(node);
|
|
case 245:
|
|
return transformAndEmitContinueStatement(node);
|
|
case 246:
|
|
return transformAndEmitBreakStatement(node);
|
|
case 247:
|
|
return transformAndEmitReturnStatement(node);
|
|
case 248:
|
|
return transformAndEmitWithStatement(node);
|
|
case 249:
|
|
return transformAndEmitSwitchStatement(node);
|
|
case 250:
|
|
return transformAndEmitLabeledStatement(node);
|
|
case 251:
|
|
return transformAndEmitThrowStatement(node);
|
|
case 252:
|
|
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 = factory.cloneNode(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(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
|
|
variablesWritten += pendingExpressions.length;
|
|
pendingExpressions = [];
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function transformInitializedVariable(node) {
|
|
return ts.setSourceMapRange(factory.createAssignment(ts.setSourceMapRange(factory.cloneNode(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(factory.createExpressionStatement(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(factory.createExpressionStatement(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 = factory.updateForStatement(node, variables.length > 0
|
|
? factory.inlineExpressions(ts.map(variables, transformInitializedVariable))
|
|
: undefined, ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
|
|
}
|
|
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 = factory.createLoopVariable();
|
|
var initializer = node.initializer;
|
|
hoistVariableDeclaration(keysIndex);
|
|
emitAssignment(keysArray, factory.createArrayLiteralExpression());
|
|
emitStatement(factory.createForInStatement(key, ts.visitNode(node.expression, visitor, ts.isExpression), factory.createExpressionStatement(factory.createCallExpression(factory.createPropertyAccessExpression(keysArray, "push"), undefined, [key]))));
|
|
emitAssignment(keysIndex, factory.createNumericLiteral(0));
|
|
var conditionLabel = defineLabel();
|
|
var incrementLabel = defineLabel();
|
|
var endLabel = beginLoopBlock(incrementLabel);
|
|
markLabel(conditionLabel);
|
|
emitBreakWhenFalse(endLabel, factory.createLessThan(keysIndex, factory.createPropertyAccessExpression(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 = factory.cloneNode(initializer.declarations[0].name);
|
|
}
|
|
else {
|
|
variable = ts.visitNode(initializer, visitor, ts.isExpression);
|
|
ts.Debug.assert(ts.isLeftHandSideExpression(variable));
|
|
}
|
|
emitAssignment(variable, factory.createElementAccessExpression(keysArray, keysIndex));
|
|
transformAndEmitEmbeddedStatement(node.statement);
|
|
markLabel(incrementLabel);
|
|
emitStatement(factory.createExpressionStatement(factory.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 = factory.updateForInStatement(node, initializer.declarations[0].name, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, factory.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 === 290 && 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 === 289) {
|
|
if (containsYield(clause.expression) && pendingClauses.length > 0) {
|
|
break;
|
|
}
|
|
pendingClauses.push(factory.createCaseClause(ts.visitNode(clause.expression, visitor, ts.isExpression), [
|
|
createInlineBreak(clauseLabels[i], clause.expression)
|
|
]));
|
|
}
|
|
else {
|
|
defaultClausesSkipped++;
|
|
}
|
|
}
|
|
if (pendingClauses.length) {
|
|
emitStatement(factory.createSwitchStatement(expression, factory.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) {
|
|
var _a;
|
|
emitThrow(ts.visitNode((_a = node.expression) !== null && _a !== void 0 ? _a : factory.createVoidZero(), 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 & 1048576) !== 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.setParent(ts.setTextRange(factory.cloneNode(name), name), name.parent);
|
|
ts.setSourceMapRange(clone_6, node);
|
|
ts.setCommentRange(clone_6, node);
|
|
return clone_6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function cacheExpression(node) {
|
|
if (ts.isGeneratedIdentifier(node) || ts.getEmitFlags(node) & 4096) {
|
|
return node;
|
|
}
|
|
var temp = factory.createTempVariable(hoistVariableDeclaration);
|
|
emitAssignment(temp, node, node);
|
|
return temp;
|
|
}
|
|
function declareLocal(name) {
|
|
var temp = name
|
|
? factory.createUniqueName(name)
|
|
: factory.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 = new ts.Map();
|
|
renamedCatchVariableDeclarations = [];
|
|
context.enableSubstitution(79);
|
|
}
|
|
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, factory.createCallExpression(factory.createPropertyAccessExpression(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 = factory.createNumericLiteral(-1);
|
|
if (labelExpressions[label] === undefined) {
|
|
labelExpressions[label] = [expression];
|
|
}
|
|
else {
|
|
labelExpressions[label].push(expression);
|
|
}
|
|
return expression;
|
|
}
|
|
return factory.createOmittedExpression();
|
|
}
|
|
function createInstruction(instruction) {
|
|
var literal = factory.createNumericLiteral(instruction);
|
|
ts.addSyntheticTrailingComment(literal, 3, getInstructionName(instruction));
|
|
return literal;
|
|
}
|
|
function createInlineBreak(label, location) {
|
|
ts.Debug.assertLessThan(0, label, "Invalid label");
|
|
return ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(3),
|
|
createLabel(label)
|
|
])), location);
|
|
}
|
|
function createInlineReturn(expression, location) {
|
|
return ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression(expression
|
|
? [createInstruction(2), expression]
|
|
: [createInstruction(2)])), location);
|
|
}
|
|
function createGeneratorResume(location) {
|
|
return ts.setTextRange(factory.createCallExpression(factory.createPropertyAccessExpression(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 emitHelpers().createGeneratorHelper(ts.setEmitFlags(factory.createFunctionExpression(undefined, undefined, undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, state)], undefined, factory.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 = factory.createPropertyAccessExpression(state, "label");
|
|
var switchStatement = factory.createSwitchStatement(labelExpression, factory.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 = [factory.createWithStatement(withBlock.expression, factory.createBlock(statements))];
|
|
}
|
|
}
|
|
if (currentExceptionBlock) {
|
|
var startLabel = currentExceptionBlock.startLabel, catchLabel = currentExceptionBlock.catchLabel, finallyLabel = currentExceptionBlock.finallyLabel, endLabel = currentExceptionBlock.endLabel;
|
|
statements.unshift(factory.createExpressionStatement(factory.createCallExpression(factory.createPropertyAccessExpression(factory.createPropertyAccessExpression(state, "trys"), "push"), undefined, [
|
|
factory.createArrayLiteralExpression([
|
|
createLabel(startLabel),
|
|
createLabel(catchLabel),
|
|
createLabel(finallyLabel),
|
|
createLabel(endLabel)
|
|
])
|
|
])));
|
|
currentExceptionBlock = undefined;
|
|
}
|
|
if (markLabelEnd) {
|
|
statements.push(factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(state, "label"), factory.createNumericLiteral(labelNumber + 1))));
|
|
}
|
|
}
|
|
clauses.push(factory.createCaseClause(factory.createNumericLiteral(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(factory.createExpressionStatement(factory.createAssignment(left, right)), operationLocation));
|
|
}
|
|
function writeThrow(expression, operationLocation) {
|
|
lastOperationWasAbrupt = true;
|
|
lastOperationWasCompletion = true;
|
|
writeStatement(ts.setTextRange(factory.createThrowStatement(expression), operationLocation));
|
|
}
|
|
function writeReturn(expression, operationLocation) {
|
|
lastOperationWasAbrupt = true;
|
|
lastOperationWasCompletion = true;
|
|
writeStatement(ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression(expression
|
|
? [createInstruction(2), expression]
|
|
: [createInstruction(2)])), operationLocation), 384));
|
|
}
|
|
function writeBreak(label, operationLocation) {
|
|
lastOperationWasAbrupt = true;
|
|
writeStatement(ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(3),
|
|
createLabel(label)
|
|
])), operationLocation), 384));
|
|
}
|
|
function writeBreakWhenTrue(label, condition, operationLocation) {
|
|
writeStatement(ts.setEmitFlags(factory.createIfStatement(condition, ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(3),
|
|
createLabel(label)
|
|
])), operationLocation), 384)), 1));
|
|
}
|
|
function writeBreakWhenFalse(label, condition, operationLocation) {
|
|
writeStatement(ts.setEmitFlags(factory.createIfStatement(factory.createLogicalNot(condition), ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(3),
|
|
createLabel(label)
|
|
])), operationLocation), 384)), 1));
|
|
}
|
|
function writeYield(expression, operationLocation) {
|
|
lastOperationWasAbrupt = true;
|
|
writeStatement(ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression(expression
|
|
? [createInstruction(4), expression]
|
|
: [createInstruction(4)])), operationLocation), 384));
|
|
}
|
|
function writeYieldStar(expression, operationLocation) {
|
|
lastOperationWasAbrupt = true;
|
|
writeStatement(ts.setEmitFlags(ts.setTextRange(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(5),
|
|
expression
|
|
])), operationLocation), 384));
|
|
}
|
|
function writeEndfinally() {
|
|
lastOperationWasAbrupt = true;
|
|
writeStatement(factory.createReturnStatement(factory.createArrayLiteralExpression([
|
|
createInstruction(7)
|
|
])));
|
|
}
|
|
}
|
|
ts.transformGenerators = transformGenerators;
|
|
})(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 factory = context.factory, emitHelpers = context.getEmitHelperFactory, 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(208);
|
|
context.enableSubstitution(210);
|
|
context.enableSubstitution(79);
|
|
context.enableSubstitution(221);
|
|
context.enableSubstitution(297);
|
|
context.enableEmitNotification(305);
|
|
var moduleInfoMap = [];
|
|
var deferredExports = [];
|
|
var currentSourceFile;
|
|
var currentModuleInfo;
|
|
var noSubstitution = [];
|
|
var needUMDDynamicImportHelper;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile ||
|
|
!(ts.isEffectiveExternalModule(node, compilerOptions) ||
|
|
node.transformFlags & 8388608 ||
|
|
(ts.isJsonSourceFile(node) && ts.hasJsonModuleEmitEnabled(compilerOptions) && ts.outFile(compilerOptions)))) {
|
|
return node;
|
|
}
|
|
currentSourceFile = node;
|
|
currentModuleInfo = ts.collectExternalModuleInfo(context, node, resolver, compilerOptions);
|
|
moduleInfoMap[ts.getOriginalNodeId(node)] = currentModuleInfo;
|
|
var transformModule = getTransformModuleDelegate(moduleKind);
|
|
var updated = transformModule(node);
|
|
currentSourceFile = undefined;
|
|
currentModuleInfo = undefined;
|
|
needUMDDynamicImportHelper = false;
|
|
return 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 = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
|
|
if (shouldEmitUnderscoreUnderscoreESModule()) {
|
|
ts.append(statements, createUnderscoreUnderscoreESModule());
|
|
}
|
|
if (ts.length(currentModuleInfo.exportedNames)) {
|
|
var chunkSize = 50;
|
|
for (var i = 0; i < currentModuleInfo.exportedNames.length; i += chunkSize) {
|
|
ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
|
|
}
|
|
}
|
|
ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
|
|
ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
|
|
addExportEqualsIfNeeded(statements, false);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
|
|
ts.addEmitHelpers(updated, context.readEmitHelpers());
|
|
return updated;
|
|
}
|
|
function transformAMDModule(node) {
|
|
var define = factory.createIdentifier("define");
|
|
var moduleName = ts.tryGetModuleNameFromFile(factory, node, host, compilerOptions);
|
|
var jsonSourceFile = ts.isJsonSourceFile(node) && node;
|
|
var _a = collectAsynchronousDependencies(node, true), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames;
|
|
var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
|
|
factory.createExpressionStatement(factory.createCallExpression(define, undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
|
|
factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
|
|
factory.createStringLiteral("require"),
|
|
factory.createStringLiteral("exports")
|
|
], aliasedModuleNames, true), unaliasedModuleNames, true)),
|
|
jsonSourceFile ?
|
|
jsonSourceFile.statements.length ? jsonSourceFile.statements[0].expression : factory.createObjectLiteralExpression() :
|
|
factory.createFunctionExpression(undefined, undefined, undefined, undefined, __spreadArray([
|
|
factory.createParameterDeclaration(undefined, undefined, "require"),
|
|
factory.createParameterDeclaration(undefined, undefined, "exports")
|
|
], importAliasNames, true), undefined, transformAsynchronousModuleBody(node))
|
|
], false)))
|
|
]), 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(factory, node, host, compilerOptions);
|
|
var umdHeader = factory.createFunctionExpression(undefined, undefined, undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, "factory")], undefined, ts.setTextRange(factory.createBlock([
|
|
factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("module"), "object"), factory.createTypeCheck(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), "object")), factory.createBlock([
|
|
factory.createVariableStatement(undefined, [
|
|
factory.createVariableDeclaration("v", undefined, undefined, factory.createCallExpression(factory.createIdentifier("factory"), undefined, [
|
|
factory.createIdentifier("require"),
|
|
factory.createIdentifier("exports")
|
|
]))
|
|
]),
|
|
ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1)
|
|
]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
|
|
factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
|
|
factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
|
|
factory.createStringLiteral("require"),
|
|
factory.createStringLiteral("exports")
|
|
], aliasedModuleNames, true), unaliasedModuleNames, true)),
|
|
factory.createIdentifier("factory")
|
|
], false)))
|
|
])))
|
|
], true), undefined));
|
|
var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
|
|
factory.createExpressionStatement(factory.createCallExpression(umdHeader, undefined, [
|
|
factory.createFunctionExpression(undefined, undefined, undefined, undefined, __spreadArray([
|
|
factory.createParameterDeclaration(undefined, undefined, "require"),
|
|
factory.createParameterDeclaration(undefined, undefined, "exports")
|
|
], importAliasNames, true), 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(factory.createStringLiteral(amdDependency.path));
|
|
importAliasNames.push(factory.createParameterDeclaration(undefined, undefined, amdDependency.name));
|
|
}
|
|
else {
|
|
unaliasedModuleNames.push(factory.createStringLiteral(amdDependency.path));
|
|
}
|
|
}
|
|
for (var _b = 0, _c = currentModuleInfo.externalImports; _b < _c.length; _b++) {
|
|
var importNode = _c[_b];
|
|
var externalModuleName = ts.getExternalModuleNameLiteral(factory, importNode, currentSourceFile, host, resolver, compilerOptions);
|
|
var importAliasName = ts.getLocalNameForExternalImport(factory, importNode, currentSourceFile);
|
|
if (externalModuleName) {
|
|
if (includeNonAmdDependencies && importAliasName) {
|
|
ts.setEmitFlags(importAliasName, 4);
|
|
aliasedModuleNames.push(externalModuleName);
|
|
importAliasNames.push(factory.createParameterDeclaration(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(factory, node, currentSourceFile, host, resolver, compilerOptions)) {
|
|
return undefined;
|
|
}
|
|
var name = ts.getLocalNameForExternalImport(factory, node, currentSourceFile);
|
|
var expr = getHelperExpressionForImport(node, name);
|
|
if (expr === name) {
|
|
return undefined;
|
|
}
|
|
return factory.createExpressionStatement(factory.createAssignment(name, expr));
|
|
}
|
|
function transformAsynchronousModuleBody(node) {
|
|
startLexicalEnvironment();
|
|
var statements = [];
|
|
var statementOffset = factory.copyPrologue(node.statements, statements, !compilerOptions.noImplicitUseStrict, topLevelVisitor);
|
|
if (shouldEmitUnderscoreUnderscoreESModule()) {
|
|
ts.append(statements, createUnderscoreUnderscoreESModule());
|
|
}
|
|
if (ts.length(currentModuleInfo.exportedNames)) {
|
|
ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
|
|
}
|
|
ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
|
|
if (moduleKind === ts.ModuleKind.AMD) {
|
|
ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
|
|
}
|
|
ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
|
|
addExportEqualsIfNeeded(statements, true);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var body = factory.createBlock(statements, true);
|
|
if (needUMDDynamicImportHelper) {
|
|
ts.addEmitHelper(body, dynamicImportUMDHelper);
|
|
}
|
|
return body;
|
|
}
|
|
function addExportEqualsIfNeeded(statements, emitAsReturn) {
|
|
if (currentModuleInfo.exportEquals) {
|
|
var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
|
|
if (expressionResult) {
|
|
if (emitAsReturn) {
|
|
var statement = factory.createReturnStatement(expressionResult);
|
|
ts.setTextRange(statement, currentModuleInfo.exportEquals);
|
|
ts.setEmitFlags(statement, 384 | 1536);
|
|
statements.push(statement);
|
|
}
|
|
else {
|
|
var statement = factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), expressionResult));
|
|
ts.setTextRange(statement, currentModuleInfo.exportEquals);
|
|
ts.setEmitFlags(statement, 1536);
|
|
statements.push(statement);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function topLevelVisitor(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
return visitImportDeclaration(node);
|
|
case 265:
|
|
return visitImportEqualsDeclaration(node);
|
|
case 272:
|
|
return visitExportDeclaration(node);
|
|
case 271:
|
|
return visitExportAssignment(node);
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 257:
|
|
return visitClassDeclaration(node);
|
|
case 352:
|
|
return visitMergeDeclarationMarker(node);
|
|
case 353:
|
|
return visitEndOfDeclarationMarker(node);
|
|
default:
|
|
return visitor(node);
|
|
}
|
|
}
|
|
function visitorWorker(node, valueIsDiscarded) {
|
|
if (!(node.transformFlags & (8388608 | 4096 | 268435456))) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 242:
|
|
return visitForStatement(node);
|
|
case 238:
|
|
return visitExpressionStatement(node);
|
|
case 212:
|
|
return visitParenthesizedExpression(node, valueIsDiscarded);
|
|
case 350:
|
|
return visitPartiallyEmittedExpression(node, valueIsDiscarded);
|
|
case 208:
|
|
if (ts.isImportCall(node) && currentSourceFile.impliedNodeFormat === undefined) {
|
|
return visitImportCallExpression(node);
|
|
}
|
|
break;
|
|
case 221:
|
|
if (ts.isDestructuringAssignment(node)) {
|
|
return visitDestructuringAssignment(node, valueIsDiscarded);
|
|
}
|
|
break;
|
|
case 219:
|
|
case 220:
|
|
return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
return visitorWorker(node, false);
|
|
}
|
|
function discardedValueVisitor(node) {
|
|
return visitorWorker(node, true);
|
|
}
|
|
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 296:
|
|
if (destructuringNeedsFlattening(elem.initializer)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 297:
|
|
if (destructuringNeedsFlattening(elem.name)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 298:
|
|
if (destructuringNeedsFlattening(elem.expression)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
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, valueIsDiscarded) {
|
|
if (destructuringNeedsFlattening(node.left)) {
|
|
return ts.flattenDestructuringAssignment(node, visitor, context, 0, !valueIsDiscarded, createAllExportExpressions);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitForStatement(node) {
|
|
return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
|
|
}
|
|
function visitExpressionStatement(node) {
|
|
return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
|
|
}
|
|
function visitParenthesizedExpression(node, valueIsDiscarded) {
|
|
return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
|
|
}
|
|
function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
|
|
return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
|
|
}
|
|
function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
|
|
if ((node.operator === 45 || node.operator === 46)
|
|
&& ts.isIdentifier(node.operand)
|
|
&& !ts.isGeneratedIdentifier(node.operand)
|
|
&& !ts.isLocalName(node.operand)
|
|
&& !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
|
|
var exportedNames = getExports(node.operand);
|
|
if (exportedNames) {
|
|
var temp = void 0;
|
|
var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
|
|
if (ts.isPrefixUnaryExpression(node)) {
|
|
expression = factory.updatePrefixUnaryExpression(node, expression);
|
|
}
|
|
else {
|
|
expression = factory.updatePostfixUnaryExpression(node, expression);
|
|
if (!valueIsDiscarded) {
|
|
temp = factory.createTempVariable(hoistVariableDeclaration);
|
|
expression = factory.createAssignment(temp, expression);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
expression = factory.createComma(expression, factory.cloneNode(node.operand));
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
|
|
var exportName = exportedNames_1[_i];
|
|
noSubstitution[ts.getNodeId(expression)] = true;
|
|
expression = createExportExpression(exportName, expression);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
if (temp) {
|
|
noSubstitution[ts.getNodeId(expression)] = true;
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitImportCallExpression(node) {
|
|
var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
|
|
var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
|
|
var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
|
|
var containsLexicalThis = !!(node.transformFlags & 16384);
|
|
switch (compilerOptions.module) {
|
|
case ts.ModuleKind.AMD:
|
|
return createImportCallExpressionAMD(argument, containsLexicalThis);
|
|
case ts.ModuleKind.UMD:
|
|
return createImportCallExpressionUMD(argument !== null && argument !== void 0 ? argument : factory.createVoidZero(), 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) ? factory.createStringLiteralFromNode(arg) : ts.setEmitFlags(ts.setTextRange(factory.cloneNode(arg), arg), 1536);
|
|
return factory.createConditionalExpression(factory.createIdentifier("__syncRequire"), undefined, createImportCallExpressionCommonJS(arg, containsLexicalThis), undefined, createImportCallExpressionAMD(argClone, containsLexicalThis));
|
|
}
|
|
else {
|
|
var temp = factory.createTempVariable(hoistVariableDeclaration);
|
|
return factory.createComma(factory.createAssignment(temp, arg), factory.createConditionalExpression(factory.createIdentifier("__syncRequire"), undefined, createImportCallExpressionCommonJS(temp, containsLexicalThis), undefined, createImportCallExpressionAMD(temp, containsLexicalThis)));
|
|
}
|
|
}
|
|
function createImportCallExpressionAMD(arg, containsLexicalThis) {
|
|
var resolve = factory.createUniqueName("resolve");
|
|
var reject = factory.createUniqueName("reject");
|
|
var parameters = [
|
|
factory.createParameterDeclaration(undefined, undefined, resolve),
|
|
factory.createParameterDeclaration(undefined, undefined, reject)
|
|
];
|
|
var body = factory.createBlock([
|
|
factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("require"), undefined, [factory.createArrayLiteralExpression([arg || factory.createOmittedExpression()]), resolve, reject]))
|
|
]);
|
|
var func;
|
|
if (languageVersion >= 2) {
|
|
func = factory.createArrowFunction(undefined, undefined, parameters, undefined, undefined, body);
|
|
}
|
|
else {
|
|
func = factory.createFunctionExpression(undefined, undefined, undefined, undefined, parameters, undefined, body);
|
|
if (containsLexicalThis) {
|
|
ts.setEmitFlags(func, 8);
|
|
}
|
|
}
|
|
var promise = factory.createNewExpression(factory.createIdentifier("Promise"), undefined, [func]);
|
|
if (ts.getESModuleInterop(compilerOptions)) {
|
|
return factory.createCallExpression(factory.createPropertyAccessExpression(promise, factory.createIdentifier("then")), undefined, [emitHelpers().createImportStarCallbackHelper()]);
|
|
}
|
|
return promise;
|
|
}
|
|
function createImportCallExpressionCommonJS(arg, containsLexicalThis) {
|
|
var promiseResolveCall = factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Promise"), "resolve"), undefined, []);
|
|
var requireCall = factory.createCallExpression(factory.createIdentifier("require"), undefined, arg ? [arg] : []);
|
|
if (ts.getESModuleInterop(compilerOptions)) {
|
|
requireCall = emitHelpers().createImportStarHelper(requireCall);
|
|
}
|
|
var func;
|
|
if (languageVersion >= 2) {
|
|
func = factory.createArrowFunction(undefined, undefined, [], undefined, undefined, requireCall);
|
|
}
|
|
else {
|
|
func = factory.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(requireCall)]));
|
|
if (containsLexicalThis) {
|
|
ts.setEmitFlags(func, 8);
|
|
}
|
|
}
|
|
return factory.createCallExpression(factory.createPropertyAccessExpression(promiseResolveCall, "then"), undefined, [func]);
|
|
}
|
|
function getHelperExpressionForExport(node, innerExpr) {
|
|
if (!ts.getESModuleInterop(compilerOptions) || ts.getEmitFlags(node) & 67108864) {
|
|
return innerExpr;
|
|
}
|
|
if (ts.getExportNeedsImportStarHelper(node)) {
|
|
return emitHelpers().createImportStarHelper(innerExpr);
|
|
}
|
|
return innerExpr;
|
|
}
|
|
function getHelperExpressionForImport(node, innerExpr) {
|
|
if (!ts.getESModuleInterop(compilerOptions) || ts.getEmitFlags(node) & 67108864) {
|
|
return innerExpr;
|
|
}
|
|
if (ts.getImportNeedsImportStarHelper(node)) {
|
|
return emitHelpers().createImportStarHelper(innerExpr);
|
|
}
|
|
if (ts.getImportNeedsImportDefaultHelper(node)) {
|
|
return emitHelpers().createImportDefaultHelper(innerExpr);
|
|
}
|
|
return innerExpr;
|
|
}
|
|
function visitImportDeclaration(node) {
|
|
var statements;
|
|
var namespaceDeclaration = ts.getNamespaceDeclarationNode(node);
|
|
if (moduleKind !== ts.ModuleKind.AMD) {
|
|
if (!node.importClause) {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(createRequireCall(node)), node), node);
|
|
}
|
|
else {
|
|
var variables = [];
|
|
if (namespaceDeclaration && !ts.isDefaultImport(node)) {
|
|
variables.push(factory.createVariableDeclaration(factory.cloneNode(namespaceDeclaration.name), undefined, undefined, getHelperExpressionForImport(node, createRequireCall(node))));
|
|
}
|
|
else {
|
|
variables.push(factory.createVariableDeclaration(factory.getGeneratedNameForNode(node), undefined, undefined, getHelperExpressionForImport(node, createRequireCall(node))));
|
|
if (namespaceDeclaration && ts.isDefaultImport(node)) {
|
|
variables.push(factory.createVariableDeclaration(factory.cloneNode(namespaceDeclaration.name), undefined, undefined, factory.getGeneratedNameForNode(node)));
|
|
}
|
|
}
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(variables, languageVersion >= 2 ? 2 : 0)), node), node));
|
|
}
|
|
}
|
|
else if (namespaceDeclaration && ts.isDefaultImport(node)) {
|
|
statements = ts.append(statements, factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
ts.setOriginalNode(ts.setTextRange(factory.createVariableDeclaration(factory.cloneNode(namespaceDeclaration.name), undefined, undefined, factory.getGeneratedNameForNode(node)), 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(factory, importNode, currentSourceFile, host, resolver, compilerOptions);
|
|
var args = [];
|
|
if (moduleName) {
|
|
args.push(moduleName);
|
|
}
|
|
return factory.createCallExpression(factory.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.hasSyntacticModifier(node, 1)) {
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(createExportExpression(node.name, createRequireCall(node))), node), node));
|
|
}
|
|
else {
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.cloneNode(node.name), undefined, undefined, createRequireCall(node))
|
|
], languageVersion >= 2 ? 2 : 0)), node), node));
|
|
}
|
|
}
|
|
else {
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(createExportExpression(factory.getExportName(node), factory.getLocalName(node))), 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 = factory.getGeneratedNameForNode(node);
|
|
if (node.exportClause && ts.isNamedExports(node.exportClause)) {
|
|
var statements = [];
|
|
if (moduleKind !== ts.ModuleKind.AMD) {
|
|
statements.push(ts.setOriginalNode(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(generatedName, undefined, undefined, createRequireCall(node))
|
|
])), node), node));
|
|
}
|
|
for (var _i = 0, _a = node.exportClause.elements; _i < _a.length; _i++) {
|
|
var specifier = _a[_i];
|
|
if (languageVersion === 0) {
|
|
statements.push(ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(emitHelpers().createCreateBindingHelper(generatedName, factory.createStringLiteralFromNode(specifier.propertyName || specifier.name), specifier.propertyName ? factory.createStringLiteralFromNode(specifier.name) : undefined)), specifier), specifier));
|
|
}
|
|
else {
|
|
var exportNeedsImportDefault = !!ts.getESModuleInterop(compilerOptions) &&
|
|
!(ts.getEmitFlags(node) & 67108864) &&
|
|
ts.idText(specifier.propertyName || specifier.name) === "default";
|
|
var exportedValue = factory.createPropertyAccessExpression(exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName, specifier.propertyName || specifier.name);
|
|
statements.push(ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(createExportExpression(factory.getExportName(specifier), exportedValue, undefined, true)), specifier), specifier));
|
|
}
|
|
}
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
else if (node.exportClause) {
|
|
var statements = [];
|
|
statements.push(ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(createExportExpression(factory.cloneNode(node.exportClause.name), getHelperExpressionForExport(node, moduleKind !== ts.ModuleKind.AMD ?
|
|
createRequireCall(node) :
|
|
ts.isExportNamespaceAsDefaultDeclaration(node) ? generatedName :
|
|
factory.createIdentifier(ts.idText(node.exportClause.name))))), node), node));
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
else {
|
|
return ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(emitHelpers().createExportStarHelper(moduleKind !== ts.ModuleKind.AMD ? createRequireCall(node) : generatedName)), node), 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], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), node, true);
|
|
}
|
|
else {
|
|
statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), node, true);
|
|
}
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
var statements;
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, visitor), undefined, ts.visitEachChild(node.body, visitor, context)), node), node));
|
|
}
|
|
else {
|
|
statements = ts.append(statements, ts.visitEachChild(node, visitor, 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.hasSyntacticModifier(node, 1)) {
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike), factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
|
|
}
|
|
else {
|
|
statements = ts.append(statements, ts.visitEachChild(node, visitor, 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.hasSyntacticModifier(node, 1)) {
|
|
var modifiers = void 0;
|
|
var removeCommentsOnExpressions = false;
|
|
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) {
|
|
if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
|
|
var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
|
|
var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
|
|
variables = ts.append(variables, updatedVariable);
|
|
expressions = ts.append(expressions, expression);
|
|
removeCommentsOnExpressions = true;
|
|
}
|
|
else {
|
|
expressions = ts.append(expressions, transformInitializedVariable(variable));
|
|
}
|
|
}
|
|
}
|
|
if (variables) {
|
|
statements = ts.append(statements, factory.updateVariableStatement(node, modifiers, factory.updateVariableDeclarationList(node.declarationList, variables)));
|
|
}
|
|
if (expressions) {
|
|
var statement = ts.setOriginalNode(ts.setTextRange(factory.createExpressionStatement(factory.inlineExpressions(expressions)), node), node);
|
|
if (removeCommentsOnExpressions) {
|
|
ts.removeAllComments(statement);
|
|
}
|
|
statements = ts.append(statements, statement);
|
|
}
|
|
}
|
|
else {
|
|
statements = ts.append(statements, ts.visitEachChild(node, visitor, 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 : factory.createAssignment(name, value);
|
|
for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
|
|
var exportName = exportedNames_2[_i];
|
|
ts.setEmitFlags(expression, 4);
|
|
expression = createExportExpression(exportName, expression, location);
|
|
}
|
|
return expression;
|
|
}
|
|
return factory.createAssignment(name, value);
|
|
}
|
|
function transformInitializedVariable(node) {
|
|
if (ts.isBindingPattern(node.name)) {
|
|
return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), undefined, context, 0, false, createAllExportExpressions);
|
|
}
|
|
else {
|
|
return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
|
|
}
|
|
}
|
|
function visitMergeDeclarationMarker(node) {
|
|
if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 237) {
|
|
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 268:
|
|
statements = appendExportsOfDeclaration(statements, namedBindings);
|
|
break;
|
|
case 269:
|
|
for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
|
|
var importBinding = _a[_i];
|
|
statements = appendExportsOfDeclaration(statements, importBinding, true);
|
|
}
|
|
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.hasSyntacticModifier(decl, 1)) {
|
|
var exportName = ts.hasSyntacticModifier(decl, 512) ? factory.createIdentifier("default") : factory.getDeclarationName(decl);
|
|
statements = appendExportStatement(statements, exportName, factory.getLocalName(decl), decl);
|
|
}
|
|
if (decl.name) {
|
|
statements = appendExportsOfDeclaration(statements, decl);
|
|
}
|
|
return statements;
|
|
}
|
|
function appendExportsOfDeclaration(statements, decl, liveBinding) {
|
|
var name = factory.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, undefined, liveBinding);
|
|
}
|
|
}
|
|
return statements;
|
|
}
|
|
function appendExportStatement(statements, exportName, expression, location, allowComments, liveBinding) {
|
|
statements = ts.append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding));
|
|
return statements;
|
|
}
|
|
function createUnderscoreUnderscoreESModule() {
|
|
var statement;
|
|
if (languageVersion === 0) {
|
|
statement = factory.createExpressionStatement(createExportExpression(factory.createIdentifier("__esModule"), factory.createTrue()));
|
|
}
|
|
else {
|
|
statement = factory.createExpressionStatement(factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "defineProperty"), undefined, [
|
|
factory.createIdentifier("exports"),
|
|
factory.createStringLiteral("__esModule"),
|
|
factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("value", factory.createTrue())
|
|
])
|
|
]));
|
|
}
|
|
ts.setEmitFlags(statement, 1048576);
|
|
return statement;
|
|
}
|
|
function createExportStatement(name, value, location, allowComments, liveBinding) {
|
|
var statement = ts.setTextRange(factory.createExpressionStatement(createExportExpression(name, value, undefined, liveBinding)), location);
|
|
ts.startOnNewLine(statement);
|
|
if (!allowComments) {
|
|
ts.setEmitFlags(statement, 1536);
|
|
}
|
|
return statement;
|
|
}
|
|
function createExportExpression(name, value, location, liveBinding) {
|
|
return ts.setTextRange(liveBinding && languageVersion !== 0 ? factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("Object"), "defineProperty"), undefined, [
|
|
factory.createIdentifier("exports"),
|
|
factory.createStringLiteralFromNode(name),
|
|
factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("enumerable", factory.createTrue()),
|
|
factory.createPropertyAssignment("get", factory.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, factory.createBlock([factory.createReturnStatement(value)])))
|
|
])
|
|
]) : factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(name)), value), location);
|
|
}
|
|
function modifierVisitor(node) {
|
|
switch (node.kind) {
|
|
case 93:
|
|
case 88:
|
|
return undefined;
|
|
}
|
|
return node;
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
if (node.kind === 305) {
|
|
currentSourceFile = node;
|
|
currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentSourceFile = undefined;
|
|
currentModuleInfo = 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 = factory.createAssignment(exportedOrImportedName, node.objectAssignmentInitializer);
|
|
return ts.setTextRange(factory.createPropertyAssignment(name, initializer), node);
|
|
}
|
|
return ts.setTextRange(factory.createPropertyAssignment(name, exportedOrImportedName), node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
case 208:
|
|
return substituteCallExpression(node);
|
|
case 210:
|
|
return substituteTaggedTemplateExpression(node);
|
|
case 221:
|
|
return substituteBinaryExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteCallExpression(node) {
|
|
if (ts.isIdentifier(node.expression)) {
|
|
var expression = substituteExpressionIdentifier(node.expression);
|
|
noSubstitution[ts.getNodeId(expression)] = true;
|
|
if (!ts.isIdentifier(expression) && !(ts.getEmitFlags(node.expression) & 4096)) {
|
|
return ts.addEmitFlags(factory.updateCallExpression(node, expression, undefined, node.arguments), 536870912);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteTaggedTemplateExpression(node) {
|
|
if (ts.isIdentifier(node.tag)) {
|
|
var tag = substituteExpressionIdentifier(node.tag);
|
|
noSubstitution[ts.getNodeId(tag)] = true;
|
|
if (!ts.isIdentifier(tag) && !(ts.getEmitFlags(node.tag) & 4096)) {
|
|
return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, undefined, node.template), 536870912);
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpressionIdentifier(node) {
|
|
var _a, _b;
|
|
if (ts.getEmitFlags(node) & 4096) {
|
|
var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
|
|
if (externalHelpersModuleName) {
|
|
return factory.createPropertyAccessExpression(externalHelpersModuleName, node);
|
|
}
|
|
return node;
|
|
}
|
|
else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64)) && !ts.isLocalName(node)) {
|
|
var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
|
|
if (exportContainer && exportContainer.kind === 305) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), node);
|
|
}
|
|
var importDeclaration = resolver.getReferencedImportDeclaration(node);
|
|
if (importDeclaration) {
|
|
if (ts.isImportClause(importDeclaration)) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(importDeclaration.parent), factory.createIdentifier("default")), node);
|
|
}
|
|
else if (ts.isImportSpecifier(importDeclaration)) {
|
|
var name = importDeclaration.propertyName || importDeclaration.name;
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.parent) || importDeclaration), factory.cloneNode(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_3 = exportedNames; _i < exportedNames_3.length; _i++) {
|
|
var exportName = exportedNames_3[_i];
|
|
noSubstitution[ts.getNodeId(expression)] = true;
|
|
expression = createExportExpression(exportName, expression, node);
|
|
}
|
|
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 dynamicImportUMDHelper = {
|
|
name: "typescript:dynamicimport-sync-require",
|
|
scoped: true,
|
|
text: "\n var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";"
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformSystemModule(context) {
|
|
var factory = context.factory, 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(79);
|
|
context.enableSubstitution(297);
|
|
context.enableSubstitution(221);
|
|
context.enableSubstitution(231);
|
|
context.enableEmitNotification(305);
|
|
var moduleInfoMap = [];
|
|
var deferredExports = [];
|
|
var exportFunctionsMap = [];
|
|
var noSubstitutionMap = [];
|
|
var contextObjectMap = [];
|
|
var currentSourceFile;
|
|
var moduleInfo;
|
|
var exportFunction;
|
|
var contextObject;
|
|
var hoistedStatements;
|
|
var enclosingBlockScopedContainer;
|
|
var noSubstitution;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 8388608)) {
|
|
return node;
|
|
}
|
|
var id = ts.getOriginalNodeId(node);
|
|
currentSourceFile = node;
|
|
enclosingBlockScopedContainer = node;
|
|
moduleInfo = moduleInfoMap[id] = ts.collectExternalModuleInfo(context, node, resolver, compilerOptions);
|
|
exportFunction = factory.createUniqueName("exports");
|
|
exportFunctionsMap[id] = exportFunction;
|
|
contextObject = contextObjectMap[id] = factory.createUniqueName("context");
|
|
var dependencyGroups = collectDependencyGroups(moduleInfo.externalImports);
|
|
var moduleBodyBlock = createSystemModuleBody(node, dependencyGroups);
|
|
var moduleBodyFunction = factory.createFunctionExpression(undefined, undefined, undefined, undefined, [
|
|
factory.createParameterDeclaration(undefined, undefined, exportFunction),
|
|
factory.createParameterDeclaration(undefined, undefined, contextObject)
|
|
], undefined, moduleBodyBlock);
|
|
var moduleName = ts.tryGetModuleNameFromFile(factory, node, host, compilerOptions);
|
|
var dependencies = factory.createArrayLiteralExpression(ts.map(dependencyGroups, function (dependencyGroup) { return dependencyGroup.name; }));
|
|
var updated = ts.setEmitFlags(factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
|
|
factory.createExpressionStatement(factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier("System"), "register"), undefined, moduleName
|
|
? [moduleName, dependencies, moduleBodyFunction]
|
|
: [dependencies, moduleBodyFunction]))
|
|
]), node.statements)), 1024);
|
|
if (!ts.outFile(compilerOptions)) {
|
|
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 updated;
|
|
}
|
|
function collectDependencyGroups(externalImports) {
|
|
var groupIndices = new ts.Map();
|
|
var dependencyGroups = [];
|
|
for (var _i = 0, externalImports_1 = externalImports; _i < externalImports_1.length; _i++) {
|
|
var externalImport = externalImports_1[_i];
|
|
var externalModuleName = ts.getExternalModuleNameLiteral(factory, 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 = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
|
|
statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration("__moduleName", undefined, undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
|
|
])));
|
|
ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
|
|
var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
|
|
ts.addRange(statements, hoistedStatements);
|
|
ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
|
|
var exportStarFunction = addExportStarIfNeeded(statements);
|
|
var modifiers = node.transformFlags & 2097152 ?
|
|
factory.createModifiersFromModifierFlags(256) :
|
|
undefined;
|
|
var moduleObject = factory.createObjectLiteralExpression([
|
|
factory.createPropertyAssignment("setters", createSettersArray(exportStarFunction, dependencyGroups)),
|
|
factory.createPropertyAssignment("execute", factory.createFunctionExpression(modifiers, undefined, undefined, undefined, [], undefined, factory.createBlock(executeStatements, true)))
|
|
], true);
|
|
statements.push(factory.createReturnStatement(moduleObject));
|
|
return factory.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 === 272 && 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(factory.createPropertyAssignment(factory.createStringLiteralFromNode(exportedLocalName), factory.createTrue()));
|
|
}
|
|
}
|
|
var exportedNamesStorageRef = factory.createUniqueName("exportedNames");
|
|
statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(exportedNamesStorageRef, undefined, undefined, factory.createObjectLiteralExpression(exportedNames, true))
|
|
])));
|
|
var exportStarFunction = createExportStarFunction(exportedNamesStorageRef);
|
|
statements.push(exportStarFunction);
|
|
return exportStarFunction.name;
|
|
}
|
|
function createExportStarFunction(localNames) {
|
|
var exportStarFunction = factory.createUniqueName("exportStar");
|
|
var m = factory.createIdentifier("m");
|
|
var n = factory.createIdentifier("n");
|
|
var exports = factory.createIdentifier("exports");
|
|
var condition = factory.createStrictInequality(n, factory.createStringLiteral("default"));
|
|
if (localNames) {
|
|
condition = factory.createLogicalAnd(condition, factory.createLogicalNot(factory.createCallExpression(factory.createPropertyAccessExpression(localNames, "hasOwnProperty"), undefined, [n])));
|
|
}
|
|
return factory.createFunctionDeclaration(undefined, undefined, exportStarFunction, undefined, [factory.createParameterDeclaration(undefined, undefined, m)], undefined, factory.createBlock([
|
|
factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(exports, undefined, undefined, factory.createObjectLiteralExpression([]))
|
|
])),
|
|
factory.createForInStatement(factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(n)
|
|
]), m, factory.createBlock([
|
|
ts.setEmitFlags(factory.createIfStatement(condition, factory.createExpressionStatement(factory.createAssignment(factory.createElementAccessExpression(exports, n), factory.createElementAccessExpression(m, n)))), 1)
|
|
])),
|
|
factory.createExpressionStatement(factory.createCallExpression(exportFunction, undefined, [exports]))
|
|
], true));
|
|
}
|
|
function createSettersArray(exportStarFunction, dependencyGroups) {
|
|
var setters = [];
|
|
for (var _i = 0, dependencyGroups_1 = dependencyGroups; _i < dependencyGroups_1.length; _i++) {
|
|
var group_2 = dependencyGroups_1[_i];
|
|
var localName = ts.forEach(group_2.externalImports, function (i) { return ts.getLocalNameForExternalImport(factory, i, currentSourceFile); });
|
|
var parameterName = localName ? factory.getGeneratedNameForNode(localName) : factory.createUniqueName("");
|
|
var statements = [];
|
|
for (var _a = 0, _b = group_2.externalImports; _a < _b.length; _a++) {
|
|
var entry = _b[_a];
|
|
var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile);
|
|
switch (entry.kind) {
|
|
case 266:
|
|
if (!entry.importClause) {
|
|
break;
|
|
}
|
|
case 265:
|
|
ts.Debug.assert(importVariableName !== undefined);
|
|
statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
|
|
break;
|
|
case 272:
|
|
ts.Debug.assert(importVariableName !== undefined);
|
|
if (entry.exportClause) {
|
|
if (ts.isNamedExports(entry.exportClause)) {
|
|
var properties = [];
|
|
for (var _c = 0, _d = entry.exportClause.elements; _c < _d.length; _c++) {
|
|
var e = _d[_c];
|
|
properties.push(factory.createPropertyAssignment(factory.createStringLiteral(ts.idText(e.name)), factory.createElementAccessExpression(parameterName, factory.createStringLiteral(ts.idText(e.propertyName || e.name)))));
|
|
}
|
|
statements.push(factory.createExpressionStatement(factory.createCallExpression(exportFunction, undefined, [factory.createObjectLiteralExpression(properties, true)])));
|
|
}
|
|
else {
|
|
statements.push(factory.createExpressionStatement(factory.createCallExpression(exportFunction, undefined, [
|
|
factory.createStringLiteral(ts.idText(entry.exportClause.name)),
|
|
parameterName
|
|
])));
|
|
}
|
|
}
|
|
else {
|
|
statements.push(factory.createExpressionStatement(factory.createCallExpression(exportStarFunction, undefined, [parameterName])));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
setters.push(factory.createFunctionExpression(undefined, undefined, undefined, undefined, [factory.createParameterDeclaration(undefined, undefined, parameterName)], undefined, factory.createBlock(statements, true)));
|
|
}
|
|
return factory.createArrayLiteralExpression(setters, true);
|
|
}
|
|
function topLevelVisitor(node) {
|
|
switch (node.kind) {
|
|
case 266:
|
|
return visitImportDeclaration(node);
|
|
case 265:
|
|
return visitImportEqualsDeclaration(node);
|
|
case 272:
|
|
return visitExportDeclaration(node);
|
|
case 271:
|
|
return visitExportAssignment(node);
|
|
default:
|
|
return topLevelNestedVisitor(node);
|
|
}
|
|
}
|
|
function visitImportDeclaration(node) {
|
|
var statements;
|
|
if (node.importClause) {
|
|
hoistVariableDeclaration(ts.getLocalNameForExternalImport(factory, 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 visitExportDeclaration(node) {
|
|
ts.Debug.assertIsDefined(node);
|
|
return undefined;
|
|
}
|
|
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(factory, 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, visitor, ts.isExpression);
|
|
var original = node.original;
|
|
if (original && hasAssociatedEndOfDeclarationMarker(original)) {
|
|
var id = ts.getOriginalNodeId(node);
|
|
deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), expression, true);
|
|
}
|
|
else {
|
|
return createExportStatement(factory.createIdentifier("default"), expression, true);
|
|
}
|
|
}
|
|
function visitFunctionDeclaration(node) {
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
|
|
}
|
|
else {
|
|
hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, 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 = factory.getLocalName(node);
|
|
hoistVariableDeclaration(name);
|
|
statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifierLike), node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, 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, visitor, ts.isStatement);
|
|
}
|
|
var expressions;
|
|
var isExportedDeclaration = ts.hasSyntacticModifier(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(factory.createExpressionStatement(factory.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(factory.cloneNode(node.name));
|
|
}
|
|
}
|
|
function shouldHoistVariableDeclarationList(node) {
|
|
return (ts.getEmitFlags(node) & 2097152) === 0
|
|
&& (enclosingBlockScopedContainer.kind === 305
|
|
|| (ts.getOriginalNode(node).flags & 3) === 0);
|
|
}
|
|
function transformInitializedVariable(node, isExportedDeclaration) {
|
|
var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
|
|
return ts.isBindingPattern(node.name)
|
|
? ts.flattenDestructuringAssignment(node, visitor, context, 0, false, createAssignment)
|
|
: node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, 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(factory.cloneNode(name));
|
|
return isExportedDeclaration
|
|
? createExportExpression(name, preventSubstitution(ts.setTextRange(factory.createAssignment(name, value), location)))
|
|
: preventSubstitution(ts.setTextRange(factory.createAssignment(name, value), location));
|
|
}
|
|
function visitMergeDeclarationMarker(node) {
|
|
if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 237) {
|
|
var id = ts.getOriginalNodeId(node);
|
|
var isExportedDeclaration = ts.hasSyntacticModifier(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 268:
|
|
statements = appendExportsOfDeclaration(statements, namedBindings);
|
|
break;
|
|
case 269:
|
|
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, factory.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.hasSyntacticModifier(decl, 1)) {
|
|
var exportName = ts.hasSyntacticModifier(decl, 512) ? factory.createStringLiteral("default") : decl.name;
|
|
statements = appendExportStatement(statements, exportName, factory.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 = factory.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 = factory.createExpressionStatement(createExportExpression(name, value));
|
|
ts.startOnNewLine(statement);
|
|
if (!allowComments) {
|
|
ts.setEmitFlags(statement, 1536);
|
|
}
|
|
return statement;
|
|
}
|
|
function createExportExpression(name, value) {
|
|
var exportName = ts.isIdentifier(name) ? factory.createStringLiteralFromNode(name) : name;
|
|
ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536);
|
|
return ts.setCommentRange(factory.createCallExpression(exportFunction, undefined, [exportName, value]), value);
|
|
}
|
|
function topLevelNestedVisitor(node) {
|
|
switch (node.kind) {
|
|
case 237:
|
|
return visitVariableStatement(node);
|
|
case 256:
|
|
return visitFunctionDeclaration(node);
|
|
case 257:
|
|
return visitClassDeclaration(node);
|
|
case 242:
|
|
return visitForStatement(node, true);
|
|
case 243:
|
|
return visitForInStatement(node);
|
|
case 244:
|
|
return visitForOfStatement(node);
|
|
case 240:
|
|
return visitDoStatement(node);
|
|
case 241:
|
|
return visitWhileStatement(node);
|
|
case 250:
|
|
return visitLabeledStatement(node);
|
|
case 248:
|
|
return visitWithStatement(node);
|
|
case 249:
|
|
return visitSwitchStatement(node);
|
|
case 263:
|
|
return visitCaseBlock(node);
|
|
case 289:
|
|
return visitCaseClause(node);
|
|
case 290:
|
|
return visitDefaultClause(node);
|
|
case 252:
|
|
return visitTryStatement(node);
|
|
case 292:
|
|
return visitCatchClause(node);
|
|
case 235:
|
|
return visitBlock(node);
|
|
case 352:
|
|
return visitMergeDeclarationMarker(node);
|
|
case 353:
|
|
return visitEndOfDeclarationMarker(node);
|
|
default:
|
|
return visitor(node);
|
|
}
|
|
}
|
|
function visitForStatement(node, isTopLevel) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
|
|
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
|
|
return node;
|
|
}
|
|
function visitForInStatement(node) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
|
|
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
|
|
return node;
|
|
}
|
|
function visitForOfStatement(node) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
|
|
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 ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
|
|
}
|
|
else {
|
|
return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
|
|
}
|
|
}
|
|
function visitDoStatement(node) {
|
|
return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
|
|
}
|
|
function visitWhileStatement(node) {
|
|
return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
|
|
}
|
|
function visitLabeledStatement(node) {
|
|
return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
|
|
}
|
|
function visitWithStatement(node) {
|
|
return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
|
|
}
|
|
function visitSwitchStatement(node) {
|
|
return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
|
|
}
|
|
function visitCaseBlock(node) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
|
|
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
|
|
return node;
|
|
}
|
|
function visitCaseClause(node) {
|
|
return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
|
|
}
|
|
function visitDefaultClause(node) {
|
|
return ts.visitEachChild(node, topLevelNestedVisitor, context);
|
|
}
|
|
function visitTryStatement(node) {
|
|
return ts.visitEachChild(node, topLevelNestedVisitor, context);
|
|
}
|
|
function visitCatchClause(node) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
|
|
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
|
|
return node;
|
|
}
|
|
function visitBlock(node) {
|
|
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
|
|
enclosingBlockScopedContainer = node;
|
|
node = ts.visitEachChild(node, topLevelNestedVisitor, context);
|
|
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
|
|
return node;
|
|
}
|
|
function visitorWorker(node, valueIsDiscarded) {
|
|
if (!(node.transformFlags & (4096 | 8388608 | 268435456))) {
|
|
return node;
|
|
}
|
|
switch (node.kind) {
|
|
case 242:
|
|
return visitForStatement(node, false);
|
|
case 238:
|
|
return visitExpressionStatement(node);
|
|
case 212:
|
|
return visitParenthesizedExpression(node, valueIsDiscarded);
|
|
case 350:
|
|
return visitPartiallyEmittedExpression(node, valueIsDiscarded);
|
|
case 221:
|
|
if (ts.isDestructuringAssignment(node)) {
|
|
return visitDestructuringAssignment(node, valueIsDiscarded);
|
|
}
|
|
break;
|
|
case 208:
|
|
if (ts.isImportCall(node)) {
|
|
return visitImportCallExpression(node);
|
|
}
|
|
break;
|
|
case 219:
|
|
case 220:
|
|
return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function visitor(node) {
|
|
return visitorWorker(node, false);
|
|
}
|
|
function discardedValueVisitor(node) {
|
|
return visitorWorker(node, true);
|
|
}
|
|
function visitExpressionStatement(node) {
|
|
return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
|
|
}
|
|
function visitParenthesizedExpression(node, valueIsDiscarded) {
|
|
return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
|
|
}
|
|
function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
|
|
return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
|
|
}
|
|
function visitImportCallExpression(node) {
|
|
var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
|
|
var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
|
|
var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
|
|
return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), undefined, argument ? [argument] : []);
|
|
}
|
|
function visitDestructuringAssignment(node, valueIsDiscarded) {
|
|
if (hasExportedReferenceInDestructuringTarget(node.left)) {
|
|
return ts.flattenDestructuringAssignment(node, visitor, context, 0, !valueIsDiscarded);
|
|
}
|
|
return ts.visitEachChild(node, visitor, 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 === 305;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
|
|
if ((node.operator === 45 || node.operator === 46)
|
|
&& ts.isIdentifier(node.operand)
|
|
&& !ts.isGeneratedIdentifier(node.operand)
|
|
&& !ts.isLocalName(node.operand)
|
|
&& !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
|
|
var exportedNames = getExports(node.operand);
|
|
if (exportedNames) {
|
|
var temp = void 0;
|
|
var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
|
|
if (ts.isPrefixUnaryExpression(node)) {
|
|
expression = factory.updatePrefixUnaryExpression(node, expression);
|
|
}
|
|
else {
|
|
expression = factory.updatePostfixUnaryExpression(node, expression);
|
|
if (!valueIsDiscarded) {
|
|
temp = factory.createTempVariable(hoistVariableDeclaration);
|
|
expression = factory.createAssignment(temp, expression);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
expression = factory.createComma(expression, factory.cloneNode(node.operand));
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
|
|
var exportName = exportedNames_4[_i];
|
|
expression = createExportExpression(exportName, preventSubstitution(expression));
|
|
}
|
|
if (temp) {
|
|
expression = factory.createComma(expression, temp);
|
|
ts.setTextRange(expression, node);
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
function modifierVisitor(node) {
|
|
switch (node.kind) {
|
|
case 93:
|
|
case 88:
|
|
return undefined;
|
|
}
|
|
return node;
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
if (node.kind === 305) {
|
|
var id = ts.getOriginalNodeId(node);
|
|
currentSourceFile = node;
|
|
moduleInfo = moduleInfoMap[id];
|
|
exportFunction = exportFunctionsMap[id];
|
|
noSubstitution = noSubstitutionMap[id];
|
|
contextObject = contextObjectMap[id];
|
|
if (noSubstitution) {
|
|
delete noSubstitutionMap[id];
|
|
}
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
currentSourceFile = undefined;
|
|
moduleInfo = undefined;
|
|
exportFunction = undefined;
|
|
contextObject = 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 297:
|
|
return substituteShorthandPropertyAssignment(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteShorthandPropertyAssignment(node) {
|
|
var _a, _b;
|
|
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(factory.createPropertyAssignment(factory.cloneNode(name), factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(importDeclaration.parent), factory.createIdentifier("default"))), node);
|
|
}
|
|
else if (ts.isImportSpecifier(importDeclaration)) {
|
|
return ts.setTextRange(factory.createPropertyAssignment(factory.cloneNode(name), factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.parent) || importDeclaration), factory.cloneNode(importDeclaration.propertyName || importDeclaration.name))), node);
|
|
}
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpression(node) {
|
|
switch (node.kind) {
|
|
case 79:
|
|
return substituteExpressionIdentifier(node);
|
|
case 221:
|
|
return substituteBinaryExpression(node);
|
|
case 231:
|
|
return substituteMetaProperty(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteExpressionIdentifier(node) {
|
|
var _a, _b;
|
|
if (ts.getEmitFlags(node) & 4096) {
|
|
var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
|
|
if (externalHelpersModuleName) {
|
|
return factory.createPropertyAccessExpression(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(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(importDeclaration.parent), factory.createIdentifier("default")), node);
|
|
}
|
|
else if (ts.isImportSpecifier(importDeclaration)) {
|
|
return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.parent) || importDeclaration), factory.cloneNode(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_5 = exportedNames; _i < exportedNames_5.length; _i++) {
|
|
var exportName = exportedNames_5[_i];
|
|
expression = createExportExpression(exportName, preventSubstitution(expression));
|
|
}
|
|
return expression;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
function substituteMetaProperty(node) {
|
|
if (ts.isImportMeta(node)) {
|
|
return factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("meta"));
|
|
}
|
|
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 === 305) {
|
|
exportedNames = ts.append(exportedNames, factory.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 transformECMAScriptModule(context) {
|
|
var factory = context.factory, emitHelpers = context.getEmitHelperFactory;
|
|
var host = context.getEmitHost();
|
|
var resolver = context.getEmitResolver();
|
|
var compilerOptions = context.getCompilerOptions();
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var previousOnEmitNode = context.onEmitNode;
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
context.onEmitNode = onEmitNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
context.enableEmitNotification(305);
|
|
context.enableSubstitution(79);
|
|
var helperNameSubstitutions;
|
|
var currentSourceFile;
|
|
var importRequireStatements;
|
|
return ts.chainBundle(context, transformSourceFile);
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
|
|
currentSourceFile = node;
|
|
importRequireStatements = undefined;
|
|
var result = updateExternalModule(node);
|
|
currentSourceFile = undefined;
|
|
if (importRequireStatements) {
|
|
result = factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(ts.insertStatementsAfterCustomPrologue(result.statements.slice(), importRequireStatements)), result.statements));
|
|
}
|
|
if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
|
|
return result;
|
|
}
|
|
return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
|
|
}
|
|
return node;
|
|
}
|
|
function updateExternalModule(node) {
|
|
var externalHelpersImportDeclaration = ts.createExternalHelpersImportDeclarationIfNeeded(factory, emitHelpers(), node, compilerOptions);
|
|
if (externalHelpersImportDeclaration) {
|
|
var statements = [];
|
|
var statementOffset = factory.copyPrologue(node.statements, statements);
|
|
ts.append(statements, externalHelpersImportDeclaration);
|
|
ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
|
|
return factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
|
|
}
|
|
else {
|
|
return ts.visitEachChild(node, visitor, context);
|
|
}
|
|
}
|
|
function visitor(node) {
|
|
switch (node.kind) {
|
|
case 265:
|
|
return ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.Node16 ? visitImportEqualsDeclaration(node) : undefined;
|
|
case 271:
|
|
return visitExportAssignment(node);
|
|
case 272:
|
|
var exportDecl = node;
|
|
return visitExportDeclaration(exportDecl);
|
|
}
|
|
return node;
|
|
}
|
|
function createRequireCall(importNode) {
|
|
var moduleName = ts.getExternalModuleNameLiteral(factory, importNode, ts.Debug.checkDefined(currentSourceFile), host, resolver, compilerOptions);
|
|
var args = [];
|
|
if (moduleName) {
|
|
args.push(moduleName);
|
|
}
|
|
if (!importRequireStatements) {
|
|
var createRequireName = factory.createUniqueName("_createRequire", 16 | 32);
|
|
var importStatement = factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
|
|
factory.createImportSpecifier(false, factory.createIdentifier("createRequire"), createRequireName)
|
|
])), factory.createStringLiteral("module"));
|
|
var requireHelperName = factory.createUniqueName("__require", 16 | 32);
|
|
var requireStatement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(requireHelperName, undefined, undefined, factory.createCallExpression(factory.cloneNode(createRequireName), undefined, [
|
|
factory.createPropertyAccessExpression(factory.createMetaProperty(100, factory.createIdentifier("meta")), factory.createIdentifier("url"))
|
|
]))
|
|
], languageVersion >= 2 ? 2 : 0));
|
|
importRequireStatements = [importStatement, requireStatement];
|
|
}
|
|
var name = importRequireStatements[1].declarationList.declarations[0].name;
|
|
ts.Debug.assertNode(name, ts.isIdentifier);
|
|
return factory.createCallExpression(factory.cloneNode(name), 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;
|
|
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
|
|
factory.createVariableDeclaration(factory.cloneNode(node.name), undefined, undefined, createRequireCall(node))
|
|
], languageVersion >= 2 ? 2 : 0)), node), node));
|
|
statements = appendExportsOfImportEqualsDeclaration(statements, node);
|
|
return ts.singleOrMany(statements);
|
|
}
|
|
function appendExportsOfImportEqualsDeclaration(statements, node) {
|
|
if (ts.hasSyntacticModifier(node, 1)) {
|
|
statements = ts.append(statements, factory.createExportDeclaration(undefined, node.isTypeOnly, factory.createNamedExports([factory.createExportSpecifier(false, undefined, ts.idText(node.name))])));
|
|
}
|
|
return statements;
|
|
}
|
|
function visitExportAssignment(node) {
|
|
return node.isExportEquals ? undefined : node;
|
|
}
|
|
function visitExportDeclaration(node) {
|
|
if (compilerOptions.module !== undefined && compilerOptions.module > ts.ModuleKind.ES2015) {
|
|
return node;
|
|
}
|
|
if (!node.exportClause || !ts.isNamespaceExport(node.exportClause) || !node.moduleSpecifier) {
|
|
return node;
|
|
}
|
|
var oldIdentifier = node.exportClause.name;
|
|
var synthName = factory.getGeneratedNameForNode(oldIdentifier);
|
|
var importDecl = factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamespaceImport(synthName)), node.moduleSpecifier, node.assertClause);
|
|
ts.setOriginalNode(importDecl, node.exportClause);
|
|
var exportDecl = ts.isExportNamespaceAsDefaultDeclaration(node) ? factory.createExportDefault(synthName) : factory.createExportDeclaration(undefined, false, factory.createNamedExports([factory.createExportSpecifier(false, synthName, oldIdentifier)]));
|
|
ts.setOriginalNode(exportDecl, node);
|
|
return [importDecl, exportDecl];
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
if (ts.isSourceFile(node)) {
|
|
if ((ts.isExternalModule(node) || compilerOptions.isolatedModules) && compilerOptions.importHelpers) {
|
|
helperNameSubstitutions = new ts.Map();
|
|
}
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
helperNameSubstitutions = undefined;
|
|
}
|
|
else {
|
|
previousOnEmitNode(hint, node, emitCallback);
|
|
}
|
|
}
|
|
function onSubstituteNode(hint, node) {
|
|
node = previousOnSubstituteNode(hint, node);
|
|
if (helperNameSubstitutions && ts.isIdentifier(node) && ts.getEmitFlags(node) & 4096) {
|
|
return substituteHelperName(node);
|
|
}
|
|
return node;
|
|
}
|
|
function substituteHelperName(node) {
|
|
var name = ts.idText(node);
|
|
var substitution = helperNameSubstitutions.get(name);
|
|
if (!substitution) {
|
|
helperNameSubstitutions.set(name, substitution = factory.createUniqueName(name, 16 | 32));
|
|
}
|
|
return substitution;
|
|
}
|
|
}
|
|
ts.transformECMAScriptModule = transformECMAScriptModule;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function transformNodeModule(context) {
|
|
var previousOnSubstituteNode = context.onSubstituteNode;
|
|
var previousOnEmitNode = context.onEmitNode;
|
|
var esmTransform = ts.transformECMAScriptModule(context);
|
|
var esmOnSubstituteNode = context.onSubstituteNode;
|
|
var esmOnEmitNode = context.onEmitNode;
|
|
context.onSubstituteNode = previousOnSubstituteNode;
|
|
context.onEmitNode = previousOnEmitNode;
|
|
var cjsTransform = ts.transformModule(context);
|
|
var cjsOnSubstituteNode = context.onSubstituteNode;
|
|
var cjsOnEmitNode = context.onEmitNode;
|
|
context.onSubstituteNode = onSubstituteNode;
|
|
context.onEmitNode = onEmitNode;
|
|
context.enableSubstitution(305);
|
|
context.enableEmitNotification(305);
|
|
var currentSourceFile;
|
|
return transformSourceFileOrBundle;
|
|
function onSubstituteNode(hint, node) {
|
|
if (ts.isSourceFile(node)) {
|
|
currentSourceFile = node;
|
|
return previousOnSubstituteNode(hint, node);
|
|
}
|
|
else {
|
|
if (!currentSourceFile) {
|
|
return previousOnSubstituteNode(hint, node);
|
|
}
|
|
if (currentSourceFile.impliedNodeFormat === ts.ModuleKind.ESNext) {
|
|
return esmOnSubstituteNode(hint, node);
|
|
}
|
|
return cjsOnSubstituteNode(hint, node);
|
|
}
|
|
}
|
|
function onEmitNode(hint, node, emitCallback) {
|
|
if (ts.isSourceFile(node)) {
|
|
currentSourceFile = node;
|
|
}
|
|
if (!currentSourceFile) {
|
|
return previousOnEmitNode(hint, node, emitCallback);
|
|
}
|
|
if (currentSourceFile.impliedNodeFormat === ts.ModuleKind.ESNext) {
|
|
return esmOnEmitNode(hint, node, emitCallback);
|
|
}
|
|
return cjsOnEmitNode(hint, node, emitCallback);
|
|
}
|
|
function getModuleTransformForFile(file) {
|
|
return file.impliedNodeFormat === ts.ModuleKind.ESNext ? esmTransform : cjsTransform;
|
|
}
|
|
function transformSourceFile(node) {
|
|
if (node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
currentSourceFile = node;
|
|
var result = getModuleTransformForFile(node)(node);
|
|
currentSourceFile = undefined;
|
|
ts.Debug.assert(ts.isSourceFile(result));
|
|
return result;
|
|
}
|
|
function transformSourceFileOrBundle(node) {
|
|
return node.kind === 305 ? transformSourceFile(node) : transformBundle(node);
|
|
}
|
|
function transformBundle(node) {
|
|
return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
|
|
}
|
|
}
|
|
ts.transformNodeModule = transformNodeModule;
|
|
})(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.isPropertyAccessExpression(node) ||
|
|
ts.isJSDocTypeAlias(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.isStatic(node)) {
|
|
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 === 257) {
|
|
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.isStatic(node)) {
|
|
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 === 257) {
|
|
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.isPropertyAccessExpression(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, node.parent) && ts.hasSyntacticModifier(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) || ts.isJSDocTypeAlias(node)) {
|
|
return getTypeAliasDeclarationVisibilityError;
|
|
}
|
|
else {
|
|
return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: ".concat(ts.Debug.formatSyntaxKind(node.kind)));
|
|
}
|
|
function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
|
|
if (node.kind === 254 || node.kind === 203) {
|
|
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 === 167 || node.kind === 206 || node.kind === 166 ||
|
|
(node.kind === 164 && ts.hasSyntacticModifier(node.parent, 8))) {
|
|
if (ts.isStatic(node)) {
|
|
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 === 257 || node.kind === 164) {
|
|
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 === 173) {
|
|
if (ts.isStatic(node)) {
|
|
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.isStatic(node)) {
|
|
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 175:
|
|
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 174:
|
|
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 176:
|
|
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 169:
|
|
case 168:
|
|
if (ts.isStatic(node)) {
|
|
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 === 257) {
|
|
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 256:
|
|
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 171:
|
|
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 175:
|
|
case 180:
|
|
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 174:
|
|
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 176:
|
|
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 169:
|
|
case 168:
|
|
if (ts.isStatic(node.parent)) {
|
|
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 === 257) {
|
|
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 256:
|
|
case 179:
|
|
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;
|
|
case 173:
|
|
case 172:
|
|
return symbolAccessibilityResult.errorModuleName ?
|
|
symbolAccessibilityResult.accessibility === 2 ?
|
|
ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
|
|
ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2 :
|
|
ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_private_name_1;
|
|
default:
|
|
return ts.Debug.fail("Unknown parent for parameter: ".concat(ts.Debug.formatSyntaxKind(node.parent.kind)));
|
|
}
|
|
}
|
|
function getTypeParameterConstraintVisibilityError() {
|
|
var diagnosticMessage;
|
|
switch (node.parent.kind) {
|
|
case 257:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
|
|
break;
|
|
case 258:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
|
|
break;
|
|
case 195:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
|
|
break;
|
|
case 180:
|
|
case 175:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
|
|
break;
|
|
case 174:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
|
|
break;
|
|
case 169:
|
|
case 168:
|
|
if (ts.isStatic(node.parent)) {
|
|
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 === 257) {
|
|
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 179:
|
|
case 256:
|
|
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
|
|
break;
|
|
case 259:
|
|
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 (ts.isClassDeclaration(node.parent.parent)) {
|
|
diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 ?
|
|
ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
|
|
node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
|
|
ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
|
|
}
|
|
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(symbolAccessibilityResult) {
|
|
return {
|
|
diagnosticMessage: symbolAccessibilityResult.errorModuleName
|
|
? ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2
|
|
: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,
|
|
errorNode: ts.isJSDocTypeAlias(node) ? ts.Debug.checkDefined(node.typeExpression) : node.type,
|
|
typeName: ts.isJSDocTypeAlias(node) ? ts.getNameOfDeclaration(node) : node.name,
|
|
};
|
|
}
|
|
}
|
|
ts.createGetSymbolAccessibilityDiagnosticForNode = createGetSymbolAccessibilityDiagnosticForNode;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getDeclarationDiagnostics(host, resolver, file) {
|
|
var compilerOptions = host.getCompilerOptions();
|
|
var result = ts.transformNodes(resolver, host, ts.factory, compilerOptions, file ? [file] : ts.filter(host.getSourceFiles(), ts.isSourceFileNotJson), [transformDeclarations], false);
|
|
return result.diagnostics;
|
|
}
|
|
ts.getDeclarationDiagnostics = getDeclarationDiagnostics;
|
|
function hasInternalAnnotation(range, currentSourceFile) {
|
|
var comment = currentSourceFile.text.substring(range.pos, range.end);
|
|
return ts.stringContains(comment, "@internal");
|
|
}
|
|
function isInternalDeclaration(node, currentSourceFile) {
|
|
var parseTreeNode = ts.getParseTreeNode(node);
|
|
if (parseTreeNode && parseTreeNode.kind === 164) {
|
|
var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
|
|
var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
|
|
var text = currentSourceFile.text;
|
|
var commentRanges = previousSibling
|
|
? ts.concatenate(ts.getTrailingCommentRanges(text, ts.skipTrivia(text, previousSibling.end + 1, false, true)), ts.getLeadingCommentRanges(text, node.pos))
|
|
: ts.getTrailingCommentRanges(text, ts.skipTrivia(text, node.pos, false, true));
|
|
return commentRanges && commentRanges.length && hasInternalAnnotation(ts.last(commentRanges), currentSourceFile);
|
|
}
|
|
var leadingCommentRanges = parseTreeNode && ts.getLeadingCommentRangesOfNode(parseTreeNode, currentSourceFile);
|
|
return !!ts.forEach(leadingCommentRanges, function (range) {
|
|
return hasInternalAnnotation(range, currentSourceFile);
|
|
});
|
|
}
|
|
ts.isInternalDeclaration = isInternalDeclaration;
|
|
var declarationEmitNodeBuilderFlags = 1024 |
|
|
2048 |
|
|
4096 |
|
|
8 |
|
|
524288 |
|
|
4 |
|
|
1;
|
|
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 necessaryTypeReferences;
|
|
var lateMarkedStatements;
|
|
var lateStatementReplacementMap;
|
|
var suppressNewDiagnosticContexts;
|
|
var exportedModulesFromDeclarationEmit;
|
|
var factory = context.factory;
|
|
var host = context.getEmitHost();
|
|
var symbolTracker = {
|
|
trackSymbol: trackSymbol,
|
|
reportInaccessibleThisError: reportInaccessibleThisError,
|
|
reportInaccessibleUniqueSymbolError: reportInaccessibleUniqueSymbolError,
|
|
reportCyclicStructureError: reportCyclicStructureError,
|
|
reportPrivateInBaseOfClassExpression: reportPrivateInBaseOfClassExpression,
|
|
reportLikelyUnsafeImportRequiredError: reportLikelyUnsafeImportRequiredError,
|
|
reportTruncationError: reportTruncationError,
|
|
moduleResolverHost: host,
|
|
trackReferencedAmbientModule: trackReferencedAmbientModule,
|
|
trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
|
|
reportNonlocalAugmentation: reportNonlocalAugmentation,
|
|
reportNonSerializableProperty: reportNonSerializableProperty,
|
|
reportImportTypeNodeResolutionModeOverride: reportImportTypeNodeResolutionModeOverride,
|
|
};
|
|
var errorNameNode;
|
|
var errorFallbackNode;
|
|
var currentSourceFile;
|
|
var refs;
|
|
var libs;
|
|
var emittedImports;
|
|
var resolver = context.getEmitResolver();
|
|
var options = context.getCompilerOptions();
|
|
var noResolve = options.noResolve, stripInternal = options.stripInternal;
|
|
return transformRoot;
|
|
function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) {
|
|
if (!typeReferenceDirectives) {
|
|
return;
|
|
}
|
|
necessaryTypeReferences = necessaryTypeReferences || new ts.Set();
|
|
for (var _i = 0, typeReferenceDirectives_2 = typeReferenceDirectives; _i < typeReferenceDirectives_2.length; _i++) {
|
|
var ref = typeReferenceDirectives_2[_i];
|
|
necessaryTypeReferences.add(ref);
|
|
}
|
|
}
|
|
function trackReferencedAmbientModule(node, symbol) {
|
|
var directives = resolver.getTypeReferenceDirectivesForSymbol(symbol, 67108863);
|
|
if (ts.length(directives)) {
|
|
return recordTypeReferenceDirectivesIfNecessary(directives);
|
|
}
|
|
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));
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function trackExternalModuleSymbolOfImportTypeNode(symbol) {
|
|
if (!isBundledEmit) {
|
|
(exportedModulesFromDeclarationEmit || (exportedModulesFromDeclarationEmit = [])).push(symbol);
|
|
}
|
|
}
|
|
function trackSymbol(symbol, enclosingDeclaration, meaning) {
|
|
if (symbol.flags & 262144)
|
|
return false;
|
|
var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true));
|
|
recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
|
|
return issuedDiagnostic;
|
|
}
|
|
function reportPrivateInBaseOfClassExpression(propertyName) {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
|
|
}
|
|
}
|
|
function errorDeclarationNameWithFallback() {
|
|
return errorNameNode ? ts.declarationNameToString(errorNameNode) :
|
|
errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
|
|
errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
|
|
"(Missing)";
|
|
}
|
|
function reportInaccessibleUniqueSymbolError() {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
|
|
}
|
|
}
|
|
function reportCyclicStructureError() {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
|
|
}
|
|
}
|
|
function reportInaccessibleThisError() {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
|
|
}
|
|
}
|
|
function reportLikelyUnsafeImportRequiredError(specifier) {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
|
|
}
|
|
}
|
|
function reportTruncationError() {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed));
|
|
}
|
|
}
|
|
function reportNonlocalAugmentation(containingFile, parentSymbol, symbol) {
|
|
var _a;
|
|
var primaryDeclaration = (_a = parentSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.getSourceFileOfNode(d) === containingFile; });
|
|
var augmentingDeclarations = ts.filter(symbol.declarations, function (d) { return ts.getSourceFileOfNode(d) !== containingFile; });
|
|
if (augmentingDeclarations) {
|
|
for (var _i = 0, augmentingDeclarations_1 = augmentingDeclarations; _i < augmentingDeclarations_1.length; _i++) {
|
|
var augmentations = augmentingDeclarations_1[_i];
|
|
context.addDiagnostic(ts.addRelatedInfo(ts.createDiagnosticForNode(augmentations, ts.Diagnostics.Declaration_augments_declaration_in_another_file_This_cannot_be_serialized), ts.createDiagnosticForNode(primaryDeclaration, ts.Diagnostics.This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file)));
|
|
}
|
|
}
|
|
}
|
|
function reportNonSerializableProperty(propertyName) {
|
|
if (errorNameNode || errorFallbackNode) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
|
|
}
|
|
}
|
|
function reportImportTypeNodeResolutionModeOverride() {
|
|
if (!ts.isNightly() && (errorNameNode || errorFallbackNode)) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next));
|
|
}
|
|
}
|
|
function transformDeclarationsForJS(sourceFile, bundled) {
|
|
var oldDiag = getSymbolAccessibilityDiagnostic;
|
|
getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
|
|
diagnosticMessage: s.errorModuleName
|
|
? ts.Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit
|
|
: ts.Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit,
|
|
errorNode: s.errorNode || sourceFile
|
|
})); };
|
|
var result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, symbolTracker, bundled);
|
|
getSymbolAccessibilityDiagnostic = oldDiag;
|
|
return result;
|
|
}
|
|
function transformRoot(node) {
|
|
if (node.kind === 305 && node.isDeclarationFile) {
|
|
return node;
|
|
}
|
|
if (node.kind === 306) {
|
|
isBundledEmit = true;
|
|
refs = new ts.Map();
|
|
libs = new ts.Map();
|
|
var hasNoDefaultLib_1 = false;
|
|
var bundle = factory.createBundle(ts.map(node.sourceFiles, function (sourceFile) {
|
|
if (sourceFile.isDeclarationFile)
|
|
return undefined;
|
|
hasNoDefaultLib_1 = hasNoDefaultLib_1 || sourceFile.hasNoDefaultLib;
|
|
currentSourceFile = sourceFile;
|
|
enclosingDeclaration = sourceFile;
|
|
lateMarkedStatements = undefined;
|
|
suppressNewDiagnosticContexts = false;
|
|
lateStatementReplacementMap = new ts.Map();
|
|
getSymbolAccessibilityDiagnostic = throwDiagnostic;
|
|
needsScopeFixMarker = false;
|
|
resultHasScopeMarker = false;
|
|
collectReferences(sourceFile, refs);
|
|
collectLibs(sourceFile, libs);
|
|
if (ts.isExternalOrCommonJsModule(sourceFile) || ts.isJsonSourceFile(sourceFile)) {
|
|
resultHasExternalModuleIndicator = false;
|
|
needsDeclare = false;
|
|
var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
|
|
var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([factory.createModifier(135)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], true, [], [], false, []);
|
|
return newFile;
|
|
}
|
|
needsDeclare = true;
|
|
var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
|
|
return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), true, [], [], false, []);
|
|
}), ts.mapDefined(node.prepends, function (prepend) {
|
|
if (prepend.kind === 308) {
|
|
var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
|
|
hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
|
|
collectReferences(sourceFile, refs);
|
|
recordTypeReferenceDirectivesIfNecessary(ts.map(sourceFile.typeReferenceDirectives, function (ref) { return [ref.fileName, ref.resolutionMode]; }));
|
|
collectLibs(sourceFile, libs);
|
|
return sourceFile;
|
|
}
|
|
return prepend;
|
|
}));
|
|
bundle.syntheticFileReferences = [];
|
|
bundle.syntheticTypeReferences = getFileReferencesForUsedTypeReferences();
|
|
bundle.syntheticLibReferences = getLibReferences();
|
|
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.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 = new ts.Map();
|
|
necessaryTypeReferences = undefined;
|
|
refs = collectReferences(currentSourceFile, new ts.Map());
|
|
libs = collectLibs(currentSourceFile, new ts.Map());
|
|
var references = [];
|
|
var outputFilePath = ts.getDirectoryPath(ts.normalizeSlashes(ts.getOutputPathsFor(node, host, true).declarationFilePath));
|
|
var referenceVisitor = mapReferencesIntoArray(references, outputFilePath);
|
|
var combinedStatements;
|
|
if (ts.isSourceFileJS(currentSourceFile)) {
|
|
combinedStatements = factory.createNodeArray(transformDeclarationsForJS(node));
|
|
refs.forEach(referenceVisitor);
|
|
emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
|
|
}
|
|
else {
|
|
var statements = ts.visitNodes(node.statements, visitDeclarationStatements);
|
|
combinedStatements = ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), node.statements);
|
|
refs.forEach(referenceVisitor);
|
|
emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
|
|
if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
|
|
combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
|
|
}
|
|
}
|
|
var updated = factory.updateSourceFile(node, combinedStatements, true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
|
|
updated.exportedModulesFromDeclarationEmit = exportedModulesFromDeclarationEmit;
|
|
return updated;
|
|
function getLibReferences() {
|
|
return ts.map(ts.arrayFrom(libs.keys()), function (lib) { return ({ fileName: lib, pos: -1, end: -1 }); });
|
|
}
|
|
function getFileReferencesForUsedTypeReferences() {
|
|
return necessaryTypeReferences ? ts.mapDefined(ts.arrayFrom(necessaryTypeReferences.keys()), getFileReferenceForSpecifierModeTuple) : [];
|
|
}
|
|
function getFileReferenceForSpecifierModeTuple(_a) {
|
|
var typeName = _a[0], mode = _a[1];
|
|
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 __assign({ fileName: typeName, pos: -1, end: -1 }, (mode ? { resolutionMode: mode } : undefined));
|
|
}
|
|
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 || file.fileName;
|
|
}
|
|
if (declFileName) {
|
|
var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
|
|
if (!ts.pathIsRelative(specifier)) {
|
|
recordTypeReferenceDirectivesIfNecessary([[specifier, undefined]]);
|
|
return;
|
|
}
|
|
var fileName = ts.getRelativePathToDirectoryOrUrl(outputFilePath, declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false);
|
|
if (ts.startsWith(fileName, "./") && ts.hasExtension(fileName)) {
|
|
fileName = fileName.substring(2);
|
|
}
|
|
if (ts.startsWith(fileName, "node_modules/") || ts.pathContainsNodeModules(fileName)) {
|
|
return;
|
|
}
|
|
references.push({ pos: -1, end: -1, fileName: fileName });
|
|
}
|
|
};
|
|
}
|
|
}
|
|
function collectReferences(sourceFile, ret) {
|
|
if (noResolve || (!ts.isUnparsedSource(sourceFile) && ts.isSourceFileJS(sourceFile)))
|
|
return ret;
|
|
ts.forEach(sourceFile.referencedFiles, function (f) {
|
|
var elem = host.getSourceFileFromReference(sourceFile, f);
|
|
if (elem) {
|
|
ret.set(ts.getOriginalNodeId(elem), elem);
|
|
}
|
|
});
|
|
return ret;
|
|
}
|
|
function collectLibs(sourceFile, ret) {
|
|
ts.forEach(sourceFile.libReferenceDirectives, function (ref) {
|
|
var lib = host.getLibFileFromReference(ref);
|
|
if (lib) {
|
|
ret.set(ts.toFileNameLowerCase(ref.fileName), true);
|
|
}
|
|
});
|
|
return ret;
|
|
}
|
|
function filterBindingPatternInitializersAndRenamings(name) {
|
|
if (name.kind === 79) {
|
|
return name;
|
|
}
|
|
else {
|
|
if (name.kind === 202) {
|
|
return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
|
|
}
|
|
else {
|
|
return factory.updateObjectBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
|
|
}
|
|
}
|
|
function visitBindingElement(elem) {
|
|
if (elem.kind === 227) {
|
|
return elem;
|
|
}
|
|
if (elem.propertyName && ts.isIdentifier(elem.propertyName) && ts.isIdentifier(elem.name) && !elem.symbol.isReferenced) {
|
|
return factory.updateBindingElement(elem, elem.dotDotDotToken, undefined, elem.propertyName, shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
|
|
}
|
|
return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializersAndRenamings(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
|
|
}
|
|
}
|
|
function ensureParameter(p, modifierMask, type) {
|
|
var oldDiag;
|
|
if (!suppressNewDiagnosticContexts) {
|
|
oldDiag = getSymbolAccessibilityDiagnostic;
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(p);
|
|
}
|
|
var newParam = factory.updateParameterDeclaration(p, maskModifiers(p, modifierMask), p.dotDotDotToken, filterBindingPatternInitializersAndRenamings(p.name), resolver.isOptionalParameter(p) ? (p.questionToken || factory.createToken(57)) : undefined, ensureType(p, type || 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), symbolTracker);
|
|
}
|
|
return undefined;
|
|
}
|
|
function ensureType(node, type, ignorePrivate) {
|
|
if (!ignorePrivate && ts.hasEffectiveModifier(node, 8)) {
|
|
return;
|
|
}
|
|
if (shouldPrintWithInitializer(node)) {
|
|
return;
|
|
}
|
|
var shouldUseResolverType = node.kind === 164 &&
|
|
(resolver.isRequiredInitializedParameter(node) ||
|
|
resolver.isOptionalUninitializedParameterProperty(node));
|
|
if (type && !shouldUseResolverType) {
|
|
return ts.visitNode(type, visitDeclarationSubtree);
|
|
}
|
|
if (!ts.getParseTreeNode(node)) {
|
|
return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(130);
|
|
}
|
|
if (node.kind === 173) {
|
|
return factory.createKeywordTypeNode(130);
|
|
}
|
|
errorNameNode = node.name;
|
|
var oldDiag;
|
|
if (!suppressNewDiagnosticContexts) {
|
|
oldDiag = getSymbolAccessibilityDiagnostic;
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
|
|
}
|
|
if (node.kind === 254 || node.kind === 203) {
|
|
return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
|
|
}
|
|
if (node.kind === 164
|
|
|| node.kind === 167
|
|
|| node.kind === 166) {
|
|
if (ts.isPropertySignature(node) || !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 || factory.createKeywordTypeNode(130);
|
|
}
|
|
}
|
|
function isDeclarationAndNotVisible(node) {
|
|
node = ts.getParseTreeNode(node);
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 261:
|
|
case 258:
|
|
case 257:
|
|
case 259:
|
|
case 260:
|
|
return !resolver.isDeclarationVisible(node);
|
|
case 254:
|
|
return !getBindingNameVisible(node);
|
|
case 265:
|
|
case 266:
|
|
case 272:
|
|
case 271:
|
|
return false;
|
|
case 170:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function shouldEmitFunctionProperties(input) {
|
|
var _a;
|
|
if (input.body) {
|
|
return true;
|
|
}
|
|
var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
|
|
return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
|
|
}
|
|
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.hasEffectiveModifier(node, 8)) {
|
|
return undefined;
|
|
}
|
|
var newParams = ts.map(params, function (p) { return ensureParameter(p, modifierMask); });
|
|
if (!newParams) {
|
|
return undefined;
|
|
}
|
|
return factory.createNodeArray(newParams, params.hasTrailingComma);
|
|
}
|
|
function updateAccessorParamsList(input, isPrivate) {
|
|
var newParams;
|
|
if (!isPrivate) {
|
|
var thisParameter = ts.getThisParameter(input);
|
|
if (thisParameter) {
|
|
newParams = [ensureParameter(thisParameter)];
|
|
}
|
|
}
|
|
if (ts.isSetAccessorDeclaration(input)) {
|
|
var newValueParameter = void 0;
|
|
if (!isPrivate) {
|
|
var valueParameter = ts.getSetAccessorValueParameter(input);
|
|
if (valueParameter) {
|
|
var accessorType = getTypeAnnotationFromAllAccessorDeclarations(input, resolver.getAllAccessorDeclarations(input));
|
|
newValueParameter = ensureParameter(valueParameter, undefined, accessorType);
|
|
}
|
|
}
|
|
if (!newValueParameter) {
|
|
newValueParameter = factory.createParameterDeclaration(undefined, undefined, "value");
|
|
}
|
|
newParams = ts.append(newParams, newValueParameter);
|
|
}
|
|
return factory.createNodeArray(newParams || ts.emptyArray);
|
|
}
|
|
function ensureTypeParams(node, params) {
|
|
return ts.hasEffectiveModifier(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 !== 261 && parent.kind !== 200);
|
|
if (ts.isStringLiteralLike(input)) {
|
|
if (isBundledEmit) {
|
|
var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
|
|
if (newName) {
|
|
return factory.createStringLiteral(newName);
|
|
}
|
|
}
|
|
else {
|
|
var symbol = resolver.getSymbolOfExternalModuleSpecifier(input);
|
|
if (symbol) {
|
|
(exportedModulesFromDeclarationEmit || (exportedModulesFromDeclarationEmit = [])).push(symbol);
|
|
}
|
|
}
|
|
}
|
|
return input;
|
|
}
|
|
function transformImportEqualsDeclaration(decl) {
|
|
if (!resolver.isDeclarationVisible(decl))
|
|
return;
|
|
if (decl.moduleReference.kind === 277) {
|
|
var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
|
|
return factory.updateImportEqualsDeclaration(decl, decl.modifiers, decl.isTypeOnly, decl.name, factory.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 factory.updateImportDeclaration(decl, decl.modifiers, decl.importClause, rewriteModuleSpecifier(decl, decl.moduleSpecifier), getResolutionModeOverrideForClauseInNightly(decl.assertClause));
|
|
}
|
|
var visibleDefaultBinding = decl.importClause && decl.importClause.name && resolver.isDeclarationVisible(decl.importClause) ? decl.importClause.name : undefined;
|
|
if (!decl.importClause.namedBindings) {
|
|
return visibleDefaultBinding && factory.updateImportDeclaration(decl, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier), getResolutionModeOverrideForClauseInNightly(decl.assertClause));
|
|
}
|
|
if (decl.importClause.namedBindings.kind === 268) {
|
|
var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : undefined;
|
|
return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier), getResolutionModeOverrideForClauseInNightly(decl.assertClause)) : undefined;
|
|
}
|
|
var bindingList = ts.mapDefined(decl.importClause.namedBindings.elements, function (b) { return resolver.isDeclarationVisible(b) ? b : undefined; });
|
|
if ((bindingList && bindingList.length) || visibleDefaultBinding) {
|
|
return factory.updateImportDeclaration(decl, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, bindingList && bindingList.length ? factory.updateNamedImports(decl.importClause.namedBindings, bindingList) : undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier), getResolutionModeOverrideForClauseInNightly(decl.assertClause));
|
|
}
|
|
if (resolver.isImportRequiredByAugmentation(decl)) {
|
|
return factory.updateImportDeclaration(decl, decl.modifiers, undefined, rewriteModuleSpecifier(decl, decl.moduleSpecifier), getResolutionModeOverrideForClauseInNightly(decl.assertClause));
|
|
}
|
|
}
|
|
function getResolutionModeOverrideForClauseInNightly(assertClause) {
|
|
var mode = ts.getResolutionModeOverrideForClause(assertClause);
|
|
if (mode !== undefined) {
|
|
if (!ts.isNightly()) {
|
|
context.addDiagnostic(ts.createDiagnosticForNode(assertClause, ts.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next));
|
|
}
|
|
return assertClause;
|
|
}
|
|
return undefined;
|
|
}
|
|
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!: ".concat(ts.Debug.formatSyntaxKind(i.kind)));
|
|
}
|
|
var priorNeedsDeclare = needsDeclare;
|
|
needsDeclare = i.parent && ts.isSourceFile(i.parent) && !(ts.isExternalModule(i.parent) && isBundledEmit);
|
|
var result = transformTopLevelDeclaration(i);
|
|
needsDeclare = priorNeedsDeclare;
|
|
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) {
|
|
if (ts.isArray(result) ? ts.some(result, ts.needsScopeMarker) : ts.needsScopeMarker(result)) {
|
|
needsScopeFixMarker = true;
|
|
}
|
|
if (ts.isSourceFile(statement.parent) && (ts.isArray(result) ? ts.some(result, ts.isExternalModuleIndicator) : ts.isExternalModuleIndicator(result))) {
|
|
resultHasExternalModuleIndicator = true;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
return statement;
|
|
}
|
|
}
|
|
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;
|
|
var canProduceDiagnostic = ts.canProduceDiagnostics(input);
|
|
var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
|
|
var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 182 || input.kind === 195) && input.parent.kind !== 259);
|
|
if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
|
|
if (ts.hasEffectiveModifier(input, 8)) {
|
|
if (input.symbol && input.symbol.declarations && input.symbol.declarations[0] !== input)
|
|
return;
|
|
return cleanup(factory.createPropertyDeclaration(ensureModifiers(input), input.name, undefined, undefined, undefined));
|
|
}
|
|
}
|
|
if (canProduceDiagnostic && !suppressNewDiagnosticContexts) {
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(input);
|
|
}
|
|
if (ts.isTypeQueryNode(input)) {
|
|
checkEntityNameVisibility(input.exprName, enclosingDeclaration);
|
|
}
|
|
if (shouldEnterSuppressNewDiagnosticsContextContext) {
|
|
suppressNewDiagnosticContexts = true;
|
|
}
|
|
if (isProcessedComponent(input)) {
|
|
switch (input.kind) {
|
|
case 228: {
|
|
if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
|
|
checkEntityNameVisibility(input.expression, enclosingDeclaration);
|
|
}
|
|
var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
|
|
return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
|
|
}
|
|
case 178: {
|
|
checkEntityNameVisibility(input.typeName, enclosingDeclaration);
|
|
var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
|
|
return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
|
|
}
|
|
case 175:
|
|
return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
|
|
case 171: {
|
|
var ctor = factory.createConstructorDeclaration(ensureModifiers(input), updateParamsList(input, input.parameters, 0), undefined);
|
|
return cleanup(ctor);
|
|
}
|
|
case 169: {
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
var sig = factory.createMethodDeclaration(ensureModifiers(input), undefined, input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined);
|
|
return cleanup(sig);
|
|
}
|
|
case 172: {
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
var accessorType = getTypeAnnotationFromAllAccessorDeclarations(input, resolver.getAllAccessorDeclarations(input));
|
|
return cleanup(factory.updateGetAccessorDeclaration(input, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8)), ensureType(input, accessorType), undefined));
|
|
}
|
|
case 173: {
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
return cleanup(factory.updateSetAccessorDeclaration(input, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8)), undefined));
|
|
}
|
|
case 167:
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
return cleanup(factory.updatePropertyDeclaration(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
|
|
case 166:
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
|
|
case 168: {
|
|
if (ts.isPrivateIdentifier(input.name)) {
|
|
return cleanup(undefined);
|
|
}
|
|
return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
|
|
}
|
|
case 174: {
|
|
return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
|
|
}
|
|
case 176: {
|
|
return cleanup(factory.updateIndexSignature(input, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(130)));
|
|
}
|
|
case 254: {
|
|
if (ts.isBindingPattern(input.name)) {
|
|
return recreateBindingPattern(input.name);
|
|
}
|
|
shouldEnterSuppressNewDiagnosticsContextContext = true;
|
|
suppressNewDiagnosticContexts = true;
|
|
return cleanup(factory.updateVariableDeclaration(input, input.name, undefined, ensureType(input, input.type), ensureNoInitializer(input)));
|
|
}
|
|
case 163: {
|
|
if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
|
|
return cleanup(factory.updateTypeParameterDeclaration(input, input.modifiers, input.name, undefined, undefined));
|
|
}
|
|
return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
|
|
}
|
|
case 189: {
|
|
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(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
|
|
}
|
|
case 179: {
|
|
return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
|
|
}
|
|
case 180: {
|
|
return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
|
|
}
|
|
case 200: {
|
|
if (!ts.isLiteralImportTypeNode(input))
|
|
return cleanup(input);
|
|
return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.assertions, input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
|
|
}
|
|
default: ts.Debug.assertNever(input, "Attempted to process unhandled node kind: ".concat(ts.Debug.formatSyntaxKind(input.kind)));
|
|
}
|
|
}
|
|
if (ts.isTupleTypeNode(input) && (ts.getLineAndCharacterOfPosition(currentSourceFile, input.pos).line === ts.getLineAndCharacterOfPosition(currentSourceFile, input.end).line)) {
|
|
ts.setEmitFlags(input, 1);
|
|
}
|
|
return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
|
|
function cleanup(returnValue) {
|
|
if (returnValue && canProduceDiagnostic && ts.hasDynamicName(input)) {
|
|
checkName(input);
|
|
}
|
|
if (isEnclosingDeclaration(input)) {
|
|
enclosingDeclaration = previousEnclosingDeclaration;
|
|
}
|
|
if (canProduceDiagnostic && !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 === 169 && ts.hasEffectiveModifier(node.parent, 8);
|
|
}
|
|
function visitDeclarationStatements(input) {
|
|
if (!isPreservedDeclarationStatement(input)) {
|
|
return;
|
|
}
|
|
if (shouldStripInternal(input))
|
|
return;
|
|
switch (input.kind) {
|
|
case 272: {
|
|
if (ts.isSourceFile(input.parent)) {
|
|
resultHasExternalModuleIndicator = true;
|
|
}
|
|
resultHasScopeMarker = true;
|
|
return factory.updateExportDeclaration(input, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier), ts.getResolutionModeOverrideForClause(input.assertClause) ? input.assertClause : undefined);
|
|
}
|
|
case 271: {
|
|
if (ts.isSourceFile(input.parent)) {
|
|
resultHasExternalModuleIndicator = true;
|
|
}
|
|
resultHasScopeMarker = true;
|
|
if (input.expression.kind === 79) {
|
|
return input;
|
|
}
|
|
else {
|
|
var newId = factory.createUniqueName("_default", 16);
|
|
getSymbolAccessibilityDiagnostic = function () { return ({
|
|
diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,
|
|
errorNode: input
|
|
}); };
|
|
errorFallbackNode = input;
|
|
var varDecl = factory.createVariableDeclaration(newId, undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined);
|
|
errorFallbackNode = undefined;
|
|
var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(135)] : [], factory.createVariableDeclarationList([varDecl], 2));
|
|
preserveJsDoc(statement, input);
|
|
ts.removeAllComments(input);
|
|
return [statement, factory.updateExportAssignment(input, input.modifiers, newId)];
|
|
}
|
|
}
|
|
}
|
|
var result = transformTopLevelDeclaration(input);
|
|
lateStatementReplacementMap.set(ts.getOriginalNodeId(input), result);
|
|
return input;
|
|
}
|
|
function stripExportModifiers(statement) {
|
|
if (ts.isImportEqualsDeclaration(statement) || ts.hasEffectiveModifier(statement, 512) || !ts.canHaveModifiers(statement)) {
|
|
return statement;
|
|
}
|
|
var modifiers = factory.createModifiersFromModifierFlags(ts.getEffectiveModifierFlags(statement) & (257023 ^ 1));
|
|
return factory.updateModifiers(statement, modifiers);
|
|
}
|
|
function transformTopLevelDeclaration(input) {
|
|
if (lateMarkedStatements) {
|
|
while (ts.orderedRemoveItem(lateMarkedStatements, input))
|
|
;
|
|
}
|
|
if (shouldStripInternal(input))
|
|
return;
|
|
switch (input.kind) {
|
|
case 265: {
|
|
return transformImportEqualsDeclaration(input);
|
|
}
|
|
case 266: {
|
|
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 259:
|
|
return cleanup(factory.updateTypeAliasDeclaration(input, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
|
|
case 258: {
|
|
return cleanup(factory.updateInterfaceDeclaration(input, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
|
|
}
|
|
case 256: {
|
|
var clean = cleanup(factory.updateFunctionDeclaration(input, ensureModifiers(input), undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined));
|
|
if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
|
|
var props = resolver.getPropertiesOfContainerFunction(input);
|
|
var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16);
|
|
ts.setParent(fakespace_1, enclosingDeclaration);
|
|
fakespace_1.locals = ts.createSymbolTable(props);
|
|
fakespace_1.symbol = props[0].parent;
|
|
var exportMappings_1 = [];
|
|
var declarations = ts.mapDefined(props, function (p) {
|
|
if (!p.valueDeclaration || !ts.isPropertyAccessExpression(p.valueDeclaration)) {
|
|
return undefined;
|
|
}
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(p.valueDeclaration);
|
|
var type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace_1, declarationEmitNodeBuilderFlags, symbolTracker);
|
|
getSymbolAccessibilityDiagnostic = oldDiag;
|
|
var nameStr = ts.unescapeLeadingUnderscores(p.escapedName);
|
|
var isNonContextualKeywordName = ts.isStringANonContextualKeyword(nameStr);
|
|
var name = isNonContextualKeywordName ? factory.getGeneratedNameForNode(p.valueDeclaration) : factory.createIdentifier(nameStr);
|
|
if (isNonContextualKeywordName) {
|
|
exportMappings_1.push([name, nameStr]);
|
|
}
|
|
var varDecl = factory.createVariableDeclaration(name, undefined, type, undefined);
|
|
return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93)], factory.createVariableDeclarationList([varDecl]));
|
|
});
|
|
if (!exportMappings_1.length) {
|
|
declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0); });
|
|
}
|
|
else {
|
|
declarations.push(factory.createExportDeclaration(undefined, false, factory.createNamedExports(ts.map(exportMappings_1, function (_a) {
|
|
var gen = _a[0], exp = _a[1];
|
|
return factory.createExportSpecifier(false, gen, exp);
|
|
}))));
|
|
}
|
|
var namespaceDecl = factory.createModuleDeclaration(ensureModifiers(input), input.name, factory.createModuleBlock(declarations), 16);
|
|
if (!ts.hasEffectiveModifier(clean, 512)) {
|
|
return [clean, namespaceDecl];
|
|
}
|
|
var modifiers = factory.createModifiersFromModifierFlags((ts.getEffectiveModifierFlags(clean) & ~513) | 2);
|
|
var cleanDeclaration = factory.updateFunctionDeclaration(clean, modifiers, undefined, clean.name, clean.typeParameters, clean.parameters, clean.type, undefined);
|
|
var namespaceDeclaration = factory.updateModuleDeclaration(namespaceDecl, modifiers, namespaceDecl.name, namespaceDecl.body);
|
|
var exportDefaultDeclaration = factory.createExportAssignment(undefined, false, namespaceDecl.name);
|
|
if (ts.isSourceFile(input.parent)) {
|
|
resultHasExternalModuleIndicator = true;
|
|
}
|
|
resultHasScopeMarker = true;
|
|
return [cleanDeclaration, namespaceDeclaration, exportDefaultDeclaration];
|
|
}
|
|
else {
|
|
return clean;
|
|
}
|
|
}
|
|
case 261: {
|
|
needsDeclare = false;
|
|
var inner = input.body;
|
|
if (inner && inner.kind === 262) {
|
|
var oldNeedsScopeFix = needsScopeFixMarker;
|
|
var oldHasScopeFix = resultHasScopeMarker;
|
|
resultHasScopeMarker = false;
|
|
needsScopeFixMarker = false;
|
|
var statements = ts.visitNodes(inner.statements, visitDeclarationStatements);
|
|
var lateStatements = transformAndReplaceLatePaintedStatements(statements);
|
|
if (input.flags & 16777216) {
|
|
needsScopeFixMarker = false;
|
|
}
|
|
if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
|
|
if (needsScopeFixMarker) {
|
|
lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
|
|
}
|
|
else {
|
|
lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
|
|
}
|
|
}
|
|
var body = factory.updateModuleBlock(inner, lateStatements);
|
|
needsDeclare = previousNeedsDeclare;
|
|
needsScopeFixMarker = oldNeedsScopeFix;
|
|
resultHasScopeMarker = oldHasScopeFix;
|
|
var mods = ensureModifiers(input);
|
|
return cleanup(factory.updateModuleDeclaration(input, mods, ts.isExternalModuleAugmentation(input) ? rewriteModuleSpecifier(input, input.name) : input.name, body));
|
|
}
|
|
else {
|
|
needsDeclare = previousNeedsDeclare;
|
|
var mods = ensureModifiers(input);
|
|
needsDeclare = false;
|
|
ts.visitNode(inner, visitDeclarationStatements);
|
|
var id = ts.getOriginalNodeId(inner);
|
|
var body = lateStatementReplacementMap.get(id);
|
|
lateStatementReplacementMap.delete(id);
|
|
return cleanup(factory.updateModuleDeclaration(input, mods, input.name, body));
|
|
}
|
|
}
|
|
case 257: {
|
|
errorNameNode = input.name;
|
|
errorFallbackNode = input;
|
|
var modifiers = factory.createNodeArray(ensureModifiers(input));
|
|
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.hasSyntacticModifier(param, 16476) || shouldStripInternal(param))
|
|
return;
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
|
|
if (param.name.kind === 79) {
|
|
return preserveJsDoc(factory.createPropertyDeclaration(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(factory.createPropertyDeclaration(ensureModifiers(param), elem.name, undefined, ensureType(elem, undefined), undefined));
|
|
}
|
|
return elems;
|
|
}
|
|
}));
|
|
getSymbolAccessibilityDiagnostic = oldDiag_1;
|
|
}
|
|
var hasPrivateIdentifier = ts.some(input.members, function (member) { return !!member.name && ts.isPrivateIdentifier(member.name); });
|
|
var privateIdentifier = hasPrivateIdentifier ? [
|
|
factory.createPropertyDeclaration(undefined, factory.createPrivateIdentifier("#private"), undefined, undefined, undefined)
|
|
] : undefined;
|
|
var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
|
|
var members = factory.createNodeArray(memberNodes);
|
|
var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
|
|
if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104) {
|
|
var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
|
|
var newId_1 = factory.createUniqueName("".concat(oldId, "_base"), 16);
|
|
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 = factory.createVariableDeclaration(newId_1, undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined);
|
|
var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(135)] : [], factory.createVariableDeclarationList([varDecl], 2));
|
|
var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
|
|
if (clause.token === 94) {
|
|
var oldDiag_2 = getSymbolAccessibilityDiagnostic;
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
|
|
var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
|
|
getSymbolAccessibilityDiagnostic = oldDiag_2;
|
|
return newClause;
|
|
}
|
|
return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104; })), visitDeclarationSubtree));
|
|
}));
|
|
return [statement, cleanup(factory.updateClassDeclaration(input, modifiers, input.name, typeParameters, heritageClauses, members))];
|
|
}
|
|
else {
|
|
var heritageClauses = transformHeritageClauses(input.heritageClauses);
|
|
return cleanup(factory.updateClassDeclaration(input, modifiers, input.name, typeParameters, heritageClauses, members));
|
|
}
|
|
}
|
|
case 237: {
|
|
return cleanup(transformVariableStatement(input));
|
|
}
|
|
case 260: {
|
|
return cleanup(factory.updateEnumDeclaration(input, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
|
|
if (shouldStripInternal(m))
|
|
return;
|
|
var constValue = resolver.getConstantValue(m);
|
|
return preserveJsDoc(factory.updateEnumMember(m, m.name, constValue !== undefined ? typeof constValue === "string" ? factory.createStringLiteral(constValue) : factory.createNumericLiteral(constValue) : undefined), m);
|
|
}))));
|
|
}
|
|
}
|
|
return ts.Debug.assertNever(input, "Unhandled top-level node in declaration emit: ".concat(ts.Debug.formatSyntaxKind(input.kind)));
|
|
function cleanup(node) {
|
|
if (isEnclosingDeclaration(input)) {
|
|
enclosingDeclaration = previousEnclosingDeclaration;
|
|
}
|
|
if (canProdiceDiagnostic) {
|
|
getSymbolAccessibilityDiagnostic = oldDiag;
|
|
}
|
|
if (input.kind === 261) {
|
|
needsDeclare = previousNeedsDeclare;
|
|
}
|
|
if (node === input) {
|
|
return node;
|
|
}
|
|
errorFallbackNode = undefined;
|
|
errorNameNode = undefined;
|
|
return node && ts.setOriginalNode(preserveJsDoc(node, input), input);
|
|
}
|
|
}
|
|
function transformVariableStatement(input) {
|
|
if (!ts.forEach(input.declarationList.declarations, getBindingNameVisible))
|
|
return;
|
|
var nodes = ts.visitNodes(input.declarationList.declarations, visitDeclarationSubtree);
|
|
if (!ts.length(nodes))
|
|
return;
|
|
return factory.updateVariableStatement(input, factory.createNodeArray(ensureModifiers(input)), factory.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 === 227) {
|
|
return;
|
|
}
|
|
if (e.name) {
|
|
if (!getBindingNameVisible(e))
|
|
return;
|
|
if (ts.isBindingPattern(e.name)) {
|
|
return recreateBindingPattern(e.name);
|
|
}
|
|
else {
|
|
return factory.createVariableDeclaration(e.name, undefined, 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 shouldStripInternal(node) {
|
|
return !!stripInternal && !!node && isInternalDeclaration(node, currentSourceFile);
|
|
}
|
|
function isScopeMarker(node) {
|
|
return ts.isExportAssignment(node) || ts.isExportDeclaration(node);
|
|
}
|
|
function hasScopeMarker(statements) {
|
|
return ts.some(statements, isScopeMarker);
|
|
}
|
|
function ensureModifiers(node) {
|
|
var currentFlags = ts.getEffectiveModifierFlags(node);
|
|
var newFlags = ensureModifierFlags(node);
|
|
if (currentFlags === newFlags) {
|
|
return ts.visitArray(node.modifiers, function (n) { return ts.tryCast(n, ts.isModifier); }, ts.isModifier);
|
|
}
|
|
return factory.createModifiersFromModifierFlags(newFlags);
|
|
}
|
|
function ensureModifierFlags(node) {
|
|
var mask = 257023 ^ (4 | 256 | 16384);
|
|
var additions = (needsDeclare && !isAlwaysType(node)) ? 2 : 0;
|
|
var parentIsFile = node.parent.kind === 305;
|
|
if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
|
|
mask ^= 2;
|
|
additions = 0;
|
|
}
|
|
return maskModifierFlags(node, mask, additions);
|
|
}
|
|
function getTypeAnnotationFromAllAccessorDeclarations(node, accessors) {
|
|
var accessorType = getTypeAnnotationFromAccessor(node);
|
|
if (!accessorType && node !== accessors.firstAccessor) {
|
|
accessorType = getTypeAnnotationFromAccessor(accessors.firstAccessor);
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(accessors.firstAccessor);
|
|
}
|
|
if (!accessorType && accessors.secondAccessor && node !== accessors.secondAccessor) {
|
|
accessorType = getTypeAnnotationFromAccessor(accessors.secondAccessor);
|
|
getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(accessors.secondAccessor);
|
|
}
|
|
return accessorType;
|
|
}
|
|
function transformHeritageClauses(nodes) {
|
|
return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
|
|
return ts.isEntityNameExpression(t.expression) || (clause.token === 94 && t.expression.kind === 104);
|
|
})), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
|
|
}
|
|
}
|
|
ts.transformDeclarations = transformDeclarations;
|
|
function isAlwaysType(node) {
|
|
if (node.kind === 258) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function maskModifiers(node, modifierMask, modifierAdditions) {
|
|
return ts.factory.createModifiersFromModifierFlags(maskModifierFlags(node, modifierMask, modifierAdditions));
|
|
}
|
|
function maskModifierFlags(node, modifierMask, modifierAdditions) {
|
|
if (modifierMask === void 0) { modifierMask = 257023 ^ 4; }
|
|
if (modifierAdditions === void 0) { modifierAdditions = 0; }
|
|
var flags = (ts.getEffectiveModifierFlags(node) & modifierMask) | modifierAdditions;
|
|
if (flags & 512 && !(flags & 1)) {
|
|
flags ^= 1;
|
|
}
|
|
if (flags & 512 && flags & 2) {
|
|
flags ^= 2;
|
|
}
|
|
return flags;
|
|
}
|
|
function getTypeAnnotationFromAccessor(accessor) {
|
|
if (accessor) {
|
|
return accessor.kind === 172
|
|
? accessor.type
|
|
: accessor.parameters.length > 0
|
|
? accessor.parameters[0].type
|
|
: undefined;
|
|
}
|
|
}
|
|
function canHaveLiteralInitializer(node) {
|
|
switch (node.kind) {
|
|
case 167:
|
|
case 166:
|
|
return !ts.hasEffectiveModifier(node, 8);
|
|
case 164:
|
|
case 254:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isPreservedDeclarationStatement(node) {
|
|
switch (node.kind) {
|
|
case 256:
|
|
case 261:
|
|
case 265:
|
|
case 258:
|
|
case 257:
|
|
case 259:
|
|
case 260:
|
|
case 237:
|
|
case 266:
|
|
case 272:
|
|
case 271:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isProcessedComponent(node) {
|
|
switch (node.kind) {
|
|
case 175:
|
|
case 171:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
case 167:
|
|
case 166:
|
|
case 168:
|
|
case 174:
|
|
case 176:
|
|
case 254:
|
|
case 163:
|
|
case 228:
|
|
case 178:
|
|
case 189:
|
|
case 179:
|
|
case 180:
|
|
case 200:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getModuleTransformer(moduleKind) {
|
|
switch (moduleKind) {
|
|
case ts.ModuleKind.ESNext:
|
|
case ts.ModuleKind.ES2022:
|
|
case ts.ModuleKind.ES2020:
|
|
case ts.ModuleKind.ES2015:
|
|
return ts.transformECMAScriptModule;
|
|
case ts.ModuleKind.System:
|
|
return ts.transformSystemModule;
|
|
case ts.ModuleKind.Node16:
|
|
case ts.ModuleKind.NodeNext:
|
|
return ts.transformNodeModule;
|
|
default:
|
|
return ts.transformModule;
|
|
}
|
|
}
|
|
ts.noTransformers = { scriptTransformers: ts.emptyArray, declarationTransformers: ts.emptyArray };
|
|
function getTransformers(compilerOptions, customTransformers, emitOnlyDtsFiles) {
|
|
return {
|
|
scriptTransformers: getScriptTransformers(compilerOptions, customTransformers, emitOnlyDtsFiles),
|
|
declarationTransformers: getDeclarationTransformers(customTransformers),
|
|
};
|
|
}
|
|
ts.getTransformers = getTransformers;
|
|
function getScriptTransformers(compilerOptions, customTransformers, emitOnlyDtsFiles) {
|
|
if (emitOnlyDtsFiles)
|
|
return ts.emptyArray;
|
|
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
|
|
var moduleKind = ts.getEmitModuleKind(compilerOptions);
|
|
var transformers = [];
|
|
ts.addRange(transformers, customTransformers && ts.map(customTransformers.before, wrapScriptTransformerFactory));
|
|
transformers.push(ts.transformTypeScript);
|
|
transformers.push(ts.transformLegacyDecorators);
|
|
transformers.push(ts.transformClassFields);
|
|
if (ts.getJSXTransformEnabled(compilerOptions)) {
|
|
transformers.push(ts.transformJsx);
|
|
}
|
|
if (languageVersion < 99) {
|
|
transformers.push(ts.transformESNext);
|
|
}
|
|
if (languageVersion < 8) {
|
|
transformers.push(ts.transformES2021);
|
|
}
|
|
if (languageVersion < 7) {
|
|
transformers.push(ts.transformES2020);
|
|
}
|
|
if (languageVersion < 6) {
|
|
transformers.push(ts.transformES2019);
|
|
}
|
|
if (languageVersion < 5) {
|
|
transformers.push(ts.transformES2018);
|
|
}
|
|
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 && ts.map(customTransformers.after, wrapScriptTransformerFactory));
|
|
return transformers;
|
|
}
|
|
function getDeclarationTransformers(customTransformers) {
|
|
var transformers = [];
|
|
transformers.push(ts.transformDeclarations);
|
|
ts.addRange(transformers, customTransformers && ts.map(customTransformers.afterDeclarations, wrapDeclarationTransformerFactory));
|
|
return transformers;
|
|
}
|
|
function wrapCustomTransformer(transformer) {
|
|
return function (node) { return ts.isBundle(node) ? transformer.transformBundle(node) : transformer.transformSourceFile(node); };
|
|
}
|
|
function wrapCustomTransformerFactory(transformer, handleDefault) {
|
|
return function (context) {
|
|
var customTransformer = transformer(context);
|
|
return typeof customTransformer === "function"
|
|
? handleDefault(context, customTransformer)
|
|
: wrapCustomTransformer(customTransformer);
|
|
};
|
|
}
|
|
function wrapScriptTransformerFactory(transformer) {
|
|
return wrapCustomTransformerFactory(transformer, ts.chainBundle);
|
|
}
|
|
function wrapDeclarationTransformerFactory(transformer) {
|
|
return wrapCustomTransformerFactory(transformer, function (_, node) { return node; });
|
|
}
|
|
function noEmitSubstitution(_hint, node) {
|
|
return node;
|
|
}
|
|
ts.noEmitSubstitution = noEmitSubstitution;
|
|
function noEmitNotification(hint, node, callback) {
|
|
callback(hint, node);
|
|
}
|
|
ts.noEmitNotification = noEmitNotification;
|
|
function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
|
|
var enabledSyntaxKindFeatures = new Array(355);
|
|
var lexicalEnvironmentVariableDeclarations;
|
|
var lexicalEnvironmentFunctionDeclarations;
|
|
var lexicalEnvironmentStatements;
|
|
var lexicalEnvironmentFlags = 0;
|
|
var lexicalEnvironmentVariableDeclarationsStack = [];
|
|
var lexicalEnvironmentFunctionDeclarationsStack = [];
|
|
var lexicalEnvironmentStatementsStack = [];
|
|
var lexicalEnvironmentFlagsStack = [];
|
|
var lexicalEnvironmentStackOffset = 0;
|
|
var lexicalEnvironmentSuspended = false;
|
|
var blockScopedVariableDeclarationsStack = [];
|
|
var blockScopeStackOffset = 0;
|
|
var blockScopedVariableDeclarations;
|
|
var emitHelpers;
|
|
var onSubstituteNode = noEmitSubstitution;
|
|
var onEmitNode = noEmitNotification;
|
|
var state = 0;
|
|
var diagnostics = [];
|
|
var context = {
|
|
factory: factory,
|
|
getCompilerOptions: function () { return options; },
|
|
getEmitResolver: function () { return resolver; },
|
|
getEmitHost: function () { return host; },
|
|
getEmitHelperFactory: ts.memoize(function () { return ts.createEmitHelperFactory(context); }),
|
|
startLexicalEnvironment: startLexicalEnvironment,
|
|
suspendLexicalEnvironment: suspendLexicalEnvironment,
|
|
resumeLexicalEnvironment: resumeLexicalEnvironment,
|
|
endLexicalEnvironment: endLexicalEnvironment,
|
|
setLexicalEnvironmentFlags: setLexicalEnvironmentFlags,
|
|
getLexicalEnvironmentFlags: getLexicalEnvironmentFlags,
|
|
hoistVariableDeclaration: hoistVariableDeclaration,
|
|
hoistFunctionDeclaration: hoistFunctionDeclaration,
|
|
addInitializationStatement: addInitializationStatement,
|
|
startBlockScope: startBlockScope,
|
|
endBlockScope: endBlockScope,
|
|
addBlockScopedVariable: addBlockScopedVariable,
|
|
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_2 = nodes; _i < nodes_2.length; _i++) {
|
|
var node = nodes_2[_i];
|
|
ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node)));
|
|
}
|
|
ts.performance.mark("beforeTransform");
|
|
var transformersWithContext = transformers.map(function (t) { return t(context); });
|
|
var transformation = function (node) {
|
|
for (var _i = 0, transformersWithContext_1 = transformersWithContext; _i < transformersWithContext_1.length; _i++) {
|
|
var transform = transformersWithContext_1[_i];
|
|
node = transform(node);
|
|
}
|
|
return node;
|
|
};
|
|
state = 1;
|
|
var transformed = [];
|
|
for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
|
|
var node = nodes_3[_a];
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "transformNodes", node.kind === 305 ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
|
|
transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
state = 2;
|
|
ts.performance.mark("afterTransform");
|
|
ts.performance.measure("transformTime", "beforeTransform", "afterTransform");
|
|
return {
|
|
transformed: transformed,
|
|
substituteNode: substituteNode,
|
|
emitNodeWithNotification: emitNodeWithNotification,
|
|
isEmitNotificationEnabled: isEmitNotificationEnabled,
|
|
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(factory.createVariableDeclaration(name), 64);
|
|
if (!lexicalEnvironmentVariableDeclarations) {
|
|
lexicalEnvironmentVariableDeclarations = [decl];
|
|
}
|
|
else {
|
|
lexicalEnvironmentVariableDeclarations.push(decl);
|
|
}
|
|
if (lexicalEnvironmentFlags & 1) {
|
|
lexicalEnvironmentFlags |= 2;
|
|
}
|
|
}
|
|
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.");
|
|
ts.setEmitFlags(func, 1048576);
|
|
if (!lexicalEnvironmentFunctionDeclarations) {
|
|
lexicalEnvironmentFunctionDeclarations = [func];
|
|
}
|
|
else {
|
|
lexicalEnvironmentFunctionDeclarations.push(func);
|
|
}
|
|
}
|
|
function addInitializationStatement(node) {
|
|
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.setEmitFlags(node, 1048576);
|
|
if (!lexicalEnvironmentStatements) {
|
|
lexicalEnvironmentStatements = [node];
|
|
}
|
|
else {
|
|
lexicalEnvironmentStatements.push(node);
|
|
}
|
|
}
|
|
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;
|
|
lexicalEnvironmentStatementsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentStatements;
|
|
lexicalEnvironmentFlagsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFlags;
|
|
lexicalEnvironmentStackOffset++;
|
|
lexicalEnvironmentVariableDeclarations = undefined;
|
|
lexicalEnvironmentFunctionDeclarations = undefined;
|
|
lexicalEnvironmentStatements = undefined;
|
|
lexicalEnvironmentFlags = 0;
|
|
}
|
|
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 ||
|
|
lexicalEnvironmentStatements) {
|
|
if (lexicalEnvironmentFunctionDeclarations) {
|
|
statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
|
|
}
|
|
if (lexicalEnvironmentVariableDeclarations) {
|
|
var statement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations));
|
|
ts.setEmitFlags(statement, 1048576);
|
|
if (!statements) {
|
|
statements = [statement];
|
|
}
|
|
else {
|
|
statements.push(statement);
|
|
}
|
|
}
|
|
if (lexicalEnvironmentStatements) {
|
|
if (!statements) {
|
|
statements = __spreadArray([], lexicalEnvironmentStatements, true);
|
|
}
|
|
else {
|
|
statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
|
|
}
|
|
}
|
|
}
|
|
lexicalEnvironmentStackOffset--;
|
|
lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset];
|
|
lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset];
|
|
lexicalEnvironmentStatements = lexicalEnvironmentStatementsStack[lexicalEnvironmentStackOffset];
|
|
lexicalEnvironmentFlags = lexicalEnvironmentFlagsStack[lexicalEnvironmentStackOffset];
|
|
if (lexicalEnvironmentStackOffset === 0) {
|
|
lexicalEnvironmentVariableDeclarationsStack = [];
|
|
lexicalEnvironmentFunctionDeclarationsStack = [];
|
|
lexicalEnvironmentStatementsStack = [];
|
|
lexicalEnvironmentFlagsStack = [];
|
|
}
|
|
return statements;
|
|
}
|
|
function setLexicalEnvironmentFlags(flags, value) {
|
|
lexicalEnvironmentFlags = value ?
|
|
lexicalEnvironmentFlags | flags :
|
|
lexicalEnvironmentFlags & ~flags;
|
|
}
|
|
function getLexicalEnvironmentFlags() {
|
|
return lexicalEnvironmentFlags;
|
|
}
|
|
function startBlockScope() {
|
|
ts.Debug.assert(state > 0, "Cannot start a block scope during initialization.");
|
|
ts.Debug.assert(state < 2, "Cannot start a block scope after transformation has completed.");
|
|
blockScopedVariableDeclarationsStack[blockScopeStackOffset] = blockScopedVariableDeclarations;
|
|
blockScopeStackOffset++;
|
|
blockScopedVariableDeclarations = undefined;
|
|
}
|
|
function endBlockScope() {
|
|
ts.Debug.assert(state > 0, "Cannot end a block scope during initialization.");
|
|
ts.Debug.assert(state < 2, "Cannot end a block scope after transformation has completed.");
|
|
var statements = ts.some(blockScopedVariableDeclarations) ?
|
|
[
|
|
factory.createVariableStatement(undefined, factory.createVariableDeclarationList(blockScopedVariableDeclarations.map(function (identifier) { return factory.createVariableDeclaration(identifier); }), 1))
|
|
] : undefined;
|
|
blockScopeStackOffset--;
|
|
blockScopedVariableDeclarations = blockScopedVariableDeclarationsStack[blockScopeStackOffset];
|
|
if (blockScopeStackOffset === 0) {
|
|
blockScopedVariableDeclarationsStack = [];
|
|
}
|
|
return statements;
|
|
}
|
|
function addBlockScopedVariable(name) {
|
|
ts.Debug.assert(blockScopeStackOffset > 0, "Cannot add a block scoped variable outside of an iteration body.");
|
|
(blockScopedVariableDeclarations || (blockScopedVariableDeclarations = [])).push(name);
|
|
}
|
|
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.");
|
|
if (helper.dependencies) {
|
|
for (var _i = 0, _a = helper.dependencies; _i < _a.length; _i++) {
|
|
var h = _a[_i];
|
|
requestEmitHelper(h);
|
|
}
|
|
}
|
|
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_4 = nodes; _i < nodes_4.length; _i++) {
|
|
var node = nodes_4[_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.nullTransformationContext = {
|
|
factory: ts.factory,
|
|
getCompilerOptions: function () { return ({}); },
|
|
getEmitResolver: ts.notImplemented,
|
|
getEmitHost: ts.notImplemented,
|
|
getEmitHelperFactory: ts.notImplemented,
|
|
startLexicalEnvironment: ts.noop,
|
|
resumeLexicalEnvironment: ts.noop,
|
|
suspendLexicalEnvironment: ts.noop,
|
|
endLexicalEnvironment: ts.returnUndefined,
|
|
setLexicalEnvironmentFlags: ts.noop,
|
|
getLexicalEnvironmentFlags: function () { return 0; },
|
|
hoistVariableDeclaration: ts.noop,
|
|
hoistFunctionDeclaration: ts.noop,
|
|
addInitializationStatement: ts.noop,
|
|
startBlockScope: ts.noop,
|
|
endBlockScope: ts.returnUndefined,
|
|
addBlockScopedVariable: ts.noop,
|
|
requestEmitHelper: ts.noop,
|
|
readEmitHelpers: ts.notImplemented,
|
|
enableSubstitution: ts.noop,
|
|
enableEmitNotification: ts.noop,
|
|
isSubstitutionEnabled: ts.notImplemented,
|
|
isEmitNotificationEnabled: ts.notImplemented,
|
|
onSubstituteNode: noEmitSubstitution,
|
|
onEmitNode: noEmitNotification,
|
|
addDiagnostic: ts.noop,
|
|
};
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var brackets = createBracketsMap();
|
|
function isBuildInfoFile(file) {
|
|
return ts.fileExtensionIs(file, ".tsbuildinfo");
|
|
}
|
|
ts.isBuildInfoFile = isBuildInfoFile;
|
|
function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDtsEmit, onlyBuildInfo, includeBuildInfo) {
|
|
if (forceDtsEmit === void 0) { forceDtsEmit = false; }
|
|
var sourceFiles = ts.isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : ts.getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile, forceDtsEmit);
|
|
var options = host.getCompilerOptions();
|
|
if (ts.outFile(options)) {
|
|
var prepends = host.getPrependNodes();
|
|
if (sourceFiles.length || prepends.length) {
|
|
var bundle = ts.factory.createBundle(sourceFiles, prepends);
|
|
var result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (!onlyBuildInfo) {
|
|
for (var _a = 0, sourceFiles_1 = sourceFiles; _a < sourceFiles_1.length; _a++) {
|
|
var sourceFile = sourceFiles_1[_a];
|
|
var result = action(getOutputPathsFor(sourceFile, host, forceDtsEmit), sourceFile);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
if (includeBuildInfo) {
|
|
var buildInfoPath = getTsBuildInfoEmitOutputFilePath(options);
|
|
if (buildInfoPath)
|
|
return action({ buildInfoPath: buildInfoPath }, undefined);
|
|
}
|
|
}
|
|
}
|
|
ts.forEachEmittedFile = forEachEmittedFile;
|
|
function getTsBuildInfoEmitOutputFilePath(options) {
|
|
var configFile = options.configFilePath;
|
|
if (!ts.isIncrementalCompilation(options))
|
|
return undefined;
|
|
if (options.tsBuildInfoFile)
|
|
return options.tsBuildInfoFile;
|
|
var outPath = ts.outFile(options);
|
|
var buildInfoExtensionLess;
|
|
if (outPath) {
|
|
buildInfoExtensionLess = ts.removeFileExtension(outPath);
|
|
}
|
|
else {
|
|
if (!configFile)
|
|
return undefined;
|
|
var configFileExtensionLess = ts.removeFileExtension(configFile);
|
|
buildInfoExtensionLess = options.outDir ?
|
|
options.rootDir ?
|
|
ts.resolvePath(options.outDir, ts.getRelativePathFromDirectory(options.rootDir, configFileExtensionLess, true)) :
|
|
ts.combinePaths(options.outDir, ts.getBaseFileName(configFileExtensionLess)) :
|
|
configFileExtensionLess;
|
|
}
|
|
return buildInfoExtensionLess + ".tsbuildinfo";
|
|
}
|
|
ts.getTsBuildInfoEmitOutputFilePath = getTsBuildInfoEmitOutputFilePath;
|
|
function getOutputPathsForBundle(options, forceDtsPaths) {
|
|
var outPath = ts.outFile(options);
|
|
var jsFilePath = options.emitDeclarationOnly ? undefined : outPath;
|
|
var sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options);
|
|
var declarationFilePath = (forceDtsPaths || ts.getEmitDeclarations(options)) ? ts.removeFileExtension(outPath) + ".d.ts" : undefined;
|
|
var declarationMapPath = declarationFilePath && ts.getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined;
|
|
var buildInfoPath = getTsBuildInfoEmitOutputFilePath(options);
|
|
return { jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath, declarationMapPath: declarationMapPath, buildInfoPath: buildInfoPath };
|
|
}
|
|
ts.getOutputPathsForBundle = getOutputPathsForBundle;
|
|
function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
|
|
var options = host.getCompilerOptions();
|
|
if (sourceFile.kind === 306) {
|
|
return getOutputPathsForBundle(options, forceDtsPaths);
|
|
}
|
|
else {
|
|
var ownOutputFilePath = ts.getOwnEmitOutputFilePath(sourceFile.fileName, host, getOutputExtension(sourceFile.fileName, options));
|
|
var isJsonFile = ts.isJsonSourceFile(sourceFile);
|
|
var isJsonEmittedToSameLocation = isJsonFile &&
|
|
ts.comparePaths(sourceFile.fileName, ownOutputFilePath, host.getCurrentDirectory(), !host.useCaseSensitiveFileNames()) === 0;
|
|
var jsFilePath = options.emitDeclarationOnly || isJsonEmittedToSameLocation ? undefined : ownOutputFilePath;
|
|
var sourceMapFilePath = !jsFilePath || ts.isJsonSourceFile(sourceFile) ? undefined : getSourceMapFilePath(jsFilePath, options);
|
|
var declarationFilePath = (forceDtsPaths || (ts.getEmitDeclarations(options) && !isJsonFile)) ? ts.getDeclarationEmitOutputFilePath(sourceFile.fileName, host) : undefined;
|
|
var declarationMapPath = declarationFilePath && ts.getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined;
|
|
return { jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath, declarationMapPath: declarationMapPath, buildInfoPath: undefined };
|
|
}
|
|
}
|
|
ts.getOutputPathsFor = getOutputPathsFor;
|
|
function getSourceMapFilePath(jsFilePath, options) {
|
|
return (options.sourceMap && !options.inlineSourceMap) ? jsFilePath + ".map" : undefined;
|
|
}
|
|
function getOutputExtension(fileName, options) {
|
|
return ts.fileExtensionIs(fileName, ".json") ? ".json" :
|
|
options.jsx === 1 && ts.fileExtensionIsOneOf(fileName, [".jsx", ".tsx"]) ? ".jsx" :
|
|
ts.fileExtensionIsOneOf(fileName, [".mts", ".mjs"]) ? ".mjs" :
|
|
ts.fileExtensionIsOneOf(fileName, [".cts", ".cjs"]) ? ".cjs" :
|
|
".js";
|
|
}
|
|
ts.getOutputExtension = getOutputExtension;
|
|
function getOutputPathWithoutChangingExt(inputFileName, configFile, ignoreCase, outputDir, getCommonSourceDirectory) {
|
|
return outputDir ?
|
|
ts.resolvePath(outputDir, ts.getRelativePathFromDirectory(getCommonSourceDirectory ? getCommonSourceDirectory() : getCommonSourceDirectoryOfConfig(configFile, ignoreCase), inputFileName, ignoreCase)) :
|
|
inputFileName;
|
|
}
|
|
function getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory) {
|
|
return ts.changeExtension(getOutputPathWithoutChangingExt(inputFileName, configFile, ignoreCase, configFile.options.declarationDir || configFile.options.outDir, getCommonSourceDirectory), ts.getDeclarationEmitExtensionForPath(inputFileName));
|
|
}
|
|
ts.getOutputDeclarationFileName = getOutputDeclarationFileName;
|
|
function getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory) {
|
|
if (configFile.options.emitDeclarationOnly)
|
|
return undefined;
|
|
var isJsonFile = ts.fileExtensionIs(inputFileName, ".json");
|
|
var outputFileName = ts.changeExtension(getOutputPathWithoutChangingExt(inputFileName, configFile, ignoreCase, configFile.options.outDir, getCommonSourceDirectory), getOutputExtension(inputFileName, configFile.options));
|
|
return !isJsonFile || ts.comparePaths(inputFileName, outputFileName, ts.Debug.checkDefined(configFile.options.configFilePath), ignoreCase) !== 0 ?
|
|
outputFileName :
|
|
undefined;
|
|
}
|
|
function createAddOutput() {
|
|
var outputs;
|
|
return { addOutput: addOutput, getOutputs: getOutputs };
|
|
function addOutput(path) {
|
|
if (path) {
|
|
(outputs || (outputs = [])).push(path);
|
|
}
|
|
}
|
|
function getOutputs() {
|
|
return outputs || ts.emptyArray;
|
|
}
|
|
}
|
|
function getSingleOutputFileNames(configFile, addOutput) {
|
|
var _a = getOutputPathsForBundle(configFile.options, false), jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath, declarationMapPath = _a.declarationMapPath, buildInfoPath = _a.buildInfoPath;
|
|
addOutput(jsFilePath);
|
|
addOutput(sourceMapFilePath);
|
|
addOutput(declarationFilePath);
|
|
addOutput(declarationMapPath);
|
|
addOutput(buildInfoPath);
|
|
}
|
|
function getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory) {
|
|
if (ts.isDeclarationFileName(inputFileName))
|
|
return;
|
|
var js = getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory);
|
|
addOutput(js);
|
|
if (ts.fileExtensionIs(inputFileName, ".json"))
|
|
return;
|
|
if (js && configFile.options.sourceMap) {
|
|
addOutput("".concat(js, ".map"));
|
|
}
|
|
if (ts.getEmitDeclarations(configFile.options)) {
|
|
var dts = getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory);
|
|
addOutput(dts);
|
|
if (configFile.options.declarationMap) {
|
|
addOutput("".concat(dts, ".map"));
|
|
}
|
|
}
|
|
}
|
|
function getCommonSourceDirectory(options, emittedFiles, currentDirectory, getCanonicalFileName, checkSourceFilesBelongToPath) {
|
|
var commonSourceDirectory;
|
|
if (options.rootDir) {
|
|
commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, currentDirectory);
|
|
checkSourceFilesBelongToPath === null || checkSourceFilesBelongToPath === void 0 ? void 0 : checkSourceFilesBelongToPath(options.rootDir);
|
|
}
|
|
else if (options.composite && options.configFilePath) {
|
|
commonSourceDirectory = ts.getDirectoryPath(ts.normalizeSlashes(options.configFilePath));
|
|
checkSourceFilesBelongToPath === null || checkSourceFilesBelongToPath === void 0 ? void 0 : checkSourceFilesBelongToPath(commonSourceDirectory);
|
|
}
|
|
else {
|
|
commonSourceDirectory = ts.computeCommonSourceDirectoryOfFilenames(emittedFiles(), currentDirectory, getCanonicalFileName);
|
|
}
|
|
if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) {
|
|
commonSourceDirectory += ts.directorySeparator;
|
|
}
|
|
return commonSourceDirectory;
|
|
}
|
|
ts.getCommonSourceDirectory = getCommonSourceDirectory;
|
|
function getCommonSourceDirectoryOfConfig(_a, ignoreCase) {
|
|
var options = _a.options, fileNames = _a.fileNames;
|
|
return getCommonSourceDirectory(options, function () { return ts.filter(fileNames, function (file) { return !(options.noEmitForJsFiles && ts.fileExtensionIsOneOf(file, ts.supportedJSExtensionsFlat)) && !ts.isDeclarationFileName(file); }); }, ts.getDirectoryPath(ts.normalizeSlashes(ts.Debug.checkDefined(options.configFilePath))), ts.createGetCanonicalFileName(!ignoreCase));
|
|
}
|
|
ts.getCommonSourceDirectoryOfConfig = getCommonSourceDirectoryOfConfig;
|
|
function getAllProjectOutputs(configFile, ignoreCase) {
|
|
var _a = createAddOutput(), addOutput = _a.addOutput, getOutputs = _a.getOutputs;
|
|
if (ts.outFile(configFile.options)) {
|
|
getSingleOutputFileNames(configFile, addOutput);
|
|
}
|
|
else {
|
|
var getCommonSourceDirectory_1 = ts.memoize(function () { return getCommonSourceDirectoryOfConfig(configFile, ignoreCase); });
|
|
for (var _b = 0, _c = configFile.fileNames; _b < _c.length; _b++) {
|
|
var inputFileName = _c[_b];
|
|
getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory_1);
|
|
}
|
|
addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options));
|
|
}
|
|
return getOutputs();
|
|
}
|
|
ts.getAllProjectOutputs = getAllProjectOutputs;
|
|
function getOutputFileNames(commandLine, inputFileName, ignoreCase) {
|
|
inputFileName = ts.normalizePath(inputFileName);
|
|
ts.Debug.assert(ts.contains(commandLine.fileNames, inputFileName), "Expected fileName to be present in command line");
|
|
var _a = createAddOutput(), addOutput = _a.addOutput, getOutputs = _a.getOutputs;
|
|
if (ts.outFile(commandLine.options)) {
|
|
getSingleOutputFileNames(commandLine, addOutput);
|
|
}
|
|
else {
|
|
getOwnOutputFileNames(commandLine, inputFileName, ignoreCase, addOutput);
|
|
}
|
|
return getOutputs();
|
|
}
|
|
ts.getOutputFileNames = getOutputFileNames;
|
|
function getFirstProjectOutput(configFile, ignoreCase) {
|
|
if (ts.outFile(configFile.options)) {
|
|
var jsFilePath = getOutputPathsForBundle(configFile.options, false).jsFilePath;
|
|
return ts.Debug.checkDefined(jsFilePath, "project ".concat(configFile.options.configFilePath, " expected to have at least one output"));
|
|
}
|
|
var getCommonSourceDirectory = ts.memoize(function () { return getCommonSourceDirectoryOfConfig(configFile, ignoreCase); });
|
|
for (var _a = 0, _b = configFile.fileNames; _a < _b.length; _a++) {
|
|
var inputFileName = _b[_a];
|
|
if (ts.isDeclarationFileName(inputFileName))
|
|
continue;
|
|
var jsFilePath = getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory);
|
|
if (jsFilePath)
|
|
return jsFilePath;
|
|
if (ts.fileExtensionIs(inputFileName, ".json"))
|
|
continue;
|
|
if (ts.getEmitDeclarations(configFile.options)) {
|
|
return getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory);
|
|
}
|
|
}
|
|
var buildInfoPath = getTsBuildInfoEmitOutputFilePath(configFile.options);
|
|
if (buildInfoPath)
|
|
return buildInfoPath;
|
|
return ts.Debug.fail("project ".concat(configFile.options.configFilePath, " expected to have at least one output"));
|
|
}
|
|
ts.getFirstProjectOutput = getFirstProjectOutput;
|
|
function emitFiles(resolver, host, targetSourceFile, _a, emitOnlyDtsFiles, onlyBuildInfo, forceDtsEmit) {
|
|
var scriptTransformers = _a.scriptTransformers, declarationTransformers = _a.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 = ts.getNewLineCharacter(compilerOptions, function () { return host.getNewLine(); });
|
|
var writer = ts.createTextWriter(newLine);
|
|
var _b = ts.performance.createTimer("printTime", "beforePrint", "afterPrint"), enter = _b.enter, exit = _b.exit;
|
|
var bundleBuildInfo;
|
|
var emitSkipped = false;
|
|
enter();
|
|
forEachEmittedFile(host, emitSourceFileOrBundle, ts.getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit), forceDtsEmit, onlyBuildInfo, !targetSourceFile);
|
|
exit();
|
|
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, buildInfoPath = _a.buildInfoPath;
|
|
var buildInfoDirectory;
|
|
if (buildInfoPath && sourceFileOrBundle && ts.isBundle(sourceFileOrBundle)) {
|
|
buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory()));
|
|
bundleBuildInfo = {
|
|
commonSourceDirectory: relativeToBuildInfo(host.getCommonSourceDirectory()),
|
|
sourceFiles: sourceFileOrBundle.sourceFiles.map(function (file) { return relativeToBuildInfo(ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory())); })
|
|
};
|
|
}
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "emitJsFileOrBundle", { jsFilePath: jsFilePath });
|
|
emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath, relativeToBuildInfo);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "emitDeclarationFileOrBundle", { declarationFilePath: declarationFilePath });
|
|
emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath, relativeToBuildInfo);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "emitBuildInfo", { buildInfoPath: buildInfoPath });
|
|
emitBuildInfo(bundleBuildInfo, buildInfoPath);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
if (!emitSkipped && emittedFilesList) {
|
|
if (!emitOnlyDtsFiles) {
|
|
if (jsFilePath) {
|
|
emittedFilesList.push(jsFilePath);
|
|
}
|
|
if (sourceMapFilePath) {
|
|
emittedFilesList.push(sourceMapFilePath);
|
|
}
|
|
if (buildInfoPath) {
|
|
emittedFilesList.push(buildInfoPath);
|
|
}
|
|
}
|
|
if (declarationFilePath) {
|
|
emittedFilesList.push(declarationFilePath);
|
|
}
|
|
if (declarationMapPath) {
|
|
emittedFilesList.push(declarationMapPath);
|
|
}
|
|
}
|
|
function relativeToBuildInfo(path) {
|
|
return ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(buildInfoDirectory, path, host.getCanonicalFileName));
|
|
}
|
|
}
|
|
function emitBuildInfo(bundle, buildInfoPath) {
|
|
if (!buildInfoPath || targetSourceFile || emitSkipped)
|
|
return;
|
|
var program = host.getProgramBuildInfo();
|
|
if (host.isEmitBlocked(buildInfoPath)) {
|
|
emitSkipped = true;
|
|
return;
|
|
}
|
|
var version = ts.version;
|
|
var buildInfo = { bundle: bundle, program: program, version: version };
|
|
ts.writeFile(host, emitterDiagnostics, buildInfoPath, getBuildInfoText(buildInfo), false, undefined, { buildInfo: buildInfo });
|
|
}
|
|
function emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath, relativeToBuildInfo) {
|
|
if (!sourceFileOrBundle || emitOnlyDtsFiles || !jsFilePath) {
|
|
return;
|
|
}
|
|
if (host.isEmitBlocked(jsFilePath) || compilerOptions.noEmit) {
|
|
emitSkipped = true;
|
|
return;
|
|
}
|
|
var transform = ts.transformNodes(resolver, host, ts.factory, compilerOptions, [sourceFileOrBundle], scriptTransformers, false);
|
|
var printerOptions = {
|
|
removeComments: compilerOptions.removeComments,
|
|
newLine: compilerOptions.newLine,
|
|
noEmitHelpers: compilerOptions.noEmitHelpers,
|
|
module: compilerOptions.module,
|
|
target: compilerOptions.target,
|
|
sourceMap: compilerOptions.sourceMap,
|
|
inlineSourceMap: compilerOptions.inlineSourceMap,
|
|
inlineSources: compilerOptions.inlineSources,
|
|
extendedDiagnostics: compilerOptions.extendedDiagnostics,
|
|
writeBundleFileInfo: !!bundleBuildInfo,
|
|
relativeToBuildInfo: relativeToBuildInfo
|
|
};
|
|
var printer = createPrinter(printerOptions, {
|
|
hasGlobalName: resolver.hasGlobalName,
|
|
onEmitNode: transform.emitNodeWithNotification,
|
|
isEmitNotificationEnabled: transform.isEmitNotificationEnabled,
|
|
substituteNode: transform.substituteNode,
|
|
});
|
|
ts.Debug.assert(transform.transformed.length === 1, "Should only see one output from the transform");
|
|
printSourceFileOrBundle(jsFilePath, sourceMapFilePath, transform, printer, compilerOptions);
|
|
transform.dispose();
|
|
if (bundleBuildInfo)
|
|
bundleBuildInfo.js = printer.bundleFileInfo;
|
|
}
|
|
function emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath, relativeToBuildInfo) {
|
|
if (!sourceFileOrBundle)
|
|
return;
|
|
if (!declarationFilePath) {
|
|
if (emitOnlyDtsFiles || compilerOptions.emitDeclarationOnly)
|
|
emitSkipped = true;
|
|
return;
|
|
}
|
|
var sourceFiles = ts.isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles;
|
|
var filesForEmit = forceDtsEmit ? sourceFiles : ts.filter(sourceFiles, ts.isSourceFileNotJson);
|
|
var inputListOrBundle = ts.outFile(compilerOptions) ? [ts.factory.createBundle(filesForEmit, !ts.isSourceFile(sourceFileOrBundle) ? sourceFileOrBundle.prepends : undefined)] : filesForEmit;
|
|
if (emitOnlyDtsFiles && !ts.getEmitDeclarations(compilerOptions)) {
|
|
filesForEmit.forEach(collectLinkedAliases);
|
|
}
|
|
var declarationTransform = ts.transformNodes(resolver, host, ts.factory, compilerOptions, inputListOrBundle, 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 printerOptions = {
|
|
removeComments: compilerOptions.removeComments,
|
|
newLine: compilerOptions.newLine,
|
|
noEmitHelpers: true,
|
|
module: compilerOptions.module,
|
|
target: compilerOptions.target,
|
|
sourceMap: !forceDtsEmit && compilerOptions.declarationMap,
|
|
inlineSourceMap: compilerOptions.inlineSourceMap,
|
|
extendedDiagnostics: compilerOptions.extendedDiagnostics,
|
|
onlyPrintJsDocStyle: true,
|
|
writeBundleFileInfo: !!bundleBuildInfo,
|
|
recordInternalSection: !!bundleBuildInfo,
|
|
relativeToBuildInfo: relativeToBuildInfo
|
|
};
|
|
var declarationPrinter = createPrinter(printerOptions, {
|
|
hasGlobalName: resolver.hasGlobalName,
|
|
onEmitNode: declarationTransform.emitNodeWithNotification,
|
|
isEmitNotificationEnabled: declarationTransform.isEmitNotificationEnabled,
|
|
substituteNode: declarationTransform.substituteNode,
|
|
});
|
|
var declBlocked = (!!declarationTransform.diagnostics && !!declarationTransform.diagnostics.length) || !!host.isEmitBlocked(declarationFilePath) || !!compilerOptions.noEmit;
|
|
emitSkipped = emitSkipped || declBlocked;
|
|
if (!declBlocked || forceDtsEmit) {
|
|
ts.Debug.assert(declarationTransform.transformed.length === 1, "Should only see one output from the decl transform");
|
|
printSourceFileOrBundle(declarationFilePath, declarationMapPath, declarationTransform, declarationPrinter, {
|
|
sourceMap: printerOptions.sourceMap,
|
|
sourceRoot: compilerOptions.sourceRoot,
|
|
mapRoot: compilerOptions.mapRoot,
|
|
extendedDiagnostics: compilerOptions.extendedDiagnostics,
|
|
});
|
|
}
|
|
declarationTransform.dispose();
|
|
if (bundleBuildInfo)
|
|
bundleBuildInfo.dts = declarationPrinter.bundleFileInfo;
|
|
}
|
|
function collectLinkedAliases(node) {
|
|
if (ts.isExportAssignment(node)) {
|
|
if (node.expression.kind === 79) {
|
|
resolver.collectLinkedAliases(node.expression, true);
|
|
}
|
|
return;
|
|
}
|
|
else if (ts.isExportSpecifier(node)) {
|
|
resolver.collectLinkedAliases(node.propertyName || node.name, true);
|
|
return;
|
|
}
|
|
ts.forEachChild(node, collectLinkedAliases);
|
|
}
|
|
function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, transform, printer, mapOptions) {
|
|
var sourceFileOrBundle = transform.transformed[0];
|
|
var bundle = sourceFileOrBundle.kind === 306 ? sourceFileOrBundle : undefined;
|
|
var sourceFile = sourceFileOrBundle.kind === 305 ? sourceFileOrBundle : undefined;
|
|
var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
|
|
var sourceMapGenerator;
|
|
if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
|
|
sourceMapGenerator = ts.createSourceMapGenerator(host, ts.getBaseFileName(ts.normalizeSlashes(jsFilePath)), getSourceRoot(mapOptions), getSourceMapDirectory(mapOptions, jsFilePath, sourceFile), mapOptions);
|
|
}
|
|
if (bundle) {
|
|
printer.writeBundle(bundle, writer, sourceMapGenerator);
|
|
}
|
|
else {
|
|
printer.writeFile(sourceFile, writer, sourceMapGenerator);
|
|
}
|
|
var sourceMapUrlPos;
|
|
if (sourceMapGenerator) {
|
|
if (sourceMapDataList) {
|
|
sourceMapDataList.push({
|
|
inputSourceFileNames: sourceMapGenerator.getSources(),
|
|
sourceMap: sourceMapGenerator.toJSON()
|
|
});
|
|
}
|
|
var sourceMappingURL = getSourceMappingURL(mapOptions, sourceMapGenerator, jsFilePath, sourceMapFilePath, sourceFile);
|
|
if (sourceMappingURL) {
|
|
if (!writer.isAtStartOfLine())
|
|
writer.rawWrite(newLine);
|
|
sourceMapUrlPos = writer.getTextPos();
|
|
writer.writeComment("//# ".concat("sourceMappingURL", "=").concat(sourceMappingURL));
|
|
}
|
|
if (sourceMapFilePath) {
|
|
var sourceMap = sourceMapGenerator.toString();
|
|
ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, sourceMap, false, sourceFiles);
|
|
if (printer.bundleFileInfo)
|
|
printer.bundleFileInfo.mapHash = ts.computeSignature(sourceMap, ts.maybeBind(host, host.createHash));
|
|
}
|
|
}
|
|
else {
|
|
writer.writeLine();
|
|
}
|
|
var text = writer.getText();
|
|
ts.writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, { sourceMapUrlPos: sourceMapUrlPos, diagnostics: transform.diagnostics });
|
|
if (printer.bundleFileInfo)
|
|
printer.bundleFileInfo.hash = ts.computeSignature(text, ts.maybeBind(host, host.createHash));
|
|
writer.clear();
|
|
}
|
|
function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
|
|
return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
|
|
&& (sourceFileOrBundle.kind !== 305 || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json"));
|
|
}
|
|
function getSourceRoot(mapOptions) {
|
|
var sourceRoot = ts.normalizeSlashes(mapOptions.sourceRoot || "");
|
|
return sourceRoot ? ts.ensureTrailingDirectorySeparator(sourceRoot) : sourceRoot;
|
|
}
|
|
function getSourceMapDirectory(mapOptions, filePath, sourceFile) {
|
|
if (mapOptions.sourceRoot)
|
|
return host.getCommonSourceDirectory();
|
|
if (mapOptions.mapRoot) {
|
|
var sourceMapDir = ts.normalizeSlashes(mapOptions.mapRoot);
|
|
if (sourceFile) {
|
|
sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFile.fileName, host, sourceMapDir));
|
|
}
|
|
if (ts.getRootLength(sourceMapDir) === 0) {
|
|
sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
|
|
}
|
|
return sourceMapDir;
|
|
}
|
|
return ts.getDirectoryPath(ts.normalizePath(filePath));
|
|
}
|
|
function getSourceMappingURL(mapOptions, sourceMapGenerator, filePath, sourceMapFilePath, sourceFile) {
|
|
if (mapOptions.inlineSourceMap) {
|
|
var sourceMapText = sourceMapGenerator.toString();
|
|
var base64SourceMapText = ts.base64encode(ts.sys, sourceMapText);
|
|
return "data:application/json;base64,".concat(base64SourceMapText);
|
|
}
|
|
var sourceMapFile = ts.getBaseFileName(ts.normalizeSlashes(ts.Debug.checkDefined(sourceMapFilePath)));
|
|
if (mapOptions.mapRoot) {
|
|
var sourceMapDir = ts.normalizeSlashes(mapOptions.mapRoot);
|
|
if (sourceFile) {
|
|
sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFile.fileName, host, sourceMapDir));
|
|
}
|
|
if (ts.getRootLength(sourceMapDir) === 0) {
|
|
sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
|
|
return encodeURI(ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(filePath)), ts.combinePaths(sourceMapDir, sourceMapFile), host.getCurrentDirectory(), host.getCanonicalFileName, true));
|
|
}
|
|
else {
|
|
return encodeURI(ts.combinePaths(sourceMapDir, sourceMapFile));
|
|
}
|
|
}
|
|
return encodeURI(sourceMapFile);
|
|
}
|
|
}
|
|
ts.emitFiles = emitFiles;
|
|
function getBuildInfoText(buildInfo) {
|
|
return JSON.stringify(buildInfo);
|
|
}
|
|
ts.getBuildInfoText = getBuildInfoText;
|
|
function getBuildInfo(buildInfoText) {
|
|
return JSON.parse(buildInfoText);
|
|
}
|
|
ts.getBuildInfo = getBuildInfo;
|
|
ts.notImplementedResolver = {
|
|
hasGlobalName: ts.notImplemented,
|
|
getReferencedExportContainer: ts.notImplemented,
|
|
getReferencedImportDeclaration: ts.notImplemented,
|
|
getReferencedDeclarationWithCollidingName: ts.notImplemented,
|
|
isDeclarationWithCollidingName: ts.notImplemented,
|
|
isValueAliasDeclaration: ts.notImplemented,
|
|
isReferencedAliasDeclaration: ts.notImplemented,
|
|
isTopLevelValueImportEqualsWithEntityName: ts.notImplemented,
|
|
getNodeCheckFlags: ts.notImplemented,
|
|
isDeclarationVisible: ts.notImplemented,
|
|
isLateBound: function (_node) { return false; },
|
|
collectLinkedAliases: ts.notImplemented,
|
|
isImplementationOfOverload: ts.notImplemented,
|
|
isRequiredInitializedParameter: ts.notImplemented,
|
|
isOptionalUninitializedParameterProperty: ts.notImplemented,
|
|
isExpandoFunctionDeclaration: ts.notImplemented,
|
|
getPropertiesOfContainerFunction: ts.notImplemented,
|
|
createTypeOfDeclaration: ts.notImplemented,
|
|
createReturnTypeOfSignatureDeclaration: ts.notImplemented,
|
|
createTypeOfExpression: ts.notImplemented,
|
|
createLiteralConstValue: ts.notImplemented,
|
|
isSymbolAccessible: ts.notImplemented,
|
|
isEntityNameVisible: ts.notImplemented,
|
|
getConstantValue: ts.notImplemented,
|
|
getReferencedValueDeclaration: ts.notImplemented,
|
|
getTypeReferenceSerializationKind: ts.notImplemented,
|
|
isOptionalParameter: ts.notImplemented,
|
|
moduleExportsSomeValue: ts.notImplemented,
|
|
isArgumentsLocalBinding: ts.notImplemented,
|
|
getExternalModuleFileFromDeclaration: ts.notImplemented,
|
|
getTypeReferenceDirectivesForEntityName: ts.notImplemented,
|
|
getTypeReferenceDirectivesForSymbol: ts.notImplemented,
|
|
isLiteralConstDeclaration: ts.notImplemented,
|
|
getJsxFactoryEntity: ts.notImplemented,
|
|
getJsxFragmentFactoryEntity: ts.notImplemented,
|
|
getAllAccessorDeclarations: ts.notImplemented,
|
|
getSymbolOfExternalModuleSpecifier: ts.notImplemented,
|
|
isBindingCapturedByNode: ts.notImplemented,
|
|
getDeclarationStatementsForSourceFile: ts.notImplemented,
|
|
isImportRequiredByAugmentation: ts.notImplemented,
|
|
};
|
|
function createSourceFilesFromBundleBuildInfo(bundle, buildInfoDirectory, host) {
|
|
var _a;
|
|
var jsBundle = ts.Debug.checkDefined(bundle.js);
|
|
var prologueMap = ((_a = jsBundle.sources) === null || _a === void 0 ? void 0 : _a.prologues) && ts.arrayToMap(jsBundle.sources.prologues, function (prologueInfo) { return prologueInfo.file; });
|
|
return bundle.sourceFiles.map(function (fileName, index) {
|
|
var _a, _b;
|
|
var prologueInfo = prologueMap === null || prologueMap === void 0 ? void 0 : prologueMap.get(index);
|
|
var statements = prologueInfo === null || prologueInfo === void 0 ? void 0 : prologueInfo.directives.map(function (directive) {
|
|
var literal = ts.setTextRange(ts.factory.createStringLiteral(directive.expression.text), directive.expression);
|
|
var statement = ts.setTextRange(ts.factory.createExpressionStatement(literal), directive);
|
|
ts.setParent(literal, statement);
|
|
return statement;
|
|
});
|
|
var eofToken = ts.factory.createToken(1);
|
|
var sourceFile = ts.factory.createSourceFile(statements !== null && statements !== void 0 ? statements : [], eofToken, 0);
|
|
sourceFile.fileName = ts.getRelativePathFromDirectory(host.getCurrentDirectory(), ts.getNormalizedAbsolutePath(fileName, buildInfoDirectory), !host.useCaseSensitiveFileNames());
|
|
sourceFile.text = (_a = prologueInfo === null || prologueInfo === void 0 ? void 0 : prologueInfo.text) !== null && _a !== void 0 ? _a : "";
|
|
ts.setTextRangePosWidth(sourceFile, 0, (_b = prologueInfo === null || prologueInfo === void 0 ? void 0 : prologueInfo.text.length) !== null && _b !== void 0 ? _b : 0);
|
|
ts.setEachParent(sourceFile.statements, sourceFile);
|
|
ts.setTextRangePosWidth(eofToken, sourceFile.end, 0);
|
|
ts.setParent(eofToken, sourceFile);
|
|
return sourceFile;
|
|
});
|
|
}
|
|
function emitUsingBuildInfo(config, host, getCommandLine, customTransformers) {
|
|
var createHash = ts.maybeBind(host, host.createHash);
|
|
var _a = getOutputPathsForBundle(config.options, false), buildInfoPath = _a.buildInfoPath, jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath, declarationMapPath = _a.declarationMapPath;
|
|
var buildInfo;
|
|
if (host.getBuildInfo) {
|
|
var hostBuildInfo = host.getBuildInfo(buildInfoPath, config.options.configFilePath);
|
|
if (!hostBuildInfo)
|
|
return buildInfoPath;
|
|
buildInfo = hostBuildInfo;
|
|
}
|
|
else {
|
|
var buildInfoText = host.readFile(buildInfoPath);
|
|
if (!buildInfoText)
|
|
return buildInfoPath;
|
|
buildInfo = getBuildInfo(buildInfoText);
|
|
}
|
|
if (!buildInfo.bundle || !buildInfo.bundle.js || (declarationFilePath && !buildInfo.bundle.dts))
|
|
return buildInfoPath;
|
|
var jsFileText = host.readFile(ts.Debug.checkDefined(jsFilePath));
|
|
if (!jsFileText)
|
|
return jsFilePath;
|
|
if (ts.computeSignature(jsFileText, createHash) !== buildInfo.bundle.js.hash)
|
|
return jsFilePath;
|
|
var sourceMapText = sourceMapFilePath && host.readFile(sourceMapFilePath);
|
|
if ((sourceMapFilePath && !sourceMapText) || config.options.inlineSourceMap)
|
|
return sourceMapFilePath || "inline sourcemap decoding";
|
|
if (sourceMapFilePath && ts.computeSignature(sourceMapText, createHash) !== buildInfo.bundle.js.mapHash)
|
|
return sourceMapFilePath;
|
|
var declarationText = declarationFilePath && host.readFile(declarationFilePath);
|
|
if (declarationFilePath && !declarationText)
|
|
return declarationFilePath;
|
|
if (declarationFilePath && ts.computeSignature(declarationText, createHash) !== buildInfo.bundle.dts.hash)
|
|
return declarationFilePath;
|
|
var declarationMapText = declarationMapPath && host.readFile(declarationMapPath);
|
|
if ((declarationMapPath && !declarationMapText) || config.options.inlineSourceMap)
|
|
return declarationMapPath || "inline sourcemap decoding";
|
|
if (declarationMapPath && ts.computeSignature(declarationMapText, createHash) !== buildInfo.bundle.dts.mapHash)
|
|
return declarationMapPath;
|
|
var buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory()));
|
|
var ownPrependInput = ts.createInputFiles(jsFileText, declarationText, sourceMapFilePath, sourceMapText, declarationMapPath, declarationMapText, jsFilePath, declarationFilePath, buildInfoPath, buildInfo, true);
|
|
var outputFiles = [];
|
|
var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
|
|
var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
|
|
var changedDtsText;
|
|
var changedDtsData;
|
|
var emitHost = {
|
|
getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
|
|
getCanonicalFileName: host.getCanonicalFileName,
|
|
getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
|
|
getCompilerOptions: function () { return config.options; },
|
|
getCurrentDirectory: function () { return host.getCurrentDirectory(); },
|
|
getNewLine: function () { return host.getNewLine(); },
|
|
getSourceFile: ts.returnUndefined,
|
|
getSourceFileByPath: ts.returnUndefined,
|
|
getSourceFiles: function () { return sourceFilesForJsEmit; },
|
|
getLibFileFromReference: ts.notImplemented,
|
|
isSourceFileFromExternalLibrary: ts.returnFalse,
|
|
getResolvedProjectReferenceToRedirect: ts.returnUndefined,
|
|
getProjectReferenceRedirect: ts.returnUndefined,
|
|
isSourceOfProjectReferenceRedirect: ts.returnFalse,
|
|
writeFile: function (name, text, writeByteOrderMark, _onError, _sourceFiles, data) {
|
|
switch (name) {
|
|
case jsFilePath:
|
|
if (jsFileText === text)
|
|
return;
|
|
break;
|
|
case sourceMapFilePath:
|
|
if (sourceMapText === text)
|
|
return;
|
|
break;
|
|
case buildInfoPath:
|
|
var newBuildInfo = data.buildInfo;
|
|
newBuildInfo.program = buildInfo.program;
|
|
if (newBuildInfo.program && changedDtsText !== undefined && config.options.composite) {
|
|
newBuildInfo.program.outSignature = ts.computeSignature(changedDtsText, createHash, changedDtsData);
|
|
}
|
|
var _a = buildInfo.bundle, js = _a.js, dts = _a.dts, sourceFiles = _a.sourceFiles;
|
|
newBuildInfo.bundle.js.sources = js.sources;
|
|
if (dts) {
|
|
newBuildInfo.bundle.dts.sources = dts.sources;
|
|
}
|
|
newBuildInfo.bundle.sourceFiles = sourceFiles;
|
|
outputFiles.push({ name: name, text: getBuildInfoText(newBuildInfo), writeByteOrderMark: writeByteOrderMark, buildInfo: newBuildInfo });
|
|
return;
|
|
case declarationFilePath:
|
|
if (declarationText === text)
|
|
return;
|
|
changedDtsText = text;
|
|
changedDtsData = data;
|
|
break;
|
|
case declarationMapPath:
|
|
if (declarationMapText === text)
|
|
return;
|
|
break;
|
|
default:
|
|
ts.Debug.fail("Unexpected path: ".concat(name));
|
|
}
|
|
outputFiles.push({ name: name, text: text, writeByteOrderMark: writeByteOrderMark });
|
|
},
|
|
isEmitBlocked: ts.returnFalse,
|
|
readFile: function (f) { return host.readFile(f); },
|
|
fileExists: function (f) { return host.fileExists(f); },
|
|
useCaseSensitiveFileNames: function () { return host.useCaseSensitiveFileNames(); },
|
|
getProgramBuildInfo: ts.returnUndefined,
|
|
getSourceFileFromReference: ts.returnUndefined,
|
|
redirectTargetsMap: ts.createMultiMap(),
|
|
getFileIncludeReasons: ts.notImplemented,
|
|
createHash: createHash,
|
|
};
|
|
emitFiles(ts.notImplementedResolver, emitHost, undefined, ts.getTransformers(config.options, customTransformers));
|
|
return outputFiles;
|
|
}
|
|
ts.emitUsingBuildInfo = emitUsingBuildInfo;
|
|
function createPrinter(printerOptions, handlers) {
|
|
if (printerOptions === void 0) { printerOptions = {}; }
|
|
if (handlers === void 0) { handlers = {}; }
|
|
var hasGlobalName = handlers.hasGlobalName, _a = handlers.onEmitNode, onEmitNode = _a === void 0 ? ts.noEmitNotification : _a, isEmitNotificationEnabled = handlers.isEmitNotificationEnabled, _b = handlers.substituteNode, substituteNode = _b === void 0 ? ts.noEmitSubstitution : _b, onBeforeEmitNode = handlers.onBeforeEmitNode, onAfterEmitNode = handlers.onAfterEmitNode, onBeforeEmitNodeArray = handlers.onBeforeEmitNodeArray, onAfterEmitNodeArray = handlers.onAfterEmitNodeArray, onBeforeEmitToken = handlers.onBeforeEmitToken, onAfterEmitToken = handlers.onAfterEmitToken;
|
|
var extendedDiagnostics = !!printerOptions.extendedDiagnostics;
|
|
var newLine = ts.getNewLineCharacter(printerOptions);
|
|
var moduleKind = ts.getEmitModuleKind(printerOptions);
|
|
var bundledHelpers = new ts.Map();
|
|
var currentSourceFile;
|
|
var nodeIdToGeneratedName;
|
|
var autoGeneratedIdToGeneratedName;
|
|
var generatedNames;
|
|
var tempFlagsStack;
|
|
var tempFlags;
|
|
var reservedNamesStack;
|
|
var reservedNames;
|
|
var preserveSourceNewlines = printerOptions.preserveSourceNewlines;
|
|
var nextListElementPos;
|
|
var writer;
|
|
var ownWriter;
|
|
var write = writeBase;
|
|
var isOwnFileEmit;
|
|
var bundleFileInfo = printerOptions.writeBundleFileInfo ? { sections: [] } : undefined;
|
|
var relativeToBuildInfo = bundleFileInfo ? ts.Debug.checkDefined(printerOptions.relativeToBuildInfo) : undefined;
|
|
var recordInternalSection = printerOptions.recordInternalSection;
|
|
var sourceFileTextPos = 0;
|
|
var sourceFileTextKind = "text";
|
|
var sourceMapsDisabled = true;
|
|
var sourceMapGenerator;
|
|
var sourceMapSource;
|
|
var sourceMapSourceIndex = -1;
|
|
var mostRecentlyAddedSourceMapSource;
|
|
var mostRecentlyAddedSourceMapSourceIndex = -1;
|
|
var containerPos = -1;
|
|
var containerEnd = -1;
|
|
var declarationListContainerEnd = -1;
|
|
var currentLineMap;
|
|
var detachedCommentsInfo;
|
|
var hasWrittenComment = false;
|
|
var commentsDisabled = !!printerOptions.removeComments;
|
|
var lastSubstitution;
|
|
var currentParenthesizerRule;
|
|
var _c = ts.performance.createTimerIf(extendedDiagnostics, "commentTime", "beforeComment", "afterComment"), enterComment = _c.enter, exitComment = _c.exit;
|
|
var parenthesizer = ts.factory.parenthesizer;
|
|
var typeArgumentParenthesizerRuleSelector = {
|
|
select: function (index) { return index === 0 ? parenthesizer.parenthesizeLeadingTypeArgument : undefined; }
|
|
};
|
|
var emitBinaryExpression = createEmitBinaryExpression();
|
|
reset();
|
|
return {
|
|
printNode: printNode,
|
|
printList: printList,
|
|
printFile: printFile,
|
|
printBundle: printBundle,
|
|
writeNode: writeNode,
|
|
writeList: writeList,
|
|
writeFile: writeFile,
|
|
writeBundle: writeBundle,
|
|
bundleFileInfo: bundleFileInfo
|
|
};
|
|
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 305: return printFile(node);
|
|
case 306: return printBundle(node);
|
|
case 307: 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(), undefined);
|
|
return endPrint();
|
|
}
|
|
function printFile(sourceFile) {
|
|
writeFile(sourceFile, beginPrint(), undefined);
|
|
return endPrint();
|
|
}
|
|
function printUnparsedSource(unparsed) {
|
|
writeUnparsedSource(unparsed, beginPrint());
|
|
return endPrint();
|
|
}
|
|
function writeNode(hint, node, sourceFile, output) {
|
|
var previousWriter = writer;
|
|
setWriter(output, undefined);
|
|
print(hint, node, sourceFile);
|
|
reset();
|
|
writer = previousWriter;
|
|
}
|
|
function writeList(format, nodes, sourceFile, output) {
|
|
var previousWriter = writer;
|
|
setWriter(output, undefined);
|
|
if (sourceFile) {
|
|
setSourceFile(sourceFile);
|
|
}
|
|
emitList(undefined, nodes, format);
|
|
reset();
|
|
writer = previousWriter;
|
|
}
|
|
function getTextPosWithWriteLine() {
|
|
return writer.getTextPosWithWriteLine ? writer.getTextPosWithWriteLine() : writer.getTextPos();
|
|
}
|
|
function updateOrPushBundleFileTextLike(pos, end, kind) {
|
|
var last = ts.lastOrUndefined(bundleFileInfo.sections);
|
|
if (last && last.kind === kind) {
|
|
last.end = end;
|
|
}
|
|
else {
|
|
bundleFileInfo.sections.push({ pos: pos, end: end, kind: kind });
|
|
}
|
|
}
|
|
function recordBundleFileInternalSectionStart(node) {
|
|
if (recordInternalSection &&
|
|
bundleFileInfo &&
|
|
currentSourceFile &&
|
|
(ts.isDeclaration(node) || ts.isVariableStatement(node)) &&
|
|
ts.isInternalDeclaration(node, currentSourceFile) &&
|
|
sourceFileTextKind !== "internal") {
|
|
var prevSourceFileTextKind = sourceFileTextKind;
|
|
recordBundleFileTextLikeSection(writer.getTextPos());
|
|
sourceFileTextPos = getTextPosWithWriteLine();
|
|
sourceFileTextKind = "internal";
|
|
return prevSourceFileTextKind;
|
|
}
|
|
return undefined;
|
|
}
|
|
function recordBundleFileInternalSectionEnd(prevSourceFileTextKind) {
|
|
if (prevSourceFileTextKind) {
|
|
recordBundleFileTextLikeSection(writer.getTextPos());
|
|
sourceFileTextPos = getTextPosWithWriteLine();
|
|
sourceFileTextKind = prevSourceFileTextKind;
|
|
}
|
|
}
|
|
function recordBundleFileTextLikeSection(end) {
|
|
if (sourceFileTextPos < end) {
|
|
updateOrPushBundleFileTextLike(sourceFileTextPos, end, sourceFileTextKind);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function writeBundle(bundle, output, sourceMapGenerator) {
|
|
var _a;
|
|
isOwnFileEmit = false;
|
|
var previousWriter = writer;
|
|
setWriter(output, sourceMapGenerator);
|
|
emitShebangIfNeeded(bundle);
|
|
emitPrologueDirectivesIfNeeded(bundle);
|
|
emitHelpers(bundle);
|
|
emitSyntheticTripleSlashReferencesIfNeeded(bundle);
|
|
for (var _b = 0, _c = bundle.prepends; _b < _c.length; _b++) {
|
|
var prepend = _c[_b];
|
|
writeLine();
|
|
var pos = writer.getTextPos();
|
|
var savedSections = bundleFileInfo && bundleFileInfo.sections;
|
|
if (savedSections)
|
|
bundleFileInfo.sections = [];
|
|
print(4, prepend, undefined);
|
|
if (bundleFileInfo) {
|
|
var newSections = bundleFileInfo.sections;
|
|
bundleFileInfo.sections = savedSections;
|
|
if (prepend.oldFileOfCurrentEmit)
|
|
(_a = bundleFileInfo.sections).push.apply(_a, newSections);
|
|
else {
|
|
newSections.forEach(function (section) { return ts.Debug.assert(ts.isBundleFileTextLike(section)); });
|
|
bundleFileInfo.sections.push({
|
|
pos: pos,
|
|
end: writer.getTextPos(),
|
|
kind: "prepend",
|
|
data: relativeToBuildInfo(prepend.fileName),
|
|
texts: newSections
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sourceFileTextPos = getTextPosWithWriteLine();
|
|
for (var _d = 0, _e = bundle.sourceFiles; _d < _e.length; _d++) {
|
|
var sourceFile = _e[_d];
|
|
print(0, sourceFile, sourceFile);
|
|
}
|
|
if (bundleFileInfo && bundle.sourceFiles.length) {
|
|
var end = writer.getTextPos();
|
|
if (recordBundleFileTextLikeSection(end)) {
|
|
var prologues = getPrologueDirectivesFromBundledSourceFiles(bundle);
|
|
if (prologues) {
|
|
if (!bundleFileInfo.sources)
|
|
bundleFileInfo.sources = {};
|
|
bundleFileInfo.sources.prologues = prologues;
|
|
}
|
|
var helpers = getHelpersFromBundledSourceFiles(bundle);
|
|
if (helpers) {
|
|
if (!bundleFileInfo.sources)
|
|
bundleFileInfo.sources = {};
|
|
bundleFileInfo.sources.helpers = helpers;
|
|
}
|
|
}
|
|
}
|
|
reset();
|
|
writer = previousWriter;
|
|
}
|
|
function writeUnparsedSource(unparsed, output) {
|
|
var previousWriter = writer;
|
|
setWriter(output, undefined);
|
|
print(4, unparsed, undefined);
|
|
reset();
|
|
writer = previousWriter;
|
|
}
|
|
function writeFile(sourceFile, output, sourceMapGenerator) {
|
|
isOwnFileEmit = true;
|
|
var previousWriter = writer;
|
|
setWriter(output, sourceMapGenerator);
|
|
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);
|
|
}
|
|
pipelineEmit(hint, node, undefined);
|
|
}
|
|
function setSourceFile(sourceFile) {
|
|
currentSourceFile = sourceFile;
|
|
currentLineMap = undefined;
|
|
detachedCommentsInfo = undefined;
|
|
if (sourceFile) {
|
|
setSourceMapSource(sourceFile);
|
|
}
|
|
}
|
|
function setWriter(_writer, _sourceMapGenerator) {
|
|
if (_writer && printerOptions.omitTrailingSemicolon) {
|
|
_writer = ts.getTrailingSemicolonDeferringWriter(_writer);
|
|
}
|
|
writer = _writer;
|
|
sourceMapGenerator = _sourceMapGenerator;
|
|
sourceMapsDisabled = !writer || !sourceMapGenerator;
|
|
}
|
|
function reset() {
|
|
nodeIdToGeneratedName = [];
|
|
autoGeneratedIdToGeneratedName = [];
|
|
generatedNames = new ts.Set();
|
|
tempFlagsStack = [];
|
|
tempFlags = 0;
|
|
reservedNamesStack = [];
|
|
currentSourceFile = undefined;
|
|
currentLineMap = undefined;
|
|
detachedCommentsInfo = undefined;
|
|
setWriter(undefined, undefined);
|
|
}
|
|
function getCurrentLineMap() {
|
|
return currentLineMap || (currentLineMap = ts.getLineStarts(ts.Debug.checkDefined(currentSourceFile)));
|
|
}
|
|
function emit(node, parenthesizerRule) {
|
|
if (node === undefined)
|
|
return;
|
|
var prevSourceFileTextKind = recordBundleFileInternalSectionStart(node);
|
|
pipelineEmit(4, node, parenthesizerRule);
|
|
recordBundleFileInternalSectionEnd(prevSourceFileTextKind);
|
|
}
|
|
function emitIdentifierName(node) {
|
|
if (node === undefined)
|
|
return;
|
|
pipelineEmit(2, node, undefined);
|
|
}
|
|
function emitExpression(node, parenthesizerRule) {
|
|
if (node === undefined)
|
|
return;
|
|
pipelineEmit(1, node, parenthesizerRule);
|
|
}
|
|
function emitJsxAttributeValue(node) {
|
|
pipelineEmit(ts.isStringLiteral(node) ? 6 : 4, node);
|
|
}
|
|
function beforeEmitNode(node) {
|
|
if (preserveSourceNewlines && (ts.getEmitFlags(node) & 134217728)) {
|
|
preserveSourceNewlines = false;
|
|
}
|
|
}
|
|
function afterEmitNode(savedPreserveSourceNewlines) {
|
|
preserveSourceNewlines = savedPreserveSourceNewlines;
|
|
}
|
|
function pipelineEmit(emitHint, node, parenthesizerRule) {
|
|
currentParenthesizerRule = parenthesizerRule;
|
|
var pipelinePhase = getPipelinePhase(0, emitHint, node);
|
|
pipelinePhase(emitHint, node);
|
|
currentParenthesizerRule = undefined;
|
|
}
|
|
function shouldEmitComments(node) {
|
|
return !commentsDisabled && !ts.isSourceFile(node);
|
|
}
|
|
function shouldEmitSourceMaps(node) {
|
|
return !sourceMapsDisabled &&
|
|
!ts.isSourceFile(node) &&
|
|
!ts.isInJsonFile(node) &&
|
|
!ts.isUnparsedSource(node) &&
|
|
!ts.isUnparsedPrepend(node);
|
|
}
|
|
function getPipelinePhase(phase, emitHint, node) {
|
|
switch (phase) {
|
|
case 0:
|
|
if (onEmitNode !== ts.noEmitNotification && (!isEmitNotificationEnabled || isEmitNotificationEnabled(node))) {
|
|
return pipelineEmitWithNotification;
|
|
}
|
|
case 1:
|
|
if (substituteNode !== ts.noEmitSubstitution && (lastSubstitution = substituteNode(emitHint, node) || node) !== node) {
|
|
if (currentParenthesizerRule) {
|
|
lastSubstitution = currentParenthesizerRule(lastSubstitution);
|
|
}
|
|
return pipelineEmitWithSubstitution;
|
|
}
|
|
case 2:
|
|
if (shouldEmitComments(node)) {
|
|
return pipelineEmitWithComments;
|
|
}
|
|
case 3:
|
|
if (shouldEmitSourceMaps(node)) {
|
|
return pipelineEmitWithSourceMaps;
|
|
}
|
|
case 4:
|
|
return pipelineEmitWithHint;
|
|
default:
|
|
return ts.Debug.assertNever(phase);
|
|
}
|
|
}
|
|
function getNextPipelinePhase(currentPhase, emitHint, node) {
|
|
return getPipelinePhase(currentPhase + 1, emitHint, node);
|
|
}
|
|
function pipelineEmitWithNotification(hint, node) {
|
|
var pipelinePhase = getNextPipelinePhase(0, hint, node);
|
|
onEmitNode(hint, node, pipelinePhase);
|
|
}
|
|
function pipelineEmitWithHint(hint, node) {
|
|
onBeforeEmitNode === null || onBeforeEmitNode === void 0 ? void 0 : onBeforeEmitNode(node);
|
|
if (preserveSourceNewlines) {
|
|
var savedPreserveSourceNewlines = preserveSourceNewlines;
|
|
beforeEmitNode(node);
|
|
pipelineEmitWithHintWorker(hint, node);
|
|
afterEmitNode(savedPreserveSourceNewlines);
|
|
}
|
|
else {
|
|
pipelineEmitWithHintWorker(hint, node);
|
|
}
|
|
onAfterEmitNode === null || onAfterEmitNode === void 0 ? void 0 : onAfterEmitNode(node);
|
|
currentParenthesizerRule = undefined;
|
|
}
|
|
function pipelineEmitWithHintWorker(hint, node, allowSnippets) {
|
|
if (allowSnippets === void 0) { allowSnippets = true; }
|
|
if (allowSnippets) {
|
|
var snippet = ts.getSnippetElement(node);
|
|
if (snippet) {
|
|
return emitSnippetNode(hint, node, snippet);
|
|
}
|
|
}
|
|
if (hint === 0)
|
|
return emitSourceFile(ts.cast(node, ts.isSourceFile));
|
|
if (hint === 2)
|
|
return emitIdentifier(ts.cast(node, ts.isIdentifier));
|
|
if (hint === 6)
|
|
return emitLiteral(ts.cast(node, ts.isStringLiteral), true);
|
|
if (hint === 3)
|
|
return emitMappedTypeParameter(ts.cast(node, ts.isTypeParameterDeclaration));
|
|
if (hint === 5) {
|
|
ts.Debug.assertNode(node, ts.isEmptyStatement);
|
|
return emitEmptyStatement(true);
|
|
}
|
|
if (hint === 4) {
|
|
switch (node.kind) {
|
|
case 15:
|
|
case 16:
|
|
case 17:
|
|
return emitLiteral(node, false);
|
|
case 79:
|
|
return emitIdentifier(node);
|
|
case 80:
|
|
return emitPrivateIdentifier(node);
|
|
case 161:
|
|
return emitQualifiedName(node);
|
|
case 162:
|
|
return emitComputedPropertyName(node);
|
|
case 163:
|
|
return emitTypeParameter(node);
|
|
case 164:
|
|
return emitParameter(node);
|
|
case 165:
|
|
return emitDecorator(node);
|
|
case 166:
|
|
return emitPropertySignature(node);
|
|
case 167:
|
|
return emitPropertyDeclaration(node);
|
|
case 168:
|
|
return emitMethodSignature(node);
|
|
case 169:
|
|
return emitMethodDeclaration(node);
|
|
case 170:
|
|
return emitClassStaticBlockDeclaration(node);
|
|
case 171:
|
|
return emitConstructor(node);
|
|
case 172:
|
|
case 173:
|
|
return emitAccessorDeclaration(node);
|
|
case 174:
|
|
return emitCallSignature(node);
|
|
case 175:
|
|
return emitConstructSignature(node);
|
|
case 176:
|
|
return emitIndexSignature(node);
|
|
case 177:
|
|
return emitTypePredicate(node);
|
|
case 178:
|
|
return emitTypeReference(node);
|
|
case 179:
|
|
return emitFunctionType(node);
|
|
case 180:
|
|
return emitConstructorType(node);
|
|
case 181:
|
|
return emitTypeQuery(node);
|
|
case 182:
|
|
return emitTypeLiteral(node);
|
|
case 183:
|
|
return emitArrayType(node);
|
|
case 184:
|
|
return emitTupleType(node);
|
|
case 185:
|
|
return emitOptionalType(node);
|
|
case 187:
|
|
return emitUnionType(node);
|
|
case 188:
|
|
return emitIntersectionType(node);
|
|
case 189:
|
|
return emitConditionalType(node);
|
|
case 190:
|
|
return emitInferType(node);
|
|
case 191:
|
|
return emitParenthesizedType(node);
|
|
case 228:
|
|
return emitExpressionWithTypeArguments(node);
|
|
case 192:
|
|
return emitThisType();
|
|
case 193:
|
|
return emitTypeOperator(node);
|
|
case 194:
|
|
return emitIndexedAccessType(node);
|
|
case 195:
|
|
return emitMappedType(node);
|
|
case 196:
|
|
return emitLiteralType(node);
|
|
case 197:
|
|
return emitNamedTupleMember(node);
|
|
case 198:
|
|
return emitTemplateType(node);
|
|
case 199:
|
|
return emitTemplateTypeSpan(node);
|
|
case 200:
|
|
return emitImportTypeNode(node);
|
|
case 201:
|
|
return emitObjectBindingPattern(node);
|
|
case 202:
|
|
return emitArrayBindingPattern(node);
|
|
case 203:
|
|
return emitBindingElement(node);
|
|
case 233:
|
|
return emitTemplateSpan(node);
|
|
case 234:
|
|
return emitSemicolonClassElement();
|
|
case 235:
|
|
return emitBlock(node);
|
|
case 237:
|
|
return emitVariableStatement(node);
|
|
case 236:
|
|
return emitEmptyStatement(false);
|
|
case 238:
|
|
return emitExpressionStatement(node);
|
|
case 239:
|
|
return emitIfStatement(node);
|
|
case 240:
|
|
return emitDoStatement(node);
|
|
case 241:
|
|
return emitWhileStatement(node);
|
|
case 242:
|
|
return emitForStatement(node);
|
|
case 243:
|
|
return emitForInStatement(node);
|
|
case 244:
|
|
return emitForOfStatement(node);
|
|
case 245:
|
|
return emitContinueStatement(node);
|
|
case 246:
|
|
return emitBreakStatement(node);
|
|
case 247:
|
|
return emitReturnStatement(node);
|
|
case 248:
|
|
return emitWithStatement(node);
|
|
case 249:
|
|
return emitSwitchStatement(node);
|
|
case 250:
|
|
return emitLabeledStatement(node);
|
|
case 251:
|
|
return emitThrowStatement(node);
|
|
case 252:
|
|
return emitTryStatement(node);
|
|
case 253:
|
|
return emitDebuggerStatement(node);
|
|
case 254:
|
|
return emitVariableDeclaration(node);
|
|
case 255:
|
|
return emitVariableDeclarationList(node);
|
|
case 256:
|
|
return emitFunctionDeclaration(node);
|
|
case 257:
|
|
return emitClassDeclaration(node);
|
|
case 258:
|
|
return emitInterfaceDeclaration(node);
|
|
case 259:
|
|
return emitTypeAliasDeclaration(node);
|
|
case 260:
|
|
return emitEnumDeclaration(node);
|
|
case 261:
|
|
return emitModuleDeclaration(node);
|
|
case 262:
|
|
return emitModuleBlock(node);
|
|
case 263:
|
|
return emitCaseBlock(node);
|
|
case 264:
|
|
return emitNamespaceExportDeclaration(node);
|
|
case 265:
|
|
return emitImportEqualsDeclaration(node);
|
|
case 266:
|
|
return emitImportDeclaration(node);
|
|
case 267:
|
|
return emitImportClause(node);
|
|
case 268:
|
|
return emitNamespaceImport(node);
|
|
case 274:
|
|
return emitNamespaceExport(node);
|
|
case 269:
|
|
return emitNamedImports(node);
|
|
case 270:
|
|
return emitImportSpecifier(node);
|
|
case 271:
|
|
return emitExportAssignment(node);
|
|
case 272:
|
|
return emitExportDeclaration(node);
|
|
case 273:
|
|
return emitNamedExports(node);
|
|
case 275:
|
|
return emitExportSpecifier(node);
|
|
case 293:
|
|
return emitAssertClause(node);
|
|
case 294:
|
|
return emitAssertEntry(node);
|
|
case 276:
|
|
return;
|
|
case 277:
|
|
return emitExternalModuleReference(node);
|
|
case 11:
|
|
return emitJsxText(node);
|
|
case 280:
|
|
case 283:
|
|
return emitJsxOpeningElementOrFragment(node);
|
|
case 281:
|
|
case 284:
|
|
return emitJsxClosingElementOrFragment(node);
|
|
case 285:
|
|
return emitJsxAttribute(node);
|
|
case 286:
|
|
return emitJsxAttributes(node);
|
|
case 287:
|
|
return emitJsxSpreadAttribute(node);
|
|
case 288:
|
|
return emitJsxExpression(node);
|
|
case 289:
|
|
return emitCaseClause(node);
|
|
case 290:
|
|
return emitDefaultClause(node);
|
|
case 291:
|
|
return emitHeritageClause(node);
|
|
case 292:
|
|
return emitCatchClause(node);
|
|
case 296:
|
|
return emitPropertyAssignment(node);
|
|
case 297:
|
|
return emitShorthandPropertyAssignment(node);
|
|
case 298:
|
|
return emitSpreadAssignment(node);
|
|
case 299:
|
|
return emitEnumMember(node);
|
|
case 300:
|
|
return writeUnparsedNode(node);
|
|
case 307:
|
|
case 301:
|
|
return emitUnparsedSourceOrPrepend(node);
|
|
case 302:
|
|
case 303:
|
|
return emitUnparsedTextLike(node);
|
|
case 304:
|
|
return emitUnparsedSyntheticReference(node);
|
|
case 305:
|
|
return emitSourceFile(node);
|
|
case 306:
|
|
return ts.Debug.fail("Bundles should be printed using printBundle");
|
|
case 308:
|
|
return ts.Debug.fail("InputFiles should not be printed");
|
|
case 309:
|
|
return emitJSDocTypeExpression(node);
|
|
case 310:
|
|
return emitJSDocNameReference(node);
|
|
case 312:
|
|
return writePunctuation("*");
|
|
case 313:
|
|
return writePunctuation("?");
|
|
case 314:
|
|
return emitJSDocNullableType(node);
|
|
case 315:
|
|
return emitJSDocNonNullableType(node);
|
|
case 316:
|
|
return emitJSDocOptionalType(node);
|
|
case 317:
|
|
return emitJSDocFunctionType(node);
|
|
case 186:
|
|
case 318:
|
|
return emitRestOrJSDocVariadicType(node);
|
|
case 319:
|
|
return;
|
|
case 320:
|
|
return emitJSDoc(node);
|
|
case 322:
|
|
return emitJSDocTypeLiteral(node);
|
|
case 323:
|
|
return emitJSDocSignature(node);
|
|
case 327:
|
|
case 332:
|
|
case 337:
|
|
return emitJSDocSimpleTag(node);
|
|
case 328:
|
|
case 329:
|
|
return emitJSDocHeritageTag(node);
|
|
case 330:
|
|
case 331:
|
|
return;
|
|
case 333:
|
|
case 334:
|
|
case 335:
|
|
case 336:
|
|
return;
|
|
case 338:
|
|
return emitJSDocCallbackTag(node);
|
|
case 340:
|
|
case 347:
|
|
return emitJSDocPropertyLikeTag(node);
|
|
case 339:
|
|
case 341:
|
|
case 342:
|
|
case 343:
|
|
return emitJSDocSimpleTypedTag(node);
|
|
case 344:
|
|
return emitJSDocTemplateTag(node);
|
|
case 345:
|
|
return emitJSDocTypedefTag(node);
|
|
case 346:
|
|
return emitJSDocSeeTag(node);
|
|
case 349:
|
|
case 353:
|
|
case 352:
|
|
return;
|
|
}
|
|
if (ts.isExpression(node)) {
|
|
hint = 1;
|
|
if (substituteNode !== ts.noEmitSubstitution) {
|
|
var substitute = substituteNode(hint, node) || node;
|
|
if (substitute !== node) {
|
|
node = substitute;
|
|
if (currentParenthesizerRule) {
|
|
node = currentParenthesizerRule(node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (hint === 1) {
|
|
switch (node.kind) {
|
|
case 8:
|
|
case 9:
|
|
return emitNumericOrBigIntLiteral(node);
|
|
case 10:
|
|
case 13:
|
|
case 14:
|
|
return emitLiteral(node, false);
|
|
case 79:
|
|
return emitIdentifier(node);
|
|
case 80:
|
|
return emitPrivateIdentifier(node);
|
|
case 204:
|
|
return emitArrayLiteralExpression(node);
|
|
case 205:
|
|
return emitObjectLiteralExpression(node);
|
|
case 206:
|
|
return emitPropertyAccessExpression(node);
|
|
case 207:
|
|
return emitElementAccessExpression(node);
|
|
case 208:
|
|
return emitCallExpression(node);
|
|
case 209:
|
|
return emitNewExpression(node);
|
|
case 210:
|
|
return emitTaggedTemplateExpression(node);
|
|
case 211:
|
|
return emitTypeAssertionExpression(node);
|
|
case 212:
|
|
return emitParenthesizedExpression(node);
|
|
case 213:
|
|
return emitFunctionExpression(node);
|
|
case 214:
|
|
return emitArrowFunction(node);
|
|
case 215:
|
|
return emitDeleteExpression(node);
|
|
case 216:
|
|
return emitTypeOfExpression(node);
|
|
case 217:
|
|
return emitVoidExpression(node);
|
|
case 218:
|
|
return emitAwaitExpression(node);
|
|
case 219:
|
|
return emitPrefixUnaryExpression(node);
|
|
case 220:
|
|
return emitPostfixUnaryExpression(node);
|
|
case 221:
|
|
return emitBinaryExpression(node);
|
|
case 222:
|
|
return emitConditionalExpression(node);
|
|
case 223:
|
|
return emitTemplateExpression(node);
|
|
case 224:
|
|
return emitYieldExpression(node);
|
|
case 225:
|
|
return emitSpreadElement(node);
|
|
case 226:
|
|
return emitClassExpression(node);
|
|
case 227:
|
|
return;
|
|
case 229:
|
|
return emitAsExpression(node);
|
|
case 230:
|
|
return emitNonNullExpression(node);
|
|
case 228:
|
|
return emitExpressionWithTypeArguments(node);
|
|
case 231:
|
|
return emitMetaProperty(node);
|
|
case 232:
|
|
return ts.Debug.fail("SyntheticExpression should never be printed.");
|
|
case 278:
|
|
return emitJsxElement(node);
|
|
case 279:
|
|
return emitJsxSelfClosingElement(node);
|
|
case 282:
|
|
return emitJsxFragment(node);
|
|
case 348:
|
|
return ts.Debug.fail("SyntaxList should not be printed");
|
|
case 349:
|
|
return;
|
|
case 350:
|
|
return emitPartiallyEmittedExpression(node);
|
|
case 351:
|
|
return emitCommaList(node);
|
|
case 352:
|
|
case 353:
|
|
return;
|
|
case 354:
|
|
return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
|
|
}
|
|
}
|
|
if (ts.isKeyword(node.kind))
|
|
return writeTokenNode(node, writeKeyword);
|
|
if (ts.isTokenKind(node.kind))
|
|
return writeTokenNode(node, writePunctuation);
|
|
ts.Debug.fail("Unhandled SyntaxKind: ".concat(ts.Debug.formatSyntaxKind(node.kind), "."));
|
|
}
|
|
function emitMappedTypeParameter(node) {
|
|
emit(node.name);
|
|
writeSpace();
|
|
writeKeyword("in");
|
|
writeSpace();
|
|
emit(node.constraint);
|
|
}
|
|
function pipelineEmitWithSubstitution(hint, node) {
|
|
var pipelinePhase = getNextPipelinePhase(1, hint, node);
|
|
ts.Debug.assertIsDefined(lastSubstitution);
|
|
node = lastSubstitution;
|
|
lastSubstitution = undefined;
|
|
pipelinePhase(hint, node);
|
|
}
|
|
function getHelpersFromBundledSourceFiles(bundle) {
|
|
var result;
|
|
if (moduleKind === ts.ModuleKind.None || printerOptions.noEmitHelpers) {
|
|
return undefined;
|
|
}
|
|
var bundledHelpers = new ts.Map();
|
|
for (var _a = 0, _b = bundle.sourceFiles; _a < _b.length; _a++) {
|
|
var sourceFile = _b[_a];
|
|
var shouldSkip = ts.getExternalHelpersModuleName(sourceFile) !== undefined;
|
|
var helpers = getSortedEmitHelpers(sourceFile);
|
|
if (!helpers)
|
|
continue;
|
|
for (var _c = 0, helpers_5 = helpers; _c < helpers_5.length; _c++) {
|
|
var helper = helpers_5[_c];
|
|
if (!helper.scoped && !shouldSkip && !bundledHelpers.get(helper.name)) {
|
|
bundledHelpers.set(helper.name, true);
|
|
(result || (result = [])).push(helper.name);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function emitHelpers(node) {
|
|
var helpersEmitted = false;
|
|
var bundle = node.kind === 306 ? node : undefined;
|
|
if (bundle && moduleKind === ts.ModuleKind.None) {
|
|
return;
|
|
}
|
|
var numPrepends = bundle ? bundle.prepends.length : 0;
|
|
var numNodes = bundle ? bundle.sourceFiles.length + numPrepends : 1;
|
|
for (var i = 0; i < numNodes; i++) {
|
|
var currentNode = bundle ? i < numPrepends ? bundle.prepends[i] : bundle.sourceFiles[i - numPrepends] : node;
|
|
var sourceFile = ts.isSourceFile(currentNode) ? currentNode : ts.isUnparsedSource(currentNode) ? undefined : currentSourceFile;
|
|
var shouldSkip = printerOptions.noEmitHelpers || (!!sourceFile && ts.hasRecordedExternalHelpers(sourceFile));
|
|
var shouldBundle = (ts.isSourceFile(currentNode) || ts.isUnparsedSource(currentNode)) && !isOwnFileEmit;
|
|
var helpers = ts.isUnparsedSource(currentNode) ? currentNode.helpers : getSortedEmitHelpers(currentNode);
|
|
if (helpers) {
|
|
for (var _a = 0, helpers_6 = helpers; _a < helpers_6.length; _a++) {
|
|
var helper = helpers_6[_a];
|
|
if (!helper.scoped) {
|
|
if (shouldSkip)
|
|
continue;
|
|
if (shouldBundle) {
|
|
if (bundledHelpers.get(helper.name)) {
|
|
continue;
|
|
}
|
|
bundledHelpers.set(helper.name, true);
|
|
}
|
|
}
|
|
else if (bundle) {
|
|
continue;
|
|
}
|
|
var pos = getTextPosWithWriteLine();
|
|
if (typeof helper.text === "string") {
|
|
writeLines(helper.text);
|
|
}
|
|
else {
|
|
writeLines(helper.text(makeFileLevelOptimisticUniqueName));
|
|
}
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "emitHelpers", data: helper.name });
|
|
helpersEmitted = true;
|
|
}
|
|
}
|
|
}
|
|
return helpersEmitted;
|
|
}
|
|
function getSortedEmitHelpers(node) {
|
|
var helpers = ts.getEmitHelpers(node);
|
|
return helpers && ts.stableSort(helpers, ts.compareEmitHelpers);
|
|
}
|
|
function emitNumericOrBigIntLiteral(node) {
|
|
emitLiteral(node, false);
|
|
}
|
|
function emitLiteral(node, jsxAttributeEscape) {
|
|
var text = getLiteralTextOfNode(node, printerOptions.neverAsciiEscape, jsxAttributeEscape);
|
|
if ((printerOptions.sourceMap || printerOptions.inlineSourceMap)
|
|
&& (node.kind === 10 || ts.isTemplateLiteralKind(node.kind))) {
|
|
writeLiteral(text);
|
|
}
|
|
else {
|
|
writeStringLiteral(text);
|
|
}
|
|
}
|
|
function emitUnparsedSourceOrPrepend(unparsed) {
|
|
for (var _a = 0, _b = unparsed.texts; _a < _b.length; _a++) {
|
|
var text = _b[_a];
|
|
writeLine();
|
|
emit(text);
|
|
}
|
|
}
|
|
function writeUnparsedNode(unparsed) {
|
|
writer.rawWrite(unparsed.parent.text.substring(unparsed.pos, unparsed.end));
|
|
}
|
|
function emitUnparsedTextLike(unparsed) {
|
|
var pos = getTextPosWithWriteLine();
|
|
writeUnparsedNode(unparsed);
|
|
if (bundleFileInfo) {
|
|
updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 302 ?
|
|
"text" :
|
|
"internal");
|
|
}
|
|
}
|
|
function emitUnparsedSyntheticReference(unparsed) {
|
|
var pos = getTextPosWithWriteLine();
|
|
writeUnparsedNode(unparsed);
|
|
if (bundleFileInfo) {
|
|
var section = ts.clone(unparsed.section);
|
|
section.pos = pos;
|
|
section.end = writer.getTextPos();
|
|
bundleFileInfo.sections.push(section);
|
|
}
|
|
}
|
|
function emitSnippetNode(hint, node, snippet) {
|
|
switch (snippet.kind) {
|
|
case 1:
|
|
emitPlaceholder(hint, node, snippet);
|
|
break;
|
|
case 0:
|
|
emitTabStop(hint, node, snippet);
|
|
break;
|
|
}
|
|
}
|
|
function emitPlaceholder(hint, node, snippet) {
|
|
nonEscapingWrite("${".concat(snippet.order, ":"));
|
|
pipelineEmitWithHintWorker(hint, node, false);
|
|
nonEscapingWrite("}");
|
|
}
|
|
function emitTabStop(hint, node, snippet) {
|
|
ts.Debug.assert(node.kind === 236, "A tab stop cannot be attached to a node of kind ".concat(ts.Debug.formatSyntaxKind(node.kind), "."));
|
|
ts.Debug.assert(hint !== 5, "A tab stop cannot be attached to an embedded statement.");
|
|
nonEscapingWrite("$".concat(snippet.order));
|
|
}
|
|
function emitIdentifier(node) {
|
|
var writeText = node.symbol ? writeSymbol : write;
|
|
writeText(getTextOfNode(node, false), node.symbol);
|
|
emitList(node, node.typeArguments, 53776);
|
|
}
|
|
function emitPrivateIdentifier(node) {
|
|
var writeText = node.symbol ? writeSymbol : write;
|
|
writeText(getTextOfNode(node, false), node.symbol);
|
|
}
|
|
function emitQualifiedName(node) {
|
|
emitEntityName(node.left);
|
|
writePunctuation(".");
|
|
emit(node.right);
|
|
}
|
|
function emitEntityName(node) {
|
|
if (node.kind === 79) {
|
|
emitExpression(node);
|
|
}
|
|
else {
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitComputedPropertyName(node) {
|
|
writePunctuation("[");
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfComputedPropertyName);
|
|
writePunctuation("]");
|
|
}
|
|
function emitTypeParameter(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
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) {
|
|
emitDecoratorsAndModifiers(node, node.modifiers);
|
|
emit(node.dotDotDotToken);
|
|
emitNodeWithWriter(node.name, writeParameter);
|
|
emit(node.questionToken);
|
|
if (node.parent && node.parent.kind === 317 && !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.pos, node, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitDecorator(decorator) {
|
|
writePunctuation("@");
|
|
emitExpression(decorator.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
}
|
|
function emitPropertySignature(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
emitNodeWithWriter(node.name, writeProperty);
|
|
emit(node.questionToken);
|
|
emitTypeAnnotation(node.type);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitPropertyDeclaration(node) {
|
|
emitDecoratorsAndModifiers(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);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitMethodSignature(node) {
|
|
pushNameGenerationScope(node);
|
|
emitModifiers(node, node.modifiers);
|
|
emit(node.name);
|
|
emit(node.questionToken);
|
|
emitTypeParameters(node, node.typeParameters);
|
|
emitParameters(node, node.parameters);
|
|
emitTypeAnnotation(node.type);
|
|
writeTrailingSemicolon();
|
|
popNameGenerationScope(node);
|
|
}
|
|
function emitMethodDeclaration(node) {
|
|
emitDecoratorsAndModifiers(node, node.modifiers);
|
|
emit(node.asteriskToken);
|
|
emit(node.name);
|
|
emit(node.questionToken);
|
|
emitSignatureAndBody(node, emitSignatureHead);
|
|
}
|
|
function emitClassStaticBlockDeclaration(node) {
|
|
writeKeyword("static");
|
|
emitBlockFunctionBody(node.body);
|
|
}
|
|
function emitConstructor(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
writeKeyword("constructor");
|
|
emitSignatureAndBody(node, emitSignatureHead);
|
|
}
|
|
function emitAccessorDeclaration(node) {
|
|
emitDecoratorsAndModifiers(node, node.modifiers);
|
|
writeKeyword(node.kind === 172 ? "get" : "set");
|
|
writeSpace();
|
|
emit(node.name);
|
|
emitSignatureAndBody(node, emitSignatureHead);
|
|
}
|
|
function emitCallSignature(node) {
|
|
pushNameGenerationScope(node);
|
|
emitTypeParameters(node, node.typeParameters);
|
|
emitParameters(node, node.parameters);
|
|
emitTypeAnnotation(node.type);
|
|
writeTrailingSemicolon();
|
|
popNameGenerationScope(node);
|
|
}
|
|
function emitConstructSignature(node) {
|
|
pushNameGenerationScope(node);
|
|
writeKeyword("new");
|
|
writeSpace();
|
|
emitTypeParameters(node, node.typeParameters);
|
|
emitParameters(node, node.parameters);
|
|
emitTypeAnnotation(node.type);
|
|
writeTrailingSemicolon();
|
|
popNameGenerationScope(node);
|
|
}
|
|
function emitIndexSignature(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
emitParametersForIndexSignature(node, node.parameters);
|
|
emitTypeAnnotation(node.type);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitTemplateTypeSpan(node) {
|
|
emit(node.type);
|
|
emit(node.literal);
|
|
}
|
|
function emitSemicolonClassElement() {
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitTypePredicate(node) {
|
|
if (node.assertsModifier) {
|
|
emit(node.assertsModifier);
|
|
writeSpace();
|
|
}
|
|
emit(node.parameterName);
|
|
if (node.type) {
|
|
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) {
|
|
writeKeyword("function");
|
|
emitParameters(node, node.parameters);
|
|
writePunctuation(":");
|
|
emit(node.type);
|
|
}
|
|
function emitJSDocNullableType(node) {
|
|
writePunctuation("?");
|
|
emit(node.type);
|
|
}
|
|
function emitJSDocNonNullableType(node) {
|
|
writePunctuation("!");
|
|
emit(node.type);
|
|
}
|
|
function emitJSDocOptionalType(node) {
|
|
emit(node.type);
|
|
writePunctuation("=");
|
|
}
|
|
function emitConstructorType(node) {
|
|
pushNameGenerationScope(node);
|
|
emitModifiers(node, node.modifiers);
|
|
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);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
}
|
|
function emitTypeLiteral(node) {
|
|
writePunctuation("{");
|
|
var flags = ts.getEmitFlags(node) & 1 ? 768 : 32897;
|
|
emitList(node, node.members, flags | 524288);
|
|
writePunctuation("}");
|
|
}
|
|
function emitArrayType(node) {
|
|
emit(node.elementType, parenthesizer.parenthesizeNonArrayTypeOfPostfixType);
|
|
writePunctuation("[");
|
|
writePunctuation("]");
|
|
}
|
|
function emitRestOrJSDocVariadicType(node) {
|
|
writePunctuation("...");
|
|
emit(node.type);
|
|
}
|
|
function emitTupleType(node) {
|
|
emitTokenWithComment(22, node.pos, writePunctuation, node);
|
|
var flags = ts.getEmitFlags(node) & 1 ? 528 : 657;
|
|
emitList(node, node.elements, flags | 524288, parenthesizer.parenthesizeElementTypeOfTupleType);
|
|
emitTokenWithComment(23, node.elements.end, writePunctuation, node);
|
|
}
|
|
function emitNamedTupleMember(node) {
|
|
emit(node.dotDotDotToken);
|
|
emit(node.name);
|
|
emit(node.questionToken);
|
|
emitTokenWithComment(58, node.name.end, writePunctuation, node);
|
|
writeSpace();
|
|
emit(node.type);
|
|
}
|
|
function emitOptionalType(node) {
|
|
emit(node.type, parenthesizer.parenthesizeTypeOfOptionalType);
|
|
writePunctuation("?");
|
|
}
|
|
function emitUnionType(node) {
|
|
emitList(node, node.types, 516, parenthesizer.parenthesizeConstituentTypeOfUnionType);
|
|
}
|
|
function emitIntersectionType(node) {
|
|
emitList(node, node.types, 520, parenthesizer.parenthesizeConstituentTypeOfIntersectionType);
|
|
}
|
|
function emitConditionalType(node) {
|
|
emit(node.checkType, parenthesizer.parenthesizeCheckTypeOfConditionalType);
|
|
writeSpace();
|
|
writeKeyword("extends");
|
|
writeSpace();
|
|
emit(node.extendsType, parenthesizer.parenthesizeExtendsTypeOfConditionalType);
|
|
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();
|
|
var parenthesizerRule = node.operator === 145 ?
|
|
parenthesizer.parenthesizeOperandOfReadonlyTypeOperator :
|
|
parenthesizer.parenthesizeOperandOfTypeOperator;
|
|
emit(node.type, parenthesizerRule);
|
|
}
|
|
function emitIndexedAccessType(node) {
|
|
emit(node.objectType, parenthesizer.parenthesizeNonArrayTypeOfPostfixType);
|
|
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 !== 145) {
|
|
writeKeyword("readonly");
|
|
}
|
|
writeSpace();
|
|
}
|
|
writePunctuation("[");
|
|
pipelineEmit(3, node.typeParameter);
|
|
if (node.nameType) {
|
|
writeSpace();
|
|
writeKeyword("as");
|
|
writeSpace();
|
|
emit(node.nameType);
|
|
}
|
|
writePunctuation("]");
|
|
if (node.questionToken) {
|
|
emit(node.questionToken);
|
|
if (node.questionToken.kind !== 57) {
|
|
writePunctuation("?");
|
|
}
|
|
}
|
|
writePunctuation(":");
|
|
writeSpace();
|
|
emit(node.type);
|
|
writeTrailingSemicolon();
|
|
if (emitFlags & 1) {
|
|
writeSpace();
|
|
}
|
|
else {
|
|
writeLine();
|
|
decreaseIndent();
|
|
}
|
|
emitList(node, node.members, 2);
|
|
writePunctuation("}");
|
|
}
|
|
function emitLiteralType(node) {
|
|
emitExpression(node.literal);
|
|
}
|
|
function emitTemplateType(node) {
|
|
emit(node.head);
|
|
emitList(node, node.templateSpans, 262144);
|
|
}
|
|
function emitImportTypeNode(node) {
|
|
if (node.isTypeOf) {
|
|
writeKeyword("typeof");
|
|
writeSpace();
|
|
}
|
|
writeKeyword("import");
|
|
writePunctuation("(");
|
|
emit(node.argument);
|
|
if (node.assertions) {
|
|
writePunctuation(",");
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
writeSpace();
|
|
writeKeyword("assert");
|
|
writePunctuation(":");
|
|
writeSpace();
|
|
var elements = node.assertions.assertClause.elements;
|
|
emitList(node.assertions.assertClause, elements, 526226);
|
|
writeSpace();
|
|
writePunctuation("}");
|
|
}
|
|
writePunctuation(")");
|
|
if (node.qualifier) {
|
|
writePunctuation(".");
|
|
emit(node.qualifier);
|
|
}
|
|
emitTypeArguments(node, node.typeArguments);
|
|
}
|
|
function emitObjectBindingPattern(node) {
|
|
writePunctuation("{");
|
|
emitList(node, node.elements, 525136);
|
|
writePunctuation("}");
|
|
}
|
|
function emitArrayBindingPattern(node) {
|
|
writePunctuation("[");
|
|
emitList(node, node.elements, 524880);
|
|
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, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitArrayLiteralExpression(node) {
|
|
var elements = node.elements;
|
|
var preferNewLine = node.multiLine ? 65536 : 0;
|
|
emitExpressionList(node, elements, 8914 | preferNewLine, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitObjectLiteralExpression(node) {
|
|
ts.forEach(node.properties, generateMemberNames);
|
|
var indentedFlag = ts.getEmitFlags(node) & 65536;
|
|
if (indentedFlag) {
|
|
increaseIndent();
|
|
}
|
|
var preferNewLine = node.multiLine ? 65536 : 0;
|
|
var allowTrailingComma = currentSourceFile && currentSourceFile.languageVersion >= 1 && !ts.isJsonSourceFile(currentSourceFile) ? 64 : 0;
|
|
emitList(node, node.properties, 526226 | allowTrailingComma | preferNewLine);
|
|
if (indentedFlag) {
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
function emitPropertyAccessExpression(node) {
|
|
emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
var token = node.questionDotToken || ts.setTextRangePosEnd(ts.factory.createToken(24), node.expression.end, node.name.pos);
|
|
var linesBeforeDot = getLinesBetweenNodes(node, node.expression, token);
|
|
var linesAfterDot = getLinesBetweenNodes(node, token, node.name);
|
|
writeLinesAndIndent(linesBeforeDot, false);
|
|
var shouldEmitDotDot = token.kind !== 28 &&
|
|
mayNeedDotDotForPropertyAccess(node.expression) &&
|
|
!writer.hasTrailingComment() &&
|
|
!writer.hasTrailingWhitespace();
|
|
if (shouldEmitDotDot) {
|
|
writePunctuation(".");
|
|
}
|
|
if (node.questionDotToken) {
|
|
emit(token);
|
|
}
|
|
else {
|
|
emitTokenWithComment(token.kind, node.expression.end, writePunctuation, node);
|
|
}
|
|
writeLinesAndIndent(linesAfterDot, false);
|
|
emit(node.name);
|
|
decreaseIndentIf(linesBeforeDot, linesAfterDot);
|
|
}
|
|
function mayNeedDotDotForPropertyAccess(expression) {
|
|
expression = ts.skipPartiallyEmittedExpressions(expression);
|
|
if (ts.isNumericLiteral(expression)) {
|
|
var text = getLiteralTextOfNode(expression, true, false);
|
|
return !expression.numericLiteralFlags && !ts.stringContains(text, ts.tokenToString(24));
|
|
}
|
|
else if (ts.isAccessExpression(expression)) {
|
|
var constantValue = ts.getConstantValue(expression);
|
|
return typeof constantValue === "number" && isFinite(constantValue)
|
|
&& Math.floor(constantValue) === constantValue;
|
|
}
|
|
}
|
|
function emitElementAccessExpression(node) {
|
|
emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
emit(node.questionDotToken);
|
|
emitTokenWithComment(22, node.expression.end, writePunctuation, node);
|
|
emitExpression(node.argumentExpression);
|
|
emitTokenWithComment(23, node.argumentExpression.end, writePunctuation, node);
|
|
}
|
|
function emitCallExpression(node) {
|
|
var indirectCall = ts.getEmitFlags(node) & 536870912;
|
|
if (indirectCall) {
|
|
writePunctuation("(");
|
|
writeLiteral("0");
|
|
writePunctuation(",");
|
|
writeSpace();
|
|
}
|
|
emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
if (indirectCall) {
|
|
writePunctuation(")");
|
|
}
|
|
emit(node.questionDotToken);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
emitExpressionList(node, node.arguments, 2576, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitNewExpression(node) {
|
|
emitTokenWithComment(103, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
emitExpressionList(node, node.arguments, 18960, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitTaggedTemplateExpression(node) {
|
|
var indirectCall = ts.getEmitFlags(node) & 536870912;
|
|
if (indirectCall) {
|
|
writePunctuation("(");
|
|
writeLiteral("0");
|
|
writePunctuation(",");
|
|
writeSpace();
|
|
}
|
|
emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
if (indirectCall) {
|
|
writePunctuation(")");
|
|
}
|
|
emitTypeArguments(node, node.typeArguments);
|
|
writeSpace();
|
|
emitExpression(node.template);
|
|
}
|
|
function emitTypeAssertionExpression(node) {
|
|
writePunctuation("<");
|
|
emit(node.type);
|
|
writePunctuation(">");
|
|
emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function emitParenthesizedExpression(node) {
|
|
var openParenPos = emitTokenWithComment(20, node.pos, writePunctuation, node);
|
|
var indented = writeLineSeparatorsAndIndentBefore(node.expression, node);
|
|
emitExpression(node.expression, undefined);
|
|
writeLineSeparatorsAfter(node.expression, node);
|
|
decreaseIndentIf(indented);
|
|
emitTokenWithComment(21, node.expression ? node.expression.end : openParenPos, writePunctuation, node);
|
|
}
|
|
function emitFunctionExpression(node) {
|
|
generateNameIfNeeded(node.name);
|
|
emitFunctionDeclarationOrExpression(node);
|
|
}
|
|
function emitArrowFunction(node) {
|
|
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(89, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function emitTypeOfExpression(node) {
|
|
emitTokenWithComment(112, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function emitVoidExpression(node) {
|
|
emitTokenWithComment(114, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function emitAwaitExpression(node) {
|
|
emitTokenWithComment(132, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function emitPrefixUnaryExpression(node) {
|
|
writeTokenText(node.operator, writeOperator);
|
|
if (shouldEmitWhitespaceBeforeOperand(node)) {
|
|
writeSpace();
|
|
}
|
|
emitExpression(node.operand, parenthesizer.parenthesizeOperandOfPrefixUnary);
|
|
}
|
|
function shouldEmitWhitespaceBeforeOperand(node) {
|
|
var operand = node.operand;
|
|
return operand.kind === 219
|
|
&& ((node.operator === 39 && (operand.operator === 39 || operand.operator === 45))
|
|
|| (node.operator === 40 && (operand.operator === 40 || operand.operator === 46)));
|
|
}
|
|
function emitPostfixUnaryExpression(node) {
|
|
emitExpression(node.operand, parenthesizer.parenthesizeOperandOfPostfixUnary);
|
|
writeTokenText(node.operator, writeOperator);
|
|
}
|
|
function createEmitBinaryExpression() {
|
|
return ts.createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, undefined);
|
|
function onEnter(node, state) {
|
|
if (state) {
|
|
state.stackIndex++;
|
|
state.preserveSourceNewlinesStack[state.stackIndex] = preserveSourceNewlines;
|
|
state.containerPosStack[state.stackIndex] = containerPos;
|
|
state.containerEndStack[state.stackIndex] = containerEnd;
|
|
state.declarationListContainerEndStack[state.stackIndex] = declarationListContainerEnd;
|
|
var emitComments_1 = state.shouldEmitCommentsStack[state.stackIndex] = shouldEmitComments(node);
|
|
var emitSourceMaps = state.shouldEmitSourceMapsStack[state.stackIndex] = shouldEmitSourceMaps(node);
|
|
onBeforeEmitNode === null || onBeforeEmitNode === void 0 ? void 0 : onBeforeEmitNode(node);
|
|
if (emitComments_1)
|
|
emitCommentsBeforeNode(node);
|
|
if (emitSourceMaps)
|
|
emitSourceMapsBeforeNode(node);
|
|
beforeEmitNode(node);
|
|
}
|
|
else {
|
|
state = {
|
|
stackIndex: 0,
|
|
preserveSourceNewlinesStack: [undefined],
|
|
containerPosStack: [-1],
|
|
containerEndStack: [-1],
|
|
declarationListContainerEndStack: [-1],
|
|
shouldEmitCommentsStack: [false],
|
|
shouldEmitSourceMapsStack: [false],
|
|
};
|
|
}
|
|
return state;
|
|
}
|
|
function onLeft(next, _workArea, parent) {
|
|
return maybeEmitExpression(next, parent, "left");
|
|
}
|
|
function onOperator(operatorToken, _state, node) {
|
|
var isCommaOperator = operatorToken.kind !== 27;
|
|
var linesBeforeOperator = getLinesBetweenNodes(node, node.left, operatorToken);
|
|
var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
|
|
writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
|
|
emitLeadingCommentsOfPosition(operatorToken.pos);
|
|
writeTokenNode(operatorToken, operatorToken.kind === 101 ? writeKeyword : writeOperator);
|
|
emitTrailingCommentsOfPosition(operatorToken.end, true);
|
|
writeLinesAndIndent(linesAfterOperator, true);
|
|
}
|
|
function onRight(next, _workArea, parent) {
|
|
return maybeEmitExpression(next, parent, "right");
|
|
}
|
|
function onExit(node, state) {
|
|
var linesBeforeOperator = getLinesBetweenNodes(node, node.left, node.operatorToken);
|
|
var linesAfterOperator = getLinesBetweenNodes(node, node.operatorToken, node.right);
|
|
decreaseIndentIf(linesBeforeOperator, linesAfterOperator);
|
|
if (state.stackIndex > 0) {
|
|
var savedPreserveSourceNewlines = state.preserveSourceNewlinesStack[state.stackIndex];
|
|
var savedContainerPos = state.containerPosStack[state.stackIndex];
|
|
var savedContainerEnd = state.containerEndStack[state.stackIndex];
|
|
var savedDeclarationListContainerEnd = state.declarationListContainerEndStack[state.stackIndex];
|
|
var shouldEmitComments_1 = state.shouldEmitCommentsStack[state.stackIndex];
|
|
var shouldEmitSourceMaps_1 = state.shouldEmitSourceMapsStack[state.stackIndex];
|
|
afterEmitNode(savedPreserveSourceNewlines);
|
|
if (shouldEmitSourceMaps_1)
|
|
emitSourceMapsAfterNode(node);
|
|
if (shouldEmitComments_1)
|
|
emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd);
|
|
onAfterEmitNode === null || onAfterEmitNode === void 0 ? void 0 : onAfterEmitNode(node);
|
|
state.stackIndex--;
|
|
}
|
|
}
|
|
function maybeEmitExpression(next, parent, side) {
|
|
var parenthesizerRule = side === "left" ?
|
|
parenthesizer.getParenthesizeLeftSideOfBinaryForOperator(parent.operatorToken.kind) :
|
|
parenthesizer.getParenthesizeRightSideOfBinaryForOperator(parent.operatorToken.kind);
|
|
var pipelinePhase = getPipelinePhase(0, 1, next);
|
|
if (pipelinePhase === pipelineEmitWithSubstitution) {
|
|
ts.Debug.assertIsDefined(lastSubstitution);
|
|
next = parenthesizerRule(ts.cast(lastSubstitution, ts.isExpression));
|
|
pipelinePhase = getNextPipelinePhase(1, 1, next);
|
|
lastSubstitution = undefined;
|
|
}
|
|
if (pipelinePhase === pipelineEmitWithComments ||
|
|
pipelinePhase === pipelineEmitWithSourceMaps ||
|
|
pipelinePhase === pipelineEmitWithHint) {
|
|
if (ts.isBinaryExpression(next)) {
|
|
return next;
|
|
}
|
|
}
|
|
currentParenthesizerRule = parenthesizerRule;
|
|
pipelinePhase(1, next);
|
|
}
|
|
}
|
|
function emitConditionalExpression(node) {
|
|
var linesBeforeQuestion = getLinesBetweenNodes(node, node.condition, node.questionToken);
|
|
var linesAfterQuestion = getLinesBetweenNodes(node, node.questionToken, node.whenTrue);
|
|
var linesBeforeColon = getLinesBetweenNodes(node, node.whenTrue, node.colonToken);
|
|
var linesAfterColon = getLinesBetweenNodes(node, node.colonToken, node.whenFalse);
|
|
emitExpression(node.condition, parenthesizer.parenthesizeConditionOfConditionalExpression);
|
|
writeLinesAndIndent(linesBeforeQuestion, true);
|
|
emit(node.questionToken);
|
|
writeLinesAndIndent(linesAfterQuestion, true);
|
|
emitExpression(node.whenTrue, parenthesizer.parenthesizeBranchOfConditionalExpression);
|
|
decreaseIndentIf(linesBeforeQuestion, linesAfterQuestion);
|
|
writeLinesAndIndent(linesBeforeColon, true);
|
|
emit(node.colonToken);
|
|
writeLinesAndIndent(linesAfterColon, true);
|
|
emitExpression(node.whenFalse, parenthesizer.parenthesizeBranchOfConditionalExpression);
|
|
decreaseIndentIf(linesBeforeColon, linesAfterColon);
|
|
}
|
|
function emitTemplateExpression(node) {
|
|
emit(node.head);
|
|
emitList(node, node.templateSpans, 262144);
|
|
}
|
|
function emitYieldExpression(node) {
|
|
emitTokenWithComment(125, node.pos, writeKeyword, node);
|
|
emit(node.asteriskToken);
|
|
emitExpressionWithLeadingSpace(node.expression && parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsiAndDisallowedComma);
|
|
}
|
|
function emitSpreadElement(node) {
|
|
emitTokenWithComment(25, node.pos, writePunctuation, node);
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitClassExpression(node) {
|
|
generateNameIfNeeded(node.name);
|
|
emitClassDeclarationOrExpression(node);
|
|
}
|
|
function emitExpressionWithTypeArguments(node) {
|
|
emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
}
|
|
function emitAsExpression(node) {
|
|
emitExpression(node.expression, undefined);
|
|
if (node.type) {
|
|
writeSpace();
|
|
writeKeyword("as");
|
|
writeSpace();
|
|
emit(node.type);
|
|
}
|
|
}
|
|
function emitNonNullExpression(node) {
|
|
emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
|
|
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(18, node.pos, writePunctuation, node);
|
|
var format = forceSingleLine || ts.getEmitFlags(node) & 1 ? 768 : 129;
|
|
emitList(node, node.statements, format);
|
|
emitTokenWithComment(19, node.statements.end, writePunctuation, node, !!(format & 1));
|
|
}
|
|
function emitVariableStatement(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
emit(node.declarationList);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitEmptyStatement(isEmbeddedStatement) {
|
|
if (isEmbeddedStatement) {
|
|
writePunctuation(";");
|
|
}
|
|
else {
|
|
writeTrailingSemicolon();
|
|
}
|
|
}
|
|
function emitExpressionStatement(node) {
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfExpressionStatement);
|
|
if (!currentSourceFile || !ts.isJsonSourceFile(currentSourceFile) || ts.nodeIsSynthesized(node.expression)) {
|
|
writeTrailingSemicolon();
|
|
}
|
|
}
|
|
function emitIfStatement(node) {
|
|
var openParenPos = emitTokenWithComment(99, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
emitEmbeddedStatement(node, node.thenStatement);
|
|
if (node.elseStatement) {
|
|
writeLineOrSpace(node, node.thenStatement, node.elseStatement);
|
|
emitTokenWithComment(91, node.thenStatement.end, writeKeyword, node);
|
|
if (node.elseStatement.kind === 239) {
|
|
writeSpace();
|
|
emit(node.elseStatement);
|
|
}
|
|
else {
|
|
emitEmbeddedStatement(node, node.elseStatement);
|
|
}
|
|
}
|
|
}
|
|
function emitWhileClause(node, startPos) {
|
|
var openParenPos = emitTokenWithComment(115, startPos, writeKeyword, node);
|
|
writeSpace();
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
}
|
|
function emitDoStatement(node) {
|
|
emitTokenWithComment(90, node.pos, writeKeyword, node);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
|
|
writeSpace();
|
|
}
|
|
else {
|
|
writeLineOrSpace(node, node.statement, node.expression);
|
|
}
|
|
emitWhileClause(node, node.statement.end);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitWhileStatement(node) {
|
|
emitWhileClause(node, node.pos);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
}
|
|
function emitForStatement(node) {
|
|
var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
var pos = emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitForBinding(node.initializer);
|
|
pos = emitTokenWithComment(26, node.initializer ? node.initializer.end : pos, writePunctuation, node);
|
|
emitExpressionWithLeadingSpace(node.condition);
|
|
pos = emitTokenWithComment(26, node.condition ? node.condition.end : pos, writePunctuation, node);
|
|
emitExpressionWithLeadingSpace(node.incrementor);
|
|
emitTokenWithComment(21, node.incrementor ? node.incrementor.end : pos, writePunctuation, node);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
}
|
|
function emitForInStatement(node) {
|
|
var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitForBinding(node.initializer);
|
|
writeSpace();
|
|
emitTokenWithComment(101, node.initializer.end, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
}
|
|
function emitForOfStatement(node) {
|
|
var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitWithTrailingSpace(node.awaitModifier);
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitForBinding(node.initializer);
|
|
writeSpace();
|
|
emitTokenWithComment(160, node.initializer.end, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
}
|
|
function emitForBinding(node) {
|
|
if (node !== undefined) {
|
|
if (node.kind === 255) {
|
|
emit(node);
|
|
}
|
|
else {
|
|
emitExpression(node);
|
|
}
|
|
}
|
|
}
|
|
function emitContinueStatement(node) {
|
|
emitTokenWithComment(86, node.pos, writeKeyword, node);
|
|
emitWithLeadingSpace(node.label);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitBreakStatement(node) {
|
|
emitTokenWithComment(81, node.pos, writeKeyword, node);
|
|
emitWithLeadingSpace(node.label);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitTokenWithComment(token, pos, writer, contextNode, indentLeading) {
|
|
var node = ts.getParseTreeNode(contextNode);
|
|
var isSimilarNode = node && node.kind === contextNode.kind;
|
|
var startPos = pos;
|
|
if (isSimilarNode && currentSourceFile) {
|
|
pos = ts.skipTrivia(currentSourceFile.text, pos);
|
|
}
|
|
if (isSimilarNode && contextNode.pos !== startPos) {
|
|
var needsIndent = indentLeading && currentSourceFile && !ts.positionsAreOnSameLine(startPos, pos, currentSourceFile);
|
|
if (needsIndent) {
|
|
increaseIndent();
|
|
}
|
|
emitLeadingCommentsOfPosition(startPos);
|
|
if (needsIndent) {
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
pos = writeTokenText(token, writer, pos);
|
|
if (isSimilarNode && contextNode.end !== pos) {
|
|
var isJsxExprContext = contextNode.kind === 288;
|
|
emitTrailingCommentsOfPosition(pos, !isJsxExprContext, isJsxExprContext);
|
|
}
|
|
return pos;
|
|
}
|
|
function commentWillEmitNewLine(node) {
|
|
return node.kind === 2 || !!node.hasTrailingNewLine;
|
|
}
|
|
function willEmitLeadingNewLine(node) {
|
|
if (!currentSourceFile)
|
|
return false;
|
|
if (ts.some(ts.getLeadingCommentRanges(currentSourceFile.text, node.pos), commentWillEmitNewLine))
|
|
return true;
|
|
if (ts.some(ts.getSyntheticLeadingComments(node), commentWillEmitNewLine))
|
|
return true;
|
|
if (ts.isPartiallyEmittedExpression(node)) {
|
|
if (node.pos !== node.expression.pos) {
|
|
if (ts.some(ts.getTrailingCommentRanges(currentSourceFile.text, node.expression.pos), commentWillEmitNewLine))
|
|
return true;
|
|
}
|
|
return willEmitLeadingNewLine(node.expression);
|
|
}
|
|
return false;
|
|
}
|
|
function parenthesizeExpressionForNoAsi(node) {
|
|
if (!commentsDisabled && ts.isPartiallyEmittedExpression(node) && willEmitLeadingNewLine(node)) {
|
|
var parseNode = ts.getParseTreeNode(node);
|
|
if (parseNode && ts.isParenthesizedExpression(parseNode)) {
|
|
var parens = ts.factory.createParenthesizedExpression(node.expression);
|
|
ts.setOriginalNode(parens, node);
|
|
ts.setTextRange(parens, parseNode);
|
|
return parens;
|
|
}
|
|
return ts.factory.createParenthesizedExpression(node);
|
|
}
|
|
return node;
|
|
}
|
|
function parenthesizeExpressionForNoAsiAndDisallowedComma(node) {
|
|
return parenthesizeExpressionForNoAsi(parenthesizer.parenthesizeExpressionForDisallowedComma(node));
|
|
}
|
|
function emitReturnStatement(node) {
|
|
emitTokenWithComment(105, node.pos, writeKeyword, node);
|
|
emitExpressionWithLeadingSpace(node.expression && parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsi);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitWithStatement(node) {
|
|
var openParenPos = emitTokenWithComment(116, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
emitEmbeddedStatement(node, node.statement);
|
|
}
|
|
function emitSwitchStatement(node) {
|
|
var openParenPos = emitTokenWithComment(107, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(21, node.expression.end, writePunctuation, node);
|
|
writeSpace();
|
|
emit(node.caseBlock);
|
|
}
|
|
function emitLabeledStatement(node) {
|
|
emit(node.label);
|
|
emitTokenWithComment(58, node.label.end, writePunctuation, node);
|
|
writeSpace();
|
|
emit(node.statement);
|
|
}
|
|
function emitThrowStatement(node) {
|
|
emitTokenWithComment(109, node.pos, writeKeyword, node);
|
|
emitExpressionWithLeadingSpace(parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsi);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitTryStatement(node) {
|
|
emitTokenWithComment(111, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emit(node.tryBlock);
|
|
if (node.catchClause) {
|
|
writeLineOrSpace(node, node.tryBlock, node.catchClause);
|
|
emit(node.catchClause);
|
|
}
|
|
if (node.finallyBlock) {
|
|
writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
|
|
emitTokenWithComment(96, (node.catchClause || node.tryBlock).end, writeKeyword, node);
|
|
writeSpace();
|
|
emit(node.finallyBlock);
|
|
}
|
|
}
|
|
function emitDebuggerStatement(node) {
|
|
writeToken(87, node.pos, writeKeyword);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitVariableDeclaration(node) {
|
|
var _a, _b, _c, _d, _e;
|
|
emit(node.name);
|
|
emit(node.exclamationToken);
|
|
emitTypeAnnotation(node.type);
|
|
emitInitializer(node.initializer, (_e = (_b = (_a = node.type) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : (_d = (_c = node.name.emitNode) === null || _c === void 0 ? void 0 : _c.typeNode) === null || _d === void 0 ? void 0 : _d.end) !== null && _e !== void 0 ? _e : node.name.end, node, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitVariableDeclarationList(node) {
|
|
writeKeyword(ts.isLet(node) ? "let" : ts.isVarConst(node) ? "const" : "var");
|
|
writeSpace();
|
|
emitList(node, node.declarations, 528);
|
|
}
|
|
function emitFunctionDeclaration(node) {
|
|
emitFunctionDeclarationOrExpression(node);
|
|
}
|
|
function emitFunctionDeclarationOrExpression(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
writeKeyword("function");
|
|
emit(node.asteriskToken);
|
|
writeSpace();
|
|
emitIdentifierName(node.name);
|
|
emitSignatureAndBody(node, emitSignatureHead);
|
|
}
|
|
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);
|
|
emitBlockFunctionBody(body);
|
|
popNameGenerationScope(node);
|
|
if (indentedFlag) {
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
else {
|
|
emitSignatureHead(node);
|
|
writeSpace();
|
|
emitExpression(body, parenthesizer.parenthesizeConciseBodyOfArrowFunction);
|
|
}
|
|
}
|
|
else {
|
|
emitSignatureHead(node);
|
|
writeTrailingSemicolon();
|
|
}
|
|
}
|
|
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) && currentSourceFile && !ts.rangeIsOnSingleLine(body, currentSourceFile)) {
|
|
return false;
|
|
}
|
|
if (getLeadingLineTerminatorCount(body, ts.firstOrUndefined(body.statements), 2)
|
|
|| getClosingLineTerminatorCount(body, ts.lastOrUndefined(body.statements), 2, body.statements)) {
|
|
return false;
|
|
}
|
|
var previousStatement;
|
|
for (var _a = 0, _b = body.statements; _a < _b.length; _a++) {
|
|
var statement = _b[_a];
|
|
if (getSeparatingLineTerminatorCount(previousStatement, statement, 2) > 0) {
|
|
return false;
|
|
}
|
|
previousStatement = statement;
|
|
}
|
|
return true;
|
|
}
|
|
function emitBlockFunctionBody(body) {
|
|
onBeforeEmitNode === null || onBeforeEmitNode === void 0 ? void 0 : onBeforeEmitNode(body);
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
increaseIndent();
|
|
var emitBlockFunctionBody = shouldEmitBlockFunctionBodyOnSingleLine(body)
|
|
? emitBlockFunctionBodyOnSingleLine
|
|
: emitBlockFunctionBodyWorker;
|
|
emitBodyWithDetachedComments(body, body.statements, emitBlockFunctionBody);
|
|
decreaseIndent();
|
|
writeToken(19, body.statements.end, writePunctuation, body);
|
|
onAfterEmitNode === null || onAfterEmitNode === void 0 ? void 0 : onAfterEmitNode(body);
|
|
}
|
|
function emitBlockFunctionBodyOnSingleLine(body) {
|
|
emitBlockFunctionBodyWorker(body, true);
|
|
}
|
|
function emitBlockFunctionBodyWorker(body, emitBlockFunctionBodyOnSingleLine) {
|
|
var statementOffset = emitPrologueDirectives(body.statements);
|
|
var pos = writer.getTextPos();
|
|
emitHelpers(body);
|
|
if (statementOffset === 0 && pos === writer.getTextPos() && emitBlockFunctionBodyOnSingleLine) {
|
|
decreaseIndent();
|
|
emitList(body, body.statements, 768);
|
|
increaseIndent();
|
|
}
|
|
else {
|
|
emitList(body, body.statements, 1, undefined, statementOffset);
|
|
}
|
|
}
|
|
function emitClassDeclaration(node) {
|
|
emitClassDeclarationOrExpression(node);
|
|
}
|
|
function emitClassDeclarationOrExpression(node) {
|
|
ts.forEach(node.members, generateMemberNames);
|
|
emitDecoratorsAndModifiers(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, 129);
|
|
writePunctuation("}");
|
|
if (indentedFlag) {
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
function emitInterfaceDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
writeKeyword("interface");
|
|
writeSpace();
|
|
emit(node.name);
|
|
emitTypeParameters(node, node.typeParameters);
|
|
emitList(node, node.heritageClauses, 512);
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
emitList(node, node.members, 129);
|
|
writePunctuation("}");
|
|
}
|
|
function emitTypeAliasDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
writeKeyword("type");
|
|
writeSpace();
|
|
emit(node.name);
|
|
emitTypeParameters(node, node.typeParameters);
|
|
writeSpace();
|
|
writePunctuation("=");
|
|
writeSpace();
|
|
emit(node.type);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitEnumDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
writeKeyword("enum");
|
|
writeSpace();
|
|
emit(node.name);
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
emitList(node, node.members, 145);
|
|
writePunctuation("}");
|
|
}
|
|
function emitModuleDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
if (~node.flags & 1024) {
|
|
writeKeyword(node.flags & 16 ? "namespace" : "module");
|
|
writeSpace();
|
|
}
|
|
emit(node.name);
|
|
var body = node.body;
|
|
if (!body)
|
|
return writeTrailingSemicolon();
|
|
while (body && ts.isModuleDeclaration(body)) {
|
|
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(18, node.pos, writePunctuation, node);
|
|
emitList(node, node.clauses, 129);
|
|
emitTokenWithComment(19, node.clauses.end, writePunctuation, node, true);
|
|
}
|
|
function emitImportEqualsDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
emitTokenWithComment(100, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
if (node.isTypeOnly) {
|
|
emitTokenWithComment(152, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
}
|
|
emit(node.name);
|
|
writeSpace();
|
|
emitTokenWithComment(63, node.name.end, writePunctuation, node);
|
|
writeSpace();
|
|
emitModuleReference(node.moduleReference);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitModuleReference(node) {
|
|
if (node.kind === 79) {
|
|
emitExpression(node);
|
|
}
|
|
else {
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitImportDeclaration(node) {
|
|
emitModifiers(node, node.modifiers);
|
|
emitTokenWithComment(100, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
if (node.importClause) {
|
|
emit(node.importClause);
|
|
writeSpace();
|
|
emitTokenWithComment(156, node.importClause.end, writeKeyword, node);
|
|
writeSpace();
|
|
}
|
|
emitExpression(node.moduleSpecifier);
|
|
if (node.assertClause) {
|
|
emitWithLeadingSpace(node.assertClause);
|
|
}
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitImportClause(node) {
|
|
if (node.isTypeOnly) {
|
|
emitTokenWithComment(152, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
}
|
|
emit(node.name);
|
|
if (node.name && node.namedBindings) {
|
|
emitTokenWithComment(27, node.name.end, writePunctuation, node);
|
|
writeSpace();
|
|
}
|
|
emit(node.namedBindings);
|
|
}
|
|
function emitNamespaceImport(node) {
|
|
var asPos = emitTokenWithComment(41, node.pos, writePunctuation, node);
|
|
writeSpace();
|
|
emitTokenWithComment(127, asPos, writeKeyword, node);
|
|
writeSpace();
|
|
emit(node.name);
|
|
}
|
|
function emitNamedImports(node) {
|
|
emitNamedImportsOrExports(node);
|
|
}
|
|
function emitImportSpecifier(node) {
|
|
emitImportOrExportSpecifier(node);
|
|
}
|
|
function emitExportAssignment(node) {
|
|
var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
if (node.isExportEquals) {
|
|
emitTokenWithComment(63, nextPos, writeOperator, node);
|
|
}
|
|
else {
|
|
emitTokenWithComment(88, nextPos, writeKeyword, node);
|
|
}
|
|
writeSpace();
|
|
emitExpression(node.expression, node.isExportEquals ?
|
|
parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63) :
|
|
parenthesizer.parenthesizeExpressionOfExportDefault);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitExportDeclaration(node) {
|
|
var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
if (node.isTypeOnly) {
|
|
nextPos = emitTokenWithComment(152, nextPos, writeKeyword, node);
|
|
writeSpace();
|
|
}
|
|
if (node.exportClause) {
|
|
emit(node.exportClause);
|
|
}
|
|
else {
|
|
nextPos = emitTokenWithComment(41, nextPos, writePunctuation, node);
|
|
}
|
|
if (node.moduleSpecifier) {
|
|
writeSpace();
|
|
var fromPos = node.exportClause ? node.exportClause.end : nextPos;
|
|
emitTokenWithComment(156, fromPos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.moduleSpecifier);
|
|
}
|
|
if (node.assertClause) {
|
|
emitWithLeadingSpace(node.assertClause);
|
|
}
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitAssertClause(node) {
|
|
emitTokenWithComment(129, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
var elements = node.elements;
|
|
emitList(node, elements, 526226);
|
|
}
|
|
function emitAssertEntry(node) {
|
|
emit(node.name);
|
|
writePunctuation(":");
|
|
writeSpace();
|
|
var value = node.value;
|
|
if ((ts.getEmitFlags(value) & 512) === 0) {
|
|
var commentRange = ts.getCommentRange(value);
|
|
emitTrailingCommentsOfPosition(commentRange.pos);
|
|
}
|
|
emit(value);
|
|
}
|
|
function emitNamespaceExportDeclaration(node) {
|
|
var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
nextPos = emitTokenWithComment(127, nextPos, writeKeyword, node);
|
|
writeSpace();
|
|
nextPos = emitTokenWithComment(142, nextPos, writeKeyword, node);
|
|
writeSpace();
|
|
emit(node.name);
|
|
writeTrailingSemicolon();
|
|
}
|
|
function emitNamespaceExport(node) {
|
|
var asPos = emitTokenWithComment(41, node.pos, writePunctuation, node);
|
|
writeSpace();
|
|
emitTokenWithComment(127, asPos, writeKeyword, node);
|
|
writeSpace();
|
|
emit(node.name);
|
|
}
|
|
function emitNamedExports(node) {
|
|
emitNamedImportsOrExports(node);
|
|
}
|
|
function emitExportSpecifier(node) {
|
|
emitImportOrExportSpecifier(node);
|
|
}
|
|
function emitNamedImportsOrExports(node) {
|
|
writePunctuation("{");
|
|
emitList(node, node.elements, 525136);
|
|
writePunctuation("}");
|
|
}
|
|
function emitImportOrExportSpecifier(node) {
|
|
if (node.isTypeOnly) {
|
|
writeKeyword("type");
|
|
writeSpace();
|
|
}
|
|
if (node.propertyName) {
|
|
emit(node.propertyName);
|
|
writeSpace();
|
|
emitTokenWithComment(127, 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, 262144);
|
|
emit(node.closingElement);
|
|
}
|
|
function emitJsxSelfClosingElement(node) {
|
|
writePunctuation("<");
|
|
emitJsxTagName(node.tagName);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
writeSpace();
|
|
emit(node.attributes);
|
|
writePunctuation("/>");
|
|
}
|
|
function emitJsxFragment(node) {
|
|
emit(node.openingFragment);
|
|
emitList(node, node.children, 262144);
|
|
emit(node.closingFragment);
|
|
}
|
|
function emitJsxOpeningElementOrFragment(node) {
|
|
writePunctuation("<");
|
|
if (ts.isJsxOpeningElement(node)) {
|
|
var indented = writeLineSeparatorsAndIndentBefore(node.tagName, node);
|
|
emitJsxTagName(node.tagName);
|
|
emitTypeArguments(node, node.typeArguments);
|
|
if (node.attributes.properties && node.attributes.properties.length > 0) {
|
|
writeSpace();
|
|
}
|
|
emit(node.attributes);
|
|
writeLineSeparatorsAfter(node.attributes, node);
|
|
decreaseIndentIf(indented);
|
|
}
|
|
writePunctuation(">");
|
|
}
|
|
function emitJsxText(node) {
|
|
writer.writeLiteral(node.text);
|
|
}
|
|
function emitJsxClosingElementOrFragment(node) {
|
|
writePunctuation("</");
|
|
if (ts.isJsxClosingElement(node)) {
|
|
emitJsxTagName(node.tagName);
|
|
}
|
|
writePunctuation(">");
|
|
}
|
|
function emitJsxAttributes(node) {
|
|
emitList(node, node.properties, 262656);
|
|
}
|
|
function emitJsxAttribute(node) {
|
|
emit(node.name);
|
|
emitNodeWithPrefix("=", writePunctuation, node.initializer, emitJsxAttributeValue);
|
|
}
|
|
function emitJsxSpreadAttribute(node) {
|
|
writePunctuation("{...");
|
|
emitExpression(node.expression);
|
|
writePunctuation("}");
|
|
}
|
|
function hasTrailingCommentsAtPosition(pos) {
|
|
var result = false;
|
|
ts.forEachTrailingCommentRange((currentSourceFile === null || currentSourceFile === void 0 ? void 0 : currentSourceFile.text) || "", pos + 1, function () { return result = true; });
|
|
return result;
|
|
}
|
|
function hasLeadingCommentsAtPosition(pos) {
|
|
var result = false;
|
|
ts.forEachLeadingCommentRange((currentSourceFile === null || currentSourceFile === void 0 ? void 0 : currentSourceFile.text) || "", pos + 1, function () { return result = true; });
|
|
return result;
|
|
}
|
|
function hasCommentsAtPosition(pos) {
|
|
return hasTrailingCommentsAtPosition(pos) || hasLeadingCommentsAtPosition(pos);
|
|
}
|
|
function emitJsxExpression(node) {
|
|
var _a;
|
|
if (node.expression || (!commentsDisabled && !ts.nodeIsSynthesized(node) && hasCommentsAtPosition(node.pos))) {
|
|
var isMultiline = currentSourceFile && !ts.nodeIsSynthesized(node) && ts.getLineAndCharacterOfPosition(currentSourceFile, node.pos).line !== ts.getLineAndCharacterOfPosition(currentSourceFile, node.end).line;
|
|
if (isMultiline) {
|
|
writer.increaseIndent();
|
|
}
|
|
var end = emitTokenWithComment(18, node.pos, writePunctuation, node);
|
|
emit(node.dotDotDotToken);
|
|
emitExpression(node.expression);
|
|
emitTokenWithComment(19, ((_a = node.expression) === null || _a === void 0 ? void 0 : _a.end) || end, writePunctuation, node);
|
|
if (isMultiline) {
|
|
writer.decreaseIndent();
|
|
}
|
|
}
|
|
}
|
|
function emitJsxTagName(node) {
|
|
if (node.kind === 79) {
|
|
emitExpression(node);
|
|
}
|
|
else {
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitCaseClause(node) {
|
|
emitTokenWithComment(82, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
|
|
}
|
|
function emitDefaultClause(node) {
|
|
var pos = emitTokenWithComment(88, node.pos, writeKeyword, node);
|
|
emitCaseOrDefaultClauseRest(node, node.statements, pos);
|
|
}
|
|
function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
|
|
var emitAsSingleStatement = statements.length === 1 &&
|
|
(!currentSourceFile ||
|
|
ts.nodeIsSynthesized(parentNode) ||
|
|
ts.nodeIsSynthesized(statements[0]) ||
|
|
ts.rangeStartPositionsAreOnSameLine(parentNode, statements[0], currentSourceFile));
|
|
var format = 163969;
|
|
if (emitAsSingleStatement) {
|
|
writeToken(58, colonPos, writePunctuation, parentNode);
|
|
writeSpace();
|
|
format &= ~(1 | 128);
|
|
}
|
|
else {
|
|
emitTokenWithComment(58, colonPos, writePunctuation, parentNode);
|
|
}
|
|
emitList(parentNode, statements, format);
|
|
}
|
|
function emitHeritageClause(node) {
|
|
writeSpace();
|
|
writeTokenText(node.token, writeKeyword);
|
|
writeSpace();
|
|
emitList(node, node.types, 528);
|
|
}
|
|
function emitCatchClause(node) {
|
|
var openParenPos = emitTokenWithComment(83, node.pos, writeKeyword, node);
|
|
writeSpace();
|
|
if (node.variableDeclaration) {
|
|
emitTokenWithComment(20, openParenPos, writePunctuation, node);
|
|
emit(node.variableDeclaration);
|
|
emitTokenWithComment(21, node.variableDeclaration.end, writePunctuation, node);
|
|
writeSpace();
|
|
}
|
|
emit(node.block);
|
|
}
|
|
function emitPropertyAssignment(node) {
|
|
emit(node.name);
|
|
writePunctuation(":");
|
|
writeSpace();
|
|
var initializer = node.initializer;
|
|
if ((ts.getEmitFlags(initializer) & 512) === 0) {
|
|
var commentRange = ts.getCommentRange(initializer);
|
|
emitTrailingCommentsOfPosition(commentRange.pos);
|
|
}
|
|
emitExpression(initializer, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitShorthandPropertyAssignment(node) {
|
|
emit(node.name);
|
|
if (node.objectAssignmentInitializer) {
|
|
writeSpace();
|
|
writePunctuation("=");
|
|
writeSpace();
|
|
emitExpression(node.objectAssignmentInitializer, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
}
|
|
function emitSpreadAssignment(node) {
|
|
if (node.expression) {
|
|
emitTokenWithComment(25, node.pos, writePunctuation, node);
|
|
emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
}
|
|
function emitEnumMember(node) {
|
|
emit(node.name);
|
|
emitInitializer(node.initializer, node.name.end, node, parenthesizer.parenthesizeExpressionForDisallowedComma);
|
|
}
|
|
function emitJSDoc(node) {
|
|
write("/**");
|
|
if (node.comment) {
|
|
var text = ts.getTextOfJSDocComment(node.comment);
|
|
if (text) {
|
|
var lines = text.split(/\r\n?|\n/g);
|
|
for (var _a = 0, lines_2 = lines; _a < lines_2.length; _a++) {
|
|
var line = lines_2[_a];
|
|
writeLine();
|
|
writeSpace();
|
|
writePunctuation("*");
|
|
writeSpace();
|
|
write(line);
|
|
}
|
|
}
|
|
}
|
|
if (node.tags) {
|
|
if (node.tags.length === 1 && node.tags[0].kind === 343 && !node.comment) {
|
|
writeSpace();
|
|
emit(node.tags[0]);
|
|
}
|
|
else {
|
|
emitList(node, node.tags, 33);
|
|
}
|
|
}
|
|
writeSpace();
|
|
write("*/");
|
|
}
|
|
function emitJSDocSimpleTypedTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
emitJSDocTypeExpression(tag.typeExpression);
|
|
emitJSDocComment(tag.comment);
|
|
}
|
|
function emitJSDocSeeTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
emit(tag.name);
|
|
emitJSDocComment(tag.comment);
|
|
}
|
|
function emitJSDocNameReference(node) {
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
emit(node.name);
|
|
writePunctuation("}");
|
|
}
|
|
function emitJSDocHeritageTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
emit(tag.class);
|
|
writePunctuation("}");
|
|
emitJSDocComment(tag.comment);
|
|
}
|
|
function emitJSDocTemplateTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
emitJSDocTypeExpression(tag.constraint);
|
|
writeSpace();
|
|
emitList(tag, tag.typeParameters, 528);
|
|
emitJSDocComment(tag.comment);
|
|
}
|
|
function emitJSDocTypedefTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
if (tag.typeExpression) {
|
|
if (tag.typeExpression.kind === 309) {
|
|
emitJSDocTypeExpression(tag.typeExpression);
|
|
}
|
|
else {
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
write("Object");
|
|
if (tag.typeExpression.isArrayType) {
|
|
writePunctuation("[");
|
|
writePunctuation("]");
|
|
}
|
|
writePunctuation("}");
|
|
}
|
|
}
|
|
if (tag.fullName) {
|
|
writeSpace();
|
|
emit(tag.fullName);
|
|
}
|
|
emitJSDocComment(tag.comment);
|
|
if (tag.typeExpression && tag.typeExpression.kind === 322) {
|
|
emitJSDocTypeLiteral(tag.typeExpression);
|
|
}
|
|
}
|
|
function emitJSDocCallbackTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
if (tag.name) {
|
|
writeSpace();
|
|
emit(tag.name);
|
|
}
|
|
emitJSDocComment(tag.comment);
|
|
emitJSDocSignature(tag.typeExpression);
|
|
}
|
|
function emitJSDocSimpleTag(tag) {
|
|
emitJSDocTagName(tag.tagName);
|
|
emitJSDocComment(tag.comment);
|
|
}
|
|
function emitJSDocTypeLiteral(lit) {
|
|
emitList(lit, ts.factory.createNodeArray(lit.jsDocPropertyTags), 33);
|
|
}
|
|
function emitJSDocSignature(sig) {
|
|
if (sig.typeParameters) {
|
|
emitList(sig, ts.factory.createNodeArray(sig.typeParameters), 33);
|
|
}
|
|
if (sig.parameters) {
|
|
emitList(sig, ts.factory.createNodeArray(sig.parameters), 33);
|
|
}
|
|
if (sig.type) {
|
|
writeLine();
|
|
writeSpace();
|
|
writePunctuation("*");
|
|
writeSpace();
|
|
emit(sig.type);
|
|
}
|
|
}
|
|
function emitJSDocPropertyLikeTag(param) {
|
|
emitJSDocTagName(param.tagName);
|
|
emitJSDocTypeExpression(param.typeExpression);
|
|
writeSpace();
|
|
if (param.isBracketed) {
|
|
writePunctuation("[");
|
|
}
|
|
emit(param.name);
|
|
if (param.isBracketed) {
|
|
writePunctuation("]");
|
|
}
|
|
emitJSDocComment(param.comment);
|
|
}
|
|
function emitJSDocTagName(tagName) {
|
|
writePunctuation("@");
|
|
emit(tagName);
|
|
}
|
|
function emitJSDocComment(comment) {
|
|
var text = ts.getTextOfJSDocComment(comment);
|
|
if (text) {
|
|
writeSpace();
|
|
write(text);
|
|
}
|
|
}
|
|
function emitJSDocTypeExpression(typeExpression) {
|
|
if (typeExpression) {
|
|
writeSpace();
|
|
writePunctuation("{");
|
|
emit(typeExpression.type);
|
|
writePunctuation("}");
|
|
}
|
|
}
|
|
function emitSourceFile(node) {
|
|
writeLine();
|
|
var statements = node.statements;
|
|
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 || [], node.syntheticLibReferences || []);
|
|
for (var _a = 0, _b = node.prepends; _a < _b.length; _a++) {
|
|
var prepend = _b[_a];
|
|
if (ts.isUnparsedSource(prepend) && prepend.syntheticReferences) {
|
|
for (var _c = 0, _d = prepend.syntheticReferences; _c < _d.length; _c++) {
|
|
var ref = _d[_c];
|
|
emit(ref);
|
|
writeLine();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function emitTripleSlashDirectivesIfNeeded(node) {
|
|
if (node.isDeclarationFile)
|
|
emitTripleSlashDirectives(node.hasNoDefaultLib, node.referencedFiles, node.typeReferenceDirectives, node.libReferenceDirectives);
|
|
}
|
|
function emitTripleSlashDirectives(hasNoDefaultLib, files, types, libs) {
|
|
if (hasNoDefaultLib) {
|
|
var pos = writer.getTextPos();
|
|
writeComment("/// <reference no-default-lib=\"true\"/>");
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "no-default-lib" });
|
|
writeLine();
|
|
}
|
|
if (currentSourceFile && currentSourceFile.moduleName) {
|
|
writeComment("/// <amd-module name=\"".concat(currentSourceFile.moduleName, "\" />"));
|
|
writeLine();
|
|
}
|
|
if (currentSourceFile && currentSourceFile.amdDependencies) {
|
|
for (var _a = 0, _b = currentSourceFile.amdDependencies; _a < _b.length; _a++) {
|
|
var dep = _b[_a];
|
|
if (dep.name) {
|
|
writeComment("/// <amd-dependency name=\"".concat(dep.name, "\" path=\"").concat(dep.path, "\" />"));
|
|
}
|
|
else {
|
|
writeComment("/// <amd-dependency path=\"".concat(dep.path, "\" />"));
|
|
}
|
|
writeLine();
|
|
}
|
|
}
|
|
for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
|
|
var directive = files_2[_c];
|
|
var pos = writer.getTextPos();
|
|
writeComment("/// <reference path=\"".concat(directive.fileName, "\" />"));
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference", data: directive.fileName });
|
|
writeLine();
|
|
}
|
|
for (var _d = 0, types_23 = types; _d < types_23.length; _d++) {
|
|
var directive = types_23[_d];
|
|
var pos = writer.getTextPos();
|
|
var resolutionMode = directive.resolutionMode && directive.resolutionMode !== (currentSourceFile === null || currentSourceFile === void 0 ? void 0 : currentSourceFile.impliedNodeFormat)
|
|
? "resolution-mode=\"".concat(directive.resolutionMode === ts.ModuleKind.ESNext ? "import" : "require", "\"")
|
|
: "";
|
|
writeComment("/// <reference types=\"".concat(directive.fileName, "\" ").concat(resolutionMode, "/>"));
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: !directive.resolutionMode ? "type" : directive.resolutionMode === ts.ModuleKind.ESNext ? "type-import" : "type-require", data: directive.fileName });
|
|
writeLine();
|
|
}
|
|
for (var _e = 0, libs_1 = libs; _e < libs_1.length; _e++) {
|
|
var directive = libs_1[_e];
|
|
var pos = writer.getTextPos();
|
|
writeComment("/// <reference lib=\"".concat(directive.fileName, "\" />"));
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "lib", data: directive.fileName });
|
|
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, undefined, index === -1 ? statements.length : index);
|
|
popNameGenerationScope(node);
|
|
}
|
|
function emitPartiallyEmittedExpression(node) {
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
if (!(emitFlags & 512) && node.pos !== node.expression.pos) {
|
|
emitTrailingCommentsOfPosition(node.expression.pos);
|
|
}
|
|
emitExpression(node.expression);
|
|
if (!(emitFlags & 1024) && node.end !== node.expression.end) {
|
|
emitLeadingCommentsOfPosition(node.expression.end);
|
|
}
|
|
}
|
|
function emitCommaList(node) {
|
|
emitExpressionList(node, node.elements, 528, undefined);
|
|
}
|
|
function emitPrologueDirectives(statements, sourceFile, seenPrologueDirectives, recordBundleFileSection) {
|
|
var needsToSetSourceFile = !!sourceFile;
|
|
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 (needsToSetSourceFile) {
|
|
needsToSetSourceFile = false;
|
|
setSourceFile(sourceFile);
|
|
}
|
|
writeLine();
|
|
var pos = writer.getTextPos();
|
|
emit(statement);
|
|
if (recordBundleFileSection && bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "prologue", data: statement.expression.text });
|
|
if (seenPrologueDirectives) {
|
|
seenPrologueDirectives.add(statement.expression.text);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return i;
|
|
}
|
|
}
|
|
return statements.length;
|
|
}
|
|
function emitUnparsedPrologues(prologues, seenPrologueDirectives) {
|
|
for (var _a = 0, prologues_1 = prologues; _a < prologues_1.length; _a++) {
|
|
var prologue = prologues_1[_a];
|
|
if (!seenPrologueDirectives.has(prologue.data)) {
|
|
writeLine();
|
|
var pos = writer.getTextPos();
|
|
emit(prologue);
|
|
if (bundleFileInfo)
|
|
bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "prologue", data: prologue.data });
|
|
if (seenPrologueDirectives) {
|
|
seenPrologueDirectives.add(prologue.data);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function emitPrologueDirectivesIfNeeded(sourceFileOrBundle) {
|
|
if (ts.isSourceFile(sourceFileOrBundle)) {
|
|
emitPrologueDirectives(sourceFileOrBundle.statements, sourceFileOrBundle);
|
|
}
|
|
else {
|
|
var seenPrologueDirectives = new ts.Set();
|
|
for (var _a = 0, _b = sourceFileOrBundle.prepends; _a < _b.length; _a++) {
|
|
var prepend = _b[_a];
|
|
emitUnparsedPrologues(prepend.prologues, seenPrologueDirectives);
|
|
}
|
|
for (var _c = 0, _d = sourceFileOrBundle.sourceFiles; _c < _d.length; _c++) {
|
|
var sourceFile = _d[_c];
|
|
emitPrologueDirectives(sourceFile.statements, sourceFile, seenPrologueDirectives, true);
|
|
}
|
|
setSourceFile(undefined);
|
|
}
|
|
}
|
|
function getPrologueDirectivesFromBundledSourceFiles(bundle) {
|
|
var seenPrologueDirectives = new ts.Set();
|
|
var prologues;
|
|
for (var index = 0; index < bundle.sourceFiles.length; index++) {
|
|
var sourceFile = bundle.sourceFiles[index];
|
|
var directives = void 0;
|
|
var end = 0;
|
|
for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) {
|
|
var statement = _b[_a];
|
|
if (!ts.isPrologueDirective(statement))
|
|
break;
|
|
if (seenPrologueDirectives.has(statement.expression.text))
|
|
continue;
|
|
seenPrologueDirectives.add(statement.expression.text);
|
|
(directives || (directives = [])).push({
|
|
pos: statement.pos,
|
|
end: statement.end,
|
|
expression: {
|
|
pos: statement.expression.pos,
|
|
end: statement.expression.end,
|
|
text: statement.expression.text
|
|
}
|
|
});
|
|
end = end < statement.end ? statement.end : end;
|
|
}
|
|
if (directives)
|
|
(prologues || (prologues = [])).push({ file: index, text: sourceFile.text.substring(0, end), directives: directives });
|
|
}
|
|
return prologues;
|
|
}
|
|
function emitShebangIfNeeded(sourceFileOrBundle) {
|
|
if (ts.isSourceFile(sourceFileOrBundle) || ts.isUnparsedSource(sourceFileOrBundle)) {
|
|
var shebang = ts.getShebang(sourceFileOrBundle.text);
|
|
if (shebang) {
|
|
writeComment(shebang);
|
|
writeLine();
|
|
return true;
|
|
}
|
|
}
|
|
else {
|
|
for (var _a = 0, _b = sourceFileOrBundle.prepends; _a < _b.length; _a++) {
|
|
var prepend = _b[_a];
|
|
ts.Debug.assertNode(prepend, ts.isUnparsedSource);
|
|
if (emitShebangIfNeeded(prepend)) {
|
|
return true;
|
|
}
|
|
}
|
|
for (var _c = 0, _d = sourceFileOrBundle.sourceFiles; _c < _d.length; _c++) {
|
|
var sourceFile = _d[_c];
|
|
if (emitShebangIfNeeded(sourceFile)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function emitNodeWithWriter(node, writer) {
|
|
if (!node)
|
|
return;
|
|
var savedWrite = write;
|
|
write = writer;
|
|
emit(node);
|
|
write = savedWrite;
|
|
}
|
|
function emitDecoratorsAndModifiers(node, modifiers) {
|
|
if (modifiers === null || modifiers === void 0 ? void 0 : modifiers.length) {
|
|
if (ts.every(modifiers, ts.isModifier)) {
|
|
return emitModifiers(node, modifiers);
|
|
}
|
|
if (ts.every(modifiers, ts.isDecorator)) {
|
|
return emitDecorators(node, modifiers);
|
|
}
|
|
onBeforeEmitNodeArray === null || onBeforeEmitNodeArray === void 0 ? void 0 : onBeforeEmitNodeArray(modifiers);
|
|
var lastMode = void 0;
|
|
var mode = void 0;
|
|
var start = 0;
|
|
var pos = 0;
|
|
while (start < modifiers.length) {
|
|
while (pos < modifiers.length) {
|
|
var modifier = modifiers[pos];
|
|
mode = ts.isDecorator(modifier) ? "decorators" : "modifiers";
|
|
if (lastMode === undefined) {
|
|
lastMode = mode;
|
|
}
|
|
else if (mode !== lastMode) {
|
|
break;
|
|
}
|
|
pos++;
|
|
}
|
|
var textRange = { pos: -1, end: -1 };
|
|
if (start === 0)
|
|
textRange.pos = modifiers.pos;
|
|
if (pos === modifiers.length - 1)
|
|
textRange.end = modifiers.end;
|
|
emitNodeListItems(emit, node, modifiers, lastMode === "modifiers" ? 2359808 : 2146305, undefined, start, pos - start, false, textRange);
|
|
start = pos;
|
|
lastMode = mode;
|
|
pos++;
|
|
}
|
|
onAfterEmitNodeArray === null || onAfterEmitNodeArray === void 0 ? void 0 : onAfterEmitNodeArray(modifiers);
|
|
}
|
|
}
|
|
function emitModifiers(node, modifiers) {
|
|
emitList(node, modifiers, 2359808);
|
|
}
|
|
function emitTypeAnnotation(node) {
|
|
if (node) {
|
|
writePunctuation(":");
|
|
writeSpace();
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
|
|
if (node) {
|
|
writeSpace();
|
|
emitTokenWithComment(63, equalCommentStartPos, writeOperator, container);
|
|
writeSpace();
|
|
emitExpression(node, parenthesizerRule);
|
|
}
|
|
}
|
|
function emitNodeWithPrefix(prefix, prefixWriter, node, emit) {
|
|
if (node) {
|
|
prefixWriter(prefix);
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitWithLeadingSpace(node) {
|
|
if (node) {
|
|
writeSpace();
|
|
emit(node);
|
|
}
|
|
}
|
|
function emitExpressionWithLeadingSpace(node, parenthesizerRule) {
|
|
if (node) {
|
|
writeSpace();
|
|
emitExpression(node, parenthesizerRule);
|
|
}
|
|
}
|
|
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();
|
|
if (ts.isEmptyStatement(node)) {
|
|
pipelineEmit(5, node);
|
|
}
|
|
else {
|
|
emit(node);
|
|
}
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
function emitDecorators(parentNode, decorators) {
|
|
emitList(parentNode, decorators, 2146305);
|
|
}
|
|
function emitTypeArguments(parentNode, typeArguments) {
|
|
emitList(parentNode, typeArguments, 53776, typeArgumentParenthesizerRuleSelector);
|
|
}
|
|
function emitTypeParameters(parentNode, typeParameters) {
|
|
if (ts.isFunctionLike(parentNode) && parentNode.typeArguments) {
|
|
return emitTypeArguments(parentNode, parentNode.typeArguments);
|
|
}
|
|
emitList(parentNode, typeParameters, 53776);
|
|
}
|
|
function emitParameters(parentNode, parameters) {
|
|
emitList(parentNode, parameters, 2576);
|
|
}
|
|
function canEmitSimpleArrowHead(parentNode, parameters) {
|
|
var parameter = ts.singleOrUndefined(parameters);
|
|
return parameter
|
|
&& parameter.pos === parentNode.pos
|
|
&& ts.isArrowFunction(parentNode)
|
|
&& !parentNode.type
|
|
&& !ts.some(parentNode.modifiers)
|
|
&& !ts.some(parentNode.typeParameters)
|
|
&& !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, 2576 & ~2048);
|
|
}
|
|
else {
|
|
emitParameters(parentNode, parameters);
|
|
}
|
|
}
|
|
function emitParametersForIndexSignature(parentNode, parameters) {
|
|
emitList(parentNode, parameters, 8848);
|
|
}
|
|
function writeDelimiter(format) {
|
|
switch (format & 60) {
|
|
case 0:
|
|
break;
|
|
case 16:
|
|
writePunctuation(",");
|
|
break;
|
|
case 4:
|
|
writeSpace();
|
|
writePunctuation("|");
|
|
break;
|
|
case 32:
|
|
writeSpace();
|
|
writePunctuation("*");
|
|
writeSpace();
|
|
break;
|
|
case 8:
|
|
writeSpace();
|
|
writePunctuation("&");
|
|
break;
|
|
}
|
|
}
|
|
function emitList(parentNode, children, format, parenthesizerRule, start, count) {
|
|
emitNodeList(emit, parentNode, children, format, parenthesizerRule, start, count);
|
|
}
|
|
function emitExpressionList(parentNode, children, format, parenthesizerRule, start, count) {
|
|
emitNodeList(emitExpression, parentNode, children, format, parenthesizerRule, start, count);
|
|
}
|
|
function emitNodeList(emit, parentNode, children, format, parenthesizerRule, 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 & 16384) {
|
|
return;
|
|
}
|
|
var isEmpty = children === undefined || start >= children.length || count === 0;
|
|
if (isEmpty && format & 32768) {
|
|
onBeforeEmitNodeArray === null || onBeforeEmitNodeArray === void 0 ? void 0 : onBeforeEmitNodeArray(children);
|
|
onAfterEmitNodeArray === null || onAfterEmitNodeArray === void 0 ? void 0 : onAfterEmitNodeArray(children);
|
|
return;
|
|
}
|
|
if (format & 15360) {
|
|
writePunctuation(getOpeningBracket(format));
|
|
if (isEmpty && children) {
|
|
emitTrailingCommentsOfPosition(children.pos, true);
|
|
}
|
|
}
|
|
onBeforeEmitNodeArray === null || onBeforeEmitNodeArray === void 0 ? void 0 : onBeforeEmitNodeArray(children);
|
|
if (isEmpty) {
|
|
if (format & 1 && !(preserveSourceNewlines && (!parentNode || currentSourceFile && ts.rangeIsOnSingleLine(parentNode, currentSourceFile)))) {
|
|
writeLine();
|
|
}
|
|
else if (format & 256 && !(format & 524288)) {
|
|
writeSpace();
|
|
}
|
|
}
|
|
else {
|
|
emitNodeListItems(emit, parentNode, children, format, parenthesizerRule, start, count, children.hasTrailingComma, children);
|
|
}
|
|
onAfterEmitNodeArray === null || onAfterEmitNodeArray === void 0 ? void 0 : onAfterEmitNodeArray(children);
|
|
if (format & 15360) {
|
|
if (isEmpty && children) {
|
|
emitLeadingCommentsOfPosition(children.end);
|
|
}
|
|
writePunctuation(getClosingBracket(format));
|
|
}
|
|
}
|
|
function emitNodeListItems(emit, parentNode, children, format, parenthesizerRule, start, count, hasTrailingComma, childrenTextRange) {
|
|
var mayEmitInterveningComments = (format & 262144) === 0;
|
|
var shouldEmitInterveningComments = mayEmitInterveningComments;
|
|
var leadingLineTerminatorCount = getLeadingLineTerminatorCount(parentNode, children[start], format);
|
|
if (leadingLineTerminatorCount) {
|
|
writeLine(leadingLineTerminatorCount);
|
|
shouldEmitInterveningComments = false;
|
|
}
|
|
else if (format & 256) {
|
|
writeSpace();
|
|
}
|
|
if (format & 128) {
|
|
increaseIndent();
|
|
}
|
|
var emitListItem = getEmitListItem(emit, parenthesizerRule);
|
|
var previousSibling;
|
|
var previousSourceFileTextKind;
|
|
var shouldDecreaseIndentAfterEmit = false;
|
|
for (var i = 0; i < count; i++) {
|
|
var child = children[start + i];
|
|
if (format & 32) {
|
|
writeLine();
|
|
writeDelimiter(format);
|
|
}
|
|
else if (previousSibling) {
|
|
if (format & 60 && previousSibling.end !== (parentNode ? parentNode.end : -1)) {
|
|
emitLeadingCommentsOfPosition(previousSibling.end);
|
|
}
|
|
writeDelimiter(format);
|
|
recordBundleFileInternalSectionEnd(previousSourceFileTextKind);
|
|
var separatingLineTerminatorCount = getSeparatingLineTerminatorCount(previousSibling, child, format);
|
|
if (separatingLineTerminatorCount > 0) {
|
|
if ((format & (3 | 128)) === 0) {
|
|
increaseIndent();
|
|
shouldDecreaseIndentAfterEmit = true;
|
|
}
|
|
writeLine(separatingLineTerminatorCount);
|
|
shouldEmitInterveningComments = false;
|
|
}
|
|
else if (previousSibling && format & 512) {
|
|
writeSpace();
|
|
}
|
|
}
|
|
previousSourceFileTextKind = recordBundleFileInternalSectionStart(child);
|
|
if (shouldEmitInterveningComments) {
|
|
var commentRange = ts.getCommentRange(child);
|
|
emitTrailingCommentsOfPosition(commentRange.pos);
|
|
}
|
|
else {
|
|
shouldEmitInterveningComments = mayEmitInterveningComments;
|
|
}
|
|
nextListElementPos = child.pos;
|
|
emitListItem(child, emit, parenthesizerRule, i);
|
|
if (shouldDecreaseIndentAfterEmit) {
|
|
decreaseIndent();
|
|
shouldDecreaseIndentAfterEmit = false;
|
|
}
|
|
previousSibling = child;
|
|
}
|
|
var emitFlags = previousSibling ? ts.getEmitFlags(previousSibling) : 0;
|
|
var skipTrailingComments = commentsDisabled || !!(emitFlags & 1024);
|
|
var emitTrailingComma = hasTrailingComma && (format & 64) && (format & 16);
|
|
if (emitTrailingComma) {
|
|
if (previousSibling && !skipTrailingComments) {
|
|
emitTokenWithComment(27, previousSibling.end, writePunctuation, previousSibling);
|
|
}
|
|
else {
|
|
writePunctuation(",");
|
|
}
|
|
}
|
|
if (previousSibling && (parentNode ? parentNode.end : -1) !== previousSibling.end && (format & 60) && !skipTrailingComments) {
|
|
emitLeadingCommentsOfPosition(emitTrailingComma && (childrenTextRange === null || childrenTextRange === void 0 ? void 0 : childrenTextRange.end) ? childrenTextRange.end : previousSibling.end);
|
|
}
|
|
if (format & 128) {
|
|
decreaseIndent();
|
|
}
|
|
recordBundleFileInternalSectionEnd(previousSourceFileTextKind);
|
|
var closingLineTerminatorCount = getClosingLineTerminatorCount(parentNode, children[start + count - 1], format, childrenTextRange);
|
|
if (closingLineTerminatorCount) {
|
|
writeLine(closingLineTerminatorCount);
|
|
}
|
|
else if (format & (2097152 | 256)) {
|
|
writeSpace();
|
|
}
|
|
}
|
|
function writeLiteral(s) {
|
|
writer.writeLiteral(s);
|
|
}
|
|
function writeStringLiteral(s) {
|
|
writer.writeStringLiteral(s);
|
|
}
|
|
function writeBase(s) {
|
|
writer.write(s);
|
|
}
|
|
function writeSymbol(s, sym) {
|
|
writer.writeSymbol(s, sym);
|
|
}
|
|
function writePunctuation(s) {
|
|
writer.writePunctuation(s);
|
|
}
|
|
function writeTrailingSemicolon() {
|
|
writer.writeTrailingSemicolon(";");
|
|
}
|
|
function writeKeyword(s) {
|
|
writer.writeKeyword(s);
|
|
}
|
|
function writeOperator(s) {
|
|
writer.writeOperator(s);
|
|
}
|
|
function writeParameter(s) {
|
|
writer.writeParameter(s);
|
|
}
|
|
function writeComment(s) {
|
|
writer.writeComment(s);
|
|
}
|
|
function writeSpace() {
|
|
writer.writeSpace(" ");
|
|
}
|
|
function writeProperty(s) {
|
|
writer.writeProperty(s);
|
|
}
|
|
function nonEscapingWrite(s) {
|
|
if (writer.nonEscapingWrite) {
|
|
writer.nonEscapingWrite(s);
|
|
}
|
|
else {
|
|
writer.write(s);
|
|
}
|
|
}
|
|
function writeLine(count) {
|
|
if (count === void 0) { count = 1; }
|
|
for (var i = 0; i < count; i++) {
|
|
writer.writeLine(i > 0);
|
|
}
|
|
}
|
|
function increaseIndent() {
|
|
writer.increaseIndent();
|
|
}
|
|
function decreaseIndent() {
|
|
writer.decreaseIndent();
|
|
}
|
|
function writeToken(token, pos, writer, contextNode) {
|
|
return !sourceMapsDisabled
|
|
? emitTokenWithSourceMap(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(parentNode, prevChildNode, nextChildNode) {
|
|
if (ts.getEmitFlags(parentNode) & 1) {
|
|
writeSpace();
|
|
}
|
|
else if (preserveSourceNewlines) {
|
|
var lines = getLinesBetweenNodes(parentNode, prevChildNode, nextChildNode);
|
|
if (lines) {
|
|
writeLine(lines);
|
|
}
|
|
else {
|
|
writeSpace();
|
|
}
|
|
}
|
|
else {
|
|
writeLine();
|
|
}
|
|
}
|
|
function writeLines(text) {
|
|
var lines = text.split(/\r\n?|\n/g);
|
|
var indentation = ts.guessIndentation(lines);
|
|
for (var _a = 0, lines_3 = lines; _a < lines_3.length; _a++) {
|
|
var lineText = lines_3[_a];
|
|
var line = indentation ? lineText.slice(indentation) : lineText;
|
|
if (line.length) {
|
|
writeLine();
|
|
write(line);
|
|
}
|
|
}
|
|
}
|
|
function writeLinesAndIndent(lineCount, writeSpaceIfNotIndenting) {
|
|
if (lineCount) {
|
|
increaseIndent();
|
|
writeLine(lineCount);
|
|
}
|
|
else if (writeSpaceIfNotIndenting) {
|
|
writeSpace();
|
|
}
|
|
}
|
|
function decreaseIndentIf(value1, value2) {
|
|
if (value1) {
|
|
decreaseIndent();
|
|
}
|
|
if (value2) {
|
|
decreaseIndent();
|
|
}
|
|
}
|
|
function getLeadingLineTerminatorCount(parentNode, firstChild, format) {
|
|
if (format & 2 || preserveSourceNewlines) {
|
|
if (format & 65536) {
|
|
return 1;
|
|
}
|
|
if (firstChild === undefined) {
|
|
return !parentNode || currentSourceFile && ts.rangeIsOnSingleLine(parentNode, currentSourceFile) ? 0 : 1;
|
|
}
|
|
if (firstChild.pos === nextListElementPos) {
|
|
return 0;
|
|
}
|
|
if (firstChild.kind === 11) {
|
|
return 0;
|
|
}
|
|
if (currentSourceFile && parentNode &&
|
|
!ts.positionIsSynthesized(parentNode.pos) &&
|
|
!ts.nodeIsSynthesized(firstChild) &&
|
|
(!firstChild.parent || ts.getOriginalNode(firstChild.parent) === ts.getOriginalNode(parentNode))) {
|
|
if (preserveSourceNewlines) {
|
|
return getEffectiveLines(function (includeComments) { return ts.getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter(firstChild.pos, parentNode.pos, currentSourceFile, includeComments); });
|
|
}
|
|
return ts.rangeStartPositionsAreOnSameLine(parentNode, firstChild, currentSourceFile) ? 0 : 1;
|
|
}
|
|
if (synthesizedNodeStartsOnNewLine(firstChild, format)) {
|
|
return 1;
|
|
}
|
|
}
|
|
return format & 1 ? 1 : 0;
|
|
}
|
|
function getSeparatingLineTerminatorCount(previousNode, nextNode, format) {
|
|
if (format & 2 || preserveSourceNewlines) {
|
|
if (previousNode === undefined || nextNode === undefined) {
|
|
return 0;
|
|
}
|
|
if (nextNode.kind === 11) {
|
|
return 0;
|
|
}
|
|
else if (currentSourceFile && !ts.nodeIsSynthesized(previousNode) && !ts.nodeIsSynthesized(nextNode)) {
|
|
if (preserveSourceNewlines && siblingNodePositionsAreComparable(previousNode, nextNode)) {
|
|
return getEffectiveLines(function (includeComments) { return ts.getLinesBetweenRangeEndAndRangeStart(previousNode, nextNode, currentSourceFile, includeComments); });
|
|
}
|
|
else if (!preserveSourceNewlines && originalNodesHaveSameParent(previousNode, nextNode)) {
|
|
return ts.rangeEndIsOnSameLineAsRangeStart(previousNode, nextNode, currentSourceFile) ? 0 : 1;
|
|
}
|
|
return format & 65536 ? 1 : 0;
|
|
}
|
|
else if (synthesizedNodeStartsOnNewLine(previousNode, format) || synthesizedNodeStartsOnNewLine(nextNode, format)) {
|
|
return 1;
|
|
}
|
|
}
|
|
else if (ts.getStartsOnNewLine(nextNode)) {
|
|
return 1;
|
|
}
|
|
return format & 1 ? 1 : 0;
|
|
}
|
|
function getClosingLineTerminatorCount(parentNode, lastChild, format, childrenTextRange) {
|
|
if (format & 2 || preserveSourceNewlines) {
|
|
if (format & 65536) {
|
|
return 1;
|
|
}
|
|
if (lastChild === undefined) {
|
|
return !parentNode || currentSourceFile && ts.rangeIsOnSingleLine(parentNode, currentSourceFile) ? 0 : 1;
|
|
}
|
|
if (currentSourceFile && parentNode && !ts.positionIsSynthesized(parentNode.pos) && !ts.nodeIsSynthesized(lastChild) && (!lastChild.parent || lastChild.parent === parentNode)) {
|
|
if (preserveSourceNewlines) {
|
|
var end_1 = childrenTextRange && !ts.positionIsSynthesized(childrenTextRange.end) ? childrenTextRange.end : lastChild.end;
|
|
return getEffectiveLines(function (includeComments) { return ts.getLinesBetweenPositionAndNextNonWhitespaceCharacter(end_1, parentNode.end, currentSourceFile, includeComments); });
|
|
}
|
|
return ts.rangeEndPositionsAreOnSameLine(parentNode, lastChild, currentSourceFile) ? 0 : 1;
|
|
}
|
|
if (synthesizedNodeStartsOnNewLine(lastChild, format)) {
|
|
return 1;
|
|
}
|
|
}
|
|
if (format & 1 && !(format & 131072)) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function getEffectiveLines(getLineDifference) {
|
|
ts.Debug.assert(!!preserveSourceNewlines);
|
|
var lines = getLineDifference(true);
|
|
if (lines === 0) {
|
|
return getLineDifference(false);
|
|
}
|
|
return lines;
|
|
}
|
|
function writeLineSeparatorsAndIndentBefore(node, parent) {
|
|
var leadingNewlines = preserveSourceNewlines && getLeadingLineTerminatorCount(parent, node, 0);
|
|
if (leadingNewlines) {
|
|
writeLinesAndIndent(leadingNewlines, false);
|
|
}
|
|
return !!leadingNewlines;
|
|
}
|
|
function writeLineSeparatorsAfter(node, parent) {
|
|
var trailingNewlines = preserveSourceNewlines && getClosingLineTerminatorCount(parent, node, 0, undefined);
|
|
if (trailingNewlines) {
|
|
writeLine(trailingNewlines);
|
|
}
|
|
}
|
|
function synthesizedNodeStartsOnNewLine(node, format) {
|
|
if (ts.nodeIsSynthesized(node)) {
|
|
var startsOnNewLine = ts.getStartsOnNewLine(node);
|
|
if (startsOnNewLine === undefined) {
|
|
return (format & 65536) !== 0;
|
|
}
|
|
return startsOnNewLine;
|
|
}
|
|
return (format & 65536) !== 0;
|
|
}
|
|
function getLinesBetweenNodes(parent, node1, node2) {
|
|
if (ts.getEmitFlags(parent) & 131072) {
|
|
return 0;
|
|
}
|
|
parent = skipSynthesizedParentheses(parent);
|
|
node1 = skipSynthesizedParentheses(node1);
|
|
node2 = skipSynthesizedParentheses(node2);
|
|
if (ts.getStartsOnNewLine(node2)) {
|
|
return 1;
|
|
}
|
|
if (currentSourceFile && !ts.nodeIsSynthesized(parent) && !ts.nodeIsSynthesized(node1) && !ts.nodeIsSynthesized(node2)) {
|
|
if (preserveSourceNewlines) {
|
|
return getEffectiveLines(function (includeComments) { return ts.getLinesBetweenRangeEndAndRangeStart(node1, node2, currentSourceFile, includeComments); });
|
|
}
|
|
return ts.rangeEndIsOnSameLineAsRangeStart(node1, node2, currentSourceFile) ? 0 : 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function isEmptyBlock(block) {
|
|
return block.statements.length === 0
|
|
&& (!currentSourceFile || ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile));
|
|
}
|
|
function skipSynthesizedParentheses(node) {
|
|
while (node.kind === 212 && ts.nodeIsSynthesized(node)) {
|
|
node = node.expression;
|
|
}
|
|
return node;
|
|
}
|
|
function getTextOfNode(node, includeTrivia) {
|
|
if (ts.isGeneratedIdentifier(node)) {
|
|
return generateName(node);
|
|
}
|
|
if (ts.isStringLiteral(node) && node.textSourceNode) {
|
|
return getTextOfNode(node.textSourceNode, includeTrivia);
|
|
}
|
|
var sourceFile = currentSourceFile;
|
|
var canUseSourceFile = !!sourceFile && !!node.parent && !ts.nodeIsSynthesized(node);
|
|
if (ts.isMemberName(node)) {
|
|
if (!canUseSourceFile || ts.getSourceFileOfNode(node) !== ts.getOriginalNode(sourceFile)) {
|
|
return ts.idText(node);
|
|
}
|
|
}
|
|
else {
|
|
ts.Debug.assertNode(node, ts.isLiteralExpression);
|
|
if (!canUseSourceFile) {
|
|
return node.text;
|
|
}
|
|
}
|
|
return ts.getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia);
|
|
}
|
|
function getLiteralTextOfNode(node, neverAsciiEscape, jsxAttributeEscape) {
|
|
if (node.kind === 10 && node.textSourceNode) {
|
|
var textSourceNode = node.textSourceNode;
|
|
if (ts.isIdentifier(textSourceNode) || ts.isNumericLiteral(textSourceNode)) {
|
|
var text = ts.isNumericLiteral(textSourceNode) ? textSourceNode.text : getTextOfNode(textSourceNode);
|
|
return jsxAttributeEscape ? "\"".concat(ts.escapeJsxAttributeString(text), "\"") :
|
|
neverAsciiEscape || (ts.getEmitFlags(node) & 16777216) ? "\"".concat(ts.escapeString(text), "\"") :
|
|
"\"".concat(ts.escapeNonAsciiString(text), "\"");
|
|
}
|
|
else {
|
|
return getLiteralTextOfNode(textSourceNode, neverAsciiEscape, jsxAttributeEscape);
|
|
}
|
|
}
|
|
var flags = (neverAsciiEscape ? 1 : 0)
|
|
| (jsxAttributeEscape ? 2 : 0)
|
|
| (printerOptions.terminateUnterminatedLiterals ? 4 : 0)
|
|
| (printerOptions.target && printerOptions.target === 99 ? 8 : 0);
|
|
return ts.getLiteralText(node, currentSourceFile, flags);
|
|
}
|
|
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 = new ts.Set();
|
|
}
|
|
reservedNames.add(name);
|
|
}
|
|
function generateNames(node) {
|
|
if (!node)
|
|
return;
|
|
switch (node.kind) {
|
|
case 235:
|
|
ts.forEach(node.statements, generateNames);
|
|
break;
|
|
case 250:
|
|
case 248:
|
|
case 240:
|
|
case 241:
|
|
generateNames(node.statement);
|
|
break;
|
|
case 239:
|
|
generateNames(node.thenStatement);
|
|
generateNames(node.elseStatement);
|
|
break;
|
|
case 242:
|
|
case 244:
|
|
case 243:
|
|
generateNames(node.initializer);
|
|
generateNames(node.statement);
|
|
break;
|
|
case 249:
|
|
generateNames(node.caseBlock);
|
|
break;
|
|
case 263:
|
|
ts.forEach(node.clauses, generateNames);
|
|
break;
|
|
case 289:
|
|
case 290:
|
|
ts.forEach(node.statements, generateNames);
|
|
break;
|
|
case 252:
|
|
generateNames(node.tryBlock);
|
|
generateNames(node.catchClause);
|
|
generateNames(node.finallyBlock);
|
|
break;
|
|
case 292:
|
|
generateNames(node.variableDeclaration);
|
|
generateNames(node.block);
|
|
break;
|
|
case 237:
|
|
generateNames(node.declarationList);
|
|
break;
|
|
case 255:
|
|
ts.forEach(node.declarations, generateNames);
|
|
break;
|
|
case 254:
|
|
case 164:
|
|
case 203:
|
|
case 257:
|
|
generateNameIfNeeded(node.name);
|
|
break;
|
|
case 256:
|
|
generateNameIfNeeded(node.name);
|
|
if (ts.getEmitFlags(node) & 524288) {
|
|
ts.forEach(node.parameters, generateNames);
|
|
generateNames(node.body);
|
|
}
|
|
break;
|
|
case 201:
|
|
case 202:
|
|
ts.forEach(node.elements, generateNames);
|
|
break;
|
|
case 266:
|
|
generateNames(node.importClause);
|
|
break;
|
|
case 267:
|
|
generateNameIfNeeded(node.name);
|
|
generateNames(node.namedBindings);
|
|
break;
|
|
case 268:
|
|
generateNameIfNeeded(node.name);
|
|
break;
|
|
case 274:
|
|
generateNameIfNeeded(node.name);
|
|
break;
|
|
case 269:
|
|
ts.forEach(node.elements, generateNames);
|
|
break;
|
|
case 270:
|
|
generateNameIfNeeded(node.propertyName || node.name);
|
|
break;
|
|
}
|
|
}
|
|
function generateMemberNames(node) {
|
|
if (!node)
|
|
return;
|
|
switch (node.kind) {
|
|
case 296:
|
|
case 297:
|
|
case 167:
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
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 & (111551 | 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.add(baseName);
|
|
}
|
|
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.add(generatedName);
|
|
}
|
|
return generatedName;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
function makeFileLevelOptimisticUniqueName(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 79:
|
|
return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16), !!(flags & 8));
|
|
case 261:
|
|
case 260:
|
|
return generateNameForModuleOrEnum(node);
|
|
case 266:
|
|
case 272:
|
|
return generateNameForImportOrExportDeclaration(node);
|
|
case 256:
|
|
case 257:
|
|
case 271:
|
|
return generateNameForExportDefault();
|
|
case 226:
|
|
return generateNameForClassExpression();
|
|
case 169:
|
|
case 172:
|
|
case 173:
|
|
return generateNameForMethodOrAccessor(node);
|
|
case 162:
|
|
return makeTempVariableName(0, true);
|
|
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;
|
|
}
|
|
function pipelineEmitWithComments(hint, node) {
|
|
var pipelinePhase = getNextPipelinePhase(2, hint, node);
|
|
var savedContainerPos = containerPos;
|
|
var savedContainerEnd = containerEnd;
|
|
var savedDeclarationListContainerEnd = declarationListContainerEnd;
|
|
emitCommentsBeforeNode(node);
|
|
pipelinePhase(hint, node);
|
|
emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd);
|
|
}
|
|
function emitCommentsBeforeNode(node) {
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
var commentRange = ts.getCommentRange(node);
|
|
emitLeadingCommentsOfNode(node, emitFlags, commentRange.pos, commentRange.end);
|
|
if (emitFlags & 2048) {
|
|
commentsDisabled = true;
|
|
}
|
|
}
|
|
function emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd) {
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
var commentRange = ts.getCommentRange(node);
|
|
if (emitFlags & 2048) {
|
|
commentsDisabled = false;
|
|
}
|
|
emitTrailingCommentsOfNode(node, emitFlags, commentRange.pos, commentRange.end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd);
|
|
var typeNode = ts.getTypeNode(node);
|
|
if (typeNode) {
|
|
emitTrailingCommentsOfNode(node, emitFlags, typeNode.pos, typeNode.end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd);
|
|
}
|
|
}
|
|
function emitLeadingCommentsOfNode(node, emitFlags, pos, end) {
|
|
enterComment();
|
|
hasWrittenComment = false;
|
|
var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0 || node.kind === 11;
|
|
var skipTrailingComments = end < 0 || (emitFlags & 1024) !== 0 || node.kind === 11;
|
|
if ((pos > 0 || end > 0) && pos !== end) {
|
|
if (!skipLeadingComments) {
|
|
emitLeadingComments(pos, node.kind !== 349);
|
|
}
|
|
if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512) !== 0)) {
|
|
containerPos = pos;
|
|
}
|
|
if (!skipTrailingComments || (end >= 0 && (emitFlags & 1024) !== 0)) {
|
|
containerEnd = end;
|
|
if (node.kind === 255) {
|
|
declarationListContainerEnd = end;
|
|
}
|
|
}
|
|
}
|
|
ts.forEach(ts.getSyntheticLeadingComments(node), emitLeadingSynthesizedComment);
|
|
exitComment();
|
|
}
|
|
function emitTrailingCommentsOfNode(node, emitFlags, pos, end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd) {
|
|
enterComment();
|
|
var skipTrailingComments = end < 0 || (emitFlags & 1024) !== 0 || node.kind === 11;
|
|
ts.forEach(ts.getSyntheticTrailingComments(node), emitTrailingSynthesizedComment);
|
|
if ((pos > 0 || end > 0) && pos !== end) {
|
|
containerPos = savedContainerPos;
|
|
containerEnd = savedContainerEnd;
|
|
declarationListContainerEnd = savedDeclarationListContainerEnd;
|
|
if (!skipTrailingComments && node.kind !== 349) {
|
|
emitTrailingComments(end);
|
|
}
|
|
}
|
|
exitComment();
|
|
}
|
|
function emitLeadingSynthesizedComment(comment) {
|
|
if (comment.hasLeadingNewline || comment.kind === 2) {
|
|
writer.writeLine();
|
|
}
|
|
writeSynthesizedComment(comment);
|
|
if (comment.hasTrailingNewLine || comment.kind === 2) {
|
|
writer.writeLine();
|
|
}
|
|
else {
|
|
writer.writeSpace(" ");
|
|
}
|
|
}
|
|
function emitTrailingSynthesizedComment(comment) {
|
|
if (!writer.isAtStartOfLine()) {
|
|
writer.writeSpace(" ");
|
|
}
|
|
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
|
|
? "/*".concat(comment.text, "*/")
|
|
: "//".concat(comment.text);
|
|
}
|
|
function emitBodyWithDetachedComments(node, detachedRange, emitCallback) {
|
|
enterComment();
|
|
var pos = detachedRange.pos, end = detachedRange.end;
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0;
|
|
var skipTrailingComments = commentsDisabled || end < 0 || (emitFlags & 1024) !== 0;
|
|
if (!skipLeadingComments) {
|
|
emitDetachedCommentsAndUpdateCommentsInfo(detachedRange);
|
|
}
|
|
exitComment();
|
|
if (emitFlags & 2048 && !commentsDisabled) {
|
|
commentsDisabled = true;
|
|
emitCallback(node);
|
|
commentsDisabled = false;
|
|
}
|
|
else {
|
|
emitCallback(node);
|
|
}
|
|
enterComment();
|
|
if (!skipTrailingComments) {
|
|
emitLeadingComments(detachedRange.end, true);
|
|
if (hasWrittenComment && !writer.isAtStartOfLine()) {
|
|
writer.writeLine();
|
|
}
|
|
}
|
|
exitComment();
|
|
}
|
|
function originalNodesHaveSameParent(nodeA, nodeB) {
|
|
nodeA = ts.getOriginalNode(nodeA);
|
|
return nodeA.parent && nodeA.parent === ts.getOriginalNode(nodeB).parent;
|
|
}
|
|
function siblingNodePositionsAreComparable(previousNode, nextNode) {
|
|
if (nextNode.pos < previousNode.end) {
|
|
return false;
|
|
}
|
|
previousNode = ts.getOriginalNode(previousNode);
|
|
nextNode = ts.getOriginalNode(nextNode);
|
|
var parent = previousNode.parent;
|
|
if (!parent || parent !== nextNode.parent) {
|
|
return false;
|
|
}
|
|
var parentNodeArray = ts.getContainingNodeArray(previousNode);
|
|
var prevNodeIndex = parentNodeArray === null || parentNodeArray === void 0 ? void 0 : parentNodeArray.indexOf(previousNode);
|
|
return prevNodeIndex !== undefined && prevNodeIndex > -1 && parentNodeArray.indexOf(nextNode) === prevNodeIndex + 1;
|
|
}
|
|
function emitLeadingComments(pos, isEmittedNode) {
|
|
hasWrittenComment = false;
|
|
if (isEmittedNode) {
|
|
if (pos === 0 && (currentSourceFile === null || currentSourceFile === void 0 ? void 0 : currentSourceFile.isDeclarationFile)) {
|
|
forEachLeadingCommentToEmit(pos, emitNonTripleSlashLeadingComment);
|
|
}
|
|
else {
|
|
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 emitNonTripleSlashLeadingComment(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 (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos))
|
|
return;
|
|
if (!hasWrittenComment) {
|
|
ts.emitNewLineBeforeLeadingCommentOfPosition(getCurrentLineMap(), writer, rangePos, commentPos);
|
|
hasWrittenComment = true;
|
|
}
|
|
emitPos(commentPos);
|
|
ts.writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine);
|
|
emitPos(commentEnd);
|
|
if (hasTrailingNewLine) {
|
|
writer.writeLine();
|
|
}
|
|
else if (kind === 3) {
|
|
writer.writeSpace(" ");
|
|
}
|
|
}
|
|
function emitLeadingCommentsOfPosition(pos) {
|
|
if (commentsDisabled || pos === -1) {
|
|
return;
|
|
}
|
|
emitLeadingComments(pos, true);
|
|
}
|
|
function emitTrailingComments(pos) {
|
|
forEachTrailingCommentToEmit(pos, emitTrailingComment);
|
|
}
|
|
function emitTrailingComment(commentPos, commentEnd, _kind, hasTrailingNewLine) {
|
|
if (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos))
|
|
return;
|
|
if (!writer.isAtStartOfLine()) {
|
|
writer.writeSpace(" ");
|
|
}
|
|
emitPos(commentPos);
|
|
ts.writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine);
|
|
emitPos(commentEnd);
|
|
if (hasTrailingNewLine) {
|
|
writer.writeLine();
|
|
}
|
|
}
|
|
function emitTrailingCommentsOfPosition(pos, prefixSpace, forceNoNewline) {
|
|
if (commentsDisabled) {
|
|
return;
|
|
}
|
|
enterComment();
|
|
forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : forceNoNewline ? emitTrailingCommentOfPositionNoNewline : emitTrailingCommentOfPosition);
|
|
exitComment();
|
|
}
|
|
function emitTrailingCommentOfPositionNoNewline(commentPos, commentEnd, kind) {
|
|
if (!currentSourceFile)
|
|
return;
|
|
emitPos(commentPos);
|
|
ts.writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine);
|
|
emitPos(commentEnd);
|
|
if (kind === 2) {
|
|
writer.writeLine();
|
|
}
|
|
}
|
|
function emitTrailingCommentOfPosition(commentPos, commentEnd, _kind, hasTrailingNewLine) {
|
|
if (!currentSourceFile)
|
|
return;
|
|
emitPos(commentPos);
|
|
ts.writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine);
|
|
emitPos(commentEnd);
|
|
if (hasTrailingNewLine) {
|
|
writer.writeLine();
|
|
}
|
|
else {
|
|
writer.writeSpace(" ");
|
|
}
|
|
}
|
|
function forEachLeadingCommentToEmit(pos, cb) {
|
|
if (currentSourceFile && (containerPos === -1 || pos !== containerPos)) {
|
|
if (hasDetachedComments(pos)) {
|
|
forEachLeadingCommentWithoutDetachedComments(cb);
|
|
}
|
|
else {
|
|
ts.forEachLeadingCommentRange(currentSourceFile.text, pos, cb, pos);
|
|
}
|
|
}
|
|
}
|
|
function forEachTrailingCommentToEmit(end, cb) {
|
|
if (currentSourceFile && (containerEnd === -1 || (end !== containerEnd && end !== declarationListContainerEnd))) {
|
|
ts.forEachTrailingCommentRange(currentSourceFile.text, end, cb);
|
|
}
|
|
}
|
|
function hasDetachedComments(pos) {
|
|
return detachedCommentsInfo !== undefined && ts.last(detachedCommentsInfo).nodePos === pos;
|
|
}
|
|
function forEachLeadingCommentWithoutDetachedComments(cb) {
|
|
if (!currentSourceFile)
|
|
return;
|
|
var pos = ts.last(detachedCommentsInfo).detachedCommentEndPos;
|
|
if (detachedCommentsInfo.length - 1) {
|
|
detachedCommentsInfo.pop();
|
|
}
|
|
else {
|
|
detachedCommentsInfo = undefined;
|
|
}
|
|
ts.forEachLeadingCommentRange(currentSourceFile.text, pos, cb, pos);
|
|
}
|
|
function emitDetachedCommentsAndUpdateCommentsInfo(range) {
|
|
var currentDetachedCommentInfo = currentSourceFile && ts.emitDetachedComments(currentSourceFile.text, getCurrentLineMap(), writer, emitComment, range, newLine, commentsDisabled);
|
|
if (currentDetachedCommentInfo) {
|
|
if (detachedCommentsInfo) {
|
|
detachedCommentsInfo.push(currentDetachedCommentInfo);
|
|
}
|
|
else {
|
|
detachedCommentsInfo = [currentDetachedCommentInfo];
|
|
}
|
|
}
|
|
}
|
|
function emitComment(text, lineMap, writer, commentPos, commentEnd, newLine) {
|
|
if (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos))
|
|
return;
|
|
emitPos(commentPos);
|
|
ts.writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine);
|
|
emitPos(commentEnd);
|
|
}
|
|
function isTripleSlashComment(commentPos, commentEnd) {
|
|
return !!currentSourceFile && ts.isRecognizedTripleSlashComment(currentSourceFile.text, commentPos, commentEnd);
|
|
}
|
|
function getParsedSourceMap(node) {
|
|
if (node.parsedSourceMap === undefined && node.sourceMapText !== undefined) {
|
|
node.parsedSourceMap = ts.tryParseRawSourceMap(node.sourceMapText) || false;
|
|
}
|
|
return node.parsedSourceMap || undefined;
|
|
}
|
|
function pipelineEmitWithSourceMaps(hint, node) {
|
|
var pipelinePhase = getNextPipelinePhase(3, hint, node);
|
|
emitSourceMapsBeforeNode(node);
|
|
pipelinePhase(hint, node);
|
|
emitSourceMapsAfterNode(node);
|
|
}
|
|
function emitSourceMapsBeforeNode(node) {
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
var sourceMapRange = ts.getSourceMapRange(node);
|
|
if (ts.isUnparsedNode(node)) {
|
|
ts.Debug.assertIsDefined(node.parent, "UnparsedNodes must have parent pointers");
|
|
var parsed = getParsedSourceMap(node.parent);
|
|
if (parsed && sourceMapGenerator) {
|
|
sourceMapGenerator.appendSourceMap(writer.getLine(), writer.getColumn(), parsed, node.parent.sourceMapPath, node.parent.getLineAndCharacterOfPosition(node.pos), node.parent.getLineAndCharacterOfPosition(node.end));
|
|
}
|
|
}
|
|
else {
|
|
var source = sourceMapRange.source || sourceMapSource;
|
|
if (node.kind !== 349
|
|
&& (emitFlags & 16) === 0
|
|
&& sourceMapRange.pos >= 0) {
|
|
emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
|
|
}
|
|
if (emitFlags & 64) {
|
|
sourceMapsDisabled = true;
|
|
}
|
|
}
|
|
}
|
|
function emitSourceMapsAfterNode(node) {
|
|
var emitFlags = ts.getEmitFlags(node);
|
|
var sourceMapRange = ts.getSourceMapRange(node);
|
|
if (!ts.isUnparsedNode(node)) {
|
|
if (emitFlags & 64) {
|
|
sourceMapsDisabled = false;
|
|
}
|
|
if (node.kind !== 349
|
|
&& (emitFlags & 32) === 0
|
|
&& sourceMapRange.end >= 0) {
|
|
emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
|
|
}
|
|
}
|
|
}
|
|
function skipSourceTrivia(source, pos) {
|
|
return source.skipTrivia ? source.skipTrivia(pos) : ts.skipTrivia(source.text, pos);
|
|
}
|
|
function emitPos(pos) {
|
|
if (sourceMapsDisabled || ts.positionIsSynthesized(pos) || isJsonSourceMapSource(sourceMapSource)) {
|
|
return;
|
|
}
|
|
var _a = ts.getLineAndCharacterOfPosition(sourceMapSource, pos), sourceLine = _a.line, sourceCharacter = _a.character;
|
|
sourceMapGenerator.addMapping(writer.getLine(), writer.getColumn(), sourceMapSourceIndex, sourceLine, sourceCharacter, undefined);
|
|
}
|
|
function emitSourcePos(source, pos) {
|
|
if (source !== sourceMapSource) {
|
|
var savedSourceMapSource = sourceMapSource;
|
|
var savedSourceMapSourceIndex = sourceMapSourceIndex;
|
|
setSourceMapSource(source);
|
|
emitPos(pos);
|
|
resetSourceMapSource(savedSourceMapSource, savedSourceMapSourceIndex);
|
|
}
|
|
else {
|
|
emitPos(pos);
|
|
}
|
|
}
|
|
function emitTokenWithSourceMap(node, token, writer, tokenPos, emitCallback) {
|
|
if (sourceMapsDisabled || node && 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];
|
|
var source = range && range.source || sourceMapSource;
|
|
tokenPos = skipSourceTrivia(source, range ? range.pos : tokenPos);
|
|
if ((emitFlags & 128) === 0 && tokenPos >= 0) {
|
|
emitSourcePos(source, tokenPos);
|
|
}
|
|
tokenPos = emitCallback(token, writer, tokenPos);
|
|
if (range)
|
|
tokenPos = range.end;
|
|
if ((emitFlags & 256) === 0 && tokenPos >= 0) {
|
|
emitSourcePos(source, tokenPos);
|
|
}
|
|
return tokenPos;
|
|
}
|
|
function setSourceMapSource(source) {
|
|
if (sourceMapsDisabled) {
|
|
return;
|
|
}
|
|
sourceMapSource = source;
|
|
if (source === mostRecentlyAddedSourceMapSource) {
|
|
sourceMapSourceIndex = mostRecentlyAddedSourceMapSourceIndex;
|
|
return;
|
|
}
|
|
if (isJsonSourceMapSource(source)) {
|
|
return;
|
|
}
|
|
sourceMapSourceIndex = sourceMapGenerator.addSource(source.fileName);
|
|
if (printerOptions.inlineSources) {
|
|
sourceMapGenerator.setSourceContent(sourceMapSourceIndex, source.text);
|
|
}
|
|
mostRecentlyAddedSourceMapSource = source;
|
|
mostRecentlyAddedSourceMapSourceIndex = sourceMapSourceIndex;
|
|
}
|
|
function resetSourceMapSource(source, sourceIndex) {
|
|
sourceMapSource = source;
|
|
sourceMapSourceIndex = sourceIndex;
|
|
}
|
|
function isJsonSourceMapSource(sourceFile) {
|
|
return ts.fileExtensionIs(sourceFile.fileName, ".json");
|
|
}
|
|
}
|
|
ts.createPrinter = createPrinter;
|
|
function createBracketsMap() {
|
|
var brackets = [];
|
|
brackets[1024] = ["{", "}"];
|
|
brackets[2048] = ["(", ")"];
|
|
brackets[4096] = ["<", ">"];
|
|
brackets[8192] = ["[", "]"];
|
|
return brackets;
|
|
}
|
|
function getOpeningBracket(format) {
|
|
return brackets[format & 15360][0];
|
|
}
|
|
function getClosingBracket(format) {
|
|
return brackets[format & 15360][1];
|
|
}
|
|
function emitListItemNoParenthesizer(node, emit, _parenthesizerRule, _index) {
|
|
emit(node);
|
|
}
|
|
function emitListItemWithParenthesizerRuleSelector(node, emit, parenthesizerRuleSelector, index) {
|
|
emit(node, parenthesizerRuleSelector.select(index));
|
|
}
|
|
function emitListItemWithParenthesizerRule(node, emit, parenthesizerRule, _index) {
|
|
emit(node, parenthesizerRule);
|
|
}
|
|
function getEmitListItem(emit, parenthesizerRule) {
|
|
return emit.length === 1 ? emitListItemNoParenthesizer :
|
|
typeof parenthesizerRule === "object" ? emitListItemWithParenthesizerRuleSelector :
|
|
emitListItemWithParenthesizerRule;
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames) {
|
|
if (!host.getDirectories || !host.readDirectory) {
|
|
return undefined;
|
|
}
|
|
var cachedReadDirectoryResult = new ts.Map();
|
|
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,
|
|
realpath: host.realpath && realpath
|
|
};
|
|
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 _a;
|
|
if (!host.realpath || ts.ensureTrailingDirectorySeparator(toPath(host.realpath(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;
|
|
}
|
|
if ((_a = host.directoryExists) === null || _a === void 0 ? void 0 : _a.call(host, rootDir)) {
|
|
cachedReadDirectoryResult.set(rootDirPath, false);
|
|
return false;
|
|
}
|
|
return undefined;
|
|
}
|
|
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 rootResult = tryReadDirectory(rootDir, rootDirPath);
|
|
var rootSymLinkResult;
|
|
if (rootResult !== undefined) {
|
|
return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
|
|
}
|
|
return host.readDirectory(rootDir, extensions, excludes, includes, depth);
|
|
function getFileSystemEntries(dir) {
|
|
var path = toPath(dir);
|
|
if (path === rootDirPath) {
|
|
return rootResult || getFileSystemEntriesFromHost(dir, path);
|
|
}
|
|
var result = tryReadDirectory(dir, path);
|
|
return result !== undefined ?
|
|
result || getFileSystemEntriesFromHost(dir, path) :
|
|
ts.emptyFileSystemEntries;
|
|
}
|
|
function getFileSystemEntriesFromHost(dir, path) {
|
|
if (rootSymLinkResult && path === rootDirPath)
|
|
return rootSymLinkResult;
|
|
var result = {
|
|
files: ts.map(host.readDirectory(dir, undefined, undefined, ["*.*"]), getBaseNameOfFileName) || ts.emptyArray,
|
|
directories: host.getDirectories(dir) || ts.emptyArray
|
|
};
|
|
if (path === rootDirPath)
|
|
rootSymLinkResult = result;
|
|
return result;
|
|
}
|
|
}
|
|
function realpath(s) {
|
|
return host.realpath ? host.realpath(s) : s;
|
|
}
|
|
function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) {
|
|
var existingResult = getCachedFileSystemEntries(fileOrDirectoryPath);
|
|
if (existingResult !== undefined) {
|
|
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 updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath) {
|
|
var _a;
|
|
var extendedConfigs = ts.arrayToMap(((_a = options === null || options === void 0 ? void 0 : options.configFile) === null || _a === void 0 ? void 0 : _a.extendedSourceFiles) || ts.emptyArray, toPath);
|
|
extendedConfigFilesMap.forEach(function (watcher, extendedConfigFilePath) {
|
|
if (!extendedConfigs.has(extendedConfigFilePath)) {
|
|
watcher.projects.delete(projectPath);
|
|
watcher.close();
|
|
}
|
|
});
|
|
extendedConfigs.forEach(function (extendedConfigFileName, extendedConfigFilePath) {
|
|
var existing = extendedConfigFilesMap.get(extendedConfigFilePath);
|
|
if (existing) {
|
|
existing.projects.add(projectPath);
|
|
}
|
|
else {
|
|
extendedConfigFilesMap.set(extendedConfigFilePath, {
|
|
projects: new ts.Set([projectPath]),
|
|
watcher: createExtendedConfigFileWatch(extendedConfigFileName, extendedConfigFilePath),
|
|
close: function () {
|
|
var existing = extendedConfigFilesMap.get(extendedConfigFilePath);
|
|
if (!existing || existing.projects.size !== 0)
|
|
return;
|
|
existing.watcher.close();
|
|
extendedConfigFilesMap.delete(extendedConfigFilePath);
|
|
},
|
|
});
|
|
}
|
|
});
|
|
}
|
|
ts.updateSharedExtendedConfigFileWatcher = updateSharedExtendedConfigFileWatcher;
|
|
function clearSharedExtendedConfigFileWatcher(projectPath, extendedConfigFilesMap) {
|
|
extendedConfigFilesMap.forEach(function (watcher) {
|
|
if (watcher.projects.delete(projectPath))
|
|
watcher.close();
|
|
});
|
|
}
|
|
ts.clearSharedExtendedConfigFileWatcher = clearSharedExtendedConfigFileWatcher;
|
|
function cleanExtendedConfigCache(extendedConfigCache, extendedConfigFilePath, toPath) {
|
|
if (!extendedConfigCache.delete(extendedConfigFilePath))
|
|
return;
|
|
extendedConfigCache.forEach(function (_a, key) {
|
|
var _b;
|
|
var extendedResult = _a.extendedResult;
|
|
if ((_b = extendedResult.extendedSourceFiles) === null || _b === void 0 ? void 0 : _b.some(function (extendedFile) { return toPath(extendedFile) === extendedConfigFilePath; })) {
|
|
cleanExtendedConfigCache(extendedConfigCache, key, toPath);
|
|
}
|
|
});
|
|
}
|
|
ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
|
|
function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
|
|
var newMap = new ts.Map(lookups);
|
|
ts.mutateMap(packageJsonWatches, newMap, {
|
|
createNewValue: createPackageJsonWatch,
|
|
onDeleteValue: ts.closeFileWatcher
|
|
});
|
|
}
|
|
ts.updatePackageJsonWatch = updatePackageJsonWatch;
|
|
function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
|
|
var missingFilePaths = program.getMissingFilePaths();
|
|
var newMissingFilePathMap = ts.arrayToMap(missingFilePaths, ts.identity, ts.returnTrue);
|
|
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 isIgnoredFileFromWildCardWatching(_a) {
|
|
var watchedDirPath = _a.watchedDirPath, fileOrDirectory = _a.fileOrDirectory, fileOrDirectoryPath = _a.fileOrDirectoryPath, configFileName = _a.configFileName, options = _a.options, program = _a.program, extraFileExtensions = _a.extraFileExtensions, currentDirectory = _a.currentDirectory, useCaseSensitiveFileNames = _a.useCaseSensitiveFileNames, writeLog = _a.writeLog, toPath = _a.toPath;
|
|
var newPath = ts.removeIgnoredPath(fileOrDirectoryPath);
|
|
if (!newPath) {
|
|
writeLog("Project: ".concat(configFileName, " Detected ignored path: ").concat(fileOrDirectory));
|
|
return true;
|
|
}
|
|
fileOrDirectoryPath = newPath;
|
|
if (fileOrDirectoryPath === watchedDirPath)
|
|
return false;
|
|
if (ts.hasExtension(fileOrDirectoryPath) && !ts.isSupportedSourceFileName(fileOrDirectory, options, extraFileExtensions)) {
|
|
writeLog("Project: ".concat(configFileName, " Detected file add/remove of non supported extension: ").concat(fileOrDirectory));
|
|
return true;
|
|
}
|
|
if (ts.isExcludedFile(fileOrDirectory, options.configFile.configFileSpecs, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), currentDirectory), useCaseSensitiveFileNames, currentDirectory)) {
|
|
writeLog("Project: ".concat(configFileName, " Detected excluded file: ").concat(fileOrDirectory));
|
|
return true;
|
|
}
|
|
if (!program)
|
|
return false;
|
|
if (ts.outFile(options) || options.outDir)
|
|
return false;
|
|
if (ts.isDeclarationFileName(fileOrDirectoryPath)) {
|
|
if (options.declarationDir)
|
|
return false;
|
|
}
|
|
else if (!ts.fileExtensionIsOneOf(fileOrDirectoryPath, ts.supportedJSExtensionsFlat)) {
|
|
return false;
|
|
}
|
|
var filePathWithoutExtension = ts.removeFileExtension(fileOrDirectoryPath);
|
|
var realProgram = ts.isArray(program) ? undefined : isBuilderProgram(program) ? program.getProgramOrUndefined() : program;
|
|
var builderProgram = !realProgram && !ts.isArray(program) ? program : undefined;
|
|
if (hasSourceFile((filePathWithoutExtension + ".ts")) ||
|
|
hasSourceFile((filePathWithoutExtension + ".tsx"))) {
|
|
writeLog("Project: ".concat(configFileName, " Detected output file: ").concat(fileOrDirectory));
|
|
return true;
|
|
}
|
|
return false;
|
|
function hasSourceFile(file) {
|
|
return realProgram ?
|
|
!!realProgram.getSourceFileByPath(file) :
|
|
builderProgram ?
|
|
builderProgram.getState().fileInfos.has(file) :
|
|
!!ts.find(program, function (rootFile) { return toPath(rootFile) === file; });
|
|
}
|
|
}
|
|
ts.isIgnoredFileFromWildCardWatching = isIgnoredFileFromWildCardWatching;
|
|
function isBuilderProgram(program) {
|
|
return !!program.getState;
|
|
}
|
|
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(host, watchLogLevel, log, getDetailWatchInfo) {
|
|
ts.setSysLog(watchLogLevel === WatchLogLevel.Verbose ? log : ts.noop);
|
|
var plainInvokeFactory = {
|
|
watchFile: function (file, callback, pollingInterval, options) { return host.watchFile(file, callback, pollingInterval, options); },
|
|
watchDirectory: function (directory, callback, flags, options) { return host.watchDirectory(directory, callback, (flags & 1) !== 0, options); },
|
|
};
|
|
var triggerInvokingFactory = watchLogLevel !== WatchLogLevel.None ?
|
|
{
|
|
watchFile: createTriggerLoggingAddWatch("watchFile"),
|
|
watchDirectory: createTriggerLoggingAddWatch("watchDirectory")
|
|
} :
|
|
undefined;
|
|
var factory = watchLogLevel === WatchLogLevel.Verbose ?
|
|
{
|
|
watchFile: createFileWatcherWithLogging,
|
|
watchDirectory: createDirectoryWatcherWithLogging
|
|
} :
|
|
triggerInvokingFactory || plainInvokeFactory;
|
|
var excludeWatcherFactory = watchLogLevel === WatchLogLevel.Verbose ?
|
|
createExcludeWatcherWithLogging :
|
|
ts.returnNoopFileWatcher;
|
|
return {
|
|
watchFile: createExcludeHandlingAddWatch("watchFile"),
|
|
watchDirectory: createExcludeHandlingAddWatch("watchDirectory")
|
|
};
|
|
function createExcludeHandlingAddWatch(key) {
|
|
return function (file, cb, flags, options, detailInfo1, detailInfo2) {
|
|
var _a;
|
|
return !ts.matchesExclude(file, key === "watchFile" ? options === null || options === void 0 ? void 0 : options.excludeFiles : options === null || options === void 0 ? void 0 : options.excludeDirectories, useCaseSensitiveFileNames(), ((_a = host.getCurrentDirectory) === null || _a === void 0 ? void 0 : _a.call(host)) || "") ?
|
|
factory[key].call(undefined, file, cb, flags, options, detailInfo1, detailInfo2) :
|
|
excludeWatcherFactory(file, flags, options, detailInfo1, detailInfo2);
|
|
};
|
|
}
|
|
function useCaseSensitiveFileNames() {
|
|
return typeof host.useCaseSensitiveFileNames === "boolean" ?
|
|
host.useCaseSensitiveFileNames :
|
|
host.useCaseSensitiveFileNames();
|
|
}
|
|
function createExcludeWatcherWithLogging(file, flags, options, detailInfo1, detailInfo2) {
|
|
log("ExcludeWatcher:: Added:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo)));
|
|
return {
|
|
close: function () { return log("ExcludeWatcher:: Close:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo))); }
|
|
};
|
|
}
|
|
function createFileWatcherWithLogging(file, cb, flags, options, detailInfo1, detailInfo2) {
|
|
log("FileWatcher:: Added:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo)));
|
|
var watcher = triggerInvokingFactory.watchFile(file, cb, flags, options, detailInfo1, detailInfo2);
|
|
return {
|
|
close: function () {
|
|
log("FileWatcher:: Close:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo)));
|
|
watcher.close();
|
|
}
|
|
};
|
|
}
|
|
function createDirectoryWatcherWithLogging(file, cb, flags, options, detailInfo1, detailInfo2) {
|
|
var watchInfo = "DirectoryWatcher:: Added:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo));
|
|
log(watchInfo);
|
|
var start = ts.timestamp();
|
|
var watcher = triggerInvokingFactory.watchDirectory(file, cb, flags, options, detailInfo1, detailInfo2);
|
|
var elapsed = ts.timestamp() - start;
|
|
log("Elapsed:: ".concat(elapsed, "ms ").concat(watchInfo));
|
|
return {
|
|
close: function () {
|
|
var watchInfo = "DirectoryWatcher:: Close:: ".concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo));
|
|
log(watchInfo);
|
|
var start = ts.timestamp();
|
|
watcher.close();
|
|
var elapsed = ts.timestamp() - start;
|
|
log("Elapsed:: ".concat(elapsed, "ms ").concat(watchInfo));
|
|
}
|
|
};
|
|
}
|
|
function createTriggerLoggingAddWatch(key) {
|
|
return function (file, cb, flags, options, detailInfo1, detailInfo2) { return plainInvokeFactory[key].call(undefined, file, function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
var triggerredInfo = "".concat(key === "watchFile" ? "FileWatcher" : "DirectoryWatcher", ":: Triggered with ").concat(args[0], " ").concat(args[1] !== undefined ? args[1] : "", ":: ").concat(getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo));
|
|
log(triggerredInfo);
|
|
var start = ts.timestamp();
|
|
cb.call.apply(cb, __spreadArray([undefined], args, false));
|
|
var elapsed = ts.timestamp() - start;
|
|
log("Elapsed:: ".concat(elapsed, "ms ").concat(triggerredInfo));
|
|
}, flags, options, detailInfo1, detailInfo2); };
|
|
}
|
|
function getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo) {
|
|
return "WatchInfo: ".concat(file, " ").concat(flags, " ").concat(JSON.stringify(options), " ").concat(getDetailWatchInfo ? getDetailWatchInfo(detailInfo1, detailInfo2) : detailInfo2 === undefined ? detailInfo1 : "".concat(detailInfo1, " ").concat(detailInfo2));
|
|
}
|
|
}
|
|
ts.getWatchFactory = getWatchFactory;
|
|
function getFallbackOptions(options) {
|
|
var fallbackPolling = options === null || options === void 0 ? void 0 : options.fallbackPolling;
|
|
return {
|
|
watchFile: fallbackPolling !== undefined ?
|
|
fallbackPolling :
|
|
ts.WatchFileKind.PriorityPollingInterval
|
|
};
|
|
}
|
|
ts.getFallbackOptions = getFallbackOptions;
|
|
function closeFileWatcherOf(objWithWatcher) {
|
|
objWithWatcher.watcher.close();
|
|
}
|
|
ts.closeFileWatcherOf = closeFileWatcherOf;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
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) {
|
|
return createCompilerHostWorker(options, setParentNodes);
|
|
}
|
|
ts.createCompilerHost = createCompilerHost;
|
|
function createCompilerHostWorker(options, setParentNodes, system) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var existingDirectories = new ts.Map();
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames);
|
|
function getSourceFile(fileName, languageVersionOrOptions, onError) {
|
|
var text;
|
|
try {
|
|
ts.performance.mark("beforeIORead");
|
|
text = compilerHost.readFile(fileName);
|
|
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, languageVersionOrOptions, setParentNodes) : undefined;
|
|
}
|
|
function directoryExists(directoryPath) {
|
|
if (existingDirectories.has(directoryPath)) {
|
|
return true;
|
|
}
|
|
if ((compilerHost.directoryExists || system.directoryExists)(directoryPath)) {
|
|
existingDirectories.set(directoryPath, true);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function writeFile(fileName, data, writeByteOrderMark, onError) {
|
|
try {
|
|
ts.performance.mark("beforeIOWrite");
|
|
ts.writeFileEnsuringDirectories(fileName, data, writeByteOrderMark, function (path, data, writeByteOrderMark) { return system.writeFile(path, data, writeByteOrderMark); }, function (path) { return (compilerHost.createDirectory || system.createDirectory)(path); }, function (path) { return directoryExists(path); });
|
|
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(system.getExecutingFilePath()));
|
|
}
|
|
var newLine = ts.getNewLineCharacter(options, function () { return system.newLine; });
|
|
var realpath = system.realpath && (function (path) { return system.realpath(path); });
|
|
var compilerHost = {
|
|
getSourceFile: getSourceFile,
|
|
getDefaultLibLocation: getDefaultLibLocation,
|
|
getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); },
|
|
writeFile: writeFile,
|
|
getCurrentDirectory: ts.memoize(function () { return system.getCurrentDirectory(); }),
|
|
useCaseSensitiveFileNames: function () { return system.useCaseSensitiveFileNames; },
|
|
getCanonicalFileName: getCanonicalFileName,
|
|
getNewLine: function () { return newLine; },
|
|
fileExists: function (fileName) { return system.fileExists(fileName); },
|
|
readFile: function (fileName) { return system.readFile(fileName); },
|
|
trace: function (s) { return system.write(s + newLine); },
|
|
directoryExists: function (directoryName) { return system.directoryExists(directoryName); },
|
|
getEnvironmentVariable: function (name) { return system.getEnvironmentVariable ? system.getEnvironmentVariable(name) : ""; },
|
|
getDirectories: function (path) { return system.getDirectories(path); },
|
|
realpath: realpath,
|
|
readDirectory: function (path, extensions, include, exclude, depth) { return system.readDirectory(path, extensions, include, exclude, depth); },
|
|
createDirectory: function (d) { return system.createDirectory(d); },
|
|
createHash: ts.maybeBind(system, system.createHash)
|
|
};
|
|
return compilerHost;
|
|
}
|
|
ts.createCompilerHostWorker = createCompilerHostWorker;
|
|
function changeCompilerHostLikeToUseCache(host, toPath, getSourceFile) {
|
|
var originalReadFile = host.readFile;
|
|
var originalFileExists = host.fileExists;
|
|
var originalDirectoryExists = host.directoryExists;
|
|
var originalCreateDirectory = host.createDirectory;
|
|
var originalWriteFile = host.writeFile;
|
|
var readFileCache = new ts.Map();
|
|
var fileExistsCache = new ts.Map();
|
|
var directoryExistsCache = new ts.Map();
|
|
var sourceFileCache = new ts.Map();
|
|
var readFileWithCache = function (fileName) {
|
|
var key = toPath(fileName);
|
|
var value = readFileCache.get(key);
|
|
if (value !== undefined)
|
|
return value !== false ? value : undefined;
|
|
return setReadFileCache(key, fileName);
|
|
};
|
|
var setReadFileCache = function (key, fileName) {
|
|
var newValue = originalReadFile.call(host, fileName);
|
|
readFileCache.set(key, newValue !== undefined ? newValue : false);
|
|
return newValue;
|
|
};
|
|
host.readFile = function (fileName) {
|
|
var key = toPath(fileName);
|
|
var value = readFileCache.get(key);
|
|
if (value !== undefined)
|
|
return value !== false ? value : undefined;
|
|
if (!ts.fileExtensionIs(fileName, ".json") && !ts.isBuildInfoFile(fileName)) {
|
|
return originalReadFile.call(host, fileName);
|
|
}
|
|
return setReadFileCache(key, fileName);
|
|
};
|
|
var getSourceFileWithCache = getSourceFile ? function (fileName, languageVersion, onError, shouldCreateNewSourceFile) {
|
|
var key = toPath(fileName);
|
|
var value = sourceFileCache.get(key);
|
|
if (value)
|
|
return value;
|
|
var sourceFile = getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
|
|
if (sourceFile && (ts.isDeclarationFileName(fileName) || ts.fileExtensionIs(fileName, ".json"))) {
|
|
sourceFileCache.set(key, sourceFile);
|
|
}
|
|
return sourceFile;
|
|
} : undefined;
|
|
host.fileExists = function (fileName) {
|
|
var key = toPath(fileName);
|
|
var value = fileExistsCache.get(key);
|
|
if (value !== undefined)
|
|
return value;
|
|
var newValue = originalFileExists.call(host, fileName);
|
|
fileExistsCache.set(key, !!newValue);
|
|
return newValue;
|
|
};
|
|
if (originalWriteFile) {
|
|
host.writeFile = function (fileName, data) {
|
|
var rest = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
rest[_i - 2] = arguments[_i];
|
|
}
|
|
var key = toPath(fileName);
|
|
fileExistsCache.delete(key);
|
|
var value = readFileCache.get(key);
|
|
if (value !== undefined && value !== data) {
|
|
readFileCache.delete(key);
|
|
sourceFileCache.delete(key);
|
|
}
|
|
else if (getSourceFileWithCache) {
|
|
var sourceFile = sourceFileCache.get(key);
|
|
if (sourceFile && sourceFile.text !== data) {
|
|
sourceFileCache.delete(key);
|
|
}
|
|
}
|
|
originalWriteFile.call.apply(originalWriteFile, __spreadArray([host, fileName, data], rest, false));
|
|
};
|
|
}
|
|
if (originalDirectoryExists) {
|
|
host.directoryExists = function (directory) {
|
|
var key = toPath(directory);
|
|
var value = directoryExistsCache.get(key);
|
|
if (value !== undefined)
|
|
return value;
|
|
var newValue = originalDirectoryExists.call(host, directory);
|
|
directoryExistsCache.set(key, !!newValue);
|
|
return newValue;
|
|
};
|
|
if (originalCreateDirectory) {
|
|
host.createDirectory = function (directory) {
|
|
var key = toPath(directory);
|
|
directoryExistsCache.delete(key);
|
|
originalCreateDirectory.call(host, directory);
|
|
};
|
|
}
|
|
}
|
|
return {
|
|
originalReadFile: originalReadFile,
|
|
originalFileExists: originalFileExists,
|
|
originalDirectoryExists: originalDirectoryExists,
|
|
originalCreateDirectory: originalCreateDirectory,
|
|
originalWriteFile: originalWriteFile,
|
|
getSourceFileWithCache: getSourceFileWithCache,
|
|
readFileWithCache: readFileWithCache
|
|
};
|
|
}
|
|
ts.changeCompilerHostLikeToUseCache = changeCompilerHostLikeToUseCache;
|
|
function getPreEmitDiagnostics(program, sourceFile, cancellationToken) {
|
|
var diagnostics;
|
|
diagnostics = ts.addRange(diagnostics, program.getConfigFileParsingDiagnostics());
|
|
diagnostics = ts.addRange(diagnostics, program.getOptionsDiagnostics(cancellationToken));
|
|
diagnostics = ts.addRange(diagnostics, program.getSyntacticDiagnostics(sourceFile, cancellationToken));
|
|
diagnostics = ts.addRange(diagnostics, program.getGlobalDiagnostics(cancellationToken));
|
|
diagnostics = ts.addRange(diagnostics, program.getSemanticDiagnostics(sourceFile, cancellationToken));
|
|
if (ts.getEmitDeclarations(program.getCompilerOptions())) {
|
|
diagnostics = ts.addRange(diagnostics, program.getDeclarationDiagnostics(sourceFile, cancellationToken));
|
|
}
|
|
return ts.sortAndDeduplicateDiagnostics(diagnostics || ts.emptyArray);
|
|
}
|
|
ts.getPreEmitDiagnostics = getPreEmitDiagnostics;
|
|
function formatDiagnostics(diagnostics, host) {
|
|
var output = "";
|
|
for (var _i = 0, diagnostics_3 = diagnostics; _i < diagnostics_3.length; _i++) {
|
|
var diagnostic = diagnostics_3[_i];
|
|
output += formatDiagnostic(diagnostic, host);
|
|
}
|
|
return output;
|
|
}
|
|
ts.formatDiagnostics = formatDiagnostics;
|
|
function formatDiagnostic(diagnostic, host) {
|
|
var errorMessage = "".concat(ts.diagnosticCategoryName(diagnostic), " TS").concat(diagnostic.code, ": ").concat(flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine())).concat(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 "".concat(relativeFileName, "(").concat(line + 1, ",").concat(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[7m";
|
|
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 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(ts.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 = ts.trimStringEnd(lineContent);
|
|
lineContent = lineContent.replace(/\t/g, " ");
|
|
context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
|
|
context += lineContent + host.getNewLine();
|
|
context += indent + formatColorAndReset(ts.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, color) {
|
|
if (color === void 0) { color = formatColorAndReset; }
|
|
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 += color(relativeFileName, ForegroundColorEscapeSequences.Cyan);
|
|
output += ":";
|
|
output += color("".concat(firstLine + 1), ForegroundColorEscapeSequences.Yellow);
|
|
output += ":";
|
|
output += color("".concat(firstLineChar + 1), ForegroundColorEscapeSequences.Yellow);
|
|
return output;
|
|
}
|
|
ts.formatLocation = formatLocation;
|
|
function formatDiagnosticsWithColorAndContext(diagnostics, host) {
|
|
var output = "";
|
|
for (var _i = 0, diagnostics_4 = diagnostics; _i < diagnostics_4.length; _i++) {
|
|
var diagnostic = diagnostics_4[_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".concat(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_9 = _c.length, messageText = _c.messageText;
|
|
if (file) {
|
|
output += host.getNewLine();
|
|
output += halfIndent + formatLocation(file, start, host);
|
|
output += formatCodeSpan(file, start, length_9, indent, ForegroundColorEscapeSequences.Cyan, host);
|
|
}
|
|
output += host.getNewLine();
|
|
output += indent + flattenDiagnosticMessageText(messageText, host.getNewLine());
|
|
}
|
|
}
|
|
output += host.getNewLine();
|
|
}
|
|
return output;
|
|
}
|
|
ts.formatDiagnosticsWithColorAndContext = formatDiagnosticsWithColorAndContext;
|
|
function flattenDiagnosticMessageText(diag, newLine, indent) {
|
|
if (indent === void 0) { indent = 0; }
|
|
if (ts.isString(diag)) {
|
|
return diag;
|
|
}
|
|
else if (diag === undefined) {
|
|
return "";
|
|
}
|
|
var result = "";
|
|
if (indent) {
|
|
result += newLine;
|
|
for (var i = 0; i < indent; i++) {
|
|
result += " ";
|
|
}
|
|
}
|
|
result += diag.messageText;
|
|
indent++;
|
|
if (diag.next) {
|
|
for (var _i = 0, _a = diag.next; _i < _a.length; _i++) {
|
|
var kid = _a[_i];
|
|
result += flattenDiagnosticMessageText(kid, newLine, indent);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText;
|
|
function loadWithTypeDirectiveCache(names, containingFile, redirectedReference, containingFileMode, loader) {
|
|
if (names.length === 0) {
|
|
return [];
|
|
}
|
|
var resolutions = [];
|
|
var cache = new ts.Map();
|
|
for (var _i = 0, names_2 = names; _i < names_2.length; _i++) {
|
|
var name = names_2[_i];
|
|
var result = void 0;
|
|
var mode = getModeForFileReference(name, containingFileMode);
|
|
var strName = ts.isString(name) ? name : name.fileName.toLowerCase();
|
|
var cacheKey = mode !== undefined ? "".concat(mode, "|").concat(strName) : strName;
|
|
if (cache.has(cacheKey)) {
|
|
result = cache.get(cacheKey);
|
|
}
|
|
else {
|
|
cache.set(cacheKey, result = loader(strName, containingFile, redirectedReference, mode));
|
|
}
|
|
resolutions.push(result);
|
|
}
|
|
return resolutions;
|
|
}
|
|
ts.loadWithTypeDirectiveCache = loadWithTypeDirectiveCache;
|
|
;
|
|
function getModeForFileReference(ref, containingFileMode) {
|
|
return (ts.isString(ref) ? containingFileMode : ref.resolutionMode) || containingFileMode;
|
|
}
|
|
ts.getModeForFileReference = getModeForFileReference;
|
|
function getModeForResolutionAtIndex(file, index) {
|
|
if (file.impliedNodeFormat === undefined)
|
|
return undefined;
|
|
return getModeForUsageLocation(file, getModuleNameStringLiteralAt(file, index));
|
|
}
|
|
ts.getModeForResolutionAtIndex = getModeForResolutionAtIndex;
|
|
function isExclusivelyTypeOnlyImportOrExport(decl) {
|
|
var _a;
|
|
if (ts.isExportDeclaration(decl)) {
|
|
return decl.isTypeOnly;
|
|
}
|
|
if ((_a = decl.importClause) === null || _a === void 0 ? void 0 : _a.isTypeOnly) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
ts.isExclusivelyTypeOnlyImportOrExport = isExclusivelyTypeOnlyImportOrExport;
|
|
function getModeForUsageLocation(file, usage) {
|
|
var _a, _b;
|
|
if (file.impliedNodeFormat === undefined)
|
|
return undefined;
|
|
if ((ts.isImportDeclaration(usage.parent) || ts.isExportDeclaration(usage.parent))) {
|
|
var isTypeOnly = isExclusivelyTypeOnlyImportOrExport(usage.parent);
|
|
if (isTypeOnly) {
|
|
var override = getResolutionModeOverrideForClause(usage.parent.assertClause);
|
|
if (override) {
|
|
return override;
|
|
}
|
|
}
|
|
}
|
|
if (usage.parent.parent && ts.isImportTypeNode(usage.parent.parent)) {
|
|
var override = getResolutionModeOverrideForClause((_a = usage.parent.parent.assertions) === null || _a === void 0 ? void 0 : _a.assertClause);
|
|
if (override) {
|
|
return override;
|
|
}
|
|
}
|
|
if (file.impliedNodeFormat !== ts.ModuleKind.ESNext) {
|
|
return ts.isImportCall(ts.walkUpParenthesizedExpressions(usage.parent)) ? ts.ModuleKind.ESNext : ts.ModuleKind.CommonJS;
|
|
}
|
|
var exprParentParent = (_b = ts.walkUpParenthesizedExpressions(usage.parent)) === null || _b === void 0 ? void 0 : _b.parent;
|
|
return exprParentParent && ts.isImportEqualsDeclaration(exprParentParent) ? ts.ModuleKind.CommonJS : ts.ModuleKind.ESNext;
|
|
}
|
|
ts.getModeForUsageLocation = getModeForUsageLocation;
|
|
function getResolutionModeOverrideForClause(clause, grammarErrorOnNode) {
|
|
if (!clause)
|
|
return undefined;
|
|
if (ts.length(clause.elements) !== 1) {
|
|
grammarErrorOnNode === null || grammarErrorOnNode === void 0 ? void 0 : grammarErrorOnNode(clause, ts.Diagnostics.Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require);
|
|
return undefined;
|
|
}
|
|
var elem = clause.elements[0];
|
|
if (!ts.isStringLiteralLike(elem.name))
|
|
return undefined;
|
|
if (elem.name.text !== "resolution-mode") {
|
|
grammarErrorOnNode === null || grammarErrorOnNode === void 0 ? void 0 : grammarErrorOnNode(elem.name, ts.Diagnostics.resolution_mode_is_the_only_valid_key_for_type_import_assertions);
|
|
return undefined;
|
|
}
|
|
if (!ts.isStringLiteralLike(elem.value))
|
|
return undefined;
|
|
if (elem.value.text !== "import" && elem.value.text !== "require") {
|
|
grammarErrorOnNode === null || grammarErrorOnNode === void 0 ? void 0 : grammarErrorOnNode(elem.value, ts.Diagnostics.resolution_mode_should_be_either_require_or_import);
|
|
return undefined;
|
|
}
|
|
return elem.value.text === "import" ? ts.ModuleKind.ESNext : ts.ModuleKind.CommonJS;
|
|
}
|
|
ts.getResolutionModeOverrideForClause = getResolutionModeOverrideForClause;
|
|
function loadWithModeAwareCache(names, containingFile, containingFileName, redirectedReference, loader) {
|
|
if (names.length === 0) {
|
|
return [];
|
|
}
|
|
var resolutions = [];
|
|
var cache = new ts.Map();
|
|
var i = 0;
|
|
for (var _i = 0, names_3 = names; _i < names_3.length; _i++) {
|
|
var name = names_3[_i];
|
|
var result = void 0;
|
|
var mode = getModeForResolutionAtIndex(containingFile, i);
|
|
i++;
|
|
var cacheKey = mode !== undefined ? "".concat(mode, "|").concat(name) : name;
|
|
if (cache.has(cacheKey)) {
|
|
result = cache.get(cacheKey);
|
|
}
|
|
else {
|
|
cache.set(cacheKey, result = loader(name, mode, containingFileName, redirectedReference));
|
|
}
|
|
resolutions.push(result);
|
|
}
|
|
return resolutions;
|
|
}
|
|
ts.loadWithModeAwareCache = loadWithModeAwareCache;
|
|
function forEachResolvedProjectReference(resolvedProjectReferences, cb) {
|
|
return forEachProjectReference(undefined, resolvedProjectReferences, function (resolvedRef, parent) { return resolvedRef && cb(resolvedRef, parent); });
|
|
}
|
|
ts.forEachResolvedProjectReference = forEachResolvedProjectReference;
|
|
function forEachProjectReference(projectReferences, resolvedProjectReferences, cbResolvedRef, cbRef) {
|
|
var seenResolvedRefs;
|
|
return worker(projectReferences, resolvedProjectReferences, undefined);
|
|
function worker(projectReferences, resolvedProjectReferences, parent) {
|
|
if (cbRef) {
|
|
var result = cbRef(projectReferences, parent);
|
|
if (result)
|
|
return result;
|
|
}
|
|
return ts.forEach(resolvedProjectReferences, function (resolvedRef, index) {
|
|
if (resolvedRef && (seenResolvedRefs === null || seenResolvedRefs === void 0 ? void 0 : seenResolvedRefs.has(resolvedRef.sourceFile.path))) {
|
|
return undefined;
|
|
}
|
|
var result = cbResolvedRef(resolvedRef, parent, index);
|
|
if (result || !resolvedRef)
|
|
return result;
|
|
(seenResolvedRefs || (seenResolvedRefs = new ts.Set())).add(resolvedRef.sourceFile.path);
|
|
return worker(resolvedRef.commandLine.projectReferences, resolvedRef.references, resolvedRef);
|
|
});
|
|
}
|
|
}
|
|
ts.inferredTypesContainingFile = "__inferred type names__.ts";
|
|
function isReferencedFile(reason) {
|
|
switch (reason === null || reason === void 0 ? void 0 : reason.kind) {
|
|
case ts.FileIncludeKind.Import:
|
|
case ts.FileIncludeKind.ReferenceFile:
|
|
case ts.FileIncludeKind.TypeReferenceDirective:
|
|
case ts.FileIncludeKind.LibReferenceDirective:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
ts.isReferencedFile = isReferencedFile;
|
|
function isReferenceFileLocation(location) {
|
|
return location.pos !== undefined;
|
|
}
|
|
ts.isReferenceFileLocation = isReferenceFileLocation;
|
|
function getReferencedFileLocation(getSourceFileByPath, ref) {
|
|
var _a, _b, _c;
|
|
var _d, _e, _f, _g;
|
|
var file = ts.Debug.checkDefined(getSourceFileByPath(ref.file));
|
|
var kind = ref.kind, index = ref.index;
|
|
var pos, end, packageId, resolutionMode;
|
|
switch (kind) {
|
|
case ts.FileIncludeKind.Import:
|
|
var importLiteral = getModuleNameStringLiteralAt(file, index);
|
|
packageId = (_e = (_d = file.resolvedModules) === null || _d === void 0 ? void 0 : _d.get(importLiteral.text, getModeForResolutionAtIndex(file, index))) === null || _e === void 0 ? void 0 : _e.packageId;
|
|
if (importLiteral.pos === -1)
|
|
return { file: file, packageId: packageId, text: importLiteral.text };
|
|
pos = ts.skipTrivia(file.text, importLiteral.pos);
|
|
end = importLiteral.end;
|
|
break;
|
|
case ts.FileIncludeKind.ReferenceFile:
|
|
(_a = file.referencedFiles[index], pos = _a.pos, end = _a.end);
|
|
break;
|
|
case ts.FileIncludeKind.TypeReferenceDirective:
|
|
(_b = file.typeReferenceDirectives[index], pos = _b.pos, end = _b.end, resolutionMode = _b.resolutionMode);
|
|
packageId = (_g = (_f = file.resolvedTypeReferenceDirectiveNames) === null || _f === void 0 ? void 0 : _f.get(ts.toFileNameLowerCase(file.typeReferenceDirectives[index].fileName), resolutionMode || file.impliedNodeFormat)) === null || _g === void 0 ? void 0 : _g.packageId;
|
|
break;
|
|
case ts.FileIncludeKind.LibReferenceDirective:
|
|
(_c = file.libReferenceDirectives[index], pos = _c.pos, end = _c.end);
|
|
break;
|
|
default:
|
|
return ts.Debug.assertNever(kind);
|
|
}
|
|
return { file: file, pos: pos, end: end, packageId: packageId };
|
|
}
|
|
ts.getReferencedFileLocation = getReferencedFileLocation;
|
|
function isProgramUptoDate(program, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences) {
|
|
if (!program || (hasChangedAutomaticTypeDirectiveNames === null || hasChangedAutomaticTypeDirectiveNames === void 0 ? void 0 : hasChangedAutomaticTypeDirectiveNames()))
|
|
return false;
|
|
if (!ts.arrayIsEqualTo(program.getRootFileNames(), rootFileNames))
|
|
return false;
|
|
var seenResolvedRefs;
|
|
if (!ts.arrayIsEqualTo(program.getProjectReferences(), projectReferences, projectReferenceUptoDate))
|
|
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 !sourceFileVersionUptoDate(sourceFile) ||
|
|
hasInvalidatedResolution(sourceFile.path);
|
|
}
|
|
function sourceFileVersionUptoDate(sourceFile) {
|
|
return sourceFile.version === getSourceVersion(sourceFile.resolvedPath, sourceFile.fileName);
|
|
}
|
|
function projectReferenceUptoDate(oldRef, newRef, index) {
|
|
return ts.projectReferenceIsEqualTo(oldRef, newRef) &&
|
|
resolvedProjectReferenceUptoDate(program.getResolvedProjectReferences()[index], oldRef);
|
|
}
|
|
function resolvedProjectReferenceUptoDate(oldResolvedRef, oldRef) {
|
|
if (oldResolvedRef) {
|
|
if (ts.contains(seenResolvedRefs, oldResolvedRef))
|
|
return true;
|
|
var refPath_1 = resolveProjectReferencePath(oldRef);
|
|
var newParsedCommandLine = getParsedCommandLine(refPath_1);
|
|
if (!newParsedCommandLine)
|
|
return false;
|
|
if (oldResolvedRef.commandLine.options.configFile !== newParsedCommandLine.options.configFile)
|
|
return false;
|
|
if (!ts.arrayIsEqualTo(oldResolvedRef.commandLine.fileNames, newParsedCommandLine.fileNames))
|
|
return false;
|
|
(seenResolvedRefs || (seenResolvedRefs = [])).push(oldResolvedRef);
|
|
return !ts.forEach(oldResolvedRef.references, function (childResolvedRef, index) {
|
|
return !resolvedProjectReferenceUptoDate(childResolvedRef, oldResolvedRef.commandLine.projectReferences[index]);
|
|
});
|
|
}
|
|
var refPath = resolveProjectReferencePath(oldRef);
|
|
return !getParsedCommandLine(refPath);
|
|
}
|
|
}
|
|
ts.isProgramUptoDate = isProgramUptoDate;
|
|
function getConfigFileParsingDiagnostics(configFileParseResult) {
|
|
return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
|
|
configFileParseResult.errors;
|
|
}
|
|
ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
|
|
function getImpliedNodeFormatForFile(fileName, packageJsonInfoCache, host, options) {
|
|
var result = getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options);
|
|
return typeof result === "object" ? result.impliedNodeFormat : result;
|
|
}
|
|
ts.getImpliedNodeFormatForFile = getImpliedNodeFormatForFile;
|
|
function getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options) {
|
|
switch (ts.getEmitModuleResolutionKind(options)) {
|
|
case ts.ModuleResolutionKind.Node16:
|
|
case ts.ModuleResolutionKind.NodeNext:
|
|
return ts.fileExtensionIsOneOf(fileName, [".d.mts", ".mts", ".mjs"]) ? ts.ModuleKind.ESNext :
|
|
ts.fileExtensionIsOneOf(fileName, [".d.cts", ".cts", ".cjs"]) ? ts.ModuleKind.CommonJS :
|
|
ts.fileExtensionIsOneOf(fileName, [".d.ts", ".ts", ".tsx", ".js", ".jsx"]) ? lookupFromPackageJson() :
|
|
undefined;
|
|
default:
|
|
return undefined;
|
|
}
|
|
function lookupFromPackageJson() {
|
|
var state = ts.getTemporaryModuleResolutionState(packageJsonInfoCache, host, options);
|
|
var packageJsonLocations = [];
|
|
state.failedLookupLocations = packageJsonLocations;
|
|
state.affectingLocations = packageJsonLocations;
|
|
var packageJsonScope = ts.getPackageScopeForPath(fileName, state);
|
|
var impliedNodeFormat = (packageJsonScope === null || packageJsonScope === void 0 ? void 0 : packageJsonScope.packageJsonContent.type) === "module" ? ts.ModuleKind.ESNext : ts.ModuleKind.CommonJS;
|
|
return { impliedNodeFormat: impliedNodeFormat, packageJsonLocations: packageJsonLocations, packageJsonScope: packageJsonScope };
|
|
}
|
|
}
|
|
ts.getImpliedNodeFormatForFileWorker = getImpliedNodeFormatForFileWorker;
|
|
ts.plainJSErrors = new ts.Set([
|
|
ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0.code,
|
|
ts.Diagnostics.A_module_cannot_have_multiple_default_exports.code,
|
|
ts.Diagnostics.Another_export_default_is_here.code,
|
|
ts.Diagnostics.The_first_export_default_is_here.code,
|
|
ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module.code,
|
|
ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode.code,
|
|
ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here.code,
|
|
ts.Diagnostics.constructor_is_a_reserved_word.code,
|
|
ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode.code,
|
|
ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode.code,
|
|
ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode.code,
|
|
ts.Diagnostics.Invalid_use_of_0_in_strict_mode.code,
|
|
ts.Diagnostics.A_label_is_not_allowed_here.code,
|
|
ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode.code,
|
|
ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode.code,
|
|
ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement.code,
|
|
ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement.code,
|
|
ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name.code,
|
|
ts.Diagnostics.A_class_member_cannot_have_the_0_keyword.code,
|
|
ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name.code,
|
|
ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement.code,
|
|
ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,
|
|
ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,
|
|
ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement.code,
|
|
ts.Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration.code,
|
|
ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context.code,
|
|
ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer.code,
|
|
ts.Diagnostics.A_get_accessor_cannot_have_parameters.code,
|
|
ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern.code,
|
|
ts.Diagnostics.A_rest_element_cannot_have_a_property_name.code,
|
|
ts.Diagnostics.A_rest_element_cannot_have_an_initializer.code,
|
|
ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern.code,
|
|
ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer.code,
|
|
ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list.code,
|
|
ts.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma.code,
|
|
ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block.code,
|
|
ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter.code,
|
|
ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter.code,
|
|
ts.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module.code,
|
|
ts.Diagnostics.An_export_declaration_cannot_have_modifiers.code,
|
|
ts.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module.code,
|
|
ts.Diagnostics.An_import_declaration_cannot_have_modifiers.code,
|
|
ts.Diagnostics.An_object_member_cannot_be_declared_optional.code,
|
|
ts.Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element.code,
|
|
ts.Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable.code,
|
|
ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause.code,
|
|
ts.Diagnostics.Catch_clause_variable_cannot_have_an_initializer.code,
|
|
ts.Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator.code,
|
|
ts.Diagnostics.Classes_can_only_extend_a_single_class.code,
|
|
ts.Diagnostics.Classes_may_not_have_a_field_named_constructor.code,
|
|
ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code,
|
|
ts.Diagnostics.Duplicate_label_0.code,
|
|
ts.Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments.code,
|
|
ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block.code,
|
|
ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression.code,
|
|
ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name.code,
|
|
ts.Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array.code,
|
|
ts.Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names.code,
|
|
ts.Diagnostics.Jump_target_cannot_cross_function_boundary.code,
|
|
ts.Diagnostics.Line_terminator_not_permitted_before_arrow.code,
|
|
ts.Diagnostics.Modifiers_cannot_appear_here.code,
|
|
ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement.code,
|
|
ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement.code,
|
|
ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies.code,
|
|
ts.Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code,
|
|
ts.Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier.code,
|
|
ts.Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain.code,
|
|
ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async.code,
|
|
ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer.code,
|
|
ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer.code,
|
|
ts.Diagnostics.Trailing_comma_not_allowed.code,
|
|
ts.Diagnostics.Variable_declaration_list_cannot_be_empty.code,
|
|
ts.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses.code,
|
|
ts.Diagnostics._0_expected.code,
|
|
ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2.code,
|
|
ts.Diagnostics._0_list_cannot_be_empty.code,
|
|
ts.Diagnostics._0_modifier_already_seen.code,
|
|
ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration.code,
|
|
ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element.code,
|
|
ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter.code,
|
|
ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind.code,
|
|
ts.Diagnostics._0_modifier_cannot_be_used_here.code,
|
|
ts.Diagnostics._0_modifier_must_precede_1_modifier.code,
|
|
ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block.code,
|
|
ts.Diagnostics.const_declarations_must_be_initialized.code,
|
|
ts.Diagnostics.extends_clause_already_seen.code,
|
|
ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block.code,
|
|
ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code,
|
|
ts.Diagnostics.Class_constructor_may_not_be_a_generator.code,
|
|
ts.Diagnostics.Class_constructor_may_not_be_an_accessor.code,
|
|
ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,
|
|
]);
|
|
function shouldProgramCreateNewSourceFiles(program, newOptions) {
|
|
if (!program)
|
|
return false;
|
|
return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
|
|
}
|
|
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 _a, _b, _c, _d;
|
|
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 processingDefaultLibFiles;
|
|
var processingOtherFiles;
|
|
var files;
|
|
var symlinks;
|
|
var commonSourceDirectory;
|
|
var typeChecker;
|
|
var classifiableNames;
|
|
var ambientModuleNameToUnmodifiedFileName = new ts.Map();
|
|
var fileReasons = ts.createMultiMap();
|
|
var cachedBindAndCheckDiagnosticsForFile = {};
|
|
var cachedDeclarationDiagnosticsForFile = {};
|
|
var resolvedTypeReferenceDirectives = ts.createModeAwareCache();
|
|
var fileProcessingDiagnostics;
|
|
var maxNodeModuleJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 0;
|
|
var currentNodeModulesDepth = 0;
|
|
var modulesWithElidedImports = new ts.Map();
|
|
var sourceFilesFoundSearchingNodeModules = new ts.Map();
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "createProgram", { configFilePath: options.configFilePath, rootDir: options.rootDir }, true);
|
|
ts.performance.mark("beforeProgram");
|
|
var host = createProgramOptions.host || createCompilerHost(options);
|
|
var configParsingHost = parseConfigHostFromCompilerHostLike(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 supportedExtensionsWithJsonIfResolveJsonModule = ts.getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
|
|
var hasEmitBlockingDiagnostics = new ts.Map();
|
|
var _compilerOptionsObjectLiteralSyntax;
|
|
var moduleResolutionCache;
|
|
var typeReferenceDirectiveResolutionCache;
|
|
var actualResolveModuleNamesWorker;
|
|
var hasInvalidatedResolution = host.hasInvalidatedResolution || ts.returnFalse;
|
|
if (host.resolveModuleNames) {
|
|
actualResolveModuleNamesWorker = function (moduleNames, containingFile, containingFileName, reusedNames, redirectedReference) { return host.resolveModuleNames(ts.Debug.checkEachDefined(moduleNames), containingFileName, reusedNames, redirectedReference, options, containingFile).map(function (resolved) {
|
|
if (!resolved || resolved.extension !== undefined) {
|
|
return resolved;
|
|
}
|
|
var withExtension = ts.clone(resolved);
|
|
withExtension.extension = ts.extensionFromPath(resolved.resolvedFileName);
|
|
return withExtension;
|
|
}); };
|
|
moduleResolutionCache = (_a = host.getModuleResolutionCache) === null || _a === void 0 ? void 0 : _a.call(host);
|
|
}
|
|
else {
|
|
moduleResolutionCache = ts.createModuleResolutionCache(currentDirectory, getCanonicalFileName, options);
|
|
var loader_1 = function (moduleName, resolverMode, containingFileName, redirectedReference) { return ts.resolveModuleName(moduleName, containingFileName, options, host, moduleResolutionCache, redirectedReference, resolverMode).resolvedModule; };
|
|
actualResolveModuleNamesWorker = function (moduleNames, containingFile, containingFileName, _reusedNames, redirectedReference) { return loadWithModeAwareCache(ts.Debug.checkEachDefined(moduleNames), containingFile, containingFileName, redirectedReference, loader_1); };
|
|
}
|
|
var actualResolveTypeReferenceDirectiveNamesWorker;
|
|
if (host.resolveTypeReferenceDirectives) {
|
|
actualResolveTypeReferenceDirectiveNamesWorker = function (typeDirectiveNames, containingFile, redirectedReference, containingFileMode) { return host.resolveTypeReferenceDirectives(ts.Debug.checkEachDefined(typeDirectiveNames), containingFile, redirectedReference, options, containingFileMode); };
|
|
}
|
|
else {
|
|
typeReferenceDirectiveResolutionCache = ts.createTypeReferenceDirectiveResolutionCache(currentDirectory, getCanonicalFileName, undefined, moduleResolutionCache === null || moduleResolutionCache === void 0 ? void 0 : moduleResolutionCache.getPackageJsonInfoCache());
|
|
var loader_2 = function (typesRef, containingFile, redirectedReference, resolutionMode) { return ts.resolveTypeReferenceDirective(typesRef, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache, resolutionMode).resolvedTypeReferenceDirective; };
|
|
actualResolveTypeReferenceDirectiveNamesWorker = function (typeReferenceDirectiveNames, containingFile, redirectedReference, containingFileMode) { return loadWithTypeDirectiveCache(ts.Debug.checkEachDefined(typeReferenceDirectiveNames), containingFile, redirectedReference, containingFileMode, loader_2); };
|
|
}
|
|
var packageIdToSourceFile = new ts.Map();
|
|
var sourceFileToPackageName = new ts.Map();
|
|
var redirectTargetsMap = ts.createMultiMap();
|
|
var usesUriStyleNodeCoreModules = false;
|
|
var filesByName = new ts.Map();
|
|
var missingFilePaths;
|
|
var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? new ts.Map() : undefined;
|
|
var resolvedProjectReferences;
|
|
var projectReferenceRedirects;
|
|
var mapFromFileToProjectReferenceRedirects;
|
|
var mapFromToProjectReferenceRedirectSource;
|
|
var useSourceOfProjectReferenceRedirect = !!((_b = host.useSourceOfProjectReferenceRedirect) === null || _b === void 0 ? void 0 : _b.call(host)) &&
|
|
!options.disableSourceOfProjectReferenceRedirect;
|
|
var _e = updateHostForUseSourceOfProjectReferenceRedirect({
|
|
compilerHost: host,
|
|
getSymlinkCache: getSymlinkCache,
|
|
useSourceOfProjectReferenceRedirect: useSourceOfProjectReferenceRedirect,
|
|
toPath: toPath,
|
|
getResolvedProjectReferences: getResolvedProjectReferences,
|
|
getSourceOfProjectReferenceRedirect: getSourceOfProjectReferenceRedirect,
|
|
forEachResolvedProjectReference: forEachResolvedProjectReference
|
|
}), onProgramCreateComplete = _e.onProgramCreateComplete, fileExists = _e.fileExists, directoryExists = _e.directoryExists;
|
|
var readFile = host.readFile.bind(host);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "shouldProgramCreateNewSourceFiles", { hasOldProgram: !!oldProgram });
|
|
var shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
var structureIsReused;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "tryReuseStructureFromOldProgram", {});
|
|
structureIsReused = tryReuseStructureFromOldProgram();
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
if (structureIsReused !== 2) {
|
|
processingDefaultLibFiles = [];
|
|
processingOtherFiles = [];
|
|
if (projectReferences) {
|
|
if (!resolvedProjectReferences) {
|
|
resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile);
|
|
}
|
|
if (rootNames.length) {
|
|
resolvedProjectReferences === null || resolvedProjectReferences === void 0 ? void 0 : resolvedProjectReferences.forEach(function (parsedRef, index) {
|
|
if (!parsedRef)
|
|
return;
|
|
var out = ts.outFile(parsedRef.commandLine.options);
|
|
if (useSourceOfProjectReferenceRedirect) {
|
|
if (out || ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) {
|
|
for (var _i = 0, _a = parsedRef.commandLine.fileNames; _i < _a.length; _i++) {
|
|
var fileName = _a[_i];
|
|
processProjectReferenceFile(fileName, { kind: ts.FileIncludeKind.SourceFromProjectReference, index: index });
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (out) {
|
|
processProjectReferenceFile(ts.changeExtension(out, ".d.ts"), { kind: ts.FileIncludeKind.OutputFromProjectReference, index: index });
|
|
}
|
|
else if (ts.getEmitModuleKind(parsedRef.commandLine.options) === ts.ModuleKind.None) {
|
|
var getCommonSourceDirectory_2 = ts.memoize(function () { return ts.getCommonSourceDirectoryOfConfig(parsedRef.commandLine, !host.useCaseSensitiveFileNames()); });
|
|
for (var _b = 0, _c = parsedRef.commandLine.fileNames; _b < _c.length; _b++) {
|
|
var fileName = _c[_b];
|
|
if (!ts.isDeclarationFileName(fileName) && !ts.fileExtensionIs(fileName, ".json")) {
|
|
processProjectReferenceFile(ts.getOutputDeclarationFileName(fileName, parsedRef.commandLine, !host.useCaseSensitiveFileNames(), getCommonSourceDirectory_2), { kind: ts.FileIncludeKind.OutputFromProjectReference, index: index });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "processRootFiles", { count: rootNames.length });
|
|
ts.forEach(rootNames, function (name, index) { return processRootFile(name, false, false, { kind: ts.FileIncludeKind.RootFile, index: index }); });
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
var typeReferences = rootNames.length ? ts.getAutomaticTypeDirectiveNames(options, host) : ts.emptyArray;
|
|
if (typeReferences.length) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "processTypeReferences", { count: typeReferences.length });
|
|
var containingDirectory = options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : host.getCurrentDirectory();
|
|
var containingFilename = ts.combinePaths(containingDirectory, ts.inferredTypesContainingFile);
|
|
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename);
|
|
for (var i = 0; i < typeReferences.length; i++) {
|
|
processTypeReferenceDirective(typeReferences[i], undefined, resolutions[i], { kind: ts.FileIncludeKind.AutomaticTypeDirectiveFile, typeReference: typeReferences[i], packageId: (_c = resolutions[i]) === null || _c === void 0 ? void 0 : _c.packageId });
|
|
}
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
if (rootNames.length && !skipDefaultLib) {
|
|
var defaultLibraryFileName = getDefaultLibraryFileName();
|
|
if (!options.lib && defaultLibraryFileName) {
|
|
processRootFile(defaultLibraryFileName, true, false, { kind: ts.FileIncludeKind.LibFile });
|
|
}
|
|
else {
|
|
ts.forEach(options.lib, function (libFileName, index) {
|
|
processRootFile(pathForLibFile(libFileName), true, false, { kind: ts.FileIncludeKind.LibFile, index: index });
|
|
});
|
|
}
|
|
}
|
|
missingFilePaths = ts.arrayFrom(ts.mapDefinedIterator(filesByName.entries(), function (_a) {
|
|
var path = _a[0], file = _a[1];
|
|
return file === undefined ? path : undefined;
|
|
}));
|
|
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 _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) {
|
|
var oldSourceFile = oldSourceFiles_1[_i];
|
|
var newFile = getSourceFileByPath(oldSourceFile.resolvedPath);
|
|
if (shouldCreateNewSourceFile || !newFile || newFile.impliedNodeFormat !== oldSourceFile.impliedNodeFormat ||
|
|
(oldSourceFile.resolvedPath === oldSourceFile.path && newFile.resolvedPath !== oldSourceFile.path)) {
|
|
host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path));
|
|
}
|
|
}
|
|
if (!host.getParsedCommandLine) {
|
|
oldProgram.forEachResolvedProjectReference(function (resolvedProjectReference) {
|
|
if (!getResolvedProjectReferenceByPath(resolvedProjectReference.sourceFile.path)) {
|
|
host.onReleaseOldSourceFile(resolvedProjectReference.sourceFile, oldProgram.getCompilerOptions(), false);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (oldProgram && host.onReleaseParsedCommandLine) {
|
|
forEachProjectReference(oldProgram.getProjectReferences(), oldProgram.getResolvedProjectReferences(), function (oldResolvedRef, parent, index) {
|
|
var oldReference = (parent === null || parent === void 0 ? void 0 : parent.commandLine.projectReferences[index]) || oldProgram.getProjectReferences()[index];
|
|
var oldRefPath = resolveProjectReferencePath(oldReference);
|
|
if (!(projectReferenceRedirects === null || projectReferenceRedirects === void 0 ? void 0 : projectReferenceRedirects.has(toPath(oldRefPath)))) {
|
|
host.onReleaseParsedCommandLine(oldRefPath, oldResolvedRef, oldProgram.getCompilerOptions());
|
|
}
|
|
});
|
|
}
|
|
typeReferenceDirectiveResolutionCache = undefined;
|
|
oldProgram = undefined;
|
|
var program = {
|
|
getRootFileNames: function () { return rootNames; },
|
|
getSourceFile: getSourceFile,
|
|
getSourceFileByPath: getSourceFileByPath,
|
|
getSourceFiles: function () { return files; },
|
|
getMissingFilePaths: function () { return missingFilePaths; },
|
|
getModuleResolutionCache: function () { return moduleResolutionCache; },
|
|
getFilesByNameMap: function () { return filesByName; },
|
|
getCompilerOptions: function () { return options; },
|
|
getSyntacticDiagnostics: getSyntacticDiagnostics,
|
|
getOptionsDiagnostics: getOptionsDiagnostics,
|
|
getGlobalDiagnostics: getGlobalDiagnostics,
|
|
getSemanticDiagnostics: getSemanticDiagnostics,
|
|
getCachedSemanticDiagnostics: getCachedSemanticDiagnostics,
|
|
getSuggestionDiagnostics: getSuggestionDiagnostics,
|
|
getDeclarationDiagnostics: getDeclarationDiagnostics,
|
|
getBindAndCheckDiagnostics: getBindAndCheckDiagnostics,
|
|
getProgramDiagnostics: getProgramDiagnostics,
|
|
getTypeChecker: getTypeChecker,
|
|
getClassifiableNames: getClassifiableNames,
|
|
getCommonSourceDirectory: getCommonSourceDirectory,
|
|
emit: emit,
|
|
getCurrentDirectory: function () { return currentDirectory; },
|
|
getNodeCount: function () { return getTypeChecker().getNodeCount(); },
|
|
getIdentifierCount: function () { return getTypeChecker().getIdentifierCount(); },
|
|
getSymbolCount: function () { return getTypeChecker().getSymbolCount(); },
|
|
getTypeCount: function () { return getTypeChecker().getTypeCount(); },
|
|
getInstantiationCount: function () { return getTypeChecker().getInstantiationCount(); },
|
|
getRelationCacheSizes: function () { return getTypeChecker().getRelationCacheSizes(); },
|
|
getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; },
|
|
getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; },
|
|
isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary,
|
|
isSourceFileDefaultLibrary: isSourceFileDefaultLibrary,
|
|
getSourceFileFromReference: getSourceFileFromReference,
|
|
getLibFileFromReference: getLibFileFromReference,
|
|
sourceFileToPackageName: sourceFileToPackageName,
|
|
redirectTargetsMap: redirectTargetsMap,
|
|
usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
|
|
isEmittedFile: isEmittedFile,
|
|
getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
|
|
getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
|
|
getProjectReferences: getProjectReferences,
|
|
getResolvedProjectReferences: getResolvedProjectReferences,
|
|
getProjectReferenceRedirect: getProjectReferenceRedirect,
|
|
getResolvedProjectReferenceToRedirect: getResolvedProjectReferenceToRedirect,
|
|
getResolvedProjectReferenceByPath: getResolvedProjectReferenceByPath,
|
|
forEachResolvedProjectReference: forEachResolvedProjectReference,
|
|
isSourceOfProjectReferenceRedirect: isSourceOfProjectReferenceRedirect,
|
|
emitBuildInfo: emitBuildInfo,
|
|
fileExists: fileExists,
|
|
readFile: readFile,
|
|
directoryExists: directoryExists,
|
|
getSymlinkCache: getSymlinkCache,
|
|
realpath: (_d = host.realpath) === null || _d === void 0 ? void 0 : _d.bind(host),
|
|
useCaseSensitiveFileNames: function () { return host.useCaseSensitiveFileNames(); },
|
|
getFileIncludeReasons: function () { return fileReasons; },
|
|
structureIsReused: structureIsReused,
|
|
writeFile: writeFile,
|
|
};
|
|
onProgramCreateComplete();
|
|
fileProcessingDiagnostics === null || fileProcessingDiagnostics === void 0 ? void 0 : fileProcessingDiagnostics.forEach(function (diagnostic) {
|
|
switch (diagnostic.kind) {
|
|
case 1:
|
|
return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
|
|
case 0:
|
|
var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
|
|
return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
|
|
default:
|
|
ts.Debug.assertNever(diagnostic);
|
|
}
|
|
});
|
|
verifyCompilerOptions();
|
|
ts.performance.mark("afterProgram");
|
|
ts.performance.measure("Program", "beforeProgram", "afterProgram");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return program;
|
|
function addResolutionDiagnostics(list) {
|
|
if (!list)
|
|
return;
|
|
for (var _i = 0, list_3 = list; _i < list_3.length; _i++) {
|
|
var elem = list_3[_i];
|
|
programDiagnostics.add(elem);
|
|
}
|
|
}
|
|
function pullDiagnosticsFromCache(names, containingFile) {
|
|
var _a;
|
|
if (!moduleResolutionCache)
|
|
return;
|
|
var containingFileName = ts.getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory);
|
|
var containingFileMode = !ts.isString(containingFile) ? containingFile.impliedNodeFormat : undefined;
|
|
var containingDir = ts.getDirectoryPath(containingFileName);
|
|
var redirectedReference = getRedirectReferenceForResolution(containingFile);
|
|
var i = 0;
|
|
for (var _i = 0, names_4 = names; _i < names_4.length; _i++) {
|
|
var n = names_4[_i];
|
|
var mode = typeof n === "string" ? getModeForResolutionAtIndex(containingFile, i) : getModeForFileReference(n, containingFileMode);
|
|
var name = typeof n === "string" ? n : n.fileName;
|
|
i++;
|
|
if (ts.isExternalModuleNameRelative(name))
|
|
continue;
|
|
var diags = (_a = moduleResolutionCache.getOrCreateCacheForModuleName(name, mode, redirectedReference).get(containingDir)) === null || _a === void 0 ? void 0 : _a.resolutionDiagnostics;
|
|
addResolutionDiagnostics(diags);
|
|
}
|
|
}
|
|
function resolveModuleNamesWorker(moduleNames, containingFile, reusedNames) {
|
|
if (!moduleNames.length)
|
|
return ts.emptyArray;
|
|
var containingFileName = ts.getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory);
|
|
var redirectedReference = getRedirectReferenceForResolution(containingFile);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "resolveModuleNamesWorker", { containingFileName: containingFileName });
|
|
ts.performance.mark("beforeResolveModule");
|
|
var result = actualResolveModuleNamesWorker(moduleNames, containingFile, containingFileName, reusedNames, redirectedReference);
|
|
ts.performance.mark("afterResolveModule");
|
|
ts.performance.measure("ResolveModule", "beforeResolveModule", "afterResolveModule");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
pullDiagnosticsFromCache(moduleNames, containingFile);
|
|
return result;
|
|
}
|
|
function resolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFile) {
|
|
if (!typeDirectiveNames.length)
|
|
return [];
|
|
var containingFileName = !ts.isString(containingFile) ? ts.getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile;
|
|
var redirectedReference = !ts.isString(containingFile) ? getRedirectReferenceForResolution(containingFile) : undefined;
|
|
var containingFileMode = !ts.isString(containingFile) ? containingFile.impliedNodeFormat : undefined;
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "resolveTypeReferenceDirectiveNamesWorker", { containingFileName: containingFileName });
|
|
ts.performance.mark("beforeResolveTypeReference");
|
|
var result = actualResolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFileName, redirectedReference, containingFileMode);
|
|
ts.performance.mark("afterResolveTypeReference");
|
|
ts.performance.measure("ResolveTypeReference", "beforeResolveTypeReference", "afterResolveTypeReference");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return result;
|
|
}
|
|
function getRedirectReferenceForResolution(file) {
|
|
var redirect = getResolvedProjectReferenceToRedirect(file.originalFileName);
|
|
if (redirect || !ts.isDeclarationFileName(file.originalFileName))
|
|
return redirect;
|
|
var resultFromDts = getRedirectReferenceForResolutionFromSourceOfProject(file.path);
|
|
if (resultFromDts)
|
|
return resultFromDts;
|
|
if (!host.realpath || !options.preserveSymlinks || !ts.stringContains(file.originalFileName, ts.nodeModulesPathPart))
|
|
return undefined;
|
|
var realDeclarationPath = toPath(host.realpath(file.originalFileName));
|
|
return realDeclarationPath === file.path ? undefined : getRedirectReferenceForResolutionFromSourceOfProject(realDeclarationPath);
|
|
}
|
|
function getRedirectReferenceForResolutionFromSourceOfProject(filePath) {
|
|
var source = getSourceOfProjectReferenceRedirect(filePath);
|
|
if (ts.isString(source))
|
|
return getResolvedProjectReferenceToRedirect(source);
|
|
if (!source)
|
|
return undefined;
|
|
return forEachResolvedProjectReference(function (resolvedRef) {
|
|
var out = ts.outFile(resolvedRef.commandLine.options);
|
|
if (!out)
|
|
return undefined;
|
|
return toPath(out) === filePath ? resolvedRef : undefined;
|
|
});
|
|
}
|
|
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, mode) {
|
|
return moduleResolutionCache && ts.resolveModuleNameFromCache(moduleName, containingFile, moduleResolutionCache, mode);
|
|
}
|
|
function toPath(fileName) {
|
|
return ts.toPath(fileName, currentDirectory, getCanonicalFileName);
|
|
}
|
|
function getCommonSourceDirectory() {
|
|
if (commonSourceDirectory === undefined) {
|
|
var emittedFiles_1 = ts.filter(files, function (file) { return ts.sourceFileMayBeEmitted(file, program); });
|
|
commonSourceDirectory = ts.getCommonSourceDirectory(options, function () { return ts.mapDefined(emittedFiles_1, function (file) { return file.isDeclarationFile ? undefined : file.fileName; }); }, currentDirectory, getCanonicalFileName, function (commonSourceDirectory) { return checkSourceFilesBelongToPath(emittedFiles_1, commonSourceDirectory); });
|
|
}
|
|
return commonSourceDirectory;
|
|
}
|
|
function getClassifiableNames() {
|
|
var _a;
|
|
if (!classifiableNames) {
|
|
getTypeChecker();
|
|
classifiableNames = new ts.Set();
|
|
for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
|
|
var sourceFile = files_3[_i];
|
|
(_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
|
|
}
|
|
}
|
|
return classifiableNames;
|
|
}
|
|
function resolveModuleNamesReusingOldState(moduleNames, file) {
|
|
if (structureIsReused === 0 && !file.ambientModuleNames.length) {
|
|
return resolveModuleNamesWorker(moduleNames, file, undefined);
|
|
}
|
|
var oldSourceFile = oldProgram && oldProgram.getSourceFile(file.fileName);
|
|
if (oldSourceFile !== file && file.resolvedModules) {
|
|
var result_14 = [];
|
|
var i = 0;
|
|
for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
|
|
var moduleName = moduleNames_1[_i];
|
|
var resolvedModule = file.resolvedModules.get(moduleName, getModeForResolutionAtIndex(file, i));
|
|
i++;
|
|
result_14.push(resolvedModule);
|
|
}
|
|
return result_14;
|
|
}
|
|
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 = ts.getResolvedModule(oldSourceFile, moduleName, getModeForResolutionAtIndex(oldSourceFile, i));
|
|
if (oldResolvedModule) {
|
|
if (ts.isTraceEnabled(options, host)) {
|
|
ts.trace(host, oldResolvedModule.packageId ?
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
|
|
}
|
|
(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, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
|
|
}
|
|
}
|
|
else {
|
|
resolvesToAmbientModuleInNonModifiedFile = moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, i);
|
|
}
|
|
if (resolvesToAmbientModuleInNonModifiedFile) {
|
|
(result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker;
|
|
}
|
|
else {
|
|
(unknownModuleNames || (unknownModuleNames = [])).push(moduleName);
|
|
}
|
|
}
|
|
var resolutions = unknownModuleNames && unknownModuleNames.length
|
|
? resolveModuleNamesWorker(unknownModuleNames, file, 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, index) {
|
|
if (index >= ts.length(oldSourceFile === null || oldSourceFile === void 0 ? void 0 : oldSourceFile.imports) + ts.length(oldSourceFile === null || oldSourceFile === void 0 ? void 0 : oldSourceFile.moduleAugmentations))
|
|
return false;
|
|
var resolutionToFile = ts.getResolvedModule(oldSourceFile, moduleName, oldSourceFile && getModeForResolutionAtIndex(oldSourceFile, index));
|
|
var resolvedFile = resolutionToFile && oldProgram.getSourceFile(resolutionToFile.resolvedFileName);
|
|
if (resolutionToFile && resolvedFile) {
|
|
return false;
|
|
}
|
|
var unmodifiedFile = ambientModuleNameToUnmodifiedFileName.get(moduleName);
|
|
if (!unmodifiedFile) {
|
|
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, unmodifiedFile);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
function canReuseProjectReferences() {
|
|
return !forEachProjectReference(oldProgram.getProjectReferences(), oldProgram.getResolvedProjectReferences(), function (oldResolvedRef, parent, index) {
|
|
var newRef = (parent ? parent.commandLine.projectReferences : projectReferences)[index];
|
|
var newResolvedRef = parseProjectReferenceConfigFile(newRef);
|
|
if (oldResolvedRef) {
|
|
return !newResolvedRef ||
|
|
newResolvedRef.sourceFile !== oldResolvedRef.sourceFile ||
|
|
!ts.arrayIsEqualTo(oldResolvedRef.commandLine.fileNames, newResolvedRef.commandLine.fileNames);
|
|
}
|
|
else {
|
|
return newResolvedRef !== undefined;
|
|
}
|
|
}, function (oldProjectReferences, parent) {
|
|
var newReferences = parent ? getResolvedProjectReferenceByPath(parent.sourceFile.path).commandLine.projectReferences : projectReferences;
|
|
return !ts.arrayIsEqualTo(oldProjectReferences, newReferences, ts.projectReferenceIsEqualTo);
|
|
});
|
|
}
|
|
function tryReuseStructureFromOldProgram() {
|
|
var _a, _b;
|
|
if (!oldProgram) {
|
|
return 0;
|
|
}
|
|
var oldOptions = oldProgram.getCompilerOptions();
|
|
if (ts.changesAffectModuleResolution(oldOptions, options)) {
|
|
return 0;
|
|
}
|
|
var oldRootNames = oldProgram.getRootFileNames();
|
|
if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
|
|
return 0;
|
|
}
|
|
if (!canReuseProjectReferences()) {
|
|
return 0;
|
|
}
|
|
if (projectReferences) {
|
|
resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile);
|
|
}
|
|
var newSourceFiles = [];
|
|
var modifiedSourceFiles = [];
|
|
structureIsReused = 2;
|
|
if (oldProgram.getMissingFilePaths().some(function (missingFilePath) { return host.fileExists(missingFilePath); })) {
|
|
return 0;
|
|
}
|
|
var oldSourceFiles = oldProgram.getSourceFiles();
|
|
var seenPackageNames = new ts.Map();
|
|
for (var _i = 0, oldSourceFiles_2 = oldSourceFiles; _i < oldSourceFiles_2.length; _i++) {
|
|
var oldSourceFile = oldSourceFiles_2[_i];
|
|
var sourceFileOptions = getCreateSourceFileOptions(oldSourceFile.fileName, moduleResolutionCache, host, options);
|
|
var newSourceFile = host.getSourceFileByPath
|
|
? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.resolvedPath, sourceFileOptions, undefined, shouldCreateNewSourceFile || sourceFileOptions.impliedNodeFormat !== oldSourceFile.impliedNodeFormat)
|
|
: host.getSourceFile(oldSourceFile.fileName, sourceFileOptions, undefined, shouldCreateNewSourceFile || sourceFileOptions.impliedNodeFormat !== oldSourceFile.impliedNodeFormat);
|
|
if (!newSourceFile) {
|
|
return 0;
|
|
}
|
|
newSourceFile.packageJsonLocations = ((_a = sourceFileOptions.packageJsonLocations) === null || _a === void 0 ? void 0 : _a.length) ? sourceFileOptions.packageJsonLocations : undefined;
|
|
newSourceFile.packageJsonScope = sourceFileOptions.packageJsonScope;
|
|
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 0;
|
|
}
|
|
fileChanged = false;
|
|
newSourceFile = oldSourceFile;
|
|
}
|
|
else if (oldProgram.redirectTargetsMap.has(oldSourceFile.path)) {
|
|
if (newSourceFile !== oldSourceFile) {
|
|
return 0;
|
|
}
|
|
fileChanged = false;
|
|
}
|
|
else {
|
|
fileChanged = newSourceFile !== oldSourceFile;
|
|
}
|
|
newSourceFile.path = oldSourceFile.path;
|
|
newSourceFile.originalFileName = oldSourceFile.originalFileName;
|
|
newSourceFile.resolvedPath = oldSourceFile.resolvedPath;
|
|
newSourceFile.fileName = oldSourceFile.fileName;
|
|
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 0;
|
|
}
|
|
seenPackageNames.set(packageName, newKind);
|
|
}
|
|
if (fileChanged) {
|
|
if (oldSourceFile.impliedNodeFormat !== newSourceFile.impliedNodeFormat) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) {
|
|
structureIsReused = 1;
|
|
}
|
|
else {
|
|
collectExternalModuleReferences(newSourceFile);
|
|
if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if (!ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if ((oldSourceFile.flags & 6291456) !== (newSourceFile.flags & 6291456)) {
|
|
structureIsReused = 1;
|
|
}
|
|
else if (!ts.arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) {
|
|
structureIsReused = 1;
|
|
}
|
|
}
|
|
modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile });
|
|
}
|
|
else if (hasInvalidatedResolution(oldSourceFile.path)) {
|
|
structureIsReused = 1;
|
|
modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile });
|
|
}
|
|
newSourceFiles.push(newSourceFile);
|
|
}
|
|
if (structureIsReused !== 2) {
|
|
return structureIsReused;
|
|
}
|
|
var modifiedFiles = modifiedSourceFiles.map(function (f) { return f.oldFile; });
|
|
for (var _c = 0, oldSourceFiles_3 = oldSourceFiles; _c < oldSourceFiles_3.length; _c++) {
|
|
var oldFile = oldSourceFiles_3[_c];
|
|
if (!ts.contains(modifiedFiles, oldFile)) {
|
|
for (var _d = 0, _e = oldFile.ambientModuleNames; _d < _e.length; _d++) {
|
|
var moduleName = _e[_d];
|
|
ambientModuleNameToUnmodifiedFileName.set(moduleName, oldFile.fileName);
|
|
}
|
|
}
|
|
}
|
|
for (var _f = 0, modifiedSourceFiles_1 = modifiedSourceFiles; _f < modifiedSourceFiles_1.length; _f++) {
|
|
var _g = modifiedSourceFiles_1[_f], oldSourceFile = _g.oldFile, newSourceFile = _g.newFile;
|
|
var moduleNames = getModuleNames(newSourceFile);
|
|
var resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFile);
|
|
var resolutionsChanged = ts.hasChangesInResolutions(moduleNames, resolutions, oldSourceFile.resolvedModules, oldSourceFile, ts.moduleResolutionIsEqualTo);
|
|
if (resolutionsChanged) {
|
|
structureIsReused = 1;
|
|
newSourceFile.resolvedModules = ts.zipToModeAwareCache(newSourceFile, moduleNames, resolutions);
|
|
}
|
|
else {
|
|
newSourceFile.resolvedModules = oldSourceFile.resolvedModules;
|
|
}
|
|
var typesReferenceDirectives = newSourceFile.typeReferenceDirectives;
|
|
var typeReferenceResolutions = resolveTypeReferenceDirectiveNamesWorker(typesReferenceDirectives, newSourceFile);
|
|
var typeReferenceResolutionsChanged = ts.hasChangesInResolutions(typesReferenceDirectives, typeReferenceResolutions, oldSourceFile.resolvedTypeReferenceDirectiveNames, oldSourceFile, ts.typeDirectiveIsEqualTo);
|
|
if (typeReferenceResolutionsChanged) {
|
|
structureIsReused = 1;
|
|
newSourceFile.resolvedTypeReferenceDirectiveNames = ts.zipToModeAwareCache(newSourceFile, typesReferenceDirectives, typeReferenceResolutions);
|
|
}
|
|
else {
|
|
newSourceFile.resolvedTypeReferenceDirectiveNames = oldSourceFile.resolvedTypeReferenceDirectiveNames;
|
|
}
|
|
}
|
|
if (structureIsReused !== 2) {
|
|
return structureIsReused;
|
|
}
|
|
if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_b = host.hasChangedAutomaticTypeDirectiveNames) === null || _b === void 0 ? void 0 : _b.call(host))) {
|
|
return 1;
|
|
}
|
|
missingFilePaths = oldProgram.getMissingFilePaths();
|
|
ts.Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length);
|
|
for (var _h = 0, newSourceFiles_1 = newSourceFiles; _h < newSourceFiles_1.length; _h++) {
|
|
var newSourceFile = newSourceFiles_1[_h];
|
|
filesByName.set(newSourceFile.path, newSourceFile);
|
|
}
|
|
var oldFilesByNameMap = oldProgram.getFilesByNameMap();
|
|
oldFilesByNameMap.forEach(function (oldFile, path) {
|
|
if (!oldFile) {
|
|
filesByName.set(path, oldFile);
|
|
return;
|
|
}
|
|
if (oldFile.path === path) {
|
|
if (oldProgram.isSourceFileFromExternalLibrary(oldFile)) {
|
|
sourceFilesFoundSearchingNodeModules.set(oldFile.path, true);
|
|
}
|
|
return;
|
|
}
|
|
filesByName.set(path, filesByName.get(oldFile.path));
|
|
});
|
|
files = newSourceFiles;
|
|
fileReasons = oldProgram.getFileIncludeReasons();
|
|
fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics();
|
|
resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
|
|
sourceFileToPackageName = oldProgram.sourceFileToPackageName;
|
|
redirectTargetsMap = oldProgram.redirectTargetsMap;
|
|
usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
|
|
return 2;
|
|
}
|
|
function getEmitHost(writeFileCallback) {
|
|
return {
|
|
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,
|
|
getLibFileFromReference: program.getLibFileFromReference,
|
|
isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary,
|
|
getResolvedProjectReferenceToRedirect: getResolvedProjectReferenceToRedirect,
|
|
getProjectReferenceRedirect: getProjectReferenceRedirect,
|
|
isSourceOfProjectReferenceRedirect: isSourceOfProjectReferenceRedirect,
|
|
getSymlinkCache: getSymlinkCache,
|
|
writeFile: writeFileCallback || writeFile,
|
|
isEmitBlocked: isEmitBlocked,
|
|
readFile: function (f) { return host.readFile(f); },
|
|
fileExists: function (f) {
|
|
var path = toPath(f);
|
|
if (getSourceFileByPath(path))
|
|
return true;
|
|
if (ts.contains(missingFilePaths, path))
|
|
return false;
|
|
return host.fileExists(f);
|
|
},
|
|
useCaseSensitiveFileNames: function () { return host.useCaseSensitiveFileNames(); },
|
|
getProgramBuildInfo: function () { return program.getProgramBuildInfo && program.getProgramBuildInfo(); },
|
|
getSourceFileFromReference: function (file, ref) { return program.getSourceFileFromReference(file, ref); },
|
|
redirectTargetsMap: redirectTargetsMap,
|
|
getFileIncludeReasons: program.getFileIncludeReasons,
|
|
createHash: ts.maybeBind(host, host.createHash),
|
|
};
|
|
}
|
|
function writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
|
|
host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
}
|
|
function emitBuildInfo(writeFileCallback) {
|
|
ts.Debug.assert(!ts.outFile(options));
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "emitBuildInfo", {}, true);
|
|
ts.performance.mark("beforeEmit");
|
|
var emitResult = ts.emitFiles(ts.notImplementedResolver, getEmitHost(writeFileCallback), undefined, ts.noTransformers, false, true);
|
|
ts.performance.mark("afterEmit");
|
|
ts.performance.measure("Emit", "beforeEmit", "afterEmit");
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return emitResult;
|
|
}
|
|
function getResolvedProjectReferences() {
|
|
return resolvedProjectReferences;
|
|
}
|
|
function getProjectReferences() {
|
|
return projectReferences;
|
|
}
|
|
function getPrependNodes() {
|
|
return createPrependNodes(projectReferences, function (_ref, index) { var _a; return (_a = resolvedProjectReferences[index]) === null || _a === void 0 ? void 0 : _a.commandLine; }, function (fileName) {
|
|
var path = toPath(fileName);
|
|
var sourceFile = getSourceFileByPath(path);
|
|
return sourceFile ? sourceFile.text : filesByName.has(path) ? undefined : host.readFile(path);
|
|
});
|
|
}
|
|
function isSourceFileFromExternalLibrary(file) {
|
|
return !!sourceFilesFoundSearchingNodeModules.get(file.path);
|
|
}
|
|
function isSourceFileDefaultLibrary(file) {
|
|
if (!file.isDeclarationFile) {
|
|
return false;
|
|
}
|
|
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, pathForLibFile(libFileName)); });
|
|
}
|
|
}
|
|
function getTypeChecker() {
|
|
return typeChecker || (typeChecker = ts.createTypeChecker(program));
|
|
}
|
|
function emit(sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers, forceDtsEmit) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "emit", { path: sourceFile === null || sourceFile === void 0 ? void 0 : sourceFile.path }, true);
|
|
var result = runWithCancellationToken(function () { return emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers, forceDtsEmit); });
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return result;
|
|
}
|
|
function isEmitBlocked(emitFileName) {
|
|
return hasEmitBlockingDiagnostics.has(toPath(emitFileName));
|
|
}
|
|
function emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, customTransformers, forceDtsEmit) {
|
|
if (!forceDtsEmit) {
|
|
var result = handleNoEmitOptions(program, sourceFile, writeFileCallback, cancellationToken);
|
|
if (result)
|
|
return result;
|
|
}
|
|
var emitResolver = getTypeChecker().getEmitResolver(ts.outFile(options) ? undefined : sourceFile, cancellationToken);
|
|
ts.performance.mark("beforeEmit");
|
|
var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile, ts.getTransformers(options, customTransformers, emitOnlyDtsFiles), emitOnlyDtsFiles, false, forceDtsEmit);
|
|
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) || undefined;
|
|
}
|
|
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 getCachedSemanticDiagnostics(sourceFile) {
|
|
var _a;
|
|
return sourceFile
|
|
? (_a = cachedBindAndCheckDiagnosticsForFile.perFile) === null || _a === void 0 ? void 0 : _a.get(sourceFile.path)
|
|
: cachedBindAndCheckDiagnosticsForFile.allDiagnostics;
|
|
}
|
|
function getBindAndCheckDiagnostics(sourceFile, cancellationToken) {
|
|
return getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken);
|
|
}
|
|
function getProgramDiagnostics(sourceFile) {
|
|
var _a;
|
|
if (ts.skipTypeChecking(sourceFile, options, program)) {
|
|
return ts.emptyArray;
|
|
}
|
|
var programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName);
|
|
if (!((_a = sourceFile.commentDirectives) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
return programDiagnosticsInFile;
|
|
}
|
|
return getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, programDiagnosticsInFile).diagnostics;
|
|
}
|
|
function getDeclarationDiagnostics(sourceFile, cancellationToken) {
|
|
var options = program.getCompilerOptions();
|
|
if (!sourceFile || ts.outFile(options)) {
|
|
return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken);
|
|
}
|
|
else {
|
|
return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken);
|
|
}
|
|
}
|
|
function getSyntacticDiagnosticsForFile(sourceFile) {
|
|
if (ts.isSourceFileJS(sourceFile)) {
|
|
if (!sourceFile.additionalSyntacticDiagnostics) {
|
|
sourceFile.additionalSyntacticDiagnostics = getJSSyntacticDiagnosticsForFile(sourceFile);
|
|
}
|
|
return ts.concatenate(sourceFile.additionalSyntacticDiagnostics, sourceFile.parseDiagnostics);
|
|
}
|
|
return sourceFile.parseDiagnostics;
|
|
}
|
|
function runWithCancellationToken(func) {
|
|
try {
|
|
return func();
|
|
}
|
|
catch (e) {
|
|
if (e instanceof ts.OperationCanceledException) {
|
|
typeChecker = undefined;
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
|
|
return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
|
|
}
|
|
function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
|
|
return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
|
|
}
|
|
function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) {
|
|
return runWithCancellationToken(function () {
|
|
if (ts.skipTypeChecking(sourceFile, options, program)) {
|
|
return ts.emptyArray;
|
|
}
|
|
var typeChecker = getTypeChecker();
|
|
ts.Debug.assert(!!sourceFile.bindDiagnostics);
|
|
var isJs = sourceFile.scriptKind === 1 || sourceFile.scriptKind === 2;
|
|
var isCheckJs = isJs && ts.isCheckJsEnabledForFile(sourceFile, options);
|
|
var isPlainJs = ts.isPlainJsFile(sourceFile, options.checkJs);
|
|
var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
|
|
var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 || sourceFile.scriptKind === 4
|
|
|| sourceFile.scriptKind === 5 || isPlainJs || isCheckJs || sourceFile.scriptKind === 7);
|
|
var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
|
|
var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
|
|
if (isPlainJs) {
|
|
bindDiagnostics = ts.filter(bindDiagnostics, function (d) { return ts.plainJSErrors.has(d.code); });
|
|
checkDiagnostics = ts.filter(checkDiagnostics, function (d) { return ts.plainJSErrors.has(d.code); });
|
|
}
|
|
return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics && !isPlainJs, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
|
|
});
|
|
}
|
|
function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics) {
|
|
var _a;
|
|
var allDiagnostics = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
allDiagnostics[_i - 2] = arguments[_i];
|
|
}
|
|
var flatDiagnostics = ts.flatten(allDiagnostics);
|
|
if (!includeBindAndCheckDiagnostics || !((_a = sourceFile.commentDirectives) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
return flatDiagnostics;
|
|
}
|
|
var _b = getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, flatDiagnostics), diagnostics = _b.diagnostics, directives = _b.directives;
|
|
for (var _c = 0, _d = directives.getUnusedExpectations(); _c < _d.length; _c++) {
|
|
var errorExpectation = _d[_c];
|
|
diagnostics.push(ts.createDiagnosticForRange(sourceFile, errorExpectation.range, ts.Diagnostics.Unused_ts_expect_error_directive));
|
|
}
|
|
return diagnostics;
|
|
}
|
|
function getDiagnosticsWithPrecedingDirectives(sourceFile, commentDirectives, flatDiagnostics) {
|
|
var directives = ts.createCommentDirectivesMap(sourceFile, commentDirectives);
|
|
var diagnostics = flatDiagnostics.filter(function (diagnostic) { return markPrecedingCommentDirectiveLine(diagnostic, directives) === -1; });
|
|
return { diagnostics: diagnostics, directives: directives };
|
|
}
|
|
function getSuggestionDiagnostics(sourceFile, cancellationToken) {
|
|
return runWithCancellationToken(function () {
|
|
return getTypeChecker().getSuggestionDiagnostics(sourceFile, cancellationToken);
|
|
});
|
|
}
|
|
function markPrecedingCommentDirectiveLine(diagnostic, directives) {
|
|
var file = diagnostic.file, start = diagnostic.start;
|
|
if (!file) {
|
|
return -1;
|
|
}
|
|
var lineStarts = ts.getLineStarts(file);
|
|
var line = ts.computeLineAndCharacterOfPosition(lineStarts, start).line - 1;
|
|
while (line >= 0) {
|
|
if (directives.markUsed(line)) {
|
|
return line;
|
|
}
|
|
var lineText = file.text.slice(lineStarts[line], lineStarts[line + 1]).trim();
|
|
if (lineText !== "" && !/^(\s*)\/\/(.*)$/.test(lineText)) {
|
|
return -1;
|
|
}
|
|
line--;
|
|
}
|
|
return -1;
|
|
}
|
|
function getJSSyntacticDiagnosticsForFile(sourceFile) {
|
|
return runWithCancellationToken(function () {
|
|
var diagnostics = [];
|
|
walk(sourceFile, sourceFile);
|
|
ts.forEachChildRecursively(sourceFile, walk, walkArray);
|
|
return diagnostics;
|
|
function walk(node, parent) {
|
|
switch (parent.kind) {
|
|
case 164:
|
|
case 167:
|
|
case 169:
|
|
if (parent.questionToken === node) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
|
|
return "skip";
|
|
}
|
|
case 168:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 213:
|
|
case 256:
|
|
case 214:
|
|
case 254:
|
|
if (parent.type === node) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
}
|
|
switch (node.kind) {
|
|
case 267:
|
|
if (node.isTypeOnly) {
|
|
diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 272:
|
|
if (node.isTypeOnly) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 270:
|
|
case 275:
|
|
if (node.isTypeOnly) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, ts.isImportSpecifier(node) ? "import...type" : "export...type"));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 265:
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
case 271:
|
|
if (node.isExportEquals) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 291:
|
|
var heritageClause = node;
|
|
if (heritageClause.token === 117) {
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 258:
|
|
var interfaceKeyword = ts.tokenToString(118);
|
|
ts.Debug.assertIsDefined(interfaceKeyword);
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
|
|
return "skip";
|
|
case 261:
|
|
var moduleKeyword = node.flags & 16 ? ts.tokenToString(142) : ts.tokenToString(141);
|
|
ts.Debug.assertIsDefined(moduleKeyword);
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
|
|
return "skip";
|
|
case 259:
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
case 260:
|
|
var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92));
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
|
|
return "skip";
|
|
case 230:
|
|
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
case 229:
|
|
diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
case 211:
|
|
ts.Debug.fail();
|
|
}
|
|
}
|
|
function walkArray(nodes, parent) {
|
|
if (ts.canHaveModifiers(parent) && parent.modifiers === nodes && ts.some(nodes, ts.isDecorator) && !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_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
|
|
}
|
|
switch (parent.kind) {
|
|
case 257:
|
|
case 226:
|
|
case 169:
|
|
case 171:
|
|
case 172:
|
|
case 173:
|
|
case 213:
|
|
case 256:
|
|
case 214:
|
|
if (nodes === parent.typeParameters) {
|
|
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
case 237:
|
|
if (nodes === parent.modifiers) {
|
|
checkModifiers(parent.modifiers, parent.kind === 237);
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 167:
|
|
if (nodes === parent.modifiers) {
|
|
for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
|
|
var modifier = _a[_i];
|
|
if (ts.isModifier(modifier) && modifier.kind !== 124) {
|
|
diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
|
|
}
|
|
}
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 164:
|
|
if (nodes === parent.modifiers && ts.some(nodes, ts.isModifier)) {
|
|
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
break;
|
|
case 208:
|
|
case 209:
|
|
case 228:
|
|
case 279:
|
|
case 280:
|
|
case 210:
|
|
if (nodes === parent.typeArguments) {
|
|
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
|
|
return "skip";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
function checkModifiers(modifiers, isConstValid) {
|
|
for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
|
|
var modifier = modifiers_2[_i];
|
|
switch (modifier.kind) {
|
|
case 85:
|
|
if (isConstValid) {
|
|
continue;
|
|
}
|
|
case 123:
|
|
case 121:
|
|
case 122:
|
|
case 145:
|
|
case 135:
|
|
case 126:
|
|
case 159:
|
|
case 101:
|
|
case 144:
|
|
diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
|
|
break;
|
|
case 124:
|
|
case 93:
|
|
case 88:
|
|
}
|
|
}
|
|
}
|
|
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 = getTypeChecker().getEmitResolver(sourceFile, cancellationToken);
|
|
return ts.getDeclarationDiagnostics(getEmitHost(ts.noop), resolver, sourceFile) || ts.emptyArray;
|
|
});
|
|
}
|
|
function getAndCacheDiagnostics(sourceFile, cancellationToken, cache, getDiagnostics) {
|
|
var _a;
|
|
var cachedResult = sourceFile
|
|
? (_a = cache.perFile) === null || _a === void 0 ? void 0 : _a.get(sourceFile.path)
|
|
: cache.allDiagnostics;
|
|
if (cachedResult) {
|
|
return cachedResult;
|
|
}
|
|
var result = getDiagnostics(sourceFile, cancellationToken);
|
|
if (sourceFile) {
|
|
(cache.perFile || (cache.perFile = new ts.Map())).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(programDiagnostics.getGlobalDiagnostics(), getOptionsDiagnosticsOfConfigFile()));
|
|
}
|
|
function getOptionsDiagnosticsOfConfigFile() {
|
|
if (!options.configFile)
|
|
return ts.emptyArray;
|
|
var diagnostics = programDiagnostics.getDiagnostics(options.configFile.fileName);
|
|
forEachResolvedProjectReference(function (resolvedRef) {
|
|
diagnostics = ts.concatenate(diagnostics, programDiagnostics.getDiagnostics(resolvedRef.sourceFile.fileName));
|
|
});
|
|
return diagnostics;
|
|
}
|
|
function getGlobalDiagnostics() {
|
|
return rootNames.length ? ts.sortAndDeduplicateDiagnostics(getTypeChecker().getGlobalDiagnostics().slice()) : ts.emptyArray;
|
|
}
|
|
function getConfigFileParsingDiagnostics() {
|
|
return configFileParsingDiagnostics || ts.emptyArray;
|
|
}
|
|
function processRootFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason) {
|
|
processSourceFile(ts.normalizePath(fileName), isDefaultLib, ignoreNoDefaultLib, undefined, reason);
|
|
}
|
|
function fileReferenceIsEqualTo(a, b) {
|
|
return a.fileName === b.fileName;
|
|
}
|
|
function moduleNameIsEqualTo(a, b) {
|
|
return a.kind === 79
|
|
? b.kind === 79 && a.escapedText === b.escapedText
|
|
: b.kind === 10 && a.text === b.text;
|
|
}
|
|
function createSyntheticImport(text, file) {
|
|
var externalHelpersModuleReference = ts.factory.createStringLiteral(text);
|
|
var importDecl = ts.factory.createImportDeclaration(undefined, undefined, externalHelpersModuleReference, undefined);
|
|
ts.addEmitFlags(importDecl, 67108864);
|
|
ts.setParent(externalHelpersModuleReference, importDecl);
|
|
ts.setParent(importDecl, file);
|
|
externalHelpersModuleReference.flags &= ~8;
|
|
importDecl.flags &= ~8;
|
|
return externalHelpersModuleReference;
|
|
}
|
|
function collectExternalModuleReferences(file) {
|
|
if (file.imports) {
|
|
return;
|
|
}
|
|
var isJavaScriptFile = ts.isSourceFileJS(file);
|
|
var isExternalModuleFile = ts.isExternalModule(file);
|
|
var imports;
|
|
var moduleAugmentations;
|
|
var ambientModules;
|
|
if ((options.isolatedModules || isExternalModuleFile)
|
|
&& !file.isDeclarationFile) {
|
|
if (options.importHelpers) {
|
|
imports = [createSyntheticImport(ts.externalHelpersModuleNameText, file)];
|
|
}
|
|
var jsxImport = ts.getJSXRuntimeImport(ts.getJSXImplicitImportBase(options, file), options);
|
|
if (jsxImport) {
|
|
(imports || (imports = [])).push(createSyntheticImport(jsxImport, file));
|
|
}
|
|
}
|
|
for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
|
|
var node = _a[_i];
|
|
collectModuleReferences(node, false);
|
|
}
|
|
if ((file.flags & 2097152) || isJavaScriptFile) {
|
|
collectDynamicImportOrRequireCalls(file);
|
|
}
|
|
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))) {
|
|
ts.setParentRecursive(node, false);
|
|
imports = ts.append(imports, moduleNameExpr);
|
|
if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
|
|
usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
|
|
}
|
|
}
|
|
}
|
|
else if (ts.isModuleDeclaration(node)) {
|
|
if (ts.isAmbientModule(node) && (inAmbientModule || ts.hasSyntacticModifier(node, 2) || file.isDeclarationFile)) {
|
|
node.name.parent = node;
|
|
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(file) {
|
|
var r = /import|require/g;
|
|
while (r.exec(file.text) !== null) {
|
|
var node = getNodeAtPosition(file, r.lastIndex);
|
|
if (isJavaScriptFile && ts.isRequireCall(node, true)) {
|
|
ts.setParentRecursive(node, false);
|
|
imports = ts.append(imports, node.arguments[0]);
|
|
}
|
|
else if (ts.isImportCall(node) && node.arguments.length >= 1 && ts.isStringLiteralLike(node.arguments[0])) {
|
|
ts.setParentRecursive(node, false);
|
|
imports = ts.append(imports, node.arguments[0]);
|
|
}
|
|
else if (ts.isLiteralImportTypeNode(node)) {
|
|
ts.setParentRecursive(node, false);
|
|
imports = ts.append(imports, node.argument.literal);
|
|
}
|
|
}
|
|
}
|
|
function getNodeAtPosition(sourceFile, position) {
|
|
var current = sourceFile;
|
|
var getContainingChild = function (child) {
|
|
if (child.pos <= position && (position < child.end || (position === child.end && (child.kind === 1)))) {
|
|
return child;
|
|
}
|
|
};
|
|
while (true) {
|
|
var child = isJavaScriptFile && ts.hasJSDocNodes(current) && ts.forEach(current.jsDoc, getContainingChild) || ts.forEachChild(current, getContainingChild);
|
|
if (!child) {
|
|
return current;
|
|
}
|
|
current = child;
|
|
}
|
|
}
|
|
}
|
|
function getLibFileFromReference(ref) {
|
|
var libName = ts.toFileNameLowerCase(ref.fileName);
|
|
var libFileName = ts.libMap.get(libName);
|
|
if (libFileName) {
|
|
return getSourceFile(pathForLibFile(libFileName));
|
|
}
|
|
}
|
|
function getSourceFileFromReference(referencingFile, ref) {
|
|
return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), getSourceFile);
|
|
}
|
|
function getSourceFileFromReferenceWorker(fileName, getSourceFile, fail, reason) {
|
|
if (ts.hasExtension(fileName)) {
|
|
var canonicalFileName_1 = host.getCanonicalFileName(fileName);
|
|
if (!options.allowNonTsExtensions && !ts.forEach(ts.flatten(supportedExtensionsWithJsonIfResolveJsonModule), function (extension) { return ts.fileExtensionIs(canonicalFileName_1, extension); })) {
|
|
if (fail) {
|
|
if (ts.hasJSFileExtension(canonicalFileName_1)) {
|
|
fail(ts.Diagnostics.File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option, fileName);
|
|
}
|
|
else {
|
|
fail(ts.Diagnostics.File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1, fileName, "'" + ts.flatten(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 (isReferencedFile(reason) && canonicalFileName_1 === host.getCanonicalFileName(getSourceFileByPath(reason.file).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[0], function (extension) { return getSourceFile(fileName + extension); });
|
|
if (fail && !sourceFileWithAddedExtension)
|
|
fail(ts.Diagnostics.Could_not_resolve_the_path_0_with_the_extensions_Colon_1, fileName, "'" + ts.flatten(supportedExtensions).join("', '") + "'");
|
|
return sourceFileWithAddedExtension;
|
|
}
|
|
}
|
|
function processSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, packageId, reason) {
|
|
getSourceFileFromReferenceWorker(fileName, function (fileName) { return findSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId); }, function (diagnostic) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
return addFilePreprocessingFileExplainingDiagnostic(undefined, reason, diagnostic, args);
|
|
}, reason);
|
|
}
|
|
function processProjectReferenceFile(fileName, reason) {
|
|
return processSourceFile(fileName, false, false, undefined, reason);
|
|
}
|
|
function reportFileNamesDifferOnlyInCasingError(fileName, existingFile, reason) {
|
|
var hasExistingReasonToReportErrorOn = !isReferencedFile(reason) && ts.some(fileReasons.get(existingFile.path), isReferencedFile);
|
|
if (hasExistingReasonToReportErrorOn) {
|
|
addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, ts.Diagnostics.Already_included_file_name_0_differs_from_file_name_1_only_in_casing, [existingFile.fileName, fileName]);
|
|
}
|
|
else {
|
|
addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, [fileName, existingFile.fileName]);
|
|
}
|
|
}
|
|
function createRedirectSourceFile(redirectTarget, unredirected, fileName, path, resolvedPath, originalFileName, sourceFileOptions) {
|
|
var _a;
|
|
var redirect = Object.create(redirectTarget);
|
|
redirect.fileName = fileName;
|
|
redirect.path = path;
|
|
redirect.resolvedPath = resolvedPath;
|
|
redirect.originalFileName = originalFileName;
|
|
redirect.redirectInfo = { redirectTarget: redirectTarget, unredirected: unredirected };
|
|
redirect.packageJsonLocations = ((_a = sourceFileOptions.packageJsonLocations) === null || _a === void 0 ? void 0 : _a.length) ? sourceFileOptions.packageJsonLocations : undefined;
|
|
redirect.packageJsonScope = sourceFileOptions.packageJsonScope;
|
|
sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0);
|
|
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, isDefaultLib, ignoreNoDefaultLib, reason, packageId) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "findSourceFile", {
|
|
fileName: fileName,
|
|
isDefaultLib: isDefaultLib || undefined,
|
|
fileIncludeKind: ts.FileIncludeKind[reason.kind],
|
|
});
|
|
var result = findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
return result;
|
|
}
|
|
function getCreateSourceFileOptions(fileName, moduleResolutionCache, host, options) {
|
|
var result = getImpliedNodeFormatForFileWorker(toPath(fileName), moduleResolutionCache === null || moduleResolutionCache === void 0 ? void 0 : moduleResolutionCache.getPackageJsonInfoCache(), host, options);
|
|
var languageVersion = ts.getEmitScriptTarget(options);
|
|
var setExternalModuleIndicator = ts.getSetExternalModuleIndicator(options);
|
|
return typeof result === "object" ? __assign(__assign({}, result), { languageVersion: languageVersion, setExternalModuleIndicator: setExternalModuleIndicator }) :
|
|
{ languageVersion: languageVersion, impliedNodeFormat: result, setExternalModuleIndicator: setExternalModuleIndicator };
|
|
}
|
|
function findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId) {
|
|
var _a, _b;
|
|
var path = toPath(fileName);
|
|
if (useSourceOfProjectReferenceRedirect) {
|
|
var source = getSourceOfProjectReferenceRedirect(path);
|
|
if (!source &&
|
|
host.realpath &&
|
|
options.preserveSymlinks &&
|
|
ts.isDeclarationFileName(fileName) &&
|
|
ts.stringContains(fileName, ts.nodeModulesPathPart)) {
|
|
var realPath = toPath(host.realpath(fileName));
|
|
if (realPath !== path)
|
|
source = getSourceOfProjectReferenceRedirect(realPath);
|
|
}
|
|
if (source) {
|
|
var file_1 = ts.isString(source) ?
|
|
findSourceFile(source, isDefaultLib, ignoreNoDefaultLib, reason, packageId) :
|
|
undefined;
|
|
if (file_1)
|
|
addFileToFilesByName(file_1, path, undefined);
|
|
return file_1;
|
|
}
|
|
}
|
|
var originalFileName = fileName;
|
|
if (filesByName.has(path)) {
|
|
var file_2 = filesByName.get(path);
|
|
addFileIncludeReason(file_2 || undefined, reason);
|
|
if (file_2 && options.forceConsistentCasingInFileNames) {
|
|
var checkedName = file_2.fileName;
|
|
var isRedirect = toPath(checkedName) !== toPath(fileName);
|
|
if (isRedirect) {
|
|
fileName = getProjectReferenceRedirect(fileName) || fileName;
|
|
}
|
|
var checkedAbsolutePath = ts.getNormalizedAbsolutePathWithoutRoot(checkedName, currentDirectory);
|
|
var inputAbsolutePath = ts.getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory);
|
|
if (checkedAbsolutePath !== inputAbsolutePath) {
|
|
reportFileNamesDifferOnlyInCasingError(fileName, file_2, reason);
|
|
}
|
|
}
|
|
if (file_2 && sourceFilesFoundSearchingNodeModules.get(file_2.path) && currentNodeModulesDepth === 0) {
|
|
sourceFilesFoundSearchingNodeModules.set(file_2.path, false);
|
|
if (!options.noResolve) {
|
|
processReferencedFiles(file_2, isDefaultLib);
|
|
processTypeReferenceDirectives(file_2);
|
|
}
|
|
if (!options.noLib) {
|
|
processLibReferenceDirectives(file_2);
|
|
}
|
|
modulesWithElidedImports.set(file_2.path, false);
|
|
processImportedModules(file_2);
|
|
}
|
|
else if (file_2 && modulesWithElidedImports.get(file_2.path)) {
|
|
if (currentNodeModulesDepth < maxNodeModuleJsDepth) {
|
|
modulesWithElidedImports.set(file_2.path, false);
|
|
processImportedModules(file_2);
|
|
}
|
|
}
|
|
return file_2 || undefined;
|
|
}
|
|
var redirectedPath;
|
|
if (isReferencedFile(reason) && !useSourceOfProjectReferenceRedirect) {
|
|
var redirectProject = getProjectReferenceRedirectProject(fileName);
|
|
if (redirectProject) {
|
|
if (ts.outFile(redirectProject.commandLine.options)) {
|
|
return undefined;
|
|
}
|
|
var redirect = getProjectReferenceOutputName(redirectProject, fileName);
|
|
fileName = redirect;
|
|
redirectedPath = toPath(redirect);
|
|
}
|
|
}
|
|
var sourceFileOptions = getCreateSourceFileOptions(fileName, moduleResolutionCache, host, options);
|
|
var file = host.getSourceFile(fileName, sourceFileOptions, function (hostErrorMessage) { return addFilePreprocessingFileExplainingDiagnostic(undefined, reason, ts.Diagnostics.Cannot_read_file_0_Colon_1, [fileName, hostErrorMessage]); }, shouldCreateNewSourceFile || (((_a = oldProgram === null || oldProgram === void 0 ? void 0 : oldProgram.getSourceFileByPath(toPath(fileName))) === null || _a === void 0 ? void 0 : _a.impliedNodeFormat) !== sourceFileOptions.impliedNodeFormat));
|
|
if (packageId) {
|
|
var packageIdKey = ts.packageIdToString(packageId);
|
|
var fileFromPackageId = packageIdToSourceFile.get(packageIdKey);
|
|
if (fileFromPackageId) {
|
|
var dupFile = createRedirectSourceFile(fileFromPackageId, file, fileName, path, toPath(fileName), originalFileName, sourceFileOptions);
|
|
redirectTargetsMap.add(fileFromPackageId.path, fileName);
|
|
addFileToFilesByName(dupFile, path, redirectedPath);
|
|
addFileIncludeReason(dupFile, reason);
|
|
sourceFileToPackageName.set(path, ts.packageIdToPackageName(packageId));
|
|
processingOtherFiles.push(dupFile);
|
|
return dupFile;
|
|
}
|
|
else if (file) {
|
|
packageIdToSourceFile.set(packageIdKey, file);
|
|
sourceFileToPackageName.set(path, ts.packageIdToPackageName(packageId));
|
|
}
|
|
}
|
|
addFileToFilesByName(file, path, redirectedPath);
|
|
if (file) {
|
|
sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0);
|
|
file.fileName = fileName;
|
|
file.path = path;
|
|
file.resolvedPath = toPath(fileName);
|
|
file.originalFileName = originalFileName;
|
|
file.packageJsonLocations = ((_b = sourceFileOptions.packageJsonLocations) === null || _b === void 0 ? void 0 : _b.length) ? sourceFileOptions.packageJsonLocations : undefined;
|
|
file.packageJsonScope = sourceFileOptions.packageJsonScope;
|
|
addFileIncludeReason(file, reason);
|
|
if (host.useCaseSensitiveFileNames()) {
|
|
var pathLowerCase = ts.toFileNameLowerCase(path);
|
|
var existingFile = filesByNameIgnoreCase.get(pathLowerCase);
|
|
if (existingFile) {
|
|
reportFileNamesDifferOnlyInCasingError(fileName, existingFile, reason);
|
|
}
|
|
else {
|
|
filesByNameIgnoreCase.set(pathLowerCase, file);
|
|
}
|
|
}
|
|
skipDefaultLib = skipDefaultLib || (file.hasNoDefaultLib && !ignoreNoDefaultLib);
|
|
if (!options.noResolve) {
|
|
processReferencedFiles(file, isDefaultLib);
|
|
processTypeReferenceDirectives(file);
|
|
}
|
|
if (!options.noLib) {
|
|
processLibReferenceDirectives(file);
|
|
}
|
|
processImportedModules(file);
|
|
if (isDefaultLib) {
|
|
processingDefaultLibFiles.push(file);
|
|
}
|
|
else {
|
|
processingOtherFiles.push(file);
|
|
}
|
|
}
|
|
return file;
|
|
}
|
|
function addFileIncludeReason(file, reason) {
|
|
if (file)
|
|
fileReasons.add(file.path, reason);
|
|
}
|
|
function addFileToFilesByName(file, path, redirectedPath) {
|
|
if (redirectedPath) {
|
|
filesByName.set(redirectedPath, file);
|
|
filesByName.set(path, file || false);
|
|
}
|
|
else {
|
|
filesByName.set(path, file);
|
|
}
|
|
}
|
|
function getProjectReferenceRedirect(fileName) {
|
|
var referencedProject = getProjectReferenceRedirectProject(fileName);
|
|
return referencedProject && getProjectReferenceOutputName(referencedProject, fileName);
|
|
}
|
|
function getProjectReferenceRedirectProject(fileName) {
|
|
if (!resolvedProjectReferences || !resolvedProjectReferences.length || ts.isDeclarationFileName(fileName) || ts.fileExtensionIs(fileName, ".json")) {
|
|
return undefined;
|
|
}
|
|
return getResolvedProjectReferenceToRedirect(fileName);
|
|
}
|
|
function getProjectReferenceOutputName(referencedProject, fileName) {
|
|
var out = ts.outFile(referencedProject.commandLine.options);
|
|
return out ?
|
|
ts.changeExtension(out, ".d.ts") :
|
|
ts.getOutputDeclarationFileName(fileName, referencedProject.commandLine, !host.useCaseSensitiveFileNames());
|
|
}
|
|
function getResolvedProjectReferenceToRedirect(fileName) {
|
|
if (mapFromFileToProjectReferenceRedirects === undefined) {
|
|
mapFromFileToProjectReferenceRedirects = new ts.Map();
|
|
forEachResolvedProjectReference(function (referencedProject) {
|
|
if (toPath(options.configFilePath) !== referencedProject.sourceFile.path) {
|
|
referencedProject.commandLine.fileNames.forEach(function (f) {
|
|
return mapFromFileToProjectReferenceRedirects.set(toPath(f), referencedProject.sourceFile.path);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
var referencedProjectPath = mapFromFileToProjectReferenceRedirects.get(toPath(fileName));
|
|
return referencedProjectPath && getResolvedProjectReferenceByPath(referencedProjectPath);
|
|
}
|
|
function forEachResolvedProjectReference(cb) {
|
|
return ts.forEachResolvedProjectReference(resolvedProjectReferences, cb);
|
|
}
|
|
function getSourceOfProjectReferenceRedirect(path) {
|
|
if (!ts.isDeclarationFileName(path))
|
|
return undefined;
|
|
if (mapFromToProjectReferenceRedirectSource === undefined) {
|
|
mapFromToProjectReferenceRedirectSource = new ts.Map();
|
|
forEachResolvedProjectReference(function (resolvedRef) {
|
|
var out = ts.outFile(resolvedRef.commandLine.options);
|
|
if (out) {
|
|
var outputDts = ts.changeExtension(out, ".d.ts");
|
|
mapFromToProjectReferenceRedirectSource.set(toPath(outputDts), true);
|
|
}
|
|
else {
|
|
var getCommonSourceDirectory_3 = ts.memoize(function () { return ts.getCommonSourceDirectoryOfConfig(resolvedRef.commandLine, !host.useCaseSensitiveFileNames()); });
|
|
ts.forEach(resolvedRef.commandLine.fileNames, function (fileName) {
|
|
if (!ts.isDeclarationFileName(fileName) && !ts.fileExtensionIs(fileName, ".json")) {
|
|
var outputDts = ts.getOutputDeclarationFileName(fileName, resolvedRef.commandLine, !host.useCaseSensitiveFileNames(), getCommonSourceDirectory_3);
|
|
mapFromToProjectReferenceRedirectSource.set(toPath(outputDts), fileName);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
return mapFromToProjectReferenceRedirectSource.get(path);
|
|
}
|
|
function isSourceOfProjectReferenceRedirect(fileName) {
|
|
return useSourceOfProjectReferenceRedirect && !!getResolvedProjectReferenceToRedirect(fileName);
|
|
}
|
|
function getResolvedProjectReferenceByPath(projectReferencePath) {
|
|
if (!projectReferenceRedirects) {
|
|
return undefined;
|
|
}
|
|
return projectReferenceRedirects.get(projectReferencePath) || undefined;
|
|
}
|
|
function processReferencedFiles(file, isDefaultLib) {
|
|
ts.forEach(file.referencedFiles, function (ref, index) {
|
|
processSourceFile(resolveTripleslashReference(ref.fileName, file.fileName), isDefaultLib, false, undefined, { kind: ts.FileIncludeKind.ReferenceFile, file: file.path, index: index, });
|
|
});
|
|
}
|
|
function processTypeReferenceDirectives(file) {
|
|
var typeDirectives = file.typeReferenceDirectives;
|
|
if (!typeDirectives) {
|
|
return;
|
|
}
|
|
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeDirectives, file);
|
|
for (var index = 0; index < typeDirectives.length; index++) {
|
|
var ref = file.typeReferenceDirectives[index];
|
|
var resolvedTypeReferenceDirective = resolutions[index];
|
|
var fileName = ts.toFileNameLowerCase(ref.fileName);
|
|
ts.setResolvedTypeReferenceDirective(file, fileName, resolvedTypeReferenceDirective);
|
|
var mode = ref.resolutionMode || file.impliedNodeFormat;
|
|
if (mode && ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.Node16 && ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeNext) {
|
|
programDiagnostics.add(ts.createDiagnosticForRange(file, ref, ts.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext));
|
|
}
|
|
processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: ts.FileIncludeKind.TypeReferenceDirective, file: file.path, index: index, });
|
|
}
|
|
}
|
|
function processTypeReferenceDirective(typeReferenceDirective, mode, resolvedTypeReferenceDirective, reason) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("program", "processTypeReferenceDirective", { directive: typeReferenceDirective, hasResolved: !!resolvedTypeReferenceDirective, refKind: reason.kind, refPath: isReferencedFile(reason) ? reason.file : undefined });
|
|
processTypeReferenceDirectiveWorker(typeReferenceDirective, mode, resolvedTypeReferenceDirective, reason);
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
|
|
}
|
|
function processTypeReferenceDirectiveWorker(typeReferenceDirective, mode, resolvedTypeReferenceDirective, reason) {
|
|
var previousResolution = resolvedTypeReferenceDirectives.get(typeReferenceDirective, mode);
|
|
if (previousResolution && previousResolution.primary) {
|
|
return;
|
|
}
|
|
var saveResolution = true;
|
|
if (resolvedTypeReferenceDirective) {
|
|
if (resolvedTypeReferenceDirective.isExternalLibraryImport)
|
|
currentNodeModulesDepth++;
|
|
if (resolvedTypeReferenceDirective.primary) {
|
|
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, false, resolvedTypeReferenceDirective.packageId, reason);
|
|
}
|
|
else {
|
|
if (previousResolution) {
|
|
if (resolvedTypeReferenceDirective.resolvedFileName !== previousResolution.resolvedFileName) {
|
|
var otherFileText = host.readFile(resolvedTypeReferenceDirective.resolvedFileName);
|
|
var existingFile = getSourceFile(previousResolution.resolvedFileName);
|
|
if (otherFileText !== existingFile.text) {
|
|
addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, 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, reason);
|
|
}
|
|
}
|
|
if (resolvedTypeReferenceDirective.isExternalLibraryImport)
|
|
currentNodeModulesDepth--;
|
|
}
|
|
else {
|
|
addFilePreprocessingFileExplainingDiagnostic(undefined, reason, ts.Diagnostics.Cannot_find_type_definition_file_for_0, [typeReferenceDirective]);
|
|
}
|
|
if (saveResolution) {
|
|
resolvedTypeReferenceDirectives.set(typeReferenceDirective, mode, resolvedTypeReferenceDirective);
|
|
}
|
|
}
|
|
function pathForLibFile(libFileName) {
|
|
var components = libFileName.split(".");
|
|
var path = components[1];
|
|
var i = 2;
|
|
while (components[i] && components[i] !== "d") {
|
|
path += (i === 2 ? "/" : "-") + components[i];
|
|
i++;
|
|
}
|
|
var resolveFrom = ts.combinePaths(currentDirectory, "__lib_node_modules_lookup_".concat(libFileName, "__.ts"));
|
|
var localOverrideModuleResult = ts.resolveModuleName("@typescript/lib-" + path, resolveFrom, { moduleResolution: ts.ModuleResolutionKind.NodeJs }, host, moduleResolutionCache);
|
|
if (localOverrideModuleResult === null || localOverrideModuleResult === void 0 ? void 0 : localOverrideModuleResult.resolvedModule) {
|
|
return localOverrideModuleResult.resolvedModule.resolvedFileName;
|
|
}
|
|
return ts.combinePaths(defaultLibraryPath, libFileName);
|
|
}
|
|
function processLibReferenceDirectives(file) {
|
|
ts.forEach(file.libReferenceDirectives, function (libReference, index) {
|
|
var libName = ts.toFileNameLowerCase(libReference.fileName);
|
|
var libFileName = ts.libMap.get(libName);
|
|
if (libFileName) {
|
|
processRootFile(pathForLibFile(libFileName), true, true, { kind: ts.FileIncludeKind.LibReferenceDirective, file: file.path, index: index, });
|
|
}
|
|
else {
|
|
var unqualifiedLibName = ts.removeSuffix(ts.removePrefix(libName, "lib."), ".d.ts");
|
|
var suggestion = ts.getSpellingSuggestion(unqualifiedLibName, ts.libs, ts.identity);
|
|
var diagnostic = suggestion ? ts.Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_lib_definition_for_0;
|
|
(fileProcessingDiagnostics || (fileProcessingDiagnostics = [])).push({
|
|
kind: 0,
|
|
reason: { kind: ts.FileIncludeKind.LibReferenceDirective, file: file.path, index: index, },
|
|
diagnostic: diagnostic,
|
|
args: [libName, suggestion]
|
|
});
|
|
}
|
|
});
|
|
}
|
|
function getCanonicalFileName(fileName) {
|
|
return host.getCanonicalFileName(fileName);
|
|
}
|
|
function processImportedModules(file) {
|
|
var _a;
|
|
collectExternalModuleReferences(file);
|
|
if (file.imports.length || file.moduleAugmentations.length) {
|
|
var moduleNames = getModuleNames(file);
|
|
var resolutions = resolveModuleNamesReusingOldState(moduleNames, file);
|
|
ts.Debug.assert(resolutions.length === moduleNames.length);
|
|
var optionsForFile = (useSourceOfProjectReferenceRedirect ? (_a = getRedirectReferenceForResolution(file)) === null || _a === void 0 ? void 0 : _a.commandLine.options : undefined) || options;
|
|
for (var index = 0; index < moduleNames.length; index++) {
|
|
var resolution = resolutions[index];
|
|
ts.setResolvedModule(file, moduleNames[index], resolution, getModeForResolutionAtIndex(file, index));
|
|
if (!resolution) {
|
|
continue;
|
|
}
|
|
var isFromNodeModulesSearch = resolution.isExternalLibraryImport;
|
|
var isJsFile = !ts.resolutionExtensionIsTSOrJson(resolution.extension);
|
|
var isJsFileFromNodeModules = isFromNodeModulesSearch && isJsFile;
|
|
var resolvedFileName = resolution.resolvedFileName;
|
|
if (isFromNodeModulesSearch) {
|
|
currentNodeModulesDepth++;
|
|
}
|
|
var elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModuleJsDepth;
|
|
var shouldAddFile = resolvedFileName
|
|
&& !getResolutionDiagnostic(optionsForFile, resolution)
|
|
&& !optionsForFile.noResolve
|
|
&& index < file.imports.length
|
|
&& !elideImport
|
|
&& !(isJsFile && !ts.getAllowJSCompilerOption(optionsForFile))
|
|
&& (ts.isInJSFile(file.imports[index]) || !(file.imports[index].flags & 8388608));
|
|
if (elideImport) {
|
|
modulesWithElidedImports.set(file.path, true);
|
|
}
|
|
else if (shouldAddFile) {
|
|
findSourceFile(resolvedFileName, false, false, { kind: ts.FileIncludeKind.Import, file: file.path, index: index, }, resolution.packageId);
|
|
}
|
|
if (isFromNodeModulesSearch) {
|
|
currentNodeModulesDepth--;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
file.resolvedModules = undefined;
|
|
}
|
|
}
|
|
function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) {
|
|
var allFilesBelongToPath = true;
|
|
var absoluteRootDirectoryPath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(rootDirectory, currentDirectory));
|
|
for (var _i = 0, sourceFiles_2 = sourceFiles; _i < sourceFiles_2.length; _i++) {
|
|
var sourceFile = sourceFiles_2[_i];
|
|
if (!sourceFile.isDeclarationFile) {
|
|
var absoluteSourceFilePath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory));
|
|
if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) {
|
|
addProgramDiagnosticExplainingFile(sourceFile, ts.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, [sourceFile.fileName, rootDirectory]);
|
|
allFilesBelongToPath = false;
|
|
}
|
|
}
|
|
}
|
|
return allFilesBelongToPath;
|
|
}
|
|
function parseProjectReferenceConfigFile(ref) {
|
|
if (!projectReferenceRedirects) {
|
|
projectReferenceRedirects = new ts.Map();
|
|
}
|
|
var refPath = resolveProjectReferencePath(ref);
|
|
var sourceFilePath = toPath(refPath);
|
|
var fromCache = projectReferenceRedirects.get(sourceFilePath);
|
|
if (fromCache !== undefined) {
|
|
return fromCache || undefined;
|
|
}
|
|
var commandLine;
|
|
var sourceFile;
|
|
if (host.getParsedCommandLine) {
|
|
commandLine = host.getParsedCommandLine(refPath);
|
|
if (!commandLine) {
|
|
addFileToFilesByName(undefined, sourceFilePath, undefined);
|
|
projectReferenceRedirects.set(sourceFilePath, false);
|
|
return undefined;
|
|
}
|
|
sourceFile = ts.Debug.checkDefined(commandLine.options.configFile);
|
|
ts.Debug.assert(!sourceFile.path || sourceFile.path === sourceFilePath);
|
|
addFileToFilesByName(sourceFile, sourceFilePath, undefined);
|
|
}
|
|
else {
|
|
var basePath = ts.getNormalizedAbsolutePath(ts.getDirectoryPath(refPath), host.getCurrentDirectory());
|
|
sourceFile = host.getSourceFile(refPath, 100);
|
|
addFileToFilesByName(sourceFile, sourceFilePath, undefined);
|
|
if (sourceFile === undefined) {
|
|
projectReferenceRedirects.set(sourceFilePath, false);
|
|
return undefined;
|
|
}
|
|
commandLine = ts.parseJsonSourceFileConfigFileContent(sourceFile, configParsingHost, basePath, undefined, refPath);
|
|
}
|
|
sourceFile.fileName = refPath;
|
|
sourceFile.path = sourceFilePath;
|
|
sourceFile.resolvedPath = sourceFilePath;
|
|
sourceFile.originalFileName = refPath;
|
|
var resolvedRef = { commandLine: commandLine, sourceFile: sourceFile };
|
|
projectReferenceRedirects.set(sourceFilePath, resolvedRef);
|
|
if (commandLine.projectReferences) {
|
|
resolvedRef.references = commandLine.projectReferences.map(parseProjectReferenceConfigFile);
|
|
}
|
|
return resolvedRef;
|
|
}
|
|
function verifyCompilerOptions() {
|
|
if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
|
|
}
|
|
if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
|
|
}
|
|
if (options.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.composite) {
|
|
if (options.declaration === false) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Composite_projects_may_not_disable_declaration_emit, "declaration");
|
|
}
|
|
if (options.incremental === false) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Composite_projects_may_not_disable_incremental_compilation, "declaration");
|
|
}
|
|
}
|
|
var outputFile = ts.outFile(options);
|
|
if (options.tsBuildInfoFile) {
|
|
if (!ts.isIncrementalCompilation(options)) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "tsBuildInfoFile", "incremental", "composite");
|
|
}
|
|
}
|
|
else if (options.incremental && !outputFile && !options.configFilePath) {
|
|
programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified));
|
|
}
|
|
verifyProjectReferences();
|
|
if (options.composite) {
|
|
var rootPaths = new ts.Set(rootNames.map(toPath));
|
|
for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
|
|
var file = files_4[_i];
|
|
if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
|
|
addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
|
|
}
|
|
}
|
|
}
|
|
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_can_have_at_most_one_Asterisk_character, subst, key);
|
|
}
|
|
if (!options.baseUrl && !ts.pathIsRelative(subst) && !ts.pathIsAbsolute(subst)) {
|
|
createDiagnosticForOptionPathKeyValue(key, i, ts.Diagnostics.Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash);
|
|
}
|
|
}
|
|
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 (!ts.getEmitDeclarations(options)) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "declarationDir", "declaration", "composite");
|
|
}
|
|
if (outputFile) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declarationDir", options.out ? "out" : "outFile");
|
|
}
|
|
}
|
|
if (options.declarationMap && !ts.getEmitDeclarations(options)) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "declarationMap", "declaration", "composite");
|
|
}
|
|
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 = ts.getEmitScriptTarget(options);
|
|
var firstNonAmbientExternalModuleSourceFile = ts.find(files, function (f) { return ts.isExternalModule(f) && !f.isDeclarationFile; });
|
|
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");
|
|
}
|
|
if (options.preserveConstEnums === false) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled, "preserveConstEnums", "isolatedModules");
|
|
}
|
|
var firstNonExternalModuleSourceFile = ts.find(files, function (f) { return !ts.isExternalModule(f) && !ts.isSourceFileJS(f) && !f.isDeclarationFile && f.scriptKind !== 6; });
|
|
if (firstNonExternalModuleSourceFile) {
|
|
var span = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
|
|
programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics._0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module, ts.getBaseFileName(firstNonExternalModuleSourceFile.fileName)));
|
|
}
|
|
}
|
|
else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 && options.module === ts.ModuleKind.None) {
|
|
var span = ts.getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? 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 (outputFile && !options.emitDeclarationOnly) {
|
|
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, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? 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 &&
|
|
ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.Node16 &&
|
|
ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.NodeNext) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy, "resolveJsonModule");
|
|
}
|
|
else if (!ts.hasJsonModuleEmitEnabled(options)) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext, "resolveJsonModule", "module");
|
|
}
|
|
}
|
|
if (options.outDir ||
|
|
options.rootDir ||
|
|
options.sourceRoot ||
|
|
options.mapRoot) {
|
|
var dir = getCommonSourceDirectory();
|
|
if (options.outDir && dir === "" && files.some(function (file) { return ts.getRootLength(file.fileName) > 1; })) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files, "outDir");
|
|
}
|
|
}
|
|
if (options.useDefineForClassFields && languageVersion === 0) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_when_option_target_is_ES3, "useDefineForClassFields");
|
|
}
|
|
if (options.checkJs && !ts.getAllowJSCompilerOption(options)) {
|
|
programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "checkJs", "allowJs"));
|
|
}
|
|
if (options.emitDeclarationOnly) {
|
|
if (!ts.getEmitDeclarations(options)) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "emitDeclarationOnly", "declaration", "composite");
|
|
}
|
|
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 (options.jsx === 4 || options.jsx === 5) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxFactory", ts.inverseJsxOptionMap.get("" + options.jsx));
|
|
}
|
|
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.jsxFragmentFactory) {
|
|
if (!options.jsxFactory) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "jsxFragmentFactory", "jsxFactory");
|
|
}
|
|
if (options.jsx === 4 || options.jsx === 5) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxFragmentFactory", ts.inverseJsxOptionMap.get("" + options.jsx));
|
|
}
|
|
if (!ts.parseIsolatedEntityName(options.jsxFragmentFactory, languageVersion)) {
|
|
createOptionValueDiagnostic("jsxFragmentFactory", ts.Diagnostics.Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name, options.jsxFragmentFactory);
|
|
}
|
|
}
|
|
if (options.reactNamespace) {
|
|
if (options.jsx === 4 || options.jsx === 5) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "reactNamespace", ts.inverseJsxOptionMap.get("" + options.jsx));
|
|
}
|
|
}
|
|
if (options.jsxImportSource) {
|
|
if (options.jsx === 2) {
|
|
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxImportSource", ts.inverseJsxOptionMap.get("" + options.jsx));
|
|
}
|
|
}
|
|
if (options.preserveValueImports && ts.getEmitModuleKind(options) < ts.ModuleKind.ES2015) {
|
|
createOptionValueDiagnostic("importsNotUsedAsValues", ts.Diagnostics.Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later);
|
|
}
|
|
if (!options.noEmit && !options.suppressOutputPathCheck) {
|
|
var emitHost = getEmitHost();
|
|
var emitFilesSeen_1 = new ts.Set();
|
|
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 = void 0;
|
|
if (!options.configFilePath) {
|
|
chain = 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 = ts.chainDiagnosticMessages(chain, ts.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file, emitFileName);
|
|
blockEmittingOfFile(emitFileName, ts.createCompilerDiagnosticFromMessageChain(chain));
|
|
}
|
|
var emitFileKey = !host.useCaseSensitiveFileNames() ? ts.toFileNameLowerCase(emitFilePath) : 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.add(emitFileKey);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function createDiagnosticExplainingFile(file, fileProcessingReason, diagnostic, args) {
|
|
var _a;
|
|
var fileIncludeReasons;
|
|
var relatedInfo;
|
|
var locationReason = isReferencedFile(fileProcessingReason) ? fileProcessingReason : undefined;
|
|
if (file)
|
|
(_a = fileReasons.get(file.path)) === null || _a === void 0 ? void 0 : _a.forEach(processReason);
|
|
if (fileProcessingReason)
|
|
processReason(fileProcessingReason);
|
|
if (locationReason && (fileIncludeReasons === null || fileIncludeReasons === void 0 ? void 0 : fileIncludeReasons.length) === 1)
|
|
fileIncludeReasons = undefined;
|
|
var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
|
|
var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
|
|
var redirectInfo = file && ts.explainIfFileIsRedirectAndImpliedFormat(file);
|
|
var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
|
|
return location && isReferenceFileLocation(location) ?
|
|
ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
|
|
ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
|
|
function processReason(reason) {
|
|
(fileIncludeReasons || (fileIncludeReasons = [])).push(ts.fileIncludeReasonToDiagnostics(program, reason));
|
|
if (!locationReason && isReferencedFile(reason)) {
|
|
locationReason = reason;
|
|
}
|
|
else if (locationReason !== reason) {
|
|
relatedInfo = ts.append(relatedInfo, fileIncludeReasonToRelatedInformation(reason));
|
|
}
|
|
if (reason === fileProcessingReason)
|
|
fileProcessingReason = undefined;
|
|
}
|
|
}
|
|
function addFilePreprocessingFileExplainingDiagnostic(file, fileProcessingReason, diagnostic, args) {
|
|
(fileProcessingDiagnostics || (fileProcessingDiagnostics = [])).push({
|
|
kind: 1,
|
|
file: file && file.path,
|
|
fileProcessingReason: fileProcessingReason,
|
|
diagnostic: diagnostic,
|
|
args: args
|
|
});
|
|
}
|
|
function addProgramDiagnosticExplainingFile(file, diagnostic, args) {
|
|
programDiagnostics.add(createDiagnosticExplainingFile(file, undefined, diagnostic, args));
|
|
}
|
|
function fileIncludeReasonToRelatedInformation(reason) {
|
|
if (isReferencedFile(reason)) {
|
|
var referenceLocation = getReferencedFileLocation(getSourceFileByPath, reason);
|
|
var message_2;
|
|
switch (reason.kind) {
|
|
case ts.FileIncludeKind.Import:
|
|
message_2 = ts.Diagnostics.File_is_included_via_import_here;
|
|
break;
|
|
case ts.FileIncludeKind.ReferenceFile:
|
|
message_2 = ts.Diagnostics.File_is_included_via_reference_here;
|
|
break;
|
|
case ts.FileIncludeKind.TypeReferenceDirective:
|
|
message_2 = ts.Diagnostics.File_is_included_via_type_library_reference_here;
|
|
break;
|
|
case ts.FileIncludeKind.LibReferenceDirective:
|
|
message_2 = ts.Diagnostics.File_is_included_via_library_reference_here;
|
|
break;
|
|
default:
|
|
ts.Debug.assertNever(reason);
|
|
}
|
|
return isReferenceFileLocation(referenceLocation) ? ts.createFileDiagnostic(referenceLocation.file, referenceLocation.pos, referenceLocation.end - referenceLocation.pos, message_2) : undefined;
|
|
}
|
|
if (!options.configFile)
|
|
return undefined;
|
|
var configFileNode;
|
|
var message;
|
|
switch (reason.kind) {
|
|
case ts.FileIncludeKind.RootFile:
|
|
if (!options.configFile.configFileSpecs)
|
|
return undefined;
|
|
var fileName = ts.getNormalizedAbsolutePath(rootNames[reason.index], currentDirectory);
|
|
var matchedByFiles = ts.getMatchedFileSpec(program, fileName);
|
|
if (matchedByFiles) {
|
|
configFileNode = ts.getTsConfigPropArrayElementValue(options.configFile, "files", matchedByFiles);
|
|
message = ts.Diagnostics.File_is_matched_by_files_list_specified_here;
|
|
break;
|
|
}
|
|
var matchedByInclude = ts.getMatchedIncludeSpec(program, fileName);
|
|
if (!matchedByInclude || !ts.isString(matchedByInclude))
|
|
return undefined;
|
|
configFileNode = ts.getTsConfigPropArrayElementValue(options.configFile, "include", matchedByInclude);
|
|
message = ts.Diagnostics.File_is_matched_by_include_pattern_specified_here;
|
|
break;
|
|
case ts.FileIncludeKind.SourceFromProjectReference:
|
|
case ts.FileIncludeKind.OutputFromProjectReference:
|
|
var referencedResolvedRef_1 = ts.Debug.checkDefined(resolvedProjectReferences === null || resolvedProjectReferences === void 0 ? void 0 : resolvedProjectReferences[reason.index]);
|
|
var referenceInfo = forEachProjectReference(projectReferences, resolvedProjectReferences, function (resolvedRef, parent, index) {
|
|
return resolvedRef === referencedResolvedRef_1 ? { sourceFile: (parent === null || parent === void 0 ? void 0 : parent.sourceFile) || options.configFile, index: index } : undefined;
|
|
});
|
|
if (!referenceInfo)
|
|
return undefined;
|
|
var sourceFile = referenceInfo.sourceFile, index = referenceInfo.index;
|
|
var referencesSyntax = ts.firstDefined(ts.getTsConfigPropArray(sourceFile, "references"), function (property) { return ts.isArrayLiteralExpression(property.initializer) ? property.initializer : undefined; });
|
|
return referencesSyntax && referencesSyntax.elements.length > index ?
|
|
ts.createDiagnosticForNodeInSourceFile(sourceFile, referencesSyntax.elements[index], reason.kind === ts.FileIncludeKind.OutputFromProjectReference ?
|
|
ts.Diagnostics.File_is_output_from_referenced_project_specified_here :
|
|
ts.Diagnostics.File_is_source_from_referenced_project_specified_here) :
|
|
undefined;
|
|
case ts.FileIncludeKind.AutomaticTypeDirectiveFile:
|
|
if (!options.types)
|
|
return undefined;
|
|
configFileNode = getOptionsSyntaxByArrayElementValue("types", reason.typeReference);
|
|
message = ts.Diagnostics.File_is_entry_point_of_type_library_specified_here;
|
|
break;
|
|
case ts.FileIncludeKind.LibFile:
|
|
if (reason.index !== undefined) {
|
|
configFileNode = getOptionsSyntaxByArrayElementValue("lib", options.lib[reason.index]);
|
|
message = ts.Diagnostics.File_is_library_specified_here;
|
|
break;
|
|
}
|
|
var target = ts.forEachEntry(ts.targetOptionDeclaration.type, function (value, key) { return value === ts.getEmitScriptTarget(options) ? key : undefined; });
|
|
configFileNode = target ? getOptionsSyntaxByValue("target", target) : undefined;
|
|
message = ts.Diagnostics.File_is_default_library_for_target_specified_here;
|
|
break;
|
|
default:
|
|
ts.Debug.assertNever(reason);
|
|
}
|
|
return configFileNode && ts.createDiagnosticForNodeInSourceFile(options.configFile, configFileNode, message);
|
|
}
|
|
function verifyProjectReferences() {
|
|
var buildInfoPath = !options.suppressOutputPathCheck ? ts.getTsBuildInfoEmitOutputFilePath(options) : undefined;
|
|
forEachProjectReference(projectReferences, resolvedProjectReferences, function (resolvedRef, parent, index) {
|
|
var ref = (parent ? parent.commandLine.projectReferences : projectReferences)[index];
|
|
var parentFile = parent && parent.sourceFile;
|
|
if (!resolvedRef) {
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.File_0_not_found, ref.path);
|
|
return;
|
|
}
|
|
var options = resolvedRef.commandLine.options;
|
|
if (!options.composite || options.noEmit) {
|
|
var inputs = parent ? parent.commandLine.fileNames : rootNames;
|
|
if (inputs.length) {
|
|
if (!options.composite)
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.Referenced_project_0_must_have_setting_composite_Colon_true, ref.path);
|
|
if (options.noEmit)
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.Referenced_project_0_may_not_disable_emit, ref.path);
|
|
}
|
|
}
|
|
if (ref.prepend) {
|
|
var out = ts.outFile(options);
|
|
if (out) {
|
|
if (!host.fileExists(out)) {
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.Output_file_0_from_project_1_does_not_exist, out, ref.path);
|
|
}
|
|
}
|
|
else {
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.Cannot_prepend_project_0_because_it_does_not_have_outFile_set, ref.path);
|
|
}
|
|
}
|
|
if (!parent && buildInfoPath && buildInfoPath === ts.getTsBuildInfoEmitOutputFilePath(options)) {
|
|
createDiagnosticForReference(parentFile, index, ts.Diagnostics.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1, buildInfoPath, ref.path);
|
|
hasEmitBlockingDiagnostics.set(toPath(buildInfoPath), 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();
|
|
return compilerOptionsObjectLiteralSyntax && ts.getPropertyAssignment(compilerOptionsObjectLiteralSyntax, name);
|
|
}
|
|
function getOptionPathsSyntax() {
|
|
return getOptionsSyntaxByName("paths") || ts.emptyArray;
|
|
}
|
|
function getOptionsSyntaxByValue(name, value) {
|
|
var syntaxByName = getOptionsSyntaxByName(name);
|
|
return syntaxByName && ts.firstDefined(syntaxByName, function (property) { return ts.isStringLiteral(property.initializer) && property.initializer.text === value ? property.initializer : undefined; });
|
|
}
|
|
function getOptionsSyntaxByArrayElementValue(name, value) {
|
|
var compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax();
|
|
return compilerOptionsObjectLiteralSyntax && ts.getPropertyArrayElementValue(compilerOptionsObjectLiteralSyntax, name, value);
|
|
}
|
|
function createDiagnosticForOptionName(message, option1, option2, option3) {
|
|
createDiagnosticForOption(true, option1, option2, message, option1, option2, option3);
|
|
}
|
|
function createOptionValueDiagnostic(option1, message, arg0, arg1) {
|
|
createDiagnosticForOption(false, option1, undefined, message, arg0, arg1);
|
|
}
|
|
function createDiagnosticForReference(sourceFile, index, message, arg0, arg1) {
|
|
var referencesSyntax = ts.firstDefined(ts.getTsConfigPropArray(sourceFile || options.configFile, "references"), function (property) { return ts.isArrayLiteralExpression(property.initializer) ? property.initializer : undefined; });
|
|
if (referencesSyntax && referencesSyntax.elements.length > index) {
|
|
programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(sourceFile || options.configFile, referencesSyntax.elements[index], message, arg0, arg1));
|
|
}
|
|
else {
|
|
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 getCompilerOptionsObjectLiteralSyntax() {
|
|
if (_compilerOptionsObjectLiteralSyntax === undefined) {
|
|
_compilerOptionsObjectLiteralSyntax = false;
|
|
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 || undefined;
|
|
}
|
|
function createOptionDiagnosticInObjectLiteralSyntax(objectLiteral, onKey, key1, key2, message, arg0, arg1, arg2) {
|
|
var props = ts.getPropertyAssignment(objectLiteral, key1, key2);
|
|
for (var _i = 0, props_3 = props; _i < props_3.length; _i++) {
|
|
var prop = props_3[_i];
|
|
programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, arg0, arg1, arg2));
|
|
}
|
|
return !!props.length;
|
|
}
|
|
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 = ts.outFile(options);
|
|
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.supportedJSExtensionsFlat) || ts.isDeclarationFileName(filePath)) {
|
|
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;
|
|
}
|
|
function getSymlinkCache() {
|
|
if (host.getSymlinkCache) {
|
|
return host.getSymlinkCache();
|
|
}
|
|
if (!symlinks) {
|
|
symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
|
|
}
|
|
if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
|
|
symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
|
|
}
|
|
return symlinks;
|
|
}
|
|
}
|
|
ts.createProgram = createProgram;
|
|
function updateHostForUseSourceOfProjectReferenceRedirect(host) {
|
|
var setOfDeclarationDirectories;
|
|
var originalFileExists = host.compilerHost.fileExists;
|
|
var originalDirectoryExists = host.compilerHost.directoryExists;
|
|
var originalGetDirectories = host.compilerHost.getDirectories;
|
|
var originalRealpath = host.compilerHost.realpath;
|
|
if (!host.useSourceOfProjectReferenceRedirect)
|
|
return { onProgramCreateComplete: ts.noop, fileExists: fileExists };
|
|
host.compilerHost.fileExists = fileExists;
|
|
var directoryExists;
|
|
if (originalDirectoryExists) {
|
|
directoryExists = host.compilerHost.directoryExists = function (path) {
|
|
if (originalDirectoryExists.call(host.compilerHost, path)) {
|
|
handleDirectoryCouldBeSymlink(path);
|
|
return true;
|
|
}
|
|
if (!host.getResolvedProjectReferences())
|
|
return false;
|
|
if (!setOfDeclarationDirectories) {
|
|
setOfDeclarationDirectories = new ts.Set();
|
|
host.forEachResolvedProjectReference(function (ref) {
|
|
var out = ts.outFile(ref.commandLine.options);
|
|
if (out) {
|
|
setOfDeclarationDirectories.add(ts.getDirectoryPath(host.toPath(out)));
|
|
}
|
|
else {
|
|
var declarationDir = ref.commandLine.options.declarationDir || ref.commandLine.options.outDir;
|
|
if (declarationDir) {
|
|
setOfDeclarationDirectories.add(host.toPath(declarationDir));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return fileOrDirectoryExistsUsingSource(path, false);
|
|
};
|
|
}
|
|
if (originalGetDirectories) {
|
|
host.compilerHost.getDirectories = function (path) {
|
|
return !host.getResolvedProjectReferences() || (originalDirectoryExists && originalDirectoryExists.call(host.compilerHost, path)) ?
|
|
originalGetDirectories.call(host.compilerHost, path) :
|
|
[];
|
|
};
|
|
}
|
|
if (originalRealpath) {
|
|
host.compilerHost.realpath = function (s) {
|
|
var _a;
|
|
return ((_a = host.getSymlinkCache().getSymlinkedFiles()) === null || _a === void 0 ? void 0 : _a.get(host.toPath(s))) ||
|
|
originalRealpath.call(host.compilerHost, s);
|
|
};
|
|
}
|
|
return { onProgramCreateComplete: onProgramCreateComplete, fileExists: fileExists, directoryExists: directoryExists };
|
|
function onProgramCreateComplete() {
|
|
host.compilerHost.fileExists = originalFileExists;
|
|
host.compilerHost.directoryExists = originalDirectoryExists;
|
|
host.compilerHost.getDirectories = originalGetDirectories;
|
|
}
|
|
function fileExists(file) {
|
|
if (originalFileExists.call(host.compilerHost, file))
|
|
return true;
|
|
if (!host.getResolvedProjectReferences())
|
|
return false;
|
|
if (!ts.isDeclarationFileName(file))
|
|
return false;
|
|
return fileOrDirectoryExistsUsingSource(file, true);
|
|
}
|
|
function fileExistsIfProjectReferenceDts(file) {
|
|
var source = host.getSourceOfProjectReferenceRedirect(host.toPath(file));
|
|
return source !== undefined ?
|
|
ts.isString(source) ? originalFileExists.call(host.compilerHost, source) : true :
|
|
undefined;
|
|
}
|
|
function directoryExistsIfProjectReferenceDeclDir(dir) {
|
|
var dirPath = host.toPath(dir);
|
|
var dirPathWithTrailingDirectorySeparator = "".concat(dirPath).concat(ts.directorySeparator);
|
|
return ts.forEachKey(setOfDeclarationDirectories, function (declDirPath) { return dirPath === declDirPath ||
|
|
ts.startsWith(declDirPath, dirPathWithTrailingDirectorySeparator) ||
|
|
ts.startsWith(dirPath, "".concat(declDirPath, "/")); });
|
|
}
|
|
function handleDirectoryCouldBeSymlink(directory) {
|
|
var _a;
|
|
if (!host.getResolvedProjectReferences() || ts.containsIgnoredPath(directory))
|
|
return;
|
|
if (!originalRealpath || !ts.stringContains(directory, ts.nodeModulesPathPart))
|
|
return;
|
|
var symlinkCache = host.getSymlinkCache();
|
|
var directoryPath = ts.ensureTrailingDirectorySeparator(host.toPath(directory));
|
|
if ((_a = symlinkCache.getSymlinkedDirectories()) === null || _a === void 0 ? void 0 : _a.has(directoryPath))
|
|
return;
|
|
var real = ts.normalizePath(originalRealpath.call(host.compilerHost, directory));
|
|
var realPath;
|
|
if (real === directory ||
|
|
(realPath = ts.ensureTrailingDirectorySeparator(host.toPath(real))) === directoryPath) {
|
|
symlinkCache.setSymlinkedDirectory(directoryPath, false);
|
|
return;
|
|
}
|
|
symlinkCache.setSymlinkedDirectory(directory, {
|
|
real: ts.ensureTrailingDirectorySeparator(real),
|
|
realPath: realPath
|
|
});
|
|
}
|
|
function fileOrDirectoryExistsUsingSource(fileOrDirectory, isFile) {
|
|
var _a;
|
|
var fileOrDirectoryExistsUsingSource = isFile ?
|
|
function (file) { return fileExistsIfProjectReferenceDts(file); } :
|
|
function (dir) { return directoryExistsIfProjectReferenceDeclDir(dir); };
|
|
var result = fileOrDirectoryExistsUsingSource(fileOrDirectory);
|
|
if (result !== undefined)
|
|
return result;
|
|
var symlinkCache = host.getSymlinkCache();
|
|
var symlinkedDirectories = symlinkCache.getSymlinkedDirectories();
|
|
if (!symlinkedDirectories)
|
|
return false;
|
|
var fileOrDirectoryPath = host.toPath(fileOrDirectory);
|
|
if (!ts.stringContains(fileOrDirectoryPath, ts.nodeModulesPathPart))
|
|
return false;
|
|
if (isFile && ((_a = symlinkCache.getSymlinkedFiles()) === null || _a === void 0 ? void 0 : _a.has(fileOrDirectoryPath)))
|
|
return true;
|
|
return ts.firstDefinedIterator(symlinkedDirectories.entries(), function (_a) {
|
|
var directoryPath = _a[0], symlinkedDirectory = _a[1];
|
|
if (!symlinkedDirectory || !ts.startsWith(fileOrDirectoryPath, directoryPath))
|
|
return undefined;
|
|
var result = fileOrDirectoryExistsUsingSource(fileOrDirectoryPath.replace(directoryPath, symlinkedDirectory.realPath));
|
|
if (isFile && result) {
|
|
var absolutePath = ts.getNormalizedAbsolutePath(fileOrDirectory, host.compilerHost.getCurrentDirectory());
|
|
symlinkCache.setSymlinkedFile(fileOrDirectoryPath, "".concat(symlinkedDirectory.real).concat(absolutePath.replace(new RegExp(directoryPath, "i"), "")));
|
|
}
|
|
return result;
|
|
}) || false;
|
|
}
|
|
}
|
|
ts.emitSkippedWithNoDiagnostics = { diagnostics: ts.emptyArray, sourceMaps: undefined, emittedFiles: undefined, emitSkipped: true };
|
|
function handleNoEmitOptions(program, sourceFile, writeFile, cancellationToken) {
|
|
var options = program.getCompilerOptions();
|
|
if (options.noEmit) {
|
|
program.getSemanticDiagnostics(sourceFile, cancellationToken);
|
|
return sourceFile || ts.outFile(options) ?
|
|
ts.emitSkippedWithNoDiagnostics :
|
|
program.emitBuildInfo(writeFile, cancellationToken);
|
|
}
|
|
if (!options.noEmitOnError)
|
|
return undefined;
|
|
var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
|
|
if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
|
|
diagnostics = program.getDeclarationDiagnostics(undefined, cancellationToken);
|
|
}
|
|
if (!diagnostics.length)
|
|
return undefined;
|
|
var emittedFiles;
|
|
if (!sourceFile && !ts.outFile(options)) {
|
|
var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
|
|
if (emitResult.diagnostics)
|
|
diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
|
|
emittedFiles = emitResult.emittedFiles;
|
|
}
|
|
return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
|
|
}
|
|
ts.handleNoEmitOptions = handleNoEmitOptions;
|
|
function filterSemanticDiagnostics(diagnostic, option) {
|
|
return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
|
|
}
|
|
ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
|
|
function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
|
|
if (directoryStructureHost === void 0) { directoryStructureHost = host; }
|
|
return {
|
|
fileExists: function (f) { return directoryStructureHost.fileExists(f); },
|
|
readDirectory: function (root, extensions, excludes, includes, depth) {
|
|
ts.Debug.assertIsDefined(directoryStructureHost.readDirectory, "'CompilerHost.readDirectory' must be implemented to correctly process 'projectReferences'");
|
|
return directoryStructureHost.readDirectory(root, extensions, excludes, includes, depth);
|
|
},
|
|
readFile: function (f) { return directoryStructureHost.readFile(f); },
|
|
useCaseSensitiveFileNames: host.useCaseSensitiveFileNames(),
|
|
getCurrentDirectory: function () { return host.getCurrentDirectory(); },
|
|
onUnRecoverableConfigFileDiagnostic: host.onUnRecoverableConfigFileDiagnostic || ts.returnUndefined,
|
|
trace: host.trace ? function (s) { return host.trace(s); } : undefined
|
|
};
|
|
}
|
|
ts.parseConfigHostFromCompilerHostLike = parseConfigHostFromCompilerHostLike;
|
|
function createPrependNodes(projectReferences, getCommandLine, readFile) {
|
|
if (!projectReferences)
|
|
return ts.emptyArray;
|
|
var nodes;
|
|
for (var i = 0; i < projectReferences.length; i++) {
|
|
var ref = projectReferences[i];
|
|
var resolvedRefOpts = getCommandLine(ref, i);
|
|
if (ref.prepend && resolvedRefOpts && resolvedRefOpts.options) {
|
|
var out = ts.outFile(resolvedRefOpts.options);
|
|
if (!out)
|
|
continue;
|
|
var _a = ts.getOutputPathsForBundle(resolvedRefOpts.options, true), jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath, declarationMapPath = _a.declarationMapPath, buildInfoPath = _a.buildInfoPath;
|
|
var node = ts.createInputFiles(readFile, jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath);
|
|
(nodes || (nodes = [])).push(node);
|
|
}
|
|
}
|
|
return nodes || ts.emptyArray;
|
|
}
|
|
ts.createPrependNodes = createPrependNodes;
|
|
function resolveProjectReferencePath(hostOrRef, ref) {
|
|
var passedInRef = ref ? ref : hostOrRef;
|
|
return ts.resolveConfigFileProjectName(passedInRef.path);
|
|
}
|
|
ts.resolveProjectReferencePath = resolveProjectReferencePath;
|
|
function getResolutionDiagnostic(options, _a) {
|
|
var extension = _a.extension;
|
|
switch (extension) {
|
|
case ".ts":
|
|
case ".d.ts":
|
|
return undefined;
|
|
case ".tsx":
|
|
return needJsx();
|
|
case ".jsx":
|
|
return needJsx() || needAllowJs();
|
|
case ".js":
|
|
return needAllowJs();
|
|
case ".json":
|
|
return needResolveJsonModule();
|
|
}
|
|
function needJsx() {
|
|
return options.jsx ? undefined : ts.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set;
|
|
}
|
|
function needAllowJs() {
|
|
return ts.getAllowJSCompilerOption(options) || !ts.getStrictOptionValue(options, "noImplicitAny") ? undefined : ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type;
|
|
}
|
|
function needResolveJsonModule() {
|
|
return options.resolveJsonModule ? undefined : ts.Diagnostics.Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used;
|
|
}
|
|
}
|
|
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 === 10) {
|
|
res.push(aug.text);
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
function getModuleNameStringLiteralAt(_a, index) {
|
|
var imports = _a.imports, moduleAugmentations = _a.moduleAugmentations;
|
|
if (index < imports.length)
|
|
return imports[index];
|
|
var augIndex = imports.length;
|
|
for (var _i = 0, moduleAugmentations_2 = moduleAugmentations; _i < moduleAugmentations_2.length; _i++) {
|
|
var aug = moduleAugmentations_2[_i];
|
|
if (aug.kind === 10) {
|
|
if (index === augIndex)
|
|
return aug;
|
|
augIndex++;
|
|
}
|
|
}
|
|
ts.Debug.fail("should never ask for module name at index higher than possible module name");
|
|
}
|
|
ts.getModuleNameStringLiteralAt = getModuleNameStringLiteralAt;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers, forceDtsEmit) {
|
|
var outputFiles = [];
|
|
var _a = program.emit(sourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers, forceDtsEmit), emitSkipped = _a.emitSkipped, diagnostics = _a.diagnostics;
|
|
return { outputFiles: outputFiles, emitSkipped: emitSkipped, diagnostics: diagnostics };
|
|
function writeFile(fileName, text, writeByteOrderMark) {
|
|
outputFiles.push({ name: fileName, writeByteOrderMark: writeByteOrderMark, text: text });
|
|
}
|
|
}
|
|
ts.getFileEmitOutput = getFileEmitOutput;
|
|
var BuilderState;
|
|
(function (BuilderState) {
|
|
function createManyToManyPathMap() {
|
|
function create(forward, reverse, deleted) {
|
|
var map = {
|
|
getKeys: function (v) { return reverse.get(v); },
|
|
getValues: function (k) { return forward.get(k); },
|
|
keys: function () { return forward.keys(); },
|
|
deleteKey: function (k) {
|
|
(deleted || (deleted = new ts.Set())).add(k);
|
|
var set = forward.get(k);
|
|
if (!set) {
|
|
return false;
|
|
}
|
|
set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
|
|
forward.delete(k);
|
|
return true;
|
|
},
|
|
set: function (k, vSet) {
|
|
deleted === null || deleted === void 0 ? void 0 : deleted.delete(k);
|
|
var existingVSet = forward.get(k);
|
|
forward.set(k, vSet);
|
|
existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
|
|
if (!vSet.has(v)) {
|
|
deleteFromMultimap(reverse, v, k);
|
|
}
|
|
});
|
|
vSet.forEach(function (v) {
|
|
if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
|
|
addToMultimap(reverse, v, k);
|
|
}
|
|
});
|
|
return map;
|
|
},
|
|
};
|
|
return map;
|
|
}
|
|
return create(new ts.Map(), new ts.Map(), undefined);
|
|
}
|
|
BuilderState.createManyToManyPathMap = createManyToManyPathMap;
|
|
function addToMultimap(map, k, v) {
|
|
var set = map.get(k);
|
|
if (!set) {
|
|
set = new ts.Set();
|
|
map.set(k, set);
|
|
}
|
|
set.add(v);
|
|
}
|
|
function deleteFromMultimap(map, k, v) {
|
|
var set = map.get(k);
|
|
if (set === null || set === void 0 ? void 0 : set.delete(v)) {
|
|
if (!set.size) {
|
|
map.delete(k);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getReferencedFilesFromImportedModuleSymbol(symbol) {
|
|
return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
|
|
}
|
|
function getReferencedFilesFromImportLiteral(checker, importName) {
|
|
var symbol = checker.getSymbolAtLocation(importName);
|
|
return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
|
|
}
|
|
function getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName) {
|
|
return ts.toPath(program.getProjectReferenceRedirect(fileName) || fileName, sourceFileDirectory, getCanonicalFileName);
|
|
}
|
|
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 declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
|
|
declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
|
|
}
|
|
}
|
|
var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
|
|
if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) {
|
|
for (var _b = 0, _c = sourceFile.referencedFiles; _b < _c.length; _b++) {
|
|
var referencedFile = _c[_b];
|
|
var referencedPath = getReferencedFileFromFileName(program, referencedFile.fileName, sourceFileDirectory, getCanonicalFileName);
|
|
addReferencedFile(referencedPath);
|
|
}
|
|
}
|
|
if (sourceFile.resolvedTypeReferenceDirectiveNames) {
|
|
sourceFile.resolvedTypeReferenceDirectiveNames.forEach(function (resolvedTypeReferenceDirective) {
|
|
if (!resolvedTypeReferenceDirective) {
|
|
return;
|
|
}
|
|
var fileName = resolvedTypeReferenceDirective.resolvedFileName;
|
|
var typeFilePath = getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName);
|
|
addReferencedFile(typeFilePath);
|
|
});
|
|
}
|
|
if (sourceFile.moduleAugmentations.length) {
|
|
var checker = program.getTypeChecker();
|
|
for (var _d = 0, _e = sourceFile.moduleAugmentations; _d < _e.length; _d++) {
|
|
var moduleName = _e[_d];
|
|
if (!ts.isStringLiteral(moduleName))
|
|
continue;
|
|
var symbol = checker.getSymbolAtLocation(moduleName);
|
|
if (!symbol)
|
|
continue;
|
|
addReferenceFromAmbientModule(symbol);
|
|
}
|
|
}
|
|
for (var _f = 0, _g = program.getTypeChecker().getAmbientModules(); _f < _g.length; _f++) {
|
|
var ambientModule = _g[_f];
|
|
if (ambientModule.declarations && ambientModule.declarations.length > 1) {
|
|
addReferenceFromAmbientModule(ambientModule);
|
|
}
|
|
}
|
|
return referencedFiles;
|
|
function addReferenceFromAmbientModule(symbol) {
|
|
if (!symbol.declarations) {
|
|
return;
|
|
}
|
|
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
|
|
var declaration = _a[_i];
|
|
var declarationSourceFile = ts.getSourceFileOfNode(declaration);
|
|
if (declarationSourceFile &&
|
|
declarationSourceFile !== sourceFile) {
|
|
addReferencedFile(declarationSourceFile.resolvedPath);
|
|
}
|
|
}
|
|
}
|
|
function addReferencedFile(referencedPath) {
|
|
(referencedFiles || (referencedFiles = new ts.Set())).add(referencedPath);
|
|
}
|
|
}
|
|
function canReuseOldState(newReferencedMap, oldState) {
|
|
return oldState && !oldState.referencedMap === !newReferencedMap;
|
|
}
|
|
BuilderState.canReuseOldState = canReuseOldState;
|
|
function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
|
|
var _a, _b, _c;
|
|
var fileInfos = new ts.Map();
|
|
var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
|
|
var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
|
|
var useOldState = canReuseOldState(referencedMap, oldState);
|
|
newProgram.getTypeChecker();
|
|
for (var _i = 0, _d = newProgram.getSourceFiles(); _i < _d.length; _i++) {
|
|
var sourceFile = _d[_i];
|
|
var version_2 = ts.Debug.checkDefined(sourceFile.version, "Program intended to be used with Builder should have source files with versions set");
|
|
var oldUncommittedSignature = useOldState ? (_a = oldState.oldSignatures) === null || _a === void 0 ? void 0 : _a.get(sourceFile.resolvedPath) : undefined;
|
|
var signature = oldUncommittedSignature === undefined ?
|
|
useOldState ? (_b = oldState.fileInfos.get(sourceFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.signature : undefined :
|
|
oldUncommittedSignature || undefined;
|
|
if (referencedMap) {
|
|
var newReferences = getReferencedFiles(newProgram, sourceFile, getCanonicalFileName);
|
|
if (newReferences) {
|
|
referencedMap.set(sourceFile.resolvedPath, newReferences);
|
|
}
|
|
if (useOldState) {
|
|
var oldUncommittedExportedModules = (_c = oldState.oldExportedModulesMap) === null || _c === void 0 ? void 0 : _c.get(sourceFile.resolvedPath);
|
|
var exportedModules = oldUncommittedExportedModules === undefined ?
|
|
oldState.exportedModulesMap.getValues(sourceFile.resolvedPath) :
|
|
oldUncommittedExportedModules || undefined;
|
|
if (exportedModules) {
|
|
exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
|
|
}
|
|
}
|
|
}
|
|
fileInfos.set(sourceFile.resolvedPath, {
|
|
version: version_2,
|
|
signature: signature,
|
|
affectsGlobalScope: isFileAffectingGlobalScope(sourceFile) || undefined,
|
|
impliedFormat: sourceFile.impliedNodeFormat
|
|
});
|
|
}
|
|
return {
|
|
fileInfos: fileInfos,
|
|
referencedMap: referencedMap,
|
|
exportedModulesMap: exportedModulesMap,
|
|
useFileVersionAsSignature: !disableUseFileVersionAsSignature && !useOldState
|
|
};
|
|
}
|
|
BuilderState.create = create;
|
|
function releaseCache(state) {
|
|
state.allFilesExcludingDefaultLibraryFile = undefined;
|
|
state.allFileNames = undefined;
|
|
}
|
|
BuilderState.releaseCache = releaseCache;
|
|
function getFilesAffectedBy(state, programOfThisState, path, cancellationToken, computeHash, getCanonicalFileName) {
|
|
var _a, _b;
|
|
var result = getFilesAffectedByWithOldState(state, programOfThisState, path, cancellationToken, computeHash, getCanonicalFileName);
|
|
(_a = state.oldSignatures) === null || _a === void 0 ? void 0 : _a.clear();
|
|
(_b = state.oldExportedModulesMap) === null || _b === void 0 ? void 0 : _b.clear();
|
|
return result;
|
|
}
|
|
BuilderState.getFilesAffectedBy = getFilesAffectedBy;
|
|
function getFilesAffectedByWithOldState(state, programOfThisState, path, cancellationToken, computeHash, getCanonicalFileName) {
|
|
var sourceFile = programOfThisState.getSourceFileByPath(path);
|
|
if (!sourceFile) {
|
|
return ts.emptyArray;
|
|
}
|
|
if (!updateShapeSignature(state, programOfThisState, sourceFile, cancellationToken, computeHash, getCanonicalFileName)) {
|
|
return [sourceFile];
|
|
}
|
|
return (state.referencedMap ? getFilesAffectedByUpdatedShapeWhenModuleEmit : getFilesAffectedByUpdatedShapeWhenNonModuleEmit)(state, programOfThisState, sourceFile, cancellationToken, computeHash, getCanonicalFileName);
|
|
}
|
|
BuilderState.getFilesAffectedByWithOldState = getFilesAffectedByWithOldState;
|
|
function updateSignatureOfFile(state, signature, path) {
|
|
state.fileInfos.get(path).signature = signature;
|
|
(state.hasCalledUpdateShapeSignature || (state.hasCalledUpdateShapeSignature = new ts.Set())).add(path);
|
|
}
|
|
BuilderState.updateSignatureOfFile = updateSignatureOfFile;
|
|
function updateShapeSignature(state, programOfThisState, sourceFile, cancellationToken, computeHash, getCanonicalFileName, useFileVersionAsSignature) {
|
|
var _a;
|
|
if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
|
|
if ((_a = state.hasCalledUpdateShapeSignature) === null || _a === void 0 ? void 0 : _a.has(sourceFile.resolvedPath))
|
|
return false;
|
|
var info = state.fileInfos.get(sourceFile.resolvedPath);
|
|
var prevSignature = info.signature;
|
|
var latestSignature;
|
|
if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
|
|
programOfThisState.emit(sourceFile, function (fileName, text, _writeByteOrderMark, _onError, sourceFiles, data) {
|
|
ts.Debug.assert(ts.isDeclarationFileName(fileName), "File extension for signature expected to be dts: Got:: ".concat(fileName));
|
|
latestSignature = ts.computeSignatureWithDiagnostics(sourceFile, text, computeHash, getCanonicalFileName, data);
|
|
if (latestSignature !== prevSignature) {
|
|
updateExportedModules(state, sourceFile, sourceFiles[0].exportedModulesFromDeclarationEmit);
|
|
}
|
|
}, cancellationToken, true, undefined, true);
|
|
}
|
|
if (latestSignature === undefined) {
|
|
latestSignature = sourceFile.version;
|
|
if (state.exportedModulesMap && latestSignature !== prevSignature) {
|
|
(state.oldExportedModulesMap || (state.oldExportedModulesMap = new ts.Map())).set(sourceFile.resolvedPath, state.exportedModulesMap.getValues(sourceFile.resolvedPath) || false);
|
|
var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
|
|
if (references) {
|
|
state.exportedModulesMap.set(sourceFile.resolvedPath, references);
|
|
}
|
|
else {
|
|
state.exportedModulesMap.deleteKey(sourceFile.resolvedPath);
|
|
}
|
|
}
|
|
}
|
|
(state.oldSignatures || (state.oldSignatures = new ts.Map())).set(sourceFile.resolvedPath, prevSignature || false);
|
|
(state.hasCalledUpdateShapeSignature || (state.hasCalledUpdateShapeSignature = new ts.Set())).add(sourceFile.resolvedPath);
|
|
info.signature = latestSignature;
|
|
return latestSignature !== prevSignature;
|
|
}
|
|
BuilderState.updateShapeSignature = updateShapeSignature;
|
|
function updateExportedModules(state, sourceFile, exportedModulesFromDeclarationEmit) {
|
|
if (!state.exportedModulesMap)
|
|
return;
|
|
(state.oldExportedModulesMap || (state.oldExportedModulesMap = new ts.Map())).set(sourceFile.resolvedPath, state.exportedModulesMap.getValues(sourceFile.resolvedPath) || false);
|
|
if (!exportedModulesFromDeclarationEmit) {
|
|
state.exportedModulesMap.deleteKey(sourceFile.resolvedPath);
|
|
return;
|
|
}
|
|
var exportedModules;
|
|
exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
|
|
if (exportedModules) {
|
|
state.exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
|
|
}
|
|
else {
|
|
state.exportedModulesMap.deleteKey(sourceFile.resolvedPath);
|
|
}
|
|
function addExportedModule(exportedModulePaths) {
|
|
if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
|
|
if (!exportedModules) {
|
|
exportedModules = new ts.Set();
|
|
}
|
|
exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
|
|
}
|
|
}
|
|
}
|
|
BuilderState.updateExportedModules = updateExportedModules;
|
|
function getAllDependencies(state, programOfThisState, sourceFile) {
|
|
var compilerOptions = programOfThisState.getCompilerOptions();
|
|
if (ts.outFile(compilerOptions)) {
|
|
return getAllFileNames(state, programOfThisState);
|
|
}
|
|
if (!state.referencedMap || isFileAffectingGlobalScope(sourceFile)) {
|
|
return getAllFileNames(state, programOfThisState);
|
|
}
|
|
var seenMap = new ts.Set();
|
|
var queue = [sourceFile.resolvedPath];
|
|
while (queue.length) {
|
|
var path = queue.pop();
|
|
if (!seenMap.has(path)) {
|
|
seenMap.add(path);
|
|
var references = state.referencedMap.getValues(path);
|
|
if (references) {
|
|
var iterator = references.keys();
|
|
for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
|
|
queue.push(iterResult.value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ts.arrayFrom(ts.mapDefinedIterator(seenMap.keys(), function (path) { var _a, _b; return (_b = (_a = programOfThisState.getSourceFileByPath(path)) === null || _a === void 0 ? void 0 : _a.fileName) !== null && _b !== void 0 ? _b : 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) {
|
|
var keys = state.referencedMap.getKeys(referencedFilePath);
|
|
return keys ? ts.arrayFrom(keys.keys()) : [];
|
|
}
|
|
BuilderState.getReferencedByPaths = getReferencedByPaths;
|
|
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 containsGlobalScopeAugmentation(sourceFile) {
|
|
return ts.some(sourceFile.moduleAugmentations, function (augmentation) { return ts.isGlobalScopeAugmentation(augmentation.parent); });
|
|
}
|
|
function isFileAffectingGlobalScope(sourceFile) {
|
|
return containsGlobalScopeAugmentation(sourceFile) ||
|
|
!ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
|
|
}
|
|
function getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, firstSourceFile) {
|
|
if (state.allFilesExcludingDefaultLibraryFile) {
|
|
return state.allFilesExcludingDefaultLibraryFile;
|
|
}
|
|
var result;
|
|
if (firstSourceFile)
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
BuilderState.getAllFilesExcludingDefaultLibraryFile = getAllFilesExcludingDefaultLibraryFile;
|
|
function getFilesAffectedByUpdatedShapeWhenNonModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape) {
|
|
var compilerOptions = programOfThisState.getCompilerOptions();
|
|
if (compilerOptions && ts.outFile(compilerOptions)) {
|
|
return [sourceFileWithUpdatedShape];
|
|
}
|
|
return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape);
|
|
}
|
|
function getFilesAffectedByUpdatedShapeWhenModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape, cancellationToken, computeHash, getCanonicalFileName) {
|
|
if (isFileAffectingGlobalScope(sourceFileWithUpdatedShape)) {
|
|
return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape);
|
|
}
|
|
var compilerOptions = programOfThisState.getCompilerOptions();
|
|
if (compilerOptions && (compilerOptions.isolatedModules || ts.outFile(compilerOptions))) {
|
|
return [sourceFileWithUpdatedShape];
|
|
}
|
|
var seenFileNamesMap = new ts.Map();
|
|
seenFileNamesMap.set(sourceFileWithUpdatedShape.resolvedPath, sourceFileWithUpdatedShape);
|
|
var queue = getReferencedByPaths(state, sourceFileWithUpdatedShape.resolvedPath);
|
|
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, cancellationToken, computeHash, getCanonicalFileName)) {
|
|
queue.push.apply(queue, getReferencedByPaths(state, currentSourceFile.resolvedPath));
|
|
}
|
|
}
|
|
}
|
|
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, disableUseFileVersionAsSignature) {
|
|
var _a, _b;
|
|
var state = ts.BuilderState.create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature);
|
|
state.program = newProgram;
|
|
var compilerOptions = newProgram.getCompilerOptions();
|
|
state.compilerOptions = compilerOptions;
|
|
var outFilePath = ts.outFile(compilerOptions);
|
|
if (!outFilePath) {
|
|
state.semanticDiagnosticsPerFile = new ts.Map();
|
|
}
|
|
else if (compilerOptions.composite && (oldState === null || oldState === void 0 ? void 0 : oldState.outSignature) && outFilePath === ts.outFile(oldState === null || oldState === void 0 ? void 0 : oldState.compilerOptions)) {
|
|
state.outSignature = oldState === null || oldState === void 0 ? void 0 : oldState.outSignature;
|
|
}
|
|
state.changedFilesSet = new ts.Set();
|
|
state.latestChangedDtsFile = compilerOptions.composite ? oldState === null || oldState === void 0 ? void 0 : oldState.latestChangedDtsFile : undefined;
|
|
var useOldState = ts.BuilderState.canReuseOldState(state.referencedMap, oldState);
|
|
var oldCompilerOptions = useOldState ? oldState.compilerOptions : undefined;
|
|
var canCopySemanticDiagnostics = useOldState && oldState.semanticDiagnosticsPerFile && !!state.semanticDiagnosticsPerFile &&
|
|
!ts.compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions);
|
|
var canCopyEmitSignatures = compilerOptions.composite &&
|
|
(oldState === null || oldState === void 0 ? void 0 : oldState.emitSignatures) &&
|
|
!outFilePath &&
|
|
!ts.compilerOptionsAffectDeclarationPath(compilerOptions, oldCompilerOptions);
|
|
if (useOldState) {
|
|
(_a = oldState.changedFilesSet) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return state.changedFilesSet.add(value); });
|
|
if (!outFilePath && oldState.affectedFilesPendingEmit) {
|
|
state.affectedFilesPendingEmit = oldState.affectedFilesPendingEmit.slice();
|
|
state.affectedFilesPendingEmitKind = oldState.affectedFilesPendingEmitKind && new ts.Map(oldState.affectedFilesPendingEmitKind);
|
|
state.affectedFilesPendingEmitIndex = oldState.affectedFilesPendingEmitIndex;
|
|
state.seenAffectedFiles = new ts.Set();
|
|
}
|
|
}
|
|
var referencedMap = state.referencedMap;
|
|
var oldReferencedMap = useOldState ? oldState.referencedMap : undefined;
|
|
var copyDeclarationFileDiagnostics = canCopySemanticDiagnostics && !compilerOptions.skipLibCheck === !oldCompilerOptions.skipLibCheck;
|
|
var copyLibFileDiagnostics = copyDeclarationFileDiagnostics && !compilerOptions.skipDefaultLibCheck === !oldCompilerOptions.skipDefaultLibCheck;
|
|
state.fileInfos.forEach(function (info, sourceFilePath) {
|
|
var oldInfo;
|
|
var newReferences;
|
|
if (!useOldState ||
|
|
!(oldInfo = oldState.fileInfos.get(sourceFilePath)) ||
|
|
oldInfo.version !== info.version ||
|
|
oldInfo.impliedFormat !== info.impliedFormat ||
|
|
!hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
|
|
newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
|
|
state.changedFilesSet.add(sourceFilePath);
|
|
}
|
|
else if (canCopySemanticDiagnostics) {
|
|
var sourceFile = newProgram.getSourceFileByPath(sourceFilePath);
|
|
if (sourceFile.isDeclarationFile && !copyDeclarationFileDiagnostics)
|
|
return;
|
|
if (sourceFile.hasNoDefaultLib && !copyLibFileDiagnostics)
|
|
return;
|
|
var diagnostics = oldState.semanticDiagnosticsPerFile.get(sourceFilePath);
|
|
if (diagnostics) {
|
|
state.semanticDiagnosticsPerFile.set(sourceFilePath, oldState.hasReusableDiagnostic ? convertToDiagnostics(diagnostics, newProgram, getCanonicalFileName) : diagnostics);
|
|
if (!state.semanticDiagnosticsFromOldState) {
|
|
state.semanticDiagnosticsFromOldState = new ts.Set();
|
|
}
|
|
state.semanticDiagnosticsFromOldState.add(sourceFilePath);
|
|
}
|
|
}
|
|
if (canCopyEmitSignatures) {
|
|
var oldEmitSignature = oldState.emitSignatures.get(sourceFilePath);
|
|
if (oldEmitSignature)
|
|
(state.emitSignatures || (state.emitSignatures = new ts.Map())).set(sourceFilePath, oldEmitSignature);
|
|
}
|
|
});
|
|
if (useOldState && ts.forEachEntry(oldState.fileInfos, function (info, sourceFilePath) { return info.affectsGlobalScope && !state.fileInfos.has(sourceFilePath); })) {
|
|
ts.BuilderState.getAllFilesExcludingDefaultLibraryFile(state, newProgram, undefined)
|
|
.forEach(function (file) { return state.changedFilesSet.add(file.resolvedPath); });
|
|
}
|
|
else if (oldCompilerOptions && !outFilePath && ts.compilerOptionsAffectEmit(compilerOptions, oldCompilerOptions)) {
|
|
newProgram.getSourceFiles().forEach(function (f) { return addToAffectedFilesPendingEmit(state, f.resolvedPath, 1); });
|
|
ts.Debug.assert(!state.seenAffectedFiles || !state.seenAffectedFiles.size);
|
|
state.seenAffectedFiles = state.seenAffectedFiles || new ts.Set();
|
|
}
|
|
state.buildInfoEmitPending = !useOldState || state.changedFilesSet.size !== (((_b = oldState.changedFilesSet) === null || _b === void 0 ? void 0 : _b.size) || 0);
|
|
return state;
|
|
}
|
|
function convertToDiagnostics(diagnostics, newProgram, getCanonicalFileName) {
|
|
if (!diagnostics.length)
|
|
return ts.emptyArray;
|
|
var buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(ts.getTsBuildInfoEmitOutputFilePath(newProgram.getCompilerOptions()), newProgram.getCurrentDirectory()));
|
|
return diagnostics.map(function (diagnostic) {
|
|
var result = convertToDiagnosticRelatedInformation(diagnostic, newProgram, toPath);
|
|
result.reportsUnnecessary = diagnostic.reportsUnnecessary;
|
|
result.reportsDeprecated = diagnostic.reportDeprecated;
|
|
result.source = diagnostic.source;
|
|
result.skippedOn = diagnostic.skippedOn;
|
|
var relatedInformation = diagnostic.relatedInformation;
|
|
result.relatedInformation = relatedInformation ?
|
|
relatedInformation.length ?
|
|
relatedInformation.map(function (r) { return convertToDiagnosticRelatedInformation(r, newProgram, toPath); }) :
|
|
[] :
|
|
undefined;
|
|
return result;
|
|
});
|
|
function toPath(path) {
|
|
return ts.toPath(path, buildInfoDirectory, getCanonicalFileName);
|
|
}
|
|
}
|
|
function convertToDiagnosticRelatedInformation(diagnostic, newProgram, toPath) {
|
|
var file = diagnostic.file;
|
|
return __assign(__assign({}, diagnostic), { file: file ? newProgram.getSourceFileByPath(toPath(file)) : undefined });
|
|
}
|
|
function releaseCache(state) {
|
|
ts.BuilderState.releaseCache(state);
|
|
state.program = undefined;
|
|
}
|
|
function backupBuilderProgramEmitState(state) {
|
|
var outFilePath = ts.outFile(state.compilerOptions);
|
|
ts.Debug.assert(!state.changedFilesSet.size || outFilePath);
|
|
return {
|
|
affectedFilesPendingEmit: state.affectedFilesPendingEmit && state.affectedFilesPendingEmit.slice(),
|
|
affectedFilesPendingEmitKind: state.affectedFilesPendingEmitKind && new ts.Map(state.affectedFilesPendingEmitKind),
|
|
affectedFilesPendingEmitIndex: state.affectedFilesPendingEmitIndex,
|
|
seenEmittedFiles: state.seenEmittedFiles && new ts.Map(state.seenEmittedFiles),
|
|
programEmitComplete: state.programEmitComplete,
|
|
emitSignatures: state.emitSignatures && new ts.Map(state.emitSignatures),
|
|
outSignature: state.outSignature,
|
|
latestChangedDtsFile: state.latestChangedDtsFile,
|
|
hasChangedEmitSignature: state.hasChangedEmitSignature,
|
|
changedFilesSet: outFilePath ? new ts.Set(state.changedFilesSet) : undefined,
|
|
};
|
|
}
|
|
function restoreBuilderProgramEmitState(state, savedEmitState) {
|
|
state.affectedFilesPendingEmit = savedEmitState.affectedFilesPendingEmit;
|
|
state.affectedFilesPendingEmitKind = savedEmitState.affectedFilesPendingEmitKind;
|
|
state.affectedFilesPendingEmitIndex = savedEmitState.affectedFilesPendingEmitIndex;
|
|
state.seenEmittedFiles = savedEmitState.seenEmittedFiles;
|
|
state.programEmitComplete = savedEmitState.programEmitComplete;
|
|
state.emitSignatures = savedEmitState.emitSignatures;
|
|
state.outSignature = savedEmitState.outSignature;
|
|
state.latestChangedDtsFile = savedEmitState.latestChangedDtsFile;
|
|
state.hasChangedEmitSignature = savedEmitState.hasChangedEmitSignature;
|
|
if (savedEmitState.changedFilesSet)
|
|
state.changedFilesSet = savedEmitState.changedFilesSet;
|
|
}
|
|
function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) {
|
|
ts.Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.resolvedPath));
|
|
}
|
|
function getNextAffectedFile(state, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
var _a, _b;
|
|
while (true) {
|
|
var affectedFiles = state.affectedFiles;
|
|
if (affectedFiles) {
|
|
var seenAffectedFiles = state.seenAffectedFiles;
|
|
var affectedFilesIndex = state.affectedFilesIndex;
|
|
while (affectedFilesIndex < affectedFiles.length) {
|
|
var affectedFile = affectedFiles[affectedFilesIndex];
|
|
if (!seenAffectedFiles.has(affectedFile.resolvedPath)) {
|
|
state.affectedFilesIndex = affectedFilesIndex;
|
|
handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
return affectedFile;
|
|
}
|
|
affectedFilesIndex++;
|
|
}
|
|
state.changedFilesSet.delete(state.currentChangedFilePath);
|
|
state.currentChangedFilePath = undefined;
|
|
(_a = state.oldSignatures) === null || _a === void 0 ? void 0 : _a.clear();
|
|
(_b = state.oldExportedModulesMap) === null || _b === void 0 ? void 0 : _b.clear();
|
|
state.affectedFiles = undefined;
|
|
}
|
|
var nextKey = state.changedFilesSet.keys().next();
|
|
if (nextKey.done) {
|
|
return undefined;
|
|
}
|
|
var program = ts.Debug.checkDefined(state.program);
|
|
var compilerOptions = program.getCompilerOptions();
|
|
if (ts.outFile(compilerOptions)) {
|
|
ts.Debug.assert(!state.semanticDiagnosticsPerFile);
|
|
return program;
|
|
}
|
|
state.affectedFiles = ts.BuilderState.getFilesAffectedByWithOldState(state, program, nextKey.value, cancellationToken, computeHash, getCanonicalFileName);
|
|
state.currentChangedFilePath = nextKey.value;
|
|
state.affectedFilesIndex = 0;
|
|
if (!state.seenAffectedFiles)
|
|
state.seenAffectedFiles = new ts.Set();
|
|
}
|
|
}
|
|
function clearAffectedFilesPendingEmit(state) {
|
|
state.affectedFilesPendingEmit = undefined;
|
|
state.affectedFilesPendingEmitKind = undefined;
|
|
state.affectedFilesPendingEmitIndex = undefined;
|
|
}
|
|
function getNextAffectedFilePendingEmit(state) {
|
|
var affectedFilesPendingEmit = state.affectedFilesPendingEmit;
|
|
if (affectedFilesPendingEmit) {
|
|
var seenEmittedFiles = (state.seenEmittedFiles || (state.seenEmittedFiles = new ts.Map()));
|
|
for (var i = state.affectedFilesPendingEmitIndex; i < affectedFilesPendingEmit.length; i++) {
|
|
var affectedFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(affectedFilesPendingEmit[i]);
|
|
if (affectedFile) {
|
|
var seenKind = seenEmittedFiles.get(affectedFile.resolvedPath);
|
|
var emitKind = ts.Debug.checkDefined(ts.Debug.checkDefined(state.affectedFilesPendingEmitKind).get(affectedFile.resolvedPath));
|
|
if (seenKind === undefined || seenKind < emitKind) {
|
|
state.affectedFilesPendingEmitIndex = i;
|
|
return { affectedFile: affectedFile, emitKind: emitKind };
|
|
}
|
|
}
|
|
}
|
|
clearAffectedFilesPendingEmit(state);
|
|
}
|
|
return undefined;
|
|
}
|
|
function removeDiagnosticsOfLibraryFiles(state) {
|
|
if (!state.cleanedDiagnosticsOfLibFiles) {
|
|
state.cleanedDiagnosticsOfLibFiles = true;
|
|
var program_1 = ts.Debug.checkDefined(state.program);
|
|
var options_2 = program_1.getCompilerOptions();
|
|
ts.forEach(program_1.getSourceFiles(), function (f) {
|
|
return program_1.isSourceFileDefaultLibrary(f) &&
|
|
!ts.skipTypeChecking(f, options_2, program_1) &&
|
|
removeSemanticDiagnosticsOf(state, f.resolvedPath);
|
|
});
|
|
}
|
|
}
|
|
function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
removeSemanticDiagnosticsOf(state, affectedFile.resolvedPath);
|
|
if (state.allFilesExcludingDefaultLibraryFile === state.affectedFiles) {
|
|
removeDiagnosticsOfLibraryFiles(state);
|
|
ts.BuilderState.updateShapeSignature(state, ts.Debug.checkDefined(state.program), affectedFile, cancellationToken, computeHash, getCanonicalFileName);
|
|
return;
|
|
}
|
|
if (state.compilerOptions.assumeChangesOnlyAffectDirectDependencies)
|
|
return;
|
|
handleDtsMayChangeOfReferencingExportOfAffectedFile(state, affectedFile, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
}
|
|
function handleDtsMayChangeOf(state, path, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
removeSemanticDiagnosticsOf(state, path);
|
|
if (!state.changedFilesSet.has(path)) {
|
|
var program = ts.Debug.checkDefined(state.program);
|
|
var sourceFile = program.getSourceFileByPath(path);
|
|
if (sourceFile) {
|
|
ts.BuilderState.updateShapeSignature(state, program, sourceFile, cancellationToken, computeHash, getCanonicalFileName, !host.disableUseFileVersionAsSignature);
|
|
if (ts.getEmitDeclarations(state.compilerOptions)) {
|
|
addToAffectedFilesPendingEmit(state, path, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function removeSemanticDiagnosticsOf(state, path) {
|
|
if (!state.semanticDiagnosticsFromOldState) {
|
|
return true;
|
|
}
|
|
state.semanticDiagnosticsFromOldState.delete(path);
|
|
state.semanticDiagnosticsPerFile.delete(path);
|
|
return !state.semanticDiagnosticsFromOldState.size;
|
|
}
|
|
function isChangedSignature(state, path) {
|
|
var oldSignature = ts.Debug.checkDefined(state.oldSignatures).get(path) || undefined;
|
|
var newSignature = ts.Debug.checkDefined(state.fileInfos.get(path)).signature;
|
|
return newSignature !== oldSignature;
|
|
}
|
|
function handleDtsMayChangeOfGlobalScope(state, filePath, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
var _a;
|
|
if (!((_a = state.fileInfos.get(filePath)) === null || _a === void 0 ? void 0 : _a.affectsGlobalScope))
|
|
return false;
|
|
ts.BuilderState.getAllFilesExcludingDefaultLibraryFile(state, state.program, undefined)
|
|
.forEach(function (file) { return handleDtsMayChangeOf(state, file.resolvedPath, cancellationToken, computeHash, getCanonicalFileName, host); });
|
|
removeDiagnosticsOfLibraryFiles(state);
|
|
return true;
|
|
}
|
|
function handleDtsMayChangeOfReferencingExportOfAffectedFile(state, affectedFile, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
var _a;
|
|
if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath))
|
|
return;
|
|
if (!isChangedSignature(state, affectedFile.resolvedPath))
|
|
return;
|
|
if (state.compilerOptions.isolatedModules) {
|
|
var seenFileNamesMap = new ts.Map();
|
|
seenFileNamesMap.set(affectedFile.resolvedPath, true);
|
|
var queue = ts.BuilderState.getReferencedByPaths(state, affectedFile.resolvedPath);
|
|
while (queue.length > 0) {
|
|
var currentPath = queue.pop();
|
|
if (!seenFileNamesMap.has(currentPath)) {
|
|
seenFileNamesMap.set(currentPath, true);
|
|
if (handleDtsMayChangeOfGlobalScope(state, currentPath, cancellationToken, computeHash, getCanonicalFileName, host))
|
|
return;
|
|
handleDtsMayChangeOf(state, currentPath, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
if (isChangedSignature(state, currentPath)) {
|
|
var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
|
|
queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var seenFileAndExportsOfFile = new ts.Set();
|
|
(_a = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
|
|
if (handleDtsMayChangeOfGlobalScope(state, exportedFromPath, cancellationToken, computeHash, getCanonicalFileName, host))
|
|
return true;
|
|
var references = state.referencedMap.getKeys(exportedFromPath);
|
|
return references && ts.forEachKey(references, function (filePath) {
|
|
return handleDtsMayChangeOfFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
});
|
|
});
|
|
}
|
|
function handleDtsMayChangeOfFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, cancellationToken, computeHash, getCanonicalFileName, host) {
|
|
var _a, _b;
|
|
if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath))
|
|
return undefined;
|
|
if (handleDtsMayChangeOfGlobalScope(state, filePath, cancellationToken, computeHash, getCanonicalFileName, host))
|
|
return true;
|
|
handleDtsMayChangeOf(state, filePath, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
(_a = state.exportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
|
|
return handleDtsMayChangeOfFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
});
|
|
(_b = state.referencedMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (referencingFilePath) {
|
|
return !seenFileAndExportsOfFile.has(referencingFilePath) &&
|
|
handleDtsMayChangeOf(state, referencingFilePath, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
});
|
|
return undefined;
|
|
}
|
|
function doneWithAffectedFile(state, affected, emitKind, isPendingEmit, isBuildInfoEmit) {
|
|
if (isBuildInfoEmit) {
|
|
state.buildInfoEmitPending = false;
|
|
}
|
|
else if (affected === state.program) {
|
|
state.changedFilesSet.clear();
|
|
state.programEmitComplete = true;
|
|
}
|
|
else {
|
|
state.seenAffectedFiles.add(affected.resolvedPath);
|
|
state.buildInfoEmitPending = true;
|
|
if (emitKind !== undefined) {
|
|
(state.seenEmittedFiles || (state.seenEmittedFiles = new ts.Map())).set(affected.resolvedPath, emitKind);
|
|
}
|
|
if (isPendingEmit) {
|
|
state.affectedFilesPendingEmitIndex++;
|
|
}
|
|
else {
|
|
state.affectedFilesIndex++;
|
|
}
|
|
}
|
|
}
|
|
function toAffectedFileResult(state, result, affected) {
|
|
doneWithAffectedFile(state, affected);
|
|
return { result: result, affected: affected };
|
|
}
|
|
function toAffectedFileEmitResult(state, result, affected, emitKind, isPendingEmit, isBuildInfoEmit) {
|
|
doneWithAffectedFile(state, affected, emitKind, isPendingEmit, isBuildInfoEmit);
|
|
return { result: result, affected: affected };
|
|
}
|
|
function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken) {
|
|
return ts.concatenate(getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken), ts.Debug.checkDefined(state.program).getProgramDiagnostics(sourceFile));
|
|
}
|
|
function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken) {
|
|
var path = sourceFile.resolvedPath;
|
|
if (state.semanticDiagnosticsPerFile) {
|
|
var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
|
|
if (cachedDiagnostics) {
|
|
return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
|
|
}
|
|
}
|
|
var diagnostics = ts.Debug.checkDefined(state.program).getBindAndCheckDiagnostics(sourceFile, cancellationToken);
|
|
if (state.semanticDiagnosticsPerFile) {
|
|
state.semanticDiagnosticsPerFile.set(path, diagnostics);
|
|
}
|
|
return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
|
|
}
|
|
function isProgramBundleEmitBuildInfo(info) {
|
|
return !!ts.outFile(info.options || {});
|
|
}
|
|
ts.isProgramBundleEmitBuildInfo = isProgramBundleEmitBuildInfo;
|
|
function getProgramBuildInfo(state, getCanonicalFileName) {
|
|
var outFilePath = ts.outFile(state.compilerOptions);
|
|
if (outFilePath && !state.compilerOptions.composite)
|
|
return;
|
|
var currentDirectory = ts.Debug.checkDefined(state.program).getCurrentDirectory();
|
|
var buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(ts.getTsBuildInfoEmitOutputFilePath(state.compilerOptions), currentDirectory));
|
|
var latestChangedDtsFile = state.latestChangedDtsFile ? relativeToBuildInfoEnsuringAbsolutePath(state.latestChangedDtsFile) : undefined;
|
|
if (outFilePath) {
|
|
var fileNames_1 = [];
|
|
var fileInfos_1 = [];
|
|
state.program.getRootFileNames().forEach(function (f) {
|
|
var sourceFile = state.program.getSourceFile(f);
|
|
if (!sourceFile)
|
|
return;
|
|
fileNames_1.push(relativeToBuildInfo(sourceFile.resolvedPath));
|
|
fileInfos_1.push(sourceFile.version);
|
|
});
|
|
var result_15 = {
|
|
fileNames: fileNames_1,
|
|
fileInfos: fileInfos_1,
|
|
options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions, "affectsBundleEmitBuildInfo"),
|
|
outSignature: state.outSignature,
|
|
latestChangedDtsFile: latestChangedDtsFile,
|
|
};
|
|
return result_15;
|
|
}
|
|
var fileNames = [];
|
|
var fileNameToFileId = new ts.Map();
|
|
var fileIdsList;
|
|
var fileNamesToFileIdListId;
|
|
var emitSignatures;
|
|
var fileInfos = ts.arrayFrom(state.fileInfos.entries(), function (_a) {
|
|
var _b, _c;
|
|
var key = _a[0], value = _a[1];
|
|
var fileId = toFileId(key);
|
|
ts.Debug.assert(fileNames[fileId - 1] === relativeToBuildInfo(key));
|
|
var oldSignature = (_b = state.oldSignatures) === null || _b === void 0 ? void 0 : _b.get(key);
|
|
var actualSignature = oldSignature !== undefined ? oldSignature || undefined : value.signature;
|
|
if (state.compilerOptions.composite) {
|
|
var file = state.program.getSourceFileByPath(key);
|
|
if (!ts.isJsonSourceFile(file) && ts.sourceFileMayBeEmitted(file, state.program)) {
|
|
var emitSignature = (_c = state.emitSignatures) === null || _c === void 0 ? void 0 : _c.get(key);
|
|
if (emitSignature !== actualSignature) {
|
|
(emitSignatures || (emitSignatures = [])).push(emitSignature === undefined ? fileId : [fileId, emitSignature]);
|
|
}
|
|
}
|
|
}
|
|
return value.version === actualSignature ?
|
|
value.affectsGlobalScope || value.impliedFormat ?
|
|
{ version: value.version, signature: undefined, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat } :
|
|
value.version :
|
|
actualSignature !== undefined ?
|
|
oldSignature === undefined ?
|
|
value :
|
|
{ version: value.version, signature: actualSignature, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat } :
|
|
{ version: value.version, signature: false, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat };
|
|
});
|
|
var referencedMap;
|
|
if (state.referencedMap) {
|
|
referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
|
|
toFileId(key),
|
|
toFileIdListId(state.referencedMap.getValues(key))
|
|
]; });
|
|
}
|
|
var exportedModulesMap;
|
|
if (state.exportedModulesMap) {
|
|
exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
|
|
var _a;
|
|
var oldValue = (_a = state.oldExportedModulesMap) === null || _a === void 0 ? void 0 : _a.get(key);
|
|
if (oldValue === undefined)
|
|
return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
|
|
if (oldValue)
|
|
return [toFileId(key), toFileIdListId(oldValue)];
|
|
return undefined;
|
|
});
|
|
}
|
|
var semanticDiagnosticsPerFile;
|
|
if (state.semanticDiagnosticsPerFile) {
|
|
for (var _i = 0, _a = ts.arrayFrom(state.semanticDiagnosticsPerFile.keys()).sort(ts.compareStringsCaseSensitive); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
var value = state.semanticDiagnosticsPerFile.get(key);
|
|
(semanticDiagnosticsPerFile || (semanticDiagnosticsPerFile = [])).push(value.length ?
|
|
[
|
|
toFileId(key),
|
|
convertToReusableDiagnostics(value, relativeToBuildInfo)
|
|
] :
|
|
toFileId(key));
|
|
}
|
|
}
|
|
var affectedFilesPendingEmit;
|
|
if (state.affectedFilesPendingEmit) {
|
|
var seenFiles = new ts.Set();
|
|
for (var _b = 0, _c = state.affectedFilesPendingEmit.slice(state.affectedFilesPendingEmitIndex).sort(ts.compareStringsCaseSensitive); _b < _c.length; _b++) {
|
|
var path = _c[_b];
|
|
if (ts.tryAddToSet(seenFiles, path)) {
|
|
(affectedFilesPendingEmit || (affectedFilesPendingEmit = [])).push([toFileId(path), state.affectedFilesPendingEmitKind.get(path)]);
|
|
}
|
|
}
|
|
}
|
|
var changeFileSet;
|
|
if (state.changedFilesSet.size) {
|
|
for (var _d = 0, _e = ts.arrayFrom(state.changedFilesSet.keys()).sort(ts.compareStringsCaseSensitive); _d < _e.length; _d++) {
|
|
var path = _e[_d];
|
|
(changeFileSet || (changeFileSet = [])).push(toFileId(path));
|
|
}
|
|
}
|
|
var result = {
|
|
fileNames: fileNames,
|
|
fileInfos: fileInfos,
|
|
options: convertToProgramBuildInfoCompilerOptions(state.compilerOptions, "affectsMultiFileEmitBuildInfo"),
|
|
fileIdsList: fileIdsList,
|
|
referencedMap: referencedMap,
|
|
exportedModulesMap: exportedModulesMap,
|
|
semanticDiagnosticsPerFile: semanticDiagnosticsPerFile,
|
|
affectedFilesPendingEmit: affectedFilesPendingEmit,
|
|
changeFileSet: changeFileSet,
|
|
emitSignatures: emitSignatures,
|
|
latestChangedDtsFile: latestChangedDtsFile,
|
|
};
|
|
return result;
|
|
function relativeToBuildInfoEnsuringAbsolutePath(path) {
|
|
return relativeToBuildInfo(ts.getNormalizedAbsolutePath(path, currentDirectory));
|
|
}
|
|
function relativeToBuildInfo(path) {
|
|
return ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(buildInfoDirectory, path, getCanonicalFileName));
|
|
}
|
|
function toFileId(path) {
|
|
var fileId = fileNameToFileId.get(path);
|
|
if (fileId === undefined) {
|
|
fileNames.push(relativeToBuildInfo(path));
|
|
fileNameToFileId.set(path, fileId = fileNames.length);
|
|
}
|
|
return fileId;
|
|
}
|
|
function toFileIdListId(set) {
|
|
var fileIds = ts.arrayFrom(set.keys(), toFileId).sort(ts.compareValues);
|
|
var key = fileIds.join();
|
|
var fileIdListId = fileNamesToFileIdListId === null || fileNamesToFileIdListId === void 0 ? void 0 : fileNamesToFileIdListId.get(key);
|
|
if (fileIdListId === undefined) {
|
|
(fileIdsList || (fileIdsList = [])).push(fileIds);
|
|
(fileNamesToFileIdListId || (fileNamesToFileIdListId = new ts.Map())).set(key, fileIdListId = fileIdsList.length);
|
|
}
|
|
return fileIdListId;
|
|
}
|
|
function convertToProgramBuildInfoCompilerOptions(options, optionKey) {
|
|
var result;
|
|
var optionsNameMap = ts.getOptionsNameMap().optionsNameMap;
|
|
for (var _i = 0, _a = ts.getOwnKeys(options).sort(ts.compareStringsCaseSensitive); _i < _a.length; _i++) {
|
|
var name = _a[_i];
|
|
var optionInfo = optionsNameMap.get(name.toLowerCase());
|
|
if (optionInfo === null || optionInfo === void 0 ? void 0 : optionInfo[optionKey]) {
|
|
(result || (result = {}))[name] = convertToReusableCompilerOptionValue(optionInfo, options[name], relativeToBuildInfoEnsuringAbsolutePath);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
function convertToReusableCompilerOptionValue(option, value, relativeToBuildInfo) {
|
|
if (option) {
|
|
if (option.type === "list") {
|
|
var values = value;
|
|
if (option.element.isFilePath && values.length) {
|
|
return values.map(relativeToBuildInfo);
|
|
}
|
|
}
|
|
else if (option.isFilePath) {
|
|
return relativeToBuildInfo(value);
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
function convertToReusableDiagnostics(diagnostics, relativeToBuildInfo) {
|
|
ts.Debug.assert(!!diagnostics.length);
|
|
return diagnostics.map(function (diagnostic) {
|
|
var result = convertToReusableDiagnosticRelatedInformation(diagnostic, relativeToBuildInfo);
|
|
result.reportsUnnecessary = diagnostic.reportsUnnecessary;
|
|
result.reportDeprecated = diagnostic.reportsDeprecated;
|
|
result.source = diagnostic.source;
|
|
result.skippedOn = diagnostic.skippedOn;
|
|
var relatedInformation = diagnostic.relatedInformation;
|
|
result.relatedInformation = relatedInformation ?
|
|
relatedInformation.length ?
|
|
relatedInformation.map(function (r) { return convertToReusableDiagnosticRelatedInformation(r, relativeToBuildInfo); }) :
|
|
[] :
|
|
undefined;
|
|
return result;
|
|
});
|
|
}
|
|
function convertToReusableDiagnosticRelatedInformation(diagnostic, relativeToBuildInfo) {
|
|
var file = diagnostic.file;
|
|
return __assign(__assign({}, diagnostic), { file: file ? relativeToBuildInfo(file.resolvedPath) : undefined });
|
|
}
|
|
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, projectReferences) {
|
|
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({
|
|
rootNames: newProgramOrRootNames,
|
|
options: hostOrOptions,
|
|
host: oldProgramOrHost,
|
|
oldProgram: oldProgram && oldProgram.getProgramOrUndefined(),
|
|
configFileParsingDiagnostics: configFileParsingDiagnostics,
|
|
projectReferences: projectReferences
|
|
});
|
|
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 getTextHandlingSourceMapForSignature(text, data) {
|
|
return (data === null || data === void 0 ? void 0 : data.sourceMapUrlPos) !== undefined ? text.substring(0, data.sourceMapUrlPos) : text;
|
|
}
|
|
function computeSignatureWithDiagnostics(sourceFile, text, computeHash, getCanonicalFileName, data) {
|
|
var _a;
|
|
text = getTextHandlingSourceMapForSignature(text, data);
|
|
var sourceFileDirectory;
|
|
if ((_a = data === null || data === void 0 ? void 0 : data.diagnostics) === null || _a === void 0 ? void 0 : _a.length) {
|
|
text += data.diagnostics.map(function (diagnostic) {
|
|
return "".concat(locationInfo(diagnostic)).concat(ts.DiagnosticCategory[diagnostic.category]).concat(diagnostic.code, ": ").concat(flattenDiagnosticMessageText(diagnostic.messageText));
|
|
}).join("\n");
|
|
}
|
|
return (computeHash !== null && computeHash !== void 0 ? computeHash : ts.generateDjb2Hash)(text);
|
|
function flattenDiagnosticMessageText(diagnostic) {
|
|
return ts.isString(diagnostic) ?
|
|
diagnostic :
|
|
diagnostic === undefined ?
|
|
"" :
|
|
!diagnostic.next ?
|
|
diagnostic.messageText :
|
|
diagnostic.messageText + diagnostic.next.map(flattenDiagnosticMessageText).join("\n");
|
|
}
|
|
function locationInfo(diagnostic) {
|
|
if (diagnostic.file.resolvedPath === sourceFile.resolvedPath)
|
|
return "(".concat(diagnostic.start, ",").concat(diagnostic.length, ")");
|
|
if (sourceFileDirectory === undefined)
|
|
sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
|
|
return "".concat(ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(sourceFileDirectory, diagnostic.file.resolvedPath, getCanonicalFileName)), "(").concat(diagnostic.start, ",").concat(diagnostic.length, ")");
|
|
}
|
|
}
|
|
ts.computeSignatureWithDiagnostics = computeSignatureWithDiagnostics;
|
|
function computeSignature(text, computeHash, data) {
|
|
return (computeHash !== null && computeHash !== void 0 ? computeHash : ts.generateDjb2Hash)(getTextHandlingSourceMapForSignature(text, data));
|
|
}
|
|
ts.computeSignature = computeSignature;
|
|
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 = ts.maybeBind(host, host.createHash);
|
|
var state = createBuilderProgramState(newProgram, getCanonicalFileName, oldState, host.disableUseFileVersionAsSignature);
|
|
newProgram.getProgramBuildInfo = function () { return getProgramBuildInfo(state, getCanonicalFileName); };
|
|
newProgram = undefined;
|
|
oldProgram = undefined;
|
|
oldState = undefined;
|
|
var getState = function () { return state; };
|
|
var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
|
|
builderProgram.getState = getState;
|
|
builderProgram.saveEmitState = function () { return backupBuilderProgramEmitState(state); };
|
|
builderProgram.restoreEmitState = function (saved) { return restoreBuilderProgramEmitState(state, saved); };
|
|
builderProgram.hasChangedEmitSignature = function () { return !!state.hasChangedEmitSignature; };
|
|
builderProgram.getAllDependencies = function (sourceFile) { return ts.BuilderState.getAllDependencies(state, ts.Debug.checkDefined(state.program), sourceFile); };
|
|
builderProgram.getSemanticDiagnostics = getSemanticDiagnostics;
|
|
builderProgram.emit = emit;
|
|
builderProgram.releaseProgram = function () { return releaseCache(state); };
|
|
if (kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram) {
|
|
builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile;
|
|
}
|
|
else if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
|
|
builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile;
|
|
builderProgram.emitNextAffectedFile = emitNextAffectedFile;
|
|
builderProgram.emitBuildInfo = emitBuildInfo;
|
|
}
|
|
else {
|
|
ts.notImplemented();
|
|
}
|
|
return builderProgram;
|
|
function emitBuildInfo(writeFile, cancellationToken) {
|
|
if (state.buildInfoEmitPending) {
|
|
var result = ts.Debug.checkDefined(state.program).emitBuildInfo(writeFile || ts.maybeBind(host, host.writeFile), cancellationToken);
|
|
state.buildInfoEmitPending = false;
|
|
return result;
|
|
}
|
|
return ts.emitSkippedWithNoDiagnostics;
|
|
}
|
|
function emitNextAffectedFile(writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) {
|
|
var affected = getNextAffectedFile(state, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
var emitKind = 1;
|
|
var isPendingEmitFile = false;
|
|
if (!affected) {
|
|
if (!ts.outFile(state.compilerOptions)) {
|
|
var pendingAffectedFile = getNextAffectedFilePendingEmit(state);
|
|
if (!pendingAffectedFile) {
|
|
if (!state.buildInfoEmitPending) {
|
|
return undefined;
|
|
}
|
|
var affected_1 = ts.Debug.checkDefined(state.program);
|
|
return toAffectedFileEmitResult(state, affected_1.emitBuildInfo(writeFile || ts.maybeBind(host, host.writeFile), cancellationToken), affected_1, 1, false, true);
|
|
}
|
|
(affected = pendingAffectedFile.affectedFile, emitKind = pendingAffectedFile.emitKind);
|
|
isPendingEmitFile = true;
|
|
}
|
|
else {
|
|
var program = ts.Debug.checkDefined(state.program);
|
|
if (state.programEmitComplete)
|
|
return undefined;
|
|
affected = program;
|
|
}
|
|
}
|
|
return toAffectedFileEmitResult(state, ts.Debug.checkDefined(state.program).emit(affected === state.program ? undefined : affected, ts.getEmitDeclarations(state.compilerOptions) ?
|
|
getWriteFileCallback(writeFile, customTransformers) :
|
|
writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles || emitKind === 0, customTransformers), affected, emitKind, isPendingEmitFile);
|
|
}
|
|
function getWriteFileCallback(writeFile, customTransformers) {
|
|
return function (fileName, text, writeByteOrderMark, onError, sourceFiles, data) {
|
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
if (ts.isDeclarationFileName(fileName)) {
|
|
if (!ts.outFile(state.compilerOptions)) {
|
|
ts.Debug.assert((sourceFiles === null || sourceFiles === void 0 ? void 0 : sourceFiles.length) === 1);
|
|
var emitSignature = void 0;
|
|
if (!customTransformers) {
|
|
var file = sourceFiles[0];
|
|
var info = state.fileInfos.get(file.resolvedPath);
|
|
if (info.signature === file.version) {
|
|
var signature = computeSignatureWithDiagnostics(file, text, computeHash, getCanonicalFileName, data);
|
|
if (!((_a = data === null || data === void 0 ? void 0 : data.diagnostics) === null || _a === void 0 ? void 0 : _a.length))
|
|
emitSignature = signature;
|
|
if (signature !== file.version) {
|
|
if (host.storeFilesChangingSignatureDuringEmit)
|
|
((_b = state.filesChangingSignature) !== null && _b !== void 0 ? _b : (state.filesChangingSignature = new ts.Set())).add(file.resolvedPath);
|
|
if (state.exportedModulesMap)
|
|
ts.BuilderState.updateExportedModules(state, file, file.exportedModulesFromDeclarationEmit);
|
|
if (state.affectedFiles) {
|
|
var existing = (_c = state.oldSignatures) === null || _c === void 0 ? void 0 : _c.get(file.resolvedPath);
|
|
if (existing === undefined)
|
|
((_d = state.oldSignatures) !== null && _d !== void 0 ? _d : (state.oldSignatures = new ts.Map())).set(file.resolvedPath, info.signature || false);
|
|
info.signature = signature;
|
|
}
|
|
else {
|
|
info.signature = signature;
|
|
(_e = state.oldExportedModulesMap) === null || _e === void 0 ? void 0 : _e.clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (state.compilerOptions.composite) {
|
|
var filePath = sourceFiles[0].resolvedPath;
|
|
var oldSignature = (_f = state.emitSignatures) === null || _f === void 0 ? void 0 : _f.get(filePath);
|
|
emitSignature !== null && emitSignature !== void 0 ? emitSignature : (emitSignature = computeSignature(text, computeHash, data));
|
|
if (emitSignature === oldSignature)
|
|
return;
|
|
((_g = state.emitSignatures) !== null && _g !== void 0 ? _g : (state.emitSignatures = new ts.Map())).set(filePath, emitSignature);
|
|
state.hasChangedEmitSignature = true;
|
|
state.latestChangedDtsFile = fileName;
|
|
}
|
|
}
|
|
else if (state.compilerOptions.composite) {
|
|
var newSignature = computeSignature(text, computeHash, data);
|
|
if (newSignature === state.outSignature)
|
|
return;
|
|
state.outSignature = newSignature;
|
|
state.hasChangedEmitSignature = true;
|
|
state.latestChangedDtsFile = fileName;
|
|
}
|
|
}
|
|
if (writeFile)
|
|
writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
else if (host.writeFile)
|
|
host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
else
|
|
state.program.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
};
|
|
}
|
|
function emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) {
|
|
var _a;
|
|
if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
|
|
assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile);
|
|
}
|
|
var result = ts.handleNoEmitOptions(builderProgram, targetSourceFile, writeFile, cancellationToken);
|
|
if (result)
|
|
return result;
|
|
if (!targetSourceFile) {
|
|
if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
|
|
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
|
|
};
|
|
}
|
|
else if ((_a = state.affectedFilesPendingEmitKind) === null || _a === void 0 ? void 0 : _a.size) {
|
|
ts.Debug.assert(kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram);
|
|
if (!emitOnlyDtsFiles
|
|
|| ts.every(state.affectedFilesPendingEmit, function (path, index) {
|
|
return index < state.affectedFilesPendingEmitIndex ||
|
|
state.affectedFilesPendingEmitKind.get(path) === 0;
|
|
})) {
|
|
clearAffectedFilesPendingEmit(state);
|
|
}
|
|
}
|
|
}
|
|
return ts.Debug.checkDefined(state.program).emit(targetSourceFile, ts.getEmitDeclarations(state.compilerOptions) ?
|
|
getWriteFileCallback(writeFile, customTransformers) :
|
|
writeFile || ts.maybeBind(host, host.writeFile), cancellationToken, emitOnlyDtsFiles, customTransformers);
|
|
}
|
|
function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) {
|
|
while (true) {
|
|
var affected = getNextAffectedFile(state, cancellationToken, computeHash, getCanonicalFileName, host);
|
|
if (!affected) {
|
|
return undefined;
|
|
}
|
|
else if (affected === state.program) {
|
|
return toAffectedFileResult(state, state.program.getSemanticDiagnostics(undefined, cancellationToken), affected);
|
|
}
|
|
if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram || state.compilerOptions.noEmit || state.compilerOptions.noEmitOnError) {
|
|
addToAffectedFilesPendingEmit(state, affected.resolvedPath, 1);
|
|
}
|
|
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 = ts.Debug.checkDefined(state.program).getCompilerOptions();
|
|
if (ts.outFile(compilerOptions)) {
|
|
ts.Debug.assert(!state.semanticDiagnosticsPerFile);
|
|
return ts.Debug.checkDefined(state.program).getSemanticDiagnostics(sourceFile, cancellationToken);
|
|
}
|
|
if (sourceFile) {
|
|
return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken);
|
|
}
|
|
while (getSemanticDiagnosticsOfNextAffectedFile(cancellationToken)) {
|
|
}
|
|
var diagnostics;
|
|
for (var _i = 0, _a = ts.Debug.checkDefined(state.program).getSourceFiles(); _i < _a.length; _i++) {
|
|
var sourceFile_1 = _a[_i];
|
|
diagnostics = ts.addRange(diagnostics, getSemanticDiagnosticsOfFile(state, sourceFile_1, cancellationToken));
|
|
}
|
|
return diagnostics || ts.emptyArray;
|
|
}
|
|
}
|
|
ts.createBuilderProgram = createBuilderProgram;
|
|
function addToAffectedFilesPendingEmit(state, affectedFilePendingEmit, kind) {
|
|
if (!state.affectedFilesPendingEmit)
|
|
state.affectedFilesPendingEmit = [];
|
|
if (!state.affectedFilesPendingEmitKind)
|
|
state.affectedFilesPendingEmitKind = new ts.Map();
|
|
var existingKind = state.affectedFilesPendingEmitKind.get(affectedFilePendingEmit);
|
|
state.affectedFilesPendingEmit.push(affectedFilePendingEmit);
|
|
state.affectedFilesPendingEmitKind.set(affectedFilePendingEmit, existingKind || kind);
|
|
if (state.affectedFilesPendingEmitIndex === undefined) {
|
|
state.affectedFilesPendingEmitIndex = 0;
|
|
}
|
|
}
|
|
function toBuilderStateFileInfo(fileInfo) {
|
|
return ts.isString(fileInfo) ?
|
|
{ version: fileInfo, signature: fileInfo, affectsGlobalScope: undefined, impliedFormat: undefined } :
|
|
ts.isString(fileInfo.signature) ?
|
|
fileInfo :
|
|
{ version: fileInfo.version, signature: fileInfo.signature === false ? undefined : fileInfo.version, affectsGlobalScope: fileInfo.affectsGlobalScope, impliedFormat: fileInfo.impliedFormat };
|
|
}
|
|
ts.toBuilderStateFileInfo = toBuilderStateFileInfo;
|
|
function createBuilderProgramUsingProgramBuildInfo(program, buildInfoPath, host) {
|
|
var _a, _b, _c, _d;
|
|
var buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory()));
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
|
|
var state;
|
|
var filePaths;
|
|
var filePathsSetList;
|
|
var latestChangedDtsFile = program.latestChangedDtsFile ? toAbsolutePath(program.latestChangedDtsFile) : undefined;
|
|
if (isProgramBundleEmitBuildInfo(program)) {
|
|
state = {
|
|
fileInfos: new ts.Map(),
|
|
compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
|
|
latestChangedDtsFile: latestChangedDtsFile,
|
|
outSignature: program.outSignature,
|
|
};
|
|
}
|
|
else {
|
|
filePaths = (_a = program.fileNames) === null || _a === void 0 ? void 0 : _a.map(toPath);
|
|
filePathsSetList = (_b = program.fileIdsList) === null || _b === void 0 ? void 0 : _b.map(function (fileIds) { return new ts.Set(fileIds.map(toFilePath)); });
|
|
var fileInfos_2 = new ts.Map();
|
|
var emitSignatures_1 = ((_c = program.options) === null || _c === void 0 ? void 0 : _c.composite) && !ts.outFile(program.options) ? new ts.Map() : undefined;
|
|
program.fileInfos.forEach(function (fileInfo, index) {
|
|
var path = toFilePath(index + 1);
|
|
var stateFileInfo = toBuilderStateFileInfo(fileInfo);
|
|
fileInfos_2.set(path, stateFileInfo);
|
|
if (emitSignatures_1 && stateFileInfo.signature)
|
|
emitSignatures_1.set(path, stateFileInfo.signature);
|
|
});
|
|
(_d = program.emitSignatures) === null || _d === void 0 ? void 0 : _d.forEach(function (value) {
|
|
if (ts.isNumber(value))
|
|
emitSignatures_1.delete(toFilePath(value));
|
|
else
|
|
emitSignatures_1.set(toFilePath(value[0]), value[1]);
|
|
});
|
|
state = {
|
|
fileInfos: fileInfos_2,
|
|
compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
|
|
referencedMap: toManyToManyPathMap(program.referencedMap),
|
|
exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
|
|
semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
|
|
hasReusableDiagnostic: true,
|
|
affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
|
|
affectedFilesPendingEmitKind: program.affectedFilesPendingEmit && ts.arrayToMap(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }, function (value) { return value[1]; }),
|
|
affectedFilesPendingEmitIndex: program.affectedFilesPendingEmit && 0,
|
|
changedFilesSet: new ts.Set(ts.map(program.changeFileSet, toFilePath)),
|
|
latestChangedDtsFile: latestChangedDtsFile,
|
|
emitSignatures: (emitSignatures_1 === null || emitSignatures_1 === void 0 ? void 0 : emitSignatures_1.size) ? emitSignatures_1 : undefined,
|
|
};
|
|
}
|
|
return {
|
|
getState: function () { return state; },
|
|
saveEmitState: ts.noop,
|
|
restoreEmitState: ts.noop,
|
|
getProgram: ts.notImplemented,
|
|
getProgramOrUndefined: ts.returnUndefined,
|
|
releaseProgram: ts.noop,
|
|
getCompilerOptions: function () { return state.compilerOptions; },
|
|
getSourceFile: ts.notImplemented,
|
|
getSourceFiles: ts.notImplemented,
|
|
getOptionsDiagnostics: ts.notImplemented,
|
|
getGlobalDiagnostics: ts.notImplemented,
|
|
getConfigFileParsingDiagnostics: ts.notImplemented,
|
|
getSyntacticDiagnostics: ts.notImplemented,
|
|
getDeclarationDiagnostics: ts.notImplemented,
|
|
getSemanticDiagnostics: ts.notImplemented,
|
|
emit: ts.notImplemented,
|
|
getAllDependencies: ts.notImplemented,
|
|
getCurrentDirectory: ts.notImplemented,
|
|
emitNextAffectedFile: ts.notImplemented,
|
|
getSemanticDiagnosticsOfNextAffectedFile: ts.notImplemented,
|
|
emitBuildInfo: ts.notImplemented,
|
|
close: ts.noop,
|
|
hasChangedEmitSignature: ts.returnFalse,
|
|
};
|
|
function toPath(path) {
|
|
return ts.toPath(path, buildInfoDirectory, getCanonicalFileName);
|
|
}
|
|
function toAbsolutePath(path) {
|
|
return ts.getNormalizedAbsolutePath(path, buildInfoDirectory);
|
|
}
|
|
function toFilePath(fileId) {
|
|
return filePaths[fileId - 1];
|
|
}
|
|
function toFilePathsSet(fileIdsListId) {
|
|
return filePathsSetList[fileIdsListId - 1];
|
|
}
|
|
function toManyToManyPathMap(referenceMap) {
|
|
if (!referenceMap) {
|
|
return undefined;
|
|
}
|
|
var map = ts.BuilderState.createManyToManyPathMap();
|
|
referenceMap.forEach(function (_a) {
|
|
var fileId = _a[0], fileIdListId = _a[1];
|
|
return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
|
|
});
|
|
return map;
|
|
}
|
|
}
|
|
ts.createBuilderProgramUsingProgramBuildInfo = createBuilderProgramUsingProgramBuildInfo;
|
|
function getBuildInfoFileVersionMap(program, buildInfoPath, host) {
|
|
var buildInfoDirectory = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory()));
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
|
|
var fileInfos = new ts.Map();
|
|
program.fileInfos.forEach(function (fileInfo, index) {
|
|
var path = ts.toPath(program.fileNames[index], buildInfoDirectory, getCanonicalFileName);
|
|
var version = ts.isString(fileInfo) ? fileInfo : fileInfo.version;
|
|
fileInfos.set(path, version);
|
|
});
|
|
return fileInfos;
|
|
}
|
|
ts.getBuildInfoFileVersionMap = getBuildInfoFileVersionMap;
|
|
function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
|
|
return {
|
|
getState: ts.notImplemented,
|
|
saveEmitState: ts.noop,
|
|
restoreEmitState: ts.noop,
|
|
getProgram: getProgram,
|
|
getProgramOrUndefined: function () { return getState().program; },
|
|
releaseProgram: function () { return getState().program = undefined; },
|
|
getCompilerOptions: function () { return getState().compilerOptions; },
|
|
getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
|
|
getSourceFiles: function () { return getProgram().getSourceFiles(); },
|
|
getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
|
|
getGlobalDiagnostics: function (cancellationToken) { return getProgram().getGlobalDiagnostics(cancellationToken); },
|
|
getConfigFileParsingDiagnostics: function () { return configFileParsingDiagnostics; },
|
|
getSyntacticDiagnostics: function (sourceFile, cancellationToken) { return getProgram().getSyntacticDiagnostics(sourceFile, cancellationToken); },
|
|
getDeclarationDiagnostics: function (sourceFile, cancellationToken) { return getProgram().getDeclarationDiagnostics(sourceFile, cancellationToken); },
|
|
getSemanticDiagnostics: function (sourceFile, cancellationToken) { return getProgram().getSemanticDiagnostics(sourceFile, cancellationToken); },
|
|
emit: function (sourceFile, writeFile, cancellationToken, emitOnlyDts, customTransformers) { return getProgram().emit(sourceFile, writeFile, cancellationToken, emitOnlyDts, customTransformers); },
|
|
emitBuildInfo: function (writeFile, cancellationToken) { return getProgram().emitBuildInfo(writeFile, cancellationToken); },
|
|
getAllDependencies: ts.notImplemented,
|
|
getCurrentDirectory: function () { return getProgram().getCurrentDirectory(); },
|
|
close: ts.noop,
|
|
};
|
|
function getProgram() {
|
|
return ts.Debug.checkDefined(getState().program);
|
|
}
|
|
}
|
|
ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
|
|
return ts.createBuilderProgram(ts.BuilderProgramKind.SemanticDiagnosticsBuilderProgram, ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences));
|
|
}
|
|
ts.createSemanticDiagnosticsBuilderProgram = createSemanticDiagnosticsBuilderProgram;
|
|
function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
|
|
return ts.createBuilderProgram(ts.BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram, ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences));
|
|
}
|
|
ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
|
|
function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
|
|
var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
|
|
return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
|
|
}
|
|
ts.createAbstractBuilder = createAbstractBuilder;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function removeIgnoredPath(path) {
|
|
if (ts.endsWith(path, "/node_modules/.staging")) {
|
|
return ts.removeSuffix(path, "/.staging");
|
|
}
|
|
return ts.some(ts.ignoredPaths, function (searchPath) { return ts.stringContains(path, searchPath); }) ?
|
|
undefined :
|
|
path;
|
|
}
|
|
ts.removeIgnoredPath = removeIgnoredPath;
|
|
function canWatchDirectoryOrFile(dirPath) {
|
|
var rootLength = ts.getRootLength(dirPath);
|
|
if (dirPath.length === rootLength) {
|
|
return false;
|
|
}
|
|
var nextDirectorySeparator = dirPath.indexOf(ts.directorySeparator, rootLength);
|
|
if (nextDirectorySeparator === -1) {
|
|
return false;
|
|
}
|
|
var pathPartForUserCheck = dirPath.substring(rootLength, nextDirectorySeparator + 1);
|
|
var isNonDirectorySeparatorRoot = rootLength > 1 || dirPath.charCodeAt(0) !== 47;
|
|
if (isNonDirectorySeparatorRoot &&
|
|
dirPath.search(/[a-zA-Z]:/) !== 0 &&
|
|
pathPartForUserCheck.search(/[a-zA-z]\$\//) === 0) {
|
|
nextDirectorySeparator = dirPath.indexOf(ts.directorySeparator, nextDirectorySeparator + 1);
|
|
if (nextDirectorySeparator === -1) {
|
|
return false;
|
|
}
|
|
pathPartForUserCheck = dirPath.substring(rootLength + pathPartForUserCheck.length, nextDirectorySeparator + 1);
|
|
}
|
|
if (isNonDirectorySeparatorRoot &&
|
|
pathPartForUserCheck.search(/users\//i) !== 0) {
|
|
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;
|
|
}
|
|
ts.canWatchDirectoryOrFile = canWatchDirectoryOrFile;
|
|
function createResolutionCache(resolutionHost, rootDirForResolution, logChangesWhenResolvingModule) {
|
|
var filesWithChangedSetOfUnresolvedImports;
|
|
var filesWithInvalidatedResolutions;
|
|
var filesWithInvalidatedNonRelativeUnresolvedImports;
|
|
var nonRelativeExternalModuleResolutions = ts.createMultiMap();
|
|
var resolutionsWithFailedLookups = [];
|
|
var resolutionsWithOnlyAffectingLocations = [];
|
|
var resolvedFileToResolution = ts.createMultiMap();
|
|
var impliedFormatPackageJsons = new ts.Map();
|
|
var hasChangedAutomaticTypeDirectiveNames = false;
|
|
var affectingPathChecksForFile;
|
|
var affectingPathChecks;
|
|
var failedLookupChecks;
|
|
var startsWithPathChecks;
|
|
var isInDirectoryChecks;
|
|
var getCurrentDirectory = ts.memoize(function () { return resolutionHost.getCurrentDirectory(); });
|
|
var cachedDirectoryStructureHost = resolutionHost.getCachedDirectoryStructureHost();
|
|
var resolvedModuleNames = new ts.Map();
|
|
var perDirectoryResolvedModuleNames = ts.createCacheWithRedirects();
|
|
var nonRelativeModuleNameCache = ts.createCacheWithRedirects();
|
|
var moduleResolutionCache = ts.createModuleResolutionCache(getCurrentDirectory(), resolutionHost.getCanonicalFileName, undefined, perDirectoryResolvedModuleNames, nonRelativeModuleNameCache);
|
|
var resolvedTypeReferenceDirectives = new ts.Map();
|
|
var perDirectoryResolvedTypeReferenceDirectives = ts.createCacheWithRedirects();
|
|
var typeReferenceDirectiveResolutionCache = ts.createTypeReferenceDirectiveResolutionCache(getCurrentDirectory(), resolutionHost.getCanonicalFileName, undefined, moduleResolutionCache.getPackageJsonInfoCache(), perDirectoryResolvedTypeReferenceDirectives);
|
|
var failedLookupDefaultExtensions = [".ts", ".tsx", ".js", ".jsx", ".json"];
|
|
var customFailedLookupPaths = new ts.Map();
|
|
var directoryWatchesOfFailedLookups = new ts.Map();
|
|
var fileWatchesOfAffectingLocations = new ts.Map();
|
|
var rootDir = rootDirForResolution && ts.removeTrailingDirectorySeparator(ts.getNormalizedAbsolutePath(rootDirForResolution, getCurrentDirectory()));
|
|
var rootPath = (rootDir && resolutionHost.toPath(rootDir));
|
|
var rootSplitLength = rootPath !== undefined ? rootPath.split(ts.directorySeparator).length : 0;
|
|
var typeRootsWatches = new ts.Map();
|
|
return {
|
|
getModuleResolutionCache: function () { return moduleResolutionCache; },
|
|
startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
|
|
finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
|
|
startCachingPerDirectoryResolution: startCachingPerDirectoryResolution,
|
|
finishCachingPerDirectoryResolution: finishCachingPerDirectoryResolution,
|
|
resolveModuleNames: resolveModuleNames,
|
|
getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
|
|
resolveTypeReferenceDirectives: resolveTypeReferenceDirectives,
|
|
removeResolutionsFromProjectReferenceRedirects: removeResolutionsFromProjectReferenceRedirects,
|
|
removeResolutionsOfFile: removeResolutionsOfFile,
|
|
hasChangedAutomaticTypeDirectiveNames: function () { return hasChangedAutomaticTypeDirectiveNames; },
|
|
invalidateResolutionOfFile: invalidateResolutionOfFile,
|
|
invalidateResolutionsOfFailedLookupLocations: invalidateResolutionsOfFailedLookupLocations,
|
|
setFilesWithInvalidatedNonRelativeUnresolvedImports: setFilesWithInvalidatedNonRelativeUnresolvedImports,
|
|
createHasInvalidatedResolution: createHasInvalidatedResolution,
|
|
isFileWithInvalidatedNonRelativeUnresolvedImports: isFileWithInvalidatedNonRelativeUnresolvedImports,
|
|
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);
|
|
ts.clearMap(fileWatchesOfAffectingLocations, ts.closeFileWatcherOf);
|
|
customFailedLookupPaths.clear();
|
|
nonRelativeExternalModuleResolutions.clear();
|
|
closeTypeRootsWatch();
|
|
resolvedModuleNames.clear();
|
|
resolvedTypeReferenceDirectives.clear();
|
|
resolvedFileToResolution.clear();
|
|
resolutionsWithFailedLookups.length = 0;
|
|
resolutionsWithOnlyAffectingLocations.length = 0;
|
|
failedLookupChecks = undefined;
|
|
startsWithPathChecks = undefined;
|
|
isInDirectoryChecks = undefined;
|
|
affectingPathChecks = undefined;
|
|
affectingPathChecksForFile = undefined;
|
|
moduleResolutionCache.clear();
|
|
typeReferenceDirectiveResolutionCache.clear();
|
|
impliedFormatPackageJsons.clear();
|
|
hasChangedAutomaticTypeDirectiveNames = false;
|
|
}
|
|
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) {
|
|
invalidateResolutionsOfFailedLookupLocations();
|
|
if (forceAllFilesAsInvalidated) {
|
|
filesWithInvalidatedResolutions = undefined;
|
|
return ts.returnTrue;
|
|
}
|
|
var collected = filesWithInvalidatedResolutions;
|
|
filesWithInvalidatedResolutions = undefined;
|
|
return function (path) { return (!!collected && collected.has(path)) ||
|
|
isFileWithInvalidatedNonRelativeUnresolvedImports(path); };
|
|
}
|
|
function startCachingPerDirectoryResolution() {
|
|
moduleResolutionCache.clearAllExceptPackageJsonInfoCache();
|
|
typeReferenceDirectiveResolutionCache.clearAllExceptPackageJsonInfoCache();
|
|
nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions);
|
|
nonRelativeExternalModuleResolutions.clear();
|
|
}
|
|
function finishCachingPerDirectoryResolution(newProgram, oldProgram) {
|
|
filesWithInvalidatedNonRelativeUnresolvedImports = undefined;
|
|
nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfNonRelativeModuleResolutions);
|
|
nonRelativeExternalModuleResolutions.clear();
|
|
if (newProgram !== oldProgram) {
|
|
newProgram === null || newProgram === void 0 ? void 0 : newProgram.getSourceFiles().forEach(function (newFile) {
|
|
var _a, _b, _c;
|
|
var expected = ts.isExternalOrCommonJsModule(newFile) ? (_b = (_a = newFile.packageJsonLocations) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 : 0;
|
|
var existing = (_c = impliedFormatPackageJsons.get(newFile.path)) !== null && _c !== void 0 ? _c : ts.emptyArray;
|
|
for (var i = existing.length; i < expected; i++) {
|
|
createFileWatcherOfAffectingLocation(newFile.packageJsonLocations[i], false);
|
|
}
|
|
if (existing.length > expected) {
|
|
for (var i = expected; i < existing.length; i++) {
|
|
fileWatchesOfAffectingLocations.get(existing[i]).files--;
|
|
}
|
|
}
|
|
if (expected)
|
|
impliedFormatPackageJsons.set(newFile.path, newFile.packageJsonLocations);
|
|
else
|
|
impliedFormatPackageJsons.delete(newFile.path);
|
|
});
|
|
impliedFormatPackageJsons.forEach(function (existing, path) {
|
|
if (!(newProgram === null || newProgram === void 0 ? void 0 : newProgram.getSourceFileByPath(path))) {
|
|
existing.forEach(function (location) { return fileWatchesOfAffectingLocations.get(location).files--; });
|
|
impliedFormatPackageJsons.delete(path);
|
|
}
|
|
});
|
|
}
|
|
directoryWatchesOfFailedLookups.forEach(function (watcher, path) {
|
|
if (watcher.refCount === 0) {
|
|
directoryWatchesOfFailedLookups.delete(path);
|
|
watcher.watcher.close();
|
|
}
|
|
});
|
|
fileWatchesOfAffectingLocations.forEach(function (watcher, path) {
|
|
if (watcher.files === 0 && watcher.resolutions === 0) {
|
|
fileWatchesOfAffectingLocations.delete(path);
|
|
watcher.watcher.close();
|
|
}
|
|
});
|
|
hasChangedAutomaticTypeDirectiveNames = false;
|
|
}
|
|
function resolveModuleName(moduleName, containingFile, compilerOptions, host, redirectedReference, _containingSourceFile, mode) {
|
|
var _a, _b;
|
|
var primaryResult = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host, moduleResolutionCache, redirectedReference, mode);
|
|
if (!resolutionHost.getGlobalCache) {
|
|
return primaryResult;
|
|
}
|
|
var globalCache = resolutionHost.getGlobalCache();
|
|
if (globalCache !== undefined && !ts.isExternalModuleNameRelative(moduleName) && !(primaryResult.resolvedModule && ts.extensionIsTS(primaryResult.resolvedModule.extension))) {
|
|
var _c = ts.loadModuleFromGlobalCache(ts.Debug.checkDefined(resolutionHost.globalCacheResolutionModuleName)(moduleName), resolutionHost.projectName, compilerOptions, host, globalCache, moduleResolutionCache), resolvedModule = _c.resolvedModule, failedLookupLocations = _c.failedLookupLocations, affectingLocations = _c.affectingLocations;
|
|
if (resolvedModule) {
|
|
primaryResult.resolvedModule = resolvedModule;
|
|
(_a = primaryResult.failedLookupLocations).push.apply(_a, failedLookupLocations);
|
|
(_b = primaryResult.affectingLocations).push.apply(_b, affectingLocations);
|
|
return primaryResult;
|
|
}
|
|
}
|
|
return primaryResult;
|
|
}
|
|
function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, _containingSourceFile, resolutionMode) {
|
|
return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache, resolutionMode);
|
|
}
|
|
function resolveNamesWithLocalCache(_a) {
|
|
var _b, _c, _d;
|
|
var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges, containingSourceFile = _a.containingSourceFile, containingSourceFileMode = _a.containingSourceFileMode;
|
|
var path = resolutionHost.toPath(containingFile);
|
|
var resolutionsInFile = cache.get(path) || cache.set(path, ts.createModeAwareCache()).get(path);
|
|
var dirPath = ts.getDirectoryPath(path);
|
|
var perDirectoryCache = perDirectoryCacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
|
|
var perDirectoryResolution = perDirectoryCache.get(dirPath);
|
|
if (!perDirectoryResolution) {
|
|
perDirectoryResolution = ts.createModeAwareCache();
|
|
perDirectoryCache.set(dirPath, perDirectoryResolution);
|
|
}
|
|
var resolvedModules = [];
|
|
var compilerOptions = resolutionHost.getCompilationSettings();
|
|
var hasInvalidatedNonRelativeUnresolvedImport = logChanges && isFileWithInvalidatedNonRelativeUnresolvedImports(path);
|
|
var program = resolutionHost.getCurrentProgram();
|
|
var oldRedirect = program && program.getResolvedProjectReferenceToRedirect(containingFile);
|
|
var unmatchedRedirects = oldRedirect ?
|
|
!redirectedReference || redirectedReference.sourceFile.path !== oldRedirect.sourceFile.path :
|
|
!!redirectedReference;
|
|
var seenNamesInFile = ts.createModeAwareCache();
|
|
var i = 0;
|
|
for (var _i = 0, names_5 = names; _i < names_5.length; _i++) {
|
|
var entry = names_5[_i];
|
|
var name = ts.isString(entry) ? entry : entry.fileName.toLowerCase();
|
|
var mode = !ts.isString(entry) ? ts.getModeForFileReference(entry, containingSourceFileMode) :
|
|
containingSourceFile ? ts.getModeForResolutionAtIndex(containingSourceFile, i) : undefined;
|
|
i++;
|
|
var resolution = resolutionsInFile.get(name, mode);
|
|
if (!seenNamesInFile.has(name, mode) &&
|
|
unmatchedRedirects || !resolution || resolution.isInvalidated ||
|
|
(hasInvalidatedNonRelativeUnresolvedImport && !ts.isExternalModuleNameRelative(name) && shouldRetryResolution(resolution))) {
|
|
var existingResolution = resolution;
|
|
var resolutionInDirectory = perDirectoryResolution.get(name, mode);
|
|
if (resolutionInDirectory) {
|
|
resolution = resolutionInDirectory;
|
|
var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
|
|
if (ts.isTraceEnabled(compilerOptions, host)) {
|
|
var resolved = getResolutionWithResolvedFileName(resolution);
|
|
ts.trace(host, loader === resolveModuleName ?
|
|
(resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
|
|
resolved.packagetId ?
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
|
|
(resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
|
|
resolved.packagetId ?
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
|
|
}
|
|
}
|
|
else {
|
|
resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference, containingSourceFile, mode);
|
|
perDirectoryResolution.set(name, mode, resolution);
|
|
if (resolutionHost.onDiscoveredSymlink && resolutionIsSymlink(resolution)) {
|
|
resolutionHost.onDiscoveredSymlink();
|
|
}
|
|
}
|
|
resolutionsInFile.set(name, mode, resolution);
|
|
watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, path, getResolutionWithResolvedFileName);
|
|
if (existingResolution) {
|
|
stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolutionWithResolvedFileName);
|
|
}
|
|
if (logChanges && filesWithChangedSetOfUnresolvedImports && !resolutionIsEqualTo(existingResolution, resolution)) {
|
|
filesWithChangedSetOfUnresolvedImports.push(path);
|
|
logChanges = false;
|
|
}
|
|
}
|
|
else {
|
|
var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
|
|
if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name, mode)) {
|
|
var resolved = getResolutionWithResolvedFileName(resolution);
|
|
ts.trace(host, loader === resolveModuleName ?
|
|
(resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
|
|
resolved.packagetId ?
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
|
|
ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
|
|
(resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
|
|
resolved.packagetId ?
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
|
|
ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
|
|
}
|
|
}
|
|
ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
|
|
seenNamesInFile.set(name, mode, true);
|
|
resolvedModules.push(getResolutionWithResolvedFileName(resolution));
|
|
}
|
|
resolutionsInFile.forEach(function (resolution, name, mode) {
|
|
if (!seenNamesInFile.has(name, mode) && !ts.contains(reusedNames, name)) {
|
|
stopWatchFailedLookupLocationOfResolution(resolution, path, getResolutionWithResolvedFileName);
|
|
resolutionsInFile.delete(name, mode);
|
|
}
|
|
});
|
|
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, redirectedReference, containingFileMode) {
|
|
return resolveNamesWithLocalCache({
|
|
names: typeDirectiveNames,
|
|
containingFile: containingFile,
|
|
redirectedReference: redirectedReference,
|
|
cache: resolvedTypeReferenceDirectives,
|
|
perDirectoryCacheWithRedirects: perDirectoryResolvedTypeReferenceDirectives,
|
|
loader: resolveTypeReferenceDirective,
|
|
getResolutionWithResolvedFileName: getResolvedTypeReferenceDirective,
|
|
shouldRetryResolution: function (resolution) { return resolution.resolvedTypeReferenceDirective === undefined; },
|
|
containingSourceFileMode: containingFileMode
|
|
});
|
|
}
|
|
function resolveModuleNames(moduleNames, containingFile, reusedNames, redirectedReference, containingSourceFile) {
|
|
return resolveNamesWithLocalCache({
|
|
names: moduleNames,
|
|
containingFile: containingFile,
|
|
redirectedReference: redirectedReference,
|
|
cache: resolvedModuleNames,
|
|
perDirectoryCacheWithRedirects: perDirectoryResolvedModuleNames,
|
|
loader: resolveModuleName,
|
|
getResolutionWithResolvedFileName: getResolvedModule,
|
|
shouldRetryResolution: function (resolution) { return !resolution.resolvedModule || !ts.resolutionExtensionIsTSOrJson(resolution.resolvedModule.extension); },
|
|
reusedNames: reusedNames,
|
|
logChanges: logChangesWhenResolvingModule,
|
|
containingSourceFile: containingSourceFile,
|
|
});
|
|
}
|
|
function getResolvedModuleWithFailedLookupLocationsFromCache(moduleName, containingFile, resolutionMode) {
|
|
var cache = resolvedModuleNames.get(resolutionHost.toPath(containingFile));
|
|
if (!cache)
|
|
return undefined;
|
|
return cache.get(moduleName, resolutionMode);
|
|
}
|
|
function isNodeModulesAtTypesDirectory(dirPath) {
|
|
return ts.endsWith(dirPath, "/node_modules/@types");
|
|
}
|
|
function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath) {
|
|
if (isInDirectoryPath(rootPath, failedLookupLocationPath)) {
|
|
failedLookupLocation = ts.isRootedDiskPath(failedLookupLocation) ? ts.normalizePath(failedLookupLocation) : ts.getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory());
|
|
var failedLookupPathSplit = failedLookupLocationPath.split(ts.directorySeparator);
|
|
var failedLookupSplit = failedLookupLocation.split(ts.directorySeparator);
|
|
ts.Debug.assert(failedLookupSplit.length === failedLookupPathSplit.length, "FailedLookup: ".concat(failedLookupLocation, " failedLookupLocationPath: ").concat(failedLookupLocationPath));
|
|
if (failedLookupPathSplit.length > rootSplitLength + 1) {
|
|
return {
|
|
dir: failedLookupSplit.slice(0, rootSplitLength + 1).join(ts.directorySeparator),
|
|
dirPath: failedLookupPathSplit.slice(0, rootSplitLength + 1).join(ts.directorySeparator)
|
|
};
|
|
}
|
|
else {
|
|
return {
|
|
dir: rootDir,
|
|
dirPath: rootPath,
|
|
nonRecursive: false
|
|
};
|
|
}
|
|
}
|
|
return getDirectoryToWatchFromFailedLookupLocationDirectory(ts.getDirectoryPath(ts.getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory())), ts.getDirectoryPath(failedLookupLocationPath));
|
|
}
|
|
function getDirectoryToWatchFromFailedLookupLocationDirectory(dir, dirPath) {
|
|
while (ts.pathContainsNodeModules(dirPath)) {
|
|
dir = ts.getDirectoryPath(dir);
|
|
dirPath = ts.getDirectoryPath(dirPath);
|
|
}
|
|
if (ts.isNodeModulesDirectory(dirPath)) {
|
|
return canWatchDirectoryOrFile(ts.getDirectoryPath(dirPath)) ? { dir: dir, dirPath: dirPath } : undefined;
|
|
}
|
|
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 canWatchDirectoryOrFile(dirPath) ? { dir: subDirectory || dir, dirPath: subDirectoryPath || dirPath, nonRecursive: nonRecursive } : undefined;
|
|
}
|
|
function isPathWithDefaultFailedLookupExtension(path) {
|
|
return ts.fileExtensionIsOneOf(path, failedLookupDefaultExtensions);
|
|
}
|
|
function watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, filePath, getResolutionWithResolvedFileName) {
|
|
if (resolution.refCount) {
|
|
resolution.refCount++;
|
|
ts.Debug.assertIsDefined(resolution.files);
|
|
}
|
|
else {
|
|
resolution.refCount = 1;
|
|
ts.Debug.assert(ts.length(resolution.files) === 0);
|
|
if (ts.isExternalModuleNameRelative(name)) {
|
|
watchFailedLookupLocationOfResolution(resolution);
|
|
}
|
|
else {
|
|
nonRelativeExternalModuleResolutions.add(name, resolution);
|
|
}
|
|
var resolved = getResolutionWithResolvedFileName(resolution);
|
|
if (resolved && resolved.resolvedFileName) {
|
|
resolvedFileToResolution.add(resolutionHost.toPath(resolved.resolvedFileName), resolution);
|
|
}
|
|
}
|
|
(resolution.files || (resolution.files = [])).push(filePath);
|
|
}
|
|
function watchFailedLookupLocationOfResolution(resolution) {
|
|
ts.Debug.assert(!!resolution.refCount);
|
|
var failedLookupLocations = resolution.failedLookupLocations, affectingLocations = resolution.affectingLocations;
|
|
if (!failedLookupLocations.length && !affectingLocations.length)
|
|
return;
|
|
if (failedLookupLocations.length)
|
|
resolutionsWithFailedLookups.push(resolution);
|
|
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 toWatch = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath);
|
|
if (toWatch) {
|
|
var dir = toWatch.dir, dirPath = toWatch.dirPath, nonRecursive = toWatch.nonRecursive;
|
|
if (!isPathWithDefaultFailedLookupExtension(failedLookupLocationPath)) {
|
|
var refCount = customFailedLookupPaths.get(failedLookupLocationPath) || 0;
|
|
customFailedLookupPaths.set(failedLookupLocationPath, refCount + 1);
|
|
}
|
|
if (dirPath === rootPath) {
|
|
ts.Debug.assert(!nonRecursive);
|
|
setAtRoot = true;
|
|
}
|
|
else {
|
|
setDirectoryWatcher(dir, dirPath, nonRecursive);
|
|
}
|
|
}
|
|
}
|
|
if (setAtRoot) {
|
|
setDirectoryWatcher(rootDir, rootPath, true);
|
|
}
|
|
watchAffectingLocationsOfResolution(resolution, !failedLookupLocations.length);
|
|
}
|
|
function watchAffectingLocationsOfResolution(resolution, addToResolutionsWithOnlyAffectingLocations) {
|
|
ts.Debug.assert(!!resolution.refCount);
|
|
var affectingLocations = resolution.affectingLocations;
|
|
if (!affectingLocations.length)
|
|
return;
|
|
if (addToResolutionsWithOnlyAffectingLocations)
|
|
resolutionsWithOnlyAffectingLocations.push(resolution);
|
|
for (var _i = 0, affectingLocations_1 = affectingLocations; _i < affectingLocations_1.length; _i++) {
|
|
var affectingLocation = affectingLocations_1[_i];
|
|
createFileWatcherOfAffectingLocation(affectingLocation, true);
|
|
}
|
|
}
|
|
function createFileWatcherOfAffectingLocation(affectingLocation, forResolution) {
|
|
var fileWatcher = fileWatchesOfAffectingLocations.get(affectingLocation);
|
|
if (fileWatcher) {
|
|
if (forResolution)
|
|
fileWatcher.resolutions++;
|
|
else
|
|
fileWatcher.files++;
|
|
return;
|
|
}
|
|
var locationToWatch = affectingLocation;
|
|
if (resolutionHost.realpath) {
|
|
locationToWatch = resolutionHost.realpath(affectingLocation);
|
|
if (affectingLocation !== locationToWatch) {
|
|
var fileWatcher_1 = fileWatchesOfAffectingLocations.get(locationToWatch);
|
|
if (fileWatcher_1) {
|
|
if (forResolution)
|
|
fileWatcher_1.resolutions++;
|
|
else
|
|
fileWatcher_1.files++;
|
|
fileWatcher_1.paths.add(affectingLocation);
|
|
fileWatchesOfAffectingLocations.set(affectingLocation, fileWatcher_1);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
var paths = new ts.Set();
|
|
paths.add(locationToWatch);
|
|
var actualWatcher = canWatchDirectoryOrFile(resolutionHost.toPath(locationToWatch)) ?
|
|
resolutionHost.watchAffectingFileLocation(locationToWatch, function (fileName, eventKind) {
|
|
cachedDirectoryStructureHost === null || cachedDirectoryStructureHost === void 0 ? void 0 : cachedDirectoryStructureHost.addOrDeleteFile(fileName, resolutionHost.toPath(locationToWatch), eventKind);
|
|
var packageJsonMap = moduleResolutionCache.getPackageJsonInfoCache().getInternalMap();
|
|
paths.forEach(function (path) {
|
|
if (watcher.resolutions)
|
|
(affectingPathChecks !== null && affectingPathChecks !== void 0 ? affectingPathChecks : (affectingPathChecks = new ts.Set())).add(path);
|
|
if (watcher.files)
|
|
(affectingPathChecksForFile !== null && affectingPathChecksForFile !== void 0 ? affectingPathChecksForFile : (affectingPathChecksForFile = new ts.Set())).add(path);
|
|
packageJsonMap === null || packageJsonMap === void 0 ? void 0 : packageJsonMap.delete(resolutionHost.toPath(path));
|
|
});
|
|
resolutionHost.scheduleInvalidateResolutionsOfFailedLookupLocations();
|
|
}) : ts.noopFileWatcher;
|
|
var watcher = {
|
|
watcher: actualWatcher !== ts.noopFileWatcher ? {
|
|
close: function () {
|
|
actualWatcher.close();
|
|
actualWatcher = ts.noopFileWatcher;
|
|
}
|
|
} : actualWatcher,
|
|
resolutions: forResolution ? 1 : 0,
|
|
files: forResolution ? 0 : 1,
|
|
paths: paths,
|
|
};
|
|
fileWatchesOfAffectingLocations.set(locationToWatch, watcher);
|
|
if (affectingLocation !== locationToWatch) {
|
|
fileWatchesOfAffectingLocations.set(affectingLocation, watcher);
|
|
paths.add(affectingLocation);
|
|
}
|
|
}
|
|
function watchFailedLookupLocationOfNonRelativeModuleResolutions(resolutions, name) {
|
|
var program = resolutionHost.getCurrentProgram();
|
|
if (!program || !program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(name)) {
|
|
resolutions.forEach(watchFailedLookupLocationOfResolution);
|
|
}
|
|
else {
|
|
resolutions.forEach(function (resolution) { return watchAffectingLocationsOfResolution(resolution, true); });
|
|
}
|
|
}
|
|
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, filePath, getResolutionWithResolvedFileName) {
|
|
ts.unorderedRemoveItem(ts.Debug.checkDefined(resolution.files), filePath);
|
|
resolution.refCount--;
|
|
if (resolution.refCount) {
|
|
return;
|
|
}
|
|
var resolved = getResolutionWithResolvedFileName(resolution);
|
|
if (resolved && resolved.resolvedFileName) {
|
|
resolvedFileToResolution.remove(resolutionHost.toPath(resolved.resolvedFileName), resolution);
|
|
}
|
|
var failedLookupLocations = resolution.failedLookupLocations, affectingLocations = resolution.affectingLocations;
|
|
if (ts.unorderedRemoveItem(resolutionsWithFailedLookups, resolution)) {
|
|
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 toWatch = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath);
|
|
if (toWatch) {
|
|
var dirPath = toWatch.dirPath;
|
|
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);
|
|
}
|
|
}
|
|
else if (affectingLocations.length) {
|
|
ts.unorderedRemoveItem(resolutionsWithOnlyAffectingLocations, resolution);
|
|
}
|
|
for (var _a = 0, affectingLocations_2 = affectingLocations; _a < affectingLocations_2.length; _a++) {
|
|
var affectingLocation = affectingLocations_2[_a];
|
|
var watcher = fileWatchesOfAffectingLocations.get(affectingLocation);
|
|
watcher.resolutions--;
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath);
|
|
}, nonRecursive ? 0 : 1);
|
|
}
|
|
function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName) {
|
|
var resolutions = cache.get(filePath);
|
|
if (resolutions) {
|
|
resolutions.forEach(function (resolution) { return stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName); });
|
|
cache.delete(filePath);
|
|
}
|
|
}
|
|
function removeResolutionsFromProjectReferenceRedirects(filePath) {
|
|
if (!ts.fileExtensionIs(filePath, ".json"))
|
|
return;
|
|
var program = resolutionHost.getCurrentProgram();
|
|
if (!program)
|
|
return;
|
|
var resolvedProjectReference = program.getResolvedProjectReferenceByPath(filePath);
|
|
if (!resolvedProjectReference)
|
|
return;
|
|
resolvedProjectReference.commandLine.fileNames.forEach(function (f) { return removeResolutionsOfFile(resolutionHost.toPath(f)); });
|
|
}
|
|
function removeResolutionsOfFile(filePath) {
|
|
removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModule);
|
|
removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirective);
|
|
}
|
|
function invalidateResolutions(resolutions, canInvalidate) {
|
|
if (!resolutions)
|
|
return false;
|
|
var invalidated = false;
|
|
for (var _i = 0, resolutions_1 = resolutions; _i < resolutions_1.length; _i++) {
|
|
var resolution = resolutions_1[_i];
|
|
if (resolution.isInvalidated || !canInvalidate(resolution))
|
|
continue;
|
|
resolution.isInvalidated = invalidated = true;
|
|
for (var _a = 0, _b = ts.Debug.checkDefined(resolution.files); _a < _b.length; _a++) {
|
|
var containingFilePath = _b[_a];
|
|
(filesWithInvalidatedResolutions !== null && filesWithInvalidatedResolutions !== void 0 ? filesWithInvalidatedResolutions : (filesWithInvalidatedResolutions = new ts.Set())).add(containingFilePath);
|
|
hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames || ts.endsWith(containingFilePath, ts.inferredTypesContainingFile);
|
|
}
|
|
}
|
|
return invalidated;
|
|
}
|
|
function invalidateResolutionOfFile(filePath) {
|
|
removeResolutionsOfFile(filePath);
|
|
var prevHasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
|
|
if (invalidateResolutions(resolvedFileToResolution.get(filePath), ts.returnTrue) &&
|
|
hasChangedAutomaticTypeDirectiveNames &&
|
|
!prevHasChangedAutomaticTypeDirectiveNames) {
|
|
resolutionHost.onChangedAutomaticTypeDirectiveNames();
|
|
}
|
|
}
|
|
function setFilesWithInvalidatedNonRelativeUnresolvedImports(filesMap) {
|
|
ts.Debug.assert(filesWithInvalidatedNonRelativeUnresolvedImports === filesMap || filesWithInvalidatedNonRelativeUnresolvedImports === undefined);
|
|
filesWithInvalidatedNonRelativeUnresolvedImports = filesMap;
|
|
}
|
|
function scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, isCreatingWatchedDirectory) {
|
|
if (isCreatingWatchedDirectory) {
|
|
(isInDirectoryChecks || (isInDirectoryChecks = new ts.Set())).add(fileOrDirectoryPath);
|
|
}
|
|
else {
|
|
var updatedPath = removeIgnoredPath(fileOrDirectoryPath);
|
|
if (!updatedPath)
|
|
return false;
|
|
fileOrDirectoryPath = updatedPath;
|
|
if (resolutionHost.fileIsOpen(fileOrDirectoryPath)) {
|
|
return false;
|
|
}
|
|
var dirOfFileOrDirectory = ts.getDirectoryPath(fileOrDirectoryPath);
|
|
if (isNodeModulesAtTypesDirectory(fileOrDirectoryPath) || ts.isNodeModulesDirectory(fileOrDirectoryPath) ||
|
|
isNodeModulesAtTypesDirectory(dirOfFileOrDirectory) || ts.isNodeModulesDirectory(dirOfFileOrDirectory)) {
|
|
(failedLookupChecks || (failedLookupChecks = new ts.Set())).add(fileOrDirectoryPath);
|
|
(startsWithPathChecks || (startsWithPathChecks = new ts.Set())).add(fileOrDirectoryPath);
|
|
}
|
|
else {
|
|
if (!isPathWithDefaultFailedLookupExtension(fileOrDirectoryPath) && !customFailedLookupPaths.has(fileOrDirectoryPath)) {
|
|
return false;
|
|
}
|
|
if (ts.isEmittedFileOfProgram(resolutionHost.getCurrentProgram(), fileOrDirectoryPath)) {
|
|
return false;
|
|
}
|
|
(failedLookupChecks || (failedLookupChecks = new ts.Set())).add(fileOrDirectoryPath);
|
|
var packagePath = ts.parseNodeModuleFromPath(fileOrDirectoryPath);
|
|
if (packagePath)
|
|
(startsWithPathChecks || (startsWithPathChecks = new ts.Set())).add(packagePath);
|
|
}
|
|
}
|
|
resolutionHost.scheduleInvalidateResolutionsOfFailedLookupLocations();
|
|
}
|
|
function invalidateResolutionsOfFailedLookupLocations() {
|
|
var _a;
|
|
var invalidated = false;
|
|
if (affectingPathChecksForFile) {
|
|
(_a = resolutionHost.getCurrentProgram()) === null || _a === void 0 ? void 0 : _a.getSourceFiles().forEach(function (f) {
|
|
if (ts.some(f.packageJsonLocations, function (location) { return affectingPathChecksForFile.has(location); })) {
|
|
(filesWithInvalidatedResolutions !== null && filesWithInvalidatedResolutions !== void 0 ? filesWithInvalidatedResolutions : (filesWithInvalidatedResolutions = new ts.Set())).add(f.path);
|
|
invalidated = true;
|
|
}
|
|
});
|
|
affectingPathChecksForFile = undefined;
|
|
}
|
|
if (!failedLookupChecks && !startsWithPathChecks && !isInDirectoryChecks && !affectingPathChecks) {
|
|
return invalidated;
|
|
}
|
|
invalidated = invalidateResolutions(resolutionsWithFailedLookups, canInvalidateFailedLookupResolution) || invalidated;
|
|
var packageJsonMap = moduleResolutionCache.getPackageJsonInfoCache().getInternalMap();
|
|
if (packageJsonMap && (failedLookupChecks || startsWithPathChecks || isInDirectoryChecks)) {
|
|
packageJsonMap.forEach(function (_value, path) { return isInvalidatedFailedLookup(path) ? packageJsonMap.delete(path) : undefined; });
|
|
}
|
|
failedLookupChecks = undefined;
|
|
startsWithPathChecks = undefined;
|
|
isInDirectoryChecks = undefined;
|
|
invalidated = invalidateResolutions(resolutionsWithOnlyAffectingLocations, canInvalidatedFailedLookupResolutionWithAffectingLocation) || invalidated;
|
|
affectingPathChecks = undefined;
|
|
return invalidated;
|
|
}
|
|
function canInvalidateFailedLookupResolution(resolution) {
|
|
if (canInvalidatedFailedLookupResolutionWithAffectingLocation(resolution))
|
|
return true;
|
|
if (!failedLookupChecks && !startsWithPathChecks && !isInDirectoryChecks)
|
|
return false;
|
|
return resolution.failedLookupLocations.some(function (location) { return isInvalidatedFailedLookup(resolutionHost.toPath(location)); });
|
|
}
|
|
function isInvalidatedFailedLookup(locationPath) {
|
|
return (failedLookupChecks === null || failedLookupChecks === void 0 ? void 0 : failedLookupChecks.has(locationPath)) ||
|
|
ts.firstDefinedIterator((startsWithPathChecks === null || startsWithPathChecks === void 0 ? void 0 : startsWithPathChecks.keys()) || ts.emptyIterator, function (fileOrDirectoryPath) { return ts.startsWith(locationPath, fileOrDirectoryPath) ? true : undefined; }) ||
|
|
ts.firstDefinedIterator((isInDirectoryChecks === null || isInDirectoryChecks === void 0 ? void 0 : isInDirectoryChecks.keys()) || ts.emptyIterator, function (fileOrDirectoryPath) { return isInDirectoryPath(fileOrDirectoryPath, locationPath) ? true : undefined; });
|
|
}
|
|
function canInvalidatedFailedLookupResolutionWithAffectingLocation(resolution) {
|
|
return !!affectingPathChecks && resolution.affectingLocations.some(function (location) { return affectingPathChecks.has(location); });
|
|
}
|
|
function closeTypeRootsWatch() {
|
|
ts.clearMap(typeRootsWatches, ts.closeFileWatcher);
|
|
}
|
|
function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath) {
|
|
if (isInDirectoryPath(rootPath, typeRootPath)) {
|
|
return rootPath;
|
|
}
|
|
var toWatch = getDirectoryToWatchFromFailedLookupLocationDirectory(typeRoot, typeRootPath);
|
|
return toWatch && directoryWatchesOfFailedLookups.has(toWatch.dirPath) ? toWatch.dirPath : undefined;
|
|
}
|
|
function createTypeRootsWatch(typeRootPath, typeRoot) {
|
|
return resolutionHost.watchTypeRootsDirectory(typeRoot, function (fileOrDirectory) {
|
|
var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory);
|
|
if (cachedDirectoryStructureHost) {
|
|
cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
|
|
}
|
|
hasChangedAutomaticTypeDirectiveNames = true;
|
|
resolutionHost.onChangedAutomaticTypeDirectiveNames();
|
|
var dirPath = getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath);
|
|
if (dirPath) {
|
|
scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath);
|
|
}
|
|
}, 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 || canWatchDirectoryOrFile(dirPath);
|
|
}
|
|
}
|
|
ts.createResolutionCache = createResolutionCache;
|
|
function resolutionIsSymlink(resolution) {
|
|
var _a, _b;
|
|
return !!(((_a = resolution.resolvedModule) === null || _a === void 0 ? void 0 : _a.originalPath) ||
|
|
((_b = resolution.resolvedTypeReferenceDirective) === null || _b === void 0 ? void 0 : _b.originalPath));
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var moduleSpecifiers;
|
|
(function (moduleSpecifiers_1) {
|
|
function getPreferences(host, _a, compilerOptions, importingSourceFile) {
|
|
var importModuleSpecifierPreference = _a.importModuleSpecifierPreference, importModuleSpecifierEnding = _a.importModuleSpecifierEnding;
|
|
return {
|
|
relativePreference: importModuleSpecifierPreference === "relative" ? 0 :
|
|
importModuleSpecifierPreference === "non-relative" ? 1 :
|
|
importModuleSpecifierPreference === "project-relative" ? 3 :
|
|
2,
|
|
ending: getEnding(),
|
|
};
|
|
function getEnding() {
|
|
switch (importModuleSpecifierEnding) {
|
|
case "minimal": return 0;
|
|
case "index": return 1;
|
|
case "js": return 2;
|
|
default: return usesJsExtensionOnImports(importingSourceFile) || isFormatRequiringExtensions(compilerOptions, importingSourceFile.path, host) ? 2
|
|
: ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.NodeJs ? 1 : 0;
|
|
}
|
|
}
|
|
}
|
|
function getPreferencesForUpdate(compilerOptions, oldImportSpecifier, importingSourceFileName, host) {
|
|
return {
|
|
relativePreference: ts.isExternalModuleNameRelative(oldImportSpecifier) ? 0 : 1,
|
|
ending: ts.hasJSFileExtension(oldImportSpecifier) || isFormatRequiringExtensions(compilerOptions, importingSourceFileName, host) ?
|
|
2 :
|
|
ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.NodeJs || ts.endsWith(oldImportSpecifier, "index") ? 1 : 0,
|
|
};
|
|
}
|
|
function isFormatRequiringExtensions(compilerOptions, importingSourceFileName, host) {
|
|
var _a;
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.Node16
|
|
&& ts.getEmitModuleResolutionKind(compilerOptions) !== ts.ModuleResolutionKind.NodeNext) {
|
|
return false;
|
|
}
|
|
return ts.getImpliedNodeFormatForFile(importingSourceFileName, (_a = host.getPackageJsonInfoCache) === null || _a === void 0 ? void 0 : _a.call(host), getModuleResolutionHost(host), compilerOptions) !== ts.ModuleKind.CommonJS;
|
|
}
|
|
function getModuleResolutionHost(host) {
|
|
var _a;
|
|
return {
|
|
fileExists: host.fileExists,
|
|
readFile: ts.Debug.checkDefined(host.readFile),
|
|
directoryExists: host.directoryExists,
|
|
getCurrentDirectory: host.getCurrentDirectory,
|
|
realpath: host.realpath,
|
|
useCaseSensitiveFileNames: (_a = host.useCaseSensitiveFileNames) === null || _a === void 0 ? void 0 : _a.call(host),
|
|
};
|
|
}
|
|
function updateModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, oldImportSpecifier, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var res = getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier, importingSourceFileName, host), {}, options);
|
|
if (res === oldImportSpecifier)
|
|
return undefined;
|
|
return res;
|
|
}
|
|
moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
|
|
function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, getPreferences(host, {}, compilerOptions, importingSourceFile), {}, options);
|
|
}
|
|
moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
|
|
function getNodeModulesPackageName(compilerOptions, importingSourceFile, nodeModulesFileName, host, preferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var info = getInfo(importingSourceFile.path, host);
|
|
var modulePaths = getAllModulePaths(importingSourceFile.path, nodeModulesFileName, host, preferences, options);
|
|
return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, importingSourceFile, host, compilerOptions, preferences, true, options.overrideImportMode); });
|
|
}
|
|
moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
|
|
function getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences, userPreferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var info = getInfo(importingSourceFileName, host);
|
|
var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences, options);
|
|
return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, importingSourceFile, host, compilerOptions, userPreferences, undefined, options.overrideImportMode); }) ||
|
|
getLocalModuleSpecifier(toFileName, info, compilerOptions, host, options.overrideImportMode || importingSourceFile.impliedNodeFormat, preferences);
|
|
}
|
|
function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences, options)[0];
|
|
}
|
|
moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
|
|
function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences, options) {
|
|
var _a;
|
|
if (options === void 0) { options = {}; }
|
|
var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
|
|
if (!moduleSourceFile) {
|
|
return ts.emptyArray;
|
|
}
|
|
var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
|
|
var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences, options);
|
|
return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
|
|
}
|
|
function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options).moduleSpecifiers;
|
|
}
|
|
moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
|
|
function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var computedWithoutCache = false;
|
|
var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
|
|
if (ambient)
|
|
return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
|
|
var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences, options), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
|
|
if (specifiers)
|
|
return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
|
|
if (!moduleSourceFile)
|
|
return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
|
|
computedWithoutCache = true;
|
|
modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
|
|
var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options);
|
|
cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, options, modulePaths, result);
|
|
return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
|
|
}
|
|
moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
|
|
function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var info = getInfo(importingSourceFile.path, host);
|
|
var preferences = getPreferences(host, userPreferences, compilerOptions, importingSourceFile);
|
|
var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
|
|
if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
|
|
return undefined;
|
|
if (importingSourceFile.impliedNodeFormat && importingSourceFile.impliedNodeFormat !== ts.getModeForResolutionAtIndex(importingSourceFile, reason.index))
|
|
return undefined;
|
|
var specifier = ts.getModuleNameStringLiteralAt(importingSourceFile, reason.index).text;
|
|
return preferences.relativePreference !== 1 || !ts.pathIsRelative(specifier) ?
|
|
specifier :
|
|
undefined;
|
|
}); });
|
|
if (existingSpecifier) {
|
|
var moduleSpecifiers_2 = [existingSpecifier];
|
|
return moduleSpecifiers_2;
|
|
}
|
|
var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
|
|
var nodeModulesSpecifiers;
|
|
var pathsSpecifiers;
|
|
var relativeSpecifiers;
|
|
for (var _i = 0, modulePaths_1 = modulePaths; _i < modulePaths_1.length; _i++) {
|
|
var modulePath = modulePaths_1[_i];
|
|
var specifier = tryGetModuleNameAsNodeModule(modulePath, info, importingSourceFile, host, compilerOptions, userPreferences, undefined, options.overrideImportMode);
|
|
nodeModulesSpecifiers = ts.append(nodeModulesSpecifiers, specifier);
|
|
if (specifier && modulePath.isRedirect) {
|
|
return nodeModulesSpecifiers;
|
|
}
|
|
if (!specifier && !modulePath.isRedirect) {
|
|
var local = getLocalModuleSpecifier(modulePath.path, info, compilerOptions, host, options.overrideImportMode || importingSourceFile.impliedNodeFormat, preferences);
|
|
if (ts.pathIsBareSpecifier(local)) {
|
|
pathsSpecifiers = ts.append(pathsSpecifiers, local);
|
|
}
|
|
else if (!importedFileIsInNodeModules || modulePath.isInNodeModules) {
|
|
relativeSpecifiers = ts.append(relativeSpecifiers, local);
|
|
}
|
|
}
|
|
}
|
|
return (pathsSpecifiers === null || pathsSpecifiers === void 0 ? void 0 : pathsSpecifiers.length) ? pathsSpecifiers :
|
|
(nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
|
|
ts.Debug.checkDefined(relativeSpecifiers);
|
|
}
|
|
function getInfo(importingSourceFileName, host) {
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
|
|
var sourceDirectory = ts.getDirectoryPath(importingSourceFileName);
|
|
return { getCanonicalFileName: getCanonicalFileName, importingSourceFileName: importingSourceFileName, sourceDirectory: sourceDirectory };
|
|
}
|
|
function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, _a) {
|
|
var ending = _a.ending, relativePreference = _a.relativePreference;
|
|
var baseUrl = compilerOptions.baseUrl, paths = compilerOptions.paths, rootDirs = compilerOptions.rootDirs;
|
|
var sourceDirectory = info.sourceDirectory, getCanonicalFileName = info.getCanonicalFileName;
|
|
var relativePath = rootDirs && tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName, ending, compilerOptions) ||
|
|
removeExtensionAndIndexPostFix(ts.ensurePathIsNonModuleName(ts.getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), ending, compilerOptions);
|
|
if (!baseUrl && !paths || relativePreference === 0) {
|
|
return relativePath;
|
|
}
|
|
var baseDirectory = ts.getNormalizedAbsolutePath(ts.getPathsBasePath(compilerOptions, host) || baseUrl, host.getCurrentDirectory());
|
|
var relativeToBaseUrl = getRelativePathIfInDirectory(moduleFileName, baseDirectory, getCanonicalFileName);
|
|
if (!relativeToBaseUrl) {
|
|
return relativePath;
|
|
}
|
|
var fromPaths = paths && tryGetModuleNameFromPaths(relativeToBaseUrl, paths, getAllowedEndings(ending, compilerOptions, importMode), host, compilerOptions);
|
|
var nonRelative = fromPaths === undefined && baseUrl !== undefined ? removeExtensionAndIndexPostFix(relativeToBaseUrl, ending, compilerOptions) : fromPaths;
|
|
if (!nonRelative) {
|
|
return relativePath;
|
|
}
|
|
if (relativePreference === 1) {
|
|
return nonRelative;
|
|
}
|
|
if (relativePreference === 3) {
|
|
var projectDirectory = compilerOptions.configFilePath ?
|
|
ts.toPath(ts.getDirectoryPath(compilerOptions.configFilePath), host.getCurrentDirectory(), info.getCanonicalFileName) :
|
|
info.getCanonicalFileName(host.getCurrentDirectory());
|
|
var modulePath = ts.toPath(moduleFileName, projectDirectory, getCanonicalFileName);
|
|
var sourceIsInternal = ts.startsWith(sourceDirectory, projectDirectory);
|
|
var targetIsInternal = ts.startsWith(modulePath, projectDirectory);
|
|
if (sourceIsInternal && !targetIsInternal || !sourceIsInternal && targetIsInternal) {
|
|
return nonRelative;
|
|
}
|
|
var nearestTargetPackageJson = getNearestAncestorDirectoryWithPackageJson(host, ts.getDirectoryPath(modulePath));
|
|
var nearestSourcePackageJson = getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory);
|
|
if (nearestSourcePackageJson !== nearestTargetPackageJson) {
|
|
return nonRelative;
|
|
}
|
|
return relativePath;
|
|
}
|
|
if (relativePreference !== 2)
|
|
ts.Debug.assertNever(relativePreference);
|
|
return isPathRelativeToParent(nonRelative) || countPathComponents(relativePath) < countPathComponents(nonRelative) ? relativePath : nonRelative;
|
|
}
|
|
function countPathComponents(path) {
|
|
var count = 0;
|
|
for (var i = ts.startsWith(path, "./") ? 2 : 0; i < path.length; i++) {
|
|
if (path.charCodeAt(i) === 47)
|
|
count++;
|
|
}
|
|
return count;
|
|
}
|
|
moduleSpecifiers_1.countPathComponents = countPathComponents;
|
|
function usesJsExtensionOnImports(_a) {
|
|
var imports = _a.imports;
|
|
return ts.firstDefined(imports, function (_a) {
|
|
var text = _a.text;
|
|
return ts.pathIsRelative(text) ? ts.hasJSFileExtension(text) : undefined;
|
|
}) || false;
|
|
}
|
|
function comparePathsByRedirectAndNumberOfDirectorySeparators(a, b) {
|
|
return ts.compareBooleans(b.isRedirect, a.isRedirect) || ts.compareNumberOfDirectorySeparators(a.path, b.path);
|
|
}
|
|
function getNearestAncestorDirectoryWithPackageJson(host, fileName) {
|
|
if (host.getNearestAncestorDirectoryWithPackageJson) {
|
|
return host.getNearestAncestorDirectoryWithPackageJson(fileName);
|
|
}
|
|
return !!ts.forEachAncestorDirectory(fileName, function (directory) {
|
|
return host.fileExists(ts.combinePaths(directory, "package.json")) ? true : undefined;
|
|
});
|
|
}
|
|
function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
|
|
var _a;
|
|
var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
|
|
var cwd = host.getCurrentDirectory();
|
|
var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
|
|
var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
|
|
var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
|
|
var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
|
|
var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
|
|
var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
|
|
if (!preferSymlinks) {
|
|
var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
|
|
if (result_16)
|
|
return result_16;
|
|
}
|
|
var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
|
|
var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
|
|
var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
|
|
var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
|
|
if (!symlinkDirectories)
|
|
return undefined;
|
|
if (ts.startsWithDirectory(importingFileName, realPathDirectory, getCanonicalFileName)) {
|
|
return false;
|
|
}
|
|
return ts.forEach(targets, function (target) {
|
|
if (!ts.startsWithDirectory(target, realPathDirectory, getCanonicalFileName)) {
|
|
return;
|
|
}
|
|
var relative = ts.getRelativePathFromDirectory(realPathDirectory, target, getCanonicalFileName);
|
|
for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
|
|
var symlinkDirectory = symlinkDirectories_1[_i];
|
|
var option = ts.resolvePath(symlinkDirectory, relative);
|
|
var result_17 = cb(option, target === referenceRedirect);
|
|
shouldFilterIgnoredPaths = true;
|
|
if (result_17)
|
|
return result_17;
|
|
}
|
|
});
|
|
});
|
|
return result || (preferSymlinks
|
|
? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
|
|
: undefined);
|
|
}
|
|
moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
|
|
function getAllModulePaths(importingFilePath, importedFileName, host, preferences, options) {
|
|
var _a;
|
|
if (options === void 0) { options = {}; }
|
|
var importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host));
|
|
var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
|
|
if (cache) {
|
|
var cached = cache.get(importingFilePath, importedFilePath, preferences, options);
|
|
if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
|
|
return cached.modulePaths;
|
|
}
|
|
var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
|
|
if (cache) {
|
|
cache.setModulePaths(importingFilePath, importedFilePath, preferences, options, modulePaths);
|
|
}
|
|
return modulePaths;
|
|
}
|
|
function getAllModulePathsWorker(importingFileName, importedFileName, host) {
|
|
var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
|
|
var allFileNames = new ts.Map();
|
|
var importedFileFromNodeModules = false;
|
|
forEachFileNameOfModule(importingFileName, importedFileName, host, true, function (path, isRedirect) {
|
|
var isInNodeModules = ts.pathContainsNodeModules(path);
|
|
allFileNames.set(path, { path: getCanonicalFileName(path), isRedirect: isRedirect, isInNodeModules: isInNodeModules });
|
|
importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules;
|
|
});
|
|
var sortedPaths = [];
|
|
var _loop_35 = function (directory) {
|
|
var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
|
|
var pathsInDirectory;
|
|
allFileNames.forEach(function (_a, fileName) {
|
|
var path = _a.path, isRedirect = _a.isRedirect, isInNodeModules = _a.isInNodeModules;
|
|
if (ts.startsWith(path, directoryStart)) {
|
|
(pathsInDirectory || (pathsInDirectory = [])).push({ path: fileName, isRedirect: isRedirect, isInNodeModules: isInNodeModules });
|
|
allFileNames.delete(fileName);
|
|
}
|
|
});
|
|
if (pathsInDirectory) {
|
|
if (pathsInDirectory.length > 1) {
|
|
pathsInDirectory.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
|
|
}
|
|
sortedPaths.push.apply(sortedPaths, pathsInDirectory);
|
|
}
|
|
var newDirectory = ts.getDirectoryPath(directory);
|
|
if (newDirectory === directory)
|
|
return out_directory_1 = directory, "break";
|
|
directory = newDirectory;
|
|
out_directory_1 = directory;
|
|
};
|
|
var out_directory_1;
|
|
for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
|
|
var state_11 = _loop_35(directory);
|
|
directory = out_directory_1;
|
|
if (state_11 === "break")
|
|
break;
|
|
}
|
|
if (allFileNames.size) {
|
|
var remainingPaths = ts.arrayFrom(allFileNames.values());
|
|
if (remainingPaths.length > 1)
|
|
remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
|
|
sortedPaths.push.apply(sortedPaths, remainingPaths);
|
|
}
|
|
return sortedPaths;
|
|
}
|
|
function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
|
|
var _a;
|
|
var decl = (_a = moduleSymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isNonGlobalAmbientModule(d) && (!ts.isExternalModuleAugmentation(d) || !ts.isExternalModuleNameRelative(ts.getTextOfIdentifierOrLiteral(d.name))); });
|
|
if (decl) {
|
|
return decl.name.text;
|
|
}
|
|
var ambientModuleDeclareCandidates = ts.mapDefined(moduleSymbol.declarations, function (d) {
|
|
var _a, _b, _c, _d;
|
|
if (!ts.isModuleDeclaration(d))
|
|
return;
|
|
var topNamespace = getTopNamespace(d);
|
|
if (!(((_a = topNamespace === null || topNamespace === void 0 ? void 0 : topNamespace.parent) === null || _a === void 0 ? void 0 : _a.parent)
|
|
&& ts.isModuleBlock(topNamespace.parent) && ts.isAmbientModule(topNamespace.parent.parent) && ts.isSourceFile(topNamespace.parent.parent.parent)))
|
|
return;
|
|
var exportAssignment = (_d = (_c = (_b = topNamespace.parent.parent.symbol.exports) === null || _b === void 0 ? void 0 : _b.get("export=")) === null || _c === void 0 ? void 0 : _c.valueDeclaration) === null || _d === void 0 ? void 0 : _d.expression;
|
|
if (!exportAssignment)
|
|
return;
|
|
var exportSymbol = checker.getSymbolAtLocation(exportAssignment);
|
|
if (!exportSymbol)
|
|
return;
|
|
var originalExportSymbol = (exportSymbol === null || exportSymbol === void 0 ? void 0 : exportSymbol.flags) & 2097152 ? checker.getAliasedSymbol(exportSymbol) : exportSymbol;
|
|
if (originalExportSymbol === d.symbol)
|
|
return topNamespace.parent.parent;
|
|
function getTopNamespace(namespaceDeclaration) {
|
|
while (namespaceDeclaration.flags & 4) {
|
|
namespaceDeclaration = namespaceDeclaration.parent;
|
|
}
|
|
return namespaceDeclaration;
|
|
}
|
|
});
|
|
var ambientModuleDeclare = ambientModuleDeclareCandidates[0];
|
|
if (ambientModuleDeclare) {
|
|
return ambientModuleDeclare.name.text;
|
|
}
|
|
}
|
|
function getAllowedEndings(preferredEnding, compilerOptions, importMode) {
|
|
if (ts.getEmitModuleResolutionKind(compilerOptions) >= ts.ModuleResolutionKind.Node16 && importMode === ts.ModuleKind.ESNext) {
|
|
return [2];
|
|
}
|
|
switch (preferredEnding) {
|
|
case 2: return [2, 0, 1];
|
|
case 1: return [1, 0, 2];
|
|
case 0: return [0, 1, 2];
|
|
default: ts.Debug.assertNever(preferredEnding);
|
|
}
|
|
}
|
|
function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, host, compilerOptions) {
|
|
for (var key in paths) {
|
|
var _loop_36 = function (patternText_1) {
|
|
var pattern = ts.normalizePath(patternText_1);
|
|
var indexOfStar = pattern.indexOf("*");
|
|
var candidates = allowedEndings.map(function (ending) { return ({
|
|
ending: ending,
|
|
value: removeExtensionAndIndexPostFix(relativeToBaseUrl, ending, compilerOptions)
|
|
}); });
|
|
if (ts.tryGetExtensionFromPath(pattern)) {
|
|
candidates.push({ ending: undefined, value: relativeToBaseUrl });
|
|
}
|
|
if (indexOfStar !== -1) {
|
|
var prefix = pattern.substring(0, indexOfStar);
|
|
var suffix = pattern.substring(indexOfStar + 1);
|
|
for (var _b = 0, candidates_3 = candidates; _b < candidates_3.length; _b++) {
|
|
var _c = candidates_3[_b], ending = _c.ending, value = _c.value;
|
|
if (value.length >= prefix.length + suffix.length &&
|
|
ts.startsWith(value, prefix) &&
|
|
ts.endsWith(value, suffix) &&
|
|
validateEnding({ ending: ending, value: value })) {
|
|
var matchedStar = value.substring(prefix.length, value.length - suffix.length);
|
|
return { value: key.replace("*", matchedStar) };
|
|
}
|
|
}
|
|
}
|
|
else if (ts.some(candidates, function (c) { return c.ending !== 0 && pattern === c.value; }) ||
|
|
ts.some(candidates, function (c) { return c.ending === 0 && pattern === c.value && validateEnding(c); })) {
|
|
return { value: key };
|
|
}
|
|
};
|
|
for (var _i = 0, _a = paths[key]; _i < _a.length; _i++) {
|
|
var patternText_1 = _a[_i];
|
|
var state_12 = _loop_36(patternText_1);
|
|
if (typeof state_12 === "object")
|
|
return state_12.value;
|
|
}
|
|
}
|
|
function validateEnding(_a) {
|
|
var ending = _a.ending, value = _a.value;
|
|
return ending !== 0 || value === removeExtensionAndIndexPostFix(relativeToBaseUrl, ending, compilerOptions, host);
|
|
}
|
|
}
|
|
function tryGetModuleNameFromExports(options, targetFilePath, packageDirectory, packageName, exports, conditions, mode) {
|
|
if (mode === void 0) { mode = 0; }
|
|
if (typeof exports === "string") {
|
|
var pathOrPattern = ts.getNormalizedAbsolutePath(ts.combinePaths(packageDirectory, exports), undefined);
|
|
var extensionSwappedTarget = ts.hasTSFileExtension(targetFilePath) ? ts.removeFileExtension(targetFilePath) + tryGetJSExtensionForFile(targetFilePath, options) : undefined;
|
|
switch (mode) {
|
|
case 0:
|
|
if (ts.comparePaths(targetFilePath, pathOrPattern) === 0 || (extensionSwappedTarget && ts.comparePaths(extensionSwappedTarget, pathOrPattern) === 0)) {
|
|
return { moduleFileToTry: packageName };
|
|
}
|
|
break;
|
|
case 1:
|
|
if (ts.containsPath(pathOrPattern, targetFilePath)) {
|
|
var fragment = ts.getRelativePathFromDirectory(pathOrPattern, targetFilePath, false);
|
|
return { moduleFileToTry: ts.getNormalizedAbsolutePath(ts.combinePaths(ts.combinePaths(packageName, exports), fragment), undefined) };
|
|
}
|
|
break;
|
|
case 2:
|
|
var starPos = pathOrPattern.indexOf("*");
|
|
var leadingSlice = pathOrPattern.slice(0, starPos);
|
|
var trailingSlice = pathOrPattern.slice(starPos + 1);
|
|
if (ts.startsWith(targetFilePath, leadingSlice) && ts.endsWith(targetFilePath, trailingSlice)) {
|
|
var starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length);
|
|
return { moduleFileToTry: packageName.replace("*", starReplacement) };
|
|
}
|
|
if (extensionSwappedTarget && ts.startsWith(extensionSwappedTarget, leadingSlice) && ts.endsWith(extensionSwappedTarget, trailingSlice)) {
|
|
var starReplacement = extensionSwappedTarget.slice(leadingSlice.length, extensionSwappedTarget.length - trailingSlice.length);
|
|
return { moduleFileToTry: packageName.replace("*", starReplacement) };
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else if (Array.isArray(exports)) {
|
|
return ts.forEach(exports, function (e) { return tryGetModuleNameFromExports(options, targetFilePath, packageDirectory, packageName, e, conditions); });
|
|
}
|
|
else if (typeof exports === "object" && exports !== null) {
|
|
if (ts.allKeysStartWithDot(exports)) {
|
|
return ts.forEach(ts.getOwnKeys(exports), function (k) {
|
|
var subPackageName = ts.getNormalizedAbsolutePath(ts.combinePaths(packageName, k), undefined);
|
|
var mode = ts.endsWith(k, "/") ? 1
|
|
: ts.stringContains(k, "*") ? 2
|
|
: 0;
|
|
return tryGetModuleNameFromExports(options, targetFilePath, packageDirectory, subPackageName, exports[k], conditions, mode);
|
|
});
|
|
}
|
|
else {
|
|
for (var _i = 0, _a = ts.getOwnKeys(exports); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
if (key === "default" || conditions.indexOf(key) >= 0 || ts.isApplicableVersionedTypesKey(conditions, key)) {
|
|
var subTarget = exports[key];
|
|
var result = tryGetModuleNameFromExports(options, targetFilePath, packageDirectory, packageName, subTarget, conditions);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
function tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName, ending, compilerOptions) {
|
|
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.getEmitModuleResolutionKind(compilerOptions) === ts.ModuleResolutionKind.NodeJs
|
|
? removeExtensionAndIndexPostFix(relativePath, ending, compilerOptions)
|
|
: ts.removeFileExtension(relativePath);
|
|
}
|
|
function tryGetModuleNameAsNodeModule(_a, _b, importingSourceFile, host, options, userPreferences, packageNameOnly, overrideMode) {
|
|
var path = _a.path, isRedirect = _a.isRedirect;
|
|
var getCanonicalFileName = _b.getCanonicalFileName, sourceDirectory = _b.sourceDirectory;
|
|
if (!host.fileExists || !host.readFile) {
|
|
return undefined;
|
|
}
|
|
var parts = ts.getNodeModulePathParts(path);
|
|
if (!parts) {
|
|
return undefined;
|
|
}
|
|
var preferences = getPreferences(host, userPreferences, options, importingSourceFile);
|
|
var moduleSpecifier = path;
|
|
var isPackageRootPath = false;
|
|
if (!packageNameOnly) {
|
|
var packageRootIndex = parts.packageRootIndex;
|
|
var moduleFileName = void 0;
|
|
while (true) {
|
|
var _c = tryDirectoryWithPackageJson(packageRootIndex), moduleFileToTry = _c.moduleFileToTry, packageRootPath = _c.packageRootPath, blockedByExports = _c.blockedByExports, verbatimFromExports = _c.verbatimFromExports;
|
|
if (ts.getEmitModuleResolutionKind(options) !== ts.ModuleResolutionKind.Classic) {
|
|
if (blockedByExports) {
|
|
return undefined;
|
|
}
|
|
if (verbatimFromExports) {
|
|
return moduleFileToTry;
|
|
}
|
|
}
|
|
if (packageRootPath) {
|
|
moduleSpecifier = packageRootPath;
|
|
isPackageRootPath = true;
|
|
break;
|
|
}
|
|
if (!moduleFileName)
|
|
moduleFileName = moduleFileToTry;
|
|
packageRootIndex = path.indexOf(ts.directorySeparator, packageRootIndex + 1);
|
|
if (packageRootIndex === -1) {
|
|
moduleSpecifier = removeExtensionAndIndexPostFix(moduleFileName, preferences.ending, options, host);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (isRedirect && !isPackageRootPath) {
|
|
return undefined;
|
|
}
|
|
var globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation();
|
|
var pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex));
|
|
if (!(ts.startsWith(sourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && ts.startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) {
|
|
return undefined;
|
|
}
|
|
var nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1);
|
|
var packageName = ts.getPackageNameFromTypesPackageName(nodeModulesDirectoryName);
|
|
return ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.Classic && packageName === nodeModulesDirectoryName ? undefined : packageName;
|
|
function tryDirectoryWithPackageJson(packageRootIndex) {
|
|
var _a, _b;
|
|
var packageRootPath = path.substring(0, packageRootIndex);
|
|
var packageJsonPath = ts.combinePaths(packageRootPath, "package.json");
|
|
var moduleFileToTry = path;
|
|
var maybeBlockedByTypesVersions = false;
|
|
var cachedPackageJson = (_b = (_a = host.getPackageJsonInfoCache) === null || _a === void 0 ? void 0 : _a.call(host)) === null || _b === void 0 ? void 0 : _b.getPackageJsonInfo(packageJsonPath);
|
|
if (typeof cachedPackageJson === "object" || cachedPackageJson === undefined && host.fileExists(packageJsonPath)) {
|
|
var packageJsonContent = (cachedPackageJson === null || cachedPackageJson === void 0 ? void 0 : cachedPackageJson.packageJsonContent) || JSON.parse(host.readFile(packageJsonPath));
|
|
var importMode = overrideMode || importingSourceFile.impliedNodeFormat;
|
|
if (ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.Node16 || ts.getEmitModuleResolutionKind(options) === ts.ModuleResolutionKind.NodeNext) {
|
|
var conditions = ["node", importMode === ts.ModuleKind.ESNext ? "import" : "require", "types"];
|
|
var fromExports = packageJsonContent.exports && typeof packageJsonContent.name === "string"
|
|
? tryGetModuleNameFromExports(options, path, packageRootPath, ts.getPackageNameFromTypesPackageName(packageJsonContent.name), packageJsonContent.exports, conditions)
|
|
: undefined;
|
|
if (fromExports) {
|
|
var withJsExtension = !ts.hasTSFileExtension(fromExports.moduleFileToTry)
|
|
? fromExports
|
|
: { moduleFileToTry: ts.removeFileExtension(fromExports.moduleFileToTry) + tryGetJSExtensionForFile(fromExports.moduleFileToTry, options) };
|
|
return __assign(__assign({}, withJsExtension), { verbatimFromExports: true });
|
|
}
|
|
if (packageJsonContent.exports) {
|
|
return { moduleFileToTry: path, blockedByExports: true };
|
|
}
|
|
}
|
|
var versionPaths = packageJsonContent.typesVersions
|
|
? ts.getPackageJsonTypesVersionsPaths(packageJsonContent.typesVersions)
|
|
: undefined;
|
|
if (versionPaths) {
|
|
var subModuleName = path.slice(packageRootPath.length + 1);
|
|
var fromPaths = tryGetModuleNameFromPaths(subModuleName, versionPaths.paths, getAllowedEndings(preferences.ending, options, importMode), host, options);
|
|
if (fromPaths === undefined) {
|
|
maybeBlockedByTypesVersions = true;
|
|
}
|
|
else {
|
|
moduleFileToTry = ts.combinePaths(packageRootPath, fromPaths);
|
|
}
|
|
}
|
|
var mainFileRelative = packageJsonContent.typings || packageJsonContent.types || packageJsonContent.main || "index.js";
|
|
if (ts.isString(mainFileRelative) && !(maybeBlockedByTypesVersions && ts.matchPatternOrExact(ts.tryParsePatterns(versionPaths.paths), mainFileRelative))) {
|
|
var mainExportFile = ts.toPath(mainFileRelative, packageRootPath, getCanonicalFileName);
|
|
if (ts.removeFileExtension(mainExportFile) === ts.removeFileExtension(getCanonicalFileName(moduleFileToTry))) {
|
|
return { packageRootPath: packageRootPath, moduleFileToTry: moduleFileToTry };
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var fileName = getCanonicalFileName(moduleFileToTry.substring(parts.packageRootIndex + 1));
|
|
if (fileName === "index.d.ts" || fileName === "index.js" || fileName === "index.ts" || fileName === "index.tsx") {
|
|
return { moduleFileToTry: moduleFileToTry, packageRootPath: packageRootPath };
|
|
}
|
|
}
|
|
return { moduleFileToTry: moduleFileToTry };
|
|
}
|
|
}
|
|
function tryGetAnyFileFromPath(host, path) {
|
|
if (!host.fileExists)
|
|
return;
|
|
var extensions = ts.flatten(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 getPathRelativeToRootDirs(path, rootDirs, getCanonicalFileName) {
|
|
return ts.firstDefined(rootDirs, function (rootDir) {
|
|
var relativePath = getRelativePathIfInDirectory(path, rootDir, getCanonicalFileName);
|
|
return relativePath !== undefined && isPathRelativeToParent(relativePath) ? undefined : relativePath;
|
|
});
|
|
}
|
|
function removeExtensionAndIndexPostFix(fileName, ending, options, host) {
|
|
if (ts.fileExtensionIsOneOf(fileName, [".json", ".mjs", ".cjs"]))
|
|
return fileName;
|
|
var noExtension = ts.removeFileExtension(fileName);
|
|
if (fileName === noExtension)
|
|
return fileName;
|
|
if (ts.fileExtensionIsOneOf(fileName, [".d.mts", ".mts", ".d.cts", ".cts"]))
|
|
return noExtension + getJSExtensionForFile(fileName, options);
|
|
switch (ending) {
|
|
case 0:
|
|
var withoutIndex = ts.removeSuffix(noExtension, "/index");
|
|
if (host && withoutIndex !== noExtension && tryGetAnyFileFromPath(host, withoutIndex)) {
|
|
return noExtension;
|
|
}
|
|
return withoutIndex;
|
|
case 1:
|
|
return noExtension;
|
|
case 2:
|
|
return noExtension + getJSExtensionForFile(fileName, options);
|
|
default:
|
|
return ts.Debug.assertNever(ending);
|
|
}
|
|
}
|
|
function getJSExtensionForFile(fileName, options) {
|
|
var _a;
|
|
return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension ".concat(ts.extensionFromPath(fileName), " is unsupported:: FileName:: ").concat(fileName));
|
|
}
|
|
function tryGetJSExtensionForFile(fileName, options) {
|
|
var ext = ts.tryGetExtensionFromPath(fileName);
|
|
switch (ext) {
|
|
case ".ts":
|
|
case ".d.ts":
|
|
return ".js";
|
|
case ".tsx":
|
|
return options.jsx === 1 ? ".jsx" : ".js";
|
|
case ".js":
|
|
case ".jsx":
|
|
case ".json":
|
|
return ext;
|
|
case ".d.mts":
|
|
case ".mts":
|
|
case ".mjs":
|
|
return ".mjs";
|
|
case ".d.cts":
|
|
case ".cts":
|
|
case ".cjs":
|
|
return ".cjs";
|
|
default:
|
|
return undefined;
|
|
}
|
|
}
|
|
moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
|
|
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 ? 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;
|
|
function clearScreenIfNotWatchingForFileChanges(system, diagnostic, options) {
|
|
if (system.clearScreen &&
|
|
!options.preserveWatchOutput &&
|
|
!options.extendedDiagnostics &&
|
|
!options.diagnostics &&
|
|
ts.contains(ts.screenStartingMessageCodes, 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 getLocaleTimeString(system) {
|
|
return !system.now ?
|
|
new Date().toLocaleTimeString() :
|
|
system.now().toLocaleTimeString("en-US", { timeZone: "UTC" });
|
|
}
|
|
ts.getLocaleTimeString = getLocaleTimeString;
|
|
function createWatchStatusReporter(system, pretty) {
|
|
return pretty ?
|
|
function (diagnostic, newLine, options) {
|
|
clearScreenIfNotWatchingForFileChanges(system, diagnostic, options);
|
|
var output = "[".concat(ts.formatColorAndReset(getLocaleTimeString(system), ts.ForegroundColorEscapeSequences.Grey), "] ");
|
|
output += "".concat(ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)).concat(newLine + newLine);
|
|
system.write(output);
|
|
} :
|
|
function (diagnostic, newLine, options) {
|
|
var output = "";
|
|
if (!clearScreenIfNotWatchingForFileChanges(system, diagnostic, options)) {
|
|
output += newLine;
|
|
}
|
|
output += "".concat(getLocaleTimeString(system), " - ");
|
|
output += "".concat(ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)).concat(getPlainDiagnosticFollowingNewLines(diagnostic, newLine));
|
|
system.write(output);
|
|
};
|
|
}
|
|
ts.createWatchStatusReporter = createWatchStatusReporter;
|
|
function parseConfigFileWithSystem(configFileName, optionsToExtend, extendedConfigCache, watchOptionsToExtend, system, reportDiagnostic) {
|
|
var host = system;
|
|
host.onUnRecoverableConfigFileDiagnostic = function (diagnostic) { return reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic); };
|
|
var result = ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host, extendedConfigCache, watchOptionsToExtend);
|
|
host.onUnRecoverableConfigFileDiagnostic = undefined;
|
|
return result;
|
|
}
|
|
ts.parseConfigFileWithSystem = parseConfigFileWithSystem;
|
|
function getErrorCountForSummary(diagnostics) {
|
|
return ts.countWhere(diagnostics, function (diagnostic) { return diagnostic.category === ts.DiagnosticCategory.Error; });
|
|
}
|
|
ts.getErrorCountForSummary = getErrorCountForSummary;
|
|
function getFilesInErrorForSummary(diagnostics) {
|
|
var filesInError = ts.filter(diagnostics, function (diagnostic) { return diagnostic.category === ts.DiagnosticCategory.Error; })
|
|
.map(function (errorDiagnostic) {
|
|
if (errorDiagnostic.file === undefined)
|
|
return;
|
|
return "".concat(errorDiagnostic.file.fileName);
|
|
});
|
|
return filesInError.map(function (fileName) {
|
|
var diagnosticForFileName = ts.find(diagnostics, function (diagnostic) {
|
|
return diagnostic.file !== undefined && diagnostic.file.fileName === fileName;
|
|
});
|
|
if (diagnosticForFileName !== undefined) {
|
|
var line = ts.getLineAndCharacterOfPosition(diagnosticForFileName.file, diagnosticForFileName.start).line;
|
|
return {
|
|
fileName: fileName,
|
|
line: line + 1,
|
|
};
|
|
}
|
|
});
|
|
}
|
|
ts.getFilesInErrorForSummary = getFilesInErrorForSummary;
|
|
function getWatchErrorSummaryDiagnosticMessage(errorCount) {
|
|
return errorCount === 1 ?
|
|
ts.Diagnostics.Found_1_error_Watching_for_file_changes :
|
|
ts.Diagnostics.Found_0_errors_Watching_for_file_changes;
|
|
}
|
|
ts.getWatchErrorSummaryDiagnosticMessage = getWatchErrorSummaryDiagnosticMessage;
|
|
function prettyPathForFileError(error, cwd) {
|
|
var line = ts.formatColorAndReset(":" + error.line, ts.ForegroundColorEscapeSequences.Grey);
|
|
if (ts.pathIsAbsolute(error.fileName) && ts.pathIsAbsolute(cwd)) {
|
|
return ts.getRelativePathFromDirectory(cwd, error.fileName, false) + line;
|
|
}
|
|
return error.fileName + line;
|
|
}
|
|
function getErrorSummaryText(errorCount, filesInError, newLine, host) {
|
|
if (errorCount === 0)
|
|
return "";
|
|
var nonNilFiles = filesInError.filter(function (fileInError) { return fileInError !== undefined; });
|
|
var distinctFileNamesWithLines = nonNilFiles.map(function (fileInError) { return "".concat(fileInError.fileName, ":").concat(fileInError.line); })
|
|
.filter(function (value, index, self) { return self.indexOf(value) === index; });
|
|
var firstFileReference = nonNilFiles[0] && prettyPathForFileError(nonNilFiles[0], host.getCurrentDirectory());
|
|
var d = errorCount === 1 ?
|
|
ts.createCompilerDiagnostic(filesInError[0] !== undefined ?
|
|
ts.Diagnostics.Found_1_error_in_1 :
|
|
ts.Diagnostics.Found_1_error, errorCount, firstFileReference) :
|
|
ts.createCompilerDiagnostic(distinctFileNamesWithLines.length === 0 ?
|
|
ts.Diagnostics.Found_0_errors :
|
|
distinctFileNamesWithLines.length === 1 ?
|
|
ts.Diagnostics.Found_0_errors_in_the_same_file_starting_at_Colon_1 :
|
|
ts.Diagnostics.Found_0_errors_in_1_files, errorCount, distinctFileNamesWithLines.length === 1 ? firstFileReference : distinctFileNamesWithLines.length);
|
|
var suffix = distinctFileNamesWithLines.length > 1 ? createTabularErrorsDisplay(nonNilFiles, host) : "";
|
|
return "".concat(newLine).concat(ts.flattenDiagnosticMessageText(d.messageText, newLine)).concat(newLine).concat(newLine).concat(suffix);
|
|
}
|
|
ts.getErrorSummaryText = getErrorSummaryText;
|
|
function createTabularErrorsDisplay(filesInError, host) {
|
|
var distinctFiles = filesInError.filter(function (value, index, self) { return index === self.findIndex(function (file) { return (file === null || file === void 0 ? void 0 : file.fileName) === (value === null || value === void 0 ? void 0 : value.fileName); }); });
|
|
if (distinctFiles.length === 0)
|
|
return "";
|
|
var numberLength = function (num) { return Math.log(num) * Math.LOG10E + 1; };
|
|
var fileToErrorCount = distinctFiles.map(function (file) { return [file, ts.countWhere(filesInError, function (fileInError) { return fileInError.fileName === file.fileName; })]; });
|
|
var maxErrors = fileToErrorCount.reduce(function (acc, value) { return Math.max(acc, value[1] || 0); }, 0);
|
|
var headerRow = ts.Diagnostics.Errors_Files.message;
|
|
var leftColumnHeadingLength = headerRow.split(" ")[0].length;
|
|
var leftPaddingGoal = Math.max(leftColumnHeadingLength, numberLength(maxErrors));
|
|
var headerPadding = Math.max(numberLength(maxErrors) - leftColumnHeadingLength, 0);
|
|
var tabularData = "";
|
|
tabularData += " ".repeat(headerPadding) + headerRow + "\n";
|
|
fileToErrorCount.forEach(function (row) {
|
|
var file = row[0], errorCount = row[1];
|
|
var errorCountDigitsLength = Math.log(errorCount) * Math.LOG10E + 1 | 0;
|
|
var leftPadding = errorCountDigitsLength < leftPaddingGoal ?
|
|
" ".repeat(leftPaddingGoal - errorCountDigitsLength)
|
|
: "";
|
|
var fileRef = prettyPathForFileError(file, host.getCurrentDirectory());
|
|
tabularData += "".concat(leftPadding).concat(errorCount, " ").concat(fileRef, "\n");
|
|
});
|
|
return tabularData;
|
|
}
|
|
function isBuilderProgram(program) {
|
|
return !!program.getState;
|
|
}
|
|
ts.isBuilderProgram = isBuilderProgram;
|
|
function listFiles(program, write) {
|
|
var options = program.getCompilerOptions();
|
|
if (options.explainFiles) {
|
|
explainFiles(isBuilderProgram(program) ? program.getProgram() : program, write);
|
|
}
|
|
else if (options.listFiles || options.listFilesOnly) {
|
|
ts.forEach(program.getSourceFiles(), function (file) {
|
|
write(file.fileName);
|
|
});
|
|
}
|
|
}
|
|
ts.listFiles = listFiles;
|
|
function explainFiles(program, write) {
|
|
var _a, _b;
|
|
var reasons = program.getFileIncludeReasons();
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
|
|
var relativeFileName = function (fileName) { return ts.convertToRelativePath(fileName, program.getCurrentDirectory(), getCanonicalFileName); };
|
|
for (var _i = 0, _c = program.getSourceFiles(); _i < _c.length; _i++) {
|
|
var file = _c[_i];
|
|
write("".concat(toFileName(file, relativeFileName)));
|
|
(_a = reasons.get(file.path)) === null || _a === void 0 ? void 0 : _a.forEach(function (reason) { return write(" ".concat(fileIncludeReasonToDiagnostics(program, reason, relativeFileName).messageText)); });
|
|
(_b = explainIfFileIsRedirectAndImpliedFormat(file, relativeFileName)) === null || _b === void 0 ? void 0 : _b.forEach(function (d) { return write(" ".concat(d.messageText)); });
|
|
}
|
|
}
|
|
ts.explainFiles = explainFiles;
|
|
function explainIfFileIsRedirectAndImpliedFormat(file, fileNameConvertor) {
|
|
var _a;
|
|
var result;
|
|
if (file.path !== file.resolvedPath) {
|
|
(result !== null && result !== void 0 ? result : (result = [])).push(ts.chainDiagnosticMessages(undefined, ts.Diagnostics.File_is_output_of_project_reference_source_0, toFileName(file.originalFileName, fileNameConvertor)));
|
|
}
|
|
if (file.redirectInfo) {
|
|
(result !== null && result !== void 0 ? result : (result = [])).push(ts.chainDiagnosticMessages(undefined, ts.Diagnostics.File_redirects_to_file_0, toFileName(file.redirectInfo.redirectTarget, fileNameConvertor)));
|
|
}
|
|
if (ts.isExternalOrCommonJsModule(file)) {
|
|
switch (file.impliedNodeFormat) {
|
|
case ts.ModuleKind.ESNext:
|
|
if (file.packageJsonScope) {
|
|
(result !== null && result !== void 0 ? result : (result = [])).push(ts.chainDiagnosticMessages(undefined, ts.Diagnostics.File_is_ECMAScript_module_because_0_has_field_type_with_value_module, toFileName(ts.last(file.packageJsonLocations), fileNameConvertor)));
|
|
}
|
|
break;
|
|
case ts.ModuleKind.CommonJS:
|
|
if (file.packageJsonScope) {
|
|
(result !== null && result !== void 0 ? result : (result = [])).push(ts.chainDiagnosticMessages(undefined, file.packageJsonScope.packageJsonContent.type ?
|
|
ts.Diagnostics.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module :
|
|
ts.Diagnostics.File_is_CommonJS_module_because_0_does_not_have_field_type, toFileName(ts.last(file.packageJsonLocations), fileNameConvertor)));
|
|
}
|
|
else if ((_a = file.packageJsonLocations) === null || _a === void 0 ? void 0 : _a.length) {
|
|
(result !== null && result !== void 0 ? result : (result = [])).push(ts.chainDiagnosticMessages(undefined, ts.Diagnostics.File_is_CommonJS_module_because_package_json_was_not_found));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
ts.explainIfFileIsRedirectAndImpliedFormat = explainIfFileIsRedirectAndImpliedFormat;
|
|
function getMatchedFileSpec(program, fileName) {
|
|
var _a;
|
|
var configFile = program.getCompilerOptions().configFile;
|
|
if (!((_a = configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) === null || _a === void 0 ? void 0 : _a.validatedFilesSpec))
|
|
return undefined;
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
|
|
var filePath = getCanonicalFileName(fileName);
|
|
var basePath = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFile.fileName, program.getCurrentDirectory()));
|
|
return ts.find(configFile.configFileSpecs.validatedFilesSpec, function (fileSpec) { return getCanonicalFileName(ts.getNormalizedAbsolutePath(fileSpec, basePath)) === filePath; });
|
|
}
|
|
ts.getMatchedFileSpec = getMatchedFileSpec;
|
|
function getMatchedIncludeSpec(program, fileName) {
|
|
var _a, _b;
|
|
var configFile = program.getCompilerOptions().configFile;
|
|
if (!((_a = configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) === null || _a === void 0 ? void 0 : _a.validatedIncludeSpecs))
|
|
return undefined;
|
|
if (configFile.configFileSpecs.isDefaultIncludeSpec)
|
|
return true;
|
|
var isJsonFile = ts.fileExtensionIs(fileName, ".json");
|
|
var basePath = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFile.fileName, program.getCurrentDirectory()));
|
|
var useCaseSensitiveFileNames = program.useCaseSensitiveFileNames();
|
|
return ts.find((_b = configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) === null || _b === void 0 ? void 0 : _b.validatedIncludeSpecs, function (includeSpec) {
|
|
if (isJsonFile && !ts.endsWith(includeSpec, ".json"))
|
|
return false;
|
|
var pattern = ts.getPatternFromSpec(includeSpec, basePath, "files");
|
|
return !!pattern && ts.getRegexFromPattern("(".concat(pattern, ")$"), useCaseSensitiveFileNames).test(fileName);
|
|
});
|
|
}
|
|
ts.getMatchedIncludeSpec = getMatchedIncludeSpec;
|
|
function fileIncludeReasonToDiagnostics(program, reason, fileNameConvertor) {
|
|
var _a, _b;
|
|
var options = program.getCompilerOptions();
|
|
if (ts.isReferencedFile(reason)) {
|
|
var referenceLocation = ts.getReferencedFileLocation(function (path) { return program.getSourceFileByPath(path); }, reason);
|
|
var referenceText = ts.isReferenceFileLocation(referenceLocation) ? referenceLocation.file.text.substring(referenceLocation.pos, referenceLocation.end) : "\"".concat(referenceLocation.text, "\"");
|
|
var message = void 0;
|
|
ts.Debug.assert(ts.isReferenceFileLocation(referenceLocation) || reason.kind === ts.FileIncludeKind.Import, "Only synthetic references are imports");
|
|
switch (reason.kind) {
|
|
case ts.FileIncludeKind.Import:
|
|
if (ts.isReferenceFileLocation(referenceLocation)) {
|
|
message = referenceLocation.packageId ?
|
|
ts.Diagnostics.Imported_via_0_from_file_1_with_packageId_2 :
|
|
ts.Diagnostics.Imported_via_0_from_file_1;
|
|
}
|
|
else if (referenceLocation.text === ts.externalHelpersModuleNameText) {
|
|
message = referenceLocation.packageId ?
|
|
ts.Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions :
|
|
ts.Diagnostics.Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions;
|
|
}
|
|
else {
|
|
message = referenceLocation.packageId ?
|
|
ts.Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions :
|
|
ts.Diagnostics.Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions;
|
|
}
|
|
break;
|
|
case ts.FileIncludeKind.ReferenceFile:
|
|
ts.Debug.assert(!referenceLocation.packageId);
|
|
message = ts.Diagnostics.Referenced_via_0_from_file_1;
|
|
break;
|
|
case ts.FileIncludeKind.TypeReferenceDirective:
|
|
message = referenceLocation.packageId ?
|
|
ts.Diagnostics.Type_library_referenced_via_0_from_file_1_with_packageId_2 :
|
|
ts.Diagnostics.Type_library_referenced_via_0_from_file_1;
|
|
break;
|
|
case ts.FileIncludeKind.LibReferenceDirective:
|
|
ts.Debug.assert(!referenceLocation.packageId);
|
|
message = ts.Diagnostics.Library_referenced_via_0_from_file_1;
|
|
break;
|
|
default:
|
|
ts.Debug.assertNever(reason);
|
|
}
|
|
return ts.chainDiagnosticMessages(undefined, message, referenceText, toFileName(referenceLocation.file, fileNameConvertor), referenceLocation.packageId && ts.packageIdToString(referenceLocation.packageId));
|
|
}
|
|
switch (reason.kind) {
|
|
case ts.FileIncludeKind.RootFile:
|
|
if (!((_a = options.configFile) === null || _a === void 0 ? void 0 : _a.configFileSpecs))
|
|
return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Root_file_specified_for_compilation);
|
|
var fileName = ts.getNormalizedAbsolutePath(program.getRootFileNames()[reason.index], program.getCurrentDirectory());
|
|
var matchedByFiles = getMatchedFileSpec(program, fileName);
|
|
if (matchedByFiles)
|
|
return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Part_of_files_list_in_tsconfig_json);
|
|
var matchedByInclude = getMatchedIncludeSpec(program, fileName);
|
|
return ts.isString(matchedByInclude) ?
|
|
ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Matched_by_include_pattern_0_in_1, matchedByInclude, toFileName(options.configFile, fileNameConvertor)) :
|
|
ts.chainDiagnosticMessages(undefined, matchedByInclude ?
|
|
ts.Diagnostics.Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk :
|
|
ts.Diagnostics.Root_file_specified_for_compilation);
|
|
case ts.FileIncludeKind.SourceFromProjectReference:
|
|
case ts.FileIncludeKind.OutputFromProjectReference:
|
|
var isOutput = reason.kind === ts.FileIncludeKind.OutputFromProjectReference;
|
|
var referencedResolvedRef = ts.Debug.checkDefined((_b = program.getResolvedProjectReferences()) === null || _b === void 0 ? void 0 : _b[reason.index]);
|
|
return ts.chainDiagnosticMessages(undefined, ts.outFile(options) ?
|
|
isOutput ?
|
|
ts.Diagnostics.Output_from_referenced_project_0_included_because_1_specified :
|
|
ts.Diagnostics.Source_from_referenced_project_0_included_because_1_specified :
|
|
isOutput ?
|
|
ts.Diagnostics.Output_from_referenced_project_0_included_because_module_is_specified_as_none :
|
|
ts.Diagnostics.Source_from_referenced_project_0_included_because_module_is_specified_as_none, toFileName(referencedResolvedRef.sourceFile.fileName, fileNameConvertor), options.outFile ? "--outFile" : "--out");
|
|
case ts.FileIncludeKind.AutomaticTypeDirectiveFile:
|
|
return ts.chainDiagnosticMessages(undefined, options.types ?
|
|
reason.packageId ?
|
|
ts.Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1 :
|
|
ts.Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions :
|
|
reason.packageId ?
|
|
ts.Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1 :
|
|
ts.Diagnostics.Entry_point_for_implicit_type_library_0, reason.typeReference, reason.packageId && ts.packageIdToString(reason.packageId));
|
|
case ts.FileIncludeKind.LibFile:
|
|
if (reason.index !== undefined)
|
|
return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Library_0_specified_in_compilerOptions, options.lib[reason.index]);
|
|
var target = ts.forEachEntry(ts.targetOptionDeclaration.type, function (value, key) { return value === ts.getEmitScriptTarget(options) ? key : undefined; });
|
|
return ts.chainDiagnosticMessages(undefined, target ?
|
|
ts.Diagnostics.Default_library_for_target_0 :
|
|
ts.Diagnostics.Default_library, target);
|
|
default:
|
|
ts.Debug.assertNever(reason);
|
|
}
|
|
}
|
|
ts.fileIncludeReasonToDiagnostics = fileIncludeReasonToDiagnostics;
|
|
function toFileName(file, fileNameConvertor) {
|
|
var fileName = ts.isString(file) ? file : file.fileName;
|
|
return fileNameConvertor ? fileNameConvertor(fileName) : fileName;
|
|
}
|
|
function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummary, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) {
|
|
var isListFilesOnly = !!program.getCompilerOptions().listFilesOnly;
|
|
var allDiagnostics = program.getConfigFileParsingDiagnostics().slice();
|
|
var configFileParsingDiagnosticsLength = allDiagnostics.length;
|
|
ts.addRange(allDiagnostics, program.getSyntacticDiagnostics(undefined, cancellationToken));
|
|
if (allDiagnostics.length === configFileParsingDiagnosticsLength) {
|
|
ts.addRange(allDiagnostics, program.getOptionsDiagnostics(cancellationToken));
|
|
if (!isListFilesOnly) {
|
|
ts.addRange(allDiagnostics, program.getGlobalDiagnostics(cancellationToken));
|
|
if (allDiagnostics.length === configFileParsingDiagnosticsLength) {
|
|
ts.addRange(allDiagnostics, program.getSemanticDiagnostics(undefined, cancellationToken));
|
|
}
|
|
}
|
|
}
|
|
var emitResult = isListFilesOnly
|
|
? { emitSkipped: true, diagnostics: ts.emptyArray }
|
|
: program.emit(undefined, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers);
|
|
var emittedFiles = emitResult.emittedFiles, emitDiagnostics = emitResult.diagnostics;
|
|
ts.addRange(allDiagnostics, emitDiagnostics);
|
|
var diagnostics = ts.sortAndDeduplicateDiagnostics(allDiagnostics);
|
|
diagnostics.forEach(reportDiagnostic);
|
|
if (write) {
|
|
var currentDir_1 = program.getCurrentDirectory();
|
|
ts.forEach(emittedFiles, function (file) {
|
|
var filepath = ts.getNormalizedAbsolutePath(file, currentDir_1);
|
|
write("TSFILE: ".concat(filepath));
|
|
});
|
|
listFiles(program, write);
|
|
}
|
|
if (reportSummary) {
|
|
reportSummary(getErrorCountForSummary(diagnostics), getFilesInErrorForSummary(diagnostics));
|
|
}
|
|
return {
|
|
emitResult: emitResult,
|
|
diagnostics: diagnostics,
|
|
};
|
|
}
|
|
ts.emitFilesAndReportErrors = emitFilesAndReportErrors;
|
|
function emitFilesAndReportErrorsAndGetExitStatus(program, reportDiagnostic, write, reportSummary, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) {
|
|
var _a = emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummary, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers), emitResult = _a.emitResult, diagnostics = _a.diagnostics;
|
|
if (emitResult.emitSkipped && diagnostics.length > 0) {
|
|
return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped;
|
|
}
|
|
else if (diagnostics.length > 0) {
|
|
return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated;
|
|
}
|
|
return ts.ExitStatus.Success;
|
|
}
|
|
ts.emitFilesAndReportErrorsAndGetExitStatus = emitFilesAndReportErrorsAndGetExitStatus;
|
|
ts.noopFileWatcher = { close: ts.noop };
|
|
ts.returnNoopFileWatcher = function () { return ts.noopFileWatcher; };
|
|
function createWatchHost(system, reportWatchStatus) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var onWatchStatusChange = reportWatchStatus || createWatchStatusReporter(system);
|
|
return {
|
|
onWatchStatusChange: onWatchStatusChange,
|
|
watchFile: ts.maybeBind(system, system.watchFile) || ts.returnNoopFileWatcher,
|
|
watchDirectory: ts.maybeBind(system, system.watchDirectory) || ts.returnNoopFileWatcher,
|
|
setTimeout: ts.maybeBind(system, system.setTimeout) || ts.noop,
|
|
clearTimeout: ts.maybeBind(system, system.clearTimeout) || ts.noop
|
|
};
|
|
}
|
|
ts.createWatchHost = createWatchHost;
|
|
ts.WatchType = {
|
|
ConfigFile: "Config file",
|
|
ExtendedConfigFile: "Extended config file",
|
|
SourceFile: "Source file",
|
|
MissingFile: "Missing file",
|
|
WildcardDirectory: "Wild card directory",
|
|
FailedLookupLocations: "Failed Lookup Locations",
|
|
AffectingFileLocation: "File location affecting resolution",
|
|
TypeRoots: "Type roots",
|
|
ConfigFileOfReferencedProject: "Config file of referened project",
|
|
ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
|
|
WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
|
|
PackageJson: "package.json file",
|
|
ClosedScriptInfo: "Closed Script info",
|
|
ConfigFileForInferredRoot: "Config file for the inferred project root",
|
|
NodeModules: "node_modules for closed script infos and package.jsons affecting module specifier cache",
|
|
MissingSourceMapFile: "Missing source map file",
|
|
NoopConfigFileForInferredRoot: "Noop Config file for the inferred project root",
|
|
MissingGeneratedFile: "Missing generated file",
|
|
NodeModulesForModuleSpecifierCache: "node_modules for module specifier cache invalidation",
|
|
};
|
|
function createWatchFactory(host, options) {
|
|
var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
|
|
var writeLog = watchLogLevel !== ts.WatchLogLevel.None ? (function (s) { return host.trace(s); }) : ts.noop;
|
|
var result = ts.getWatchFactory(host, watchLogLevel, writeLog);
|
|
result.writeLog = writeLog;
|
|
return result;
|
|
}
|
|
ts.createWatchFactory = createWatchFactory;
|
|
function createCompilerHostFromProgramHost(host, getCompilerOptions, directoryStructureHost) {
|
|
if (directoryStructureHost === void 0) { directoryStructureHost = host; }
|
|
var useCaseSensitiveFileNames = host.useCaseSensitiveFileNames();
|
|
var hostGetNewLine = ts.memoize(function () { return host.getNewLine(); });
|
|
return {
|
|
getSourceFile: function (fileName, languageVersionOrOptions, onError) {
|
|
var text;
|
|
try {
|
|
ts.performance.mark("beforeIORead");
|
|
text = host.readFile(fileName, getCompilerOptions().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, languageVersionOrOptions) : undefined;
|
|
},
|
|
getDefaultLibLocation: ts.maybeBind(host, host.getDefaultLibLocation),
|
|
getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); },
|
|
writeFile: writeFile,
|
|
getCurrentDirectory: ts.memoize(function () { return host.getCurrentDirectory(); }),
|
|
useCaseSensitiveFileNames: function () { return useCaseSensitiveFileNames; },
|
|
getCanonicalFileName: ts.createGetCanonicalFileName(useCaseSensitiveFileNames),
|
|
getNewLine: function () { return ts.getNewLineCharacter(getCompilerOptions(), hostGetNewLine); },
|
|
fileExists: function (f) { return host.fileExists(f); },
|
|
readFile: function (f) { return host.readFile(f); },
|
|
trace: ts.maybeBind(host, host.trace),
|
|
directoryExists: ts.maybeBind(directoryStructureHost, directoryStructureHost.directoryExists),
|
|
getDirectories: ts.maybeBind(directoryStructureHost, directoryStructureHost.getDirectories),
|
|
realpath: ts.maybeBind(host, host.realpath),
|
|
getEnvironmentVariable: ts.maybeBind(host, host.getEnvironmentVariable) || (function () { return ""; }),
|
|
createHash: ts.maybeBind(host, host.createHash),
|
|
readDirectory: ts.maybeBind(host, host.readDirectory),
|
|
disableUseFileVersionAsSignature: host.disableUseFileVersionAsSignature,
|
|
storeFilesChangingSignatureDuringEmit: host.storeFilesChangingSignatureDuringEmit,
|
|
};
|
|
function writeFile(fileName, text, writeByteOrderMark, onError) {
|
|
try {
|
|
ts.performance.mark("beforeIOWrite");
|
|
ts.writeFileEnsuringDirectories(fileName, text, writeByteOrderMark, function (path, data, writeByteOrderMark) { return host.writeFile(path, data, writeByteOrderMark); }, function (path) { return host.createDirectory(path); }, function (path) { return host.directoryExists(path); });
|
|
ts.performance.mark("afterIOWrite");
|
|
ts.performance.measure("I/O Write", "beforeIOWrite", "afterIOWrite");
|
|
}
|
|
catch (e) {
|
|
if (onError) {
|
|
onError(e.message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ts.createCompilerHostFromProgramHost = createCompilerHostFromProgramHost;
|
|
function setGetSourceFileAsHashVersioned(compilerHost, host) {
|
|
var originalGetSourceFile = compilerHost.getSourceFile;
|
|
var computeHash = ts.maybeBind(host, host.createHash) || ts.generateDjb2Hash;
|
|
compilerHost.getSourceFile = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
|
|
if (result) {
|
|
result.version = computeHash(result.text);
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
ts.setGetSourceFileAsHashVersioned = setGetSourceFileAsHashVersioned;
|
|
function createProgramHost(system, createProgram) {
|
|
var getDefaultLibLocation = ts.memoize(function () { return ts.getDirectoryPath(ts.normalizePath(system.getExecutingFilePath())); });
|
|
return {
|
|
useCaseSensitiveFileNames: function () { return system.useCaseSensitiveFileNames; },
|
|
getNewLine: function () { return system.newLine; },
|
|
getCurrentDirectory: ts.memoize(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: ts.maybeBind(system, system.realpath),
|
|
getEnvironmentVariable: ts.maybeBind(system, system.getEnvironmentVariable),
|
|
trace: function (s) { return system.write(s + system.newLine); },
|
|
createDirectory: function (path) { return system.createDirectory(path); },
|
|
writeFile: function (path, data, writeByteOrderMark) { return system.writeFile(path, data, writeByteOrderMark); },
|
|
createHash: ts.maybeBind(system, system.createHash),
|
|
createProgram: createProgram || ts.createEmitAndSemanticDiagnosticsBuilderProgram,
|
|
disableUseFileVersionAsSignature: system.disableUseFileVersionAsSignature,
|
|
storeFilesChangingSignatureDuringEmit: system.storeFilesChangingSignatureDuringEmit,
|
|
now: ts.maybeBind(system, system.now),
|
|
};
|
|
}
|
|
ts.createProgramHost = createProgramHost;
|
|
function createWatchCompilerHost(system, createProgram, reportDiagnostic, reportWatchStatus) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var write = function (s) { return system.write(s + system.newLine); };
|
|
var result = createProgramHost(system, createProgram);
|
|
ts.copyProperties(result, createWatchHost(system, reportWatchStatus));
|
|
result.afterProgramCreate = function (builderProgram) {
|
|
var compilerOptions = builderProgram.getCompilerOptions();
|
|
var newLine = ts.getNewLineCharacter(compilerOptions, function () { return system.newLine; });
|
|
emitFilesAndReportErrors(builderProgram, reportDiagnostic, write, function (errorCount) { return result.onWatchStatusChange(ts.createCompilerDiagnostic(getWatchErrorSummaryDiagnosticMessage(errorCount), errorCount), newLine, compilerOptions, errorCount); });
|
|
};
|
|
return result;
|
|
}
|
|
function reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic) {
|
|
reportDiagnostic(diagnostic);
|
|
system.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
function createWatchCompilerHostOfConfigFile(_a) {
|
|
var configFileName = _a.configFileName, optionsToExtend = _a.optionsToExtend, watchOptionsToExtend = _a.watchOptionsToExtend, extraFileExtensions = _a.extraFileExtensions, system = _a.system, createProgram = _a.createProgram, reportDiagnostic = _a.reportDiagnostic, reportWatchStatus = _a.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;
|
|
host.watchOptionsToExtend = watchOptionsToExtend;
|
|
host.extraFileExtensions = extraFileExtensions;
|
|
return host;
|
|
}
|
|
ts.createWatchCompilerHostOfConfigFile = createWatchCompilerHostOfConfigFile;
|
|
function createWatchCompilerHostOfFilesAndCompilerOptions(_a) {
|
|
var rootFiles = _a.rootFiles, options = _a.options, watchOptions = _a.watchOptions, projectReferences = _a.projectReferences, system = _a.system, createProgram = _a.createProgram, reportDiagnostic = _a.reportDiagnostic, reportWatchStatus = _a.reportWatchStatus;
|
|
var host = createWatchCompilerHost(system, createProgram, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus);
|
|
host.rootFiles = rootFiles;
|
|
host.options = options;
|
|
host.watchOptions = watchOptions;
|
|
host.projectReferences = projectReferences;
|
|
return host;
|
|
}
|
|
ts.createWatchCompilerHostOfFilesAndCompilerOptions = createWatchCompilerHostOfFilesAndCompilerOptions;
|
|
function performIncrementalCompilation(input) {
|
|
var system = input.system || ts.sys;
|
|
var host = input.host || (input.host = ts.createIncrementalCompilerHost(input.options, system));
|
|
var builderProgram = ts.createIncrementalProgram(input);
|
|
var exitStatus = emitFilesAndReportErrorsAndGetExitStatus(builderProgram, input.reportDiagnostic || createDiagnosticReporter(system), function (s) { return host.trace && host.trace(s); }, input.reportErrorSummary || input.options.pretty ? function (errorCount, filesInError) { return system.write(getErrorSummaryText(errorCount, filesInError, system.newLine, host)); } : undefined);
|
|
if (input.afterProgramEmitAndDiagnostics)
|
|
input.afterProgramEmitAndDiagnostics(builderProgram);
|
|
return exitStatus;
|
|
}
|
|
ts.performIncrementalCompilation = performIncrementalCompilation;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function readBuilderProgram(compilerOptions, host) {
|
|
var buildInfoPath = ts.getTsBuildInfoEmitOutputFilePath(compilerOptions);
|
|
if (!buildInfoPath)
|
|
return undefined;
|
|
var buildInfo;
|
|
if (host.getBuildInfo) {
|
|
buildInfo = host.getBuildInfo(buildInfoPath, compilerOptions.configFilePath);
|
|
if (!buildInfo)
|
|
return undefined;
|
|
}
|
|
else {
|
|
var content = host.readFile(buildInfoPath);
|
|
if (!content)
|
|
return undefined;
|
|
buildInfo = ts.getBuildInfo(content);
|
|
}
|
|
if (buildInfo.version !== ts.version)
|
|
return undefined;
|
|
if (!buildInfo.program)
|
|
return undefined;
|
|
return ts.createBuilderProgramUsingProgramBuildInfo(buildInfo.program, buildInfoPath, host);
|
|
}
|
|
ts.readBuilderProgram = readBuilderProgram;
|
|
function createIncrementalCompilerHost(options, system) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var host = ts.createCompilerHostWorker(options, undefined, system);
|
|
host.createHash = ts.maybeBind(system, system.createHash);
|
|
host.disableUseFileVersionAsSignature = system.disableUseFileVersionAsSignature;
|
|
host.storeFilesChangingSignatureDuringEmit = system.storeFilesChangingSignatureDuringEmit;
|
|
ts.setGetSourceFileAsHashVersioned(host, system);
|
|
ts.changeCompilerHostLikeToUseCache(host, function (fileName) { return ts.toPath(fileName, host.getCurrentDirectory(), host.getCanonicalFileName); });
|
|
return host;
|
|
}
|
|
ts.createIncrementalCompilerHost = createIncrementalCompilerHost;
|
|
function createIncrementalProgram(_a) {
|
|
var rootNames = _a.rootNames, options = _a.options, configFileParsingDiagnostics = _a.configFileParsingDiagnostics, projectReferences = _a.projectReferences, host = _a.host, createProgram = _a.createProgram;
|
|
host = host || createIncrementalCompilerHost(options);
|
|
createProgram = createProgram || ts.createEmitAndSemanticDiagnosticsBuilderProgram;
|
|
var oldProgram = readBuilderProgram(options, host);
|
|
return createProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences);
|
|
}
|
|
ts.createIncrementalProgram = createIncrementalProgram;
|
|
function createWatchCompilerHost(rootFilesOrConfigFileName, options, system, createProgram, reportDiagnostic, reportWatchStatus, projectReferencesOrWatchOptionsToExtend, watchOptionsOrExtraFileExtensions) {
|
|
if (ts.isArray(rootFilesOrConfigFileName)) {
|
|
return ts.createWatchCompilerHostOfFilesAndCompilerOptions({
|
|
rootFiles: rootFilesOrConfigFileName,
|
|
options: options,
|
|
watchOptions: watchOptionsOrExtraFileExtensions,
|
|
projectReferences: projectReferencesOrWatchOptionsToExtend,
|
|
system: system,
|
|
createProgram: createProgram,
|
|
reportDiagnostic: reportDiagnostic,
|
|
reportWatchStatus: reportWatchStatus,
|
|
});
|
|
}
|
|
else {
|
|
return ts.createWatchCompilerHostOfConfigFile({
|
|
configFileName: rootFilesOrConfigFileName,
|
|
optionsToExtend: options,
|
|
watchOptionsToExtend: projectReferencesOrWatchOptionsToExtend,
|
|
extraFileExtensions: watchOptionsOrExtraFileExtensions,
|
|
system: system,
|
|
createProgram: createProgram,
|
|
reportDiagnostic: reportDiagnostic,
|
|
reportWatchStatus: reportWatchStatus,
|
|
});
|
|
}
|
|
}
|
|
ts.createWatchCompilerHost = createWatchCompilerHost;
|
|
function createWatchProgram(host) {
|
|
var builderProgram;
|
|
var reloadLevel;
|
|
var missingFilesMap;
|
|
var watchedWildcardDirectories;
|
|
var timerToUpdateProgram;
|
|
var timerToInvalidateFailedLookupResolutions;
|
|
var parsedConfigs;
|
|
var sharedExtendedConfigFileWatchers;
|
|
var extendedConfigCache = host.extendedConfigCache;
|
|
var reportFileChangeDetectedOnCreateProgram = false;
|
|
var sourceFilesCache = new ts.Map();
|
|
var missingFilePathsRequestedForRelease;
|
|
var hasChangedCompilerOptions = false;
|
|
var useCaseSensitiveFileNames = host.useCaseSensitiveFileNames();
|
|
var currentDirectory = host.getCurrentDirectory();
|
|
var configFileName = host.configFileName, _a = host.optionsToExtend, optionsToExtendForConfigFile = _a === void 0 ? {} : _a, watchOptionsToExtend = host.watchOptionsToExtend, extraFileExtensions = host.extraFileExtensions, createProgram = host.createProgram;
|
|
var rootFileNames = host.rootFiles, compilerOptions = host.options, watchOptions = host.watchOptions, projectReferences = host.projectReferences;
|
|
var wildcardDirectories;
|
|
var configFileParsingDiagnostics;
|
|
var canConfigFileJsonReportNoInputFiles = false;
|
|
var hasChangedConfigFileParsingErrors = false;
|
|
var cachedDirectoryStructureHost = configFileName === undefined ? undefined : ts.createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames);
|
|
var directoryStructureHost = cachedDirectoryStructureHost || host;
|
|
var parseConfigFileHost = ts.parseConfigHostFromCompilerHostLike(host, directoryStructureHost);
|
|
var newLine = updateNewLine();
|
|
if (configFileName && host.configFileParsingResult) {
|
|
setConfigFileParsingResult(host.configFileParsingResult);
|
|
newLine = updateNewLine();
|
|
}
|
|
reportWatchDiagnostic(ts.Diagnostics.Starting_compilation_in_watch_mode);
|
|
if (configFileName && !host.configFileParsingResult) {
|
|
newLine = ts.getNewLineCharacter(optionsToExtendForConfigFile, function () { return host.getNewLine(); });
|
|
ts.Debug.assert(!rootFileNames);
|
|
parseConfigFile();
|
|
newLine = updateNewLine();
|
|
}
|
|
var _b = ts.createWatchFactory(host, compilerOptions), watchFile = _b.watchFile, watchDirectory = _b.watchDirectory, writeLog = _b.writeLog;
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
|
|
writeLog("Current directory: ".concat(currentDirectory, " CaseSensitiveFileNames: ").concat(useCaseSensitiveFileNames));
|
|
var configFileWatcher;
|
|
if (configFileName) {
|
|
configFileWatcher = watchFile(configFileName, scheduleProgramReload, ts.PollingInterval.High, watchOptions, ts.WatchType.ConfigFile);
|
|
}
|
|
var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return compilerOptions; }, directoryStructureHost);
|
|
ts.setGetSourceFileAsHashVersioned(compilerHost, host);
|
|
var getNewSourceFile = compilerHost.getSourceFile;
|
|
compilerHost.getSourceFile = function (fileName) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
|
|
};
|
|
compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
|
|
compilerHost.getNewLine = function () { return newLine; };
|
|
compilerHost.fileExists = fileExists;
|
|
compilerHost.onReleaseOldSourceFile = onReleaseOldSourceFile;
|
|
compilerHost.onReleaseParsedCommandLine = onReleaseParsedCommandLine;
|
|
compilerHost.toPath = toPath;
|
|
compilerHost.getCompilationSettings = function () { return compilerOptions; };
|
|
compilerHost.useSourceOfProjectReferenceRedirect = ts.maybeBind(host, host.useSourceOfProjectReferenceRedirect);
|
|
compilerHost.watchDirectoryOfFailedLookupLocation = function (dir, cb, flags) { return watchDirectory(dir, cb, flags, watchOptions, ts.WatchType.FailedLookupLocations); };
|
|
compilerHost.watchAffectingFileLocation = function (file, cb) { return watchFile(file, cb, ts.PollingInterval.High, watchOptions, ts.WatchType.AffectingFileLocation); };
|
|
compilerHost.watchTypeRootsDirectory = function (dir, cb, flags) { return watchDirectory(dir, cb, flags, watchOptions, ts.WatchType.TypeRoots); };
|
|
compilerHost.getCachedDirectoryStructureHost = function () { return cachedDirectoryStructureHost; };
|
|
compilerHost.scheduleInvalidateResolutionsOfFailedLookupLocations = scheduleInvalidateResolutionsOfFailedLookupLocations;
|
|
compilerHost.onInvalidatedResolution = scheduleProgramUpdate;
|
|
compilerHost.onChangedAutomaticTypeDirectiveNames = scheduleProgramUpdate;
|
|
compilerHost.fileIsOpen = ts.returnFalse;
|
|
compilerHost.getCurrentProgram = getCurrentProgram;
|
|
compilerHost.writeLog = writeLog;
|
|
compilerHost.getParsedCommandLine = getParsedCommandLine;
|
|
var resolutionCache = ts.createResolutionCache(compilerHost, configFileName ?
|
|
ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFileName, currentDirectory)) :
|
|
currentDirectory, false);
|
|
compilerHost.resolveModuleNames = host.resolveModuleNames ?
|
|
(function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return host.resolveModuleNames.apply(host, args);
|
|
}) :
|
|
(function (moduleNames, containingFile, reusedNames, redirectedReference, _options, sourceFile) { return resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, redirectedReference, sourceFile); });
|
|
compilerHost.resolveTypeReferenceDirectives = host.resolveTypeReferenceDirectives ?
|
|
(function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return host.resolveTypeReferenceDirectives.apply(host, args);
|
|
}) :
|
|
(function (typeDirectiveNames, containingFile, redirectedReference, _options, containingFileMode) { return resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile, redirectedReference, containingFileMode); });
|
|
compilerHost.getModuleResolutionCache = host.resolveModuleNames ?
|
|
ts.maybeBind(host, host.getModuleResolutionCache) :
|
|
(function () { return resolutionCache.getModuleResolutionCache(); });
|
|
var userProvidedResolution = !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives;
|
|
builderProgram = readBuilderProgram(compilerOptions, compilerHost);
|
|
synchronizeProgram();
|
|
watchConfigFileWildCardDirectories();
|
|
if (configFileName)
|
|
updateExtendedConfigFilesWatches(toPath(configFileName), compilerOptions, watchOptions, ts.WatchType.ExtendedConfigFile);
|
|
return configFileName ?
|
|
{ getCurrentProgram: getCurrentBuilderProgram, getProgram: updateProgram, close: close } :
|
|
{ getCurrentProgram: getCurrentBuilderProgram, getProgram: updateProgram, updateRootFileNames: updateRootFileNames, close: close };
|
|
function close() {
|
|
clearInvalidateResolutionsOfFailedLookupLocations();
|
|
resolutionCache.clear();
|
|
ts.clearMap(sourceFilesCache, function (value) {
|
|
if (value && value.fileWatcher) {
|
|
value.fileWatcher.close();
|
|
value.fileWatcher = undefined;
|
|
}
|
|
});
|
|
if (configFileWatcher) {
|
|
configFileWatcher.close();
|
|
configFileWatcher = undefined;
|
|
}
|
|
extendedConfigCache === null || extendedConfigCache === void 0 ? void 0 : extendedConfigCache.clear();
|
|
extendedConfigCache = undefined;
|
|
if (sharedExtendedConfigFileWatchers) {
|
|
ts.clearMap(sharedExtendedConfigFileWatchers, ts.closeFileWatcherOf);
|
|
sharedExtendedConfigFileWatchers = undefined;
|
|
}
|
|
if (watchedWildcardDirectories) {
|
|
ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf);
|
|
watchedWildcardDirectories = undefined;
|
|
}
|
|
if (missingFilesMap) {
|
|
ts.clearMap(missingFilesMap, ts.closeFileWatcher);
|
|
missingFilesMap = undefined;
|
|
}
|
|
if (parsedConfigs) {
|
|
ts.clearMap(parsedConfigs, function (config) {
|
|
var _a;
|
|
(_a = config.watcher) === null || _a === void 0 ? void 0 : _a.close();
|
|
config.watcher = undefined;
|
|
if (config.watchedDirectories)
|
|
ts.clearMap(config.watchedDirectories, ts.closeFileWatcherOf);
|
|
config.watchedDirectories = undefined;
|
|
});
|
|
parsedConfigs = undefined;
|
|
}
|
|
}
|
|
function getCurrentBuilderProgram() {
|
|
return builderProgram;
|
|
}
|
|
function getCurrentProgram() {
|
|
return builderProgram && builderProgram.getProgramOrUndefined();
|
|
}
|
|
function synchronizeProgram() {
|
|
writeLog("Synchronizing program");
|
|
clearInvalidateResolutionsOfFailedLookupLocations();
|
|
var program = getCurrentBuilderProgram();
|
|
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, getParsedCommandLine, projectReferences)) {
|
|
if (hasChangedConfigFileParsingErrors) {
|
|
if (reportFileChangeDetectedOnCreateProgram) {
|
|
reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation);
|
|
}
|
|
builderProgram = createProgram(undefined, undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
|
|
hasChangedConfigFileParsingErrors = false;
|
|
}
|
|
}
|
|
else {
|
|
if (reportFileChangeDetectedOnCreateProgram) {
|
|
reportWatchDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation);
|
|
}
|
|
createNewProgram(hasInvalidatedResolution);
|
|
}
|
|
reportFileChangeDetectedOnCreateProgram = false;
|
|
if (host.afterProgramCreate && program !== builderProgram) {
|
|
host.afterProgramCreate(builderProgram);
|
|
}
|
|
return builderProgram;
|
|
}
|
|
function createNewProgram(hasInvalidatedResolution) {
|
|
writeLog("CreatingProgramWith::");
|
|
writeLog(" roots: ".concat(JSON.stringify(rootFileNames)));
|
|
writeLog(" options: ".concat(JSON.stringify(compilerOptions)));
|
|
if (projectReferences)
|
|
writeLog(" projectReferences: ".concat(JSON.stringify(projectReferences)));
|
|
var needsUpdateInTypeRootWatch = hasChangedCompilerOptions || !getCurrentProgram();
|
|
hasChangedCompilerOptions = false;
|
|
hasChangedConfigFileParsingErrors = false;
|
|
resolutionCache.startCachingPerDirectoryResolution();
|
|
compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
|
|
compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
|
|
var oldProgram = getCurrentProgram();
|
|
builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
|
|
resolutionCache.finishCachingPerDirectoryResolution(builderProgram.getProgram(), oldProgram);
|
|
ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), 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 === "boolean";
|
|
}
|
|
function isFilePresenceUnknownOnHost(hostSourceFile) {
|
|
return typeof hostSourceFile.version === "boolean";
|
|
}
|
|
function fileExists(fileName) {
|
|
var path = toPath(fileName);
|
|
if (isFileMissingOnHost(sourceFilesCache.get(path))) {
|
|
return false;
|
|
}
|
|
return directoryStructureHost.fileExists(fileName);
|
|
}
|
|
function getVersionedSourceFileByPath(fileName, path, languageVersionOrOptions, onError, shouldCreateNewSourceFile) {
|
|
var hostSourceFile = sourceFilesCache.get(path);
|
|
if (isFileMissingOnHost(hostSourceFile)) {
|
|
return undefined;
|
|
}
|
|
if (hostSourceFile === undefined || shouldCreateNewSourceFile || isFilePresenceUnknownOnHost(hostSourceFile)) {
|
|
var sourceFile = getNewSourceFile(fileName, languageVersionOrOptions, onError);
|
|
if (hostSourceFile) {
|
|
if (sourceFile) {
|
|
hostSourceFile.sourceFile = sourceFile;
|
|
hostSourceFile.version = sourceFile.version;
|
|
if (!hostSourceFile.fileWatcher) {
|
|
hostSourceFile.fileWatcher = watchFilePath(path, fileName, onSourceFileChange, ts.PollingInterval.Low, watchOptions, ts.WatchType.SourceFile);
|
|
}
|
|
}
|
|
else {
|
|
if (hostSourceFile.fileWatcher) {
|
|
hostSourceFile.fileWatcher.close();
|
|
}
|
|
sourceFilesCache.set(path, false);
|
|
}
|
|
}
|
|
else {
|
|
if (sourceFile) {
|
|
var fileWatcher = watchFilePath(path, fileName, onSourceFileChange, ts.PollingInterval.Low, watchOptions, ts.WatchType.SourceFile);
|
|
sourceFilesCache.set(path, { sourceFile: sourceFile, version: sourceFile.version, fileWatcher: fileWatcher });
|
|
}
|
|
else {
|
|
sourceFilesCache.set(path, false);
|
|
}
|
|
}
|
|
return sourceFile;
|
|
}
|
|
return hostSourceFile.sourceFile;
|
|
}
|
|
function nextSourceFileVersion(path) {
|
|
var hostSourceFile = sourceFilesCache.get(path);
|
|
if (hostSourceFile !== undefined) {
|
|
if (isFileMissingOnHost(hostSourceFile)) {
|
|
sourceFilesCache.set(path, { version: false });
|
|
}
|
|
else {
|
|
hostSourceFile.version = false;
|
|
}
|
|
}
|
|
}
|
|
function getSourceVersion(path) {
|
|
var hostSourceFile = sourceFilesCache.get(path);
|
|
return !hostSourceFile || !hostSourceFile.version ? undefined : hostSourceFile.version;
|
|
}
|
|
function onReleaseOldSourceFile(oldSourceFile, _oldOptions, hasSourceFileByPath) {
|
|
var hostSourceFileInfo = sourceFilesCache.get(oldSourceFile.resolvedPath);
|
|
if (hostSourceFileInfo !== undefined) {
|
|
if (isFileMissingOnHost(hostSourceFileInfo)) {
|
|
(missingFilePathsRequestedForRelease || (missingFilePathsRequestedForRelease = [])).push(oldSourceFile.path);
|
|
}
|
|
else if (hostSourceFileInfo.sourceFile === oldSourceFile) {
|
|
if (hostSourceFileInfo.fileWatcher) {
|
|
hostSourceFileInfo.fileWatcher.close();
|
|
}
|
|
sourceFilesCache.delete(oldSourceFile.resolvedPath);
|
|
if (!hasSourceFileByPath) {
|
|
resolutionCache.removeResolutionsOfFile(oldSourceFile.path);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function reportWatchDiagnostic(message) {
|
|
if (host.onWatchStatusChange) {
|
|
host.onWatchStatusChange(ts.createCompilerDiagnostic(message), newLine, compilerOptions || optionsToExtendForConfigFile);
|
|
}
|
|
}
|
|
function hasChangedAutomaticTypeDirectiveNames() {
|
|
return resolutionCache.hasChangedAutomaticTypeDirectiveNames();
|
|
}
|
|
function clearInvalidateResolutionsOfFailedLookupLocations() {
|
|
if (!timerToInvalidateFailedLookupResolutions)
|
|
return false;
|
|
host.clearTimeout(timerToInvalidateFailedLookupResolutions);
|
|
timerToInvalidateFailedLookupResolutions = undefined;
|
|
return true;
|
|
}
|
|
function scheduleInvalidateResolutionsOfFailedLookupLocations() {
|
|
if (!host.setTimeout || !host.clearTimeout) {
|
|
return resolutionCache.invalidateResolutionsOfFailedLookupLocations();
|
|
}
|
|
var pending = clearInvalidateResolutionsOfFailedLookupLocations();
|
|
writeLog("Scheduling invalidateFailedLookup".concat(pending ? ", Cancelled earlier one" : ""));
|
|
timerToInvalidateFailedLookupResolutions = host.setTimeout(invalidateResolutionsOfFailedLookup, 250);
|
|
}
|
|
function invalidateResolutionsOfFailedLookup() {
|
|
timerToInvalidateFailedLookupResolutions = undefined;
|
|
if (resolutionCache.invalidateResolutionsOfFailedLookupLocations()) {
|
|
scheduleProgramUpdate();
|
|
}
|
|
}
|
|
function scheduleProgramUpdate() {
|
|
if (!host.setTimeout || !host.clearTimeout) {
|
|
return;
|
|
}
|
|
if (timerToUpdateProgram) {
|
|
host.clearTimeout(timerToUpdateProgram);
|
|
}
|
|
writeLog("Scheduling update");
|
|
timerToUpdateProgram = host.setTimeout(updateProgramWithWatchStatus, 250);
|
|
}
|
|
function scheduleProgramReload() {
|
|
ts.Debug.assert(!!configFileName);
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
|
|
scheduleProgramUpdate();
|
|
}
|
|
function updateProgramWithWatchStatus() {
|
|
timerToUpdateProgram = undefined;
|
|
reportFileChangeDetectedOnCreateProgram = true;
|
|
updateProgram();
|
|
}
|
|
function updateProgram() {
|
|
switch (reloadLevel) {
|
|
case ts.ConfigFileProgramReloadLevel.Partial:
|
|
ts.perfLogger.logStartUpdateProgram("PartialConfigReload");
|
|
reloadFileNamesFromConfigFile();
|
|
break;
|
|
case ts.ConfigFileProgramReloadLevel.Full:
|
|
ts.perfLogger.logStartUpdateProgram("FullConfigReload");
|
|
reloadConfigFile();
|
|
break;
|
|
default:
|
|
ts.perfLogger.logStartUpdateProgram("SynchronizeProgram");
|
|
synchronizeProgram();
|
|
break;
|
|
}
|
|
ts.perfLogger.logStopUpdateProgram("Done");
|
|
return getCurrentBuilderProgram();
|
|
}
|
|
function reloadFileNamesFromConfigFile() {
|
|
writeLog("Reloading new file names and options");
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.None;
|
|
rootFileNames = ts.getFileNamesFromConfigSpecs(compilerOptions.configFile.configFileSpecs, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), currentDirectory), compilerOptions, parseConfigFileHost, extraFileExtensions);
|
|
if (ts.updateErrorForNoInputFiles(rootFileNames, ts.getNormalizedAbsolutePath(configFileName, currentDirectory), compilerOptions.configFile.configFileSpecs, configFileParsingDiagnostics, canConfigFileJsonReportNoInputFiles)) {
|
|
hasChangedConfigFileParsingErrors = true;
|
|
}
|
|
synchronizeProgram();
|
|
}
|
|
function reloadConfigFile() {
|
|
writeLog("Reloading config file: ".concat(configFileName));
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.None;
|
|
if (cachedDirectoryStructureHost) {
|
|
cachedDirectoryStructureHost.clearCache();
|
|
}
|
|
parseConfigFile();
|
|
hasChangedCompilerOptions = true;
|
|
synchronizeProgram();
|
|
watchConfigFileWildCardDirectories();
|
|
updateExtendedConfigFilesWatches(toPath(configFileName), compilerOptions, watchOptions, ts.WatchType.ExtendedConfigFile);
|
|
}
|
|
function parseConfigFile() {
|
|
setConfigFileParsingResult(ts.getParsedCommandLineOfConfigFile(configFileName, optionsToExtendForConfigFile, parseConfigFileHost, extendedConfigCache || (extendedConfigCache = new ts.Map()), watchOptionsToExtend, extraFileExtensions));
|
|
}
|
|
function setConfigFileParsingResult(configFileParseResult) {
|
|
rootFileNames = configFileParseResult.fileNames;
|
|
compilerOptions = configFileParseResult.options;
|
|
watchOptions = configFileParseResult.watchOptions;
|
|
projectReferences = configFileParseResult.projectReferences;
|
|
wildcardDirectories = configFileParseResult.wildcardDirectories;
|
|
configFileParsingDiagnostics = ts.getConfigFileParsingDiagnostics(configFileParseResult).slice();
|
|
canConfigFileJsonReportNoInputFiles = ts.canJsonReportNoInputFiles(configFileParseResult.raw);
|
|
hasChangedConfigFileParsingErrors = true;
|
|
}
|
|
function getParsedCommandLine(configFileName) {
|
|
var configPath = toPath(configFileName);
|
|
var config = parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.get(configPath);
|
|
if (config) {
|
|
if (!config.reloadLevel)
|
|
return config.parsedCommandLine;
|
|
if (config.parsedCommandLine && config.reloadLevel === ts.ConfigFileProgramReloadLevel.Partial && !host.getParsedCommandLine) {
|
|
writeLog("Reloading new file names and options");
|
|
var fileNames = ts.getFileNamesFromConfigSpecs(config.parsedCommandLine.options.configFile.configFileSpecs, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), currentDirectory), compilerOptions, parseConfigFileHost);
|
|
config.parsedCommandLine = __assign(__assign({}, config.parsedCommandLine), { fileNames: fileNames });
|
|
config.reloadLevel = undefined;
|
|
return config.parsedCommandLine;
|
|
}
|
|
}
|
|
writeLog("Loading config file: ".concat(configFileName));
|
|
var parsedCommandLine = host.getParsedCommandLine ?
|
|
host.getParsedCommandLine(configFileName) :
|
|
getParsedCommandLineFromConfigFileHost(configFileName);
|
|
if (config) {
|
|
config.parsedCommandLine = parsedCommandLine;
|
|
config.reloadLevel = undefined;
|
|
}
|
|
else {
|
|
(parsedConfigs || (parsedConfigs = new ts.Map())).set(configPath, config = { parsedCommandLine: parsedCommandLine });
|
|
}
|
|
watchReferencedProject(configFileName, configPath, config);
|
|
return parsedCommandLine;
|
|
}
|
|
function getParsedCommandLineFromConfigFileHost(configFileName) {
|
|
var onUnRecoverableConfigFileDiagnostic = parseConfigFileHost.onUnRecoverableConfigFileDiagnostic;
|
|
parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = ts.noop;
|
|
var parsedCommandLine = ts.getParsedCommandLineOfConfigFile(configFileName, undefined, parseConfigFileHost, extendedConfigCache || (extendedConfigCache = new ts.Map()), watchOptionsToExtend);
|
|
parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = onUnRecoverableConfigFileDiagnostic;
|
|
return parsedCommandLine;
|
|
}
|
|
function onReleaseParsedCommandLine(fileName) {
|
|
var _a;
|
|
var path = toPath(fileName);
|
|
var config = parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.get(path);
|
|
if (!config)
|
|
return;
|
|
parsedConfigs.delete(path);
|
|
if (config.watchedDirectories)
|
|
ts.clearMap(config.watchedDirectories, ts.closeFileWatcherOf);
|
|
(_a = config.watcher) === null || _a === void 0 ? void 0 : _a.close();
|
|
ts.clearSharedExtendedConfigFileWatcher(path, sharedExtendedConfigFileWatchers);
|
|
}
|
|
function watchFilePath(path, file, callback, pollingInterval, options, watchType) {
|
|
return watchFile(file, function (fileName, eventKind) { return callback(fileName, eventKind, path); }, pollingInterval, options, watchType);
|
|
}
|
|
function onSourceFileChange(fileName, eventKind, path) {
|
|
updateCachedSystemWithFile(fileName, path, eventKind);
|
|
if (eventKind === ts.FileWatcherEventKind.Deleted && sourceFilesCache.has(path)) {
|
|
resolutionCache.invalidateResolutionOfFile(path);
|
|
}
|
|
nextSourceFileVersion(path);
|
|
scheduleProgramUpdate();
|
|
}
|
|
function updateCachedSystemWithFile(fileName, path, eventKind) {
|
|
if (cachedDirectoryStructureHost) {
|
|
cachedDirectoryStructureHost.addOrDeleteFile(fileName, path, eventKind);
|
|
}
|
|
}
|
|
function watchMissingFilePath(missingFilePath) {
|
|
return (parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.has(missingFilePath)) ?
|
|
ts.noopFileWatcher :
|
|
watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
|
|
}
|
|
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 (wildcardDirectories) {
|
|
ts.updateWatchingWildcardDirectories(watchedWildcardDirectories || (watchedWildcardDirectories = new ts.Map()), new ts.Map(ts.getEntries(wildcardDirectories)), watchWildcardDirectory);
|
|
}
|
|
else if (watchedWildcardDirectories) {
|
|
ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf);
|
|
}
|
|
}
|
|
function watchWildcardDirectory(directory, flags) {
|
|
return watchDirectory(directory, function (fileOrDirectory) {
|
|
ts.Debug.assert(!!configFileName);
|
|
var fileOrDirectoryPath = toPath(fileOrDirectory);
|
|
if (cachedDirectoryStructureHost) {
|
|
cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
|
|
}
|
|
nextSourceFileVersion(fileOrDirectoryPath);
|
|
if (ts.isIgnoredFileFromWildCardWatching({
|
|
watchedDirPath: toPath(directory),
|
|
fileOrDirectory: fileOrDirectory,
|
|
fileOrDirectoryPath: fileOrDirectoryPath,
|
|
configFileName: configFileName,
|
|
extraFileExtensions: extraFileExtensions,
|
|
options: compilerOptions,
|
|
program: getCurrentBuilderProgram() || rootFileNames,
|
|
currentDirectory: currentDirectory,
|
|
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
|
|
writeLog: writeLog,
|
|
toPath: toPath,
|
|
}))
|
|
return;
|
|
if (reloadLevel !== ts.ConfigFileProgramReloadLevel.Full) {
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.Partial;
|
|
scheduleProgramUpdate();
|
|
}
|
|
}, flags, watchOptions, ts.WatchType.WildcardDirectory);
|
|
}
|
|
function updateExtendedConfigFilesWatches(forProjectPath, options, watchOptions, watchType) {
|
|
ts.updateSharedExtendedConfigFileWatcher(forProjectPath, options, sharedExtendedConfigFileWatchers || (sharedExtendedConfigFileWatchers = new ts.Map()), function (extendedConfigFileName, extendedConfigFilePath) { return watchFile(extendedConfigFileName, function (_fileName, eventKind) {
|
|
var _a;
|
|
updateCachedSystemWithFile(extendedConfigFileName, extendedConfigFilePath, eventKind);
|
|
if (extendedConfigCache)
|
|
ts.cleanExtendedConfigCache(extendedConfigCache, extendedConfigFilePath, toPath);
|
|
var projects = (_a = sharedExtendedConfigFileWatchers.get(extendedConfigFilePath)) === null || _a === void 0 ? void 0 : _a.projects;
|
|
if (!(projects === null || projects === void 0 ? void 0 : projects.size))
|
|
return;
|
|
projects.forEach(function (projectPath) {
|
|
if (toPath(configFileName) === projectPath) {
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
|
|
}
|
|
else {
|
|
var config = parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.get(projectPath);
|
|
if (config)
|
|
config.reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
|
|
resolutionCache.removeResolutionsFromProjectReferenceRedirects(projectPath);
|
|
}
|
|
scheduleProgramUpdate();
|
|
});
|
|
}, ts.PollingInterval.High, watchOptions, watchType); }, toPath);
|
|
}
|
|
function watchReferencedProject(configFileName, configPath, commandLine) {
|
|
var _a, _b, _c, _d, _e;
|
|
commandLine.watcher || (commandLine.watcher = watchFile(configFileName, function (_fileName, eventKind) {
|
|
updateCachedSystemWithFile(configFileName, configPath, eventKind);
|
|
var config = parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.get(configPath);
|
|
if (config)
|
|
config.reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
|
|
resolutionCache.removeResolutionsFromProjectReferenceRedirects(configPath);
|
|
scheduleProgramUpdate();
|
|
}, ts.PollingInterval.High, ((_a = commandLine.parsedCommandLine) === null || _a === void 0 ? void 0 : _a.watchOptions) || watchOptions, ts.WatchType.ConfigFileOfReferencedProject));
|
|
if ((_b = commandLine.parsedCommandLine) === null || _b === void 0 ? void 0 : _b.wildcardDirectories) {
|
|
ts.updateWatchingWildcardDirectories(commandLine.watchedDirectories || (commandLine.watchedDirectories = new ts.Map()), new ts.Map(ts.getEntries((_c = commandLine.parsedCommandLine) === null || _c === void 0 ? void 0 : _c.wildcardDirectories)), function (directory, flags) {
|
|
var _a;
|
|
return watchDirectory(directory, function (fileOrDirectory) {
|
|
var fileOrDirectoryPath = toPath(fileOrDirectory);
|
|
if (cachedDirectoryStructureHost) {
|
|
cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
|
|
}
|
|
nextSourceFileVersion(fileOrDirectoryPath);
|
|
var config = parsedConfigs === null || parsedConfigs === void 0 ? void 0 : parsedConfigs.get(configPath);
|
|
if (!(config === null || config === void 0 ? void 0 : config.parsedCommandLine))
|
|
return;
|
|
if (ts.isIgnoredFileFromWildCardWatching({
|
|
watchedDirPath: toPath(directory),
|
|
fileOrDirectory: fileOrDirectory,
|
|
fileOrDirectoryPath: fileOrDirectoryPath,
|
|
configFileName: configFileName,
|
|
options: config.parsedCommandLine.options,
|
|
program: config.parsedCommandLine.fileNames,
|
|
currentDirectory: currentDirectory,
|
|
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
|
|
writeLog: writeLog,
|
|
toPath: toPath,
|
|
}))
|
|
return;
|
|
if (config.reloadLevel !== ts.ConfigFileProgramReloadLevel.Full) {
|
|
config.reloadLevel = ts.ConfigFileProgramReloadLevel.Partial;
|
|
scheduleProgramUpdate();
|
|
}
|
|
}, flags, ((_a = commandLine.parsedCommandLine) === null || _a === void 0 ? void 0 : _a.watchOptions) || watchOptions, ts.WatchType.WildcardDirectoryOfReferencedProject);
|
|
});
|
|
}
|
|
else if (commandLine.watchedDirectories) {
|
|
ts.clearMap(commandLine.watchedDirectories, ts.closeFileWatcherOf);
|
|
commandLine.watchedDirectories = undefined;
|
|
}
|
|
updateExtendedConfigFilesWatches(configPath, (_d = commandLine.parsedCommandLine) === null || _d === void 0 ? void 0 : _d.options, ((_e = commandLine.parsedCommandLine) === null || _e === void 0 ? void 0 : _e.watchOptions) || watchOptions, ts.WatchType.ExtendedConfigOfReferencedProject);
|
|
}
|
|
}
|
|
ts.createWatchProgram = createWatchProgram;
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
var UpToDateStatusType;
|
|
(function (UpToDateStatusType) {
|
|
UpToDateStatusType[UpToDateStatusType["Unbuildable"] = 0] = "Unbuildable";
|
|
UpToDateStatusType[UpToDateStatusType["UpToDate"] = 1] = "UpToDate";
|
|
UpToDateStatusType[UpToDateStatusType["UpToDateWithUpstreamTypes"] = 2] = "UpToDateWithUpstreamTypes";
|
|
UpToDateStatusType[UpToDateStatusType["OutOfDateWithPrepend"] = 3] = "OutOfDateWithPrepend";
|
|
UpToDateStatusType[UpToDateStatusType["OutputMissing"] = 4] = "OutputMissing";
|
|
UpToDateStatusType[UpToDateStatusType["OutOfDateWithSelf"] = 5] = "OutOfDateWithSelf";
|
|
UpToDateStatusType[UpToDateStatusType["OutOfDateWithUpstream"] = 6] = "OutOfDateWithUpstream";
|
|
UpToDateStatusType[UpToDateStatusType["OutOfDateBuildInfo"] = 7] = "OutOfDateBuildInfo";
|
|
UpToDateStatusType[UpToDateStatusType["UpstreamOutOfDate"] = 8] = "UpstreamOutOfDate";
|
|
UpToDateStatusType[UpToDateStatusType["UpstreamBlocked"] = 9] = "UpstreamBlocked";
|
|
UpToDateStatusType[UpToDateStatusType["ComputingUpstream"] = 10] = "ComputingUpstream";
|
|
UpToDateStatusType[UpToDateStatusType["TsVersionOutputOfDate"] = 11] = "TsVersionOutputOfDate";
|
|
UpToDateStatusType[UpToDateStatusType["UpToDateWithInputFileText"] = 12] = "UpToDateWithInputFileText";
|
|
UpToDateStatusType[UpToDateStatusType["ContainerOnly"] = 13] = "ContainerOnly";
|
|
UpToDateStatusType[UpToDateStatusType["ForceBuild"] = 14] = "ForceBuild";
|
|
})(UpToDateStatusType = ts.UpToDateStatusType || (ts.UpToDateStatusType = {}));
|
|
function resolveConfigFileProjectName(project) {
|
|
if (ts.fileExtensionIs(project, ".json")) {
|
|
return project;
|
|
}
|
|
return ts.combinePaths(project, "tsconfig.json");
|
|
}
|
|
ts.resolveConfigFileProjectName = resolveConfigFileProjectName;
|
|
})(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["EmitErrors"] = 64] = "EmitErrors";
|
|
BuildResultFlags[BuildResultFlags["AnyErrors"] = 124] = "AnyErrors";
|
|
})(BuildResultFlags || (BuildResultFlags = {}));
|
|
function getOrCreateValueFromConfigFileMap(configFileMap, resolved, createT) {
|
|
var existingValue = configFileMap.get(resolved);
|
|
var newValue;
|
|
if (!existingValue) {
|
|
newValue = createT();
|
|
configFileMap.set(resolved, newValue);
|
|
}
|
|
return existingValue || newValue;
|
|
}
|
|
function getOrCreateValueMapFromConfigFileMap(configFileMap, resolved) {
|
|
return getOrCreateValueFromConfigFileMap(configFileMap, resolved, function () { return new ts.Map(); });
|
|
}
|
|
function getCurrentTime(host) {
|
|
return host.now ? host.now() : new Date();
|
|
}
|
|
ts.getCurrentTime = getCurrentTime;
|
|
function isCircularBuildOrder(buildOrder) {
|
|
return !!buildOrder && !!buildOrder.buildOrder;
|
|
}
|
|
ts.isCircularBuildOrder = isCircularBuildOrder;
|
|
function getBuildOrderFromAnyBuildOrder(anyBuildOrder) {
|
|
return isCircularBuildOrder(anyBuildOrder) ? anyBuildOrder.buildOrder : anyBuildOrder;
|
|
}
|
|
ts.getBuildOrderFromAnyBuildOrder = getBuildOrderFromAnyBuildOrder;
|
|
function createBuilderStatusReporter(system, pretty) {
|
|
return function (diagnostic) {
|
|
var output = pretty ? "[".concat(ts.formatColorAndReset(ts.getLocaleTimeString(system), ts.ForegroundColorEscapeSequences.Grey), "] ") : "".concat(ts.getLocaleTimeString(system), " - ");
|
|
output += "".concat(ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)).concat(system.newLine + system.newLine);
|
|
system.write(output);
|
|
};
|
|
}
|
|
ts.createBuilderStatusReporter = createBuilderStatusReporter;
|
|
function createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus) {
|
|
var host = ts.createProgramHost(system, createProgram);
|
|
host.getModifiedTime = system.getModifiedTime ? function (path) { return system.getModifiedTime(path); } : ts.returnUndefined;
|
|
host.setModifiedTime = system.setModifiedTime ? function (path, date) { return system.setModifiedTime(path, date); } : ts.noop;
|
|
host.deleteFile = system.deleteFile ? function (path) { return system.deleteFile(path); } : ts.noop;
|
|
host.reportDiagnostic = reportDiagnostic || ts.createDiagnosticReporter(system);
|
|
host.reportSolutionBuilderStatus = reportSolutionBuilderStatus || createBuilderStatusReporter(system);
|
|
host.now = ts.maybeBind(system, system.now);
|
|
return host;
|
|
}
|
|
function createSolutionBuilderHost(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, reportErrorSummary) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus);
|
|
host.reportErrorSummary = reportErrorSummary;
|
|
return host;
|
|
}
|
|
ts.createSolutionBuilderHost = createSolutionBuilderHost;
|
|
function createSolutionBuilderWithWatchHost(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus, reportWatchStatus) {
|
|
if (system === void 0) { system = ts.sys; }
|
|
var host = createSolutionBuilderHostBase(system, createProgram, reportDiagnostic, reportSolutionBuilderStatus);
|
|
var watchHost = ts.createWatchHost(system, reportWatchStatus);
|
|
ts.copyProperties(host, watchHost);
|
|
return host;
|
|
}
|
|
ts.createSolutionBuilderWithWatchHost = createSolutionBuilderWithWatchHost;
|
|
function getCompilerOptionsOfBuildOptions(buildOptions) {
|
|
var result = {};
|
|
ts.commonOptionsWithBuild.forEach(function (option) {
|
|
if (ts.hasProperty(buildOptions, option.name))
|
|
result[option.name] = buildOptions[option.name];
|
|
});
|
|
return result;
|
|
}
|
|
function createSolutionBuilder(host, rootNames, defaultOptions) {
|
|
return createSolutionBuilderWorker(false, host, rootNames, defaultOptions);
|
|
}
|
|
ts.createSolutionBuilder = createSolutionBuilder;
|
|
function createSolutionBuilderWithWatch(host, rootNames, defaultOptions, baseWatchOptions) {
|
|
return createSolutionBuilderWorker(true, host, rootNames, defaultOptions, baseWatchOptions);
|
|
}
|
|
ts.createSolutionBuilderWithWatch = createSolutionBuilderWithWatch;
|
|
function createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
|
|
var host = hostOrHostWithWatch;
|
|
var hostWithWatch = hostOrHostWithWatch;
|
|
var currentDirectory = host.getCurrentDirectory();
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
|
|
var baseCompilerOptions = getCompilerOptionsOfBuildOptions(options);
|
|
var compilerHost = ts.createCompilerHostFromProgramHost(host, function () { return state.projectCompilerOptions; });
|
|
ts.setGetSourceFileAsHashVersioned(compilerHost, host);
|
|
compilerHost.getParsedCommandLine = function (fileName) { return parseConfigFile(state, fileName, toResolvedConfigFilePath(state, fileName)); };
|
|
compilerHost.resolveModuleNames = ts.maybeBind(host, host.resolveModuleNames);
|
|
compilerHost.resolveTypeReferenceDirectives = ts.maybeBind(host, host.resolveTypeReferenceDirectives);
|
|
compilerHost.getModuleResolutionCache = ts.maybeBind(host, host.getModuleResolutionCache);
|
|
var moduleResolutionCache = !compilerHost.resolveModuleNames ? ts.createModuleResolutionCache(currentDirectory, getCanonicalFileName) : undefined;
|
|
var typeReferenceDirectiveResolutionCache = !compilerHost.resolveTypeReferenceDirectives ? ts.createTypeReferenceDirectiveResolutionCache(currentDirectory, getCanonicalFileName, undefined, moduleResolutionCache === null || moduleResolutionCache === void 0 ? void 0 : moduleResolutionCache.getPackageJsonInfoCache()) : undefined;
|
|
if (!compilerHost.resolveModuleNames) {
|
|
var loader_3 = function (moduleName, resolverMode, containingFile, redirectedReference) { return ts.resolveModuleName(moduleName, containingFile, state.projectCompilerOptions, compilerHost, moduleResolutionCache, redirectedReference, resolverMode).resolvedModule; };
|
|
compilerHost.resolveModuleNames = function (moduleNames, containingFile, _reusedNames, redirectedReference, _options, containingSourceFile) {
|
|
return ts.loadWithModeAwareCache(ts.Debug.checkEachDefined(moduleNames), ts.Debug.checkDefined(containingSourceFile), containingFile, redirectedReference, loader_3);
|
|
};
|
|
compilerHost.getModuleResolutionCache = function () { return moduleResolutionCache; };
|
|
}
|
|
if (!compilerHost.resolveTypeReferenceDirectives) {
|
|
var loader_4 = function (moduleName, containingFile, redirectedReference, containingFileMode) { return ts.resolveTypeReferenceDirective(moduleName, containingFile, state.projectCompilerOptions, compilerHost, redirectedReference, state.typeReferenceDirectiveResolutionCache, containingFileMode).resolvedTypeReferenceDirective; };
|
|
compilerHost.resolveTypeReferenceDirectives = function (typeReferenceDirectiveNames, containingFile, redirectedReference, _options, containingFileMode) {
|
|
return ts.loadWithTypeDirectiveCache(ts.Debug.checkEachDefined(typeReferenceDirectiveNames), containingFile, redirectedReference, containingFileMode, loader_4);
|
|
};
|
|
}
|
|
compilerHost.getBuildInfo = function (fileName, configFilePath) { return getBuildInfo(state, fileName, toResolvedConfigFilePath(state, configFilePath), undefined); };
|
|
var _a = ts.createWatchFactory(hostWithWatch, options), watchFile = _a.watchFile, watchDirectory = _a.watchDirectory, writeLog = _a.writeLog;
|
|
var state = {
|
|
host: host,
|
|
hostWithWatch: hostWithWatch,
|
|
currentDirectory: currentDirectory,
|
|
getCanonicalFileName: getCanonicalFileName,
|
|
parseConfigFileHost: ts.parseConfigHostFromCompilerHostLike(host),
|
|
write: ts.maybeBind(host, host.trace),
|
|
options: options,
|
|
baseCompilerOptions: baseCompilerOptions,
|
|
rootNames: rootNames,
|
|
baseWatchOptions: baseWatchOptions,
|
|
resolvedConfigFilePaths: new ts.Map(),
|
|
configFileCache: new ts.Map(),
|
|
projectStatus: new ts.Map(),
|
|
extendedConfigCache: new ts.Map(),
|
|
buildInfoCache: new ts.Map(),
|
|
outputTimeStamps: new ts.Map(),
|
|
builderPrograms: new ts.Map(),
|
|
diagnostics: new ts.Map(),
|
|
projectPendingBuild: new ts.Map(),
|
|
projectErrorsReported: new ts.Map(),
|
|
compilerHost: compilerHost,
|
|
moduleResolutionCache: moduleResolutionCache,
|
|
typeReferenceDirectiveResolutionCache: typeReferenceDirectiveResolutionCache,
|
|
buildOrder: undefined,
|
|
readFileWithCache: function (f) { return host.readFile(f); },
|
|
projectCompilerOptions: baseCompilerOptions,
|
|
cache: undefined,
|
|
allProjectBuildPending: true,
|
|
needsSummary: true,
|
|
watchAllProjectsPending: watch,
|
|
watch: watch,
|
|
allWatchedWildcardDirectories: new ts.Map(),
|
|
allWatchedInputFiles: new ts.Map(),
|
|
allWatchedConfigFiles: new ts.Map(),
|
|
allWatchedExtendedConfigFiles: new ts.Map(),
|
|
allWatchedPackageJsonFiles: new ts.Map(),
|
|
filesWatched: new ts.Map(),
|
|
lastCachedPackageJsonLookups: new ts.Map(),
|
|
timerToBuildInvalidatedProject: undefined,
|
|
reportFileChangeDetected: false,
|
|
watchFile: watchFile,
|
|
watchDirectory: watchDirectory,
|
|
writeLog: writeLog,
|
|
};
|
|
return state;
|
|
}
|
|
function toPath(state, fileName) {
|
|
return ts.toPath(fileName, state.currentDirectory, state.getCanonicalFileName);
|
|
}
|
|
function toResolvedConfigFilePath(state, fileName) {
|
|
var resolvedConfigFilePaths = state.resolvedConfigFilePaths;
|
|
var path = resolvedConfigFilePaths.get(fileName);
|
|
if (path !== undefined)
|
|
return path;
|
|
var resolvedPath = toPath(state, fileName);
|
|
resolvedConfigFilePaths.set(fileName, resolvedPath);
|
|
return resolvedPath;
|
|
}
|
|
function isParsedCommandLine(entry) {
|
|
return !!entry.options;
|
|
}
|
|
function getCachedParsedConfigFile(state, configFilePath) {
|
|
var value = state.configFileCache.get(configFilePath);
|
|
return value && isParsedCommandLine(value) ? value : undefined;
|
|
}
|
|
function parseConfigFile(state, configFileName, configFilePath) {
|
|
var configFileCache = state.configFileCache;
|
|
var value = configFileCache.get(configFilePath);
|
|
if (value) {
|
|
return isParsedCommandLine(value) ? value : undefined;
|
|
}
|
|
var diagnostic;
|
|
var parseConfigFileHost = state.parseConfigFileHost, baseCompilerOptions = state.baseCompilerOptions, baseWatchOptions = state.baseWatchOptions, extendedConfigCache = state.extendedConfigCache, host = state.host;
|
|
var parsed;
|
|
if (host.getParsedCommandLine) {
|
|
parsed = host.getParsedCommandLine(configFileName);
|
|
if (!parsed)
|
|
diagnostic = ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, configFileName);
|
|
}
|
|
else {
|
|
parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = function (d) { return diagnostic = d; };
|
|
parsed = ts.getParsedCommandLineOfConfigFile(configFileName, baseCompilerOptions, parseConfigFileHost, extendedConfigCache, baseWatchOptions);
|
|
parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = ts.noop;
|
|
}
|
|
configFileCache.set(configFilePath, parsed || diagnostic);
|
|
return parsed;
|
|
}
|
|
function resolveProjectName(state, name) {
|
|
return ts.resolveConfigFileProjectName(ts.resolvePath(state.currentDirectory, name));
|
|
}
|
|
function createBuildOrder(state, roots) {
|
|
var temporaryMarks = new ts.Map();
|
|
var permanentMarks = new ts.Map();
|
|
var circularityReportStack = [];
|
|
var buildOrder;
|
|
var circularDiagnostics;
|
|
for (var _i = 0, roots_1 = roots; _i < roots_1.length; _i++) {
|
|
var root = roots_1[_i];
|
|
visit(root);
|
|
}
|
|
return circularDiagnostics ?
|
|
{ buildOrder: buildOrder || ts.emptyArray, circularDiagnostics: circularDiagnostics } :
|
|
buildOrder || ts.emptyArray;
|
|
function visit(configFileName, inCircularContext) {
|
|
var projPath = toResolvedConfigFilePath(state, configFileName);
|
|
if (permanentMarks.has(projPath))
|
|
return;
|
|
if (temporaryMarks.has(projPath)) {
|
|
if (!inCircularContext) {
|
|
(circularDiagnostics || (circularDiagnostics = [])).push(ts.createCompilerDiagnostic(ts.Diagnostics.Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0, circularityReportStack.join("\r\n")));
|
|
}
|
|
return;
|
|
}
|
|
temporaryMarks.set(projPath, true);
|
|
circularityReportStack.push(configFileName);
|
|
var parsed = parseConfigFile(state, configFileName, projPath);
|
|
if (parsed && parsed.projectReferences) {
|
|
for (var _i = 0, _a = parsed.projectReferences; _i < _a.length; _i++) {
|
|
var ref = _a[_i];
|
|
var resolvedRefPath = resolveProjectName(state, ref.path);
|
|
visit(resolvedRefPath, inCircularContext || ref.circular);
|
|
}
|
|
}
|
|
circularityReportStack.pop();
|
|
permanentMarks.set(projPath, true);
|
|
(buildOrder || (buildOrder = [])).push(configFileName);
|
|
}
|
|
}
|
|
function getBuildOrder(state) {
|
|
return state.buildOrder || createStateBuildOrder(state);
|
|
}
|
|
function createStateBuildOrder(state) {
|
|
var buildOrder = createBuildOrder(state, state.rootNames.map(function (f) { return resolveProjectName(state, f); }));
|
|
state.resolvedConfigFilePaths.clear();
|
|
var currentProjects = new ts.Map(getBuildOrderFromAnyBuildOrder(buildOrder).map(function (resolved) { return [toResolvedConfigFilePath(state, resolved), true]; }));
|
|
var noopOnDelete = { onDeleteValue: ts.noop };
|
|
ts.mutateMapSkippingNewValues(state.configFileCache, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.projectStatus, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.builderPrograms, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.diagnostics, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.projectPendingBuild, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.projectErrorsReported, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.buildInfoCache, currentProjects, noopOnDelete);
|
|
ts.mutateMapSkippingNewValues(state.outputTimeStamps, currentProjects, noopOnDelete);
|
|
if (state.watch) {
|
|
ts.mutateMapSkippingNewValues(state.allWatchedConfigFiles, currentProjects, { onDeleteValue: ts.closeFileWatcher });
|
|
state.allWatchedExtendedConfigFiles.forEach(function (watcher) {
|
|
watcher.projects.forEach(function (project) {
|
|
if (!currentProjects.has(project)) {
|
|
watcher.projects.delete(project);
|
|
}
|
|
});
|
|
watcher.close();
|
|
});
|
|
ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
|
|
ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
|
|
ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
|
|
}
|
|
return state.buildOrder = buildOrder;
|
|
}
|
|
function getBuildOrderFor(state, project, onlyReferences) {
|
|
var resolvedProject = project && resolveProjectName(state, project);
|
|
var buildOrderFromState = getBuildOrder(state);
|
|
if (isCircularBuildOrder(buildOrderFromState))
|
|
return buildOrderFromState;
|
|
if (resolvedProject) {
|
|
var projectPath_1 = toResolvedConfigFilePath(state, resolvedProject);
|
|
var projectIndex = ts.findIndex(buildOrderFromState, function (configFileName) { return toResolvedConfigFilePath(state, configFileName) === projectPath_1; });
|
|
if (projectIndex === -1)
|
|
return undefined;
|
|
}
|
|
var buildOrder = resolvedProject ? createBuildOrder(state, [resolvedProject]) : buildOrderFromState;
|
|
ts.Debug.assert(!isCircularBuildOrder(buildOrder));
|
|
ts.Debug.assert(!onlyReferences || resolvedProject !== undefined);
|
|
ts.Debug.assert(!onlyReferences || buildOrder[buildOrder.length - 1] === resolvedProject);
|
|
return onlyReferences ? buildOrder.slice(0, buildOrder.length - 1) : buildOrder;
|
|
}
|
|
function enableCache(state) {
|
|
if (state.cache) {
|
|
disableCache(state);
|
|
}
|
|
var compilerHost = state.compilerHost, host = state.host;
|
|
var originalReadFileWithCache = state.readFileWithCache;
|
|
var originalGetSourceFile = compilerHost.getSourceFile;
|
|
var _a = ts.changeCompilerHostLikeToUseCache(host, function (fileName) { return toPath(state, fileName); }, function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
|
|
}), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
|
|
state.readFileWithCache = readFileWithCache;
|
|
compilerHost.getSourceFile = getSourceFileWithCache;
|
|
state.cache = {
|
|
originalReadFile: originalReadFile,
|
|
originalFileExists: originalFileExists,
|
|
originalDirectoryExists: originalDirectoryExists,
|
|
originalCreateDirectory: originalCreateDirectory,
|
|
originalWriteFile: originalWriteFile,
|
|
originalReadFileWithCache: originalReadFileWithCache,
|
|
originalGetSourceFile: originalGetSourceFile,
|
|
};
|
|
}
|
|
function disableCache(state) {
|
|
if (!state.cache)
|
|
return;
|
|
var cache = state.cache, host = state.host, compilerHost = state.compilerHost, extendedConfigCache = state.extendedConfigCache, moduleResolutionCache = state.moduleResolutionCache, typeReferenceDirectiveResolutionCache = state.typeReferenceDirectiveResolutionCache;
|
|
host.readFile = cache.originalReadFile;
|
|
host.fileExists = cache.originalFileExists;
|
|
host.directoryExists = cache.originalDirectoryExists;
|
|
host.createDirectory = cache.originalCreateDirectory;
|
|
host.writeFile = cache.originalWriteFile;
|
|
compilerHost.getSourceFile = cache.originalGetSourceFile;
|
|
state.readFileWithCache = cache.originalReadFileWithCache;
|
|
extendedConfigCache.clear();
|
|
moduleResolutionCache === null || moduleResolutionCache === void 0 ? void 0 : moduleResolutionCache.clear();
|
|
typeReferenceDirectiveResolutionCache === null || typeReferenceDirectiveResolutionCache === void 0 ? void 0 : typeReferenceDirectiveResolutionCache.clear();
|
|
state.cache = undefined;
|
|
}
|
|
function clearProjectStatus(state, resolved) {
|
|
state.projectStatus.delete(resolved);
|
|
state.diagnostics.delete(resolved);
|
|
}
|
|
function addProjToQueue(_a, proj, reloadLevel) {
|
|
var projectPendingBuild = _a.projectPendingBuild;
|
|
var value = projectPendingBuild.get(proj);
|
|
if (value === undefined) {
|
|
projectPendingBuild.set(proj, reloadLevel);
|
|
}
|
|
else if (value < reloadLevel) {
|
|
projectPendingBuild.set(proj, reloadLevel);
|
|
}
|
|
}
|
|
function setupInitialBuild(state, cancellationToken) {
|
|
if (!state.allProjectBuildPending)
|
|
return;
|
|
state.allProjectBuildPending = false;
|
|
if (state.options.watch)
|
|
reportWatchStatus(state, ts.Diagnostics.Starting_compilation_in_watch_mode);
|
|
enableCache(state);
|
|
var buildOrder = getBuildOrderFromAnyBuildOrder(getBuildOrder(state));
|
|
buildOrder.forEach(function (configFileName) {
|
|
return state.projectPendingBuild.set(toResolvedConfigFilePath(state, configFileName), ts.ConfigFileProgramReloadLevel.None);
|
|
});
|
|
if (cancellationToken) {
|
|
cancellationToken.throwIfCancellationRequested();
|
|
}
|
|
}
|
|
var InvalidatedProjectKind;
|
|
(function (InvalidatedProjectKind) {
|
|
InvalidatedProjectKind[InvalidatedProjectKind["Build"] = 0] = "Build";
|
|
InvalidatedProjectKind[InvalidatedProjectKind["UpdateBundle"] = 1] = "UpdateBundle";
|
|
InvalidatedProjectKind[InvalidatedProjectKind["UpdateOutputFileStamps"] = 2] = "UpdateOutputFileStamps";
|
|
})(InvalidatedProjectKind = ts.InvalidatedProjectKind || (ts.InvalidatedProjectKind = {}));
|
|
function doneInvalidatedProject(state, projectPath) {
|
|
state.projectPendingBuild.delete(projectPath);
|
|
return state.diagnostics.has(projectPath) ?
|
|
ts.ExitStatus.DiagnosticsPresent_OutputsSkipped :
|
|
ts.ExitStatus.Success;
|
|
}
|
|
function createUpdateOutputFileStampsProject(state, project, projectPath, config, buildOrder) {
|
|
var updateOutputFileStampsPending = true;
|
|
return {
|
|
kind: InvalidatedProjectKind.UpdateOutputFileStamps,
|
|
project: project,
|
|
projectPath: projectPath,
|
|
buildOrder: buildOrder,
|
|
getCompilerOptions: function () { return config.options; },
|
|
getCurrentDirectory: function () { return state.currentDirectory; },
|
|
updateOutputFileStatmps: function () {
|
|
updateOutputTimestamps(state, config, projectPath);
|
|
updateOutputFileStampsPending = false;
|
|
},
|
|
done: function () {
|
|
if (updateOutputFileStampsPending) {
|
|
updateOutputTimestamps(state, config, projectPath);
|
|
}
|
|
return doneInvalidatedProject(state, projectPath);
|
|
}
|
|
};
|
|
}
|
|
var BuildStep;
|
|
(function (BuildStep) {
|
|
BuildStep[BuildStep["CreateProgram"] = 0] = "CreateProgram";
|
|
BuildStep[BuildStep["SyntaxDiagnostics"] = 1] = "SyntaxDiagnostics";
|
|
BuildStep[BuildStep["SemanticDiagnostics"] = 2] = "SemanticDiagnostics";
|
|
BuildStep[BuildStep["Emit"] = 3] = "Emit";
|
|
BuildStep[BuildStep["EmitBundle"] = 4] = "EmitBundle";
|
|
BuildStep[BuildStep["EmitBuildInfo"] = 5] = "EmitBuildInfo";
|
|
BuildStep[BuildStep["BuildInvalidatedProjectOfBundle"] = 6] = "BuildInvalidatedProjectOfBundle";
|
|
BuildStep[BuildStep["QueueReferencingProjects"] = 7] = "QueueReferencingProjects";
|
|
BuildStep[BuildStep["Done"] = 8] = "Done";
|
|
})(BuildStep || (BuildStep = {}));
|
|
function createBuildOrUpdateInvalidedProject(kind, state, project, projectPath, projectIndex, config, buildOrder) {
|
|
var step = kind === InvalidatedProjectKind.Build ? BuildStep.CreateProgram : BuildStep.EmitBundle;
|
|
var program;
|
|
var buildResult;
|
|
var invalidatedProjectOfBundle;
|
|
return kind === InvalidatedProjectKind.Build ?
|
|
{
|
|
kind: kind,
|
|
project: project,
|
|
projectPath: projectPath,
|
|
buildOrder: buildOrder,
|
|
getCompilerOptions: function () { return config.options; },
|
|
getCurrentDirectory: function () { return state.currentDirectory; },
|
|
getBuilderProgram: function () { return withProgramOrUndefined(ts.identity); },
|
|
getProgram: function () {
|
|
return withProgramOrUndefined(function (program) { return program.getProgramOrUndefined(); });
|
|
},
|
|
getSourceFile: function (fileName) {
|
|
return withProgramOrUndefined(function (program) { return program.getSourceFile(fileName); });
|
|
},
|
|
getSourceFiles: function () {
|
|
return withProgramOrEmptyArray(function (program) { return program.getSourceFiles(); });
|
|
},
|
|
getOptionsDiagnostics: function (cancellationToken) {
|
|
return withProgramOrEmptyArray(function (program) { return program.getOptionsDiagnostics(cancellationToken); });
|
|
},
|
|
getGlobalDiagnostics: function (cancellationToken) {
|
|
return withProgramOrEmptyArray(function (program) { return program.getGlobalDiagnostics(cancellationToken); });
|
|
},
|
|
getConfigFileParsingDiagnostics: function () {
|
|
return withProgramOrEmptyArray(function (program) { return program.getConfigFileParsingDiagnostics(); });
|
|
},
|
|
getSyntacticDiagnostics: function (sourceFile, cancellationToken) {
|
|
return withProgramOrEmptyArray(function (program) { return program.getSyntacticDiagnostics(sourceFile, cancellationToken); });
|
|
},
|
|
getAllDependencies: function (sourceFile) {
|
|
return withProgramOrEmptyArray(function (program) { return program.getAllDependencies(sourceFile); });
|
|
},
|
|
getSemanticDiagnostics: function (sourceFile, cancellationToken) {
|
|
return withProgramOrEmptyArray(function (program) { return program.getSemanticDiagnostics(sourceFile, cancellationToken); });
|
|
},
|
|
getSemanticDiagnosticsOfNextAffectedFile: function (cancellationToken, ignoreSourceFile) {
|
|
return withProgramOrUndefined(function (program) {
|
|
return (program.getSemanticDiagnosticsOfNextAffectedFile) &&
|
|
program.getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile);
|
|
});
|
|
},
|
|
emit: function (targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers) {
|
|
if (targetSourceFile || emitOnlyDtsFiles) {
|
|
return withProgramOrUndefined(function (program) { var _a, _b; return program.emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers || ((_b = (_a = state.host).getCustomTransformers) === null || _b === void 0 ? void 0 : _b.call(_a, project))); });
|
|
}
|
|
executeSteps(BuildStep.SemanticDiagnostics, cancellationToken);
|
|
if (step === BuildStep.EmitBuildInfo) {
|
|
return emitBuildInfo(writeFile, cancellationToken);
|
|
}
|
|
if (step !== BuildStep.Emit)
|
|
return undefined;
|
|
return emit(writeFile, cancellationToken, customTransformers);
|
|
},
|
|
done: done
|
|
} :
|
|
{
|
|
kind: kind,
|
|
project: project,
|
|
projectPath: projectPath,
|
|
buildOrder: buildOrder,
|
|
getCompilerOptions: function () { return config.options; },
|
|
getCurrentDirectory: function () { return state.currentDirectory; },
|
|
emit: function (writeFile, customTransformers) {
|
|
if (step !== BuildStep.EmitBundle)
|
|
return invalidatedProjectOfBundle;
|
|
return emitBundle(writeFile, customTransformers);
|
|
},
|
|
done: done,
|
|
};
|
|
function done(cancellationToken, writeFile, customTransformers) {
|
|
executeSteps(BuildStep.Done, cancellationToken, writeFile, customTransformers);
|
|
return doneInvalidatedProject(state, projectPath);
|
|
}
|
|
function withProgramOrUndefined(action) {
|
|
executeSteps(BuildStep.CreateProgram);
|
|
return program && action(program);
|
|
}
|
|
function withProgramOrEmptyArray(action) {
|
|
return withProgramOrUndefined(action) || ts.emptyArray;
|
|
}
|
|
function createProgram() {
|
|
var _a, _b;
|
|
ts.Debug.assert(program === undefined);
|
|
if (state.options.dry) {
|
|
reportStatus(state, ts.Diagnostics.A_non_dry_build_would_build_project_0, project);
|
|
buildResult = BuildResultFlags.Success;
|
|
step = BuildStep.QueueReferencingProjects;
|
|
return;
|
|
}
|
|
if (state.options.verbose)
|
|
reportStatus(state, ts.Diagnostics.Building_project_0, project);
|
|
if (config.fileNames.length === 0) {
|
|
reportAndStoreErrors(state, projectPath, ts.getConfigFileParsingDiagnostics(config));
|
|
buildResult = BuildResultFlags.None;
|
|
step = BuildStep.QueueReferencingProjects;
|
|
return;
|
|
}
|
|
var host = state.host, compilerHost = state.compilerHost;
|
|
state.projectCompilerOptions = config.options;
|
|
(_a = state.moduleResolutionCache) === null || _a === void 0 ? void 0 : _a.update(config.options);
|
|
(_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
|
|
program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
|
|
if (state.watch) {
|
|
state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
|
|
var path = _a[0], data = _a[1];
|
|
return [state.host.realpath && data ? toPath(state, state.host.realpath(path)) : path, data];
|
|
}));
|
|
state.builderPrograms.set(projectPath, program);
|
|
}
|
|
step++;
|
|
}
|
|
function handleDiagnostics(diagnostics, errorFlags, errorType) {
|
|
var _a;
|
|
if (diagnostics.length) {
|
|
(_a = buildErrors(state, projectPath, program, config, diagnostics, errorFlags, errorType), buildResult = _a.buildResult, step = _a.step);
|
|
}
|
|
else {
|
|
step++;
|
|
}
|
|
}
|
|
function getSyntaxDiagnostics(cancellationToken) {
|
|
ts.Debug.assertIsDefined(program);
|
|
handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
|
|
}
|
|
function getSemanticDiagnostics(cancellationToken) {
|
|
handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
|
|
}
|
|
function emit(writeFileCallback, cancellationToken, customTransformers) {
|
|
var _a;
|
|
var _b, _c, _d;
|
|
ts.Debug.assertIsDefined(program);
|
|
ts.Debug.assert(step === BuildStep.Emit);
|
|
var saved = program.saveEmitState();
|
|
var declDiagnostics;
|
|
var reportDeclarationDiagnostics = function (d) { return (declDiagnostics || (declDiagnostics = [])).push(d); };
|
|
var outputFiles = [];
|
|
var emitResult = ts.emitFilesAndReportErrors(program, reportDeclarationDiagnostics, undefined, undefined, function (name, text, writeByteOrderMark, _onError, _sourceFiles, data) { return outputFiles.push({ name: name, text: text, writeByteOrderMark: writeByteOrderMark, buildInfo: data === null || data === void 0 ? void 0 : data.buildInfo }); }, cancellationToken, false, customTransformers || ((_c = (_b = state.host).getCustomTransformers) === null || _c === void 0 ? void 0 : _c.call(_b, project))).emitResult;
|
|
if (declDiagnostics) {
|
|
program.restoreEmitState(saved);
|
|
(_a = buildErrors(state, projectPath, program, config, declDiagnostics, BuildResultFlags.DeclarationEmitErrors, "Declaration file"), buildResult = _a.buildResult, step = _a.step);
|
|
return {
|
|
emitSkipped: true,
|
|
diagnostics: emitResult.diagnostics
|
|
};
|
|
}
|
|
var host = state.host, compilerHost = state.compilerHost;
|
|
var resultFlags = ((_d = program.hasChangedEmitSignature) === null || _d === void 0 ? void 0 : _d.call(program)) ? BuildResultFlags.None : BuildResultFlags.DeclarationOutputUnchanged;
|
|
var emitterDiagnostics = ts.createDiagnosticCollection();
|
|
var emittedOutputs = new ts.Map();
|
|
var options = program.getCompilerOptions();
|
|
var isIncremental = ts.isIncrementalCompilation(options);
|
|
var outputTimeStampMap;
|
|
var now;
|
|
outputFiles.forEach(function (_a) {
|
|
var name = _a.name, text = _a.text, writeByteOrderMark = _a.writeByteOrderMark, buildInfo = _a.buildInfo;
|
|
var path = toPath(state, name);
|
|
emittedOutputs.set(toPath(state, name), name);
|
|
if (buildInfo)
|
|
setBuildInfo(state, buildInfo, projectPath, options, resultFlags);
|
|
ts.writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark);
|
|
if (!isIncremental && state.watch) {
|
|
(outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host)));
|
|
}
|
|
});
|
|
finishEmit(emitterDiagnostics, emittedOutputs, outputFiles.length ? outputFiles[0].name : ts.getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()), resultFlags);
|
|
return emitResult;
|
|
}
|
|
function emitBuildInfo(writeFileCallback, cancellationToken) {
|
|
ts.Debug.assertIsDefined(program);
|
|
ts.Debug.assert(step === BuildStep.EmitBuildInfo);
|
|
var emitResult = program.emitBuildInfo(function (name, text, writeByteOrderMark, onError, sourceFiles, data) {
|
|
if (data === null || data === void 0 ? void 0 : data.buildInfo)
|
|
setBuildInfo(state, data.buildInfo, projectPath, program.getCompilerOptions(), BuildResultFlags.DeclarationOutputUnchanged);
|
|
if (writeFileCallback)
|
|
writeFileCallback(name, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
else
|
|
state.compilerHost.writeFile(name, text, writeByteOrderMark, onError, sourceFiles, data);
|
|
}, cancellationToken);
|
|
if (emitResult.diagnostics.length) {
|
|
reportErrors(state, emitResult.diagnostics);
|
|
state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
|
|
buildResult = BuildResultFlags.EmitErrors & buildResult;
|
|
}
|
|
if (emitResult.emittedFiles && state.write) {
|
|
emitResult.emittedFiles.forEach(function (name) { return listEmittedFile(state, config, name); });
|
|
}
|
|
afterProgramDone(state, program, config);
|
|
step = BuildStep.QueueReferencingProjects;
|
|
return emitResult;
|
|
}
|
|
function finishEmit(emitterDiagnostics, emittedOutputs, oldestOutputFileName, resultFlags) {
|
|
var _a;
|
|
var emitDiagnostics = emitterDiagnostics.getDiagnostics();
|
|
if (emitDiagnostics.length) {
|
|
(_a = buildErrors(state, projectPath, program, config, emitDiagnostics, BuildResultFlags.EmitErrors, "Emit"), buildResult = _a.buildResult, step = _a.step);
|
|
return emitDiagnostics;
|
|
}
|
|
if (state.write) {
|
|
emittedOutputs.forEach(function (name) { return listEmittedFile(state, config, name); });
|
|
}
|
|
updateOutputTimestampsWorker(state, config, projectPath, ts.Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs);
|
|
state.diagnostics.delete(projectPath);
|
|
state.projectStatus.set(projectPath, {
|
|
type: ts.UpToDateStatusType.UpToDate,
|
|
oldestOutputFileName: oldestOutputFileName
|
|
});
|
|
afterProgramDone(state, program, config);
|
|
step = BuildStep.QueueReferencingProjects;
|
|
buildResult = resultFlags;
|
|
return emitDiagnostics;
|
|
}
|
|
function emitBundle(writeFileCallback, customTransformers) {
|
|
var _a, _b;
|
|
ts.Debug.assert(kind === InvalidatedProjectKind.UpdateBundle);
|
|
if (state.options.dry) {
|
|
reportStatus(state, ts.Diagnostics.A_non_dry_build_would_update_output_of_project_0, project);
|
|
buildResult = BuildResultFlags.Success;
|
|
step = BuildStep.QueueReferencingProjects;
|
|
return undefined;
|
|
}
|
|
if (state.options.verbose)
|
|
reportStatus(state, ts.Diagnostics.Updating_output_of_project_0, project);
|
|
var compilerHost = state.compilerHost;
|
|
state.projectCompilerOptions = config.options;
|
|
var outputFiles = ts.emitUsingBuildInfo(config, compilerHost, function (ref) {
|
|
var refName = resolveProjectName(state, ref.path);
|
|
return parseConfigFile(state, refName, toResolvedConfigFilePath(state, refName));
|
|
}, customTransformers || ((_b = (_a = state.host).getCustomTransformers) === null || _b === void 0 ? void 0 : _b.call(_a, project)));
|
|
if (ts.isString(outputFiles)) {
|
|
reportStatus(state, ts.Diagnostics.Cannot_update_output_of_project_0_because_there_was_error_reading_file_1, project, relName(state, outputFiles));
|
|
step = BuildStep.BuildInvalidatedProjectOfBundle;
|
|
return invalidatedProjectOfBundle = createBuildOrUpdateInvalidedProject(InvalidatedProjectKind.Build, state, project, projectPath, projectIndex, config, buildOrder);
|
|
}
|
|
ts.Debug.assert(!!outputFiles.length);
|
|
var emitterDiagnostics = ts.createDiagnosticCollection();
|
|
var emittedOutputs = new ts.Map();
|
|
var resultFlags = BuildResultFlags.DeclarationOutputUnchanged;
|
|
var existingBuildInfo = state.buildInfoCache.get(projectPath).buildInfo;
|
|
outputFiles.forEach(function (_a) {
|
|
var _b, _c;
|
|
var name = _a.name, text = _a.text, writeByteOrderMark = _a.writeByteOrderMark, buildInfo = _a.buildInfo;
|
|
emittedOutputs.set(toPath(state, name), name);
|
|
if (buildInfo) {
|
|
if (((_b = buildInfo.program) === null || _b === void 0 ? void 0 : _b.outSignature) !== ((_c = existingBuildInfo.program) === null || _c === void 0 ? void 0 : _c.outSignature)) {
|
|
resultFlags &= ~BuildResultFlags.DeclarationOutputUnchanged;
|
|
}
|
|
setBuildInfo(state, buildInfo, projectPath, config.options, resultFlags);
|
|
}
|
|
ts.writeFile(writeFileCallback ? { writeFile: writeFileCallback } : compilerHost, emitterDiagnostics, name, text, writeByteOrderMark);
|
|
});
|
|
var emitDiagnostics = finishEmit(emitterDiagnostics, emittedOutputs, outputFiles[0].name, resultFlags);
|
|
return { emitSkipped: false, diagnostics: emitDiagnostics };
|
|
}
|
|
function executeSteps(till, cancellationToken, writeFile, customTransformers) {
|
|
while (step <= till && step < BuildStep.Done) {
|
|
var currentStep = step;
|
|
switch (step) {
|
|
case BuildStep.CreateProgram:
|
|
createProgram();
|
|
break;
|
|
case BuildStep.SyntaxDiagnostics:
|
|
getSyntaxDiagnostics(cancellationToken);
|
|
break;
|
|
case BuildStep.SemanticDiagnostics:
|
|
getSemanticDiagnostics(cancellationToken);
|
|
break;
|
|
case BuildStep.Emit:
|
|
emit(writeFile, cancellationToken, customTransformers);
|
|
break;
|
|
case BuildStep.EmitBuildInfo:
|
|
emitBuildInfo(writeFile, cancellationToken);
|
|
break;
|
|
case BuildStep.EmitBundle:
|
|
emitBundle(writeFile, customTransformers);
|
|
break;
|
|
case BuildStep.BuildInvalidatedProjectOfBundle:
|
|
ts.Debug.checkDefined(invalidatedProjectOfBundle).done(cancellationToken, writeFile, customTransformers);
|
|
step = BuildStep.Done;
|
|
break;
|
|
case BuildStep.QueueReferencingProjects:
|
|
queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, ts.Debug.checkDefined(buildResult));
|
|
step++;
|
|
break;
|
|
case BuildStep.Done:
|
|
default:
|
|
ts.assertType(step);
|
|
}
|
|
ts.Debug.assert(step > currentStep);
|
|
}
|
|
}
|
|
}
|
|
function needsBuild(_a, status, config) {
|
|
var options = _a.options;
|
|
if (status.type !== ts.UpToDateStatusType.OutOfDateWithPrepend || options.force)
|
|
return true;
|
|
return config.fileNames.length === 0 ||
|
|
!!ts.getConfigFileParsingDiagnostics(config).length ||
|
|
!ts.isIncrementalCompilation(config.options);
|
|
}
|
|
function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) {
|
|
if (!state.projectPendingBuild.size)
|
|
return undefined;
|
|
if (isCircularBuildOrder(buildOrder))
|
|
return undefined;
|
|
var options = state.options, projectPendingBuild = state.projectPendingBuild;
|
|
for (var projectIndex = 0; projectIndex < buildOrder.length; projectIndex++) {
|
|
var project = buildOrder[projectIndex];
|
|
var projectPath = toResolvedConfigFilePath(state, project);
|
|
var reloadLevel = state.projectPendingBuild.get(projectPath);
|
|
if (reloadLevel === undefined)
|
|
continue;
|
|
if (reportQueue) {
|
|
reportQueue = false;
|
|
reportBuildQueue(state, buildOrder);
|
|
}
|
|
var config = parseConfigFile(state, project, projectPath);
|
|
if (!config) {
|
|
reportParseConfigFileDiagnostic(state, projectPath);
|
|
projectPendingBuild.delete(projectPath);
|
|
continue;
|
|
}
|
|
if (reloadLevel === ts.ConfigFileProgramReloadLevel.Full) {
|
|
watchConfigFile(state, project, projectPath, config);
|
|
watchExtendedConfigFiles(state, projectPath, config);
|
|
watchWildCardDirectories(state, project, projectPath, config);
|
|
watchInputFiles(state, project, projectPath, config);
|
|
watchPackageJsonFiles(state, project, projectPath, config);
|
|
}
|
|
else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
|
|
config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
|
|
ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
|
|
watchInputFiles(state, project, projectPath, config);
|
|
watchPackageJsonFiles(state, project, projectPath, config);
|
|
}
|
|
var status = getUpToDateStatus(state, config, projectPath);
|
|
if (!options.force) {
|
|
if (status.type === ts.UpToDateStatusType.UpToDate) {
|
|
verboseReportProjectStatus(state, project, status);
|
|
reportAndStoreErrors(state, projectPath, ts.getConfigFileParsingDiagnostics(config));
|
|
projectPendingBuild.delete(projectPath);
|
|
if (options.dry) {
|
|
reportStatus(state, ts.Diagnostics.Project_0_is_up_to_date, project);
|
|
}
|
|
continue;
|
|
}
|
|
if (status.type === ts.UpToDateStatusType.UpToDateWithUpstreamTypes || status.type === ts.UpToDateStatusType.UpToDateWithInputFileText) {
|
|
reportAndStoreErrors(state, projectPath, ts.getConfigFileParsingDiagnostics(config));
|
|
return {
|
|
kind: InvalidatedProjectKind.UpdateOutputFileStamps,
|
|
status: status,
|
|
project: project,
|
|
projectPath: projectPath,
|
|
projectIndex: projectIndex,
|
|
config: config
|
|
};
|
|
}
|
|
}
|
|
if (status.type === ts.UpToDateStatusType.UpstreamBlocked) {
|
|
verboseReportProjectStatus(state, project, status);
|
|
reportAndStoreErrors(state, projectPath, ts.getConfigFileParsingDiagnostics(config));
|
|
projectPendingBuild.delete(projectPath);
|
|
if (options.verbose) {
|
|
reportStatus(state, status.upstreamProjectBlocked ?
|
|
ts.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_was_not_built :
|
|
ts.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_has_errors, project, status.upstreamProjectName);
|
|
}
|
|
continue;
|
|
}
|
|
if (status.type === ts.UpToDateStatusType.ContainerOnly) {
|
|
verboseReportProjectStatus(state, project, status);
|
|
reportAndStoreErrors(state, projectPath, ts.getConfigFileParsingDiagnostics(config));
|
|
projectPendingBuild.delete(projectPath);
|
|
continue;
|
|
}
|
|
return {
|
|
kind: needsBuild(state, status, config) ?
|
|
InvalidatedProjectKind.Build :
|
|
InvalidatedProjectKind.UpdateBundle,
|
|
status: status,
|
|
project: project,
|
|
projectPath: projectPath,
|
|
projectIndex: projectIndex,
|
|
config: config,
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|
|
function createInvalidatedProjectWithInfo(state, info, buildOrder) {
|
|
verboseReportProjectStatus(state, info.project, info.status);
|
|
return info.kind !== InvalidatedProjectKind.UpdateOutputFileStamps ?
|
|
createBuildOrUpdateInvalidedProject(info.kind, state, info.project, info.projectPath, info.projectIndex, info.config, buildOrder) :
|
|
createUpdateOutputFileStampsProject(state, info.project, info.projectPath, info.config, buildOrder);
|
|
}
|
|
function getNextInvalidatedProject(state, buildOrder, reportQueue) {
|
|
var info = getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue);
|
|
if (!info)
|
|
return info;
|
|
return createInvalidatedProjectWithInfo(state, info, buildOrder);
|
|
}
|
|
function listEmittedFile(_a, proj, file) {
|
|
var write = _a.write;
|
|
if (write && proj.options.listEmittedFiles) {
|
|
write("TSFILE: ".concat(file));
|
|
}
|
|
}
|
|
function getOldProgram(_a, proj, parsed) {
|
|
var options = _a.options, builderPrograms = _a.builderPrograms, compilerHost = _a.compilerHost;
|
|
if (options.force)
|
|
return undefined;
|
|
var value = builderPrograms.get(proj);
|
|
if (value)
|
|
return value;
|
|
return ts.readBuilderProgram(parsed.options, compilerHost);
|
|
}
|
|
function afterProgramDone(state, program, config) {
|
|
if (program) {
|
|
if (state.write)
|
|
ts.listFiles(program, state.write);
|
|
if (state.host.afterProgramEmitAndDiagnostics) {
|
|
state.host.afterProgramEmitAndDiagnostics(program);
|
|
}
|
|
program.releaseProgram();
|
|
}
|
|
else if (state.host.afterEmitBundle) {
|
|
state.host.afterEmitBundle(config);
|
|
}
|
|
state.projectCompilerOptions = state.baseCompilerOptions;
|
|
}
|
|
function buildErrors(state, resolvedPath, program, config, diagnostics, buildResult, errorType) {
|
|
var canEmitBuildInfo = program && !ts.outFile(program.getCompilerOptions());
|
|
reportAndStoreErrors(state, resolvedPath, diagnostics);
|
|
state.projectStatus.set(resolvedPath, { type: ts.UpToDateStatusType.Unbuildable, reason: "".concat(errorType, " errors") });
|
|
if (canEmitBuildInfo)
|
|
return { buildResult: buildResult, step: BuildStep.EmitBuildInfo };
|
|
afterProgramDone(state, program, config);
|
|
return { buildResult: buildResult, step: BuildStep.QueueReferencingProjects };
|
|
}
|
|
function isFileWatcherWithModifiedTime(value) {
|
|
return !!value.watcher;
|
|
}
|
|
function getModifiedTime(state, fileName) {
|
|
var path = toPath(state, fileName);
|
|
var existing = state.filesWatched.get(path);
|
|
if (state.watch && !!existing) {
|
|
if (!isFileWatcherWithModifiedTime(existing))
|
|
return existing;
|
|
if (existing.modifiedTime)
|
|
return existing.modifiedTime;
|
|
}
|
|
var result = ts.getModifiedTime(state.host, fileName);
|
|
if (state.watch) {
|
|
if (existing)
|
|
existing.modifiedTime = result;
|
|
else
|
|
state.filesWatched.set(path, result);
|
|
}
|
|
return result;
|
|
}
|
|
function watchFile(state, file, callback, pollingInterval, options, watchType, project) {
|
|
var path = toPath(state, file);
|
|
var existing = state.filesWatched.get(path);
|
|
if (existing && isFileWatcherWithModifiedTime(existing)) {
|
|
existing.callbacks.push(callback);
|
|
}
|
|
else {
|
|
var watcher = state.watchFile(file, function (fileName, eventKind, modifiedTime) {
|
|
var existing = ts.Debug.checkDefined(state.filesWatched.get(path));
|
|
ts.Debug.assert(isFileWatcherWithModifiedTime(existing));
|
|
existing.modifiedTime = modifiedTime;
|
|
existing.callbacks.forEach(function (cb) { return cb(fileName, eventKind, modifiedTime); });
|
|
}, pollingInterval, options, watchType, project);
|
|
state.filesWatched.set(path, { callbacks: [callback], watcher: watcher, modifiedTime: existing });
|
|
}
|
|
return {
|
|
close: function () {
|
|
var existing = ts.Debug.checkDefined(state.filesWatched.get(path));
|
|
ts.Debug.assert(isFileWatcherWithModifiedTime(existing));
|
|
if (existing.callbacks.length === 1) {
|
|
state.filesWatched.delete(path);
|
|
ts.closeFileWatcherOf(existing);
|
|
}
|
|
else {
|
|
ts.unorderedRemoveItem(existing.callbacks, callback);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function getOutputTimeStampMap(state, resolvedConfigFilePath) {
|
|
if (!state.watch)
|
|
return undefined;
|
|
var result = state.outputTimeStamps.get(resolvedConfigFilePath);
|
|
if (!result)
|
|
state.outputTimeStamps.set(resolvedConfigFilePath, result = new ts.Map());
|
|
return result;
|
|
}
|
|
function setBuildInfo(state, buildInfo, resolvedConfigPath, options, resultFlags) {
|
|
var buildInfoPath = ts.getTsBuildInfoEmitOutputFilePath(options);
|
|
var existing = getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath);
|
|
var modifiedTime = getCurrentTime(state.host);
|
|
if (existing) {
|
|
existing.buildInfo = buildInfo;
|
|
existing.modifiedTime = modifiedTime;
|
|
if (!(resultFlags & BuildResultFlags.DeclarationOutputUnchanged))
|
|
existing.latestChangedDtsTime = modifiedTime;
|
|
}
|
|
else {
|
|
state.buildInfoCache.set(resolvedConfigPath, {
|
|
path: toPath(state, buildInfoPath),
|
|
buildInfo: buildInfo,
|
|
modifiedTime: modifiedTime,
|
|
latestChangedDtsTime: resultFlags & BuildResultFlags.DeclarationOutputUnchanged ? undefined : modifiedTime,
|
|
});
|
|
}
|
|
}
|
|
function getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath) {
|
|
var path = toPath(state, buildInfoPath);
|
|
var existing = state.buildInfoCache.get(resolvedConfigPath);
|
|
return (existing === null || existing === void 0 ? void 0 : existing.path) === path ? existing : undefined;
|
|
}
|
|
function getBuildInfo(state, buildInfoPath, resolvedConfigPath, modifiedTime) {
|
|
var path = toPath(state, buildInfoPath);
|
|
var existing = state.buildInfoCache.get(resolvedConfigPath);
|
|
if (existing !== undefined && existing.path === path) {
|
|
return existing.buildInfo || undefined;
|
|
}
|
|
var value = state.readFileWithCache(buildInfoPath);
|
|
var buildInfo = value ? ts.getBuildInfo(value) : undefined;
|
|
ts.Debug.assert(modifiedTime || !buildInfo);
|
|
state.buildInfoCache.set(resolvedConfigPath, { path: path, buildInfo: buildInfo || false, modifiedTime: modifiedTime || ts.missingFileModifiedTime });
|
|
return buildInfo;
|
|
}
|
|
function checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName) {
|
|
var tsconfigTime = getModifiedTime(state, configFile);
|
|
if (oldestOutputFileTime < tsconfigTime) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithSelf,
|
|
outOfDateOutputFileName: oldestOutputFileName,
|
|
newerInputFileName: configFile
|
|
};
|
|
}
|
|
}
|
|
function getUpToDateStatusWorker(state, project, resolvedPath) {
|
|
var _a, _b;
|
|
if (!project.fileNames.length && !ts.canJsonReportNoInputFiles(project.raw)) {
|
|
return {
|
|
type: ts.UpToDateStatusType.ContainerOnly
|
|
};
|
|
}
|
|
var referenceStatuses;
|
|
var force = !!state.options.force;
|
|
if (project.projectReferences) {
|
|
state.projectStatus.set(resolvedPath, { type: ts.UpToDateStatusType.ComputingUpstream });
|
|
for (var _i = 0, _c = project.projectReferences; _i < _c.length; _i++) {
|
|
var ref = _c[_i];
|
|
var resolvedRef = ts.resolveProjectReferencePath(ref);
|
|
var resolvedRefPath = toResolvedConfigFilePath(state, resolvedRef);
|
|
var resolvedConfig = parseConfigFile(state, resolvedRef, resolvedRefPath);
|
|
var refStatus = getUpToDateStatus(state, resolvedConfig, resolvedRefPath);
|
|
if (refStatus.type === ts.UpToDateStatusType.ComputingUpstream ||
|
|
refStatus.type === ts.UpToDateStatusType.ContainerOnly) {
|
|
continue;
|
|
}
|
|
if (refStatus.type === ts.UpToDateStatusType.Unbuildable ||
|
|
refStatus.type === ts.UpToDateStatusType.UpstreamBlocked) {
|
|
return {
|
|
type: ts.UpToDateStatusType.UpstreamBlocked,
|
|
upstreamProjectName: ref.path,
|
|
upstreamProjectBlocked: refStatus.type === ts.UpToDateStatusType.UpstreamBlocked
|
|
};
|
|
}
|
|
if (refStatus.type !== ts.UpToDateStatusType.UpToDate) {
|
|
return {
|
|
type: ts.UpToDateStatusType.UpstreamOutOfDate,
|
|
upstreamProjectName: ref.path
|
|
};
|
|
}
|
|
if (!force)
|
|
(referenceStatuses || (referenceStatuses = [])).push({ ref: ref, refStatus: refStatus, resolvedRefPath: resolvedRefPath, resolvedConfig: resolvedConfig });
|
|
}
|
|
}
|
|
if (force)
|
|
return { type: ts.UpToDateStatusType.ForceBuild };
|
|
var host = state.host;
|
|
var buildInfoPath = ts.getTsBuildInfoEmitOutputFilePath(project.options);
|
|
var oldestOutputFileName;
|
|
var oldestOutputFileTime = maximumDate;
|
|
var buildInfoTime;
|
|
var buildInfoProgram;
|
|
var buildInfoVersionMap;
|
|
if (buildInfoPath) {
|
|
var buildInfoCacheEntry_1 = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath);
|
|
buildInfoTime = (buildInfoCacheEntry_1 === null || buildInfoCacheEntry_1 === void 0 ? void 0 : buildInfoCacheEntry_1.modifiedTime) || ts.getModifiedTime(host, buildInfoPath);
|
|
if (buildInfoTime === ts.missingFileModifiedTime) {
|
|
if (!buildInfoCacheEntry_1) {
|
|
state.buildInfoCache.set(resolvedPath, {
|
|
path: toPath(state, buildInfoPath),
|
|
buildInfo: false,
|
|
modifiedTime: buildInfoTime
|
|
});
|
|
}
|
|
return {
|
|
type: ts.UpToDateStatusType.OutputMissing,
|
|
missingOutputFileName: buildInfoPath
|
|
};
|
|
}
|
|
var buildInfo = ts.Debug.checkDefined(getBuildInfo(state, buildInfoPath, resolvedPath, buildInfoTime));
|
|
if ((buildInfo.bundle || buildInfo.program) && buildInfo.version !== ts.version) {
|
|
return {
|
|
type: ts.UpToDateStatusType.TsVersionOutputOfDate,
|
|
version: buildInfo.version
|
|
};
|
|
}
|
|
if (buildInfo.program) {
|
|
if (((_a = buildInfo.program.changeFileSet) === null || _a === void 0 ? void 0 : _a.length) ||
|
|
(!project.options.noEmit && ((_b = buildInfo.program.affectedFilesPendingEmit) === null || _b === void 0 ? void 0 : _b.length))) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateBuildInfo,
|
|
buildInfoFile: buildInfoPath
|
|
};
|
|
}
|
|
buildInfoProgram = buildInfo.program;
|
|
}
|
|
oldestOutputFileTime = buildInfoTime;
|
|
oldestOutputFileName = buildInfoPath;
|
|
}
|
|
var newestInputFileName = undefined;
|
|
var newestInputFileTime = minimumDate;
|
|
var pseudoInputUpToDate = false;
|
|
for (var _d = 0, _e = project.fileNames; _d < _e.length; _d++) {
|
|
var inputFile = _e[_d];
|
|
var inputTime = getModifiedTime(state, inputFile);
|
|
if (inputTime === ts.missingFileModifiedTime) {
|
|
return {
|
|
type: ts.UpToDateStatusType.Unbuildable,
|
|
reason: "".concat(inputFile, " does not exist")
|
|
};
|
|
}
|
|
if (buildInfoTime && buildInfoTime < inputTime) {
|
|
var version_3 = void 0;
|
|
var currentVersion = void 0;
|
|
if (buildInfoProgram) {
|
|
if (!buildInfoVersionMap)
|
|
buildInfoVersionMap = ts.getBuildInfoFileVersionMap(buildInfoProgram, buildInfoPath, host);
|
|
version_3 = buildInfoVersionMap.get(toPath(state, inputFile));
|
|
var text = version_3 ? state.readFileWithCache(inputFile) : undefined;
|
|
currentVersion = text && (host.createHash || ts.generateDjb2Hash)(text);
|
|
if (version_3 && version_3 === currentVersion)
|
|
pseudoInputUpToDate = true;
|
|
}
|
|
if (!version_3 || version_3 !== currentVersion) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithSelf,
|
|
outOfDateOutputFileName: buildInfoPath,
|
|
newerInputFileName: inputFile
|
|
};
|
|
}
|
|
}
|
|
if (inputTime > newestInputFileTime) {
|
|
newestInputFileName = inputFile;
|
|
newestInputFileTime = inputTime;
|
|
}
|
|
}
|
|
if (!buildInfoPath) {
|
|
var outputs = ts.getAllProjectOutputs(project, !host.useCaseSensitiveFileNames());
|
|
var outputTimeStampMap = getOutputTimeStampMap(state, resolvedPath);
|
|
for (var _f = 0, outputs_1 = outputs; _f < outputs_1.length; _f++) {
|
|
var output = outputs_1[_f];
|
|
var path = toPath(state, output);
|
|
var outputTime = outputTimeStampMap === null || outputTimeStampMap === void 0 ? void 0 : outputTimeStampMap.get(path);
|
|
if (!outputTime) {
|
|
outputTime = ts.getModifiedTime(state.host, output);
|
|
outputTimeStampMap === null || outputTimeStampMap === void 0 ? void 0 : outputTimeStampMap.set(path, outputTime);
|
|
}
|
|
if (outputTime === ts.missingFileModifiedTime) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutputMissing,
|
|
missingOutputFileName: output
|
|
};
|
|
}
|
|
if (outputTime < newestInputFileTime) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithSelf,
|
|
outOfDateOutputFileName: output,
|
|
newerInputFileName: newestInputFileName
|
|
};
|
|
}
|
|
if (outputTime < oldestOutputFileTime) {
|
|
oldestOutputFileTime = outputTime;
|
|
oldestOutputFileName = output;
|
|
}
|
|
}
|
|
}
|
|
var seenRefs = buildInfoPath ? new ts.Set() : undefined;
|
|
var buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath);
|
|
seenRefs === null || seenRefs === void 0 ? void 0 : seenRefs.add(resolvedPath);
|
|
var pseudoUpToDate = false;
|
|
var usesPrepend = false;
|
|
var upstreamChangedProject;
|
|
if (referenceStatuses) {
|
|
for (var _g = 0, referenceStatuses_1 = referenceStatuses; _g < referenceStatuses_1.length; _g++) {
|
|
var _h = referenceStatuses_1[_g], ref = _h.ref, refStatus = _h.refStatus, resolvedConfig = _h.resolvedConfig, resolvedRefPath = _h.resolvedRefPath;
|
|
usesPrepend = usesPrepend || !!(ref.prepend);
|
|
if (refStatus.newestInputFileTime && refStatus.newestInputFileTime <= oldestOutputFileTime) {
|
|
continue;
|
|
}
|
|
if (buildInfoCacheEntry && hasSameBuildInfo(state, buildInfoCacheEntry, seenRefs, resolvedConfig, resolvedRefPath)) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithUpstream,
|
|
outOfDateOutputFileName: buildInfoPath,
|
|
newerProjectName: ref.path
|
|
};
|
|
}
|
|
var newestDeclarationFileContentChangedTime = getLatestChangedDtsTime(state, resolvedConfig.options, resolvedRefPath);
|
|
if (newestDeclarationFileContentChangedTime && newestDeclarationFileContentChangedTime <= oldestOutputFileTime) {
|
|
pseudoUpToDate = true;
|
|
upstreamChangedProject = ref.path;
|
|
continue;
|
|
}
|
|
ts.Debug.assert(oldestOutputFileName !== undefined, "Should have an oldest output filename here");
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithUpstream,
|
|
outOfDateOutputFileName: oldestOutputFileName,
|
|
newerProjectName: ref.path
|
|
};
|
|
}
|
|
}
|
|
var configStatus = checkConfigFileUpToDateStatus(state, project.options.configFilePath, oldestOutputFileTime, oldestOutputFileName);
|
|
if (configStatus)
|
|
return configStatus;
|
|
var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
|
|
if (extendedConfigStatus)
|
|
return extendedConfigStatus;
|
|
var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
|
|
var path = _a[0];
|
|
return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
|
|
});
|
|
if (dependentPackageFileStatus)
|
|
return dependentPackageFileStatus;
|
|
if (usesPrepend && pseudoUpToDate) {
|
|
return {
|
|
type: ts.UpToDateStatusType.OutOfDateWithPrepend,
|
|
outOfDateOutputFileName: oldestOutputFileName,
|
|
newerProjectName: upstreamChangedProject
|
|
};
|
|
}
|
|
return {
|
|
type: pseudoUpToDate ?
|
|
ts.UpToDateStatusType.UpToDateWithUpstreamTypes :
|
|
pseudoInputUpToDate ?
|
|
ts.UpToDateStatusType.UpToDateWithInputFileText :
|
|
ts.UpToDateStatusType.UpToDate,
|
|
newestInputFileTime: newestInputFileTime,
|
|
newestInputFileName: newestInputFileName,
|
|
oldestOutputFileName: oldestOutputFileName
|
|
};
|
|
}
|
|
function hasSameBuildInfo(state, buildInfoCacheEntry, seenRefs, resolvedConfig, resolvedRefPath) {
|
|
if (seenRefs.has(resolvedRefPath))
|
|
return false;
|
|
seenRefs.add(resolvedRefPath);
|
|
var refBuildInfo = state.buildInfoCache.get(resolvedRefPath);
|
|
if (refBuildInfo.path === buildInfoCacheEntry.path)
|
|
return true;
|
|
if (resolvedConfig.projectReferences) {
|
|
for (var _i = 0, _a = resolvedConfig.projectReferences; _i < _a.length; _i++) {
|
|
var ref = _a[_i];
|
|
var resolvedRef = ts.resolveProjectReferencePath(ref);
|
|
var resolvedRefPath_1 = toResolvedConfigFilePath(state, resolvedRef);
|
|
var resolvedConfig_1 = parseConfigFile(state, resolvedRef, resolvedRefPath_1);
|
|
if (hasSameBuildInfo(state, buildInfoCacheEntry, seenRefs, resolvedConfig_1, resolvedRefPath_1))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function getUpToDateStatus(state, project, resolvedPath) {
|
|
if (project === undefined) {
|
|
return { type: ts.UpToDateStatusType.Unbuildable, reason: "File deleted mid-build" };
|
|
}
|
|
var prior = state.projectStatus.get(resolvedPath);
|
|
if (prior !== undefined) {
|
|
return prior;
|
|
}
|
|
var actual = getUpToDateStatusWorker(state, project, resolvedPath);
|
|
state.projectStatus.set(resolvedPath, actual);
|
|
return actual;
|
|
}
|
|
function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, skipOutputs) {
|
|
if (proj.options.noEmit)
|
|
return;
|
|
var now;
|
|
var buildInfoPath = ts.getTsBuildInfoEmitOutputFilePath(proj.options);
|
|
if (buildInfoPath) {
|
|
if (!(skipOutputs === null || skipOutputs === void 0 ? void 0 : skipOutputs.has(toPath(state, buildInfoPath)))) {
|
|
if (!!state.options.verbose)
|
|
reportStatus(state, verboseMessage, proj.options.configFilePath);
|
|
state.host.setModifiedTime(buildInfoPath, now = getCurrentTime(state.host));
|
|
getBuildInfoCacheEntry(state, buildInfoPath, projectPath).modifiedTime = now;
|
|
}
|
|
state.outputTimeStamps.delete(projectPath);
|
|
return;
|
|
}
|
|
var host = state.host;
|
|
var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
|
|
var outputTimeStampMap = getOutputTimeStampMap(state, projectPath);
|
|
var modifiedOutputs = outputTimeStampMap ? new ts.Set() : undefined;
|
|
if (!skipOutputs || outputs.length !== skipOutputs.size) {
|
|
var reportVerbose = !!state.options.verbose;
|
|
for (var _i = 0, outputs_2 = outputs; _i < outputs_2.length; _i++) {
|
|
var file = outputs_2[_i];
|
|
var path = toPath(state, file);
|
|
if (skipOutputs === null || skipOutputs === void 0 ? void 0 : skipOutputs.has(path))
|
|
continue;
|
|
if (reportVerbose) {
|
|
reportVerbose = false;
|
|
reportStatus(state, verboseMessage, proj.options.configFilePath);
|
|
}
|
|
host.setModifiedTime(file, now || (now = getCurrentTime(state.host)));
|
|
if (outputTimeStampMap) {
|
|
outputTimeStampMap.set(path, now);
|
|
modifiedOutputs.add(path);
|
|
}
|
|
}
|
|
}
|
|
outputTimeStampMap === null || outputTimeStampMap === void 0 ? void 0 : outputTimeStampMap.forEach(function (_value, key) {
|
|
if (!(skipOutputs === null || skipOutputs === void 0 ? void 0 : skipOutputs.has(key)) && !modifiedOutputs.has(key))
|
|
outputTimeStampMap.delete(key);
|
|
});
|
|
}
|
|
function getLatestChangedDtsTime(state, options, resolvedConfigPath) {
|
|
if (!options.composite)
|
|
return undefined;
|
|
var entry = ts.Debug.checkDefined(state.buildInfoCache.get(resolvedConfigPath));
|
|
if (entry.latestChangedDtsTime !== undefined)
|
|
return entry.latestChangedDtsTime || undefined;
|
|
var latestChangedDtsTime = entry.buildInfo && entry.buildInfo.program && entry.buildInfo.program.latestChangedDtsFile ?
|
|
state.host.getModifiedTime(ts.getNormalizedAbsolutePath(entry.buildInfo.program.latestChangedDtsFile, ts.getDirectoryPath(entry.path))) :
|
|
undefined;
|
|
entry.latestChangedDtsTime = latestChangedDtsTime || false;
|
|
return latestChangedDtsTime;
|
|
}
|
|
function updateOutputTimestamps(state, proj, resolvedPath) {
|
|
if (state.options.dry) {
|
|
return reportStatus(state, ts.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath);
|
|
}
|
|
updateOutputTimestampsWorker(state, proj, resolvedPath, ts.Diagnostics.Updating_output_timestamps_of_project_0);
|
|
state.projectStatus.set(resolvedPath, {
|
|
type: ts.UpToDateStatusType.UpToDate,
|
|
oldestOutputFileName: ts.getFirstProjectOutput(proj, !state.host.useCaseSensitiveFileNames())
|
|
});
|
|
}
|
|
function queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, buildResult) {
|
|
if (buildResult & BuildResultFlags.AnyErrors)
|
|
return;
|
|
if (!config.options.composite)
|
|
return;
|
|
for (var index = projectIndex + 1; index < buildOrder.length; index++) {
|
|
var nextProject = buildOrder[index];
|
|
var nextProjectPath = toResolvedConfigFilePath(state, nextProject);
|
|
if (state.projectPendingBuild.has(nextProjectPath))
|
|
continue;
|
|
var nextProjectConfig = parseConfigFile(state, nextProject, nextProjectPath);
|
|
if (!nextProjectConfig || !nextProjectConfig.projectReferences)
|
|
continue;
|
|
for (var _i = 0, _a = nextProjectConfig.projectReferences; _i < _a.length; _i++) {
|
|
var ref = _a[_i];
|
|
var resolvedRefPath = resolveProjectName(state, ref.path);
|
|
if (toResolvedConfigFilePath(state, resolvedRefPath) !== projectPath)
|
|
continue;
|
|
var status = state.projectStatus.get(nextProjectPath);
|
|
if (status) {
|
|
switch (status.type) {
|
|
case ts.UpToDateStatusType.UpToDate:
|
|
if (buildResult & BuildResultFlags.DeclarationOutputUnchanged) {
|
|
if (ref.prepend) {
|
|
state.projectStatus.set(nextProjectPath, {
|
|
type: ts.UpToDateStatusType.OutOfDateWithPrepend,
|
|
outOfDateOutputFileName: status.oldestOutputFileName,
|
|
newerProjectName: project
|
|
});
|
|
}
|
|
else {
|
|
status.type = ts.UpToDateStatusType.UpToDateWithUpstreamTypes;
|
|
}
|
|
break;
|
|
}
|
|
case ts.UpToDateStatusType.UpToDateWithInputFileText:
|
|
case ts.UpToDateStatusType.UpToDateWithUpstreamTypes:
|
|
case ts.UpToDateStatusType.OutOfDateWithPrepend:
|
|
if (!(buildResult & BuildResultFlags.DeclarationOutputUnchanged)) {
|
|
state.projectStatus.set(nextProjectPath, {
|
|
type: ts.UpToDateStatusType.OutOfDateWithUpstream,
|
|
outOfDateOutputFileName: status.type === ts.UpToDateStatusType.OutOfDateWithPrepend ? status.outOfDateOutputFileName : status.oldestOutputFileName,
|
|
newerProjectName: project
|
|
});
|
|
}
|
|
break;
|
|
case ts.UpToDateStatusType.UpstreamBlocked:
|
|
if (toResolvedConfigFilePath(state, resolveProjectName(state, status.upstreamProjectName)) === projectPath) {
|
|
clearProjectStatus(state, nextProjectPath);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
addProjToQueue(state, nextProjectPath, ts.ConfigFileProgramReloadLevel.None);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
function build(state, project, cancellationToken, writeFile, getCustomTransformers, onlyReferences) {
|
|
var buildOrder = getBuildOrderFor(state, project, onlyReferences);
|
|
if (!buildOrder)
|
|
return ts.ExitStatus.InvalidProject_OutputsSkipped;
|
|
setupInitialBuild(state, cancellationToken);
|
|
var reportQueue = true;
|
|
var successfulProjects = 0;
|
|
while (true) {
|
|
var invalidatedProject = getNextInvalidatedProject(state, buildOrder, reportQueue);
|
|
if (!invalidatedProject)
|
|
break;
|
|
reportQueue = false;
|
|
invalidatedProject.done(cancellationToken, writeFile, getCustomTransformers === null || getCustomTransformers === void 0 ? void 0 : getCustomTransformers(invalidatedProject.project));
|
|
if (!state.diagnostics.has(invalidatedProject.projectPath))
|
|
successfulProjects++;
|
|
}
|
|
disableCache(state);
|
|
reportErrorSummary(state, buildOrder);
|
|
startWatching(state, buildOrder);
|
|
return isCircularBuildOrder(buildOrder)
|
|
? ts.ExitStatus.ProjectReferenceCycle_OutputsSkipped
|
|
: !buildOrder.some(function (p) { return state.diagnostics.has(toResolvedConfigFilePath(state, p)); })
|
|
? ts.ExitStatus.Success
|
|
: successfulProjects
|
|
? ts.ExitStatus.DiagnosticsPresent_OutputsGenerated
|
|
: ts.ExitStatus.DiagnosticsPresent_OutputsSkipped;
|
|
}
|
|
function clean(state, project, onlyReferences) {
|
|
var buildOrder = getBuildOrderFor(state, project, onlyReferences);
|
|
if (!buildOrder)
|
|
return ts.ExitStatus.InvalidProject_OutputsSkipped;
|
|
if (isCircularBuildOrder(buildOrder)) {
|
|
reportErrors(state, buildOrder.circularDiagnostics);
|
|
return ts.ExitStatus.ProjectReferenceCycle_OutputsSkipped;
|
|
}
|
|
var options = state.options, host = state.host;
|
|
var filesToDelete = options.dry ? [] : undefined;
|
|
for (var _i = 0, buildOrder_1 = buildOrder; _i < buildOrder_1.length; _i++) {
|
|
var proj = buildOrder_1[_i];
|
|
var resolvedPath = toResolvedConfigFilePath(state, proj);
|
|
var parsed = parseConfigFile(state, proj, resolvedPath);
|
|
if (parsed === undefined) {
|
|
reportParseConfigFileDiagnostic(state, resolvedPath);
|
|
continue;
|
|
}
|
|
var outputs = ts.getAllProjectOutputs(parsed, !host.useCaseSensitiveFileNames());
|
|
if (!outputs.length)
|
|
continue;
|
|
var inputFileNames = new ts.Set(parsed.fileNames.map(function (f) { return toPath(state, f); }));
|
|
for (var _a = 0, outputs_3 = outputs; _a < outputs_3.length; _a++) {
|
|
var output = outputs_3[_a];
|
|
if (inputFileNames.has(toPath(state, output)))
|
|
continue;
|
|
if (host.fileExists(output)) {
|
|
if (filesToDelete) {
|
|
filesToDelete.push(output);
|
|
}
|
|
else {
|
|
host.deleteFile(output);
|
|
invalidateProject(state, resolvedPath, ts.ConfigFileProgramReloadLevel.None);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (filesToDelete) {
|
|
reportStatus(state, ts.Diagnostics.A_non_dry_build_would_delete_the_following_files_Colon_0, filesToDelete.map(function (f) { return "\r\n * ".concat(f); }).join(""));
|
|
}
|
|
return ts.ExitStatus.Success;
|
|
}
|
|
function invalidateProject(state, resolved, reloadLevel) {
|
|
if (state.host.getParsedCommandLine && reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
|
|
reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
|
|
}
|
|
if (reloadLevel === ts.ConfigFileProgramReloadLevel.Full) {
|
|
state.configFileCache.delete(resolved);
|
|
state.buildOrder = undefined;
|
|
}
|
|
state.needsSummary = true;
|
|
clearProjectStatus(state, resolved);
|
|
addProjToQueue(state, resolved, reloadLevel);
|
|
enableCache(state);
|
|
}
|
|
function invalidateProjectAndScheduleBuilds(state, resolvedPath, reloadLevel) {
|
|
state.reportFileChangeDetected = true;
|
|
invalidateProject(state, resolvedPath, reloadLevel);
|
|
scheduleBuildInvalidatedProject(state, 250, true);
|
|
}
|
|
function scheduleBuildInvalidatedProject(state, time, changeDetected) {
|
|
var hostWithWatch = state.hostWithWatch;
|
|
if (!hostWithWatch.setTimeout || !hostWithWatch.clearTimeout) {
|
|
return;
|
|
}
|
|
if (state.timerToBuildInvalidatedProject) {
|
|
hostWithWatch.clearTimeout(state.timerToBuildInvalidatedProject);
|
|
}
|
|
state.timerToBuildInvalidatedProject = hostWithWatch.setTimeout(buildNextInvalidatedProject, time, state, changeDetected);
|
|
}
|
|
function buildNextInvalidatedProject(state, changeDetected) {
|
|
state.timerToBuildInvalidatedProject = undefined;
|
|
if (state.reportFileChangeDetected) {
|
|
state.reportFileChangeDetected = false;
|
|
state.projectErrorsReported.clear();
|
|
reportWatchStatus(state, ts.Diagnostics.File_change_detected_Starting_incremental_compilation);
|
|
}
|
|
var projectsBuilt = 0;
|
|
var buildOrder = getBuildOrder(state);
|
|
var invalidatedProject = getNextInvalidatedProject(state, buildOrder, false);
|
|
if (invalidatedProject) {
|
|
invalidatedProject.done();
|
|
projectsBuilt++;
|
|
while (state.projectPendingBuild.size) {
|
|
if (state.timerToBuildInvalidatedProject)
|
|
return;
|
|
var info = getNextInvalidatedProjectCreateInfo(state, buildOrder, false);
|
|
if (!info)
|
|
break;
|
|
if (info.kind !== InvalidatedProjectKind.UpdateOutputFileStamps && (changeDetected || projectsBuilt === 5)) {
|
|
scheduleBuildInvalidatedProject(state, 100, false);
|
|
return;
|
|
}
|
|
var project = createInvalidatedProjectWithInfo(state, info, buildOrder);
|
|
project.done();
|
|
if (info.kind !== InvalidatedProjectKind.UpdateOutputFileStamps)
|
|
projectsBuilt++;
|
|
}
|
|
}
|
|
disableCache(state);
|
|
reportErrorSummary(state, buildOrder);
|
|
}
|
|
function watchConfigFile(state, resolved, resolvedPath, parsed) {
|
|
if (!state.watch || state.allWatchedConfigFiles.has(resolvedPath))
|
|
return;
|
|
state.allWatchedConfigFiles.set(resolvedPath, watchFile(state, resolved, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.ConfigFile, resolved));
|
|
}
|
|
function watchExtendedConfigFiles(state, resolvedPath, parsed) {
|
|
ts.updateSharedExtendedConfigFileWatcher(resolvedPath, parsed === null || parsed === void 0 ? void 0 : parsed.options, state.allWatchedExtendedConfigFiles, function (extendedConfigFileName, extendedConfigFilePath) { return watchFile(state, extendedConfigFileName, function () {
|
|
var _a;
|
|
return (_a = state.allWatchedExtendedConfigFiles.get(extendedConfigFilePath)) === null || _a === void 0 ? void 0 : _a.projects.forEach(function (projectConfigFilePath) {
|
|
return invalidateProjectAndScheduleBuilds(state, projectConfigFilePath, ts.ConfigFileProgramReloadLevel.Full);
|
|
});
|
|
}, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.ExtendedConfigFile); }, function (fileName) { return toPath(state, fileName); });
|
|
}
|
|
function watchWildCardDirectories(state, resolved, resolvedPath, parsed) {
|
|
if (!state.watch)
|
|
return;
|
|
ts.updateWatchingWildcardDirectories(getOrCreateValueMapFromConfigFileMap(state.allWatchedWildcardDirectories, resolvedPath), new ts.Map(ts.getEntries(parsed.wildcardDirectories)), function (dir, flags) { return state.watchDirectory(dir, function (fileOrDirectory) {
|
|
var _a;
|
|
if (ts.isIgnoredFileFromWildCardWatching({
|
|
watchedDirPath: toPath(state, dir),
|
|
fileOrDirectory: fileOrDirectory,
|
|
fileOrDirectoryPath: toPath(state, fileOrDirectory),
|
|
configFileName: resolved,
|
|
currentDirectory: state.currentDirectory,
|
|
options: parsed.options,
|
|
program: state.builderPrograms.get(resolvedPath) || ((_a = getCachedParsedConfigFile(state, resolvedPath)) === null || _a === void 0 ? void 0 : _a.fileNames),
|
|
useCaseSensitiveFileNames: state.parseConfigFileHost.useCaseSensitiveFileNames,
|
|
writeLog: function (s) { return state.writeLog(s); },
|
|
toPath: function (fileName) { return toPath(state, fileName); }
|
|
}))
|
|
return;
|
|
invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Partial);
|
|
}, flags, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.WildcardDirectory, resolved); });
|
|
}
|
|
function watchInputFiles(state, resolved, resolvedPath, parsed) {
|
|
if (!state.watch)
|
|
return;
|
|
ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedInputFiles, resolvedPath), ts.arrayToMap(parsed.fileNames, function (fileName) { return toPath(state, fileName); }), {
|
|
createNewValue: function (_path, input) { return watchFile(state, input, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.None); }, ts.PollingInterval.Low, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.SourceFile, resolved); },
|
|
onDeleteValue: ts.closeFileWatcher,
|
|
});
|
|
}
|
|
function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
|
|
if (!state.watch || !state.lastCachedPackageJsonLookups)
|
|
return;
|
|
ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
|
|
createNewValue: function (path, _input) { return watchFile(state, path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.None); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
|
|
onDeleteValue: ts.closeFileWatcher,
|
|
});
|
|
}
|
|
function startWatching(state, buildOrder) {
|
|
if (!state.watchAllProjectsPending)
|
|
return;
|
|
state.watchAllProjectsPending = false;
|
|
for (var _i = 0, _a = getBuildOrderFromAnyBuildOrder(buildOrder); _i < _a.length; _i++) {
|
|
var resolved = _a[_i];
|
|
var resolvedPath = toResolvedConfigFilePath(state, resolved);
|
|
var cfg = parseConfigFile(state, resolved, resolvedPath);
|
|
watchConfigFile(state, resolved, resolvedPath, cfg);
|
|
watchExtendedConfigFiles(state, resolvedPath, cfg);
|
|
if (cfg) {
|
|
watchWildCardDirectories(state, resolved, resolvedPath, cfg);
|
|
watchInputFiles(state, resolved, resolvedPath, cfg);
|
|
watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
|
|
}
|
|
}
|
|
}
|
|
function stopWatching(state) {
|
|
ts.clearMap(state.allWatchedConfigFiles, ts.closeFileWatcher);
|
|
ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
|
|
ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
|
|
ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
|
|
ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
|
|
}
|
|
function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
|
|
var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
|
|
return {
|
|
build: function (project, cancellationToken, writeFile, getCustomTransformers) { return build(state, project, cancellationToken, writeFile, getCustomTransformers); },
|
|
clean: function (project) { return clean(state, project); },
|
|
buildReferences: function (project, cancellationToken, writeFile, getCustomTransformers) { return build(state, project, cancellationToken, writeFile, getCustomTransformers, true); },
|
|
cleanReferences: function (project) { return clean(state, project, true); },
|
|
getNextInvalidatedProject: function (cancellationToken) {
|
|
setupInitialBuild(state, cancellationToken);
|
|
return getNextInvalidatedProject(state, getBuildOrder(state), false);
|
|
},
|
|
getBuildOrder: function () { return getBuildOrder(state); },
|
|
getUpToDateStatusOfProject: function (project) {
|
|
var configFileName = resolveProjectName(state, project);
|
|
var configFilePath = toResolvedConfigFilePath(state, configFileName);
|
|
return getUpToDateStatus(state, parseConfigFile(state, configFileName, configFilePath), configFilePath);
|
|
},
|
|
invalidateProject: function (configFilePath, reloadLevel) { return invalidateProject(state, configFilePath, reloadLevel || ts.ConfigFileProgramReloadLevel.None); },
|
|
close: function () { return stopWatching(state); },
|
|
};
|
|
}
|
|
function relName(state, path) {
|
|
return ts.convertToRelativePath(path, state.currentDirectory, function (f) { return state.getCanonicalFileName(f); });
|
|
}
|
|
function reportStatus(state, message) {
|
|
var args = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
args[_i - 2] = arguments[_i];
|
|
}
|
|
state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
|
|
}
|
|
function reportWatchStatus(state, message) {
|
|
var _a, _b;
|
|
var args = [];
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
args[_i - 2] = arguments[_i];
|
|
}
|
|
(_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
|
|
}
|
|
function reportErrors(_a, errors) {
|
|
var host = _a.host;
|
|
errors.forEach(function (err) { return host.reportDiagnostic(err); });
|
|
}
|
|
function reportAndStoreErrors(state, proj, errors) {
|
|
reportErrors(state, errors);
|
|
state.projectErrorsReported.set(proj, true);
|
|
if (errors.length) {
|
|
state.diagnostics.set(proj, errors);
|
|
}
|
|
}
|
|
function reportParseConfigFileDiagnostic(state, proj) {
|
|
reportAndStoreErrors(state, proj, [state.configFileCache.get(proj)]);
|
|
}
|
|
function reportErrorSummary(state, buildOrder) {
|
|
if (!state.needsSummary)
|
|
return;
|
|
state.needsSummary = false;
|
|
var canReportSummary = state.watch || !!state.host.reportErrorSummary;
|
|
var diagnostics = state.diagnostics;
|
|
var totalErrors = 0;
|
|
var filesInError = [];
|
|
if (isCircularBuildOrder(buildOrder)) {
|
|
reportBuildQueue(state, buildOrder.buildOrder);
|
|
reportErrors(state, buildOrder.circularDiagnostics);
|
|
if (canReportSummary)
|
|
totalErrors += ts.getErrorCountForSummary(buildOrder.circularDiagnostics);
|
|
if (canReportSummary)
|
|
filesInError = __spreadArray(__spreadArray([], filesInError, true), ts.getFilesInErrorForSummary(buildOrder.circularDiagnostics), true);
|
|
}
|
|
else {
|
|
buildOrder.forEach(function (project) {
|
|
var projectPath = toResolvedConfigFilePath(state, project);
|
|
if (!state.projectErrorsReported.has(projectPath)) {
|
|
reportErrors(state, diagnostics.get(projectPath) || ts.emptyArray);
|
|
}
|
|
});
|
|
if (canReportSummary)
|
|
diagnostics.forEach(function (singleProjectErrors) { return totalErrors += ts.getErrorCountForSummary(singleProjectErrors); });
|
|
if (canReportSummary)
|
|
diagnostics.forEach(function (singleProjectErrors) { return __spreadArray(__spreadArray([], filesInError, true), ts.getFilesInErrorForSummary(singleProjectErrors), true); });
|
|
}
|
|
if (state.watch) {
|
|
reportWatchStatus(state, ts.getWatchErrorSummaryDiagnosticMessage(totalErrors), totalErrors);
|
|
}
|
|
else if (state.host.reportErrorSummary) {
|
|
state.host.reportErrorSummary(totalErrors, filesInError);
|
|
}
|
|
}
|
|
function reportBuildQueue(state, buildQueue) {
|
|
if (state.options.verbose) {
|
|
reportStatus(state, ts.Diagnostics.Projects_in_this_build_Colon_0, buildQueue.map(function (s) { return "\r\n * " + relName(state, s); }).join(""));
|
|
}
|
|
}
|
|
function reportUpToDateStatus(state, configFileName, status) {
|
|
switch (status.type) {
|
|
case ts.UpToDateStatusType.OutOfDateWithSelf:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2, relName(state, configFileName), relName(state, status.outOfDateOutputFileName), relName(state, status.newerInputFileName));
|
|
case ts.UpToDateStatusType.OutOfDateWithUpstream:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2, relName(state, configFileName), relName(state, status.outOfDateOutputFileName), relName(state, status.newerProjectName));
|
|
case ts.UpToDateStatusType.OutputMissing:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_output_file_1_does_not_exist, relName(state, configFileName), relName(state, status.missingOutputFileName));
|
|
case ts.UpToDateStatusType.OutOfDateBuildInfo:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted, relName(state, configFileName), relName(state, status.buildInfoFile));
|
|
case ts.UpToDateStatusType.UpToDate:
|
|
if (status.newestInputFileTime !== undefined) {
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2, relName(state, configFileName), relName(state, status.newestInputFileName || ""), relName(state, status.oldestOutputFileName || ""));
|
|
}
|
|
break;
|
|
case ts.UpToDateStatusType.OutOfDateWithPrepend:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed, relName(state, configFileName), relName(state, status.newerProjectName));
|
|
case ts.UpToDateStatusType.UpToDateWithUpstreamTypes:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, relName(state, configFileName));
|
|
case ts.UpToDateStatusType.UpToDateWithInputFileText:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files, relName(state, configFileName));
|
|
case ts.UpToDateStatusType.UpstreamOutOfDate:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date, relName(state, configFileName), relName(state, status.upstreamProjectName));
|
|
case ts.UpToDateStatusType.UpstreamBlocked:
|
|
return reportStatus(state, status.upstreamProjectBlocked ?
|
|
ts.Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_was_not_built :
|
|
ts.Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors, relName(state, configFileName), relName(state, status.upstreamProjectName));
|
|
case ts.UpToDateStatusType.Unbuildable:
|
|
return reportStatus(state, ts.Diagnostics.Failed_to_parse_file_0_Colon_1, relName(state, configFileName), status.reason);
|
|
case ts.UpToDateStatusType.TsVersionOutputOfDate:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2, relName(state, configFileName), status.version, ts.version);
|
|
case ts.UpToDateStatusType.ForceBuild:
|
|
return reportStatus(state, ts.Diagnostics.Project_0_is_being_forcibly_rebuilt, relName(state, configFileName));
|
|
case ts.UpToDateStatusType.ContainerOnly:
|
|
case ts.UpToDateStatusType.ComputingUpstream:
|
|
break;
|
|
default:
|
|
ts.assertType(status);
|
|
}
|
|
}
|
|
function verboseReportProjectStatus(state, configFileName, status) {
|
|
if (state.options.verbose) {
|
|
reportUpToDateStatus(state, configFileName, status);
|
|
}
|
|
}
|
|
})(ts || (ts = {}));
|
|
var ts;
|
|
(function (ts) {
|
|
function countLines(program) {
|
|
var counts = getCountsMap();
|
|
ts.forEach(program.getSourceFiles(), function (file) {
|
|
var key = getCountKey(program, file);
|
|
var lineCount = ts.getLineStarts(file).length;
|
|
counts.set(key, counts.get(key) + lineCount);
|
|
});
|
|
return counts;
|
|
}
|
|
function countNodes(program) {
|
|
var counts = getCountsMap();
|
|
ts.forEach(program.getSourceFiles(), function (file) {
|
|
var key = getCountKey(program, file);
|
|
counts.set(key, counts.get(key) + file.nodeCount);
|
|
});
|
|
return counts;
|
|
}
|
|
function getCountsMap() {
|
|
var counts = new ts.Map();
|
|
counts.set("Library", 0);
|
|
counts.set("Definitions", 0);
|
|
counts.set("TypeScript", 0);
|
|
counts.set("JavaScript", 0);
|
|
counts.set("JSON", 0);
|
|
counts.set("Other", 0);
|
|
return counts;
|
|
}
|
|
function getCountKey(program, file) {
|
|
if (program.isSourceFileDefaultLibrary(file)) {
|
|
return "Library";
|
|
}
|
|
else if (file.isDeclarationFile) {
|
|
return "Definitions";
|
|
}
|
|
var path = file.path;
|
|
if (ts.fileExtensionIsOneOf(path, ts.supportedTSExtensionsFlat)) {
|
|
return "TypeScript";
|
|
}
|
|
else if (ts.fileExtensionIsOneOf(path, ts.supportedJSExtensionsFlat)) {
|
|
return "JavaScript";
|
|
}
|
|
else if (ts.fileExtensionIs(path, ".json")) {
|
|
return "JSON";
|
|
}
|
|
else {
|
|
return "Other";
|
|
}
|
|
}
|
|
function updateReportDiagnostic(sys, existing, options) {
|
|
return shouldBePretty(sys, options) ?
|
|
ts.createDiagnosticReporter(sys, true) :
|
|
existing;
|
|
}
|
|
function defaultIsPretty(sys) {
|
|
return !!sys.writeOutputIsTTY && sys.writeOutputIsTTY() && !sys.getEnvironmentVariable("NO_COLOR");
|
|
}
|
|
function shouldBePretty(sys, options) {
|
|
if (!options || typeof options.pretty === "undefined") {
|
|
return defaultIsPretty(sys);
|
|
}
|
|
return options.pretty;
|
|
}
|
|
function getOptionsForHelp(commandLine) {
|
|
return !!commandLine.options.all ?
|
|
ts.sort(ts.optionDeclarations, function (a, b) { return ts.compareStringsCaseInsensitive(a.name, b.name); }) :
|
|
ts.filter(ts.optionDeclarations.slice(), function (v) { return !!v.showInSimplifiedHelpView; });
|
|
}
|
|
function printVersion(sys) {
|
|
sys.write(ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + sys.newLine);
|
|
}
|
|
function createColors(sys) {
|
|
var showColors = defaultIsPretty(sys);
|
|
if (!showColors) {
|
|
return {
|
|
bold: function (str) { return str; },
|
|
blue: function (str) { return str; },
|
|
blueBackground: function (str) { return str; },
|
|
brightWhite: function (str) { return str; }
|
|
};
|
|
}
|
|
function bold(str) {
|
|
return "\u001B[1m".concat(str, "\u001B[22m");
|
|
}
|
|
var isWindows = sys.getEnvironmentVariable("OS") && ts.stringContains(sys.getEnvironmentVariable("OS").toLowerCase(), "windows");
|
|
var isWindowsTerminal = sys.getEnvironmentVariable("WT_SESSION");
|
|
var isVSCode = sys.getEnvironmentVariable("TERM_PROGRAM") && sys.getEnvironmentVariable("TERM_PROGRAM") === "vscode";
|
|
function blue(str) {
|
|
if (isWindows && !isWindowsTerminal && !isVSCode) {
|
|
return brightWhite(str);
|
|
}
|
|
return "\u001B[94m".concat(str, "\u001B[39m");
|
|
}
|
|
var supportsRicherColors = sys.getEnvironmentVariable("COLORTERM") === "truecolor" || sys.getEnvironmentVariable("TERM") === "xterm-256color";
|
|
function blueBackground(str) {
|
|
if (supportsRicherColors) {
|
|
return "\u001B[48;5;68m".concat(str, "\u001B[39;49m");
|
|
}
|
|
else {
|
|
return "\u001B[44m".concat(str, "\u001B[39;49m");
|
|
}
|
|
}
|
|
function brightWhite(str) {
|
|
return "\u001B[97m".concat(str, "\u001B[39m");
|
|
}
|
|
return {
|
|
bold: bold,
|
|
blue: blue,
|
|
brightWhite: brightWhite,
|
|
blueBackground: blueBackground
|
|
};
|
|
}
|
|
function getDisplayNameTextOfOption(option) {
|
|
return "--".concat(option.name).concat(option.shortName ? ", -".concat(option.shortName) : "");
|
|
}
|
|
function generateOptionOutput(sys, option, rightAlignOfLeft, leftAlignOfRight) {
|
|
var _a, _b;
|
|
var text = [];
|
|
var colors = createColors(sys);
|
|
var name = getDisplayNameTextOfOption(option);
|
|
var valueCandidates = getValueCandidate(option);
|
|
var defaultValueDescription = typeof option.defaultValueDescription === "object"
|
|
? ts.getDiagnosticText(option.defaultValueDescription)
|
|
: formatDefaultValue(option.defaultValueDescription, option.type === "list" ? option.element.type : option.type);
|
|
var terminalWidth = (_b = (_a = sys.getWidthOfTerminal) === null || _a === void 0 ? void 0 : _a.call(sys)) !== null && _b !== void 0 ? _b : 0;
|
|
if (terminalWidth >= 80) {
|
|
var description = "";
|
|
if (option.description) {
|
|
description = ts.getDiagnosticText(option.description);
|
|
}
|
|
text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(name, description, rightAlignOfLeft, leftAlignOfRight, terminalWidth, true), false), [sys.newLine], false));
|
|
if (showAdditionalInfoOutput(valueCandidates, option)) {
|
|
if (valueCandidates) {
|
|
text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(valueCandidates.valueType, valueCandidates.possibleValues, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false), false), [sys.newLine], false));
|
|
}
|
|
if (defaultValueDescription) {
|
|
text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(ts.getDiagnosticText(ts.Diagnostics.default_Colon), defaultValueDescription, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false), false), [sys.newLine], false));
|
|
}
|
|
}
|
|
text.push(sys.newLine);
|
|
}
|
|
else {
|
|
text.push(colors.blue(name), sys.newLine);
|
|
if (option.description) {
|
|
var description = ts.getDiagnosticText(option.description);
|
|
text.push(description);
|
|
}
|
|
text.push(sys.newLine);
|
|
if (showAdditionalInfoOutput(valueCandidates, option)) {
|
|
if (valueCandidates) {
|
|
text.push("".concat(valueCandidates.valueType, " ").concat(valueCandidates.possibleValues));
|
|
}
|
|
if (defaultValueDescription) {
|
|
if (valueCandidates)
|
|
text.push(sys.newLine);
|
|
var diagType = ts.getDiagnosticText(ts.Diagnostics.default_Colon);
|
|
text.push("".concat(diagType, " ").concat(defaultValueDescription));
|
|
}
|
|
text.push(sys.newLine);
|
|
}
|
|
text.push(sys.newLine);
|
|
}
|
|
return text;
|
|
function formatDefaultValue(defaultValue, type) {
|
|
return defaultValue !== undefined && typeof type === "object"
|
|
? ts.arrayFrom(type.entries())
|
|
.filter(function (_a) {
|
|
var value = _a[1];
|
|
return value === defaultValue;
|
|
})
|
|
.map(function (_a) {
|
|
var name = _a[0];
|
|
return name;
|
|
})
|
|
.join("/")
|
|
: String(defaultValue);
|
|
}
|
|
function showAdditionalInfoOutput(valueCandidates, option) {
|
|
var ignoreValues = ["string"];
|
|
var ignoredDescriptions = [undefined, "false", "n/a"];
|
|
var defaultValueDescription = option.defaultValueDescription;
|
|
if (option.category === ts.Diagnostics.Command_line_Options)
|
|
return false;
|
|
if (ts.contains(ignoreValues, valueCandidates === null || valueCandidates === void 0 ? void 0 : valueCandidates.possibleValues) && ts.contains(ignoredDescriptions, defaultValueDescription)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function getPrettyOutput(left, right, rightAlignOfLeft, leftAlignOfRight, terminalWidth, colorLeft) {
|
|
var res = [];
|
|
var isFirstLine = true;
|
|
var remainRight = right;
|
|
var rightCharacterNumber = terminalWidth - leftAlignOfRight;
|
|
while (remainRight.length > 0) {
|
|
var curLeft = "";
|
|
if (isFirstLine) {
|
|
curLeft = ts.padLeft(left, rightAlignOfLeft);
|
|
curLeft = ts.padRight(curLeft, leftAlignOfRight);
|
|
curLeft = colorLeft ? colors.blue(curLeft) : curLeft;
|
|
}
|
|
else {
|
|
curLeft = ts.padLeft("", leftAlignOfRight);
|
|
}
|
|
var curRight = remainRight.substr(0, rightCharacterNumber);
|
|
remainRight = remainRight.slice(rightCharacterNumber);
|
|
res.push("".concat(curLeft).concat(curRight));
|
|
isFirstLine = false;
|
|
}
|
|
return res;
|
|
}
|
|
function getValueCandidate(option) {
|
|
if (option.type === "object") {
|
|
return undefined;
|
|
}
|
|
return {
|
|
valueType: getValueType(option),
|
|
possibleValues: getPossibleValues(option)
|
|
};
|
|
function getValueType(option) {
|
|
switch (option.type) {
|
|
case "string":
|
|
case "number":
|
|
case "boolean":
|
|
return ts.getDiagnosticText(ts.Diagnostics.type_Colon);
|
|
case "list":
|
|
return ts.getDiagnosticText(ts.Diagnostics.one_or_more_Colon);
|
|
default:
|
|
return ts.getDiagnosticText(ts.Diagnostics.one_of_Colon);
|
|
}
|
|
}
|
|
function getPossibleValues(option) {
|
|
var possibleValues;
|
|
switch (option.type) {
|
|
case "string":
|
|
case "number":
|
|
case "boolean":
|
|
possibleValues = option.type;
|
|
break;
|
|
case "list":
|
|
possibleValues = getPossibleValues(option.element);
|
|
break;
|
|
case "object":
|
|
possibleValues = "";
|
|
break;
|
|
default:
|
|
var inverted_1 = {};
|
|
option.type.forEach(function (value, name) {
|
|
(inverted_1[value] || (inverted_1[value] = [])).push(name);
|
|
});
|
|
return ts.getEntries(inverted_1)
|
|
.map(function (_a) {
|
|
var synonyms = _a[1];
|
|
return synonyms.join("/");
|
|
})
|
|
.join(", ");
|
|
}
|
|
return possibleValues;
|
|
}
|
|
}
|
|
}
|
|
function generateGroupOptionOutput(sys, optionsList) {
|
|
var maxLength = 0;
|
|
for (var _i = 0, optionsList_1 = optionsList; _i < optionsList_1.length; _i++) {
|
|
var option = optionsList_1[_i];
|
|
var curLength = getDisplayNameTextOfOption(option).length;
|
|
maxLength = maxLength > curLength ? maxLength : curLength;
|
|
}
|
|
var rightAlignOfLeftPart = maxLength + 2;
|
|
var leftAlignOfRightPart = rightAlignOfLeftPart + 2;
|
|
var lines = [];
|
|
for (var _a = 0, optionsList_2 = optionsList; _a < optionsList_2.length; _a++) {
|
|
var option = optionsList_2[_a];
|
|
var tmp = generateOptionOutput(sys, option, rightAlignOfLeftPart, leftAlignOfRightPart);
|
|
lines = __spreadArray(__spreadArray([], lines, true), tmp, true);
|
|
}
|
|
if (lines[lines.length - 2] !== sys.newLine) {
|
|
lines.push(sys.newLine);
|
|
}
|
|
return lines;
|
|
}
|
|
function generateSectionOptionsOutput(sys, sectionName, options, subCategory, beforeOptionsDescription, afterOptionsDescription) {
|
|
var _a;
|
|
var res = [];
|
|
res.push(createColors(sys).bold(sectionName) + sys.newLine + sys.newLine);
|
|
if (beforeOptionsDescription) {
|
|
res.push(beforeOptionsDescription + sys.newLine + sys.newLine);
|
|
}
|
|
if (!subCategory) {
|
|
res = __spreadArray(__spreadArray([], res, true), generateGroupOptionOutput(sys, options), true);
|
|
if (afterOptionsDescription) {
|
|
res.push(afterOptionsDescription + sys.newLine + sys.newLine);
|
|
}
|
|
return res;
|
|
}
|
|
var categoryMap = new ts.Map();
|
|
for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
|
|
var option = options_1[_i];
|
|
if (!option.category) {
|
|
continue;
|
|
}
|
|
var curCategory = ts.getDiagnosticText(option.category);
|
|
var optionsOfCurCategory = (_a = categoryMap.get(curCategory)) !== null && _a !== void 0 ? _a : [];
|
|
optionsOfCurCategory.push(option);
|
|
categoryMap.set(curCategory, optionsOfCurCategory);
|
|
}
|
|
categoryMap.forEach(function (value, key) {
|
|
res.push("### ".concat(key).concat(sys.newLine).concat(sys.newLine));
|
|
res = __spreadArray(__spreadArray([], res, true), generateGroupOptionOutput(sys, value), true);
|
|
});
|
|
if (afterOptionsDescription) {
|
|
res.push(afterOptionsDescription + sys.newLine + sys.newLine);
|
|
}
|
|
return res;
|
|
}
|
|
function printEasyHelp(sys, simpleOptions) {
|
|
var colors = createColors(sys);
|
|
var output = __spreadArray([], getHeader(sys, "".concat(ts.getDiagnosticText(ts.Diagnostics.tsc_Colon_The_TypeScript_Compiler), " - ").concat(ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version))), true);
|
|
output.push(colors.bold(ts.getDiagnosticText(ts.Diagnostics.COMMON_COMMANDS)) + sys.newLine + sys.newLine);
|
|
example("tsc", ts.Diagnostics.Compiles_the_current_project_tsconfig_json_in_the_working_directory);
|
|
example("tsc app.ts util.ts", ts.Diagnostics.Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options);
|
|
example("tsc -b", ts.Diagnostics.Build_a_composite_project_in_the_working_directory);
|
|
example("tsc --init", ts.Diagnostics.Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory);
|
|
example("tsc -p ./path/to/tsconfig.json", ts.Diagnostics.Compiles_the_TypeScript_project_located_at_the_specified_path);
|
|
example("tsc --help --all", ts.Diagnostics.An_expanded_version_of_this_information_showing_all_possible_compiler_options);
|
|
example(["tsc --noEmit", "tsc --target esnext"], ts.Diagnostics.Compiles_the_current_project_with_additional_settings);
|
|
var cliCommands = simpleOptions.filter(function (opt) { return opt.isCommandLineOnly || opt.category === ts.Diagnostics.Command_line_Options; });
|
|
var configOpts = simpleOptions.filter(function (opt) { return !ts.contains(cliCommands, opt); });
|
|
output = __spreadArray(__spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.COMMAND_LINE_FLAGS), cliCommands, false, undefined, undefined), true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.COMMON_COMPILER_OPTIONS), configOpts, false, undefined, ts.formatMessage(undefined, ts.Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsc")), true);
|
|
for (var _i = 0, output_1 = output; _i < output_1.length; _i++) {
|
|
var line = output_1[_i];
|
|
sys.write(line);
|
|
}
|
|
function example(ex, desc) {
|
|
var examples = typeof ex === "string" ? [ex] : ex;
|
|
for (var _i = 0, examples_1 = examples; _i < examples_1.length; _i++) {
|
|
var example_1 = examples_1[_i];
|
|
output.push(" " + colors.blue(example_1) + sys.newLine);
|
|
}
|
|
output.push(" " + ts.getDiagnosticText(desc) + sys.newLine + sys.newLine);
|
|
}
|
|
}
|
|
function printAllHelp(sys, compilerOptions, buildOptions, watchOptions) {
|
|
var output = __spreadArray([], getHeader(sys, "".concat(ts.getDiagnosticText(ts.Diagnostics.tsc_Colon_The_TypeScript_Compiler), " - ").concat(ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version))), true);
|
|
output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.ALL_COMPILER_OPTIONS), compilerOptions, true, undefined, ts.formatMessage(undefined, ts.Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsc")), true);
|
|
output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.WATCH_OPTIONS), watchOptions, false, ts.getDiagnosticText(ts.Diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon)), true);
|
|
output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.BUILD_OPTIONS), buildOptions, false, ts.formatMessage(undefined, ts.Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds")), true);
|
|
for (var _i = 0, output_2 = output; _i < output_2.length; _i++) {
|
|
var line = output_2[_i];
|
|
sys.write(line);
|
|
}
|
|
}
|
|
function printBuildHelp(sys, buildOptions) {
|
|
var output = __spreadArray([], getHeader(sys, "".concat(ts.getDiagnosticText(ts.Diagnostics.tsc_Colon_The_TypeScript_Compiler), " - ").concat(ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version))), true);
|
|
output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.BUILD_OPTIONS), buildOptions, false, ts.formatMessage(undefined, ts.Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds")), true);
|
|
for (var _i = 0, output_3 = output; _i < output_3.length; _i++) {
|
|
var line = output_3[_i];
|
|
sys.write(line);
|
|
}
|
|
}
|
|
function getHeader(sys, message) {
|
|
var _a, _b;
|
|
var colors = createColors(sys);
|
|
var header = [];
|
|
var terminalWidth = (_b = (_a = sys.getWidthOfTerminal) === null || _a === void 0 ? void 0 : _a.call(sys)) !== null && _b !== void 0 ? _b : 0;
|
|
;
|
|
var tsIconLength = 5;
|
|
var tsIconFirstLine = colors.blueBackground(ts.padLeft("", tsIconLength));
|
|
var tsIconSecondLine = colors.blueBackground(colors.brightWhite(ts.padLeft("TS ", tsIconLength)));
|
|
if (terminalWidth >= message.length + tsIconLength) {
|
|
var rightAlign = terminalWidth > 120 ? 120 : terminalWidth;
|
|
var leftAlign = rightAlign - tsIconLength;
|
|
header.push(ts.padRight(message, leftAlign) + tsIconFirstLine + sys.newLine);
|
|
header.push(ts.padLeft("", leftAlign) + tsIconSecondLine + sys.newLine);
|
|
}
|
|
else {
|
|
header.push(message + sys.newLine);
|
|
header.push(sys.newLine);
|
|
}
|
|
return header;
|
|
}
|
|
function printHelp(sys, commandLine) {
|
|
if (!commandLine.options.all) {
|
|
printEasyHelp(sys, getOptionsForHelp(commandLine));
|
|
}
|
|
else {
|
|
printAllHelp(sys, getOptionsForHelp(commandLine), ts.optionsForBuild, ts.optionsForWatch);
|
|
}
|
|
}
|
|
function executeCommandLineWorker(sys, cb, commandLine) {
|
|
var reportDiagnostic = ts.createDiagnosticReporter(sys);
|
|
if (commandLine.options.build) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_build_must_be_the_first_command_line_argument));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
var configFileName;
|
|
if (commandLine.options.locale) {
|
|
ts.validateLocaleAndSetLanguage(commandLine.options.locale, sys, commandLine.errors);
|
|
}
|
|
if (commandLine.errors.length > 0) {
|
|
commandLine.errors.forEach(reportDiagnostic);
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
if (commandLine.options.init) {
|
|
writeConfigFile(sys, reportDiagnostic, commandLine.options, commandLine.fileNames);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
if (commandLine.options.version) {
|
|
printVersion(sys);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
if (commandLine.options.help || commandLine.options.all) {
|
|
printHelp(sys, commandLine);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
if (commandLine.options.watch && commandLine.options.listFilesOnly) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Options_0_and_1_cannot_be_combined, "watch", "listFilesOnly"));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
if (commandLine.options.project) {
|
|
if (commandLine.fileNames.length !== 0) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
var fileOrDirectory = ts.normalizePath(commandLine.options.project);
|
|
if (!fileOrDirectory || sys.directoryExists(fileOrDirectory)) {
|
|
configFileName = ts.combinePaths(fileOrDirectory, "tsconfig.json");
|
|
if (!sys.fileExists(configFileName)) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0, commandLine.options.project));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
}
|
|
else {
|
|
configFileName = fileOrDirectory;
|
|
if (!sys.fileExists(configFileName)) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_specified_path_does_not_exist_Colon_0, commandLine.options.project));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
}
|
|
}
|
|
else if (commandLine.fileNames.length === 0) {
|
|
var searchPath = ts.normalizePath(sys.getCurrentDirectory());
|
|
configFileName = ts.findConfigFile(searchPath, function (fileName) { return sys.fileExists(fileName); });
|
|
}
|
|
if (commandLine.fileNames.length === 0 && !configFileName) {
|
|
if (commandLine.options.showConfig) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, ts.normalizePath(sys.getCurrentDirectory())));
|
|
}
|
|
else {
|
|
printVersion(sys);
|
|
printHelp(sys, commandLine);
|
|
}
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
var currentDirectory = sys.getCurrentDirectory();
|
|
var commandLineOptions = ts.convertToOptionsWithAbsolutePaths(commandLine.options, function (fileName) { return ts.getNormalizedAbsolutePath(fileName, currentDirectory); });
|
|
if (configFileName) {
|
|
var extendedConfigCache = new ts.Map();
|
|
var configParseResult = ts.parseConfigFileWithSystem(configFileName, commandLineOptions, extendedConfigCache, commandLine.watchOptions, sys, reportDiagnostic);
|
|
if (commandLineOptions.showConfig) {
|
|
if (configParseResult.errors.length !== 0) {
|
|
reportDiagnostic = updateReportDiagnostic(sys, reportDiagnostic, configParseResult.options);
|
|
configParseResult.errors.forEach(reportDiagnostic);
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
sys.write(JSON.stringify(ts.convertToTSConfig(configParseResult, configFileName, sys), null, 4) + sys.newLine);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
reportDiagnostic = updateReportDiagnostic(sys, reportDiagnostic, configParseResult.options);
|
|
if (ts.isWatchSet(configParseResult.options)) {
|
|
if (reportWatchModeWithoutSysSupport(sys, reportDiagnostic))
|
|
return;
|
|
return createWatchOfConfigFile(sys, cb, reportDiagnostic, configParseResult, commandLineOptions, commandLine.watchOptions, extendedConfigCache);
|
|
}
|
|
else if (ts.isIncrementalCompilation(configParseResult.options)) {
|
|
performIncrementalCompilation(sys, cb, reportDiagnostic, configParseResult);
|
|
}
|
|
else {
|
|
performCompilation(sys, cb, reportDiagnostic, configParseResult);
|
|
}
|
|
}
|
|
else {
|
|
if (commandLineOptions.showConfig) {
|
|
sys.write(JSON.stringify(ts.convertToTSConfig(commandLine, ts.combinePaths(currentDirectory, "tsconfig.json"), sys), null, 4) + sys.newLine);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
reportDiagnostic = updateReportDiagnostic(sys, reportDiagnostic, commandLineOptions);
|
|
if (ts.isWatchSet(commandLineOptions)) {
|
|
if (reportWatchModeWithoutSysSupport(sys, reportDiagnostic))
|
|
return;
|
|
return createWatchOfFilesAndCompilerOptions(sys, cb, reportDiagnostic, commandLine.fileNames, commandLineOptions, commandLine.watchOptions);
|
|
}
|
|
else if (ts.isIncrementalCompilation(commandLineOptions)) {
|
|
performIncrementalCompilation(sys, cb, reportDiagnostic, __assign(__assign({}, commandLine), { options: commandLineOptions }));
|
|
}
|
|
else {
|
|
performCompilation(sys, cb, reportDiagnostic, __assign(__assign({}, commandLine), { options: commandLineOptions }));
|
|
}
|
|
}
|
|
}
|
|
function isBuild(commandLineArgs) {
|
|
if (commandLineArgs.length > 0 && commandLineArgs[0].charCodeAt(0) === 45) {
|
|
var firstOption = commandLineArgs[0].slice(commandLineArgs[0].charCodeAt(1) === 45 ? 2 : 1).toLowerCase();
|
|
return firstOption === "build" || firstOption === "b";
|
|
}
|
|
return false;
|
|
}
|
|
ts.isBuild = isBuild;
|
|
function executeCommandLine(system, cb, commandLineArgs) {
|
|
if (isBuild(commandLineArgs)) {
|
|
var _a = ts.parseBuildCommand(commandLineArgs.slice(1)), buildOptions_1 = _a.buildOptions, watchOptions_1 = _a.watchOptions, projects_1 = _a.projects, errors_1 = _a.errors;
|
|
if (buildOptions_1.generateCpuProfile && system.enableCPUProfiler) {
|
|
system.enableCPUProfiler(buildOptions_1.generateCpuProfile, function () { return performBuild(system, cb, buildOptions_1, watchOptions_1, projects_1, errors_1); });
|
|
}
|
|
else {
|
|
return performBuild(system, cb, buildOptions_1, watchOptions_1, projects_1, errors_1);
|
|
}
|
|
}
|
|
var commandLine = ts.parseCommandLine(commandLineArgs, function (path) { return system.readFile(path); });
|
|
if (commandLine.options.generateCpuProfile && system.enableCPUProfiler) {
|
|
system.enableCPUProfiler(commandLine.options.generateCpuProfile, function () { return executeCommandLineWorker(system, cb, commandLine); });
|
|
}
|
|
else {
|
|
return executeCommandLineWorker(system, cb, commandLine);
|
|
}
|
|
}
|
|
ts.executeCommandLine = executeCommandLine;
|
|
function reportWatchModeWithoutSysSupport(sys, reportDiagnostic) {
|
|
if (!sys.watchFile || !sys.watchDirectory) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"));
|
|
sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function performBuild(sys, cb, buildOptions, watchOptions, projects, errors) {
|
|
var reportDiagnostic = updateReportDiagnostic(sys, ts.createDiagnosticReporter(sys), buildOptions);
|
|
if (buildOptions.locale) {
|
|
ts.validateLocaleAndSetLanguage(buildOptions.locale, sys, errors);
|
|
}
|
|
if (errors.length > 0) {
|
|
errors.forEach(reportDiagnostic);
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
if (buildOptions.help) {
|
|
printVersion(sys);
|
|
printBuildHelp(sys, ts.buildOpts);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
if (projects.length === 0) {
|
|
printVersion(sys);
|
|
printBuildHelp(sys, ts.buildOpts);
|
|
return sys.exit(ts.ExitStatus.Success);
|
|
}
|
|
if (!sys.getModifiedTime || !sys.setModifiedTime || (buildOptions.clean && !sys.deleteFile)) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--build"));
|
|
return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
|
|
}
|
|
if (buildOptions.watch) {
|
|
if (reportWatchModeWithoutSysSupport(sys, reportDiagnostic))
|
|
return;
|
|
var buildHost_1 = ts.createSolutionBuilderWithWatchHost(sys, undefined, reportDiagnostic, ts.createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createWatchStatusReporter(sys, buildOptions));
|
|
updateSolutionBuilderHost(sys, cb, buildHost_1);
|
|
var builder_1 = ts.createSolutionBuilderWithWatch(buildHost_1, projects, buildOptions, watchOptions);
|
|
builder_1.build();
|
|
return builder_1;
|
|
}
|
|
var buildHost = ts.createSolutionBuilderHost(sys, undefined, reportDiagnostic, ts.createBuilderStatusReporter(sys, shouldBePretty(sys, buildOptions)), createReportErrorSummary(sys, buildOptions));
|
|
updateSolutionBuilderHost(sys, cb, buildHost);
|
|
var builder = ts.createSolutionBuilder(buildHost, projects, buildOptions);
|
|
var exitStatus = buildOptions.clean ? builder.clean() : builder.build();
|
|
ts.dumpTracingLegend();
|
|
return sys.exit(exitStatus);
|
|
}
|
|
function createReportErrorSummary(sys, options) {
|
|
return shouldBePretty(sys, options) ?
|
|
function (errorCount, filesInError) { return sys.write(ts.getErrorSummaryText(errorCount, filesInError, sys.newLine, sys)); } :
|
|
undefined;
|
|
}
|
|
function performCompilation(sys, cb, reportDiagnostic, config) {
|
|
var fileNames = config.fileNames, options = config.options, projectReferences = config.projectReferences;
|
|
var host = ts.createCompilerHostWorker(options, undefined, sys);
|
|
var currentDirectory = host.getCurrentDirectory();
|
|
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
|
|
ts.changeCompilerHostLikeToUseCache(host, function (fileName) { return ts.toPath(fileName, currentDirectory, getCanonicalFileName); });
|
|
enableStatisticsAndTracing(sys, options, false);
|
|
var programOptions = {
|
|
rootNames: fileNames,
|
|
options: options,
|
|
projectReferences: projectReferences,
|
|
host: host,
|
|
configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(config)
|
|
};
|
|
var program = ts.createProgram(programOptions);
|
|
var exitStatus = ts.emitFilesAndReportErrorsAndGetExitStatus(program, reportDiagnostic, function (s) { return sys.write(s + sys.newLine); }, createReportErrorSummary(sys, options));
|
|
reportStatistics(sys, program);
|
|
cb(program);
|
|
return sys.exit(exitStatus);
|
|
}
|
|
function performIncrementalCompilation(sys, cb, reportDiagnostic, config) {
|
|
var options = config.options, fileNames = config.fileNames, projectReferences = config.projectReferences;
|
|
enableStatisticsAndTracing(sys, options, false);
|
|
var host = ts.createIncrementalCompilerHost(options, sys);
|
|
var exitStatus = ts.performIncrementalCompilation({
|
|
host: host,
|
|
system: sys,
|
|
rootNames: fileNames,
|
|
options: options,
|
|
configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(config),
|
|
projectReferences: projectReferences,
|
|
reportDiagnostic: reportDiagnostic,
|
|
reportErrorSummary: createReportErrorSummary(sys, options),
|
|
afterProgramEmitAndDiagnostics: function (builderProgram) {
|
|
reportStatistics(sys, builderProgram.getProgram());
|
|
cb(builderProgram);
|
|
}
|
|
});
|
|
return sys.exit(exitStatus);
|
|
}
|
|
function updateSolutionBuilderHost(sys, cb, buildHost) {
|
|
updateCreateProgram(sys, buildHost);
|
|
buildHost.afterProgramEmitAndDiagnostics = function (program) {
|
|
reportStatistics(sys, program.getProgram());
|
|
cb(program);
|
|
};
|
|
buildHost.afterEmitBundle = cb;
|
|
}
|
|
function updateCreateProgram(sys, host) {
|
|
var compileUsingBuilder = host.createProgram;
|
|
host.createProgram = function (rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences) {
|
|
ts.Debug.assert(rootNames !== undefined || (options === undefined && !!oldProgram));
|
|
if (options !== undefined) {
|
|
enableStatisticsAndTracing(sys, options, true);
|
|
}
|
|
return compileUsingBuilder(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences);
|
|
};
|
|
}
|
|
function updateWatchCompilationHost(sys, cb, watchCompilerHost) {
|
|
updateCreateProgram(sys, watchCompilerHost);
|
|
var emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate;
|
|
watchCompilerHost.afterProgramCreate = function (builderProgram) {
|
|
emitFilesUsingBuilder(builderProgram);
|
|
reportStatistics(sys, builderProgram.getProgram());
|
|
cb(builderProgram);
|
|
};
|
|
}
|
|
function createWatchStatusReporter(sys, options) {
|
|
return ts.createWatchStatusReporter(sys, shouldBePretty(sys, options));
|
|
}
|
|
function createWatchOfConfigFile(system, cb, reportDiagnostic, configParseResult, optionsToExtend, watchOptionsToExtend, extendedConfigCache) {
|
|
var watchCompilerHost = ts.createWatchCompilerHostOfConfigFile({
|
|
configFileName: configParseResult.options.configFilePath,
|
|
optionsToExtend: optionsToExtend,
|
|
watchOptionsToExtend: watchOptionsToExtend,
|
|
system: system,
|
|
reportDiagnostic: reportDiagnostic,
|
|
reportWatchStatus: createWatchStatusReporter(system, configParseResult.options)
|
|
});
|
|
updateWatchCompilationHost(system, cb, watchCompilerHost);
|
|
watchCompilerHost.configFileParsingResult = configParseResult;
|
|
watchCompilerHost.extendedConfigCache = extendedConfigCache;
|
|
return ts.createWatchProgram(watchCompilerHost);
|
|
}
|
|
function createWatchOfFilesAndCompilerOptions(system, cb, reportDiagnostic, rootFiles, options, watchOptions) {
|
|
var watchCompilerHost = ts.createWatchCompilerHostOfFilesAndCompilerOptions({
|
|
rootFiles: rootFiles,
|
|
options: options,
|
|
watchOptions: watchOptions,
|
|
system: system,
|
|
reportDiagnostic: reportDiagnostic,
|
|
reportWatchStatus: createWatchStatusReporter(system, options)
|
|
});
|
|
updateWatchCompilationHost(system, cb, watchCompilerHost);
|
|
return ts.createWatchProgram(watchCompilerHost);
|
|
}
|
|
function canReportDiagnostics(system, compilerOptions) {
|
|
return system === ts.sys && (compilerOptions.diagnostics || compilerOptions.extendedDiagnostics);
|
|
}
|
|
function canTrace(system, compilerOptions) {
|
|
return system === ts.sys && compilerOptions.generateTrace;
|
|
}
|
|
function enableStatisticsAndTracing(system, compilerOptions, isBuildMode) {
|
|
if (canReportDiagnostics(system, compilerOptions)) {
|
|
ts.performance.enable(system);
|
|
}
|
|
if (canTrace(system, compilerOptions)) {
|
|
ts.startTracing(isBuildMode ? "build" : "project", compilerOptions.generateTrace, compilerOptions.configFilePath);
|
|
}
|
|
}
|
|
function reportStatistics(sys, program) {
|
|
var compilerOptions = program.getCompilerOptions();
|
|
if (canTrace(sys, compilerOptions)) {
|
|
ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.stopTracing();
|
|
}
|
|
var statistics;
|
|
if (canReportDiagnostics(sys, compilerOptions)) {
|
|
statistics = [];
|
|
var memoryUsed = sys.getMemoryUsage ? sys.getMemoryUsage() : -1;
|
|
reportCountStatistic("Files", program.getSourceFiles().length);
|
|
var lineCounts = countLines(program);
|
|
var nodeCounts = countNodes(program);
|
|
if (compilerOptions.extendedDiagnostics) {
|
|
for (var _i = 0, _a = ts.arrayFrom(lineCounts.keys()); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
reportCountStatistic("Lines of " + key, lineCounts.get(key));
|
|
}
|
|
for (var _b = 0, _c = ts.arrayFrom(nodeCounts.keys()); _b < _c.length; _b++) {
|
|
var key = _c[_b];
|
|
reportCountStatistic("Nodes of " + key, nodeCounts.get(key));
|
|
}
|
|
}
|
|
else {
|
|
reportCountStatistic("Lines", ts.reduceLeftIterator(lineCounts.values(), function (sum, count) { return sum + count; }, 0));
|
|
reportCountStatistic("Nodes", ts.reduceLeftIterator(nodeCounts.values(), function (sum, count) { return sum + count; }, 0));
|
|
}
|
|
reportCountStatistic("Identifiers", program.getIdentifierCount());
|
|
reportCountStatistic("Symbols", program.getSymbolCount());
|
|
reportCountStatistic("Types", program.getTypeCount());
|
|
reportCountStatistic("Instantiations", program.getInstantiationCount());
|
|
if (memoryUsed >= 0) {
|
|
reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K");
|
|
}
|
|
var isPerformanceEnabled = ts.performance.isEnabled();
|
|
var programTime = isPerformanceEnabled ? ts.performance.getDuration("Program") : 0;
|
|
var bindTime = isPerformanceEnabled ? ts.performance.getDuration("Bind") : 0;
|
|
var checkTime = isPerformanceEnabled ? ts.performance.getDuration("Check") : 0;
|
|
var emitTime = isPerformanceEnabled ? ts.performance.getDuration("Emit") : 0;
|
|
if (compilerOptions.extendedDiagnostics) {
|
|
var caches = program.getRelationCacheSizes();
|
|
reportCountStatistic("Assignability cache size", caches.assignable);
|
|
reportCountStatistic("Identity cache size", caches.identity);
|
|
reportCountStatistic("Subtype cache size", caches.subtype);
|
|
reportCountStatistic("Strict subtype cache size", caches.strictSubtype);
|
|
if (isPerformanceEnabled) {
|
|
ts.performance.forEachMeasure(function (name, duration) { return reportTimeStatistic("".concat(name, " time"), duration); });
|
|
}
|
|
}
|
|
else if (isPerformanceEnabled) {
|
|
reportTimeStatistic("I/O read", ts.performance.getDuration("I/O Read"));
|
|
reportTimeStatistic("I/O write", ts.performance.getDuration("I/O Write"));
|
|
reportTimeStatistic("Parse time", programTime);
|
|
reportTimeStatistic("Bind time", bindTime);
|
|
reportTimeStatistic("Check time", checkTime);
|
|
reportTimeStatistic("Emit time", emitTime);
|
|
}
|
|
if (isPerformanceEnabled) {
|
|
reportTimeStatistic("Total time", programTime + bindTime + checkTime + emitTime);
|
|
}
|
|
reportStatistics();
|
|
if (!isPerformanceEnabled) {
|
|
sys.write(ts.Diagnostics.Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found.message + "\n");
|
|
}
|
|
else {
|
|
ts.performance.disable();
|
|
}
|
|
}
|
|
function reportStatistics() {
|
|
var nameSize = 0;
|
|
var valueSize = 0;
|
|
for (var _i = 0, statistics_1 = statistics; _i < statistics_1.length; _i++) {
|
|
var _a = statistics_1[_i], name = _a.name, value = _a.value;
|
|
if (name.length > nameSize) {
|
|
nameSize = name.length;
|
|
}
|
|
if (value.length > valueSize) {
|
|
valueSize = value.length;
|
|
}
|
|
}
|
|
for (var _b = 0, statistics_2 = statistics; _b < statistics_2.length; _b++) {
|
|
var _c = statistics_2[_b], name = _c.name, value = _c.value;
|
|
sys.write(ts.padRight(name + ":", nameSize + 2) + ts.padLeft(value.toString(), valueSize) + sys.newLine);
|
|
}
|
|
}
|
|
function reportStatisticalValue(name, value) {
|
|
statistics.push({ name: name, value: value });
|
|
}
|
|
function reportCountStatistic(name, count) {
|
|
reportStatisticalValue(name, "" + count);
|
|
}
|
|
function reportTimeStatistic(name, time) {
|
|
reportStatisticalValue(name, (time / 1000).toFixed(2) + "s");
|
|
}
|
|
}
|
|
function writeConfigFile(sys, reportDiagnostic, options, fileNames) {
|
|
var currentDirectory = sys.getCurrentDirectory();
|
|
var file = ts.normalizePath(ts.combinePaths(currentDirectory, "tsconfig.json"));
|
|
if (sys.fileExists(file)) {
|
|
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.A_tsconfig_json_file_is_already_defined_at_Colon_0, file));
|
|
}
|
|
else {
|
|
sys.writeFile(file, ts.generateTSConfig(options, fileNames, sys.newLine));
|
|
var output = __spreadArray([sys.newLine], getHeader(sys, "Created a new tsconfig.json with:"), true);
|
|
output.push(ts.getCompilerOptionsDiffValue(options, sys.newLine) + sys.newLine + sys.newLine);
|
|
output.push("You can learn more at https://aka.ms/tsconfig" + sys.newLine);
|
|
for (var _i = 0, output_4 = output; _i < output_4.length; _i++) {
|
|
var line = output_4[_i];
|
|
sys.write(line);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
})(ts || (ts = {}));
|
|
// This file actually uses arguments passed on commandline and executes it
|
|
// enable deprecation logging
|
|
ts.Debug.loggingHost = {
|
|
log: function (_level, s) {
|
|
ts.sys.write("".concat(s || "").concat(ts.sys.newLine));
|
|
}
|
|
};
|
|
if (ts.Debug.isDebugging) {
|
|
ts.Debug.enableDebugInfo();
|
|
}
|
|
if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) {
|
|
ts.sys.tryEnableSourceMapsForHost();
|
|
}
|
|
if (ts.sys.setBlocking) {
|
|
ts.sys.setBlocking();
|
|
}
|
|
ts.executeCommandLine(ts.sys, ts.noop, ts.sys.args);
|