Created
May 3, 2016 11:39
-
-
Save myitcv/fc5af13e042159345a3226147c24e415 to your computer and use it in GitHub Desktop.
TypeScript strictNullCheck loop analysis
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#0 tsc.js:18416:17 | |
#1 tsc.js:18363:36 | |
#2 tsc.js:18391:28 | |
#3 tsc.js:18356:36 | |
#4 tsc.js:18421:25 | |
#5 tsc.js:18363:36 | |
#6 tsc.js:18391:28 | |
#7 tsc.js:18356:36 | |
#8 tsc.js:18421:25 | |
#9 tsc.js:18363:36 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#0 tsc.js:18575:17 | |
#1 tsc.js:18392:32 | |
#2 tsc.js:18356:36 | |
#3 tsc.js:18421:25 | |
#4 tsc.js:18363:36 | |
#5 tsc.js:18391:28 | |
#6 tsc.js:18356:36 | |
#7 tsc.js:18421:25 | |
#8 tsc.js:18363:36 | |
#9 tsc.js:18391:28 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#0 tsc.js:18346:24 | |
#1 tsc.js:18421:25 | |
#2 tsc.js:18363:36 | |
#3 tsc.js:18391:28 | |
#4 tsc.js:18356:36 | |
#5 tsc.js:18421:25 | |
#6 tsc.js:18363:36 | |
#7 tsc.js:18391:28 | |
#8 tsc.js:18356:36 | |
#9 tsc.js:18421:25 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#0 tsc.js:18391:17 | |
#1 tsc.js:18356:36 | |
#2 tsc.js:18421:25 | |
#3 tsc.js:18363:36 | |
#4 tsc.js:18391:28 | |
#5 tsc.js:18356:36 | |
#6 tsc.js:18421:25 | |
#7 tsc.js:18363:36 | |
#8 tsc.js:18391:28 | |
#9 tsc.js:18356:36 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#0 tsc.js:18461:17 | |
#1 tsc.js:18447:36 | |
#2 tsc.js:18585:32 | |
#3 tsc.js:18392:32 | |
#4 tsc.js:18356:36 | |
#5 tsc.js:18421:25 | |
#6 tsc.js:18363:36 | |
#7 tsc.js:18391:28 | |
#8 tsc.js:18356:36 | |
#9 tsc.js:18421:25 |
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! ***************************************************************************** | |
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. | |
***************************************************************************** */ | |
var ts; | |
(function (ts) { | |
var OperationCanceledException = (function () { | |
function OperationCanceledException() { | |
} | |
return OperationCanceledException; | |
}()); | |
ts.OperationCanceledException = OperationCanceledException; | |
(function (ExitStatus) { | |
ExitStatus[ExitStatus["Success"] = 0] = "Success"; | |
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; | |
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; | |
})(ts.ExitStatus || (ts.ExitStatus = {})); | |
var ExitStatus = ts.ExitStatus; | |
(function (TypeReferenceSerializationKind) { | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidType"] = 2] = "VoidType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 5] = "BooleanType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 6] = "ArrayLikeType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 8] = "TypeWithCallSignature"; | |
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 9] = "ObjectType"; | |
})(ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {})); | |
var TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind; | |
(function (DiagnosticCategory) { | |
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; | |
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; | |
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; | |
})(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); | |
var DiagnosticCategory = ts.DiagnosticCategory; | |
(function (ModuleResolutionKind) { | |
ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic"; | |
ModuleResolutionKind[ModuleResolutionKind["NodeJs"] = 2] = "NodeJs"; | |
})(ts.ModuleResolutionKind || (ts.ModuleResolutionKind = {})); | |
var ModuleResolutionKind = ts.ModuleResolutionKind; | |
(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["ES6"] = 5] = "ES6"; | |
ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015"; | |
})(ts.ModuleKind || (ts.ModuleKind = {})); | |
var ModuleKind = ts.ModuleKind; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
function createFileMap(keyMapper) { | |
var files = {}; | |
return { | |
get: get, | |
set: set, | |
contains: contains, | |
remove: remove, | |
forEachValue: forEachValueInMap, | |
clear: clear | |
}; | |
function forEachValueInMap(f) { | |
for (var key in files) { | |
f(key, files[key]); | |
} | |
} | |
function get(path) { | |
return files[toKey(path)]; | |
} | |
function set(path, value) { | |
files[toKey(path)] = value; | |
} | |
function contains(path) { | |
return hasProperty(files, toKey(path)); | |
} | |
function remove(path) { | |
var key = toKey(path); | |
delete files[key]; | |
} | |
function clear() { | |
files = {}; | |
} | |
function toKey(path) { | |
return keyMapper ? keyMapper(path) : path; | |
} | |
} | |
ts.createFileMap = createFileMap; | |
function toPath(fileName, basePath, getCanonicalFileName) { | |
var nonCanonicalizedPath = isRootedDiskPath(fileName) | |
? normalizePath(fileName) | |
: getNormalizedAbsolutePath(fileName, basePath); | |
return getCanonicalFileName(nonCanonicalizedPath); | |
} | |
ts.toPath = toPath; | |
function forEach(array, callback) { | |
if (array) { | |
for (var i = 0, len = array.length; i < len; i++) { | |
var result = callback(array[i], i); | |
if (result) { | |
return result; | |
} | |
} | |
} | |
return undefined; | |
} | |
ts.forEach = forEach; | |
function contains(array, value, areEqual) { | |
if (array) { | |
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { | |
var v = array_1[_i]; | |
if (areEqual ? areEqual(v, value) : v === value) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
ts.contains = contains; | |
function indexOf(array, value) { | |
if (array) { | |
for (var i = 0, len = array.length; i < len; i++) { | |
if (array[i] === value) { | |
return i; | |
} | |
} | |
} | |
return -1; | |
} | |
ts.indexOf = indexOf; | |
function countWhere(array, predicate) { | |
var count = 0; | |
if (array) { | |
for (var _i = 0, array_2 = array; _i < array_2.length; _i++) { | |
var v = array_2[_i]; | |
if (predicate(v)) { | |
count++; | |
} | |
} | |
} | |
return count; | |
} | |
ts.countWhere = countWhere; | |
function filter(array, f) { | |
var result; | |
if (array) { | |
result = []; | |
for (var _i = 0, array_3 = array; _i < array_3.length; _i++) { | |
var item = array_3[_i]; | |
if (f(item)) { | |
result.push(item); | |
} | |
} | |
} | |
return result; | |
} | |
ts.filter = filter; | |
function map(array, f) { | |
var result; | |
if (array) { | |
result = []; | |
for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { | |
var v = array_4[_i]; | |
result.push(f(v)); | |
} | |
} | |
return result; | |
} | |
ts.map = map; | |
function concatenate(array1, array2) { | |
if (!array2 || !array2.length) | |
return array1; | |
if (!array1 || !array1.length) | |
return array2; | |
return array1.concat(array2); | |
} | |
ts.concatenate = concatenate; | |
function deduplicate(array, areEqual) { | |
var result; | |
if (array) { | |
result = []; | |
for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { | |
var item = array_5[_i]; | |
if (!contains(result, item, areEqual)) { | |
result.push(item); | |
} | |
} | |
} | |
return result; | |
} | |
ts.deduplicate = deduplicate; | |
function sum(array, prop) { | |
var result = 0; | |
for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { | |
var v = array_6[_i]; | |
result += v[prop]; | |
} | |
return result; | |
} | |
ts.sum = sum; | |
function addRange(to, from) { | |
if (to && from) { | |
for (var _i = 0, from_1 = from; _i < from_1.length; _i++) { | |
var v = from_1[_i]; | |
to.push(v); | |
} | |
} | |
} | |
ts.addRange = addRange; | |
function rangeEquals(array1, array2, pos, end) { | |
while (pos < end) { | |
if (array1[pos] !== array2[pos]) { | |
return false; | |
} | |
pos++; | |
} | |
return true; | |
} | |
ts.rangeEquals = rangeEquals; | |
function lastOrUndefined(array) { | |
if (array.length === 0) { | |
return undefined; | |
} | |
return array[array.length - 1]; | |
} | |
ts.lastOrUndefined = lastOrUndefined; | |
function binarySearch(array, value) { | |
var low = 0; | |
var high = array.length - 1; | |
while (low <= high) { | |
var middle = low + ((high - low) >> 1); | |
var midValue = array[middle]; | |
if (midValue === value) { | |
return middle; | |
} | |
else if (midValue > value) { | |
high = middle - 1; | |
} | |
else { | |
low = middle + 1; | |
} | |
} | |
return ~low; | |
} | |
ts.binarySearch = binarySearch; | |
function reduceLeft(array, f, initial) { | |
if (array) { | |
var count = array.length; | |
if (count > 0) { | |
var pos = 0; | |
var result = void 0; | |
if (arguments.length <= 2) { | |
result = array[pos]; | |
pos++; | |
} | |
else { | |
result = initial; | |
} | |
while (pos < count) { | |
result = f(result, array[pos]); | |
pos++; | |
} | |
return result; | |
} | |
} | |
return initial; | |
} | |
ts.reduceLeft = reduceLeft; | |
function reduceRight(array, f, initial) { | |
if (array) { | |
var pos = array.length - 1; | |
if (pos >= 0) { | |
var result = void 0; | |
if (arguments.length <= 2) { | |
result = array[pos]; | |
pos--; | |
} | |
else { | |
result = initial; | |
} | |
while (pos >= 0) { | |
result = f(result, array[pos]); | |
pos--; | |
} | |
return result; | |
} | |
} | |
return initial; | |
} | |
ts.reduceRight = reduceRight; | |
var hasOwnProperty = Object.prototype.hasOwnProperty; | |
function hasProperty(map, key) { | |
return hasOwnProperty.call(map, key); | |
} | |
ts.hasProperty = hasProperty; | |
function getKeys(map) { | |
var keys = []; | |
for (var key in map) { | |
keys.push(key); | |
} | |
return keys; | |
} | |
ts.getKeys = getKeys; | |
function getProperty(map, key) { | |
return hasOwnProperty.call(map, key) ? map[key] : undefined; | |
} | |
ts.getProperty = getProperty; | |
function isEmpty(map) { | |
for (var id in map) { | |
if (hasProperty(map, id)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
ts.isEmpty = isEmpty; | |
function clone(object) { | |
var result = {}; | |
for (var id in object) { | |
result[id] = object[id]; | |
} | |
return result; | |
} | |
ts.clone = clone; | |
function extend(first, second) { | |
var result = {}; | |
for (var id in first) { | |
result[id] = first[id]; | |
} | |
for (var id in second) { | |
if (!hasProperty(result, id)) { | |
result[id] = second[id]; | |
} | |
} | |
return result; | |
} | |
ts.extend = extend; | |
function forEachValue(map, callback) { | |
var result; | |
for (var id in map) { | |
if (result = callback(map[id])) | |
break; | |
} | |
return result; | |
} | |
ts.forEachValue = forEachValue; | |
function forEachKey(map, callback) { | |
var result; | |
for (var id in map) { | |
if (result = callback(id)) | |
break; | |
} | |
return result; | |
} | |
ts.forEachKey = forEachKey; | |
function lookUp(map, key) { | |
return hasProperty(map, key) ? map[key] : undefined; | |
} | |
ts.lookUp = lookUp; | |
function copyMap(source, target) { | |
for (var p in source) { | |
target[p] = source[p]; | |
} | |
} | |
ts.copyMap = copyMap; | |
function arrayToMap(array, makeKey) { | |
var result = {}; | |
forEach(array, function (value) { | |
result[makeKey(value)] = value; | |
}); | |
return result; | |
} | |
ts.arrayToMap = arrayToMap; | |
function reduceProperties(map, callback, initial) { | |
var result = initial; | |
if (map) { | |
for (var key in map) { | |
if (hasProperty(map, key)) { | |
result = callback(result, map[key], String(key)); | |
} | |
} | |
} | |
return result; | |
} | |
ts.reduceProperties = reduceProperties; | |
function isArray(value) { | |
return Array.isArray ? Array.isArray(value) : value instanceof Array; | |
} | |
ts.isArray = isArray; | |
function memoize(callback) { | |
var value; | |
return function () { | |
if (callback) { | |
value = callback(); | |
callback = undefined; | |
} | |
return value; | |
}; | |
} | |
ts.memoize = memoize; | |
function formatStringFromArgs(text, args, baseIndex) { | |
baseIndex = baseIndex || 0; | |
return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; }); | |
} | |
ts.localizedDiagnosticMessages = undefined; | |
function getLocaleSpecificMessage(message) { | |
return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message.key] | |
? ts.localizedDiagnosticMessages[message.key] | |
: message.message; | |
} | |
ts.getLocaleSpecificMessage = getLocaleSpecificMessage; | |
function createFileDiagnostic(file, start, length, message) { | |
var end = start + length; | |
Debug.assert(start >= 0, "start must be non-negative, is " + start); | |
Debug.assert(length >= 0, "length must be non-negative, is " + length); | |
if (file) { | |
Debug.assert(start <= file.text.length, "start must be within the bounds of the file. " + start + " > " + file.text.length); | |
Debug.assert(end <= file.text.length, "end must be the bounds of the file. " + end + " > " + file.text.length); | |
} | |
var text = getLocaleSpecificMessage(message); | |
if (arguments.length > 4) { | |
text = formatStringFromArgs(text, arguments, 4); | |
} | |
return { | |
file: file, | |
start: start, | |
length: length, | |
messageText: text, | |
category: message.category, | |
code: message.code | |
}; | |
} | |
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 | |
}; | |
} | |
ts.createCompilerDiagnostic = createCompilerDiagnostic; | |
function chainDiagnosticMessages(details, message) { | |
var text = getLocaleSpecificMessage(message); | |
if (arguments.length > 2) { | |
text = formatStringFromArgs(text, arguments, 2); | |
} | |
return { | |
messageText: text, | |
category: message.category, | |
code: message.code, | |
next: details | |
}; | |
} | |
ts.chainDiagnosticMessages = chainDiagnosticMessages; | |
function concatenateDiagnosticMessageChains(headChain, tailChain) { | |
var lastChain = headChain; | |
while (lastChain.next) { | |
lastChain = lastChain.next; | |
} | |
lastChain.next = tailChain; | |
return headChain; | |
} | |
ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains; | |
function compareValues(a, b) { | |
if (a === b) | |
return 0; | |
if (a === undefined) | |
return -1; | |
if (b === undefined) | |
return 1; | |
return a < b ? -1 : 1; | |
} | |
ts.compareValues = compareValues; | |
function getDiagnosticFileName(diagnostic) { | |
return diagnostic.file ? diagnostic.file.fileName : undefined; | |
} | |
function compareDiagnostics(d1, d2) { | |
return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) || | |
compareValues(d1.start, d2.start) || | |
compareValues(d1.length, d2.length) || | |
compareValues(d1.code, d2.code) || | |
compareMessageText(d1.messageText, d2.messageText) || | |
0; | |
} | |
ts.compareDiagnostics = compareDiagnostics; | |
function compareMessageText(text1, text2) { | |
while (text1 && text2) { | |
var string1 = typeof text1 === "string" ? text1 : text1.messageText; | |
var string2 = typeof text2 === "string" ? text2 : text2.messageText; | |
var res = compareValues(string1, string2); | |
if (res) { | |
return res; | |
} | |
text1 = typeof text1 === "string" ? undefined : text1.next; | |
text2 = typeof text2 === "string" ? undefined : text2.next; | |
} | |
if (!text1 && !text2) { | |
return 0; | |
} | |
return text1 ? 1 : -1; | |
} | |
function sortAndDeduplicateDiagnostics(diagnostics) { | |
return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); | |
} | |
ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; | |
function deduplicateSortedDiagnostics(diagnostics) { | |
if (diagnostics.length < 2) { | |
return diagnostics; | |
} | |
var newDiagnostics = [diagnostics[0]]; | |
var previousDiagnostic = diagnostics[0]; | |
for (var i = 1; i < diagnostics.length; i++) { | |
var currentDiagnostic = diagnostics[i]; | |
var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; | |
if (!isDupe) { | |
newDiagnostics.push(currentDiagnostic); | |
previousDiagnostic = currentDiagnostic; | |
} | |
} | |
return newDiagnostics; | |
} | |
ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics; | |
function normalizeSlashes(path) { | |
return path.replace(/\\/g, "/"); | |
} | |
ts.normalizeSlashes = normalizeSlashes; | |
function getRootLength(path) { | |
if (path.charCodeAt(0) === 47) { | |
if (path.charCodeAt(1) !== 47) | |
return 1; | |
var p1 = path.indexOf("/", 2); | |
if (p1 < 0) | |
return 2; | |
var p2 = path.indexOf("/", p1 + 1); | |
if (p2 < 0) | |
return p1 + 1; | |
return p2 + 1; | |
} | |
if (path.charCodeAt(1) === 58) { | |
if (path.charCodeAt(2) === 47) | |
return 3; | |
return 2; | |
} | |
if (path.lastIndexOf("file:///", 0) === 0) { | |
return "file:///".length; | |
} | |
var idx = path.indexOf("://"); | |
if (idx !== -1) { | |
return idx + "://".length; | |
} | |
return 0; | |
} | |
ts.getRootLength = getRootLength; | |
ts.directorySeparator = "/"; | |
function getNormalizedParts(normalizedSlashedPath, rootLength) { | |
var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator); | |
var normalized = []; | |
for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) { | |
var part = parts_1[_i]; | |
if (part !== ".") { | |
if (part === ".." && normalized.length > 0 && lastOrUndefined(normalized) !== "..") { | |
normalized.pop(); | |
} | |
else { | |
if (part) { | |
normalized.push(part); | |
} | |
} | |
} | |
} | |
return normalized; | |
} | |
function normalizePath(path) { | |
path = normalizeSlashes(path); | |
var rootLength = getRootLength(path); | |
var normalized = getNormalizedParts(path, rootLength); | |
return path.substr(0, rootLength) + normalized.join(ts.directorySeparator); | |
} | |
ts.normalizePath = normalizePath; | |
function getDirectoryPath(path) { | |
return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator))); | |
} | |
ts.getDirectoryPath = getDirectoryPath; | |
function isUrl(path) { | |
return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1; | |
} | |
ts.isUrl = isUrl; | |
function isRootedDiskPath(path) { | |
return getRootLength(path) !== 0; | |
} | |
ts.isRootedDiskPath = isRootedDiskPath; | |
function normalizedPathComponents(path, rootLength) { | |
var normalizedParts = getNormalizedParts(path, rootLength); | |
return [path.substr(0, rootLength)].concat(normalizedParts); | |
} | |
function getNormalizedPathComponents(path, currentDirectory) { | |
path = normalizeSlashes(path); | |
var rootLength = getRootLength(path); | |
if (rootLength === 0) { | |
path = combinePaths(normalizeSlashes(currentDirectory), path); | |
rootLength = getRootLength(path); | |
} | |
return normalizedPathComponents(path, rootLength); | |
} | |
ts.getNormalizedPathComponents = getNormalizedPathComponents; | |
function getNormalizedAbsolutePath(fileName, currentDirectory) { | |
return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); | |
} | |
ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; | |
function getNormalizedPathFromPathComponents(pathComponents) { | |
if (pathComponents && pathComponents.length) { | |
return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator); | |
} | |
} | |
ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents; | |
function getNormalizedPathComponentsOfUrl(url) { | |
var urlLength = url.length; | |
var rootLength = url.indexOf("://") + "://".length; | |
while (rootLength < urlLength) { | |
if (url.charCodeAt(rootLength) === 47) { | |
rootLength++; | |
} | |
else { | |
break; | |
} | |
} | |
if (rootLength === urlLength) { | |
return [url]; | |
} | |
var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength); | |
if (indexOfNextSlash !== -1) { | |
rootLength = indexOfNextSlash + 1; | |
return normalizedPathComponents(url, rootLength); | |
} | |
else { | |
return [url + ts.directorySeparator]; | |
} | |
} | |
function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) { | |
if (isUrl(pathOrUrl)) { | |
return getNormalizedPathComponentsOfUrl(pathOrUrl); | |
} | |
else { | |
return getNormalizedPathComponents(pathOrUrl, currentDirectory); | |
} | |
} | |
function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { | |
var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); | |
var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); | |
if (directoryComponents.length > 1 && lastOrUndefined(directoryComponents) === "") { | |
directoryComponents.length--; | |
} | |
var joinStartIndex; | |
for (joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { | |
if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { | |
break; | |
} | |
} | |
if (joinStartIndex) { | |
var relativePath = ""; | |
var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length); | |
for (; joinStartIndex < directoryComponents.length; joinStartIndex++) { | |
if (directoryComponents[joinStartIndex] !== "") { | |
relativePath = relativePath + ".." + ts.directorySeparator; | |
} | |
} | |
return relativePath + relativePathComponents.join(ts.directorySeparator); | |
} | |
var absolutePath = getNormalizedPathFromPathComponents(pathComponents); | |
if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) { | |
absolutePath = "file:///" + absolutePath; | |
} | |
return absolutePath; | |
} | |
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; | |
function getBaseFileName(path) { | |
if (path === undefined) { | |
return undefined; | |
} | |
var i = path.lastIndexOf(ts.directorySeparator); | |
return i < 0 ? path : path.substring(i + 1); | |
} | |
ts.getBaseFileName = getBaseFileName; | |
function combinePaths(path1, path2) { | |
if (!(path1 && path1.length)) | |
return path2; | |
if (!(path2 && path2.length)) | |
return path1; | |
if (getRootLength(path2) !== 0) | |
return path2; | |
if (path1.charAt(path1.length - 1) === ts.directorySeparator) | |
return path1 + path2; | |
return path1 + ts.directorySeparator + path2; | |
} | |
ts.combinePaths = combinePaths; | |
function fileExtensionIs(path, extension) { | |
var pathLen = path.length; | |
var extLen = extension.length; | |
return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; | |
} | |
ts.fileExtensionIs = fileExtensionIs; | |
function ensureScriptKind(fileName, scriptKind) { | |
return (scriptKind || getScriptKindFromFileName(fileName)) || 3; | |
} | |
ts.ensureScriptKind = ensureScriptKind; | |
function getScriptKindFromFileName(fileName) { | |
var ext = fileName.substr(fileName.lastIndexOf(".")); | |
switch (ext.toLowerCase()) { | |
case ".js": | |
return 1; | |
case ".jsx": | |
return 2; | |
case ".ts": | |
return 3; | |
case ".tsx": | |
return 4; | |
default: | |
return 0; | |
} | |
} | |
ts.getScriptKindFromFileName = getScriptKindFromFileName; | |
ts.supportedTypeScriptExtensions = [".ts", ".tsx", ".d.ts"]; | |
ts.supportedJavascriptExtensions = [".js", ".jsx"]; | |
var allSupportedExtensions = ts.supportedTypeScriptExtensions.concat(ts.supportedJavascriptExtensions); | |
function getSupportedExtensions(options) { | |
return options && options.allowJs ? allSupportedExtensions : ts.supportedTypeScriptExtensions; | |
} | |
ts.getSupportedExtensions = getSupportedExtensions; | |
function isSupportedSourceFileName(fileName, compilerOptions) { | |
if (!fileName) { | |
return false; | |
} | |
for (var _i = 0, _a = getSupportedExtensions(compilerOptions); _i < _a.length; _i++) { | |
var extension = _a[_i]; | |
if (fileExtensionIs(fileName, extension)) { | |
return true; | |
} | |
} | |
return false; | |
} | |
ts.isSupportedSourceFileName = isSupportedSourceFileName; | |
var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; | |
function removeFileExtension(path) { | |
for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { | |
var ext = extensionsToRemove_1[_i]; | |
if (fileExtensionIs(path, ext)) { | |
return path.substr(0, path.length - ext.length); | |
} | |
} | |
return path; | |
} | |
ts.removeFileExtension = removeFileExtension; | |
function Symbol(flags, name) { | |
this.flags = flags; | |
this.name = name; | |
this.declarations = undefined; | |
} | |
function Type(checker, flags) { | |
this.flags = flags; | |
} | |
function Signature(checker) { | |
} | |
function Node(kind, pos, end) { | |
this.kind = kind; | |
this.pos = pos; | |
this.end = end; | |
this.flags = 0; | |
this.parent = undefined; | |
} | |
ts.objectAllocator = { | |
getNodeConstructor: function () { return Node; }, | |
getSourceFileConstructor: function () { return Node; }, | |
getSymbolConstructor: function () { return Symbol; }, | |
getTypeConstructor: function () { return Type; }, | |
getSignatureConstructor: function () { return Signature; } | |
}; | |
var Debug; | |
(function (Debug) { | |
var currentAssertionLevel = 0; | |
function shouldAssert(level) { | |
return currentAssertionLevel >= level; | |
} | |
Debug.shouldAssert = shouldAssert; | |
function assert(expression, message, verboseDebugInfo) { | |
if (!expression) { | |
var verboseDebugString = ""; | |
if (verboseDebugInfo) { | |
verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo(); | |
} | |
debugger; | |
throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString); | |
} | |
} | |
Debug.assert = assert; | |
function fail(message) { | |
Debug.assert(false, message); | |
} | |
Debug.fail = fail; | |
})(Debug = ts.Debug || (ts.Debug = {})); | |
function copyListRemovingItem(item, list) { | |
var copiedList = []; | |
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { | |
var e = list_1[_i]; | |
if (e !== item) { | |
copiedList.push(e); | |
} | |
} | |
return copiedList; | |
} | |
ts.copyListRemovingItem = copyListRemovingItem; | |
function createGetCanonicalFileName(useCaseSensitivefileNames) { | |
return useCaseSensitivefileNames | |
? (function (fileName) { return fileName; }) | |
: (function (fileName) { return fileName.toLowerCase(); }); | |
} | |
ts.createGetCanonicalFileName = createGetCanonicalFileName; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
ts.sys = (function () { | |
function getWScriptSystem() { | |
var fso = new ActiveXObject("Scripting.FileSystemObject"); | |
var fileStream = new ActiveXObject("ADODB.Stream"); | |
fileStream.Type = 2; | |
var binaryStream = new ActiveXObject("ADODB.Stream"); | |
binaryStream.Type = 1; | |
var args = []; | |
for (var i = 0; i < WScript.Arguments.length; i++) { | |
args[i] = WScript.Arguments.Item(i); | |
} | |
function readFile(fileName, encoding) { | |
if (!fso.FileExists(fileName)) { | |
return undefined; | |
} | |
fileStream.Open(); | |
try { | |
if (encoding) { | |
fileStream.Charset = encoding; | |
fileStream.LoadFromFile(fileName); | |
} | |
else { | |
fileStream.Charset = "x-ansi"; | |
fileStream.LoadFromFile(fileName); | |
var bom = fileStream.ReadText(2) || ""; | |
fileStream.Position = 0; | |
fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; | |
} | |
return fileStream.ReadText(); | |
} | |
catch (e) { | |
throw e; | |
} | |
finally { | |
fileStream.Close(); | |
} | |
} | |
function writeFile(fileName, data, writeByteOrderMark) { | |
fileStream.Open(); | |
binaryStream.Open(); | |
try { | |
fileStream.Charset = "utf-8"; | |
fileStream.WriteText(data); | |
if (writeByteOrderMark) { | |
fileStream.Position = 0; | |
} | |
else { | |
fileStream.Position = 3; | |
} | |
fileStream.CopyTo(binaryStream); | |
binaryStream.SaveToFile(fileName, 2); | |
} | |
finally { | |
binaryStream.Close(); | |
fileStream.Close(); | |
} | |
} | |
function getCanonicalPath(path) { | |
return path.toLowerCase(); | |
} | |
function getNames(collection) { | |
var result = []; | |
for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { | |
result.push(e.item().Name); | |
} | |
return result.sort(); | |
} | |
function readDirectory(path, extension, exclude) { | |
var result = []; | |
exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); }); | |
visitDirectory(path); | |
return result; | |
function visitDirectory(path) { | |
var folder = fso.GetFolder(path || "."); | |
var files = getNames(folder.files); | |
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { | |
var current = files_1[_i]; | |
var name_1 = ts.combinePaths(path, current); | |
if ((!extension || ts.fileExtensionIs(name_1, extension)) && !ts.contains(exclude, getCanonicalPath(name_1))) { | |
result.push(name_1); | |
} | |
} | |
var subfolders = getNames(folder.subfolders); | |
for (var _a = 0, subfolders_1 = subfolders; _a < subfolders_1.length; _a++) { | |
var current = subfolders_1[_a]; | |
var name_2 = ts.combinePaths(path, current); | |
if (!ts.contains(exclude, getCanonicalPath(name_2))) { | |
visitDirectory(name_2); | |
} | |
} | |
} | |
} | |
return { | |
args: args, | |
newLine: "\r\n", | |
useCaseSensitiveFileNames: false, | |
write: function (s) { | |
WScript.StdOut.Write(s); | |
}, | |
readFile: readFile, | |
writeFile: writeFile, | |
resolvePath: function (path) { | |
return fso.GetAbsolutePathName(path); | |
}, | |
fileExists: function (path) { | |
return fso.FileExists(path); | |
}, | |
directoryExists: function (path) { | |
return fso.FolderExists(path); | |
}, | |
createDirectory: function (directoryName) { | |
if (!this.directoryExists(directoryName)) { | |
fso.CreateFolder(directoryName); | |
} | |
}, | |
getExecutingFilePath: function () { | |
return WScript.ScriptFullName; | |
}, | |
getCurrentDirectory: function () { | |
return new ActiveXObject("WScript.Shell").CurrentDirectory; | |
}, | |
readDirectory: readDirectory, | |
exit: function (exitCode) { | |
try { | |
WScript.Quit(exitCode); | |
} | |
catch (e) { | |
} | |
} | |
}; | |
} | |
function getNodeSystem() { | |
var _fs = require("fs"); | |
var _path = require("path"); | |
var _os = require("os"); | |
var _crypto = require("crypto"); | |
var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; | |
function createWatchedFileSet() { | |
var dirWatchers = {}; | |
var fileWatcherCallbacks = {}; | |
return { addFile: addFile, removeFile: removeFile }; | |
function reduceDirWatcherRefCountForFile(fileName) { | |
var dirName = ts.getDirectoryPath(fileName); | |
if (ts.hasProperty(dirWatchers, dirName)) { | |
var watcher = dirWatchers[dirName]; | |
watcher.referenceCount -= 1; | |
if (watcher.referenceCount <= 0) { | |
watcher.close(); | |
delete dirWatchers[dirName]; | |
} | |
} | |
} | |
function addDirWatcher(dirPath) { | |
if (ts.hasProperty(dirWatchers, dirPath)) { | |
var watcher_1 = dirWatchers[dirPath]; | |
watcher_1.referenceCount += 1; | |
return; | |
} | |
var watcher = _fs.watch(dirPath, { persistent: true }, function (eventName, relativeFileName) { return fileEventHandler(eventName, relativeFileName, dirPath); }); | |
watcher.referenceCount = 1; | |
dirWatchers[dirPath] = watcher; | |
return; | |
} | |
function addFileWatcherCallback(filePath, callback) { | |
if (ts.hasProperty(fileWatcherCallbacks, filePath)) { | |
fileWatcherCallbacks[filePath].push(callback); | |
} | |
else { | |
fileWatcherCallbacks[filePath] = [callback]; | |
} | |
} | |
function addFile(fileName, callback) { | |
addFileWatcherCallback(fileName, callback); | |
addDirWatcher(ts.getDirectoryPath(fileName)); | |
return { fileName: fileName, callback: callback }; | |
} | |
function removeFile(watchedFile) { | |
removeFileWatcherCallback(watchedFile.fileName, watchedFile.callback); | |
reduceDirWatcherRefCountForFile(watchedFile.fileName); | |
} | |
function removeFileWatcherCallback(filePath, callback) { | |
if (ts.hasProperty(fileWatcherCallbacks, filePath)) { | |
var newCallbacks = ts.copyListRemovingItem(callback, fileWatcherCallbacks[filePath]); | |
if (newCallbacks.length === 0) { | |
delete fileWatcherCallbacks[filePath]; | |
} | |
else { | |
fileWatcherCallbacks[filePath] = newCallbacks; | |
} | |
} | |
} | |
function fileEventHandler(eventName, relativeFileName, baseDirPath) { | |
var fileName = typeof relativeFileName !== "string" | |
? undefined | |
: ts.getNormalizedAbsolutePath(relativeFileName, baseDirPath); | |
if ((eventName === "change" || eventName === "rename") && ts.hasProperty(fileWatcherCallbacks, fileName)) { | |
for (var _i = 0, _a = fileWatcherCallbacks[fileName]; _i < _a.length; _i++) { | |
var fileCallback = _a[_i]; | |
fileCallback(fileName); | |
} | |
} | |
} | |
} | |
var watchedFileSet = createWatchedFileSet(); | |
function isNode4OrLater() { | |
return parseInt(process.version.charAt(1)) >= 4; | |
} | |
var platform = _os.platform(); | |
var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; | |
function readFile(fileName, encoding) { | |
if (!fileExists(fileName)) { | |
return undefined; | |
} | |
var buffer = _fs.readFileSync(fileName); | |
var len = buffer.length; | |
if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { | |
len &= ~1; | |
for (var i = 0; i < len; i += 2) { | |
var temp = buffer[i]; | |
buffer[i] = buffer[i + 1]; | |
buffer[i + 1] = temp; | |
} | |
return buffer.toString("utf16le", 2); | |
} | |
if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { | |
return buffer.toString("utf16le", 2); | |
} | |
if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { | |
return buffer.toString("utf8", 3); | |
} | |
return buffer.toString("utf8"); | |
} | |
function writeFile(fileName, data, writeByteOrderMark) { | |
if (writeByteOrderMark) { | |
data = "\uFEFF" + data; | |
} | |
var fd; | |
try { | |
fd = _fs.openSync(fileName, "w"); | |
_fs.writeSync(fd, data, undefined, "utf8"); | |
} | |
finally { | |
if (fd !== undefined) { | |
_fs.closeSync(fd); | |
} | |
} | |
} | |
function getCanonicalPath(path) { | |
return useCaseSensitiveFileNames ? path : path.toLowerCase(); | |
} | |
function fileSystemEntryExists(path, entryKind) { | |
try { | |
var stat = _fs.statSync(path); | |
switch (entryKind) { | |
case 0: return stat.isFile(); | |
case 1: return stat.isDirectory(); | |
} | |
} | |
catch (e) { | |
return false; | |
} | |
} | |
function fileExists(path) { | |
return fileSystemEntryExists(path, 0); | |
} | |
function directoryExists(path) { | |
return fileSystemEntryExists(path, 1); | |
} | |
function readDirectory(path, extension, exclude) { | |
var result = []; | |
exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); }); | |
visitDirectory(path); | |
return result; | |
function visitDirectory(path) { | |
var files = _fs.readdirSync(path || ".").sort(); | |
var directories = []; | |
for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { | |
var current = files_2[_i]; | |
if (current === "." || current === "..") { | |
continue; | |
} | |
var name_3 = ts.combinePaths(path, current); | |
if (!ts.contains(exclude, getCanonicalPath(name_3))) { | |
var stat = _fs.statSync(name_3); | |
if (stat.isFile()) { | |
if (!extension || ts.fileExtensionIs(name_3, extension)) { | |
result.push(name_3); | |
} | |
} | |
else if (stat.isDirectory()) { | |
directories.push(name_3); | |
} | |
} | |
} | |
for (var _a = 0, directories_1 = directories; _a < directories_1.length; _a++) { | |
var current = directories_1[_a]; | |
visitDirectory(current); | |
} | |
} | |
} | |
return { | |
args: process.argv.slice(2), | |
newLine: _os.EOL, | |
useCaseSensitiveFileNames: useCaseSensitiveFileNames, | |
write: function (s) { | |
process.stdout.write(s); | |
}, | |
readFile: readFile, | |
writeFile: writeFile, | |
watchFile: function (fileName, callback) { | |
if (useNonPollingWatchers) { | |
var watchedFile_1 = watchedFileSet.addFile(fileName, callback); | |
return { | |
close: function () { return watchedFileSet.removeFile(watchedFile_1); } | |
}; | |
} | |
else { | |
_fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); | |
return { | |
close: function () { return _fs.unwatchFile(fileName, fileChanged); } | |
}; | |
} | |
function fileChanged(curr, prev) { | |
if (+curr.mtime <= +prev.mtime) { | |
return; | |
} | |
callback(fileName); | |
} | |
}, | |
watchDirectory: function (directoryName, callback, recursive) { | |
var options; | |
if (isNode4OrLater() && (process.platform === "win32" || process.platform === "darwin")) { | |
options = { persistent: true, recursive: !!recursive }; | |
} | |
else { | |
options = { persistent: true }; | |
} | |
return _fs.watch(directoryName, options, function (eventName, relativeFileName) { | |
if (eventName === "rename") { | |
callback(!relativeFileName ? relativeFileName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName))); | |
} | |
; | |
}); | |
}, | |
resolvePath: function (path) { | |
return _path.resolve(path); | |
}, | |
fileExists: fileExists, | |
directoryExists: directoryExists, | |
createDirectory: function (directoryName) { | |
if (!this.directoryExists(directoryName)) { | |
_fs.mkdirSync(directoryName); | |
} | |
}, | |
getExecutingFilePath: function () { | |
return __filename; | |
}, | |
getCurrentDirectory: function () { | |
return process.cwd(); | |
}, | |
readDirectory: readDirectory, | |
getModifiedTime: function (path) { | |
try { | |
return _fs.statSync(path).mtime; | |
} | |
catch (e) { | |
return undefined; | |
} | |
}, | |
createHash: function (data) { | |
var hash = _crypto.createHash("md5"); | |
hash.update(data); | |
return hash.digest("hex"); | |
}, | |
getMemoryUsage: function () { | |
if (global.gc) { | |
global.gc(); | |
} | |
return process.memoryUsage().heapUsed; | |
}, | |
exit: function (exitCode) { | |
process.exit(exitCode); | |
} | |
}; | |
} | |
function getChakraSystem() { | |
return { | |
newLine: ChakraHost.newLine || "\r\n", | |
args: ChakraHost.args, | |
useCaseSensitiveFileNames: !!ChakraHost.useCaseSensitiveFileNames, | |
write: ChakraHost.echo, | |
readFile: function (path, encoding) { | |
return ChakraHost.readFile(path); | |
}, | |
writeFile: function (path, data, writeByteOrderMark) { | |
if (writeByteOrderMark) { | |
data = "\uFEFF" + data; | |
} | |
ChakraHost.writeFile(path, data); | |
}, | |
resolvePath: ChakraHost.resolvePath, | |
fileExists: ChakraHost.fileExists, | |
directoryExists: ChakraHost.directoryExists, | |
createDirectory: ChakraHost.createDirectory, | |
getExecutingFilePath: function () { return ChakraHost.executingFile; }, | |
getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, | |
readDirectory: ChakraHost.readDirectory, | |
exit: ChakraHost.quit | |
}; | |
} | |
if (typeof ChakraHost !== "undefined") { | |
return getChakraSystem(); | |
} | |
else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { | |
return getWScriptSystem(); | |
} | |
else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { | |
return getNodeSystem(); | |
} | |
else { | |
return undefined; | |
} | |
})(); | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
ts.Diagnostics = { | |
Unterminated_string_literal: { code: 1002, category: ts.DiagnosticCategory.Error, key: "Unterminated_string_literal_1002", message: "Unterminated string literal." }, | |
Identifier_expected: { code: 1003, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_1003", message: "Identifier expected." }, | |
_0_expected: { code: 1005, category: ts.DiagnosticCategory.Error, key: "_0_expected_1005", message: "'{0}' expected." }, | |
A_file_cannot_have_a_reference_to_itself: { code: 1006, category: ts.DiagnosticCategory.Error, key: "A_file_cannot_have_a_reference_to_itself_1006", message: "A file cannot have a reference to itself." }, | |
Trailing_comma_not_allowed: { code: 1009, category: ts.DiagnosticCategory.Error, key: "Trailing_comma_not_allowed_1009", message: "Trailing comma not allowed." }, | |
Asterisk_Slash_expected: { code: 1010, category: ts.DiagnosticCategory.Error, key: "Asterisk_Slash_expected_1010", message: "'*/' expected." }, | |
Unexpected_token: { code: 1012, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_1012", message: "Unexpected token." }, | |
A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_must_be_last_in_a_parameter_list_1014", message: "A rest parameter must be last in a parameter list." }, | |
Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: ts.DiagnosticCategory.Error, key: "Parameter_cannot_have_question_mark_and_initializer_1015", message: "Parameter cannot have question mark and initializer." }, | |
A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: ts.DiagnosticCategory.Error, key: "A_required_parameter_cannot_follow_an_optional_parameter_1016", message: "A required parameter cannot follow an optional parameter." }, | |
An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: ts.DiagnosticCategory.Error, key: "An_index_signature_cannot_have_a_rest_parameter_1017", message: "An index signature cannot have a rest parameter." }, | |
An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018", message: "An index signature parameter cannot have an accessibility modifier." }, | |
An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_a_question_mark_1019", message: "An index signature parameter cannot have a question mark." }, | |
An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_an_initializer_1020", message: "An index signature parameter cannot have an initializer." }, | |
An_index_signature_must_have_a_type_annotation: { code: 1021, category: ts.DiagnosticCategory.Error, key: "An_index_signature_must_have_a_type_annotation_1021", message: "An index signature must have a type annotation." }, | |
An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_must_have_a_type_annotation_1022", message: "An index signature parameter must have a type annotation." }, | |
An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_type_must_be_string_or_number_1023", message: "An index signature parameter type must be 'string' or 'number'." }, | |
readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: { code: 1024, category: ts.DiagnosticCategory.Error, key: "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", message: "'readonly' modifier can only appear on a property declaration or index signature." }, | |
Accessibility_modifier_already_seen: { code: 1028, category: ts.DiagnosticCategory.Error, key: "Accessibility_modifier_already_seen_1028", message: "Accessibility modifier already seen." }, | |
_0_modifier_must_precede_1_modifier: { code: 1029, category: ts.DiagnosticCategory.Error, key: "_0_modifier_must_precede_1_modifier_1029", message: "'{0}' modifier must precede '{1}' modifier." }, | |
_0_modifier_already_seen: { code: 1030, category: ts.DiagnosticCategory.Error, key: "_0_modifier_already_seen_1030", message: "'{0}' modifier already seen." }, | |
_0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_class_element_1031", message: "'{0}' modifier cannot appear on a class element." }, | |
super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: ts.DiagnosticCategory.Error, key: "super_must_be_followed_by_an_argument_list_or_member_access_1034", message: "'super' must be followed by an argument list or member access." }, | |
Only_ambient_modules_can_use_quoted_names: { code: 1035, category: ts.DiagnosticCategory.Error, key: "Only_ambient_modules_can_use_quoted_names_1035", message: "Only ambient modules can use quoted names." }, | |
Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: ts.DiagnosticCategory.Error, key: "Statements_are_not_allowed_in_ambient_contexts_1036", message: "Statements are not allowed in ambient contexts." }, | |
A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: ts.DiagnosticCategory.Error, key: "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038", message: "A 'declare' modifier cannot be used in an already ambient context." }, | |
Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: ts.DiagnosticCategory.Error, key: "Initializers_are_not_allowed_in_ambient_contexts_1039", message: "Initializers are not allowed in ambient contexts." }, | |
_0_modifier_cannot_be_used_in_an_ambient_context: { code: 1040, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_in_an_ambient_context_1040", message: "'{0}' modifier cannot be used in an ambient context." }, | |
_0_modifier_cannot_be_used_with_a_class_declaration: { code: 1041, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_with_a_class_declaration_1041", message: "'{0}' modifier cannot be used with a class declaration." }, | |
_0_modifier_cannot_be_used_here: { code: 1042, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_here_1042", message: "'{0}' modifier cannot be used here." }, | |
_0_modifier_cannot_appear_on_a_data_property: { code: 1043, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_data_property_1043", message: "'{0}' modifier cannot appear on a data property." }, | |
_0_modifier_cannot_appear_on_a_module_or_namespace_element: { code: 1044, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044", message: "'{0}' modifier cannot appear on a module or namespace element." }, | |
A_0_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: ts.DiagnosticCategory.Error, key: "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045", message: "A '{0}' modifier cannot be used with an interface declaration." }, | |
A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: ts.DiagnosticCategory.Error, key: "A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file_1046", message: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, | |
A_rest_parameter_cannot_be_optional: { code: 1047, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_cannot_be_optional_1047", message: "A rest parameter cannot be optional." }, | |
A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_cannot_have_an_initializer_1048", message: "A rest parameter cannot have an initializer." }, | |
A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_must_have_exactly_one_parameter_1049", message: "A 'set' accessor must have exactly one parameter." }, | |
A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_an_optional_parameter_1051", message: "A 'set' accessor cannot have an optional parameter." }, | |
A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_parameter_cannot_have_an_initializer_1052", message: "A 'set' accessor parameter cannot have an initializer." }, | |
A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_rest_parameter_1053", message: "A 'set' accessor cannot have rest parameter." }, | |
A_get_accessor_cannot_have_parameters: { code: 1054, category: ts.DiagnosticCategory.Error, key: "A_get_accessor_cannot_have_parameters_1054", message: "A 'get' accessor cannot have parameters." }, | |
Type_0_is_not_a_valid_async_function_return_type: { code: 1055, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_a_valid_async_function_return_type_1055", message: "Type '{0}' is not a valid async function return type." }, | |
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: ts.DiagnosticCategory.Error, key: "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056", message: "Accessors are only available when targeting ECMAScript 5 and higher." }, | |
An_async_function_or_method_must_have_a_valid_awaitable_return_type: { code: 1057, category: ts.DiagnosticCategory.Error, key: "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057", message: "An async function or method must have a valid awaitable return type." }, | |
Operand_for_await_does_not_have_a_valid_callable_then_member: { code: 1058, category: ts.DiagnosticCategory.Error, key: "Operand_for_await_does_not_have_a_valid_callable_then_member_1058", message: "Operand for 'await' does not have a valid callable 'then' member." }, | |
Return_expression_in_async_function_does_not_have_a_valid_callable_then_member: { code: 1059, category: ts.DiagnosticCategory.Error, key: "Return_expression_in_async_function_does_not_have_a_valid_callable_then_member_1059", message: "Return expression in async function does not have a valid callable 'then' member." }, | |
Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member: { code: 1060, category: ts.DiagnosticCategory.Error, key: "Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member_1060", message: "Expression body for async arrow function does not have a valid callable 'then' member." }, | |
Enum_member_must_have_initializer: { code: 1061, category: ts.DiagnosticCategory.Error, key: "Enum_member_must_have_initializer_1061", message: "Enum member must have initializer." }, | |
_0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: { code: 1062, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062", message: "{0} is referenced directly or indirectly in the fulfillment callback of its own 'then' method." }, | |
An_export_assignment_cannot_be_used_in_a_namespace: { code: 1063, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_be_used_in_a_namespace_1063", message: "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: { code: 1064, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1064", message: "The return type of an async function or method must be the global Promise<T> type." }, | |
In_ambient_enum_declarations_member_initializer_must_be_constant_expression: { code: 1066, category: ts.DiagnosticCategory.Error, key: "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066", message: "In ambient enum declarations member initializer must be constant expression." }, | |
Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068", message: "Unexpected token. A constructor, method, accessor, or property was expected." }, | |
_0_modifier_cannot_appear_on_a_type_member: { code: 1070, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_type_member_1070", message: "'{0}' modifier cannot appear on a type member." }, | |
_0_modifier_cannot_appear_on_an_index_signature: { code: 1071, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_an_index_signature_1071", message: "'{0}' modifier cannot appear on an index signature." }, | |
A_0_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: ts.DiagnosticCategory.Error, key: "A_0_modifier_cannot_be_used_with_an_import_declaration_1079", message: "A '{0}' modifier cannot be used with an import declaration." }, | |
Invalid_reference_directive_syntax: { code: 1084, category: ts.DiagnosticCategory.Error, key: "Invalid_reference_directive_syntax_1084", message: "Invalid 'reference' directive syntax." }, | |
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: ts.DiagnosticCategory.Error, key: "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_1085", message: "Octal literals are not available when targeting ECMAScript 5 and higher." }, | |
An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: ts.DiagnosticCategory.Error, key: "An_accessor_cannot_be_declared_in_an_ambient_context_1086", message: "An accessor cannot be declared in an ambient context." }, | |
_0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_constructor_declaration_1089", message: "'{0}' modifier cannot appear on a constructor declaration." }, | |
_0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_parameter_1090", message: "'{0}' modifier cannot appear on a parameter." }, | |
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: ts.DiagnosticCategory.Error, key: "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091", message: "Only a single variable declaration is allowed in a 'for...in' statement." }, | |
Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: ts.DiagnosticCategory.Error, key: "Type_parameters_cannot_appear_on_a_constructor_declaration_1092", message: "Type parameters cannot appear on a constructor declaration." }, | |
Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: ts.DiagnosticCategory.Error, key: "Type_annotation_cannot_appear_on_a_constructor_declaration_1093", message: "Type annotation cannot appear on a constructor declaration." }, | |
An_accessor_cannot_have_type_parameters: { code: 1094, category: ts.DiagnosticCategory.Error, key: "An_accessor_cannot_have_type_parameters_1094", message: "An accessor cannot have type parameters." }, | |
A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_a_return_type_annotation_1095", message: "A 'set' accessor cannot have a return type annotation." }, | |
An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: ts.DiagnosticCategory.Error, key: "An_index_signature_must_have_exactly_one_parameter_1096", message: "An index signature must have exactly one parameter." }, | |
_0_list_cannot_be_empty: { code: 1097, category: ts.DiagnosticCategory.Error, key: "_0_list_cannot_be_empty_1097", message: "'{0}' list cannot be empty." }, | |
Type_parameter_list_cannot_be_empty: { code: 1098, category: ts.DiagnosticCategory.Error, key: "Type_parameter_list_cannot_be_empty_1098", message: "Type parameter list cannot be empty." }, | |
Type_argument_list_cannot_be_empty: { code: 1099, category: ts.DiagnosticCategory.Error, key: "Type_argument_list_cannot_be_empty_1099", message: "Type argument list cannot be empty." }, | |
Invalid_use_of_0_in_strict_mode: { code: 1100, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_in_strict_mode_1100", message: "Invalid use of '{0}' in strict mode." }, | |
with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_strict_mode_1101", message: "'with' statements are not allowed in strict mode." }, | |
delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: ts.DiagnosticCategory.Error, key: "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102", message: "'delete' cannot be called on an identifier in strict mode." }, | |
A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", message: "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: { code: 1105, category: ts.DiagnosticCategory.Error, key: "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", message: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, | |
Jump_target_cannot_cross_function_boundary: { code: 1107, category: ts.DiagnosticCategory.Error, key: "Jump_target_cannot_cross_function_boundary_1107", message: "Jump target cannot cross function boundary." }, | |
A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, | |
Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, | |
Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, | |
A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_be_declared_optional_1112", message: "A class member cannot be declared optional." }, | |
A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, | |
Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, | |
A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "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: { code: 1116, category: ts.DiagnosticCategory.Error, key: "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116", message: "A 'break' statement can only jump to a label of an enclosing statement." }, | |
An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode_1117", message: "An object literal cannot have multiple properties with the same name in strict mode." }, | |
An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118", message: "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: { code: 1119, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119", message: "An object literal cannot have property and accessor with the same name." }, | |
An_export_assignment_cannot_have_modifiers: { code: 1120, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_have_modifiers_1120", message: "An export assignment cannot have modifiers." }, | |
Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: ts.DiagnosticCategory.Error, key: "Octal_literals_are_not_allowed_in_strict_mode_1121", message: "Octal literals are not allowed in strict mode." }, | |
A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: ts.DiagnosticCategory.Error, key: "A_tuple_type_element_list_cannot_be_empty_1122", message: "A tuple type element list cannot be empty." }, | |
Variable_declaration_list_cannot_be_empty: { code: 1123, category: ts.DiagnosticCategory.Error, key: "Variable_declaration_list_cannot_be_empty_1123", message: "Variable declaration list cannot be empty." }, | |
Digit_expected: { code: 1124, category: ts.DiagnosticCategory.Error, key: "Digit_expected_1124", message: "Digit expected." }, | |
Hexadecimal_digit_expected: { code: 1125, category: ts.DiagnosticCategory.Error, key: "Hexadecimal_digit_expected_1125", message: "Hexadecimal digit expected." }, | |
Unexpected_end_of_text: { code: 1126, category: ts.DiagnosticCategory.Error, key: "Unexpected_end_of_text_1126", message: "Unexpected end of text." }, | |
Invalid_character: { code: 1127, category: ts.DiagnosticCategory.Error, key: "Invalid_character_1127", message: "Invalid character." }, | |
Declaration_or_statement_expected: { code: 1128, category: ts.DiagnosticCategory.Error, key: "Declaration_or_statement_expected_1128", message: "Declaration or statement expected." }, | |
Statement_expected: { code: 1129, category: ts.DiagnosticCategory.Error, key: "Statement_expected_1129", message: "Statement expected." }, | |
case_or_default_expected: { code: 1130, category: ts.DiagnosticCategory.Error, key: "case_or_default_expected_1130", message: "'case' or 'default' expected." }, | |
Property_or_signature_expected: { code: 1131, category: ts.DiagnosticCategory.Error, key: "Property_or_signature_expected_1131", message: "Property or signature expected." }, | |
Enum_member_expected: { code: 1132, category: ts.DiagnosticCategory.Error, key: "Enum_member_expected_1132", message: "Enum member expected." }, | |
Variable_declaration_expected: { code: 1134, category: ts.DiagnosticCategory.Error, key: "Variable_declaration_expected_1134", message: "Variable declaration expected." }, | |
Argument_expression_expected: { code: 1135, category: ts.DiagnosticCategory.Error, key: "Argument_expression_expected_1135", message: "Argument expression expected." }, | |
Property_assignment_expected: { code: 1136, category: ts.DiagnosticCategory.Error, key: "Property_assignment_expected_1136", message: "Property assignment expected." }, | |
Expression_or_comma_expected: { code: 1137, category: ts.DiagnosticCategory.Error, key: "Expression_or_comma_expected_1137", message: "Expression or comma expected." }, | |
Parameter_declaration_expected: { code: 1138, category: ts.DiagnosticCategory.Error, key: "Parameter_declaration_expected_1138", message: "Parameter declaration expected." }, | |
Type_parameter_declaration_expected: { code: 1139, category: ts.DiagnosticCategory.Error, key: "Type_parameter_declaration_expected_1139", message: "Type parameter declaration expected." }, | |
Type_argument_expected: { code: 1140, category: ts.DiagnosticCategory.Error, key: "Type_argument_expected_1140", message: "Type argument expected." }, | |
String_literal_expected: { code: 1141, category: ts.DiagnosticCategory.Error, key: "String_literal_expected_1141", message: "String literal expected." }, | |
Line_break_not_permitted_here: { code: 1142, category: ts.DiagnosticCategory.Error, key: "Line_break_not_permitted_here_1142", message: "Line break not permitted here." }, | |
or_expected: { code: 1144, category: ts.DiagnosticCategory.Error, key: "or_expected_1144", message: "'{' or ';' expected." }, | |
Declaration_expected: { code: 1146, category: ts.DiagnosticCategory.Error, key: "Declaration_expected_1146", message: "Declaration expected." }, | |
Import_declarations_in_a_namespace_cannot_reference_a_module: { code: 1147, category: ts.DiagnosticCategory.Error, key: "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", message: "Import declarations in a namespace cannot reference a module." }, | |
Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting__1148", message: "Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file." }, | |
File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: ts.DiagnosticCategory.Error, key: "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", message: "File name '{0}' differs from already included file name '{1}' only in casing" }, | |
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: ts.DiagnosticCategory.Error, key: "new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150", message: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." }, | |
const_declarations_must_be_initialized: { code: 1155, category: ts.DiagnosticCategory.Error, key: "const_declarations_must_be_initialized_1155", message: "'const' declarations must be initialized" }, | |
const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: ts.DiagnosticCategory.Error, key: "const_declarations_can_only_be_declared_inside_a_block_1156", message: "'const' declarations can only be declared inside a block." }, | |
let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: ts.DiagnosticCategory.Error, key: "let_declarations_can_only_be_declared_inside_a_block_1157", message: "'let' declarations can only be declared inside a block." }, | |
Unterminated_template_literal: { code: 1160, category: ts.DiagnosticCategory.Error, key: "Unterminated_template_literal_1160", message: "Unterminated template literal." }, | |
Unterminated_regular_expression_literal: { code: 1161, category: ts.DiagnosticCategory.Error, key: "Unterminated_regular_expression_literal_1161", message: "Unterminated regular expression literal." }, | |
An_object_member_cannot_be_declared_optional: { code: 1162, category: ts.DiagnosticCategory.Error, key: "An_object_member_cannot_be_declared_optional_1162", message: "An object member cannot be declared optional." }, | |
A_yield_expression_is_only_allowed_in_a_generator_body: { code: 1163, category: ts.DiagnosticCategory.Error, key: "A_yield_expression_is_only_allowed_in_a_generator_body_1163", message: "A 'yield' expression is only allowed in a generator body." }, | |
Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: ts.DiagnosticCategory.Error, key: "Computed_property_names_are_not_allowed_in_enums_1164", message: "Computed property names are not allowed in enums." }, | |
A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { code: 1165, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol_1165", message: "A computed property name in an ambient context must directly refer to a built-in symbol." }, | |
A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { code: 1166, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol_1166", message: "A computed property name in a class property declaration must directly refer to a built-in symbol." }, | |
A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { code: 1168, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol_1168", message: "A computed property name in a method overload must directly refer to a built-in symbol." }, | |
A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { code: 1169, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol_1169", message: "A computed property name in an interface must directly refer to a built-in symbol." }, | |
A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { code: 1170, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol_1170", message: "A computed property name in a type literal must directly refer to a built-in symbol." }, | |
A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: ts.DiagnosticCategory.Error, key: "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171", message: "A comma expression is not allowed in a computed property name." }, | |
extends_clause_already_seen: { code: 1172, category: ts.DiagnosticCategory.Error, key: "extends_clause_already_seen_1172", message: "'extends' clause already seen." }, | |
extends_clause_must_precede_implements_clause: { code: 1173, category: ts.DiagnosticCategory.Error, key: "extends_clause_must_precede_implements_clause_1173", message: "'extends' clause must precede 'implements' clause." }, | |
Classes_can_only_extend_a_single_class: { code: 1174, category: ts.DiagnosticCategory.Error, key: "Classes_can_only_extend_a_single_class_1174", message: "Classes can only extend a single class." }, | |
implements_clause_already_seen: { code: 1175, category: ts.DiagnosticCategory.Error, key: "implements_clause_already_seen_1175", message: "'implements' clause already seen." }, | |
Interface_declaration_cannot_have_implements_clause: { code: 1176, category: ts.DiagnosticCategory.Error, key: "Interface_declaration_cannot_have_implements_clause_1176", message: "Interface declaration cannot have 'implements' clause." }, | |
Binary_digit_expected: { code: 1177, category: ts.DiagnosticCategory.Error, key: "Binary_digit_expected_1177", message: "Binary digit expected." }, | |
Octal_digit_expected: { code: 1178, category: ts.DiagnosticCategory.Error, key: "Octal_digit_expected_1178", message: "Octal digit expected." }, | |
Unexpected_token_expected: { code: 1179, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_expected_1179", message: "Unexpected token. '{' expected." }, | |
Property_destructuring_pattern_expected: { code: 1180, category: ts.DiagnosticCategory.Error, key: "Property_destructuring_pattern_expected_1180", message: "Property destructuring pattern expected." }, | |
Array_element_destructuring_pattern_expected: { code: 1181, category: ts.DiagnosticCategory.Error, key: "Array_element_destructuring_pattern_expected_1181", message: "Array element destructuring pattern expected." }, | |
A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: ts.DiagnosticCategory.Error, key: "A_destructuring_declaration_must_have_an_initializer_1182", message: "A destructuring declaration must have an initializer." }, | |
An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1183, category: ts.DiagnosticCategory.Error, key: "An_implementation_cannot_be_declared_in_ambient_contexts_1183", message: "An implementation cannot be declared in ambient contexts." }, | |
Modifiers_cannot_appear_here: { code: 1184, category: ts.DiagnosticCategory.Error, key: "Modifiers_cannot_appear_here_1184", message: "Modifiers cannot appear here." }, | |
Merge_conflict_marker_encountered: { code: 1185, category: ts.DiagnosticCategory.Error, key: "Merge_conflict_marker_encountered_1185", message: "Merge conflict marker encountered." }, | |
A_rest_element_cannot_have_an_initializer: { code: 1186, category: ts.DiagnosticCategory.Error, key: "A_rest_element_cannot_have_an_initializer_1186", message: "A rest element cannot have an initializer." }, | |
A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_a_binding_pattern_1187", message: "A parameter property may not be a binding pattern." }, | |
Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { code: 1188, category: ts.DiagnosticCategory.Error, key: "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188", message: "Only a single variable declaration is allowed in a 'for...of' statement." }, | |
The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { code: 1189, category: ts.DiagnosticCategory.Error, key: "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189", message: "The variable declaration of a 'for...in' statement cannot have an initializer." }, | |
The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { code: 1190, category: ts.DiagnosticCategory.Error, key: "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190", message: "The variable declaration of a 'for...of' statement cannot have an initializer." }, | |
An_import_declaration_cannot_have_modifiers: { code: 1191, category: ts.DiagnosticCategory.Error, key: "An_import_declaration_cannot_have_modifiers_1191", message: "An import declaration cannot have modifiers." }, | |
Module_0_has_no_default_export: { code: 1192, category: ts.DiagnosticCategory.Error, key: "Module_0_has_no_default_export_1192", message: "Module '{0}' has no default export." }, | |
An_export_declaration_cannot_have_modifiers: { code: 1193, category: ts.DiagnosticCategory.Error, key: "An_export_declaration_cannot_have_modifiers_1193", message: "An export declaration cannot have modifiers." }, | |
Export_declarations_are_not_permitted_in_a_namespace: { code: 1194, category: ts.DiagnosticCategory.Error, key: "Export_declarations_are_not_permitted_in_a_namespace_1194", message: "Export declarations are not permitted in a namespace." }, | |
Catch_clause_variable_name_must_be_an_identifier: { code: 1195, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_name_must_be_an_identifier_1195", message: "Catch clause variable name must be an identifier." }, | |
Catch_clause_variable_cannot_have_a_type_annotation: { code: 1196, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_cannot_have_a_type_annotation_1196", message: "Catch clause variable cannot have a type annotation." }, | |
Catch_clause_variable_cannot_have_an_initializer: { code: 1197, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_cannot_have_an_initializer_1197", message: "Catch clause variable cannot have an initializer." }, | |
An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { code: 1198, category: ts.DiagnosticCategory.Error, key: "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198", message: "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive." }, | |
Unterminated_Unicode_escape_sequence: { code: 1199, category: ts.DiagnosticCategory.Error, key: "Unterminated_Unicode_escape_sequence_1199", message: "Unterminated Unicode escape sequence." }, | |
Line_terminator_not_permitted_before_arrow: { code: 1200, category: ts.DiagnosticCategory.Error, key: "Line_terminator_not_permitted_before_arrow_1200", message: "Line terminator not permitted before arrow." }, | |
Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: { code: 1202, category: ts.DiagnosticCategory.Error, key: "Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk__1202", message: "Import assignment cannot be used when targeting ECMAScript 6 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_6_modules_Consider_using_export_default_or_another_module_format_instead: { code: 1203, category: ts.DiagnosticCategory.Error, key: "Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_o_1203", message: "Export assignment cannot be used when targeting ECMAScript 6 modules. Consider using 'export default' or another module format instead." }, | |
Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower: { code: 1204, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower_1204", message: "Cannot compile modules into 'es2015' when targeting 'ES5' or lower." }, | |
Decorators_are_not_valid_here: { code: 1206, category: ts.DiagnosticCategory.Error, key: "Decorators_are_not_valid_here_1206", message: "Decorators are not valid here." }, | |
Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { code: 1207, category: ts.DiagnosticCategory.Error, key: "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", message: "Decorators cannot be applied to multiple get/set accessors of the same name." }, | |
Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: { code: 1208, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided_1208", message: "Cannot compile namespaces when the '--isolatedModules' flag is provided." }, | |
Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: { code: 1209, category: ts.DiagnosticCategory.Error, key: "Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209", message: "Ambient const enums are not allowed when the '--isolatedModules' flag is provided." }, | |
Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: { code: 1210, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", message: "Invalid use of '{0}'. Class definitions are automatically in strict mode." }, | |
A_class_declaration_without_the_default_modifier_must_have_a_name: { code: 1211, category: ts.DiagnosticCategory.Error, key: "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", message: "A class declaration without the 'default' modifier must have a name" }, | |
Identifier_expected_0_is_a_reserved_word_in_strict_mode: { code: 1212, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", message: "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: { code: 1213, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", message: "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: { code: 1214, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", message: "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: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", message: "Invalid use of '{0}'. Modules are automatically in strict mode." }, | |
Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: ts.DiagnosticCategory.Error, key: "Export_assignment_is_not_supported_when_module_flag_is_system_1218", message: "Export assignment is not supported when '--module' flag is 'system'." }, | |
Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: { code: 1219, category: ts.DiagnosticCategory.Error, key: "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219", message: "Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning." }, | |
Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 1220, category: ts.DiagnosticCategory.Error, key: "Generators_are_only_available_when_targeting_ECMAScript_6_or_higher_1220", message: "Generators are only available when targeting ECMAScript 6 or higher." }, | |
Generators_are_not_allowed_in_an_ambient_context: { code: 1221, category: ts.DiagnosticCategory.Error, key: "Generators_are_not_allowed_in_an_ambient_context_1221", message: "Generators are not allowed in an ambient context." }, | |
An_overload_signature_cannot_be_declared_as_a_generator: { code: 1222, category: ts.DiagnosticCategory.Error, key: "An_overload_signature_cannot_be_declared_as_a_generator_1222", message: "An overload signature cannot be declared as a generator." }, | |
_0_tag_already_specified: { code: 1223, category: ts.DiagnosticCategory.Error, key: "_0_tag_already_specified_1223", message: "'{0}' tag already specified." }, | |
Signature_0_must_have_a_type_predicate: { code: 1224, category: ts.DiagnosticCategory.Error, key: "Signature_0_must_have_a_type_predicate_1224", message: "Signature '{0}' must have a type predicate." }, | |
Cannot_find_parameter_0: { code: 1225, category: ts.DiagnosticCategory.Error, key: "Cannot_find_parameter_0_1225", message: "Cannot find parameter '{0}'." }, | |
Type_predicate_0_is_not_assignable_to_1: { code: 1226, category: ts.DiagnosticCategory.Error, key: "Type_predicate_0_is_not_assignable_to_1_1226", message: "Type predicate '{0}' is not assignable to '{1}'." }, | |
Parameter_0_is_not_in_the_same_position_as_parameter_1: { code: 1227, category: ts.DiagnosticCategory.Error, key: "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", message: "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: { code: 1228, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", message: "A type predicate is only allowed in return type position for functions and methods." }, | |
A_type_predicate_cannot_reference_a_rest_parameter: { code: 1229, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_a_rest_parameter_1229", message: "A type predicate cannot reference a rest parameter." }, | |
A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: { code: 1230, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", message: "A type predicate cannot reference element '{0}' in a binding pattern." }, | |
An_export_assignment_can_only_be_used_in_a_module: { code: 1231, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_can_only_be_used_in_a_module_1231", message: "An export assignment can only be used in a module." }, | |
An_import_declaration_can_only_be_used_in_a_namespace_or_module: { code: 1232, category: ts.DiagnosticCategory.Error, key: "An_import_declaration_can_only_be_used_in_a_namespace_or_module_1232", message: "An import declaration can only be used in a namespace or module." }, | |
An_export_declaration_can_only_be_used_in_a_module: { code: 1233, category: ts.DiagnosticCategory.Error, key: "An_export_declaration_can_only_be_used_in_a_module_1233", message: "An export declaration can only be used in a module." }, | |
An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: { code: 1234, category: ts.DiagnosticCategory.Error, key: "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234", message: "An ambient module declaration is only allowed at the top level in a file." }, | |
A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: { code: 1235, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_is_only_allowed_in_a_namespace_or_module_1235", message: "A namespace declaration is only allowed in a namespace or module." }, | |
The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: { code: 1236, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236", message: "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: { code: 1237, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237", message: "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: { code: 1238, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238", message: "Unable to resolve signature of class decorator when called as an expression." }, | |
Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: { code: 1239, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239", message: "Unable to resolve signature of parameter decorator when called as an expression." }, | |
Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: { code: 1240, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240", message: "Unable to resolve signature of property decorator when called as an expression." }, | |
Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: { code: 1241, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241", message: "Unable to resolve signature of method decorator when called as an expression." }, | |
abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: { code: 1242, category: ts.DiagnosticCategory.Error, key: "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242", message: "'abstract' modifier can only appear on a class, method, or property declaration." }, | |
_0_modifier_cannot_be_used_with_1_modifier: { code: 1243, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_with_1_modifier_1243", message: "'{0}' modifier cannot be used with '{1}' modifier." }, | |
Abstract_methods_can_only_appear_within_an_abstract_class: { code: 1244, category: ts.DiagnosticCategory.Error, key: "Abstract_methods_can_only_appear_within_an_abstract_class_1244", message: "Abstract methods can only appear within an abstract class." }, | |
Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: { code: 1245, category: ts.DiagnosticCategory.Error, key: "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245", message: "Method '{0}' cannot have an implementation because it is marked abstract." }, | |
An_interface_property_cannot_have_an_initializer: { code: 1246, category: ts.DiagnosticCategory.Error, key: "An_interface_property_cannot_have_an_initializer_1246", message: "An interface property cannot have an initializer." }, | |
A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, | |
A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, | |
A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "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: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "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: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "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: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, | |
with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, | |
await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, | |
Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, | |
can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: { code: 1312, category: ts.DiagnosticCategory.Error, key: "can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment_1312", message: "'=' can only be used in an object literal property inside a destructuring assignment." }, | |
The_body_of_an_if_statement_cannot_be_the_empty_statement: { code: 1313, category: ts.DiagnosticCategory.Error, key: "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313", message: "The body of an 'if' statement cannot be the empty statement." }, | |
Global_module_exports_may_only_appear_in_module_files: { code: 1314, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_in_module_files_1314", message: "Global module exports may only appear in module files." }, | |
Global_module_exports_may_only_appear_in_declaration_files: { code: 1315, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_in_declaration_files_1315", message: "Global module exports may only appear in declaration files." }, | |
Global_module_exports_may_only_appear_at_top_level: { code: 1316, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_at_top_level_1316", message: "Global module exports may only appear at top level." }, | |
Duplicate_identifier_0: { code: 2300, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_2300", message: "Duplicate identifier '{0}'." }, | |
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: ts.DiagnosticCategory.Error, key: "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", message: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, | |
Static_members_cannot_reference_class_type_parameters: { code: 2302, category: ts.DiagnosticCategory.Error, key: "Static_members_cannot_reference_class_type_parameters_2302", message: "Static members cannot reference class type parameters." }, | |
Circular_definition_of_import_alias_0: { code: 2303, category: ts.DiagnosticCategory.Error, key: "Circular_definition_of_import_alias_0_2303", message: "Circular definition of import alias '{0}'." }, | |
Cannot_find_name_0: { code: 2304, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_2304", message: "Cannot find name '{0}'." }, | |
Module_0_has_no_exported_member_1: { code: 2305, category: ts.DiagnosticCategory.Error, key: "Module_0_has_no_exported_member_1_2305", message: "Module '{0}' has no exported member '{1}'." }, | |
File_0_is_not_a_module: { code: 2306, category: ts.DiagnosticCategory.Error, key: "File_0_is_not_a_module_2306", message: "File '{0}' is not a module." }, | |
Cannot_find_module_0: { code: 2307, category: ts.DiagnosticCategory.Error, key: "Cannot_find_module_0_2307", message: "Cannot find module '{0}'." }, | |
Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: { code: 2308, category: ts.DiagnosticCategory.Error, key: "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308", message: "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: { code: 2309, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309", message: "An export assignment cannot be used in a module with other exported elements." }, | |
Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: ts.DiagnosticCategory.Error, key: "Type_0_recursively_references_itself_as_a_base_type_2310", message: "Type '{0}' recursively references itself as a base type." }, | |
A_class_may_only_extend_another_class: { code: 2311, category: ts.DiagnosticCategory.Error, key: "A_class_may_only_extend_another_class_2311", message: "A class may only extend another class." }, | |
An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: ts.DiagnosticCategory.Error, key: "An_interface_may_only_extend_a_class_or_another_interface_2312", message: "An interface may only extend a class or another interface." }, | |
Type_parameter_0_has_a_circular_constraint: { code: 2313, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_has_a_circular_constraint_2313", message: "Type parameter '{0}' has a circular constraint." }, | |
Generic_type_0_requires_1_type_argument_s: { code: 2314, category: ts.DiagnosticCategory.Error, key: "Generic_type_0_requires_1_type_argument_s_2314", message: "Generic type '{0}' requires {1} type argument(s)." }, | |
Type_0_is_not_generic: { code: 2315, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_generic_2315", message: "Type '{0}' is not generic." }, | |
Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: ts.DiagnosticCategory.Error, key: "Global_type_0_must_be_a_class_or_interface_type_2316", message: "Global type '{0}' must be a class or interface type." }, | |
Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: ts.DiagnosticCategory.Error, key: "Global_type_0_must_have_1_type_parameter_s_2317", message: "Global type '{0}' must have {1} type parameter(s)." }, | |
Cannot_find_global_type_0: { code: 2318, category: ts.DiagnosticCategory.Error, key: "Cannot_find_global_type_0_2318", message: "Cannot find global type '{0}'." }, | |
Named_property_0_of_types_1_and_2_are_not_identical: { code: 2319, category: ts.DiagnosticCategory.Error, key: "Named_property_0_of_types_1_and_2_are_not_identical_2319", message: "Named property '{0}' of types '{1}' and '{2}' are not identical." }, | |
Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: ts.DiagnosticCategory.Error, key: "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320", message: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." }, | |
Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: ts.DiagnosticCategory.Error, key: "Excessive_stack_depth_comparing_types_0_and_1_2321", message: "Excessive stack depth comparing types '{0}' and '{1}'." }, | |
Type_0_is_not_assignable_to_type_1: { code: 2322, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_assignable_to_type_1_2322", message: "Type '{0}' is not assignable to type '{1}'." }, | |
Cannot_redeclare_exported_variable_0: { code: 2323, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_exported_variable_0_2323", message: "Cannot redeclare exported variable '{0}'." }, | |
Property_0_is_missing_in_type_1: { code: 2324, category: ts.DiagnosticCategory.Error, key: "Property_0_is_missing_in_type_1_2324", message: "Property '{0}' is missing in type '{1}'." }, | |
Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: ts.DiagnosticCategory.Error, key: "Property_0_is_private_in_type_1_but_not_in_type_2_2325", message: "Property '{0}' is private in type '{1}' but not in type '{2}'." }, | |
Types_of_property_0_are_incompatible: { code: 2326, category: ts.DiagnosticCategory.Error, key: "Types_of_property_0_are_incompatible_2326", message: "Types of property '{0}' are incompatible." }, | |
Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: ts.DiagnosticCategory.Error, key: "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", message: "Property '{0}' is optional in type '{1}' but required in type '{2}'." }, | |
Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: ts.DiagnosticCategory.Error, key: "Types_of_parameters_0_and_1_are_incompatible_2328", message: "Types of parameters '{0}' and '{1}' are incompatible." }, | |
Index_signature_is_missing_in_type_0: { code: 2329, category: ts.DiagnosticCategory.Error, key: "Index_signature_is_missing_in_type_0_2329", message: "Index signature is missing in type '{0}'." }, | |
Index_signatures_are_incompatible: { code: 2330, category: ts.DiagnosticCategory.Error, key: "Index_signatures_are_incompatible_2330", message: "Index signatures are incompatible." }, | |
this_cannot_be_referenced_in_a_module_or_namespace_body: { code: 2331, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", message: "'this' cannot be referenced in a module or namespace body." }, | |
this_cannot_be_referenced_in_current_location: { code: 2332, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_current_location_2332", message: "'this' cannot be referenced in current location." }, | |
this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_constructor_arguments_2333", message: "'this' cannot be referenced in constructor arguments." }, | |
this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_static_property_initializer_2334", message: "'this' cannot be referenced in a static property initializer." }, | |
super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_a_derived_class_2335", message: "'super' can only be referenced in a derived class." }, | |
super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: ts.DiagnosticCategory.Error, key: "super_cannot_be_referenced_in_constructor_arguments_2336", message: "'super' cannot be referenced in constructor arguments." }, | |
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: ts.DiagnosticCategory.Error, key: "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337", message: "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: { code: 2338, category: ts.DiagnosticCategory.Error, key: "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338", message: "'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: { code: 2339, category: ts.DiagnosticCategory.Error, key: "Property_0_does_not_exist_on_type_1_2339", message: "Property '{0}' does not exist on type '{1}'." }, | |
Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: ts.DiagnosticCategory.Error, key: "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340", message: "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: { code: 2341, category: ts.DiagnosticCategory.Error, key: "Property_0_is_private_and_only_accessible_within_class_1_2341", message: "Property '{0}' is private and only accessible within class '{1}'." }, | |
An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { code: 2342, category: ts.DiagnosticCategory.Error, key: "An_index_expression_argument_must_be_of_type_string_number_symbol_or_any_2342", message: "An index expression argument must be of type 'string', 'number', 'symbol', or 'any'." }, | |
Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: ts.DiagnosticCategory.Error, key: "Type_0_does_not_satisfy_the_constraint_1_2344", message: "Type '{0}' does not satisfy the constraint '{1}'." }, | |
Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: ts.DiagnosticCategory.Error, key: "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", message: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, | |
Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: ts.DiagnosticCategory.Error, key: "Supplied_parameters_do_not_match_any_signature_of_call_target_2346", message: "Supplied parameters do not match any signature of call target." }, | |
Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: ts.DiagnosticCategory.Error, key: "Untyped_function_calls_may_not_accept_type_arguments_2347", message: "Untyped function calls may not accept type arguments." }, | |
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: ts.DiagnosticCategory.Error, key: "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348", message: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, | |
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: ts.DiagnosticCategory.Error, key: "Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_2349", message: "Cannot invoke an expression whose type lacks a call signature." }, | |
Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: ts.DiagnosticCategory.Error, key: "Only_a_void_function_can_be_called_with_the_new_keyword_2350", message: "Only a void function can be called with the 'new' keyword." }, | |
Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: ts.DiagnosticCategory.Error, key: "Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature_2351", message: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, | |
Type_0_cannot_be_converted_to_type_1: { code: 2352, category: ts.DiagnosticCategory.Error, key: "Type_0_cannot_be_converted_to_type_1_2352", message: "Type '{0}' cannot be converted to type '{1}'." }, | |
Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: { code: 2353, category: ts.DiagnosticCategory.Error, key: "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353", message: "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'." }, | |
No_best_common_type_exists_among_return_expressions: { code: 2354, category: ts.DiagnosticCategory.Error, key: "No_best_common_type_exists_among_return_expressions_2354", message: "No best common type exists among return expressions." }, | |
A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value: { code: 2355, category: ts.DiagnosticCategory.Error, key: "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355", message: "A function whose declared type is neither 'void' nor 'any' must return a value." }, | |
An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: ts.DiagnosticCategory.Error, key: "An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type_2356", message: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, | |
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: ts.DiagnosticCategory.Error, key: "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer_2357", message: "The operand of an increment or decrement operator must be a variable, property or indexer." }, | |
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", message: "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: { code: 2359, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", message: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, | |
The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { code: 2360, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol_2360", message: "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'." }, | |
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361", message: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, | |
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2362", message: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, | |
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2363", message: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, | |
Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_of_assignment_expression_2364", message: "Invalid left-hand side of assignment expression." }, | |
Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: ts.DiagnosticCategory.Error, key: "Operator_0_cannot_be_applied_to_types_1_and_2_2365", message: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, | |
Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: { code: 2366, category: ts.DiagnosticCategory.Error, key: "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366", message: "Function lacks ending return statement and return type does not include 'undefined'." }, | |
Type_parameter_name_cannot_be_0: { code: 2368, category: ts.DiagnosticCategory.Error, key: "Type_parameter_name_cannot_be_0_2368", message: "Type parameter name cannot be '{0}'" }, | |
A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369", message: "A parameter property is only allowed in a constructor implementation." }, | |
A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_must_be_of_an_array_type_2370", message: "A rest parameter must be of an array type." }, | |
A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: ts.DiagnosticCategory.Error, key: "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", message: "A parameter initializer is only allowed in a function or constructor implementation." }, | |
Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: ts.DiagnosticCategory.Error, key: "Parameter_0_cannot_be_referenced_in_its_initializer_2372", message: "Parameter '{0}' cannot be referenced in its initializer." }, | |
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: ts.DiagnosticCategory.Error, key: "Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it_2373", message: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, | |
Duplicate_string_index_signature: { code: 2374, category: ts.DiagnosticCategory.Error, key: "Duplicate_string_index_signature_2374", message: "Duplicate string index signature." }, | |
Duplicate_number_index_signature: { code: 2375, category: ts.DiagnosticCategory.Error, key: "Duplicate_number_index_signature_2375", message: "Duplicate number index signature." }, | |
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: ts.DiagnosticCategory.Error, key: "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", message: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, | |
Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: ts.DiagnosticCategory.Error, key: "Constructors_for_derived_classes_must_contain_a_super_call_2377", message: "Constructors for derived classes must contain a 'super' call." }, | |
A_get_accessor_must_return_a_value: { code: 2378, category: ts.DiagnosticCategory.Error, key: "A_get_accessor_must_return_a_value_2378", message: "A 'get' accessor must return a value." }, | |
Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: ts.DiagnosticCategory.Error, key: "Getter_and_setter_accessors_do_not_agree_in_visibility_2379", message: "Getter and setter accessors do not agree in visibility." }, | |
get_and_set_accessor_must_have_the_same_type: { code: 2380, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_type_2380", message: "'get' and 'set' accessor must have the same type." }, | |
A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: ts.DiagnosticCategory.Error, key: "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381", message: "A signature with an implementation cannot use a string literal type." }, | |
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: ts.DiagnosticCategory.Error, key: "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382", message: "Specialized overload signature is not assignable to any non-specialized signature." }, | |
Overload_signatures_must_all_be_exported_or_non_exported: { code: 2383, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_exported_or_non_exported_2383", message: "Overload signatures must all be exported or non-exported." }, | |
Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_ambient_or_non_ambient_2384", message: "Overload signatures must all be ambient or non-ambient." }, | |
Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_public_private_or_protected_2385", message: "Overload signatures must all be public, private or protected." }, | |
Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_optional_or_required_2386", message: "Overload signatures must all be optional or required." }, | |
Function_overload_must_be_static: { code: 2387, category: ts.DiagnosticCategory.Error, key: "Function_overload_must_be_static_2387", message: "Function overload must be static." }, | |
Function_overload_must_not_be_static: { code: 2388, category: ts.DiagnosticCategory.Error, key: "Function_overload_must_not_be_static_2388", message: "Function overload must not be static." }, | |
Function_implementation_name_must_be_0: { code: 2389, category: ts.DiagnosticCategory.Error, key: "Function_implementation_name_must_be_0_2389", message: "Function implementation name must be '{0}'." }, | |
Constructor_implementation_is_missing: { code: 2390, category: ts.DiagnosticCategory.Error, key: "Constructor_implementation_is_missing_2390", message: "Constructor implementation is missing." }, | |
Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: ts.DiagnosticCategory.Error, key: "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391", message: "Function implementation is missing or not immediately following the declaration." }, | |
Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: ts.DiagnosticCategory.Error, key: "Multiple_constructor_implementations_are_not_allowed_2392", message: "Multiple constructor implementations are not allowed." }, | |
Duplicate_function_implementation: { code: 2393, category: ts.DiagnosticCategory.Error, key: "Duplicate_function_implementation_2393", message: "Duplicate function implementation." }, | |
Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: ts.DiagnosticCategory.Error, key: "Overload_signature_is_not_compatible_with_function_implementation_2394", message: "Overload signature is not compatible with function implementation." }, | |
Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: ts.DiagnosticCategory.Error, key: "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395", message: "Individual declarations in merged declaration '{0}' must be all exported or all local." }, | |
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396", message: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, | |
Declaration_name_conflicts_with_built_in_global_identifier_0: { code: 2397, category: ts.DiagnosticCategory.Error, key: "Declaration_name_conflicts_with_built_in_global_identifier_0_2397", message: "Declaration name conflicts with built-in global identifier '{0}'." }, | |
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399", message: "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: { code: 2400, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400", message: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, | |
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401", message: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, | |
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402", message: "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: { code: 2403, category: ts.DiagnosticCategory.Error, key: "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403", message: "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: { code: 2404, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404", message: "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: { code: 2405, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405", message: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, | |
Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_in_for_in_statement_2406", message: "Invalid left-hand side in 'for...in' statement." }, | |
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_2407", message: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, | |
Setters_cannot_return_a_value: { code: 2408, category: ts.DiagnosticCategory.Error, key: "Setters_cannot_return_a_value_2408", message: "Setters cannot return a value." }, | |
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", message: "Return type of constructor signature must be assignable to the instance type of the class" }, | |
All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "All_symbols_within_a_with_block_will_be_resolved_to_any_2410", message: "All symbols within a 'with' block will be resolved to 'any'." }, | |
Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", message: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, | |
Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", message: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, | |
Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: ts.DiagnosticCategory.Error, key: "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", message: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, | |
Class_name_cannot_be_0: { code: 2414, category: ts.DiagnosticCategory.Error, key: "Class_name_cannot_be_0_2414", message: "Class name cannot be '{0}'" }, | |
Class_0_incorrectly_extends_base_class_1: { code: 2415, category: ts.DiagnosticCategory.Error, key: "Class_0_incorrectly_extends_base_class_1_2415", message: "Class '{0}' incorrectly extends base class '{1}'." }, | |
Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: ts.DiagnosticCategory.Error, key: "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417", message: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, | |
Class_0_incorrectly_implements_interface_1: { code: 2420, category: ts.DiagnosticCategory.Error, key: "Class_0_incorrectly_implements_interface_1_2420", message: "Class '{0}' incorrectly implements interface '{1}'." }, | |
A_class_may_only_implement_another_class_or_interface: { code: 2422, category: ts.DiagnosticCategory.Error, key: "A_class_may_only_implement_another_class_or_interface_2422", message: "A class may only implement another class or interface." }, | |
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423", message: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, | |
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_proper_2424", message: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, | |
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425", message: "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: { code: 2426, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426", message: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, | |
Interface_name_cannot_be_0: { code: 2427, category: ts.DiagnosticCategory.Error, key: "Interface_name_cannot_be_0_2427", message: "Interface name cannot be '{0}'" }, | |
All_declarations_of_0_must_have_identical_type_parameters: { code: 2428, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_type_parameters_2428", message: "All declarations of '{0}' must have identical type parameters." }, | |
Interface_0_incorrectly_extends_interface_1: { code: 2430, category: ts.DiagnosticCategory.Error, key: "Interface_0_incorrectly_extends_interface_1_2430", message: "Interface '{0}' incorrectly extends interface '{1}'." }, | |
Enum_name_cannot_be_0: { code: 2431, category: ts.DiagnosticCategory.Error, key: "Enum_name_cannot_be_0_2431", message: "Enum name cannot be '{0}'" }, | |
In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: ts.DiagnosticCategory.Error, key: "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432", message: "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: { code: 2433, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433", message: "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: { code: 2434, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434", message: "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: { code: 2435, category: ts.DiagnosticCategory.Error, key: "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435", message: "Ambient modules cannot be nested in other modules or namespaces." }, | |
Ambient_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: ts.DiagnosticCategory.Error, key: "Ambient_module_declaration_cannot_specify_relative_module_name_2436", message: "Ambient module declaration cannot specify relative module name." }, | |
Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: ts.DiagnosticCategory.Error, key: "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437", message: "Module '{0}' is hidden by a local declaration with the same name" }, | |
Import_name_cannot_be_0: { code: 2438, category: ts.DiagnosticCategory.Error, key: "Import_name_cannot_be_0_2438", message: "Import name cannot be '{0}'" }, | |
Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: { code: 2439, category: ts.DiagnosticCategory.Error, key: "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439", message: "Import or export declaration in an ambient module declaration cannot reference module through relative module name." }, | |
Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: ts.DiagnosticCategory.Error, key: "Import_declaration_conflicts_with_local_declaration_of_0_2440", message: "Import declaration conflicts with local declaration of '{0}'" }, | |
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: { code: 2441, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module." }, | |
Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: ts.DiagnosticCategory.Error, key: "Types_have_separate_declarations_of_a_private_property_0_2442", message: "Types have separate declarations of a private property '{0}'." }, | |
Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443", message: "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: { code: 2444, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_in_type_1_but_public_in_type_2_2444", message: "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: { code: 2445, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", message: "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: { code: 2446, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446", message: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, | |
The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: ts.DiagnosticCategory.Error, key: "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447", message: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, | |
Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: ts.DiagnosticCategory.Error, key: "Block_scoped_variable_0_used_before_its_declaration_2448", message: "Block-scoped variable '{0}' used before its declaration." }, | |
The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property: { code: 2449, category: ts.DiagnosticCategory.Error, key: "The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property_2449", message: "The operand of an increment or decrement operator cannot be a constant or a read-only property." }, | |
Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property: { code: 2450, category: ts.DiagnosticCategory.Error, key: "Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property_2450", message: "Left-hand side of assignment expression cannot be a constant or a read-only property." }, | |
Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_block_scoped_variable_0_2451", message: "Cannot redeclare block-scoped variable '{0}'." }, | |
An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: ts.DiagnosticCategory.Error, key: "An_enum_member_cannot_have_a_numeric_name_2452", message: "An enum member cannot have a numeric name." }, | |
The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: ts.DiagnosticCategory.Error, key: "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453", message: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, | |
Variable_0_is_used_before_being_assigned: { code: 2454, category: ts.DiagnosticCategory.Error, key: "Variable_0_is_used_before_being_assigned_2454", message: "Variable '{0}' is used before being assigned." }, | |
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: ts.DiagnosticCategory.Error, key: "Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0_2455", message: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, | |
Type_alias_0_circularly_references_itself: { code: 2456, category: ts.DiagnosticCategory.Error, key: "Type_alias_0_circularly_references_itself_2456", message: "Type alias '{0}' circularly references itself." }, | |
Type_alias_name_cannot_be_0: { code: 2457, category: ts.DiagnosticCategory.Error, key: "Type_alias_name_cannot_be_0_2457", message: "Type alias name cannot be '{0}'" }, | |
An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: ts.DiagnosticCategory.Error, key: "An_AMD_module_cannot_have_multiple_name_assignments_2458", message: "An AMD module cannot have multiple name assignments." }, | |
Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: ts.DiagnosticCategory.Error, key: "Type_0_has_no_property_1_and_no_string_index_signature_2459", message: "Type '{0}' has no property '{1}' and no string index signature." }, | |
Type_0_has_no_property_1: { code: 2460, category: ts.DiagnosticCategory.Error, key: "Type_0_has_no_property_1_2460", message: "Type '{0}' has no property '{1}'." }, | |
Type_0_is_not_an_array_type: { code: 2461, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_an_array_type_2461", message: "Type '{0}' is not an array type." }, | |
A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: ts.DiagnosticCategory.Error, key: "A_rest_element_must_be_last_in_an_array_destructuring_pattern_2462", message: "A rest element must be last in an array destructuring pattern" }, | |
A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: ts.DiagnosticCategory.Error, key: "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463", message: "A binding pattern parameter cannot be optional in an implementation signature." }, | |
A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { code: 2464, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464", message: "A computed property name must be of type 'string', 'number', 'symbol', or 'any'." }, | |
this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_computed_property_name_2465", message: "'this' cannot be referenced in a computed property name." }, | |
super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: ts.DiagnosticCategory.Error, key: "super_cannot_be_referenced_in_a_computed_property_name_2466", message: "'super' cannot be referenced in a computed property name." }, | |
A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2467, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467", message: "A computed property name cannot reference a type parameter from its containing type." }, | |
Cannot_find_global_value_0: { code: 2468, category: ts.DiagnosticCategory.Error, key: "Cannot_find_global_value_0_2468", message: "Cannot find global value '{0}'." }, | |
The_0_operator_cannot_be_applied_to_type_symbol: { code: 2469, category: ts.DiagnosticCategory.Error, key: "The_0_operator_cannot_be_applied_to_type_symbol_2469", message: "The '{0}' operator cannot be applied to type 'symbol'." }, | |
Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { code: 2470, category: ts.DiagnosticCategory.Error, key: "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470", message: "'Symbol' reference does not refer to the global Symbol constructor object." }, | |
A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { code: 2471, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_of_the_form_0_must_be_of_type_symbol_2471", message: "A computed property name of the form '{0}' must be of type 'symbol'." }, | |
Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: { code: 2472, category: ts.DiagnosticCategory.Error, key: "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472", message: "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher." }, | |
Enum_declarations_must_all_be_const_or_non_const: { code: 2473, category: ts.DiagnosticCategory.Error, key: "Enum_declarations_must_all_be_const_or_non_const_2473", message: "Enum declarations must all be const or non-const." }, | |
In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 2474, category: ts.DiagnosticCategory.Error, key: "In_const_enum_declarations_member_initializer_must_be_constant_expression_2474", message: "In 'const' enum declarations member initializer must be constant expression." }, | |
const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 2475, category: ts.DiagnosticCategory.Error, key: "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475", message: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, | |
A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 2476, category: ts.DiagnosticCategory.Error, key: "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476", message: "A const enum member can only be accessed using a string literal." }, | |
const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 2477, category: ts.DiagnosticCategory.Error, key: "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477", message: "'const' enum member initializer was evaluated to a non-finite value." }, | |
const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 2478, category: ts.DiagnosticCategory.Error, key: "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478", message: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, | |
Property_0_does_not_exist_on_const_enum_1: { code: 2479, category: ts.DiagnosticCategory.Error, key: "Property_0_does_not_exist_on_const_enum_1_2479", message: "Property '{0}' does not exist on 'const' enum '{1}'." }, | |
let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { code: 2480, category: ts.DiagnosticCategory.Error, key: "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480", message: "'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: { code: 2481, category: ts.DiagnosticCategory.Error, key: "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481", message: "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: { code: 2483, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483", message: "The left-hand side of a 'for...of' statement cannot use a type annotation." }, | |
Export_declaration_conflicts_with_exported_declaration_of_0: { code: 2484, category: ts.DiagnosticCategory.Error, key: "Export_declaration_conflicts_with_exported_declaration_of_0_2484", message: "Export declaration conflicts with exported declaration of '{0}'" }, | |
The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property: { code: 2485, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property_2485", message: "The left-hand side of a 'for...of' statement cannot be a constant or a read-only property." }, | |
The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property: { code: 2486, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property_2486", message: "The left-hand side of a 'for...in' statement cannot be a constant or a read-only property." }, | |
Invalid_left_hand_side_in_for_of_statement: { code: 2487, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_in_for_of_statement_2487", message: "Invalid left-hand side in 'for...of' statement." }, | |
Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: { code: 2488, category: ts.DiagnosticCategory.Error, key: "Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488", message: "Type must have a '[Symbol.iterator]()' method that returns an iterator." }, | |
An_iterator_must_have_a_next_method: { code: 2489, category: ts.DiagnosticCategory.Error, key: "An_iterator_must_have_a_next_method_2489", message: "An iterator must have a 'next()' method." }, | |
The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: { code: 2490, category: ts.DiagnosticCategory.Error, key: "The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property_2490", message: "The type returned by the 'next()' method of an iterator must have a 'value' property." }, | |
The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: { code: 2491, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491", message: "The left-hand side of a 'for...in' statement cannot be a destructuring pattern." }, | |
Cannot_redeclare_identifier_0_in_catch_clause: { code: 2492, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_identifier_0_in_catch_clause_2492", message: "Cannot redeclare identifier '{0}' in catch clause" }, | |
Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: { code: 2493, category: ts.DiagnosticCategory.Error, key: "Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2_2493", message: "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'." }, | |
Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: { code: 2494, category: ts.DiagnosticCategory.Error, key: "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494", message: "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: { code: 2495, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_an_array_type_or_a_string_type_2495", message: "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: { code: 2496, category: ts.DiagnosticCategory.Error, key: "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496", message: "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression." }, | |
Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: { code: 2497, category: ts.DiagnosticCategory.Error, key: "Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct_2497", message: "Module '{0}' resolves to a non-module entity and cannot be imported using this construct." }, | |
Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: { code: 2498, category: ts.DiagnosticCategory.Error, key: "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498", message: "Module '{0}' uses 'export =' and cannot be used with 'export *'." }, | |
An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2499, category: ts.DiagnosticCategory.Error, key: "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499", message: "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: { code: 2500, category: ts.DiagnosticCategory.Error, key: "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500", message: "A class can only implement an identifier/qualified-name with optional type arguments." }, | |
A_rest_element_cannot_contain_a_binding_pattern: { code: 2501, category: ts.DiagnosticCategory.Error, key: "A_rest_element_cannot_contain_a_binding_pattern_2501", message: "A rest element cannot contain a binding pattern." }, | |
_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 2502, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502", message: "'{0}' is referenced directly or indirectly in its own type annotation." }, | |
Cannot_find_namespace_0: { code: 2503, category: ts.DiagnosticCategory.Error, key: "Cannot_find_namespace_0_2503", message: "Cannot find namespace '{0}'." }, | |
No_best_common_type_exists_among_yield_expressions: { code: 2504, category: ts.DiagnosticCategory.Error, key: "No_best_common_type_exists_among_yield_expressions_2504", message: "No best common type exists among yield expressions." }, | |
A_generator_cannot_have_a_void_type_annotation: { code: 2505, category: ts.DiagnosticCategory.Error, key: "A_generator_cannot_have_a_void_type_annotation_2505", message: "A generator cannot have a 'void' type annotation." }, | |
_0_is_referenced_directly_or_indirectly_in_its_own_base_expression: { code: 2506, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506", message: "'{0}' is referenced directly or indirectly in its own base expression." }, | |
Type_0_is_not_a_constructor_function_type: { code: 2507, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_a_constructor_function_type_2507", message: "Type '{0}' is not a constructor function type." }, | |
No_base_constructor_has_the_specified_number_of_type_arguments: { code: 2508, category: ts.DiagnosticCategory.Error, key: "No_base_constructor_has_the_specified_number_of_type_arguments_2508", message: "No base constructor has the specified number of type arguments." }, | |
Base_constructor_return_type_0_is_not_a_class_or_interface_type: { code: 2509, category: ts.DiagnosticCategory.Error, key: "Base_constructor_return_type_0_is_not_a_class_or_interface_type_2509", message: "Base constructor return type '{0}' is not a class or interface type." }, | |
Base_constructors_must_all_have_the_same_return_type: { code: 2510, category: ts.DiagnosticCategory.Error, key: "Base_constructors_must_all_have_the_same_return_type_2510", message: "Base constructors must all have the same return type." }, | |
Cannot_create_an_instance_of_the_abstract_class_0: { code: 2511, category: ts.DiagnosticCategory.Error, key: "Cannot_create_an_instance_of_the_abstract_class_0_2511", message: "Cannot create an instance of the abstract class '{0}'." }, | |
Overload_signatures_must_all_be_abstract_or_non_abstract: { code: 2512, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_abstract_or_non_abstract_2512", message: "Overload signatures must all be abstract or non-abstract." }, | |
Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: { code: 2513, category: ts.DiagnosticCategory.Error, key: "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513", message: "Abstract method '{0}' in class '{1}' cannot be accessed via super expression." }, | |
Classes_containing_abstract_methods_must_be_marked_abstract: { code: 2514, category: ts.DiagnosticCategory.Error, key: "Classes_containing_abstract_methods_must_be_marked_abstract_2514", message: "Classes containing abstract methods must be marked abstract." }, | |
Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: { code: 2515, category: ts.DiagnosticCategory.Error, key: "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515", message: "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'." }, | |
All_declarations_of_an_abstract_method_must_be_consecutive: { code: 2516, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_an_abstract_method_must_be_consecutive_2516", message: "All declarations of an abstract method must be consecutive." }, | |
Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: { code: 2517, category: ts.DiagnosticCategory.Error, key: "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517", message: "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: { code: 2518, category: ts.DiagnosticCategory.Error, key: "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518", message: "A 'this'-based type guard is not compatible with a parameter-based type guard." }, | |
Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: { code: 2520, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520", message: "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions." }, | |
Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: { code: 2521, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521", message: "Expression resolves to variable declaration '{0}' that compiler uses to support async functions." }, | |
The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_function_expression: { code: 2522, category: ts.DiagnosticCategory.Error, key: "The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_2522", message: "The 'arguments' object cannot be referenced in an async arrow function. Consider using a standard async function expression." }, | |
yield_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2523, category: ts.DiagnosticCategory.Error, key: "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", message: "'yield' expressions cannot be used in a parameter initializer." }, | |
await_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2524, category: ts.DiagnosticCategory.Error, key: "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", message: "'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: { code: 2525, category: ts.DiagnosticCategory.Error, key: "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", message: "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: { code: 2526, category: ts.DiagnosticCategory.Error, key: "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", message: "A 'this' type is available only in a non-static member of a class or interface." }, | |
The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary: { code: 2527, category: ts.DiagnosticCategory.Error, key: "The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary_2527", message: "The inferred type of '{0}' references an inaccessible 'this' type. A type annotation is necessary." }, | |
A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, | |
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, | |
Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, | |
Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, | |
Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, | |
Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, | |
JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, | |
The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, | |
JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "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: { code: 2603, category: ts.DiagnosticCategory.Error, key: "Property_0_in_type_1_is_not_assignable_to_type_2_2603", message: "Property '{0}' in type '{1}' is not assignable to type '{2}'" }, | |
JSX_element_type_0_does_not_have_any_construct_or_call_signatures: { code: 2604, category: ts.DiagnosticCategory.Error, key: "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604", message: "JSX element type '{0}' does not have any construct or call signatures." }, | |
JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: { code: 2605, category: ts.DiagnosticCategory.Error, key: "JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements_2605", message: "JSX element type '{0}' is not a constructor function for JSX elements." }, | |
Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: { code: 2606, category: ts.DiagnosticCategory.Error, key: "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606", message: "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: { code: 2607, category: ts.DiagnosticCategory.Error, key: "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607", message: "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: { code: 2608, category: ts.DiagnosticCategory.Error, key: "The_global_type_JSX_0_may_not_have_more_than_one_property_2608", message: "The global type 'JSX.{0}' may not have more than one property" }, | |
Cannot_emit_namespaced_JSX_elements_in_React: { code: 2650, category: ts.DiagnosticCategory.Error, key: "Cannot_emit_namespaced_JSX_elements_in_React_2650", message: "Cannot emit namespaced JSX elements in React" }, | |
A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: { code: 2651, category: ts.DiagnosticCategory.Error, key: "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", message: "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: { code: 2652, category: ts.DiagnosticCategory.Error, key: "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", message: "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: { code: 2653, category: ts.DiagnosticCategory.Error, key: "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653", message: "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'." }, | |
Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: { code: 2654, category: ts.DiagnosticCategory.Error, key: "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654", message: "Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition." }, | |
Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: { code: 2656, category: ts.DiagnosticCategory.Error, key: "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656", message: "Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition." }, | |
JSX_expressions_must_have_one_parent_element: { code: 2657, category: ts.DiagnosticCategory.Error, key: "JSX_expressions_must_have_one_parent_element_2657", message: "JSX expressions must have one parent element" }, | |
Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "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: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'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: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'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: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, | |
Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, | |
Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, | |
Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, | |
Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope: { code: 2665, category: ts.DiagnosticCategory.Error, key: "Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope_2665", message: "Module augmentation cannot introduce new names in the top level scope." }, | |
Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "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: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "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: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'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: { code: 2669, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", message: "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: { code: 2670, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", message: "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: { code: 2671, category: ts.DiagnosticCategory.Error, key: "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", message: "Cannot augment module '{0}' because it resolves to a non-module entity." }, | |
Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: { code: 2672, category: ts.DiagnosticCategory.Error, key: "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672", message: "Cannot assign a '{0}' constructor type to a '{1}' constructor type." }, | |
Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: { code: 2673, category: ts.DiagnosticCategory.Error, key: "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673", message: "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: { code: 2674, category: ts.DiagnosticCategory.Error, key: "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674", message: "Constructor of class '{0}' is protected and only accessible within the class declaration." }, | |
Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: { code: 2675, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675", message: "Cannot extend a class '{0}'. Class constructor is marked as private." }, | |
Accessors_must_both_be_abstract_or_non_abstract: { code: 2676, category: ts.DiagnosticCategory.Error, key: "Accessors_must_both_be_abstract_or_non_abstract_2676", message: "Accessors must both be abstract or non-abstract." }, | |
A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: { code: 2677, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677", message: "A type predicate's type must be assignable to its parameter's type." }, | |
Type_0_is_not_comparable_to_type_1: { code: 2678, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_comparable_to_type_1_2678", message: "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: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, | |
A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, | |
A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, | |
A_setter_cannot_have_a_this_parameter: { code: 2682, category: ts.DiagnosticCategory.Error, key: "A_setter_cannot_have_a_this_parameter_2682", message: "A setter cannot have a 'this' parameter." }, | |
this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'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: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, | |
The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, | |
Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import_declaration_0_is_using_private_name_1_4000", message: "Import declaration '{0}' is using private name '{1}'." }, | |
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", message: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, | |
Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", message: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, | |
Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006", message: "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: { code: 4008, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008", message: "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: { code: 4010, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010", message: "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: { code: 4012, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012", message: "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: { code: 4014, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014", message: "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: { code: 4016, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016", message: "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: { code: 4019, category: ts.DiagnosticCategory.Error, key: "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019", message: "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: { code: 4020, category: ts.DiagnosticCategory.Error, key: "Extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020", message: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, | |
Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: ts.DiagnosticCategory.Error, key: "Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022", message: "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: { code: 4023, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", message: "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: { code: 4024, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024", message: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, | |
Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_private_name_1_4025", message: "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: { code: 4026, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026", message: "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: { code: 4027, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027", message: "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: { code: 4028, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028", message: "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: { code: 4029, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029", message: "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: { code: 4030, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030", message: "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: { code: 4031, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031", message: "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: { code: 4032, category: ts.DiagnosticCategory.Error, key: "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032", message: "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: { code: 4033, category: ts.DiagnosticCategory.Error, key: "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033", message: "Property '{0}' of exported interface has or is using private name '{1}'." }, | |
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_4034", message: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, | |
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1_4035", message: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, | |
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_4036", message: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, | |
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1_4037", message: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, | |
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_externa_4038", message: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, | |
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_4039", message: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, | |
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0_4040", message: "Return type of public static property getter from exported class has or is using private name '{0}'." }, | |
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_modul_4041", message: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, | |
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_4042", message: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, | |
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0_4043", message: "Return type of public property getter from exported class has or is using private name '{0}'." }, | |
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044", message: "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: { code: 4045, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045", message: "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: { code: 4046, category: ts.DiagnosticCategory.Error, key: "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046", message: "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: { code: 4047, category: ts.DiagnosticCategory.Error, key: "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047", message: "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: { code: 4048, category: ts.DiagnosticCategory.Error, key: "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048", message: "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: { code: 4049, category: ts.DiagnosticCategory.Error, key: "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049", message: "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: { code: 4050, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050", message: "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: { code: 4051, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051", message: "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: { code: 4052, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052", message: "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: { code: 4053, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053", message: "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: { code: 4054, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054", message: "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: { code: 4055, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055", message: "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: { code: 4056, category: ts.DiagnosticCategory.Error, key: "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056", message: "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: { code: 4057, category: ts.DiagnosticCategory.Error, key: "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057", message: "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: { code: 4058, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058", message: "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: { code: 4059, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059", message: "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: { code: 4060, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_private_name_0_4060", message: "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: { code: 4061, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061", message: "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: { code: 4062, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062", message: "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: { code: 4063, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063", message: "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: { code: 4064, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064", message: "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: { code: 4065, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065", message: "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: { code: 4066, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066", message: "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: { code: 4067, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067", message: "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: { code: 4068, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068", message: "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: { code: 4069, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069", message: "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: { code: 4070, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070", message: "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: { code: 4071, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071", message: "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: { code: 4072, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072", message: "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: { code: 4073, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073", message: "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: { code: 4074, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074", message: "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: { code: 4075, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075", message: "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: { code: 4076, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076", message: "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: { code: 4077, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077", message: "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: { code: 4078, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", message: "Parameter '{0}' of exported function has or is using private name '{1}'." }, | |
Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: ts.DiagnosticCategory.Error, key: "Exported_type_alias_0_has_or_is_using_private_name_1_4081", message: "Exported type alias '{0}' has or is using private name '{1}'." }, | |
Default_export_of_the_module_has_or_is_using_private_name_0: { code: 4082, category: ts.DiagnosticCategory.Error, key: "Default_export_of_the_module_has_or_is_using_private_name_0_4082", message: "Default export of the module has or is using private name '{0}'." }, | |
Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_to_resolve_this_conflict: { code: 4090, category: ts.DiagnosticCategory.Message, key: "Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_t_4090", message: "Conflicting library definitions for '{0}' found at '{1}' and '{2}'. Copy the correct file to the 'typings' folder to resolve this conflict." }, | |
The_current_host_does_not_support_the_0_option: { code: 5001, category: ts.DiagnosticCategory.Error, key: "The_current_host_does_not_support_the_0_option_5001", message: "The current host does not support the '{0}' option." }, | |
Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: ts.DiagnosticCategory.Error, key: "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", message: "Cannot find the common subdirectory path for the input files." }, | |
Cannot_read_file_0_Colon_1: { code: 5012, category: ts.DiagnosticCategory.Error, key: "Cannot_read_file_0_Colon_1_5012", message: "Cannot read file '{0}': {1}" }, | |
Unsupported_file_encoding: { code: 5013, category: ts.DiagnosticCategory.Error, key: "Unsupported_file_encoding_5013", message: "Unsupported file encoding." }, | |
Failed_to_parse_file_0_Colon_1: { code: 5014, category: ts.DiagnosticCategory.Error, key: "Failed_to_parse_file_0_Colon_1_5014", message: "Failed to parse file '{0}': {1}." }, | |
Unknown_compiler_option_0: { code: 5023, category: ts.DiagnosticCategory.Error, key: "Unknown_compiler_option_0_5023", message: "Unknown compiler option '{0}'." }, | |
Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: ts.DiagnosticCategory.Error, key: "Compiler_option_0_requires_a_value_of_type_1_5024", message: "Compiler option '{0}' requires a value of type {1}." }, | |
Could_not_write_file_0_Colon_1: { code: 5033, category: ts.DiagnosticCategory.Error, key: "Could_not_write_file_0_Colon_1_5033", message: "Could not write file '{0}': {1}" }, | |
Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: ts.DiagnosticCategory.Error, key: "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042", message: "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: { code: 5047, category: ts.DiagnosticCategory.Error, key: "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047", message: "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher." }, | |
Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: { code: 5051, category: ts.DiagnosticCategory.Error, key: "Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_prov_5051", message: "Option 'inlineSources' can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided." }, | |
Option_0_cannot_be_specified_without_specifying_option_1: { code: 5052, category: ts.DiagnosticCategory.Error, key: "Option_0_cannot_be_specified_without_specifying_option_1_5052", message: "Option '{0}' cannot be specified without specifying option '{1}'." }, | |
Option_0_cannot_be_specified_with_option_1: { code: 5053, category: ts.DiagnosticCategory.Error, key: "Option_0_cannot_be_specified_with_option_1_5053", message: "Option '{0}' cannot be specified with option '{1}'." }, | |
A_tsconfig_json_file_is_already_defined_at_Colon_0: { code: 5054, category: ts.DiagnosticCategory.Error, key: "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054", message: "A 'tsconfig.json' file is already defined at: '{0}'." }, | |
Cannot_write_file_0_because_it_would_overwrite_input_file: { code: 5055, category: ts.DiagnosticCategory.Error, key: "Cannot_write_file_0_because_it_would_overwrite_input_file_5055", message: "Cannot write file '{0}' because it would overwrite input file." }, | |
Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: { code: 5056, category: ts.DiagnosticCategory.Error, key: "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056", message: "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: { code: 5057, category: ts.DiagnosticCategory.Error, key: "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057", message: "Cannot find a tsconfig.json file at the specified directory: '{0}'" }, | |
The_specified_path_does_not_exist_Colon_0: { code: 5058, category: ts.DiagnosticCategory.Error, key: "The_specified_path_does_not_exist_Colon_0_5058", message: "The specified path does not exist: '{0}'" }, | |
Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: { code: 5059, category: ts.DiagnosticCategory.Error, key: "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059", message: "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier." }, | |
Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, | |
Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, | |
Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, | |
Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, | |
Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, | |
Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, | |
Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, | |
Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, | |
Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", message: "Specify the location where debugger should locate TypeScript files instead of source locations." }, | |
Watch_input_files: { code: 6005, category: ts.DiagnosticCategory.Message, key: "Watch_input_files_6005", message: "Watch input files." }, | |
Redirect_output_structure_to_the_directory: { code: 6006, category: ts.DiagnosticCategory.Message, key: "Redirect_output_structure_to_the_directory_6006", message: "Redirect output structure to the directory." }, | |
Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: ts.DiagnosticCategory.Message, key: "Do_not_erase_const_enum_declarations_in_generated_code_6007", message: "Do not erase const enum declarations in generated code." }, | |
Do_not_emit_outputs_if_any_errors_were_reported: { code: 6008, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_outputs_if_any_errors_were_reported_6008", message: "Do not emit outputs if any errors were reported." }, | |
Do_not_emit_comments_to_output: { code: 6009, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_comments_to_output_6009", message: "Do not emit comments to output." }, | |
Do_not_emit_outputs: { code: 6010, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_outputs_6010", message: "Do not emit outputs." }, | |
Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: { code: 6011, category: ts.DiagnosticCategory.Message, key: "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011", message: "Allow default imports from modules with no default export. This does not affect code emit, just typechecking." }, | |
Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015: { code: 6015, category: ts.DiagnosticCategory.Message, key: "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015_6015", message: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES2015'" }, | |
Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015: { code: 6016, category: ts.DiagnosticCategory.Message, key: "Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015_6016", message: "Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'" }, | |
Print_this_message: { code: 6017, category: ts.DiagnosticCategory.Message, key: "Print_this_message_6017", message: "Print this message." }, | |
Print_the_compiler_s_version: { code: 6019, category: ts.DiagnosticCategory.Message, key: "Print_the_compiler_s_version_6019", message: "Print the compiler's version." }, | |
Compile_the_project_in_the_given_directory: { code: 6020, category: ts.DiagnosticCategory.Message, key: "Compile_the_project_in_the_given_directory_6020", message: "Compile the project in the given directory." }, | |
Syntax_Colon_0: { code: 6023, category: ts.DiagnosticCategory.Message, key: "Syntax_Colon_0_6023", message: "Syntax: {0}" }, | |
options: { code: 6024, category: ts.DiagnosticCategory.Message, key: "options_6024", message: "options" }, | |
file: { code: 6025, category: ts.DiagnosticCategory.Message, key: "file_6025", message: "file" }, | |
Examples_Colon_0: { code: 6026, category: ts.DiagnosticCategory.Message, key: "Examples_Colon_0_6026", message: "Examples: {0}" }, | |
Options_Colon: { code: 6027, category: ts.DiagnosticCategory.Message, key: "Options_Colon_6027", message: "Options:" }, | |
Version_0: { code: 6029, category: ts.DiagnosticCategory.Message, key: "Version_0_6029", message: "Version {0}" }, | |
Insert_command_line_options_and_files_from_a_file: { code: 6030, category: ts.DiagnosticCategory.Message, key: "Insert_command_line_options_and_files_from_a_file_6030", message: "Insert command line options and files from a file." }, | |
File_change_detected_Starting_incremental_compilation: { code: 6032, category: ts.DiagnosticCategory.Message, key: "File_change_detected_Starting_incremental_compilation_6032", message: "File change detected. Starting incremental compilation..." }, | |
KIND: { code: 6034, category: ts.DiagnosticCategory.Message, key: "KIND_6034", message: "KIND" }, | |
FILE: { code: 6035, category: ts.DiagnosticCategory.Message, key: "FILE_6035", message: "FILE" }, | |
VERSION: { code: 6036, category: ts.DiagnosticCategory.Message, key: "VERSION_6036", message: "VERSION" }, | |
LOCATION: { code: 6037, category: ts.DiagnosticCategory.Message, key: "LOCATION_6037", message: "LOCATION" }, | |
DIRECTORY: { code: 6038, category: ts.DiagnosticCategory.Message, key: "DIRECTORY_6038", message: "DIRECTORY" }, | |
Compilation_complete_Watching_for_file_changes: { code: 6042, category: ts.DiagnosticCategory.Message, key: "Compilation_complete_Watching_for_file_changes_6042", message: "Compilation complete. Watching for file changes." }, | |
Generates_corresponding_map_file: { code: 6043, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_map_file_6043", message: "Generates corresponding '.map' file." }, | |
Compiler_option_0_expects_an_argument: { code: 6044, category: ts.DiagnosticCategory.Error, key: "Compiler_option_0_expects_an_argument_6044", message: "Compiler option '{0}' expects an argument." }, | |
Unterminated_quoted_string_in_response_file_0: { code: 6045, category: ts.DiagnosticCategory.Error, key: "Unterminated_quoted_string_in_response_file_0_6045", message: "Unterminated quoted string in response file '{0}'." }, | |
Argument_for_0_option_must_be_Colon_1: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument_for_0_option_must_be_Colon_1_6046", message: "Argument for '{0}' option must be: {1}" }, | |
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: ts.DiagnosticCategory.Error, key: "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", message: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'." }, | |
Unsupported_locale_0: { code: 6049, category: ts.DiagnosticCategory.Error, key: "Unsupported_locale_0_6049", message: "Unsupported locale '{0}'." }, | |
Unable_to_open_file_0: { code: 6050, category: ts.DiagnosticCategory.Error, key: "Unable_to_open_file_0_6050", message: "Unable to open file '{0}'." }, | |
Corrupted_locale_file_0: { code: 6051, category: ts.DiagnosticCategory.Error, key: "Corrupted_locale_file_0_6051", message: "Corrupted locale file {0}." }, | |
Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: ts.DiagnosticCategory.Message, key: "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052", message: "Raise error on expressions and declarations with an implied 'any' type." }, | |
File_0_not_found: { code: 6053, category: ts.DiagnosticCategory.Error, key: "File_0_not_found_6053", message: "File '{0}' not found." }, | |
File_0_has_unsupported_extension_The_only_supported_extensions_are_1: { code: 6054, category: ts.DiagnosticCategory.Error, key: "File_0_has_unsupported_extension_The_only_supported_extensions_are_1_6054", message: "File '{0}' has unsupported extension. The only supported extensions are {1}." }, | |
Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: ts.DiagnosticCategory.Message, key: "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055", message: "Suppress noImplicitAny errors for indexing objects lacking index signatures." }, | |
Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056", message: "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: { code: 6058, category: ts.DiagnosticCategory.Message, key: "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058", message: "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: { code: 6059, category: ts.DiagnosticCategory.Error, key: "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059", message: "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: { code: 6060, category: ts.DiagnosticCategory.Message, key: "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060", message: "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)." }, | |
NEWLINE: { code: 6061, category: ts.DiagnosticCategory.Message, key: "NEWLINE_6061", message: "NEWLINE" }, | |
Option_0_can_only_be_specified_in_tsconfig_json_file: { code: 6064, category: ts.DiagnosticCategory.Error, key: "Option_0_can_only_be_specified_in_tsconfig_json_file_6064", message: "Option '{0}' can only be specified in 'tsconfig.json' file." }, | |
Enables_experimental_support_for_ES7_decorators: { code: 6065, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_ES7_decorators_6065", message: "Enables experimental support for ES7 decorators." }, | |
Enables_experimental_support_for_emitting_type_metadata_for_decorators: { code: 6066, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066", message: "Enables experimental support for emitting type metadata for decorators." }, | |
Enables_experimental_support_for_ES7_async_functions: { code: 6068, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_ES7_async_functions_6068", message: "Enables experimental support for ES7 async functions." }, | |
Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: { code: 6069, category: ts.DiagnosticCategory.Message, key: "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069", message: "Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)." }, | |
Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: { code: 6070, category: ts.DiagnosticCategory.Message, key: "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070", message: "Initializes a TypeScript project and creates a tsconfig.json file." }, | |
Successfully_created_a_tsconfig_json_file: { code: 6071, category: ts.DiagnosticCategory.Message, key: "Successfully_created_a_tsconfig_json_file_6071", message: "Successfully created a tsconfig.json file." }, | |
Suppress_excess_property_checks_for_object_literals: { code: 6072, category: ts.DiagnosticCategory.Message, key: "Suppress_excess_property_checks_for_object_literals_6072", message: "Suppress excess property checks for object literals." }, | |
Stylize_errors_and_messages_using_color_and_context_experimental: { code: 6073, category: ts.DiagnosticCategory.Message, key: "Stylize_errors_and_messages_using_color_and_context_experimental_6073", message: "Stylize errors and messages using color and context. (experimental)" }, | |
Do_not_report_errors_on_unused_labels: { code: 6074, category: ts.DiagnosticCategory.Message, key: "Do_not_report_errors_on_unused_labels_6074", message: "Do not report errors on unused labels." }, | |
Report_error_when_not_all_code_paths_in_function_return_a_value: { code: 6075, category: ts.DiagnosticCategory.Message, key: "Report_error_when_not_all_code_paths_in_function_return_a_value_6075", message: "Report error when not all code paths in function return a value." }, | |
Report_errors_for_fallthrough_cases_in_switch_statement: { code: 6076, category: ts.DiagnosticCategory.Message, key: "Report_errors_for_fallthrough_cases_in_switch_statement_6076", message: "Report errors for fallthrough cases in switch statement." }, | |
Do_not_report_errors_on_unreachable_code: { code: 6077, category: ts.DiagnosticCategory.Message, key: "Do_not_report_errors_on_unreachable_code_6077", message: "Do not report errors on unreachable code." }, | |
Disallow_inconsistently_cased_references_to_the_same_file: { code: 6078, category: ts.DiagnosticCategory.Message, key: "Disallow_inconsistently_cased_references_to_the_same_file_6078", message: "Disallow inconsistently-cased references to the same file." }, | |
Specify_library_files_to_be_included_in_the_compilation_Colon: { code: 6079, category: ts.DiagnosticCategory.Message, key: "Specify_library_files_to_be_included_in_the_compilation_Colon_6079", message: "Specify library files to be included in the compilation: " }, | |
Specify_JSX_code_generation_Colon_preserve_or_react: { code: 6080, category: ts.DiagnosticCategory.Message, key: "Specify_JSX_code_generation_Colon_preserve_or_react_6080", message: "Specify JSX code generation: 'preserve' or 'react'" }, | |
Only_amd_and_system_modules_are_supported_alongside_0: { code: 6082, category: ts.DiagnosticCategory.Error, key: "Only_amd_and_system_modules_are_supported_alongside_0_6082", message: "Only 'amd' and 'system' modules are supported alongside --{0}." }, | |
Base_directory_to_resolve_non_absolute_module_names: { code: 6083, category: ts.DiagnosticCategory.Message, key: "Base_directory_to_resolve_non_absolute_module_names_6083", message: "Base directory to resolve non-absolute module names." }, | |
Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit: { code: 6084, category: ts.DiagnosticCategory.Message, key: "Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit_6084", message: "Specify the object invoked for createElement and __spread when targeting 'react' JSX emit" }, | |
Enable_tracing_of_the_name_resolution_process: { code: 6085, category: ts.DiagnosticCategory.Message, key: "Enable_tracing_of_the_name_resolution_process_6085", message: "Enable tracing of the name resolution process." }, | |
Resolving_module_0_from_1: { code: 6086, category: ts.DiagnosticCategory.Message, key: "Resolving_module_0_from_1_6086", message: "======== Resolving module '{0}' from '{1}'. ========" }, | |
Explicitly_specified_module_resolution_kind_Colon_0: { code: 6087, category: ts.DiagnosticCategory.Message, key: "Explicitly_specified_module_resolution_kind_Colon_0_6087", message: "Explicitly specified module resolution kind: '{0}'." }, | |
Module_resolution_kind_is_not_specified_using_0: { code: 6088, category: ts.DiagnosticCategory.Message, key: "Module_resolution_kind_is_not_specified_using_0_6088", message: "Module resolution kind is not specified, using '{0}'." }, | |
Module_name_0_was_successfully_resolved_to_1: { code: 6089, category: ts.DiagnosticCategory.Message, key: "Module_name_0_was_successfully_resolved_to_1_6089", message: "======== Module name '{0}' was successfully resolved to '{1}'. ========" }, | |
Module_name_0_was_not_resolved: { code: 6090, category: ts.DiagnosticCategory.Message, key: "Module_name_0_was_not_resolved_6090", message: "======== Module name '{0}' was not resolved. ========" }, | |
paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: { code: 6091, category: ts.DiagnosticCategory.Message, key: "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091", message: "'paths' option is specified, looking for a pattern to match module name '{0}'." }, | |
Module_name_0_matched_pattern_1: { code: 6092, category: ts.DiagnosticCategory.Message, key: "Module_name_0_matched_pattern_1_6092", message: "Module name '{0}', matched pattern '{1}'." }, | |
Trying_substitution_0_candidate_module_location_Colon_1: { code: 6093, category: ts.DiagnosticCategory.Message, key: "Trying_substitution_0_candidate_module_location_Colon_1_6093", message: "Trying substitution '{0}', candidate module location: '{1}'." }, | |
Resolving_module_name_0_relative_to_base_url_1_2: { code: 6094, category: ts.DiagnosticCategory.Message, key: "Resolving_module_name_0_relative_to_base_url_1_2_6094", message: "Resolving module name '{0}' relative to base url '{1}' - '{2}'." }, | |
Loading_module_as_file_Slash_folder_candidate_module_location_0: { code: 6095, category: ts.DiagnosticCategory.Message, key: "Loading_module_as_file_Slash_folder_candidate_module_location_0_6095", message: "Loading module as file / folder, candidate module location '{0}'." }, | |
File_0_does_not_exist: { code: 6096, category: ts.DiagnosticCategory.Message, key: "File_0_does_not_exist_6096", message: "File '{0}' does not exist." }, | |
File_0_exist_use_it_as_a_name_resolution_result: { code: 6097, category: ts.DiagnosticCategory.Message, key: "File_0_exist_use_it_as_a_name_resolution_result_6097", message: "File '{0}' exist - use it as a name resolution result." }, | |
Loading_module_0_from_node_modules_folder: { code: 6098, category: ts.DiagnosticCategory.Message, key: "Loading_module_0_from_node_modules_folder_6098", message: "Loading module '{0}' from 'node_modules' folder." }, | |
Found_package_json_at_0: { code: 6099, category: ts.DiagnosticCategory.Message, key: "Found_package_json_at_0_6099", message: "Found 'package.json' at '{0}'." }, | |
package_json_does_not_have_types_field: { code: 6100, category: ts.DiagnosticCategory.Message, key: "package_json_does_not_have_types_field_6100", message: "'package.json' does not have 'types' field." }, | |
package_json_has_0_field_1_that_references_2: { code: 6101, category: ts.DiagnosticCategory.Message, key: "package_json_has_0_field_1_that_references_2_6101", message: "'package.json' has '{0}' field '{1}' that references '{2}'." }, | |
Allow_javascript_files_to_be_compiled: { code: 6102, category: ts.DiagnosticCategory.Message, key: "Allow_javascript_files_to_be_compiled_6102", message: "Allow javascript files to be compiled." }, | |
Option_0_should_have_array_of_strings_as_a_value: { code: 6103, category: ts.DiagnosticCategory.Error, key: "Option_0_should_have_array_of_strings_as_a_value_6103", message: "Option '{0}' should have array of strings as a value." }, | |
Checking_if_0_is_the_longest_matching_prefix_for_1_2: { code: 6104, category: ts.DiagnosticCategory.Message, key: "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104", message: "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'." }, | |
Expected_type_of_0_field_in_package_json_to_be_string_got_1: { code: 6105, category: ts.DiagnosticCategory.Message, key: "Expected_type_of_0_field_in_package_json_to_be_string_got_1_6105", message: "Expected type of '{0}' field in 'package.json' to be 'string', got '{1}'." }, | |
baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: { code: 6106, category: ts.DiagnosticCategory.Message, key: "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106", message: "'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: { code: 6107, category: ts.DiagnosticCategory.Message, key: "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107", message: "'rootDirs' option is set, using it to resolve relative module name '{0}'" }, | |
Longest_matching_prefix_for_0_is_1: { code: 6108, category: ts.DiagnosticCategory.Message, key: "Longest_matching_prefix_for_0_is_1_6108", message: "Longest matching prefix for '{0}' is '{1}'" }, | |
Loading_0_from_the_root_dir_1_candidate_location_2: { code: 6109, category: ts.DiagnosticCategory.Message, key: "Loading_0_from_the_root_dir_1_candidate_location_2_6109", message: "Loading '{0}' from the root dir '{1}', candidate location '{2}'" }, | |
Trying_other_entries_in_rootDirs: { code: 6110, category: ts.DiagnosticCategory.Message, key: "Trying_other_entries_in_rootDirs_6110", message: "Trying other entries in 'rootDirs'" }, | |
Module_resolution_using_rootDirs_has_failed: { code: 6111, category: ts.DiagnosticCategory.Message, key: "Module_resolution_using_rootDirs_has_failed_6111", message: "Module resolution using 'rootDirs' has failed" }, | |
Do_not_emit_use_strict_directives_in_module_output: { code: 6112, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_use_strict_directives_in_module_output_6112", message: "Do not emit 'use strict' directives in module output." }, | |
Enable_strict_null_checks: { code: 6113, category: ts.DiagnosticCategory.Message, key: "Enable_strict_null_checks_6113", message: "Enable strict null checks." }, | |
Unknown_option_excludes_Did_you_mean_exclude: { code: 6114, category: ts.DiagnosticCategory.Error, key: "Unknown_option_excludes_Did_you_mean_exclude_6114", message: "Unknown option 'excludes'. Did you mean 'exclude'?" }, | |
Raise_error_on_this_expressions_with_an_implied_any_type: { code: 6115, category: ts.DiagnosticCategory.Message, key: "Raise_error_on_this_expressions_with_an_implied_any_type_6115", message: "Raise error on 'this' expressions with an implied 'any' type." }, | |
Resolving_type_reference_directive_0_containing_file_1_root_directory_2: { code: 6116, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116", message: "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========" }, | |
Resolving_using_primary_search_paths: { code: 6117, category: ts.DiagnosticCategory.Message, key: "Resolving_using_primary_search_paths_6117", message: "Resolving using primary search paths..." }, | |
Resolving_from_node_modules_folder: { code: 6118, category: ts.DiagnosticCategory.Message, key: "Resolving_from_node_modules_folder_6118", message: "Resolving from node_modules folder..." }, | |
Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: { code: 6119, category: ts.DiagnosticCategory.Message, key: "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119", message: "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========" }, | |
Type_reference_directive_0_was_not_resolved: { code: 6120, category: ts.DiagnosticCategory.Message, key: "Type_reference_directive_0_was_not_resolved_6120", message: "======== Type reference directive '{0}' was not resolved. ========" }, | |
Resolving_with_primary_search_path_0: { code: 6121, category: ts.DiagnosticCategory.Message, key: "Resolving_with_primary_search_path_0_6121", message: "Resolving with primary search path '{0}'" }, | |
Root_directory_cannot_be_determined_skipping_primary_search_paths: { code: 6122, category: ts.DiagnosticCategory.Message, key: "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122", message: "Root directory cannot be determined, skipping primary search paths." }, | |
Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: { code: 6123, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123", message: "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========" }, | |
Type_declaration_files_to_be_included_in_compilation: { code: 6124, category: ts.DiagnosticCategory.Message, key: "Type_declaration_files_to_be_included_in_compilation_6124", message: "Type declaration files to be included in compilation." }, | |
Looking_up_in_node_modules_folder_initial_location_0: { code: 6125, category: ts.DiagnosticCategory.Message, key: "Looking_up_in_node_modules_folder_initial_location_0_6125", message: "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: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "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: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== 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: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, | |
Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, | |
Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, | |
Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, | |
new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: ts.DiagnosticCategory.Error, key: "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009", message: "'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: { code: 7010, category: ts.DiagnosticCategory.Error, key: "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010", message: "'{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: { code: 7011, category: ts.DiagnosticCategory.Error, key: "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011", message: "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: { code: 7013, category: ts.DiagnosticCategory.Error, key: "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013", message: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, | |
Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: { code: 7015, category: ts.DiagnosticCategory.Error, key: "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015", message: "Element implicitly has an 'any' type because index expression is not of type 'number'." }, | |
Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: ts.DiagnosticCategory.Error, key: "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation_7016", message: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, | |
Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: ts.DiagnosticCategory.Error, key: "Index_signature_of_object_type_implicitly_has_an_any_type_7017", message: "Index signature of object type implicitly has an 'any' type." }, | |
Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: ts.DiagnosticCategory.Error, key: "Object_literal_s_property_0_implicitly_has_an_1_type_7018", message: "Object literal's property '{0}' implicitly has an '{1}' type." }, | |
Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: ts.DiagnosticCategory.Error, key: "Rest_parameter_0_implicitly_has_an_any_type_7019", message: "Rest parameter '{0}' implicitly has an 'any[]' type." }, | |
Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: ts.DiagnosticCategory.Error, key: "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020", message: "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: { code: 7022, category: ts.DiagnosticCategory.Error, key: "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022", message: "'{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: { code: 7023, category: ts.DiagnosticCategory.Error, key: "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023", message: "'{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: { code: 7024, category: ts.DiagnosticCategory.Error, key: "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024", message: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, | |
Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: { code: 7025, category: ts.DiagnosticCategory.Error, key: "Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_typ_7025", message: "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type." }, | |
JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: { code: 7026, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026", message: "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists" }, | |
Unreachable_code_detected: { code: 7027, category: ts.DiagnosticCategory.Error, key: "Unreachable_code_detected_7027", message: "Unreachable code detected." }, | |
Unused_label: { code: 7028, category: ts.DiagnosticCategory.Error, key: "Unused_label_7028", message: "Unused label." }, | |
Fallthrough_case_in_switch: { code: 7029, category: ts.DiagnosticCategory.Error, key: "Fallthrough_case_in_switch_7029", message: "Fallthrough case in switch." }, | |
Not_all_code_paths_return_a_value: { code: 7030, category: ts.DiagnosticCategory.Error, key: "Not_all_code_paths_return_a_value_7030", message: "Not all code paths return a value." }, | |
Binding_element_0_implicitly_has_an_1_type: { code: 7031, category: ts.DiagnosticCategory.Error, key: "Binding_element_0_implicitly_has_an_1_type_7031", message: "Binding element '{0}' implicitly has an '{1}' type." }, | |
You_cannot_rename_this_element: { code: 8000, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_this_element_8000", message: "You cannot rename this element." }, | |
You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", message: "You cannot rename elements that are defined in the standard TypeScript library." }, | |
import_can_only_be_used_in_a_ts_file: { code: 8002, category: ts.DiagnosticCategory.Error, key: "import_can_only_be_used_in_a_ts_file_8002", message: "'import ... =' can only be used in a .ts file." }, | |
export_can_only_be_used_in_a_ts_file: { code: 8003, category: ts.DiagnosticCategory.Error, key: "export_can_only_be_used_in_a_ts_file_8003", message: "'export=' can only be used in a .ts file." }, | |
type_parameter_declarations_can_only_be_used_in_a_ts_file: { code: 8004, category: ts.DiagnosticCategory.Error, key: "type_parameter_declarations_can_only_be_used_in_a_ts_file_8004", message: "'type parameter declarations' can only be used in a .ts file." }, | |
implements_clauses_can_only_be_used_in_a_ts_file: { code: 8005, category: ts.DiagnosticCategory.Error, key: "implements_clauses_can_only_be_used_in_a_ts_file_8005", message: "'implements clauses' can only be used in a .ts file." }, | |
interface_declarations_can_only_be_used_in_a_ts_file: { code: 8006, category: ts.DiagnosticCategory.Error, key: "interface_declarations_can_only_be_used_in_a_ts_file_8006", message: "'interface declarations' can only be used in a .ts file." }, | |
module_declarations_can_only_be_used_in_a_ts_file: { code: 8007, category: ts.DiagnosticCategory.Error, key: "module_declarations_can_only_be_used_in_a_ts_file_8007", message: "'module declarations' can only be used in a .ts file." }, | |
type_aliases_can_only_be_used_in_a_ts_file: { code: 8008, category: ts.DiagnosticCategory.Error, key: "type_aliases_can_only_be_used_in_a_ts_file_8008", message: "'type aliases' can only be used in a .ts file." }, | |
_0_can_only_be_used_in_a_ts_file: { code: 8009, category: ts.DiagnosticCategory.Error, key: "_0_can_only_be_used_in_a_ts_file_8009", message: "'{0}' can only be used in a .ts file." }, | |
types_can_only_be_used_in_a_ts_file: { code: 8010, category: ts.DiagnosticCategory.Error, key: "types_can_only_be_used_in_a_ts_file_8010", message: "'types' can only be used in a .ts file." }, | |
type_arguments_can_only_be_used_in_a_ts_file: { code: 8011, category: ts.DiagnosticCategory.Error, key: "type_arguments_can_only_be_used_in_a_ts_file_8011", message: "'type arguments' can only be used in a .ts file." }, | |
parameter_modifiers_can_only_be_used_in_a_ts_file: { code: 8012, category: ts.DiagnosticCategory.Error, key: "parameter_modifiers_can_only_be_used_in_a_ts_file_8012", message: "'parameter modifiers' can only be used in a .ts file." }, | |
property_declarations_can_only_be_used_in_a_ts_file: { code: 8014, category: ts.DiagnosticCategory.Error, key: "property_declarations_can_only_be_used_in_a_ts_file_8014", message: "'property declarations' can only be used in a .ts file." }, | |
enum_declarations_can_only_be_used_in_a_ts_file: { code: 8015, category: ts.DiagnosticCategory.Error, key: "enum_declarations_can_only_be_used_in_a_ts_file_8015", message: "'enum declarations' can only be used in a .ts file." }, | |
type_assertion_expressions_can_only_be_used_in_a_ts_file: { code: 8016, category: ts.DiagnosticCategory.Error, key: "type_assertion_expressions_can_only_be_used_in_a_ts_file_8016", message: "'type assertion expressions' can only be used in a .ts file." }, | |
Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { code: 9002, category: ts.DiagnosticCategory.Error, key: "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002", message: "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses." }, | |
class_expressions_are_not_currently_supported: { code: 9003, category: ts.DiagnosticCategory.Error, key: "class_expressions_are_not_currently_supported_9003", message: "'class' expressions are not currently supported." }, | |
JSX_attributes_must_only_be_assigned_a_non_empty_expression: { code: 17000, category: ts.DiagnosticCategory.Error, key: "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", message: "JSX attributes must only be assigned a non-empty 'expression'." }, | |
JSX_elements_cannot_have_multiple_attributes_with_the_same_name: { code: 17001, category: ts.DiagnosticCategory.Error, key: "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001", message: "JSX elements cannot have multiple attributes with the same name." }, | |
Expected_corresponding_JSX_closing_tag_for_0: { code: 17002, category: ts.DiagnosticCategory.Error, key: "Expected_corresponding_JSX_closing_tag_for_0_17002", message: "Expected corresponding JSX closing tag for '{0}'." }, | |
JSX_attribute_expected: { code: 17003, category: ts.DiagnosticCategory.Error, key: "JSX_attribute_expected_17003", message: "JSX attribute expected." }, | |
Cannot_use_JSX_unless_the_jsx_flag_is_provided: { code: 17004, category: ts.DiagnosticCategory.Error, key: "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004", message: "Cannot use JSX unless the '--jsx' flag is provided." }, | |
A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: { code: 17005, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", message: "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: { code: 17006, category: ts.DiagnosticCategory.Error, key: "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", message: "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: { code: 17007, category: ts.DiagnosticCategory.Error, key: "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", message: "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }, | |
JSX_element_0_has_no_corresponding_closing_tag: { code: 17008, category: ts.DiagnosticCategory.Error, key: "JSX_element_0_has_no_corresponding_closing_tag_17008", message: "JSX element '{0}' has no corresponding closing tag." }, | |
super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { code: 17009, category: ts.DiagnosticCategory.Error, key: "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", message: "'super' must be called before accessing 'this' in the constructor of a derived class." }, | |
Unknown_typing_option_0: { code: 17010, category: ts.DiagnosticCategory.Error, key: "Unknown_typing_option_0_17010", message: "Unknown typing option '{0}'." } | |
}; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
function tokenIsIdentifierOrKeyword(token) { | |
return token >= 69; | |
} | |
ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword; | |
var textToToken = { | |
"abstract": 115, | |
"any": 117, | |
"as": 116, | |
"boolean": 120, | |
"break": 70, | |
"case": 71, | |
"catch": 72, | |
"class": 73, | |
"continue": 75, | |
"const": 74, | |
"constructor": 121, | |
"debugger": 76, | |
"declare": 122, | |
"default": 77, | |
"delete": 78, | |
"do": 79, | |
"else": 80, | |
"enum": 81, | |
"export": 82, | |
"extends": 83, | |
"false": 84, | |
"finally": 85, | |
"for": 86, | |
"from": 135, | |
"function": 87, | |
"get": 123, | |
"if": 88, | |
"implements": 106, | |
"import": 89, | |
"in": 90, | |
"instanceof": 91, | |
"interface": 107, | |
"is": 124, | |
"let": 108, | |
"module": 125, | |
"namespace": 126, | |
"new": 92, | |
"null": 93, | |
"number": 129, | |
"package": 109, | |
"private": 110, | |
"protected": 111, | |
"public": 112, | |
"readonly": 127, | |
"require": 128, | |
"global": 136, | |
"return": 94, | |
"set": 130, | |
"static": 113, | |
"string": 131, | |
"super": 95, | |
"switch": 96, | |
"symbol": 132, | |
"this": 97, | |
"throw": 98, | |
"true": 99, | |
"try": 100, | |
"type": 133, | |
"typeof": 101, | |
"undefined": 134, | |
"var": 102, | |
"void": 103, | |
"while": 104, | |
"with": 105, | |
"yield": 114, | |
"async": 118, | |
"await": 119, | |
"of": 137, | |
"{": 15, | |
"}": 16, | |
"(": 17, | |
")": 18, | |
"[": 19, | |
"]": 20, | |
".": 21, | |
"...": 22, | |
";": 23, | |
",": 24, | |
"<": 25, | |
">": 27, | |
"<=": 28, | |
">=": 29, | |
"==": 30, | |
"!=": 31, | |
"===": 32, | |
"!==": 33, | |
"=>": 34, | |
"+": 35, | |
"-": 36, | |
"**": 38, | |
"*": 37, | |
"/": 39, | |
"%": 40, | |
"++": 41, | |
"--": 42, | |
"<<": 43, | |
"</": 26, | |
">>": 44, | |
">>>": 45, | |
"&": 46, | |
"|": 47, | |
"^": 48, | |
"!": 49, | |
"~": 50, | |
"&&": 51, | |
"||": 52, | |
"?": 53, | |
":": 54, | |
"=": 56, | |
"+=": 57, | |
"-=": 58, | |
"*=": 59, | |
"**=": 60, | |
"/=": 61, | |
"%=": 62, | |
"<<=": 63, | |
">>=": 64, | |
">>>=": 65, | |
"&=": 66, | |
"|=": 67, | |
"^=": 68, | |
"@": 55 | |
}; | |
var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; | |
var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; | |
var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; | |
var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; | |
function lookupInUnicodeMap(code, map) { | |
if (code < map[0]) { | |
return false; | |
} | |
var lo = 0; | |
var hi = map.length; | |
var mid; | |
while (lo + 1 < hi) { | |
mid = lo + (hi - lo) / 2; | |
mid -= mid % 2; | |
if (map[mid] <= code && code <= map[mid + 1]) { | |
return true; | |
} | |
if (code < map[mid]) { | |
hi = mid; | |
} | |
else { | |
lo = mid + 2; | |
} | |
} | |
return false; | |
} | |
function isUnicodeIdentifierStart(code, languageVersion) { | |
return languageVersion >= 1 ? | |
lookupInUnicodeMap(code, unicodeES5IdentifierStart) : | |
lookupInUnicodeMap(code, unicodeES3IdentifierStart); | |
} | |
ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart; | |
function isUnicodeIdentifierPart(code, languageVersion) { | |
return languageVersion >= 1 ? | |
lookupInUnicodeMap(code, unicodeES5IdentifierPart) : | |
lookupInUnicodeMap(code, unicodeES3IdentifierPart); | |
} | |
function makeReverseMap(source) { | |
var result = []; | |
for (var name_4 in source) { | |
if (source.hasOwnProperty(name_4)) { | |
result[source[name_4]] = name_4; | |
} | |
} | |
return result; | |
} | |
var tokenStrings = makeReverseMap(textToToken); | |
function tokenToString(t) { | |
return tokenStrings[t]; | |
} | |
ts.tokenToString = tokenToString; | |
function stringToToken(s) { | |
return textToToken[s]; | |
} | |
ts.stringToToken = stringToToken; | |
function computeLineStarts(text) { | |
var result = new Array(); | |
var pos = 0; | |
var lineStart = 0; | |
while (pos < text.length) { | |
var ch = text.charCodeAt(pos); | |
pos++; | |
switch (ch) { | |
case 13: | |
if (text.charCodeAt(pos) === 10) { | |
pos++; | |
} | |
case 10: | |
result.push(lineStart); | |
lineStart = pos; | |
break; | |
default: | |
if (ch > 127 && isLineBreak(ch)) { | |
result.push(lineStart); | |
lineStart = pos; | |
} | |
break; | |
} | |
} | |
result.push(lineStart); | |
return result; | |
} | |
ts.computeLineStarts = computeLineStarts; | |
function getPositionOfLineAndCharacter(sourceFile, line, character) { | |
return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character); | |
} | |
ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter; | |
function computePositionOfLineAndCharacter(lineStarts, line, character) { | |
ts.Debug.assert(line >= 0 && line < lineStarts.length); | |
return lineStarts[line] + character; | |
} | |
ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter; | |
function getLineStarts(sourceFile) { | |
return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); | |
} | |
ts.getLineStarts = getLineStarts; | |
function computeLineAndCharacterOfPosition(lineStarts, position) { | |
var lineNumber = ts.binarySearch(lineStarts, position); | |
if (lineNumber < 0) { | |
lineNumber = ~lineNumber - 1; | |
ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file"); | |
} | |
return { | |
line: lineNumber, | |
character: position - lineStarts[lineNumber] | |
}; | |
} | |
ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition; | |
function getLineAndCharacterOfPosition(sourceFile, position) { | |
return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); | |
} | |
ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; | |
var hasOwnProperty = Object.prototype.hasOwnProperty; | |
function isWhiteSpace(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.isWhiteSpace = isWhiteSpace; | |
function isLineBreak(ch) { | |
return ch === 10 || | |
ch === 13 || | |
ch === 8232 || | |
ch === 8233; | |
} | |
ts.isLineBreak = isLineBreak; | |
function isDigit(ch) { | |
return ch >= 48 && ch <= 57; | |
} | |
function isOctalDigit(ch) { | |
return ch >= 48 && ch <= 55; | |
} | |
ts.isOctalDigit = isOctalDigit; | |
function couldStartTrivia(text, pos) { | |
var ch = text.charCodeAt(pos); | |
switch (ch) { | |
case 13: | |
case 10: | |
case 9: | |
case 11: | |
case 12: | |
case 32: | |
case 47: | |
case 60: | |
case 61: | |
case 62: | |
return true; | |
case 35: | |
return pos === 0; | |
default: | |
return ch > 127; | |
} | |
} | |
ts.couldStartTrivia = couldStartTrivia; | |
function skipTrivia(text, pos, stopAfterLineBreak) { | |
if (!(pos >= 0)) { | |
return pos; | |
} | |
while (true) { | |
var ch = text.charCodeAt(pos); | |
switch (ch) { | |
case 13: | |
if (text.charCodeAt(pos + 1) === 10) { | |
pos++; | |
} | |
case 10: | |
pos++; | |
if (stopAfterLineBreak) { | |
return pos; | |
} | |
continue; | |
case 9: | |
case 11: | |
case 12: | |
case 32: | |
pos++; | |
continue; | |
case 47: | |
if (text.charCodeAt(pos + 1) === 47) { | |
pos += 2; | |
while (pos < text.length) { | |
if (isLineBreak(text.charCodeAt(pos))) { | |
break; | |
} | |
pos++; | |
} | |
continue; | |
} | |
if (text.charCodeAt(pos + 1) === 42) { | |
pos += 2; | |
while (pos < text.length) { | |
if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { | |
pos += 2; | |
break; | |
} | |
pos++; | |
} | |
continue; | |
} | |
break; | |
case 60: | |
case 61: | |
case 62: | |
if (isConflictMarkerTrivia(text, pos)) { | |
pos = scanConflictMarkerTrivia(text, pos); | |
continue; | |
} | |
break; | |
case 35: | |
if (pos === 0 && isShebangTrivia(text, pos)) { | |
pos = scanShebangTrivia(text, pos); | |
continue; | |
} | |
break; | |
default: | |
if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(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, n = mergeConflictMarkerLength; i < n; 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, 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 === 61); | |
while (pos < len) { | |
var ch_1 = text.charCodeAt(pos); | |
if (ch_1 === 62 && isConflictMarkerTrivia(text, pos)) { | |
break; | |
} | |
pos++; | |
} | |
} | |
return pos; | |
} | |
var shebangTriviaRegex = /^#!.*/; | |
function isShebangTrivia(text, pos) { | |
ts.Debug.assert(pos === 0); | |
return shebangTriviaRegex.test(text); | |
} | |
function scanShebangTrivia(text, pos) { | |
var shebang = shebangTriviaRegex.exec(text)[0]; | |
pos = pos + shebang.length; | |
return pos; | |
} | |
function getCommentRanges(text, pos, trailing) { | |
var result; | |
var collecting = trailing || pos === 0; | |
while (pos < text.length) { | |
var ch = text.charCodeAt(pos); | |
switch (ch) { | |
case 13: | |
if (text.charCodeAt(pos + 1) === 10) { | |
pos++; | |
} | |
case 10: | |
pos++; | |
if (trailing) { | |
return result; | |
} | |
collecting = true; | |
if (result && result.length) { | |
ts.lastOrUndefined(result).hasTrailingNewLine = 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 (!result) { | |
result = []; | |
} | |
result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine, kind: kind }); | |
} | |
continue; | |
} | |
break; | |
default: | |
if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { | |
if (result && result.length && isLineBreak(ch)) { | |
ts.lastOrUndefined(result).hasTrailingNewLine = true; | |
} | |
pos++; | |
continue; | |
} | |
break; | |
} | |
return result; | |
} | |
return result; | |
} | |
function getLeadingCommentRanges(text, pos) { | |
return getCommentRanges(text, pos, false); | |
} | |
ts.getLeadingCommentRanges = getLeadingCommentRanges; | |
function getTrailingCommentRanges(text, pos) { | |
return getCommentRanges(text, pos, true); | |
} | |
ts.getTrailingCommentRanges = getTrailingCommentRanges; | |
function getShebang(text) { | |
return shebangTriviaRegex.test(text) | |
? shebangTriviaRegex.exec(text)[0] | |
: undefined; | |
} | |
ts.getShebang = getShebang; | |
function isIdentifierStart(ch, languageVersion) { | |
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || | |
ch === 36 || ch === 95 || | |
ch > 127 && isUnicodeIdentifierStart(ch, languageVersion); | |
} | |
ts.isIdentifierStart = isIdentifierStart; | |
function isIdentifierPart(ch, languageVersion) { | |
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || | |
ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || | |
ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); | |
} | |
ts.isIdentifierPart = isIdentifierPart; | |
function isIdentifier(name, languageVersion) { | |
if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) { | |
return false; | |
} | |
for (var i = 1, n = name.length; i < n; i++) { | |
if (!isIdentifierPart(name.charCodeAt(i), languageVersion)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
ts.isIdentifier = isIdentifier; | |
function createScanner(languageVersion, skipTrivia, languageVariant, text, onError, start, length) { | |
if (languageVariant === void 0) { languageVariant = 0; } | |
var pos; | |
var end; | |
var startPos; | |
var tokenPos; | |
var token; | |
var tokenValue; | |
var precedingLineBreak; | |
var hasExtendedUnicodeEscape; | |
var tokenIsUnterminated; | |
setText(text, start, length); | |
return { | |
getStartPos: function () { return startPos; }, | |
getTextPos: function () { return pos; }, | |
getToken: function () { return token; }, | |
getTokenPos: function () { return tokenPos; }, | |
getTokenText: function () { return text.substring(tokenPos, pos); }, | |
getTokenValue: function () { return tokenValue; }, | |
hasExtendedUnicodeEscape: function () { return hasExtendedUnicodeEscape; }, | |
hasPrecedingLineBreak: function () { return precedingLineBreak; }, | |
isIdentifier: function () { return token === 69 || token > 105; }, | |
isReservedWord: function () { return token >= 70 && token <= 105; }, | |
isUnterminated: function () { return tokenIsUnterminated; }, | |
reScanGreaterToken: reScanGreaterToken, | |
reScanSlashToken: reScanSlashToken, | |
reScanTemplateToken: reScanTemplateToken, | |
scanJsxIdentifier: scanJsxIdentifier, | |
reScanJsxToken: reScanJsxToken, | |
scanJsxToken: scanJsxToken, | |
scanJSDocToken: scanJSDocToken, | |
scan: scan, | |
setText: setText, | |
setScriptTarget: setScriptTarget, | |
setLanguageVariant: setLanguageVariant, | |
setOnError: setOnError, | |
setTextPos: setTextPos, | |
tryScan: tryScan, | |
lookAhead: lookAhead, | |
scanRange: scanRange | |
}; | |
function error(message, length) { | |
if (onError) { | |
onError(message, length || 0); | |
} | |
} | |
function scanNumber() { | |
var start = pos; | |
while (isDigit(text.charCodeAt(pos))) | |
pos++; | |
if (text.charCodeAt(pos) === 46) { | |
pos++; | |
while (isDigit(text.charCodeAt(pos))) | |
pos++; | |
} | |
var end = pos; | |
if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) { | |
pos++; | |
if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) | |
pos++; | |
if (isDigit(text.charCodeAt(pos))) { | |
pos++; | |
while (isDigit(text.charCodeAt(pos))) | |
pos++; | |
end = pos; | |
} | |
else { | |
error(ts.Diagnostics.Digit_expected); | |
} | |
} | |
return "" + +(text.substring(start, end)); | |
} | |
function scanOctalDigits() { | |
var start = pos; | |
while (isOctalDigit(text.charCodeAt(pos))) { | |
pos++; | |
} | |
return +(text.substring(start, pos)); | |
} | |
function scanExactNumberOfHexDigits(count) { | |
return scanHexDigits(count, false); | |
} | |
function scanMinimumNumberOfHexDigits(count) { | |
return scanHexDigits(count, true); | |
} | |
function scanHexDigits(minCount, scanAsManyAsPossible) { | |
var digits = 0; | |
var value = 0; | |
while (digits < minCount || scanAsManyAsPossible) { | |
var ch = text.charCodeAt(pos); | |
if (ch >= 48 && ch <= 57) { | |
value = value * 16 + ch - 48; | |
} | |
else if (ch >= 65 && ch <= 70) { | |
value = value * 16 + ch - 65 + 10; | |
} | |
else if (ch >= 97 && ch <= 102) { | |
value = value * 16 + ch - 97 + 10; | |
} | |
else { | |
break; | |
} | |
pos++; | |
digits++; | |
} | |
if (digits < minCount) { | |
value = -1; | |
} | |
return value; | |
} | |
function scanString() { | |
var quote = text.charCodeAt(pos); | |
pos++; | |
var result = ""; | |
var start = pos; | |
while (true) { | |
if (pos >= end) { | |
result += text.substring(start, pos); | |
tokenIsUnterminated = true; | |
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) { | |
result += text.substring(start, pos); | |
result += scanEscapeSequence(); | |
start = pos; | |
continue; | |
} | |
if (isLineBreak(ch)) { | |
result += text.substring(start, pos); | |
tokenIsUnterminated = true; | |
error(ts.Diagnostics.Unterminated_string_literal); | |
break; | |
} | |
pos++; | |
} | |
return result; | |
} | |
function scanTemplateAndSetTokenValue() { | |
var startedWithBacktick = text.charCodeAt(pos) === 96; | |
pos++; | |
var start = pos; | |
var contents = ""; | |
var resultingToken; | |
while (true) { | |
if (pos >= end) { | |
contents += text.substring(start, pos); | |
tokenIsUnterminated = true; | |
error(ts.Diagnostics.Unterminated_template_literal); | |
resultingToken = startedWithBacktick ? 11 : 14; | |
break; | |
} | |
var currChar = text.charCodeAt(pos); | |
if (currChar === 96) { | |
contents += text.substring(start, pos); | |
pos++; | |
resultingToken = startedWithBacktick ? 11 : 14; | |
break; | |
} | |
if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) { | |
contents += text.substring(start, pos); | |
pos += 2; | |
resultingToken = startedWithBacktick ? 12 : 13; | |
break; | |
} | |
if (currChar === 92) { | |
contents += text.substring(start, pos); | |
contents += scanEscapeSequence(); | |
start = pos; | |
continue; | |
} | |
if (currChar === 13) { | |
contents += text.substring(start, pos); | |
pos++; | |
if (pos < end && text.charCodeAt(pos) === 10) { | |
pos++; | |
} | |
contents += "\n"; | |
start = pos; | |
continue; | |
} | |
pos++; | |
} | |
ts.Debug.assert(resultingToken !== undefined); | |
tokenValue = contents; | |
return resultingToken; | |
} | |
function scanEscapeSequence() { | |
pos++; | |
if (pos >= end) { | |
error(ts.Diagnostics.Unexpected_end_of_text); | |
return ""; | |
} | |
var ch = text.charCodeAt(pos); | |
pos++; | |
switch (ch) { | |
case 48: | |
return "\0"; | |
case 98: | |
return "\b"; | |
case 116: | |
return "\t"; | |
case 110: | |
return "\n"; | |
case 118: | |
return "\v"; | |
case 102: | |
return "\f"; | |
case 114: | |
return "\r"; | |
case 39: | |
return "\'"; | |
case 34: | |
return "\""; | |
case 117: | |
if (pos < end && text.charCodeAt(pos) === 123) { | |
hasExtendedUnicodeEscape = true; | |
pos++; | |
return scanExtendedUnicodeEscape(); | |
} | |
return scanHexadecimalEscape(4); | |
case 120: | |
return scanHexadecimalEscape(2); | |
case 13: | |
if (pos < end && text.charCodeAt(pos) === 10) { | |
pos++; | |
} | |
case 10: | |
case 8232: | |
case 8233: | |
return ""; | |
default: | |
return String.fromCharCode(ch); | |
} | |
} | |
function scanHexadecimalEscape(numDigits) { | |
var escapedValue = scanExactNumberOfHexDigits(numDigits); | |
if (escapedValue >= 0) { | |
return String.fromCharCode(escapedValue); | |
} | |
else { | |
error(ts.Diagnostics.Hexadecimal_digit_expected); | |
return ""; | |
} | |
} | |
function scanExtendedUnicodeEscape() { | |
var escapedValue = scanMinimumNumberOfHexDigits(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 utf16EncodeAsString(codePoint) { | |
ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF); | |
if (codePoint <= 65535) { | |
return String.fromCharCode(codePoint); | |
} | |
var codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800; | |
var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00; | |
return String.fromCharCode(codeUnit1, codeUnit2); | |
} | |
function peekUnicodeEscape() { | |
if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) { | |
var start_1 = pos; | |
pos += 2; | |
var value = scanExactNumberOfHexDigits(4); | |
pos = start_1; | |
return value; | |
} | |
return -1; | |
} | |
function scanIdentifierParts() { | |
var result = ""; | |
var start = pos; | |
while (pos < end) { | |
var ch = text.charCodeAt(pos); | |
if (isIdentifierPart(ch, languageVersion)) { | |
pos++; | |
} | |
else if (ch === 92) { | |
ch = peekUnicodeEscape(); | |
if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { | |
break; | |
} | |
result += text.substring(start, pos); | |
result += String.fromCharCode(ch); | |
pos += 6; | |
start = pos; | |
} | |
else { | |
break; | |
} | |
} | |
result += text.substring(start, pos); | |
return result; | |
} | |
function getIdentifierToken() { | |
var len = tokenValue.length; | |
if (len >= 2 && len <= 11) { | |
var ch = tokenValue.charCodeAt(0); | |
if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) { | |
return token = textToToken[tokenValue]; | |
} | |
} | |
return token = 69; | |
} | |
function scanBinaryOrOctalDigits(base) { | |
ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8"); | |
var value = 0; | |
var numberOfDigits = 0; | |
while (true) { | |
var ch = text.charCodeAt(pos); | |
var valueOfCh = ch - 48; | |
if (!isDigit(ch) || valueOfCh >= base) { | |
break; | |
} | |
value = value * base + valueOfCh; | |
pos++; | |
numberOfDigits++; | |
} | |
if (numberOfDigits === 0) { | |
return -1; | |
} | |
return value; | |
} | |
function scan() { | |
startPos = pos; | |
hasExtendedUnicodeEscape = false; | |
precedingLineBreak = false; | |
tokenIsUnterminated = false; | |
while (true) { | |
tokenPos = pos; | |
if (pos >= end) { | |
return token = 1; | |
} | |
var ch = text.charCodeAt(pos); | |
if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) { | |
pos = scanShebangTrivia(text, pos); | |
if (skipTrivia) { | |
continue; | |
} | |
else { | |
return token = 6; | |
} | |
} | |
switch (ch) { | |
case 10: | |
case 13: | |
precedingLineBreak = true; | |
if (skipTrivia) { | |
pos++; | |
continue; | |
} | |
else { | |
if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) { | |
pos += 2; | |
} | |
else { | |
pos++; | |
} | |
return token = 4; | |
} | |
case 9: | |
case 11: | |
case 12: | |
case 32: | |
if (skipTrivia) { | |
pos++; | |
continue; | |
} | |
else { | |
while (pos < end && isWhiteSpace(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 = 33; | |
} | |
return pos += 2, token = 31; | |
} | |
pos++; | |
return token = 49; | |
case 34: | |
case 39: | |
tokenValue = scanString(); | |
return token = 9; | |
case 96: | |
return token = scanTemplateAndSetTokenValue(); | |
case 37: | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 62; | |
} | |
pos++; | |
return token = 40; | |
case 38: | |
if (text.charCodeAt(pos + 1) === 38) { | |
return pos += 2, token = 51; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 66; | |
} | |
pos++; | |
return token = 46; | |
case 40: | |
pos++; | |
return token = 17; | |
case 41: | |
pos++; | |
return token = 18; | |
case 42: | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 59; | |
} | |
if (text.charCodeAt(pos + 1) === 42) { | |
if (text.charCodeAt(pos + 2) === 61) { | |
return pos += 3, token = 60; | |
} | |
return pos += 2, token = 38; | |
} | |
pos++; | |
return token = 37; | |
case 43: | |
if (text.charCodeAt(pos + 1) === 43) { | |
return pos += 2, token = 41; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 57; | |
} | |
pos++; | |
return token = 35; | |
case 44: | |
pos++; | |
return token = 24; | |
case 45: | |
if (text.charCodeAt(pos + 1) === 45) { | |
return pos += 2, token = 42; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 58; | |
} | |
pos++; | |
return token = 36; | |
case 46: | |
if (isDigit(text.charCodeAt(pos + 1))) { | |
tokenValue = scanNumber(); | |
return token = 8; | |
} | |
if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) { | |
return pos += 3, token = 22; | |
} | |
pos++; | |
return token = 21; | |
case 47: | |
if (text.charCodeAt(pos + 1) === 47) { | |
pos += 2; | |
while (pos < end) { | |
if (isLineBreak(text.charCodeAt(pos))) { | |
break; | |
} | |
pos++; | |
} | |
if (skipTrivia) { | |
continue; | |
} | |
else { | |
return token = 2; | |
} | |
} | |
if (text.charCodeAt(pos + 1) === 42) { | |
pos += 2; | |
var commentClosed = false; | |
while (pos < end) { | |
var ch_2 = text.charCodeAt(pos); | |
if (ch_2 === 42 && text.charCodeAt(pos + 1) === 47) { | |
pos += 2; | |
commentClosed = true; | |
break; | |
} | |
if (isLineBreak(ch_2)) { | |
precedingLineBreak = true; | |
} | |
pos++; | |
} | |
if (!commentClosed) { | |
error(ts.Diagnostics.Asterisk_Slash_expected); | |
} | |
if (skipTrivia) { | |
continue; | |
} | |
else { | |
tokenIsUnterminated = !commentClosed; | |
return token = 3; | |
} | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 61; | |
} | |
pos++; | |
return token = 39; | |
case 48: | |
if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) { | |
pos += 2; | |
var value = scanMinimumNumberOfHexDigits(1); | |
if (value < 0) { | |
error(ts.Diagnostics.Hexadecimal_digit_expected); | |
value = 0; | |
} | |
tokenValue = "" + value; | |
return token = 8; | |
} | |
else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) { | |
pos += 2; | |
var value = scanBinaryOrOctalDigits(2); | |
if (value < 0) { | |
error(ts.Diagnostics.Binary_digit_expected); | |
value = 0; | |
} | |
tokenValue = "" + value; | |
return token = 8; | |
} | |
else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) { | |
pos += 2; | |
var value = scanBinaryOrOctalDigits(8); | |
if (value < 0) { | |
error(ts.Diagnostics.Octal_digit_expected); | |
value = 0; | |
} | |
tokenValue = "" + value; | |
return token = 8; | |
} | |
if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) { | |
tokenValue = "" + scanOctalDigits(); | |
return token = 8; | |
} | |
case 49: | |
case 50: | |
case 51: | |
case 52: | |
case 53: | |
case 54: | |
case 55: | |
case 56: | |
case 57: | |
tokenValue = scanNumber(); | |
return token = 8; | |
case 58: | |
pos++; | |
return token = 54; | |
case 59: | |
pos++; | |
return token = 23; | |
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 = 63; | |
} | |
return pos += 2, token = 43; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 28; | |
} | |
if (languageVariant === 1 && | |
text.charCodeAt(pos + 1) === 47 && | |
text.charCodeAt(pos + 2) !== 42) { | |
return pos += 2, token = 26; | |
} | |
pos++; | |
return token = 25; | |
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 = 32; | |
} | |
return pos += 2, token = 30; | |
} | |
if (text.charCodeAt(pos + 1) === 62) { | |
return pos += 2, token = 34; | |
} | |
pos++; | |
return token = 56; | |
case 62: | |
if (isConflictMarkerTrivia(text, pos)) { | |
pos = scanConflictMarkerTrivia(text, pos, error); | |
if (skipTrivia) { | |
continue; | |
} | |
else { | |
return token = 7; | |
} | |
} | |
pos++; | |
return token = 27; | |
case 63: | |
pos++; | |
return token = 53; | |
case 91: | |
pos++; | |
return token = 19; | |
case 93: | |
pos++; | |
return token = 20; | |
case 94: | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 68; | |
} | |
pos++; | |
return token = 48; | |
case 123: | |
pos++; | |
return token = 15; | |
case 124: | |
if (text.charCodeAt(pos + 1) === 124) { | |
return pos += 2, token = 52; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 67; | |
} | |
pos++; | |
return token = 47; | |
case 125: | |
pos++; | |
return token = 16; | |
case 126: | |
pos++; | |
return token = 50; | |
case 64: | |
pos++; | |
return token = 55; | |
case 92: | |
var cookedChar = peekUnicodeEscape(); | |
if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { | |
pos += 6; | |
tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); | |
return token = getIdentifierToken(); | |
} | |
error(ts.Diagnostics.Invalid_character); | |
pos++; | |
return token = 0; | |
default: | |
if (isIdentifierStart(ch, languageVersion)) { | |
pos++; | |
while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion)) | |
pos++; | |
tokenValue = text.substring(tokenPos, pos); | |
if (ch === 92) { | |
tokenValue += scanIdentifierParts(); | |
} | |
return token = getIdentifierToken(); | |
} | |
else if (isWhiteSpace(ch)) { | |
pos++; | |
continue; | |
} | |
else if (isLineBreak(ch)) { | |
precedingLineBreak = true; | |
pos++; | |
continue; | |
} | |
error(ts.Diagnostics.Invalid_character); | |
pos++; | |
return token = 0; | |
} | |
} | |
} | |
function reScanGreaterToken() { | |
if (token === 27) { | |
if (text.charCodeAt(pos) === 62) { | |
if (text.charCodeAt(pos + 1) === 62) { | |
if (text.charCodeAt(pos + 2) === 61) { | |
return pos += 3, token = 65; | |
} | |
return pos += 2, token = 45; | |
} | |
if (text.charCodeAt(pos + 1) === 61) { | |
return pos += 2, token = 64; | |
} | |
pos++; | |
return token = 44; | |
} | |
if (text.charCodeAt(pos) === 61) { | |
pos++; | |
return token = 29; | |
} | |
} | |
return token; | |
} | |
function reScanSlashToken() { | |
if (token === 39 || token === 61) { | |
var p = tokenPos + 1; | |
var inEscape = false; | |
var inCharacterClass = false; | |
while (true) { | |
if (p >= end) { | |
tokenIsUnterminated = true; | |
error(ts.Diagnostics.Unterminated_regular_expression_literal); | |
break; | |
} | |
var ch = text.charCodeAt(p); | |
if (isLineBreak(ch)) { | |
tokenIsUnterminated = true; | |
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 = 10; | |
} | |
return token; | |
} | |
function reScanTemplateToken() { | |
ts.Debug.assert(token === 16, "'reScanTemplateToken' should only be called on a '}'"); | |
pos = tokenPos; | |
return token = scanTemplateAndSetTokenValue(); | |
} | |
function reScanJsxToken() { | |
pos = tokenPos = startPos; | |
return token = scanJsxToken(); | |
} | |
function scanJsxToken() { | |
startPos = tokenPos = pos; | |
if (pos >= end) { | |
return token = 1; | |
} | |
var char = text.charCodeAt(pos); | |
if (char === 60) { | |
if (text.charCodeAt(pos + 1) === 47) { | |
pos += 2; | |
return token = 26; | |
} | |
pos++; | |
return token = 25; | |
} | |
if (char === 123) { | |
pos++; | |
return token = 15; | |
} | |
while (pos < end) { | |
pos++; | |
char = text.charCodeAt(pos); | |
if ((char === 123) || (char === 60)) { | |
break; | |
} | |
} | |
return token = 243; | |
} | |
function scanJsxIdentifier() { | |
if (tokenIsIdentifierOrKeyword(token)) { | |
var firstCharPosition = pos; | |
while (pos < end) { | |
var ch = text.charCodeAt(pos); | |
if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { | |
pos++; | |
} | |
else { | |
break; | |
} | |
} | |
tokenValue += text.substr(firstCharPosition, pos - firstCharPosition); | |
} | |
return token; | |
} | |
function scanJSDocToken() { | |
if (pos >= end) { | |
return token = 1; | |
} | |
startPos = pos; | |
var ch = text.charCodeAt(pos); | |
while (pos < end) { | |
ch = text.charCodeAt(pos); | |
if (isWhiteSpace(ch)) { | |
pos++; | |
} | |
else { | |
break; | |
} | |
} | |
tokenPos = pos; | |
switch (ch) { | |
case 64: | |
return pos += 1, token = 55; | |
case 10: | |
case 13: | |
return pos += 1, token = 4; | |
case 42: | |
return pos += 1, token = 37; | |
case 123: | |
return pos += 1, token = 15; | |
case 125: | |
return pos += 1, token = 16; | |
case 91: | |
return pos += 1, token = 19; | |
case 93: | |
return pos += 1, token = 20; | |
case 61: | |
return pos += 1, token = 56; | |
case 44: | |
return pos += 1, token = 24; | |
} | |
if (isIdentifierStart(ch, 2)) { | |
pos++; | |
while (isIdentifierPart(text.charCodeAt(pos), 2) && pos < end) { | |
pos++; | |
} | |
return token = 69; | |
} | |
else { | |
return pos += 1, token = 0; | |
} | |
} | |
function speculationHelper(callback, isLookahead) { | |
var savePos = pos; | |
var saveStartPos = startPos; | |
var saveTokenPos = tokenPos; | |
var saveToken = token; | |
var saveTokenValue = tokenValue; | |
var savePrecedingLineBreak = precedingLineBreak; | |
var result = callback(); | |
if (!result || isLookahead) { | |
pos = savePos; | |
startPos = saveStartPos; | |
tokenPos = saveTokenPos; | |
token = saveToken; | |
tokenValue = saveTokenValue; | |
precedingLineBreak = savePrecedingLineBreak; | |
} | |
return result; | |
} | |
function scanRange(start, length, callback) { | |
var saveEnd = end; | |
var savePos = pos; | |
var saveStartPos = startPos; | |
var saveTokenPos = tokenPos; | |
var saveToken = token; | |
var savePrecedingLineBreak = precedingLineBreak; | |
var saveTokenValue = tokenValue; | |
var saveHasExtendedUnicodeEscape = hasExtendedUnicodeEscape; | |
var saveTokenIsUnterminated = tokenIsUnterminated; | |
setText(text, start, length); | |
var result = callback(); | |
end = saveEnd; | |
pos = savePos; | |
startPos = saveStartPos; | |
tokenPos = saveTokenPos; | |
token = saveToken; | |
precedingLineBreak = savePrecedingLineBreak; | |
tokenValue = saveTokenValue; | |
hasExtendedUnicodeEscape = saveHasExtendedUnicodeEscape; | |
tokenIsUnterminated = saveTokenIsUnterminated; | |
return result; | |
} | |
function lookAhead(callback) { | |
return speculationHelper(callback, true); | |
} | |
function tryScan(callback) { | |
return speculationHelper(callback, false); | |
} | |
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; | |
precedingLineBreak = false; | |
tokenValue = undefined; | |
hasExtendedUnicodeEscape = false; | |
tokenIsUnterminated = false; | |
} | |
} | |
ts.createScanner = createScanner; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
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; | |
var stringWriters = []; | |
function getSingleLineStringWriter() { | |
if (stringWriters.length === 0) { | |
var str_1 = ""; | |
var writeText = function (text) { return str_1 += text; }; | |
return { | |
string: function () { return str_1; }, | |
writeKeyword: writeText, | |
writeOperator: writeText, | |
writePunctuation: writeText, | |
writeSpace: writeText, | |
writeStringLiteral: writeText, | |
writeParameter: writeText, | |
writeSymbol: writeText, | |
writeLine: function () { return str_1 += " "; }, | |
increaseIndent: function () { }, | |
decreaseIndent: function () { }, | |
clear: function () { return str_1 = ""; }, | |
trackSymbol: function () { }, | |
reportInaccessibleThisError: function () { } | |
}; | |
} | |
return stringWriters.pop(); | |
} | |
ts.getSingleLineStringWriter = getSingleLineStringWriter; | |
function releaseStringWriter(writer) { | |
writer.clear(); | |
stringWriters.push(writer); | |
} | |
ts.releaseStringWriter = releaseStringWriter; | |
function getFullWidth(node) { | |
return node.end - node.pos; | |
} | |
ts.getFullWidth = getFullWidth; | |
function arrayIsEqualTo(array1, array2, equaler) { | |
if (!array1 || !array2) { | |
return array1 === array2; | |
} | |
if (array1.length !== array2.length) { | |
return false; | |
} | |
for (var i = 0; i < array1.length; i++) { | |
var equals = equaler ? equaler(array1[i], array2[i]) : array1[i] === array2[i]; | |
if (!equals) { | |
return false; | |
} | |
} | |
return true; | |
} | |
ts.arrayIsEqualTo = arrayIsEqualTo; | |
function hasResolvedModule(sourceFile, moduleNameText) { | |
return sourceFile.resolvedModules && ts.hasProperty(sourceFile.resolvedModules, moduleNameText); | |
} | |
ts.hasResolvedModule = hasResolvedModule; | |
function getResolvedModule(sourceFile, moduleNameText) { | |
return hasResolvedModule(sourceFile, moduleNameText) ? sourceFile.resolvedModules[moduleNameText] : undefined; | |
} | |
ts.getResolvedModule = getResolvedModule; | |
function setResolvedModule(sourceFile, moduleNameText, resolvedModule) { | |
if (!sourceFile.resolvedModules) { | |
sourceFile.resolvedModules = {}; | |
} | |
sourceFile.resolvedModules[moduleNameText] = resolvedModule; | |
} | |
ts.setResolvedModule = setResolvedModule; | |
function setResolvedTypeReferenceDirective(sourceFile, typeReferenceDirectiveName, resolvedTypeReferenceDirective) { | |
if (!sourceFile.resolvedTypeReferenceDirectiveNames) { | |
sourceFile.resolvedTypeReferenceDirectiveNames = {}; | |
} | |
sourceFile.resolvedTypeReferenceDirectiveNames[typeReferenceDirectiveName] = resolvedTypeReferenceDirective; | |
} | |
ts.setResolvedTypeReferenceDirective = setResolvedTypeReferenceDirective; | |
function moduleResolutionIsEqualTo(oldResolution, newResolution) { | |
return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.isExternalLibraryImport === newResolution.isExternalLibraryImport; | |
} | |
ts.moduleResolutionIsEqualTo = moduleResolutionIsEqualTo; | |
function typeDirectiveIsEqualTo(oldResolution, newResolution) { | |
return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.primary === newResolution.primary; | |
} | |
ts.typeDirectiveIsEqualTo = typeDirectiveIsEqualTo; | |
function hasChangesInResolutions(names, newResolutions, oldResolutions, comparer) { | |
if (names.length !== newResolutions.length) { | |
return false; | |
} | |
for (var i = 0; i < names.length; i++) { | |
var newResolution = newResolutions[i]; | |
var oldResolution = oldResolutions && ts.hasProperty(oldResolutions, names[i]) ? oldResolutions[names[i]] : undefined; | |
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 & 268435456) !== 0; | |
} | |
ts.containsParseError = containsParseError; | |
function aggregateChildData(node) { | |
if (!(node.flags & 536870912)) { | |
var thisNodeOrAnySubNodesHasError = ((node.flags & 67108864) !== 0) || | |
ts.forEachChild(node, containsParseError); | |
if (thisNodeOrAnySubNodesHasError) { | |
node.flags |= 268435456; | |
} | |
node.flags |= 536870912; | |
} | |
} | |
function getSourceFileOfNode(node) { | |
while (node && node.kind !== 255) { | |
node = node.parent; | |
} | |
return node; | |
} | |
ts.getSourceFileOfNode = getSourceFileOfNode; | |
function isStatementWithLocals(node) { | |
switch (node.kind) { | |
case 198: | |
case 226: | |
case 205: | |
case 206: | |
case 207: | |
return true; | |
} | |
return false; | |
} | |
ts.isStatementWithLocals = isStatementWithLocals; | |
function getStartPositionOfLine(line, sourceFile) { | |
ts.Debug.assert(line >= 0); | |
return ts.getLineStarts(sourceFile)[line]; | |
} | |
ts.getStartPositionOfLine = getStartPositionOfLine; | |
function nodePosToString(node) { | |
var file = getSourceFileOfNode(node); | |
var loc = ts.getLineAndCharacterOfPosition(file, node.pos); | |
return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")"; | |
} | |
ts.nodePosToString = nodePosToString; | |
function getStartPosOfNode(node) { | |
return node.pos; | |
} | |
ts.getStartPosOfNode = getStartPosOfNode; | |
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 nodeIsMissing(node) { | |
if (!node) { | |
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 getTokenPosOfNode(node, sourceFile) { | |
if (nodeIsMissing(node)) { | |
return node.pos; | |
} | |
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); | |
} | |
ts.getTokenPosOfNode = getTokenPosOfNode; | |
function getNonDecoratorTokenPosOfNode(node, sourceFile) { | |
if (nodeIsMissing(node) || !node.decorators) { | |
return getTokenPosOfNode(node, sourceFile); | |
} | |
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end); | |
} | |
ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode; | |
function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia) { | |
if (includeTrivia === void 0) { includeTrivia = false; } | |
if (nodeIsMissing(node)) { | |
return ""; | |
} | |
var text = sourceFile.text; | |
return text.substring(includeTrivia ? node.pos : ts.skipTrivia(text, node.pos), node.end); | |
} | |
ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile; | |
function getTextOfNodeFromSourceText(sourceText, node) { | |
if (nodeIsMissing(node)) { | |
return ""; | |
} | |
return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); | |
} | |
ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText; | |
function getTextOfNode(node, includeTrivia) { | |
if (includeTrivia === void 0) { includeTrivia = false; } | |
return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia); | |
} | |
ts.getTextOfNode = getTextOfNode; | |
function escapeIdentifier(identifier) { | |
return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier; | |
} | |
ts.escapeIdentifier = escapeIdentifier; | |
function unescapeIdentifier(identifier) { | |
return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier; | |
} | |
ts.unescapeIdentifier = unescapeIdentifier; | |
function makeIdentifierFromModuleName(moduleName) { | |
return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_"); | |
} | |
ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName; | |
function isBlockOrCatchScoped(declaration) { | |
return (getCombinedNodeFlags(declaration) & 3072) !== 0 || | |
isCatchClauseVariableDeclaration(declaration); | |
} | |
ts.isBlockOrCatchScoped = isBlockOrCatchScoped; | |
function isAmbientModule(node) { | |
return node && node.kind === 224 && | |
(node.name.kind === 9 || isGlobalScopeAugmentation(node)); | |
} | |
ts.isAmbientModule = isAmbientModule; | |
function isBlockScopedContainerTopLevel(node) { | |
return node.kind === 255 || | |
node.kind === 224 || | |
isFunctionLike(node) || | |
isFunctionBlock(node); | |
} | |
ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel; | |
function isGlobalScopeAugmentation(module) { | |
return !!(module.flags & 131072); | |
} | |
ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation; | |
function isExternalModuleAugmentation(node) { | |
if (!node || !isAmbientModule(node)) { | |
return false; | |
} | |
switch (node.parent.kind) { | |
case 255: | |
return ts.isExternalModule(node.parent); | |
case 225: | |
return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); | |
} | |
return false; | |
} | |
ts.isExternalModuleAugmentation = isExternalModuleAugmentation; | |
function getEnclosingBlockScopeContainer(node) { | |
var current = node.parent; | |
while (current) { | |
if (isFunctionLike(current)) { | |
return current; | |
} | |
switch (current.kind) { | |
case 255: | |
case 226: | |
case 251: | |
case 224: | |
case 205: | |
case 206: | |
case 207: | |
return current; | |
case 198: | |
if (!isFunctionLike(current.parent)) { | |
return current; | |
} | |
} | |
current = current.parent; | |
} | |
} | |
ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; | |
function isCatchClauseVariableDeclaration(declaration) { | |
return declaration && | |
declaration.kind === 217 && | |
declaration.parent && | |
declaration.parent.kind === 251; | |
} | |
ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; | |
function declarationNameToString(name) { | |
return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name); | |
} | |
ts.declarationNameToString = declarationNameToString; | |
function createDiagnosticForNode(node, message, arg0, arg1, arg2) { | |
var sourceFile = getSourceFileOfNode(node); | |
var span = getErrorSpanForNode(sourceFile, node); | |
return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2); | |
} | |
ts.createDiagnosticForNode = createDiagnosticForNode; | |
function createDiagnosticForNodeFromMessageChain(node, messageChain) { | |
var sourceFile = getSourceFileOfNode(node); | |
var span = getErrorSpanForNode(sourceFile, node); | |
return { | |
file: sourceFile, | |
start: span.start, | |
length: span.length, | |
code: messageChain.code, | |
category: messageChain.category, | |
messageText: messageChain.next ? messageChain : messageChain.messageText | |
}; | |
} | |
ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; | |
function getSpanOfTokenAtPosition(sourceFile, pos) { | |
var scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.languageVariant, sourceFile.text, undefined, pos); | |
scanner.scan(); | |
var start = scanner.getTokenPos(); | |
return ts.createTextSpanFromBounds(start, scanner.getTextPos()); | |
} | |
ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; | |
function getErrorSpanForArrowFunction(sourceFile, node) { | |
var pos = ts.skipTrivia(sourceFile.text, node.pos); | |
if (node.body && node.body.kind === 198) { | |
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 255: | |
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 217: | |
case 168: | |
case 220: | |
case 191: | |
case 221: | |
case 224: | |
case 223: | |
case 254: | |
case 219: | |
case 178: | |
case 146: | |
case 148: | |
case 149: | |
case 222: | |
errorNode = node.name; | |
break; | |
case 179: | |
return getErrorSpanForArrowFunction(sourceFile, node); | |
} | |
if (errorNode === undefined) { | |
return getSpanOfTokenAtPosition(sourceFile, node.pos); | |
} | |
var pos = nodeIsMissing(errorNode) | |
? errorNode.pos | |
: ts.skipTrivia(sourceFile.text, errorNode.pos); | |
return ts.createTextSpanFromBounds(pos, errorNode.end); | |
} | |
ts.getErrorSpanForNode = getErrorSpanForNode; | |
function isExternalOrCommonJsModule(file) { | |
return (file.externalModuleIndicator || file.commonJsModuleIndicator) !== undefined; | |
} | |
ts.isExternalOrCommonJsModule = isExternalOrCommonJsModule; | |
function isDeclarationFile(file) { | |
return file.isDeclarationFile; | |
} | |
ts.isDeclarationFile = isDeclarationFile; | |
function isConstEnumDeclaration(node) { | |
return node.kind === 223 && isConst(node); | |
} | |
ts.isConstEnumDeclaration = isConstEnumDeclaration; | |
function walkUpBindingElementsAndPatterns(node) { | |
while (node && (node.kind === 168 || isBindingPattern(node))) { | |
node = node.parent; | |
} | |
return node; | |
} | |
function getCombinedNodeFlags(node) { | |
node = walkUpBindingElementsAndPatterns(node); | |
var flags = node.flags; | |
if (node.kind === 217) { | |
node = node.parent; | |
} | |
if (node && node.kind === 218) { | |
flags |= node.flags; | |
node = node.parent; | |
} | |
if (node && node.kind === 199) { | |
flags |= node.flags; | |
} | |
return flags; | |
} | |
ts.getCombinedNodeFlags = getCombinedNodeFlags; | |
function isConst(node) { | |
return !!(getCombinedNodeFlags(node) & 2048); | |
} | |
ts.isConst = isConst; | |
function isLet(node) { | |
return !!(getCombinedNodeFlags(node) & 1024); | |
} | |
ts.isLet = isLet; | |
function isSuperCallExpression(n) { | |
return n.kind === 173 && n.expression.kind === 95; | |
} | |
ts.isSuperCallExpression = isSuperCallExpression; | |
function isPrologueDirective(node) { | |
return node.kind === 201 && node.expression.kind === 9; | |
} | |
ts.isPrologueDirective = isPrologueDirective; | |
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { | |
return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos); | |
} | |
ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; | |
function getLeadingCommentRangesOfNodeFromText(node, text) { | |
return ts.getLeadingCommentRanges(text, node.pos); | |
} | |
ts.getLeadingCommentRangesOfNodeFromText = getLeadingCommentRangesOfNodeFromText; | |
function getJsDocComments(node, sourceFileOfNode) { | |
return getJsDocCommentsFromText(node, sourceFileOfNode.text); | |
} | |
ts.getJsDocComments = getJsDocComments; | |
function getJsDocCommentsFromText(node, text) { | |
var commentRanges = (node.kind === 141 || node.kind === 140) ? | |
ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : | |
getLeadingCommentRangesOfNodeFromText(node, text); | |
return ts.filter(commentRanges, isJsDocComment); | |
function isJsDocComment(comment) { | |
return text.charCodeAt(comment.pos + 1) === 42 && | |
text.charCodeAt(comment.pos + 2) === 42 && | |
text.charCodeAt(comment.pos + 3) !== 47; | |
} | |
} | |
ts.getJsDocCommentsFromText = getJsDocCommentsFromText; | |
ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/; | |
ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/; | |
ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/; | |
function isTypeNode(node) { | |
if (153 <= node.kind && node.kind <= 165) { | |
return true; | |
} | |
switch (node.kind) { | |
case 117: | |
case 129: | |
case 131: | |
case 120: | |
case 132: | |
case 134: | |
return true; | |
case 103: | |
return node.parent.kind !== 182; | |
case 193: | |
return !isExpressionWithTypeArgumentsInClassExtendsClause(node); | |
case 69: | |
if (node.parent.kind === 138 && node.parent.right === node) { | |
node = node.parent; | |
} | |
else if (node.parent.kind === 171 && node.parent.name === node) { | |
node = node.parent; | |
} | |
ts.Debug.assert(node.kind === 69 || node.kind === 138 || node.kind === 171, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); | |
case 138: | |
case 171: | |
case 97: | |
var parent_1 = node.parent; | |
if (parent_1.kind === 157) { | |
return false; | |
} | |
if (153 <= parent_1.kind && parent_1.kind <= 165) { | |
return true; | |
} | |
switch (parent_1.kind) { | |
case 193: | |
return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); | |
case 140: | |
return node === parent_1.constraint; | |
case 144: | |
case 143: | |
case 141: | |
case 217: | |
return node === parent_1.type; | |
case 219: | |
case 178: | |
case 179: | |
case 147: | |
case 146: | |
case 145: | |
case 148: | |
case 149: | |
return node === parent_1.type; | |
case 150: | |
case 151: | |
case 152: | |
return node === parent_1.type; | |
case 176: | |
return node === parent_1.type; | |
case 173: | |
case 174: | |
return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; | |
case 175: | |
return false; | |
} | |
} | |
return false; | |
} | |
ts.isTypeNode = isTypeNode; | |
function forEachReturnStatement(body, visitor) { | |
return traverse(body); | |
function traverse(node) { | |
switch (node.kind) { | |
case 210: | |
return visitor(node); | |
case 226: | |
case 198: | |
case 202: | |
case 203: | |
case 204: | |
case 205: | |
case 206: | |
case 207: | |
case 211: | |
case 212: | |
case 248: | |
case 249: | |
case 213: | |
case 215: | |
case 251: | |
return ts.forEachChild(node, traverse); | |
} | |
} | |
} | |
ts.forEachReturnStatement = forEachReturnStatement; | |
function forEachYieldExpression(body, visitor) { | |
return traverse(body); | |
function traverse(node) { | |
switch (node.kind) { | |
case 189: | |
visitor(node); | |
var operand = node.expression; | |
if (operand) { | |
traverse(operand); | |
} | |
case 223: | |
case 221: | |
case 224: | |
case 222: | |
case 220: | |
case 191: | |
return; | |
default: | |
if (isFunctionLike(node)) { | |
var name_5 = node.name; | |
if (name_5 && name_5.kind === 139) { | |
traverse(name_5.expression); | |
return; | |
} | |
} | |
else if (!isTypeNode(node)) { | |
ts.forEachChild(node, traverse); | |
} | |
} | |
} | |
} | |
ts.forEachYieldExpression = forEachYieldExpression; | |
function isVariableLike(node) { | |
if (node) { | |
switch (node.kind) { | |
case 168: | |
case 254: | |
case 141: | |
case 252: | |
case 144: | |
case 143: | |
case 253: | |
case 217: | |
return true; | |
} | |
} | |
return false; | |
} | |
ts.isVariableLike = isVariableLike; | |
function isAccessor(node) { | |
return node && (node.kind === 148 || node.kind === 149); | |
} | |
ts.isAccessor = isAccessor; | |
function isClassLike(node) { | |
return node && (node.kind === 220 || node.kind === 191); | |
} | |
ts.isClassLike = isClassLike; | |
function isFunctionLike(node) { | |
return node && isFunctionLikeKind(node.kind); | |
} | |
ts.isFunctionLike = isFunctionLike; | |
function isFunctionLikeKind(kind) { | |
switch (kind) { | |
case 147: | |
case 178: | |
case 219: | |
case 179: | |
case 146: | |
case 145: | |
case 148: | |
case 149: | |
case 150: | |
case 151: | |
case 152: | |
case 155: | |
case 156: | |
return true; | |
} | |
} | |
ts.isFunctionLikeKind = isFunctionLikeKind; | |
function introducesArgumentsExoticObject(node) { | |
switch (node.kind) { | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
case 219: | |
case 178: | |
return true; | |
} | |
return false; | |
} | |
ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; | |
function isIterationStatement(node, lookInLabeledStatements) { | |
switch (node.kind) { | |
case 205: | |
case 206: | |
case 207: | |
case 203: | |
case 204: | |
return true; | |
case 213: | |
return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); | |
} | |
return false; | |
} | |
ts.isIterationStatement = isIterationStatement; | |
function isFunctionBlock(node) { | |
return node && node.kind === 198 && isFunctionLike(node.parent); | |
} | |
ts.isFunctionBlock = isFunctionBlock; | |
function isObjectLiteralMethod(node) { | |
return node && node.kind === 146 && node.parent.kind === 170; | |
} | |
ts.isObjectLiteralMethod = isObjectLiteralMethod; | |
function isIdentifierTypePredicate(predicate) { | |
return predicate && predicate.kind === 1; | |
} | |
ts.isIdentifierTypePredicate = isIdentifierTypePredicate; | |
function isThisTypePredicate(predicate) { | |
return predicate && predicate.kind === 0; | |
} | |
ts.isThisTypePredicate = isThisTypePredicate; | |
function getContainingFunction(node) { | |
while (true) { | |
node = node.parent; | |
if (!node || isFunctionLike(node)) { | |
return node; | |
} | |
} | |
} | |
ts.getContainingFunction = getContainingFunction; | |
function getContainingFunctionOrModule(node) { | |
while (true) { | |
node = node.parent; | |
if (isFunctionLike(node) || node.kind === 224 || node.kind === 255) { | |
return node; | |
} | |
} | |
} | |
ts.getContainingFunctionOrModule = getContainingFunctionOrModule; | |
function getContainingClass(node) { | |
while (true) { | |
node = node.parent; | |
if (!node || isClassLike(node)) { | |
return node; | |
} | |
} | |
} | |
ts.getContainingClass = getContainingClass; | |
function getThisContainer(node, includeArrowFunctions) { | |
while (true) { | |
node = node.parent; | |
if (!node) { | |
return undefined; | |
} | |
switch (node.kind) { | |
case 139: | |
if (isClassLike(node.parent.parent)) { | |
return node; | |
} | |
node = node.parent; | |
break; | |
case 142: | |
if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { | |
node = node.parent.parent; | |
} | |
else if (isClassElement(node.parent)) { | |
node = node.parent; | |
} | |
break; | |
case 179: | |
if (!includeArrowFunctions) { | |
continue; | |
} | |
case 219: | |
case 178: | |
case 224: | |
case 144: | |
case 143: | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
case 150: | |
case 151: | |
case 152: | |
case 223: | |
case 255: | |
return node; | |
} | |
} | |
} | |
ts.getThisContainer = getThisContainer; | |
function getSuperContainer(node, stopOnFunctions) { | |
while (true) { | |
node = node.parent; | |
if (!node) { | |
return node; | |
} | |
switch (node.kind) { | |
case 139: | |
node = node.parent; | |
break; | |
case 219: | |
case 178: | |
case 179: | |
if (!stopOnFunctions) { | |
continue; | |
} | |
case 144: | |
case 143: | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
return node; | |
case 142: | |
if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { | |
node = node.parent.parent; | |
} | |
else if (isClassElement(node.parent)) { | |
node = node.parent; | |
} | |
break; | |
} | |
} | |
} | |
ts.getSuperContainer = getSuperContainer; | |
function isSuperPropertyOrElementAccess(node) { | |
return (node.kind === 171 | |
|| node.kind === 172) | |
&& node.expression.kind === 95; | |
} | |
ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; | |
function getEntityNameFromTypeNode(node) { | |
if (node) { | |
switch (node.kind) { | |
case 154: | |
return node.typeName; | |
case 193: | |
return node.expression; | |
case 69: | |
case 138: | |
return node; | |
} | |
} | |
return undefined; | |
} | |
ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; | |
function getInvokedExpression(node) { | |
if (node.kind === 175) { | |
return node.tag; | |
} | |
return node.expression; | |
} | |
ts.getInvokedExpression = getInvokedExpression; | |
function nodeCanBeDecorated(node) { | |
switch (node.kind) { | |
case 220: | |
return true; | |
case 144: | |
return node.parent.kind === 220; | |
case 148: | |
case 149: | |
case 146: | |
return node.body !== undefined | |
&& node.parent.kind === 220; | |
case 141: | |
return node.parent.body !== undefined | |
&& (node.parent.kind === 147 | |
|| node.parent.kind === 146 | |
|| node.parent.kind === 149) | |
&& node.parent.parent.kind === 220; | |
} | |
return false; | |
} | |
ts.nodeCanBeDecorated = nodeCanBeDecorated; | |
function nodeIsDecorated(node) { | |
return node.decorators !== undefined | |
&& nodeCanBeDecorated(node); | |
} | |
ts.nodeIsDecorated = nodeIsDecorated; | |
function isPropertyAccessExpression(node) { | |
return node.kind === 171; | |
} | |
ts.isPropertyAccessExpression = isPropertyAccessExpression; | |
function isElementAccessExpression(node) { | |
return node.kind === 172; | |
} | |
ts.isElementAccessExpression = isElementAccessExpression; | |
function isJSXTagName(node) { | |
var parent = node.parent; | |
if (parent.kind === 242 || | |
parent.kind === 241 || | |
parent.kind === 244) { | |
return parent.tagName === node; | |
} | |
return false; | |
} | |
ts.isJSXTagName = isJSXTagName; | |
function isExpression(node) { | |
switch (node.kind) { | |
case 95: | |
case 93: | |
case 99: | |
case 84: | |
case 10: | |
case 169: | |
case 170: | |
case 171: | |
case 172: | |
case 173: | |
case 174: | |
case 175: | |
case 194: | |
case 176: | |
case 195: | |
case 177: | |
case 178: | |
case 191: | |
case 179: | |
case 182: | |
case 180: | |
case 181: | |
case 184: | |
case 185: | |
case 186: | |
case 187: | |
case 190: | |
case 188: | |
case 11: | |
case 192: | |
case 240: | |
case 241: | |
case 189: | |
case 183: | |
return true; | |
case 138: | |
while (node.parent.kind === 138) { | |
node = node.parent; | |
} | |
return node.parent.kind === 157 || isJSXTagName(node); | |
case 69: | |
if (node.parent.kind === 157 || isJSXTagName(node)) { | |
return true; | |
} | |
case 8: | |
case 9: | |
case 97: | |
var parent_2 = node.parent; | |
switch (parent_2.kind) { | |
case 217: | |
case 141: | |
case 144: | |
case 143: | |
case 254: | |
case 252: | |
case 168: | |
return parent_2.initializer === node; | |
case 201: | |
case 202: | |
case 203: | |
case 204: | |
case 210: | |
case 211: | |
case 212: | |
case 248: | |
case 214: | |
case 212: | |
return parent_2.expression === node; | |
case 205: | |
var forStatement = parent_2; | |
return (forStatement.initializer === node && forStatement.initializer.kind !== 218) || | |
forStatement.condition === node || | |
forStatement.incrementor === node; | |
case 206: | |
case 207: | |
var forInStatement = parent_2; | |
return (forInStatement.initializer === node && forInStatement.initializer.kind !== 218) || | |
forInStatement.expression === node; | |
case 176: | |
case 194: | |
return node === parent_2.expression; | |
case 196: | |
return node === parent_2.expression; | |
case 139: | |
return node === parent_2.expression; | |
case 142: | |
case 247: | |
case 246: | |
return true; | |
case 193: | |
return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); | |
default: | |
if (isExpression(parent_2)) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
ts.isExpression = isExpression; | |
function isExternalModuleNameRelative(moduleName) { | |
return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; | |
} | |
ts.isExternalModuleNameRelative = isExternalModuleNameRelative; | |
function isInstantiatedModule(node, preserveConstEnums) { | |
var moduleState = ts.getModuleInstanceState(node); | |
return moduleState === 1 || | |
(preserveConstEnums && moduleState === 2); | |
} | |
ts.isInstantiatedModule = isInstantiatedModule; | |
function isExternalModuleImportEqualsDeclaration(node) { | |
return node.kind === 228 && node.moduleReference.kind === 239; | |
} | |
ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; | |
function getExternalModuleImportEqualsDeclarationExpression(node) { | |
ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node)); | |
return node.moduleReference.expression; | |
} | |
ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; | |
function isInternalModuleImportEqualsDeclaration(node) { | |
return node.kind === 228 && node.moduleReference.kind !== 239; | |
} | |
ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; | |
function isSourceFileJavaScript(file) { | |
return isInJavaScriptFile(file); | |
} | |
ts.isSourceFileJavaScript = isSourceFileJavaScript; | |
function isInJavaScriptFile(node) { | |
return node && !!(node.flags & 134217728); | |
} | |
ts.isInJavaScriptFile = isInJavaScriptFile; | |
function isRequireCall(expression, checkArgumentIsStringLiteral) { | |
var isRequire = expression.kind === 173 && | |
expression.expression.kind === 69 && | |
expression.expression.text === "require" && | |
expression.arguments.length === 1; | |
return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9); | |
} | |
ts.isRequireCall = isRequireCall; | |
function isSingleOrDoubleQuote(charCode) { | |
return charCode === 39 || charCode === 34; | |
} | |
ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; | |
function getSpecialPropertyAssignmentKind(expression) { | |
if (!isInJavaScriptFile(expression)) { | |
return 0; | |
} | |
if (expression.kind !== 186) { | |
return 0; | |
} | |
var expr = expression; | |
if (expr.operatorToken.kind !== 56 || expr.left.kind !== 171) { | |
return 0; | |
} | |
var lhs = expr.left; | |
if (lhs.expression.kind === 69) { | |
var lhsId = lhs.expression; | |
if (lhsId.text === "exports") { | |
return 1; | |
} | |
else if (lhsId.text === "module" && lhs.name.text === "exports") { | |
return 2; | |
} | |
} | |
else if (lhs.expression.kind === 97) { | |
return 4; | |
} | |
else if (lhs.expression.kind === 171) { | |
var innerPropertyAccess = lhs.expression; | |
if (innerPropertyAccess.expression.kind === 69 && innerPropertyAccess.name.text === "prototype") { | |
return 3; | |
} | |
} | |
return 0; | |
} | |
ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; | |
function getExternalModuleName(node) { | |
if (node.kind === 229) { | |
return node.moduleSpecifier; | |
} | |
if (node.kind === 228) { | |
var reference = node.moduleReference; | |
if (reference.kind === 239) { | |
return reference.expression; | |
} | |
} | |
if (node.kind === 235) { | |
return node.moduleSpecifier; | |
} | |
if (node.kind === 224 && node.name.kind === 9) { | |
return node.name; | |
} | |
} | |
ts.getExternalModuleName = getExternalModuleName; | |
function hasQuestionToken(node) { | |
if (node) { | |
switch (node.kind) { | |
case 141: | |
case 146: | |
case 145: | |
case 253: | |
case 252: | |
case 144: | |
case 143: | |
return node.questionToken !== undefined; | |
} | |
} | |
return false; | |
} | |
ts.hasQuestionToken = hasQuestionToken; | |
function isJSDocConstructSignature(node) { | |
return node.kind === 268 && | |
node.parameters.length > 0 && | |
node.parameters[0].type.kind === 270; | |
} | |
ts.isJSDocConstructSignature = isJSDocConstructSignature; | |
function getJSDocTag(node, kind, checkParentVariableStatement) { | |
if (!node) { | |
return undefined; | |
} | |
var jsDocComment = getJSDocComment(node, checkParentVariableStatement); | |
if (!jsDocComment) { | |
return undefined; | |
} | |
for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { | |
var tag = _a[_i]; | |
if (tag.kind === kind) { | |
return tag; | |
} | |
} | |
} | |
function getJSDocComment(node, checkParentVariableStatement) { | |
if (node.jsDocComment) { | |
return node.jsDocComment; | |
} | |
if (checkParentVariableStatement) { | |
var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 217 && | |
node.parent.initializer === node && | |
node.parent.parent.parent.kind === 199; | |
var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; | |
if (variableStatementNode) { | |
return variableStatementNode.jsDocComment; | |
} | |
var parent_3 = node.parent; | |
var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && | |
parent_3.kind === 186 && | |
parent_3.operatorToken.kind === 56 && | |
parent_3.parent.kind === 201; | |
if (isSourceOfAssignmentExpressionStatement) { | |
return parent_3.parent.jsDocComment; | |
} | |
var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 252; | |
if (isPropertyAssignmentExpression) { | |
return parent_3.jsDocComment; | |
} | |
} | |
return undefined; | |
} | |
function getJSDocTypeTag(node) { | |
return getJSDocTag(node, 276, false); | |
} | |
ts.getJSDocTypeTag = getJSDocTypeTag; | |
function getJSDocReturnTag(node) { | |
return getJSDocTag(node, 275, true); | |
} | |
ts.getJSDocReturnTag = getJSDocReturnTag; | |
function getJSDocTemplateTag(node) { | |
return getJSDocTag(node, 277, false); | |
} | |
ts.getJSDocTemplateTag = getJSDocTemplateTag; | |
function getCorrespondingJSDocParameterTag(parameter) { | |
if (parameter.name && parameter.name.kind === 69) { | |
var parameterName = parameter.name.text; | |
var jsDocComment = getJSDocComment(parameter.parent, true); | |
if (jsDocComment) { | |
for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { | |
var tag = _a[_i]; | |
if (tag.kind === 274) { | |
var parameterTag = tag; | |
var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; | |
if (name_6.text === parameterName) { | |
return parameterTag; | |
} | |
} | |
} | |
} | |
} | |
return undefined; | |
} | |
ts.getCorrespondingJSDocParameterTag = getCorrespondingJSDocParameterTag; | |
function hasRestParameter(s) { | |
return isRestParameter(ts.lastOrUndefined(s.parameters)); | |
} | |
ts.hasRestParameter = hasRestParameter; | |
function hasDeclaredRestParameter(s) { | |
return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); | |
} | |
ts.hasDeclaredRestParameter = hasDeclaredRestParameter; | |
function isRestParameter(node) { | |
if (node && (node.flags & 134217728)) { | |
if (node.type && node.type.kind === 269) { | |
return true; | |
} | |
var paramTag = getCorrespondingJSDocParameterTag(node); | |
if (paramTag && paramTag.typeExpression) { | |
return paramTag.typeExpression.type.kind === 269; | |
} | |
} | |
return isDeclaredRestParam(node); | |
} | |
ts.isRestParameter = isRestParameter; | |
function isDeclaredRestParam(node) { | |
return node && node.dotDotDotToken !== undefined; | |
} | |
ts.isDeclaredRestParam = isDeclaredRestParam; | |
function isLiteralKind(kind) { | |
return 8 <= kind && kind <= 11; | |
} | |
ts.isLiteralKind = isLiteralKind; | |
function isTextualLiteralKind(kind) { | |
return kind === 9 || kind === 11; | |
} | |
ts.isTextualLiteralKind = isTextualLiteralKind; | |
function isTemplateLiteralKind(kind) { | |
return 11 <= kind && kind <= 14; | |
} | |
ts.isTemplateLiteralKind = isTemplateLiteralKind; | |
function isBindingPattern(node) { | |
return !!node && (node.kind === 167 || node.kind === 166); | |
} | |
ts.isBindingPattern = isBindingPattern; | |
function isAssignmentTarget(node) { | |
while (node.parent.kind === 177) { | |
node = node.parent; | |
} | |
while (true) { | |
var parent_4 = node.parent; | |
if (parent_4.kind === 169 || parent_4.kind === 190) { | |
node = parent_4; | |
continue; | |
} | |
if (parent_4.kind === 252 || parent_4.kind === 253) { | |
node = parent_4.parent; | |
continue; | |
} | |
return parent_4.kind === 186 && | |
parent_4.operatorToken.kind === 56 && | |
parent_4.left === node || | |
(parent_4.kind === 206 || parent_4.kind === 207) && | |
parent_4.initializer === node; | |
} | |
} | |
ts.isAssignmentTarget = isAssignmentTarget; | |
function isNodeDescendentOf(node, ancestor) { | |
while (node) { | |
if (node === ancestor) | |
return true; | |
node = node.parent; | |
} | |
return false; | |
} | |
ts.isNodeDescendentOf = isNodeDescendentOf; | |
function isInAmbientContext(node) { | |
while (node) { | |
if (node.flags & 2 || (node.kind === 255 && node.isDeclarationFile)) { | |
return true; | |
} | |
node = node.parent; | |
} | |
return false; | |
} | |
ts.isInAmbientContext = isInAmbientContext; | |
function isDeclaration(node) { | |
switch (node.kind) { | |
case 179: | |
case 168: | |
case 220: | |
case 191: | |
case 147: | |
case 223: | |
case 254: | |
case 237: | |
case 219: | |
case 178: | |
case 148: | |
case 230: | |
case 228: | |
case 233: | |
case 221: | |
case 146: | |
case 145: | |
case 224: | |
case 231: | |
case 141: | |
case 252: | |
case 144: | |
case 143: | |
case 149: | |
case 253: | |
case 222: | |
case 140: | |
case 217: | |
return true; | |
} | |
return false; | |
} | |
ts.isDeclaration = isDeclaration; | |
function isStatement(n) { | |
switch (n.kind) { | |
case 209: | |
case 208: | |
case 216: | |
case 203: | |
case 201: | |
case 200: | |
case 206: | |
case 207: | |
case 205: | |
case 202: | |
case 213: | |
case 210: | |
case 212: | |
case 214: | |
case 215: | |
case 199: | |
case 204: | |
case 211: | |
case 234: | |
return true; | |
default: | |
return false; | |
} | |
} | |
ts.isStatement = isStatement; | |
function isClassElement(n) { | |
switch (n.kind) { | |
case 147: | |
case 144: | |
case 146: | |
case 148: | |
case 149: | |
case 145: | |
case 152: | |
return true; | |
default: | |
return false; | |
} | |
} | |
ts.isClassElement = isClassElement; | |
function isDeclarationName(name) { | |
if (name.kind !== 69 && name.kind !== 9 && name.kind !== 8) { | |
return false; | |
} | |
var parent = name.parent; | |
if (parent.kind === 233 || parent.kind === 237) { | |
if (parent.propertyName) { | |
return true; | |
} | |
} | |
if (isDeclaration(parent)) { | |
return parent.name === name; | |
} | |
return false; | |
} | |
ts.isDeclarationName = isDeclarationName; | |
function isIdentifierName(node) { | |
var parent = node.parent; | |
switch (parent.kind) { | |
case 144: | |
case 143: | |
case 146: | |
case 145: | |
case 148: | |
case 149: | |
case 254: | |
case 252: | |
case 171: | |
return parent.name === node; | |
case 138: | |
if (parent.right === node) { | |
while (parent.kind === 138) { | |
parent = parent.parent; | |
} | |
return parent.kind === 157; | |
} | |
return false; | |
case 168: | |
case 233: | |
return parent.propertyName === node; | |
case 237: | |
return true; | |
} | |
return false; | |
} | |
ts.isIdentifierName = isIdentifierName; | |
function isAliasSymbolDeclaration(node) { | |
return node.kind === 228 || | |
node.kind === 227 || | |
node.kind === 230 && !!node.name || | |
node.kind === 231 || | |
node.kind === 233 || | |
node.kind === 237 || | |
node.kind === 234 && node.expression.kind === 69; | |
} | |
ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; | |
function getClassExtendsHeritageClauseElement(node) { | |
var heritageClause = getHeritageClause(node.heritageClauses, 83); | |
return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined; | |
} | |
ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement; | |
function getClassImplementsHeritageClauseElements(node) { | |
var heritageClause = getHeritageClause(node.heritageClauses, 106); | |
return heritageClause ? heritageClause.types : undefined; | |
} | |
ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements; | |
function getInterfaceBaseTypeNodes(node) { | |
var heritageClause = getHeritageClause(node.heritageClauses, 83); | |
return heritageClause ? heritageClause.types : undefined; | |
} | |
ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes; | |
function getHeritageClause(clauses, kind) { | |
if (clauses) { | |
for (var _i = 0, clauses_1 = clauses; _i < clauses_1.length; _i++) { | |
var clause = clauses_1[_i]; | |
if (clause.token === kind) { | |
return clause; | |
} | |
} | |
} | |
return undefined; | |
} | |
ts.getHeritageClause = getHeritageClause; | |
function tryResolveScriptReference(host, sourceFile, reference) { | |
if (!host.getCompilerOptions().noResolve) { | |
var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName); | |
return host.getSourceFile(referenceFileName); | |
} | |
} | |
ts.tryResolveScriptReference = tryResolveScriptReference; | |
function getAncestor(node, kind) { | |
while (node) { | |
if (node.kind === kind) { | |
return node; | |
} | |
node = node.parent; | |
} | |
return undefined; | |
} | |
ts.getAncestor = getAncestor; | |
function getFileReferenceFromReferencePath(comment, commentRange) { | |
var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim; | |
var isNoDefaultLibRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/gim; | |
if (simpleReferenceRegEx.test(comment)) { | |
if (isNoDefaultLibRegEx.test(comment)) { | |
return { | |
isNoDefaultLib: true | |
}; | |
} | |
else { | |
var refMatchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment); | |
var refLibResult = !refMatchResult && ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx.exec(comment); | |
if (refMatchResult || refLibResult) { | |
var start = commentRange.pos; | |
var end = commentRange.end; | |
return { | |
fileReference: { | |
pos: start, | |
end: end, | |
fileName: (refMatchResult || refLibResult)[3] | |
}, | |
isNoDefaultLib: false, | |
isTypeReferenceDirective: !!refLibResult | |
}; | |
} | |
return { | |
diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax, | |
isNoDefaultLib: false | |
}; | |
} | |
} | |
return undefined; | |
} | |
ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; | |
function isKeyword(token) { | |
return 70 <= token && token <= 137; | |
} | |
ts.isKeyword = isKeyword; | |
function isTrivia(token) { | |
return 2 <= token && token <= 7; | |
} | |
ts.isTrivia = isTrivia; | |
function isAsyncFunctionLike(node) { | |
return isFunctionLike(node) && (node.flags & 256) !== 0 && !isAccessor(node); | |
} | |
ts.isAsyncFunctionLike = isAsyncFunctionLike; | |
function isStringOrNumericLiteral(kind) { | |
return kind === 9 || kind === 8; | |
} | |
ts.isStringOrNumericLiteral = isStringOrNumericLiteral; | |
function hasDynamicName(declaration) { | |
return declaration.name && isDynamicName(declaration.name); | |
} | |
ts.hasDynamicName = hasDynamicName; | |
function isDynamicName(name) { | |
return name.kind === 139 && | |
!isStringOrNumericLiteral(name.expression.kind) && | |
!isWellKnownSymbolSyntactically(name.expression); | |
} | |
ts.isDynamicName = isDynamicName; | |
function isWellKnownSymbolSyntactically(node) { | |
return isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression); | |
} | |
ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically; | |
function getPropertyNameForPropertyNameNode(name) { | |
if (name.kind === 69 || name.kind === 9 || name.kind === 8) { | |
return name.text; | |
} | |
if (name.kind === 139) { | |
var nameExpression = name.expression; | |
if (isWellKnownSymbolSyntactically(nameExpression)) { | |
var rightHandSideName = nameExpression.name.text; | |
return getPropertyNameForKnownSymbolName(rightHandSideName); | |
} | |
} | |
return undefined; | |
} | |
ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode; | |
function getPropertyNameForKnownSymbolName(symbolName) { | |
return "__@" + symbolName; | |
} | |
ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName; | |
function isESSymbolIdentifier(node) { | |
return node.kind === 69 && node.text === "Symbol"; | |
} | |
ts.isESSymbolIdentifier = isESSymbolIdentifier; | |
function isModifierKind(token) { | |
switch (token) { | |
case 115: | |
case 118: | |
case 74: | |
case 122: | |
case 77: | |
case 82: | |
case 112: | |
case 110: | |
case 111: | |
case 127: | |
case 113: | |
return true; | |
} | |
return false; | |
} | |
ts.isModifierKind = isModifierKind; | |
function isParameterDeclaration(node) { | |
var root = getRootDeclaration(node); | |
return root.kind === 141; | |
} | |
ts.isParameterDeclaration = isParameterDeclaration; | |
function getRootDeclaration(node) { | |
while (node.kind === 168) { | |
node = node.parent.parent; | |
} | |
return node; | |
} | |
ts.getRootDeclaration = getRootDeclaration; | |
function nodeStartsNewLexicalEnvironment(n) { | |
return isFunctionLike(n) || n.kind === 224 || n.kind === 255; | |
} | |
ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; | |
function cloneNode(node, location, flags, parent) { | |
var clone = location !== undefined | |
? ts.createNode(node.kind, location.pos, location.end) | |
: createSynthesizedNode(node.kind); | |
for (var key in node) { | |
if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) { | |
continue; | |
} | |
clone[key] = node[key]; | |
} | |
if (flags !== undefined) { | |
clone.flags = flags; | |
} | |
if (parent !== undefined) { | |
clone.parent = parent; | |
} | |
return clone; | |
} | |
ts.cloneNode = cloneNode; | |
function cloneEntityName(node, parent) { | |
var clone = cloneNode(node, node, node.flags, parent); | |
if (isQualifiedName(clone)) { | |
var left = clone.left, right = clone.right; | |
clone.left = cloneEntityName(left, clone); | |
clone.right = cloneNode(right, right, right.flags, parent); | |
} | |
return clone; | |
} | |
ts.cloneEntityName = cloneEntityName; | |
function isQualifiedName(node) { | |
return node.kind === 138; | |
} | |
ts.isQualifiedName = isQualifiedName; | |
function nodeIsSynthesized(node) { | |
return node.pos === -1; | |
} | |
ts.nodeIsSynthesized = nodeIsSynthesized; | |
function createSynthesizedNode(kind, startsOnNewLine) { | |
var node = ts.createNode(kind, -1, -1); | |
node.startsOnNewLine = startsOnNewLine; | |
return node; | |
} | |
ts.createSynthesizedNode = createSynthesizedNode; | |
function createSynthesizedNodeArray() { | |
var array = []; | |
array.pos = -1; | |
array.end = -1; | |
return array; | |
} | |
ts.createSynthesizedNodeArray = createSynthesizedNodeArray; | |
function createDiagnosticCollection() { | |
var nonFileDiagnostics = []; | |
var fileDiagnostics = {}; | |
var diagnosticsModified = false; | |
var modificationCount = 0; | |
return { | |
add: add, | |
getGlobalDiagnostics: getGlobalDiagnostics, | |
getDiagnostics: getDiagnostics, | |
getModificationCount: getModificationCount, | |
reattachFileDiagnostics: reattachFileDiagnostics | |
}; | |
function getModificationCount() { | |
return modificationCount; | |
} | |
function reattachFileDiagnostics(newFile) { | |
if (!ts.hasProperty(fileDiagnostics, newFile.fileName)) { | |
return; | |
} | |
for (var _i = 0, _a = fileDiagnostics[newFile.fileName]; _i < _a.length; _i++) { | |
var diagnostic = _a[_i]; | |
diagnostic.file = newFile; | |
} | |
} | |
function add(diagnostic) { | |
var diagnostics; | |
if (diagnostic.file) { | |
diagnostics = fileDiagnostics[diagnostic.file.fileName]; | |
if (!diagnostics) { | |
diagnostics = []; | |
fileDiagnostics[diagnostic.file.fileName] = diagnostics; | |
} | |
} | |
else { | |
diagnostics = nonFileDiagnostics; | |
} | |
diagnostics.push(diagnostic); | |
diagnosticsModified = true; | |
modificationCount++; | |
} | |
function getGlobalDiagnostics() { | |
sortAndDeduplicate(); | |
return nonFileDiagnostics; | |
} | |
function getDiagnostics(fileName) { | |
sortAndDeduplicate(); | |
if (fileName) { | |
return fileDiagnostics[fileName] || []; | |
} | |
var allDiagnostics = []; | |
function pushDiagnostic(d) { | |
allDiagnostics.push(d); | |
} | |
ts.forEach(nonFileDiagnostics, pushDiagnostic); | |
for (var key in fileDiagnostics) { | |
if (ts.hasProperty(fileDiagnostics, key)) { | |
ts.forEach(fileDiagnostics[key], pushDiagnostic); | |
} | |
} | |
return ts.sortAndDeduplicateDiagnostics(allDiagnostics); | |
} | |
function sortAndDeduplicate() { | |
if (!diagnosticsModified) { | |
return; | |
} | |
diagnosticsModified = false; | |
nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics); | |
for (var key in fileDiagnostics) { | |
if (ts.hasProperty(fileDiagnostics, key)) { | |
fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]); | |
} | |
} | |
} | |
} | |
ts.createDiagnosticCollection = createDiagnosticCollection; | |
var escapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; | |
var escapedCharsMap = { | |
"\0": "\\0", | |
"\t": "\\t", | |
"\v": "\\v", | |
"\f": "\\f", | |
"\b": "\\b", | |
"\r": "\\r", | |
"\n": "\\n", | |
"\\": "\\\\", | |
"\"": "\\\"", | |
"\u2028": "\\u2028", | |
"\u2029": "\\u2029", | |
"\u0085": "\\u0085" | |
}; | |
function escapeString(s) { | |
s = escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, getReplacement) : s; | |
return s; | |
function getReplacement(c) { | |
return escapedCharsMap[c] || get16BitUnicodeEscapeSequence(c.charCodeAt(0)); | |
} | |
} | |
ts.escapeString = escapeString; | |
function isIntrinsicJsxName(name) { | |
var ch = name.substr(0, 1); | |
return ch.toLowerCase() === ch; | |
} | |
ts.isIntrinsicJsxName = isIntrinsicJsxName; | |
function get16BitUnicodeEscapeSequence(charCode) { | |
var hexCharCode = charCode.toString(16).toUpperCase(); | |
var paddedHexCode = ("0000" + hexCharCode).slice(-4); | |
return "\\u" + paddedHexCode; | |
} | |
var nonAsciiCharacters = /[^\u0000-\u007F]/g; | |
function escapeNonAsciiCharacters(s) { | |
return nonAsciiCharacters.test(s) ? | |
s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) : | |
s; | |
} | |
ts.escapeNonAsciiCharacters = escapeNonAsciiCharacters; | |
var indentStrings = ["", " "]; | |
function getIndentString(level) { | |
if (indentStrings[level] === undefined) { | |
indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; | |
} | |
return indentStrings[level]; | |
} | |
ts.getIndentString = getIndentString; | |
function getIndentSize() { | |
return indentStrings[1].length; | |
} | |
ts.getIndentSize = getIndentSize; | |
function createTextWriter(newLine) { | |
var output; | |
var indent; | |
var lineStart; | |
var lineCount; | |
var linePos; | |
function write(s) { | |
if (s && s.length) { | |
if (lineStart) { | |
output += getIndentString(indent); | |
lineStart = false; | |
} | |
output += s; | |
} | |
} | |
function reset() { | |
output = ""; | |
indent = 0; | |
lineStart = true; | |
lineCount = 0; | |
linePos = 0; | |
} | |
function rawWrite(s) { | |
if (s !== undefined) { | |
if (lineStart) { | |
lineStart = false; | |
} | |
output += s; | |
} | |
} | |
function writeLiteral(s) { | |
if (s && s.length) { | |
write(s); | |
var lineStartsOfS = ts.computeLineStarts(s); | |
if (lineStartsOfS.length > 1) { | |
lineCount = lineCount + lineStartsOfS.length - 1; | |
linePos = output.length - s.length + ts.lastOrUndefined(lineStartsOfS); | |
} | |
} | |
} | |
function writeLine() { | |
if (!lineStart) { | |
output += newLine; | |
lineCount++; | |
linePos = output.length; | |
lineStart = true; | |
} | |
} | |
function writeTextOfNode(text, node) { | |
write(getTextOfNodeFromSourceText(text, node)); | |
} | |
reset(); | |
return { | |
write: write, | |
rawWrite: rawWrite, | |
writeTextOfNode: writeTextOfNode, | |
writeLiteral: writeLiteral, | |
writeLine: writeLine, | |
increaseIndent: function () { indent++; }, | |
decreaseIndent: function () { indent--; }, | |
getIndent: function () { return indent; }, | |
getTextPos: function () { return output.length; }, | |
getLine: function () { return lineCount + 1; }, | |
getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, | |
getText: function () { return output; }, | |
reset: reset | |
}; | |
} | |
ts.createTextWriter = createTextWriter; | |
function getExternalModuleNameFromPath(host, fileName) { | |
var getCanonicalFileName = function (f) { return host.getCanonicalFileName(f); }; | |
var dir = ts.toPath(host.getCommonSourceDirectory(), host.getCurrentDirectory(), getCanonicalFileName); | |
var filePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); | |
var relativePath = ts.getRelativePathToDirectoryOrUrl(dir, filePath, dir, getCanonicalFileName, false); | |
return ts.removeFileExtension(relativePath); | |
} | |
ts.getExternalModuleNameFromPath = getExternalModuleNameFromPath; | |
function getOwnEmitOutputFilePath(sourceFile, host, extension) { | |
var compilerOptions = host.getCompilerOptions(); | |
var emitOutputFilePathWithoutExtension; | |
if (compilerOptions.outDir) { | |
emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir)); | |
} | |
else { | |
emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName); | |
} | |
return emitOutputFilePathWithoutExtension + extension; | |
} | |
ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath; | |
function getDeclarationEmitOutputFilePath(sourceFile, host) { | |
var options = host.getCompilerOptions(); | |
var outputDir = options.declarationDir || options.outDir; | |
if (options.declaration) { | |
var path = outputDir | |
? getSourceFilePathInNewDir(sourceFile, host, outputDir) | |
: sourceFile.fileName; | |
return ts.removeFileExtension(path) + ".d.ts"; | |
} | |
} | |
ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath; | |
function getEmitScriptTarget(compilerOptions) { | |
return compilerOptions.target || 0; | |
} | |
ts.getEmitScriptTarget = getEmitScriptTarget; | |
function getEmitModuleKind(compilerOptions) { | |
return typeof compilerOptions.module === "number" ? | |
compilerOptions.module : | |
getEmitScriptTarget(compilerOptions) === 2 ? ts.ModuleKind.ES6 : ts.ModuleKind.CommonJS; | |
} | |
ts.getEmitModuleKind = getEmitModuleKind; | |
function forEachExpectedEmitFile(host, action, targetSourceFile) { | |
var options = host.getCompilerOptions(); | |
if (options.outFile || options.out) { | |
onBundledEmit(host); | |
} | |
else { | |
var sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile]; | |
for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) { | |
var sourceFile = sourceFiles_1[_i]; | |
if (!isDeclarationFile(sourceFile)) { | |
onSingleFileEmit(host, sourceFile); | |
} | |
} | |
} | |
function onSingleFileEmit(host, sourceFile) { | |
var extension = ".js"; | |
if (options.jsx === 1) { | |
if (isSourceFileJavaScript(sourceFile)) { | |
if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) { | |
extension = ".jsx"; | |
} | |
} | |
else if (sourceFile.languageVariant === 1) { | |
extension = ".jsx"; | |
} | |
} | |
var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, extension); | |
var emitFileNames = { | |
jsFilePath: jsFilePath, | |
sourceMapFilePath: getSourceMapFilePath(jsFilePath, options), | |
declarationFilePath: !isSourceFileJavaScript(sourceFile) ? getDeclarationEmitOutputFilePath(sourceFile, host) : undefined | |
}; | |
action(emitFileNames, [sourceFile], false); | |
} | |
function onBundledEmit(host) { | |
var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { | |
return !isDeclarationFile(sourceFile) | |
&& (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); | |
}); | |
if (bundledSources.length) { | |
var jsFilePath = options.outFile || options.out; | |
var emitFileNames = { | |
jsFilePath: jsFilePath, | |
sourceMapFilePath: getSourceMapFilePath(jsFilePath, options), | |
declarationFilePath: options.declaration ? ts.removeFileExtension(jsFilePath) + ".d.ts" : undefined | |
}; | |
action(emitFileNames, bundledSources, true); | |
} | |
} | |
function getSourceMapFilePath(jsFilePath, options) { | |
return options.sourceMap ? jsFilePath + ".map" : undefined; | |
} | |
} | |
ts.forEachExpectedEmitFile = forEachExpectedEmitFile; | |
function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { | |
var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); | |
sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); | |
return ts.combinePaths(newDirPath, sourceFilePath); | |
} | |
ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; | |
function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) { | |
host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) { | |
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); | |
}, sourceFiles); | |
} | |
ts.writeFile = writeFile; | |
function getLineOfLocalPosition(currentSourceFile, pos) { | |
return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line; | |
} | |
ts.getLineOfLocalPosition = getLineOfLocalPosition; | |
function getLineOfLocalPositionFromLineMap(lineMap, pos) { | |
return ts.computeLineAndCharacterOfPosition(lineMap, pos).line; | |
} | |
ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; | |
function getFirstConstructorWithBody(node) { | |
return ts.forEach(node.members, function (member) { | |
if (member.kind === 147 && nodeIsPresent(member.body)) { | |
return member; | |
} | |
}); | |
} | |
ts.getFirstConstructorWithBody = getFirstConstructorWithBody; | |
function getSetAccessorTypeAnnotationNode(accessor) { | |
return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; | |
} | |
ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; | |
function getAllAccessorDeclarations(declarations, accessor) { | |
var firstAccessor; | |
var secondAccessor; | |
var getAccessor; | |
var setAccessor; | |
if (hasDynamicName(accessor)) { | |
firstAccessor = accessor; | |
if (accessor.kind === 148) { | |
getAccessor = accessor; | |
} | |
else if (accessor.kind === 149) { | |
setAccessor = accessor; | |
} | |
else { | |
ts.Debug.fail("Accessor has wrong kind"); | |
} | |
} | |
else { | |
ts.forEach(declarations, function (member) { | |
if ((member.kind === 148 || member.kind === 149) | |
&& (member.flags & 32) === (accessor.flags & 32)) { | |
var memberName = getPropertyNameForPropertyNameNode(member.name); | |
var accessorName = getPropertyNameForPropertyNameNode(accessor.name); | |
if (memberName === accessorName) { | |
if (!firstAccessor) { | |
firstAccessor = member; | |
} | |
else if (!secondAccessor) { | |
secondAccessor = member; | |
} | |
if (member.kind === 148 && !getAccessor) { | |
getAccessor = member; | |
} | |
if (member.kind === 149 && !setAccessor) { | |
setAccessor = member; | |
} | |
} | |
} | |
}); | |
} | |
return { | |
firstAccessor: firstAccessor, | |
secondAccessor: secondAccessor, | |
getAccessor: getAccessor, | |
setAccessor: setAccessor | |
}; | |
} | |
ts.getAllAccessorDeclarations = getAllAccessorDeclarations; | |
function emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments) { | |
if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && | |
getLineOfLocalPositionFromLineMap(lineMap, node.pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) { | |
writer.writeLine(); | |
} | |
} | |
ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments; | |
function emitComments(text, lineMap, writer, comments, trailingSeparator, newLine, writeComment) { | |
var emitLeadingSpace = !trailingSeparator; | |
ts.forEach(comments, function (comment) { | |
if (emitLeadingSpace) { | |
writer.write(" "); | |
emitLeadingSpace = false; | |
} | |
writeComment(text, lineMap, writer, comment, newLine); | |
if (comment.hasTrailingNewLine) { | |
writer.writeLine(); | |
} | |
else if (trailingSeparator) { | |
writer.write(" "); | |
} | |
else { | |
emitLeadingSpace = true; | |
} | |
}); | |
} | |
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), isPinnedComment); | |
} | |
} | |
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.lastOrUndefined(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, true, newLine, writeComment); | |
currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.lastOrUndefined(detachedComments).end }; | |
} | |
} | |
} | |
return currentDetachedCommentInfo; | |
function isPinnedComment(comment) { | |
return text.charCodeAt(comment.pos + 1) === 42 && | |
text.charCodeAt(comment.pos + 2) === 33; | |
} | |
} | |
ts.emitDetachedComments = emitDetachedComments; | |
function writeCommentRange(text, lineMap, writer, comment, newLine) { | |
if (text.charCodeAt(comment.pos + 1) === 42) { | |
var firstCommentLineAndCharacter = ts.computeLineAndCharacterOfPosition(lineMap, comment.pos); | |
var lineCount = lineMap.length; | |
var firstCommentLineIndent = void 0; | |
for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { | |
var nextLineStart = (currentLine + 1) === lineCount | |
? text.length + 1 | |
: lineMap[currentLine + 1]; | |
if (pos !== comment.pos) { | |
if (firstCommentLineIndent === undefined) { | |
firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], comment.pos); | |
} | |
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, comment, writer, newLine, pos, nextLineStart); | |
pos = nextLineStart; | |
} | |
} | |
else { | |
writer.write(text.substring(comment.pos, comment.end)); | |
} | |
} | |
ts.writeCommentRange = writeCommentRange; | |
function writeTrimmedCurrentLine(text, comment, writer, newLine, pos, nextLineStart) { | |
var end = Math.min(comment.end, nextLineStart - 1); | |
var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, ""); | |
if (currentLineText) { | |
writer.write(currentLineText); | |
if (end !== comment.end) { | |
writer.writeLine(); | |
} | |
} | |
else { | |
writer.writeLiteral(newLine); | |
} | |
} | |
function calculateIndent(text, pos, end) { | |
var currentLineIndent = 0; | |
for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { | |
if (text.charCodeAt(pos) === 9) { | |
currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); | |
} | |
else { | |
currentLineIndent++; | |
} | |
} | |
return currentLineIndent; | |
} | |
function modifierToFlag(token) { | |
switch (token) { | |
case 113: return 32; | |
case 112: return 4; | |
case 111: return 16; | |
case 110: return 8; | |
case 115: return 128; | |
case 82: return 1; | |
case 122: return 2; | |
case 74: return 2048; | |
case 77: return 512; | |
case 118: return 256; | |
case 127: return 64; | |
} | |
return 0; | |
} | |
ts.modifierToFlag = modifierToFlag; | |
function isLeftHandSideExpression(expr) { | |
if (expr) { | |
switch (expr.kind) { | |
case 171: | |
case 172: | |
case 174: | |
case 173: | |
case 195: | |
case 240: | |
case 241: | |
case 175: | |
case 169: | |
case 177: | |
case 170: | |
case 191: | |
case 178: | |
case 69: | |
case 10: | |
case 8: | |
case 9: | |
case 11: | |
case 188: | |
case 84: | |
case 93: | |
case 97: | |
case 99: | |
case 95: | |
return true; | |
} | |
} | |
return false; | |
} | |
ts.isLeftHandSideExpression = isLeftHandSideExpression; | |
function isAssignmentOperator(token) { | |
return token >= 56 && token <= 68; | |
} | |
ts.isAssignmentOperator = isAssignmentOperator; | |
function isExpressionWithTypeArgumentsInClassExtendsClause(node) { | |
return node.kind === 193 && | |
node.parent.token === 83 && | |
isClassLike(node.parent.parent); | |
} | |
ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause; | |
function isSupportedExpressionWithTypeArguments(node) { | |
return isSupportedExpressionWithTypeArgumentsRest(node.expression); | |
} | |
ts.isSupportedExpressionWithTypeArguments = isSupportedExpressionWithTypeArguments; | |
function isSupportedExpressionWithTypeArgumentsRest(node) { | |
if (node.kind === 69) { | |
return true; | |
} | |
else if (isPropertyAccessExpression(node)) { | |
return isSupportedExpressionWithTypeArgumentsRest(node.expression); | |
} | |
else { | |
return false; | |
} | |
} | |
function isRightSideOfQualifiedNameOrPropertyAccess(node) { | |
return (node.parent.kind === 138 && node.parent.right === node) || | |
(node.parent.kind === 171 && node.parent.name === node); | |
} | |
ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; | |
function isEmptyObjectLiteralOrArrayLiteral(expression) { | |
var kind = expression.kind; | |
if (kind === 170) { | |
return expression.properties.length === 0; | |
} | |
if (kind === 169) { | |
return expression.elements.length === 0; | |
} | |
return false; | |
} | |
ts.isEmptyObjectLiteralOrArrayLiteral = isEmptyObjectLiteralOrArrayLiteral; | |
function getLocalSymbolForExportDefault(symbol) { | |
return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & 512) ? symbol.valueDeclaration.localSymbol : undefined; | |
} | |
ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault; | |
function hasJavaScriptFileExtension(fileName) { | |
return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); | |
} | |
ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; | |
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; | |
} | |
ts.stringify = typeof JSON !== "undefined" && JSON.stringify | |
? JSON.stringify | |
: stringifyFallback; | |
function stringifyFallback(value) { | |
return value === undefined ? undefined : stringifyValue(value); | |
} | |
function stringifyValue(value) { | |
return typeof value === "string" ? "\"" + escapeString(value) + "\"" | |
: typeof value === "number" ? isFinite(value) ? String(value) : "null" | |
: typeof value === "boolean" ? value ? "true" : "false" | |
: typeof value === "object" && value ? ts.isArray(value) ? cycleCheck(stringifyArray, value) : cycleCheck(stringifyObject, value) | |
: "null"; | |
} | |
function cycleCheck(cb, value) { | |
ts.Debug.assert(!value.hasOwnProperty("__cycle"), "Converting circular structure to JSON"); | |
value.__cycle = true; | |
var result = cb(value); | |
delete value.__cycle; | |
return result; | |
} | |
function stringifyArray(value) { | |
return "[" + ts.reduceLeft(value, stringifyElement, "") + "]"; | |
} | |
function stringifyElement(memo, value) { | |
return (memo ? memo + "," : memo) + stringifyValue(value); | |
} | |
function stringifyObject(value) { | |
return "{" + ts.reduceProperties(value, stringifyProperty, "") + "}"; | |
} | |
function stringifyProperty(memo, value, key) { | |
return value === undefined || typeof value === "function" || key === "__cycle" ? memo | |
: (memo ? memo + "," : memo) + ("\"" + escapeString(key) + "\":" + stringifyValue(value)); | |
} | |
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 convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) { | |
return !ts.isRootedDiskPath(absoluteOrRelativePath) | |
? absoluteOrRelativePath | |
: ts.getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false); | |
} | |
ts.convertToRelativePath = convertToRelativePath; | |
var carriageReturnLineFeed = "\r\n"; | |
var lineFeed = "\n"; | |
function getNewLineCharacter(options) { | |
if (options.newLine === 0) { | |
return carriageReturnLineFeed; | |
} | |
else if (options.newLine === 1) { | |
return lineFeed; | |
} | |
else if (ts.sys) { | |
return ts.sys.newLine; | |
} | |
return carriageReturnLineFeed; | |
} | |
ts.getNewLineCharacter = getNewLineCharacter; | |
function isWatchSet(options) { | |
return options.watch && options.hasOwnProperty("watch"); | |
} | |
ts.isWatchSet = isWatchSet; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
function getDefaultLibFileName(options) { | |
return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts"; | |
} | |
ts.getDefaultLibFileName = getDefaultLibFileName; | |
function textSpanEnd(span) { | |
return span.start + span.length; | |
} | |
ts.textSpanEnd = textSpanEnd; | |
function textSpanIsEmpty(span) { | |
return span.length === 0; | |
} | |
ts.textSpanIsEmpty = textSpanIsEmpty; | |
function textSpanContainsPosition(span, position) { | |
return position >= span.start && position < textSpanEnd(span); | |
} | |
ts.textSpanContainsPosition = textSpanContainsPosition; | |
function textSpanContainsTextSpan(span, other) { | |
return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); | |
} | |
ts.textSpanContainsTextSpan = textSpanContainsTextSpan; | |
function textSpanOverlapsWith(span, other) { | |
var overlapStart = Math.max(span.start, other.start); | |
var overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other)); | |
return overlapStart < overlapEnd; | |
} | |
ts.textSpanOverlapsWith = textSpanOverlapsWith; | |
function textSpanOverlap(span1, span2) { | |
var overlapStart = Math.max(span1.start, span2.start); | |
var overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); | |
if (overlapStart < overlapEnd) { | |
return createTextSpanFromBounds(overlapStart, overlapEnd); | |
} | |
return undefined; | |
} | |
ts.textSpanOverlap = textSpanOverlap; | |
function textSpanIntersectsWithTextSpan(span, other) { | |
return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start; | |
} | |
ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan; | |
function textSpanIntersectsWith(span, start, length) { | |
var end = start + length; | |
return start <= textSpanEnd(span) && end >= span.start; | |
} | |
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 intersectStart = Math.max(span1.start, span2.start); | |
var intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); | |
if (intersectStart <= intersectEnd) { | |
return createTextSpanFromBounds(intersectStart, intersectEnd); | |
} | |
return 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 === 140) { | |
for (var current = d; current; current = current.parent) { | |
if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 221) { | |
return current; | |
} | |
} | |
} | |
} | |
ts.getTypeParameterOwner = getTypeParameterOwner; | |
function isParameterPropertyDeclaration(node) { | |
return node.flags & 28 && node.parent.kind === 147 && ts.isClassLike(node.parent.parent); | |
} | |
ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; | |
function startsWith(str, prefix) { | |
return str.lastIndexOf(prefix, 0) === 0; | |
} | |
ts.startsWith = startsWith; | |
function endsWith(str, suffix) { | |
var expectedPos = str.length - suffix.length; | |
return str.indexOf(suffix, expectedPos) === expectedPos; | |
} | |
ts.endsWith = endsWith; | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
ts.parseTime = 0; | |
var NodeConstructor; | |
var SourceFileConstructor; | |
function createNode(kind, pos, end) { | |
if (kind === 255) { | |
return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); | |
} | |
else { | |
return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, pos, end); | |
} | |
} | |
ts.createNode = createNode; | |
function visitNode(cbNode, node) { | |
if (node) { | |
return cbNode(node); | |
} | |
} | |
function visitNodeArray(cbNodes, nodes) { | |
if (nodes) { | |
return cbNodes(nodes); | |
} | |
} | |
function visitEachNode(cbNode, nodes) { | |
if (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 forEachChild(node, cbNode, cbNodeArray) { | |
if (!node) { | |
return; | |
} | |
var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; | |
var cbNodes = cbNodeArray || cbNode; | |
switch (node.kind) { | |
case 138: | |
return visitNode(cbNode, node.left) || | |
visitNode(cbNode, node.right); | |
case 140: | |
return visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.constraint) || | |
visitNode(cbNode, node.expression); | |
case 253: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.questionToken) || | |
visitNode(cbNode, node.equalsToken) || | |
visitNode(cbNode, node.objectAssignmentInitializer); | |
case 141: | |
case 144: | |
case 143: | |
case 252: | |
case 217: | |
case 168: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.propertyName) || | |
visitNode(cbNode, node.dotDotDotToken) || | |
visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.questionToken) || | |
visitNode(cbNode, node.type) || | |
visitNode(cbNode, node.initializer); | |
case 155: | |
case 156: | |
case 150: | |
case 151: | |
case 152: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNodes(cbNodes, node.typeParameters) || | |
visitNodes(cbNodes, node.parameters) || | |
visitNode(cbNode, node.type); | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
case 178: | |
case 219: | |
case 179: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.asteriskToken) || | |
visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.questionToken) || | |
visitNodes(cbNodes, node.typeParameters) || | |
visitNodes(cbNodes, node.parameters) || | |
visitNode(cbNode, node.type) || | |
visitNode(cbNode, node.equalsGreaterThanToken) || | |
visitNode(cbNode, node.body); | |
case 154: | |
return visitNode(cbNode, node.typeName) || | |
visitNodes(cbNodes, node.typeArguments); | |
case 153: | |
return visitNode(cbNode, node.parameterName) || | |
visitNode(cbNode, node.type); | |
case 157: | |
return visitNode(cbNode, node.exprName); | |
case 158: | |
return visitNodes(cbNodes, node.members); | |
case 159: | |
return visitNode(cbNode, node.elementType); | |
case 160: | |
return visitNodes(cbNodes, node.elementTypes); | |
case 161: | |
case 162: | |
return visitNodes(cbNodes, node.types); | |
case 163: | |
return visitNode(cbNode, node.type); | |
case 166: | |
case 167: | |
return visitNodes(cbNodes, node.elements); | |
case 169: | |
return visitNodes(cbNodes, node.elements); | |
case 170: | |
return visitNodes(cbNodes, node.properties); | |
case 171: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.dotToken) || | |
visitNode(cbNode, node.name); | |
case 172: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.argumentExpression); | |
case 173: | |
case 174: | |
return visitNode(cbNode, node.expression) || | |
visitNodes(cbNodes, node.typeArguments) || | |
visitNodes(cbNodes, node.arguments); | |
case 175: | |
return visitNode(cbNode, node.tag) || | |
visitNode(cbNode, node.template); | |
case 176: | |
return visitNode(cbNode, node.type) || | |
visitNode(cbNode, node.expression); | |
case 177: | |
return visitNode(cbNode, node.expression); | |
case 180: | |
return visitNode(cbNode, node.expression); | |
case 181: | |
return visitNode(cbNode, node.expression); | |
case 182: | |
return visitNode(cbNode, node.expression); | |
case 184: | |
return visitNode(cbNode, node.operand); | |
case 189: | |
return visitNode(cbNode, node.asteriskToken) || | |
visitNode(cbNode, node.expression); | |
case 183: | |
return visitNode(cbNode, node.expression); | |
case 185: | |
return visitNode(cbNode, node.operand); | |
case 186: | |
return visitNode(cbNode, node.left) || | |
visitNode(cbNode, node.operatorToken) || | |
visitNode(cbNode, node.right); | |
case 194: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.type); | |
case 195: | |
return visitNode(cbNode, node.expression); | |
case 187: | |
return visitNode(cbNode, node.condition) || | |
visitNode(cbNode, node.questionToken) || | |
visitNode(cbNode, node.whenTrue) || | |
visitNode(cbNode, node.colonToken) || | |
visitNode(cbNode, node.whenFalse); | |
case 190: | |
return visitNode(cbNode, node.expression); | |
case 198: | |
case 225: | |
return visitNodes(cbNodes, node.statements); | |
case 255: | |
return visitNodes(cbNodes, node.statements) || | |
visitNode(cbNode, node.endOfFileToken); | |
case 199: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.declarationList); | |
case 218: | |
return visitNodes(cbNodes, node.declarations); | |
case 201: | |
return visitNode(cbNode, node.expression); | |
case 202: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.thenStatement) || | |
visitNode(cbNode, node.elseStatement); | |
case 203: | |
return visitNode(cbNode, node.statement) || | |
visitNode(cbNode, node.expression); | |
case 204: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.statement); | |
case 205: | |
return visitNode(cbNode, node.initializer) || | |
visitNode(cbNode, node.condition) || | |
visitNode(cbNode, node.incrementor) || | |
visitNode(cbNode, node.statement); | |
case 206: | |
return visitNode(cbNode, node.initializer) || | |
visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.statement); | |
case 207: | |
return visitNode(cbNode, node.initializer) || | |
visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.statement); | |
case 208: | |
case 209: | |
return visitNode(cbNode, node.label); | |
case 210: | |
return visitNode(cbNode, node.expression); | |
case 211: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.statement); | |
case 212: | |
return visitNode(cbNode, node.expression) || | |
visitNode(cbNode, node.caseBlock); | |
case 226: | |
return visitNodes(cbNodes, node.clauses); | |
case 248: | |
return visitNode(cbNode, node.expression) || | |
visitNodes(cbNodes, node.statements); | |
case 249: | |
return visitNodes(cbNodes, node.statements); | |
case 213: | |
return visitNode(cbNode, node.label) || | |
visitNode(cbNode, node.statement); | |
case 214: | |
return visitNode(cbNode, node.expression); | |
case 215: | |
return visitNode(cbNode, node.tryBlock) || | |
visitNode(cbNode, node.catchClause) || | |
visitNode(cbNode, node.finallyBlock); | |
case 251: | |
return visitNode(cbNode, node.variableDeclaration) || | |
visitNode(cbNode, node.block); | |
case 142: | |
return visitNode(cbNode, node.expression); | |
case 220: | |
case 191: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNodes(cbNodes, node.typeParameters) || | |
visitNodes(cbNodes, node.heritageClauses) || | |
visitNodes(cbNodes, node.members); | |
case 221: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNodes(cbNodes, node.typeParameters) || | |
visitNodes(cbNodes, node.heritageClauses) || | |
visitNodes(cbNodes, node.members); | |
case 222: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNodes(cbNodes, node.typeParameters) || | |
visitNode(cbNode, node.type); | |
case 223: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNodes(cbNodes, node.members); | |
case 254: | |
return visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.initializer); | |
case 224: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.body); | |
case 228: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.moduleReference); | |
case 229: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.importClause) || | |
visitNode(cbNode, node.moduleSpecifier); | |
case 230: | |
return visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.namedBindings); | |
case 227: | |
return visitNode(cbNode, node.name); | |
case 231: | |
return visitNode(cbNode, node.name); | |
case 232: | |
case 236: | |
return visitNodes(cbNodes, node.elements); | |
case 235: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.exportClause) || | |
visitNode(cbNode, node.moduleSpecifier); | |
case 233: | |
case 237: | |
return visitNode(cbNode, node.propertyName) || | |
visitNode(cbNode, node.name); | |
case 234: | |
return visitNodes(cbNodes, node.decorators) || | |
visitNodes(cbNodes, node.modifiers) || | |
visitNode(cbNode, node.expression); | |
case 188: | |
return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); | |
case 196: | |
return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); | |
case 139: | |
return visitNode(cbNode, node.expression); | |
case 250: | |
return visitNodes(cbNodes, node.types); | |
case 193: | |
return visitNode(cbNode, node.expression) || | |
visitNodes(cbNodes, node.typeArguments); | |
case 239: | |
return visitNode(cbNode, node.expression); | |
case 238: | |
return visitNodes(cbNodes, node.decorators); | |
case 240: | |
return visitNode(cbNode, node.openingElement) || | |
visitNodes(cbNodes, node.children) || | |
visitNode(cbNode, node.closingElement); | |
case 241: | |
case 242: | |
return visitNode(cbNode, node.tagName) || | |
visitNodes(cbNodes, node.attributes); | |
case 245: | |
return visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.initializer); | |
case 246: | |
return visitNode(cbNode, node.expression); | |
case 247: | |
return visitNode(cbNode, node.expression); | |
case 244: | |
return visitNode(cbNode, node.tagName); | |
case 256: | |
return visitNode(cbNode, node.type); | |
case 260: | |
return visitNodes(cbNodes, node.types); | |
case 261: | |
return visitNodes(cbNodes, node.types); | |
case 259: | |
return visitNode(cbNode, node.elementType); | |
case 263: | |
return visitNode(cbNode, node.type); | |
case 262: | |
return visitNode(cbNode, node.type); | |
case 264: | |
return visitNodes(cbNodes, node.members); | |
case 266: | |
return visitNode(cbNode, node.name) || | |
visitNodes(cbNodes, node.typeArguments); | |
case 267: | |
return visitNode(cbNode, node.type); | |
case 268: | |
return visitNodes(cbNodes, node.parameters) || | |
visitNode(cbNode, node.type); | |
case 269: | |
return visitNode(cbNode, node.type); | |
case 270: | |
return visitNode(cbNode, node.type); | |
case 271: | |
return visitNode(cbNode, node.type); | |
case 265: | |
return visitNode(cbNode, node.name) || | |
visitNode(cbNode, node.type); | |
case 272: | |
return visitNodes(cbNodes, node.tags); | |
case 274: | |
return visitNode(cbNode, node.preParameterName) || | |
visitNode(cbNode, node.typeExpression) || | |
visitNode(cbNode, node.postParameterName); | |
case 275: | |
return visitNode(cbNode, node.typeExpression); | |
case 276: | |
return visitNode(cbNode, node.typeExpression); | |
case 277: | |
return visitNodes(cbNodes, node.typeParameters); | |
} | |
} | |
ts.forEachChild = forEachChild; | |
function createSourceFile(fileName, sourceText, languageVersion, setParentNodes, scriptKind) { | |
if (setParentNodes === void 0) { setParentNodes = false; } | |
var start = new Date().getTime(); | |
var result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind); | |
ts.parseTime += new Date().getTime() - start; | |
return result; | |
} | |
ts.createSourceFile = createSourceFile; | |
function isExternalModule(file) { | |
return file.externalModuleIndicator !== undefined; | |
} | |
ts.isExternalModule = isExternalModule; | |
function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { | |
return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); | |
} | |
ts.updateSourceFile = updateSourceFile; | |
function parseIsolatedJSDocComment(content, start, length) { | |
return Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length); | |
} | |
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(2, true); | |
var disallowInAndDecoratorContext = 4194304 | 16777216; | |
var NodeConstructor; | |
var SourceFileConstructor; | |
var sourceFile; | |
var parseDiagnostics; | |
var syntaxCursor; | |
var token; | |
var sourceText; | |
var nodeCount; | |
var identifiers; | |
var identifierCount; | |
var parsingContext; | |
var contextFlags; | |
var parseErrorBeforeNextFinishedNode = false; | |
function parseSourceFile(fileName, _sourceText, languageVersion, _syntaxCursor, setParentNodes, scriptKind) { | |
scriptKind = ts.ensureScriptKind(fileName, scriptKind); | |
initializeState(fileName, _sourceText, languageVersion, _syntaxCursor, scriptKind); | |
var result = parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind); | |
clearState(); | |
return result; | |
} | |
Parser.parseSourceFile = parseSourceFile; | |
function getLanguageVariant(scriptKind) { | |
return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 ? 1 : 0; | |
} | |
function initializeState(fileName, _sourceText, languageVersion, _syntaxCursor, scriptKind) { | |
NodeConstructor = ts.objectAllocator.getNodeConstructor(); | |
SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor(); | |
sourceText = _sourceText; | |
syntaxCursor = _syntaxCursor; | |
parseDiagnostics = []; | |
parsingContext = 0; | |
identifiers = {}; | |
identifierCount = 0; | |
nodeCount = 0; | |
contextFlags = scriptKind === 1 || scriptKind === 2 ? 134217728 : 0; | |
parseErrorBeforeNextFinishedNode = false; | |
scanner.setText(sourceText); | |
scanner.setOnError(scanError); | |
scanner.setScriptTarget(languageVersion); | |
scanner.setLanguageVariant(getLanguageVariant(scriptKind)); | |
} | |
function clearState() { | |
scanner.setText(""); | |
scanner.setOnError(undefined); | |
parseDiagnostics = undefined; | |
sourceFile = undefined; | |
identifiers = undefined; | |
syntaxCursor = undefined; | |
sourceText = undefined; | |
} | |
function parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind) { | |
sourceFile = createSourceFile(fileName, languageVersion, scriptKind); | |
sourceFile.flags = contextFlags; | |
token = nextToken(); | |
processReferenceComments(sourceFile); | |
sourceFile.statements = parseList(0, parseStatement); | |
ts.Debug.assert(token === 1); | |
sourceFile.endOfFileToken = parseTokenNode(); | |
setExternalModuleIndicator(sourceFile); | |
sourceFile.nodeCount = nodeCount; | |
sourceFile.identifierCount = identifierCount; | |
sourceFile.identifiers = identifiers; | |
sourceFile.parseDiagnostics = parseDiagnostics; | |
if (setParentNodes) { | |
fixupParentReferences(sourceFile); | |
} | |
return sourceFile; | |
} | |
function addJSDocComment(node) { | |
if (contextFlags & 134217728) { | |
var comments = ts.getLeadingCommentRangesOfNode(node, sourceFile); | |
if (comments) { | |
for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) { | |
var comment = comments_1[_i]; | |
var jsDocComment = JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos); | |
if (jsDocComment) { | |
node.jsDocComment = jsDocComment; | |
} | |
} | |
} | |
} | |
return node; | |
} | |
function fixupParentReferences(sourceFile) { | |
var parent = sourceFile; | |
forEachChild(sourceFile, visitNode); | |
return; | |
function visitNode(n) { | |
if (n.parent !== parent) { | |
n.parent = parent; | |
var saveParent = parent; | |
parent = n; | |
forEachChild(n, visitNode); | |
parent = saveParent; | |
} | |
} | |
} | |
Parser.fixupParentReferences = fixupParentReferences; | |
function createSourceFile(fileName, languageVersion, scriptKind) { | |
var sourceFile = new SourceFileConstructor(255, 0, sourceText.length); | |
nodeCount++; | |
sourceFile.text = sourceText; | |
sourceFile.bindDiagnostics = []; | |
sourceFile.languageVersion = languageVersion; | |
sourceFile.fileName = ts.normalizePath(fileName); | |
sourceFile.languageVariant = getLanguageVariant(scriptKind); | |
sourceFile.isDeclarationFile = ts.fileExtensionIs(sourceFile.fileName, ".d.ts"); | |
sourceFile.scriptKind = scriptKind; | |
return sourceFile; | |
} | |
function setContextFlag(val, flag) { | |
if (val) { | |
contextFlags |= flag; | |
} | |
else { | |
contextFlags &= ~flag; | |
} | |
} | |
function setDisallowInContext(val) { | |
setContextFlag(val, 4194304); | |
} | |
function setYieldContext(val) { | |
setContextFlag(val, 8388608); | |
} | |
function setDecoratorContext(val) { | |
setContextFlag(val, 16777216); | |
} | |
function setAwaitContext(val) { | |
setContextFlag(val, 33554432); | |
} | |
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(4194304, func); | |
} | |
function disallowInAnd(func) { | |
return doInsideOfContext(4194304, func); | |
} | |
function doInYieldContext(func) { | |
return doInsideOfContext(8388608, func); | |
} | |
function doInDecoratorContext(func) { | |
return doInsideOfContext(16777216, func); | |
} | |
function doInAwaitContext(func) { | |
return doInsideOfContext(33554432, func); | |
} | |
function doOutsideOfAwaitContext(func) { | |
return doOutsideOfContext(33554432, func); | |
} | |
function doInYieldAndAwaitContext(func) { | |
return doInsideOfContext(8388608 | 33554432, func); | |
} | |
function inContext(flags) { | |
return (contextFlags & flags) !== 0; | |
} | |
function inYieldContext() { | |
return inContext(8388608); | |
} | |
function inDisallowInContext() { | |
return inContext(4194304); | |
} | |
function inDecoratorContext() { | |
return inContext(16777216); | |
} | |
function inAwaitContext() { | |
return inContext(33554432); | |
} | |
function parseErrorAtCurrentToken(message, arg0) { | |
var start = scanner.getTokenPos(); | |
var length = scanner.getTextPos() - start; | |
parseErrorAtPosition(start, length, message, arg0); | |
} | |
function parseErrorAtPosition(start, length, message, arg0) { | |
var lastError = ts.lastOrUndefined(parseDiagnostics); | |
if (!lastError || start !== lastError.start) { | |
parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0)); | |
} | |
parseErrorBeforeNextFinishedNode = true; | |
} | |
function scanError(message, length) { | |
var pos = scanner.getTextPos(); | |
parseErrorAtPosition(pos, length || 0, message); | |
} | |
function getNodePos() { | |
return scanner.getStartPos(); | |
} | |
function getNodeEnd() { | |
return scanner.getStartPos(); | |
} | |
function nextToken() { | |
return token = scanner.scan(); | |
} | |
function reScanGreaterToken() { | |
return token = scanner.reScanGreaterToken(); | |
} | |
function reScanSlashToken() { | |
return token = scanner.reScanSlashToken(); | |
} | |
function reScanTemplateToken() { | |
return token = scanner.reScanTemplateToken(); | |
} | |
function scanJsxIdentifier() { | |
return token = scanner.scanJsxIdentifier(); | |
} | |
function scanJsxText() { | |
return token = scanner.scanJsxToken(); | |
} | |
function speculationHelper(callback, isLookAhead) { | |
var saveToken = token; | |
var saveParseDiagnosticsLength = parseDiagnostics.length; | |
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; | |
var saveContextFlags = contextFlags; | |
var result = isLookAhead | |
? scanner.lookAhead(callback) | |
: scanner.tryScan(callback); | |
ts.Debug.assert(saveContextFlags === contextFlags); | |
if (!result || isLookAhead) { | |
token = saveToken; | |
parseDiagnostics.length = saveParseDiagnosticsLength; | |
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; | |
} | |
return result; | |
} | |
function lookAhead(callback) { | |
return speculationHelper(callback, true); | |
} | |
function tryParse(callback) { | |
return speculationHelper(callback, false); | |
} | |
function isIdentifier() { | |
if (token === 69) { | |
return true; | |
} | |
if (token === 114 && inYieldContext()) { | |
return false; | |
} | |
if (token === 119 && inAwaitContext()) { | |
return false; | |
} | |
return token > 105; | |
} | |
function parseExpected(kind, diagnosticMessage, shouldAdvance) { | |
if (shouldAdvance === void 0) { shouldAdvance = true; } | |
if (token === kind) { | |
if (shouldAdvance) { | |
nextToken(); | |
} | |
return true; | |
} | |
if (diagnosticMessage) { | |
parseErrorAtCurrentToken(diagnosticMessage); | |
} | |
else { | |
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind)); | |
} | |
return false; | |
} | |
function parseOptional(t) { | |
if (token === t) { | |
nextToken(); | |
return true; | |
} | |
return false; | |
} | |
function parseOptionalToken(t) { | |
if (token === t) { | |
return parseTokenNode(); | |
} | |
return undefined; | |
} | |
function parseExpectedToken(t, reportAtCurrentPosition, diagnosticMessage, arg0) { | |
return parseOptionalToken(t) || | |
createMissingNode(t, reportAtCurrentPosition, diagnosticMessage, arg0); | |
} | |
function parseTokenNode() { | |
var node = createNode(token); | |
nextToken(); | |
return finishNode(node); | |
} | |
function canParseSemicolon() { | |
if (token === 23) { | |
return true; | |
} | |
return token === 16 || token === 1 || scanner.hasPrecedingLineBreak(); | |
} | |
function parseSemicolon() { | |
if (canParseSemicolon()) { | |
if (token === 23) { | |
nextToken(); | |
} | |
return true; | |
} | |
else { | |
return parseExpected(23); | |
} | |
} | |
function createNode(kind, pos) { | |
nodeCount++; | |
if (!(pos >= 0)) { | |
pos = scanner.getStartPos(); | |
} | |
return new NodeConstructor(kind, pos, pos); | |
} | |
function finishNode(node, end) { | |
node.end = end === undefined ? scanner.getStartPos() : end; | |
if (contextFlags) { | |
node.flags |= contextFlags; | |
} | |
if (parseErrorBeforeNextFinishedNode) { | |
parseErrorBeforeNextFinishedNode = false; | |
node.flags |= 67108864; | |
} | |
return node; | |
} | |
function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) { | |
if (reportAtCurrentPosition) { | |
parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0); | |
} | |
else { | |
parseErrorAtCurrentToken(diagnosticMessage, arg0); | |
} | |
var result = createNode(kind, scanner.getStartPos()); | |
result.text = ""; | |
return finishNode(result); | |
} | |
function internIdentifier(text) { | |
text = ts.escapeIdentifier(text); | |
return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); | |
} | |
function createIdentifier(isIdentifier, diagnosticMessage) { | |
identifierCount++; | |
if (isIdentifier) { | |
var node = createNode(69); | |
if (token !== 69) { | |
node.originalKeywordKind = token; | |
} | |
node.text = internIdentifier(scanner.getTokenValue()); | |
nextToken(); | |
return finishNode(node); | |
} | |
return createMissingNode(69, false, diagnosticMessage || ts.Diagnostics.Identifier_expected); | |
} | |
function parseIdentifier(diagnosticMessage) { | |
return createIdentifier(isIdentifier(), diagnosticMessage); | |
} | |
function parseIdentifierName() { | |
return createIdentifier(ts.tokenIsIdentifierOrKeyword(token)); | |
} | |
function isLiteralPropertyName() { | |
return ts.tokenIsIdentifierOrKeyword(token) || | |
token === 9 || | |
token === 8; | |
} | |
function parsePropertyNameWorker(allowComputedPropertyNames) { | |
if (token === 9 || token === 8) { | |
return parseLiteralNode(true); | |
} | |
if (allowComputedPropertyNames && token === 19) { | |
return parseComputedPropertyName(); | |
} | |
return parseIdentifierName(); | |
} | |
function parsePropertyName() { | |
return parsePropertyNameWorker(true); | |
} | |
function parseSimplePropertyName() { | |
return parsePropertyNameWorker(false); | |
} | |
function isSimplePropertyName() { | |
return token === 9 || token === 8 || ts.tokenIsIdentifierOrKeyword(token); | |
} | |
function parseComputedPropertyName() { | |
var node = createNode(139); | |
parseExpected(19); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(20); | |
return finishNode(node); | |
} | |
function parseContextualModifier(t) { | |
return token === t && tryParse(nextTokenCanFollowModifier); | |
} | |
function nextTokenIsOnSameLineAndCanFollowModifier() { | |
nextToken(); | |
if (scanner.hasPrecedingLineBreak()) { | |
return false; | |
} | |
return canFollowModifier(); | |
} | |
function nextTokenCanFollowModifier() { | |
if (token === 74) { | |
return nextToken() === 81; | |
} | |
if (token === 82) { | |
nextToken(); | |
if (token === 77) { | |
return lookAhead(nextTokenIsClassOrFunction); | |
} | |
return token !== 37 && token !== 116 && token !== 15 && canFollowModifier(); | |
} | |
if (token === 77) { | |
return nextTokenIsClassOrFunction(); | |
} | |
if (token === 113) { | |
nextToken(); | |
return canFollowModifier(); | |
} | |
return nextTokenIsOnSameLineAndCanFollowModifier(); | |
} | |
function parseAnyContextualModifier() { | |
return ts.isModifierKind(token) && tryParse(nextTokenCanFollowModifier); | |
} | |
function canFollowModifier() { | |
return token === 19 | |
|| token === 15 | |
|| token === 37 | |
|| isLiteralPropertyName(); | |
} | |
function nextTokenIsClassOrFunction() { | |
nextToken(); | |
return token === 73 || token === 87; | |
} | |
function isListElement(parsingContext, inErrorRecovery) { | |
var node = currentNode(parsingContext); | |
if (node) { | |
return true; | |
} | |
switch (parsingContext) { | |
case 0: | |
case 1: | |
case 3: | |
return !(token === 23 && inErrorRecovery) && isStartOfStatement(); | |
case 2: | |
return token === 71 || token === 77; | |
case 4: | |
return lookAhead(isTypeMemberStart); | |
case 5: | |
return lookAhead(isClassMemberStart) || (token === 23 && !inErrorRecovery); | |
case 6: | |
return token === 19 || isLiteralPropertyName(); | |
case 12: | |
return token === 19 || token === 37 || isLiteralPropertyName(); | |
case 9: | |
return token === 19 || isLiteralPropertyName(); | |
case 7: | |
if (token === 15) { | |
return lookAhead(isValidHeritageClauseObjectLiteral); | |
} | |
if (!inErrorRecovery) { | |
return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword(); | |
} | |
else { | |
return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword(); | |
} | |
case 8: | |
return isIdentifierOrPattern(); | |
case 10: | |
return token === 24 || token === 22 || isIdentifierOrPattern(); | |
case 17: | |
return isIdentifier(); | |
case 11: | |
case 15: | |
return token === 24 || token === 22 || isStartOfExpression(); | |
case 16: | |
return isStartOfParameter(); | |
case 18: | |
case 19: | |
return token === 24 || isStartOfType(); | |
case 20: | |
return isHeritageClause(); | |
case 21: | |
return ts.tokenIsIdentifierOrKeyword(token); | |
case 13: | |
return ts.tokenIsIdentifierOrKeyword(token) || token === 15; | |
case 14: | |
return true; | |
case 22: | |
case 23: | |
case 25: | |
return JSDocParser.isJSDocType(); | |
case 24: | |
return isSimplePropertyName(); | |
} | |
ts.Debug.fail("Non-exhaustive case in 'isListElement'."); | |
} | |
function isValidHeritageClauseObjectLiteral() { | |
ts.Debug.assert(token === 15); | |
if (nextToken() === 16) { | |
var next = nextToken(); | |
return next === 24 || next === 15 || next === 83 || next === 106; | |
} | |
return true; | |
} | |
function nextTokenIsIdentifier() { | |
nextToken(); | |
return isIdentifier(); | |
} | |
function nextTokenIsIdentifierOrKeyword() { | |
nextToken(); | |
return ts.tokenIsIdentifierOrKeyword(token); | |
} | |
function isHeritageClauseExtendsOrImplementsKeyword() { | |
if (token === 106 || | |
token === 83) { | |
return lookAhead(nextTokenIsStartOfExpression); | |
} | |
return false; | |
} | |
function nextTokenIsStartOfExpression() { | |
nextToken(); | |
return isStartOfExpression(); | |
} | |
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 21: | |
return token === 16; | |
case 3: | |
return token === 16 || token === 71 || token === 77; | |
case 7: | |
return token === 15 || token === 83 || token === 106; | |
case 8: | |
return isVariableDeclaratorListTerminator(); | |
case 17: | |
return token === 27 || token === 17 || token === 15 || token === 83 || token === 106; | |
case 11: | |
return token === 18 || token === 23; | |
case 15: | |
case 19: | |
case 10: | |
return token === 20; | |
case 16: | |
return token === 18 || token === 20; | |
case 18: | |
return token === 27 || token === 17; | |
case 20: | |
return token === 15 || token === 16; | |
case 13: | |
return token === 27 || token === 39; | |
case 14: | |
return token === 25 && lookAhead(nextTokenIsSlash); | |
case 22: | |
return token === 18 || token === 54 || token === 16; | |
case 23: | |
return token === 27 || token === 16; | |
case 25: | |
return token === 20 || token === 16; | |
case 24: | |
return token === 16; | |
} | |
} | |
function isVariableDeclaratorListTerminator() { | |
if (canParseSemicolon()) { | |
return true; | |
} | |
if (isInOrOfKeyword(token)) { | |
return true; | |
} | |
if (token === 34) { | |
return true; | |
} | |
return false; | |
} | |
function isInSomeParsingContext() { | |
for (var kind = 0; kind < 26; 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 result = []; | |
result.pos = getNodePos(); | |
while (!isListTerminator(kind)) { | |
if (isListElement(kind, false)) { | |
var element = parseListElement(kind, parseElement); | |
result.push(element); | |
continue; | |
} | |
if (abortParsingListOrMoveToNextToken(kind)) { | |
break; | |
} | |
} | |
result.end = getNodeEnd(); | |
parsingContext = saveParsingContext; | |
return result; | |
} | |
function parseListElement(parsingContext, parseElement) { | |
var node = currentNode(parsingContext); | |
if (node) { | |
return consumeNode(node); | |
} | |
return parseElement(); | |
} | |
function currentNode(parsingContext) { | |
if (parseErrorBeforeNextFinishedNode) { | |
return undefined; | |
} | |
if (!syntaxCursor) { | |
return undefined; | |
} | |
var node = syntaxCursor.currentNode(scanner.getStartPos()); | |
if (ts.nodeIsMissing(node)) { | |
return undefined; | |
} | |
if (node.intersectsChange) { | |
return undefined; | |
} | |
if (ts.containsParseError(node)) { | |
return undefined; | |
} | |
var nodeContextFlags = node.flags & 197132288; | |
if (nodeContextFlags !== contextFlags) { | |
return undefined; | |
} | |
if (!canReuseNode(node, parsingContext)) { | |
return undefined; | |
} | |
return node; | |
} | |
function consumeNode(node) { | |
scanner.setTextPos(node.end); | |
nextToken(); | |
return node; | |
} | |
function canReuseNode(node, parsingContext) { | |
switch (parsingContext) { | |
case 5: | |
return isReusableClassMember(node); | |
case 2: | |
return isReusableSwitchClause(node); | |
case 0: | |
case 1: | |
case 3: | |
return isReusableStatement(node); | |
case 6: | |
return isReusableEnumMember(node); | |
case 4: | |
return isReusableTypeMember(node); | |
case 8: | |
return isReusableVariableDeclaration(node); | |
case 16: | |
return isReusableParameter(node); | |
case 20: | |
case 17: | |
case 19: | |
case 18: | |
case 11: | |
case 12: | |
case 7: | |
case 13: | |
case 14: | |
} | |
return false; | |
} | |
function isReusableClassMember(node) { | |
if (node) { | |
switch (node.kind) { | |
case 147: | |
case 152: | |
case 148: | |
case 149: | |
case 144: | |
case 197: | |
return true; | |
case 146: | |
var methodDeclaration = node; | |
var nameIsConstructor = methodDeclaration.name.kind === 69 && | |
methodDeclaration.name.originalKeywordKind === 121; | |
return !nameIsConstructor; | |
} | |
} | |
return false; | |
} | |
function isReusableSwitchClause(node) { | |
if (node) { | |
switch (node.kind) { | |
case 248: | |
case 249: | |
return true; | |
} | |
} | |
return false; | |
} | |
function isReusableStatement(node) { | |
if (node) { | |
switch (node.kind) { | |
case 219: | |
case 199: | |
case 198: | |
case 202: | |
case 201: | |
case 214: | |
case 210: | |
case 212: | |
case 209: | |
case 208: | |
case 206: | |
case 207: | |
case 205: | |
case 204: | |
case 211: | |
case 200: | |
case 215: | |
case 213: | |
case 203: | |
case 216: | |
case 229: | |
case 228: | |
case 235: | |
case 234: | |
case 224: | |
case 220: | |
case 221: | |
case 223: | |
case 222: | |
return true; | |
} | |
} | |
return false; | |
} | |
function isReusableEnumMember(node) { | |
return node.kind === 254; | |
} | |
function isReusableTypeMember(node) { | |
if (node) { | |
switch (node.kind) { | |
case 151: | |
case 145: | |
case 152: | |
case 143: | |
case 150: | |
return true; | |
} | |
} | |
return false; | |
} | |
function isReusableVariableDeclaration(node) { | |
if (node.kind !== 217) { | |
return false; | |
} | |
var variableDeclarator = node; | |
return variableDeclarator.initializer === undefined; | |
} | |
function isReusableParameter(node) { | |
if (node.kind !== 141) { | |
return false; | |
} | |
var parameter = node; | |
return parameter.initializer === undefined; | |
} | |
function abortParsingListOrMoveToNextToken(kind) { | |
parseErrorAtCurrentToken(parsingContextErrors(kind)); | |
if (isInSomeParsingContext()) { | |
return true; | |
} | |
nextToken(); | |
return false; | |
} | |
function parsingContextErrors(context) { | |
switch (context) { | |
case 0: return ts.Diagnostics.Declaration_or_statement_expected; | |
case 1: return ts.Diagnostics.Declaration_or_statement_expected; | |
case 2: return ts.Diagnostics.case_or_default_expected; | |
case 3: return ts.Diagnostics.Statement_expected; | |
case 4: return ts.Diagnostics.Property_or_signature_expected; | |
case 5: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; | |
case 6: return ts.Diagnostics.Enum_member_expected; | |
case 7: return ts.Diagnostics.Expression_expected; | |
case 8: return ts.Diagnostics.Variable_declaration_expected; | |
case 9: return ts.Diagnostics.Property_destructuring_pattern_expected; | |
case 10: return ts.Diagnostics.Array_element_destructuring_pattern_expected; | |
case 11: return ts.Diagnostics.Argument_expression_expected; | |
case 12: return ts.Diagnostics.Property_assignment_expected; | |
case 15: return ts.Diagnostics.Expression_or_comma_expected; | |
case 16: return ts.Diagnostics.Parameter_declaration_expected; | |
case 17: return ts.Diagnostics.Type_parameter_declaration_expected; | |
case 18: return ts.Diagnostics.Type_argument_expected; | |
case 19: return ts.Diagnostics.Type_expected; | |
case 20: return ts.Diagnostics.Unexpected_token_expected; | |
case 21: return ts.Diagnostics.Identifier_expected; | |
case 13: return ts.Diagnostics.Identifier_expected; | |
case 14: return ts.Diagnostics.Identifier_expected; | |
case 22: return ts.Diagnostics.Parameter_declaration_expected; | |
case 23: return ts.Diagnostics.Type_argument_expected; | |
case 25: return ts.Diagnostics.Type_expected; | |
case 24: return ts.Diagnostics.Property_assignment_expected; | |
} | |
} | |
; | |
function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimiter) { | |
var saveParsingContext = parsingContext; | |
parsingContext |= 1 << kind; | |
var result = []; | |
result.pos = getNodePos(); | |
var commaStart = -1; | |
while (true) { | |
if (isListElement(kind, false)) { | |
result.push(parseListElement(kind, parseElement)); | |
commaStart = scanner.getTokenPos(); | |
if (parseOptional(24)) { | |
continue; | |
} | |
commaStart = -1; | |
if (isListTerminator(kind)) { | |
break; | |
} | |
parseExpected(24); | |
if (considerSemicolonAsDelimiter && token === 23 && !scanner.hasPrecedingLineBreak()) { | |
nextToken(); | |
} | |
continue; | |
} | |
if (isListTerminator(kind)) { | |
break; | |
} | |
if (abortParsingListOrMoveToNextToken(kind)) { | |
break; | |
} | |
} | |
if (commaStart >= 0) { | |
result.hasTrailingComma = true; | |
} | |
result.end = getNodeEnd(); | |
parsingContext = saveParsingContext; | |
return result; | |
} | |
function createMissingList() { | |
var pos = getNodePos(); | |
var result = []; | |
result.pos = pos; | |
result.end = pos; | |
return result; | |
} | |
function parseBracketedList(kind, parseElement, open, close) { | |
if (parseExpected(open)) { | |
var result = parseDelimitedList(kind, parseElement); | |
parseExpected(close); | |
return result; | |
} | |
return createMissingList(); | |
} | |
function parseEntityName(allowReservedWords, diagnosticMessage) { | |
var entity = parseIdentifier(diagnosticMessage); | |
while (parseOptional(21)) { | |
var node = createNode(138, entity.pos); | |
node.left = entity; | |
node.right = parseRightSideOfDot(allowReservedWords); | |
entity = finishNode(node); | |
} | |
return entity; | |
} | |
function parseRightSideOfDot(allowIdentifierNames) { | |
if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token)) { | |
var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); | |
if (matchesPattern) { | |
return createMissingNode(69, true, ts.Diagnostics.Identifier_expected); | |
} | |
} | |
return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); | |
} | |
function parseTemplateExpression() { | |
var template = createNode(188); | |
template.head = parseTemplateLiteralFragment(); | |
ts.Debug.assert(template.head.kind === 12, "Template head has wrong token kind"); | |
var templateSpans = []; | |
templateSpans.pos = getNodePos(); | |
do { | |
templateSpans.push(parseTemplateSpan()); | |
} while (ts.lastOrUndefined(templateSpans).literal.kind === 13); | |
templateSpans.end = getNodeEnd(); | |
template.templateSpans = templateSpans; | |
return finishNode(template); | |
} | |
function parseTemplateSpan() { | |
var span = createNode(196); | |
span.expression = allowInAnd(parseExpression); | |
var literal; | |
if (token === 16) { | |
reScanTemplateToken(); | |
literal = parseTemplateLiteralFragment(); | |
} | |
else { | |
literal = parseExpectedToken(14, false, ts.Diagnostics._0_expected, ts.tokenToString(16)); | |
} | |
span.literal = literal; | |
return finishNode(span); | |
} | |
function parseStringLiteralTypeNode() { | |
return parseLiteralLikeNode(165, true); | |
} | |
function parseLiteralNode(internName) { | |
return parseLiteralLikeNode(token, internName); | |
} | |
function parseTemplateLiteralFragment() { | |
return parseLiteralLikeNode(token, false); | |
} | |
function parseLiteralLikeNode(kind, internName) { | |
var node = createNode(kind); | |
var text = scanner.getTokenValue(); | |
node.text = internName ? internIdentifier(text) : text; | |
if (scanner.hasExtendedUnicodeEscape()) { | |
node.hasExtendedUnicodeEscape = true; | |
} | |
if (scanner.isUnterminated()) { | |
node.isUnterminated = true; | |
} | |
var tokenPos = scanner.getTokenPos(); | |
nextToken(); | |
finishNode(node); | |
if (node.kind === 8 | |
&& sourceText.charCodeAt(tokenPos) === 48 | |
&& ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { | |
node.isOctalLiteral = true; | |
} | |
return node; | |
} | |
function parseTypeReference() { | |
var typeName = parseEntityName(false, ts.Diagnostics.Type_expected); | |
var node = createNode(154, typeName.pos); | |
node.typeName = typeName; | |
if (!scanner.hasPrecedingLineBreak() && token === 25) { | |
node.typeArguments = parseBracketedList(18, parseType, 25, 27); | |
} | |
return finishNode(node); | |
} | |
function parseThisTypePredicate(lhs) { | |
nextToken(); | |
var node = createNode(153, lhs.pos); | |
node.parameterName = lhs; | |
node.type = parseType(); | |
return finishNode(node); | |
} | |
function parseThisTypeNode() { | |
var node = createNode(164); | |
nextToken(); | |
return finishNode(node); | |
} | |
function parseTypeQuery() { | |
var node = createNode(157); | |
parseExpected(101); | |
node.exprName = parseEntityName(true); | |
return finishNode(node); | |
} | |
function parseTypeParameter() { | |
var node = createNode(140); | |
node.name = parseIdentifier(); | |
if (parseOptional(83)) { | |
if (isStartOfType() || !isStartOfExpression()) { | |
node.constraint = parseType(); | |
} | |
else { | |
node.expression = parseUnaryExpressionOrHigher(); | |
} | |
} | |
return finishNode(node); | |
} | |
function parseTypeParameters() { | |
if (token === 25) { | |
return parseBracketedList(17, parseTypeParameter, 25, 27); | |
} | |
} | |
function parseParameterType() { | |
if (parseOptional(54)) { | |
return parseType(); | |
} | |
return undefined; | |
} | |
function isStartOfParameter() { | |
return token === 22 || isIdentifierOrPattern() || ts.isModifierKind(token) || token === 55 || token === 97; | |
} | |
function setModifiers(node, modifiers) { | |
if (modifiers) { | |
node.flags |= modifiers.flags; | |
node.modifiers = modifiers; | |
} | |
} | |
function parseParameter() { | |
var node = createNode(141); | |
if (token === 97) { | |
node.name = createIdentifier(true, undefined); | |
node.type = parseParameterType(); | |
return finishNode(node); | |
} | |
node.decorators = parseDecorators(); | |
setModifiers(node, parseModifiers()); | |
node.dotDotDotToken = parseOptionalToken(22); | |
node.name = parseIdentifierOrPattern(); | |
if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifierKind(token)) { | |
nextToken(); | |
} | |
node.questionToken = parseOptionalToken(53); | |
node.type = parseParameterType(); | |
node.initializer = parseBindingElementInitializer(true); | |
return addJSDocComment(finishNode(node)); | |
} | |
function parseBindingElementInitializer(inParameter) { | |
return inParameter ? parseParameterInitializer() : parseNonParameterInitializer(); | |
} | |
function parseParameterInitializer() { | |
return parseInitializer(true); | |
} | |
function fillSignature(returnToken, yieldContext, awaitContext, requireCompleteParameterList, signature) { | |
var returnTokenRequired = returnToken === 34; | |
signature.typeParameters = parseTypeParameters(); | |
signature.parameters = parseParameterList(yieldContext, awaitContext, requireCompleteParameterList); | |
if (returnTokenRequired) { | |
parseExpected(returnToken); | |
signature.type = parseTypeOrTypePredicate(); | |
} | |
else if (parseOptional(returnToken)) { | |
signature.type = parseTypeOrTypePredicate(); | |
} | |
} | |
function parseParameterList(yieldContext, awaitContext, requireCompleteParameterList) { | |
if (parseExpected(17)) { | |
var savedYieldContext = inYieldContext(); | |
var savedAwaitContext = inAwaitContext(); | |
setYieldContext(yieldContext); | |
setAwaitContext(awaitContext); | |
var result = parseDelimitedList(16, parseParameter); | |
setYieldContext(savedYieldContext); | |
setAwaitContext(savedAwaitContext); | |
if (!parseExpected(18) && requireCompleteParameterList) { | |
return undefined; | |
} | |
return result; | |
} | |
return requireCompleteParameterList ? undefined : createMissingList(); | |
} | |
function parseTypeMemberSemicolon() { | |
if (parseOptional(24)) { | |
return; | |
} | |
parseSemicolon(); | |
} | |
function parseSignatureMember(kind) { | |
var node = createNode(kind); | |
if (kind === 151) { | |
parseExpected(92); | |
} | |
fillSignature(54, false, false, false, node); | |
parseTypeMemberSemicolon(); | |
return finishNode(node); | |
} | |
function isIndexSignature() { | |
if (token !== 19) { | |
return false; | |
} | |
return lookAhead(isUnambiguouslyIndexSignature); | |
} | |
function isUnambiguouslyIndexSignature() { | |
nextToken(); | |
if (token === 22 || token === 20) { | |
return true; | |
} | |
if (ts.isModifierKind(token)) { | |
nextToken(); | |
if (isIdentifier()) { | |
return true; | |
} | |
} | |
else if (!isIdentifier()) { | |
return false; | |
} | |
else { | |
nextToken(); | |
} | |
if (token === 54 || token === 24) { | |
return true; | |
} | |
if (token !== 53) { | |
return false; | |
} | |
nextToken(); | |
return token === 54 || token === 24 || token === 20; | |
} | |
function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(152, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
node.parameters = parseBracketedList(16, parseParameter, 19, 20); | |
node.type = parseTypeAnnotation(); | |
parseTypeMemberSemicolon(); | |
return finishNode(node); | |
} | |
function parsePropertyOrMethodSignature(fullStart, modifiers) { | |
var name = parsePropertyName(); | |
var questionToken = parseOptionalToken(53); | |
if (token === 17 || token === 25) { | |
var method = createNode(145, fullStart); | |
setModifiers(method, modifiers); | |
method.name = name; | |
method.questionToken = questionToken; | |
fillSignature(54, false, false, false, method); | |
parseTypeMemberSemicolon(); | |
return finishNode(method); | |
} | |
else { | |
var property = createNode(143, fullStart); | |
setModifiers(property, modifiers); | |
property.name = name; | |
property.questionToken = questionToken; | |
property.type = parseTypeAnnotation(); | |
if (token === 56) { | |
property.initializer = parseNonParameterInitializer(); | |
} | |
parseTypeMemberSemicolon(); | |
return finishNode(property); | |
} | |
} | |
function isTypeMemberStart() { | |
var idToken; | |
if (token === 17 || token === 25) { | |
return true; | |
} | |
while (ts.isModifierKind(token)) { | |
idToken = token; | |
nextToken(); | |
} | |
if (token === 19) { | |
return true; | |
} | |
if (isLiteralPropertyName()) { | |
idToken = token; | |
nextToken(); | |
} | |
if (idToken) { | |
return token === 17 || | |
token === 25 || | |
token === 53 || | |
token === 54 || | |
canParseSemicolon(); | |
} | |
return false; | |
} | |
function parseTypeMember() { | |
if (token === 17 || token === 25) { | |
return parseSignatureMember(150); | |
} | |
if (token === 92 && lookAhead(isStartOfConstructSignature)) { | |
return parseSignatureMember(151); | |
} | |
var fullStart = getNodePos(); | |
var modifiers = parseModifiers(); | |
if (isIndexSignature()) { | |
return parseIndexSignatureDeclaration(fullStart, undefined, modifiers); | |
} | |
return parsePropertyOrMethodSignature(fullStart, modifiers); | |
} | |
function isStartOfConstructSignature() { | |
nextToken(); | |
return token === 17 || token === 25; | |
} | |
function parseTypeLiteral() { | |
var node = createNode(158); | |
node.members = parseObjectTypeMembers(); | |
return finishNode(node); | |
} | |
function parseObjectTypeMembers() { | |
var members; | |
if (parseExpected(15)) { | |
members = parseList(4, parseTypeMember); | |
parseExpected(16); | |
} | |
else { | |
members = createMissingList(); | |
} | |
return members; | |
} | |
function parseTupleType() { | |
var node = createNode(160); | |
node.elementTypes = parseBracketedList(19, parseType, 19, 20); | |
return finishNode(node); | |
} | |
function parseParenthesizedType() { | |
var node = createNode(163); | |
parseExpected(17); | |
node.type = parseType(); | |
parseExpected(18); | |
return finishNode(node); | |
} | |
function parseFunctionOrConstructorType(kind) { | |
var node = createNode(kind); | |
if (kind === 156) { | |
parseExpected(92); | |
} | |
fillSignature(34, false, false, false, node); | |
return finishNode(node); | |
} | |
function parseKeywordAndNoDot() { | |
var node = parseTokenNode(); | |
return token === 21 ? undefined : node; | |
} | |
function parseNonArrayType() { | |
switch (token) { | |
case 117: | |
case 131: | |
case 129: | |
case 120: | |
case 132: | |
case 134: | |
var node = tryParse(parseKeywordAndNoDot); | |
return node || parseTypeReference(); | |
case 9: | |
return parseStringLiteralTypeNode(); | |
case 103: | |
case 93: | |
return parseTokenNode(); | |
case 97: { | |
var thisKeyword = parseThisTypeNode(); | |
if (token === 124 && !scanner.hasPrecedingLineBreak()) { | |
return parseThisTypePredicate(thisKeyword); | |
} | |
else { | |
return thisKeyword; | |
} | |
} | |
case 101: | |
return parseTypeQuery(); | |
case 15: | |
return parseTypeLiteral(); | |
case 19: | |
return parseTupleType(); | |
case 17: | |
return parseParenthesizedType(); | |
default: | |
return parseTypeReference(); | |
} | |
} | |
function isStartOfType() { | |
switch (token) { | |
case 117: | |
case 131: | |
case 129: | |
case 120: | |
case 132: | |
case 103: | |
case 134: | |
case 93: | |
case 97: | |
case 101: | |
case 15: | |
case 19: | |
case 25: | |
case 92: | |
case 9: | |
return true; | |
case 17: | |
return lookAhead(isStartOfParenthesizedOrFunctionType); | |
default: | |
return isIdentifier(); | |
} | |
} | |
function isStartOfParenthesizedOrFunctionType() { | |
nextToken(); | |
return token === 18 || isStartOfParameter() || isStartOfType(); | |
} | |
function parseArrayTypeOrHigher() { | |
var type = parseNonArrayType(); | |
while (!scanner.hasPrecedingLineBreak() && parseOptional(19)) { | |
parseExpected(20); | |
var node = createNode(159, type.pos); | |
node.elementType = type; | |
type = finishNode(node); | |
} | |
return type; | |
} | |
function parseUnionOrIntersectionType(kind, parseConstituentType, operator) { | |
var type = parseConstituentType(); | |
if (token === operator) { | |
var types = [type]; | |
types.pos = type.pos; | |
while (parseOptional(operator)) { | |
types.push(parseConstituentType()); | |
} | |
types.end = getNodeEnd(); | |
var node = createNode(kind, type.pos); | |
node.types = types; | |
type = finishNode(node); | |
} | |
return type; | |
} | |
function parseIntersectionTypeOrHigher() { | |
return parseUnionOrIntersectionType(162, parseArrayTypeOrHigher, 46); | |
} | |
function parseUnionTypeOrHigher() { | |
return parseUnionOrIntersectionType(161, parseIntersectionTypeOrHigher, 47); | |
} | |
function isStartOfFunctionType() { | |
if (token === 25) { | |
return true; | |
} | |
return token === 17 && lookAhead(isUnambiguouslyStartOfFunctionType); | |
} | |
function skipParameterStart() { | |
if (ts.isModifierKind(token)) { | |
parseModifiers(); | |
} | |
if (isIdentifier() || token === 97) { | |
nextToken(); | |
return true; | |
} | |
if (token === 19 || token === 15) { | |
var previousErrorCount = parseDiagnostics.length; | |
parseIdentifierOrPattern(); | |
return previousErrorCount === parseDiagnostics.length; | |
} | |
return false; | |
} | |
function isUnambiguouslyStartOfFunctionType() { | |
nextToken(); | |
if (token === 18 || token === 22) { | |
return true; | |
} | |
if (skipParameterStart()) { | |
if (token === 54 || token === 24 || | |
token === 53 || token === 56) { | |
return true; | |
} | |
if (token === 18) { | |
nextToken(); | |
if (token === 34) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
function parseTypeOrTypePredicate() { | |
var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); | |
var type = parseType(); | |
if (typePredicateVariable) { | |
var node = createNode(153, typePredicateVariable.pos); | |
node.parameterName = typePredicateVariable; | |
node.type = type; | |
return finishNode(node); | |
} | |
else { | |
return type; | |
} | |
} | |
function parseTypePredicatePrefix() { | |
var id = parseIdentifier(); | |
if (token === 124 && !scanner.hasPrecedingLineBreak()) { | |
nextToken(); | |
return id; | |
} | |
} | |
function parseType() { | |
return doOutsideOfContext(41943040, parseTypeWorker); | |
} | |
function parseTypeWorker() { | |
if (isStartOfFunctionType()) { | |
return parseFunctionOrConstructorType(155); | |
} | |
if (token === 92) { | |
return parseFunctionOrConstructorType(156); | |
} | |
return parseUnionTypeOrHigher(); | |
} | |
function parseTypeAnnotation() { | |
return parseOptional(54) ? parseType() : undefined; | |
} | |
function isStartOfLeftHandSideExpression() { | |
switch (token) { | |
case 97: | |
case 95: | |
case 93: | |
case 99: | |
case 84: | |
case 8: | |
case 9: | |
case 11: | |
case 12: | |
case 17: | |
case 19: | |
case 15: | |
case 87: | |
case 73: | |
case 92: | |
case 39: | |
case 61: | |
case 69: | |
return true; | |
default: | |
return isIdentifier(); | |
} | |
} | |
function isStartOfExpression() { | |
if (isStartOfLeftHandSideExpression()) { | |
return true; | |
} | |
switch (token) { | |
case 35: | |
case 36: | |
case 50: | |
case 49: | |
case 78: | |
case 101: | |
case 103: | |
case 41: | |
case 42: | |
case 25: | |
case 119: | |
case 114: | |
return true; | |
default: | |
if (isBinaryOperator()) { | |
return true; | |
} | |
return isIdentifier(); | |
} | |
} | |
function isStartOfExpressionStatement() { | |
return token !== 15 && | |
token !== 87 && | |
token !== 73 && | |
token !== 55 && | |
isStartOfExpression(); | |
} | |
function parseExpression() { | |
var saveDecoratorContext = inDecoratorContext(); | |
if (saveDecoratorContext) { | |
setDecoratorContext(false); | |
} | |
var expr = parseAssignmentExpressionOrHigher(); | |
var operatorToken; | |
while ((operatorToken = parseOptionalToken(24))) { | |
expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher()); | |
} | |
if (saveDecoratorContext) { | |
setDecoratorContext(true); | |
} | |
return expr; | |
} | |
function parseInitializer(inParameter) { | |
if (token !== 56) { | |
if (scanner.hasPrecedingLineBreak() || (inParameter && token === 15) || !isStartOfExpression()) { | |
return undefined; | |
} | |
} | |
parseExpected(56); | |
return parseAssignmentExpressionOrHigher(); | |
} | |
function parseAssignmentExpressionOrHigher() { | |
if (isYieldExpression()) { | |
return parseYieldExpression(); | |
} | |
var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); | |
if (arrowExpression) { | |
return arrowExpression; | |
} | |
var expr = parseBinaryExpressionOrHigher(0); | |
if (expr.kind === 69 && token === 34) { | |
return parseSimpleArrowFunctionExpression(expr); | |
} | |
if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) { | |
return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher()); | |
} | |
return parseConditionalExpressionRest(expr); | |
} | |
function isYieldExpression() { | |
if (token === 114) { | |
if (inYieldContext()) { | |
return true; | |
} | |
return lookAhead(nextTokenIsIdentifierOrKeywordOrNumberOnSameLine); | |
} | |
return false; | |
} | |
function nextTokenIsIdentifierOnSameLine() { | |
nextToken(); | |
return !scanner.hasPrecedingLineBreak() && isIdentifier(); | |
} | |
function parseYieldExpression() { | |
var node = createNode(189); | |
nextToken(); | |
if (!scanner.hasPrecedingLineBreak() && | |
(token === 37 || isStartOfExpression())) { | |
node.asteriskToken = parseOptionalToken(37); | |
node.expression = parseAssignmentExpressionOrHigher(); | |
return finishNode(node); | |
} | |
else { | |
return finishNode(node); | |
} | |
} | |
function parseSimpleArrowFunctionExpression(identifier) { | |
ts.Debug.assert(token === 34, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); | |
var node = createNode(179, identifier.pos); | |
var parameter = createNode(141, identifier.pos); | |
parameter.name = identifier; | |
finishNode(parameter); | |
node.parameters = [parameter]; | |
node.parameters.pos = parameter.pos; | |
node.parameters.end = parameter.end; | |
node.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); | |
node.body = parseArrowFunctionExpressionBody(false); | |
return finishNode(node); | |
} | |
function tryParseParenthesizedArrowFunctionExpression() { | |
var triState = isParenthesizedArrowFunctionExpression(); | |
if (triState === 0) { | |
return undefined; | |
} | |
var arrowFunction = triState === 1 | |
? parseParenthesizedArrowFunctionExpressionHead(true) | |
: tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); | |
if (!arrowFunction) { | |
return undefined; | |
} | |
var isAsync = !!(arrowFunction.flags & 256); | |
var lastToken = token; | |
arrowFunction.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); | |
arrowFunction.body = (lastToken === 34 || lastToken === 15) | |
? parseArrowFunctionExpressionBody(isAsync) | |
: parseIdentifier(); | |
return finishNode(arrowFunction); | |
} | |
function isParenthesizedArrowFunctionExpression() { | |
if (token === 17 || token === 25 || token === 118) { | |
return lookAhead(isParenthesizedArrowFunctionExpressionWorker); | |
} | |
if (token === 34) { | |
return 1; | |
} | |
return 0; | |
} | |
function isParenthesizedArrowFunctionExpressionWorker() { | |
if (token === 118) { | |
nextToken(); | |
if (scanner.hasPrecedingLineBreak()) { | |
return 0; | |
} | |
if (token !== 17 && token !== 25) { | |
return 0; | |
} | |
} | |
var first = token; | |
var second = nextToken(); | |
if (first === 17) { | |
if (second === 18) { | |
var third = nextToken(); | |
switch (third) { | |
case 34: | |
case 54: | |
case 15: | |
return 1; | |
default: | |
return 0; | |
} | |
} | |
if (second === 19 || second === 15) { | |
return 2; | |
} | |
if (second === 22) { | |
return 1; | |
} | |
if (!isIdentifier()) { | |
return 0; | |
} | |
if (nextToken() === 54) { | |
return 1; | |
} | |
return 2; | |
} | |
else { | |
ts.Debug.assert(first === 25); | |
if (!isIdentifier()) { | |
return 0; | |
} | |
if (sourceFile.languageVariant === 1) { | |
var isArrowFunctionInJsx = lookAhead(function () { | |
var third = nextToken(); | |
if (third === 83) { | |
var fourth = nextToken(); | |
switch (fourth) { | |
case 56: | |
case 27: | |
return false; | |
default: | |
return true; | |
} | |
} | |
else if (third === 24) { | |
return true; | |
} | |
return false; | |
}); | |
if (isArrowFunctionInJsx) { | |
return 1; | |
} | |
return 0; | |
} | |
return 2; | |
} | |
} | |
function parsePossibleParenthesizedArrowFunctionExpressionHead() { | |
return parseParenthesizedArrowFunctionExpressionHead(false); | |
} | |
function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { | |
var node = createNode(179); | |
setModifiers(node, parseModifiersForArrowFunction()); | |
var isAsync = !!(node.flags & 256); | |
fillSignature(54, false, isAsync, !allowAmbiguity, node); | |
if (!node.parameters) { | |
return undefined; | |
} | |
if (!allowAmbiguity && token !== 34 && token !== 15) { | |
return undefined; | |
} | |
return node; | |
} | |
function parseArrowFunctionExpressionBody(isAsync) { | |
if (token === 15) { | |
return parseFunctionBlock(false, isAsync, false); | |
} | |
if (token !== 23 && | |
token !== 87 && | |
token !== 73 && | |
isStartOfStatement() && | |
!isStartOfExpressionStatement()) { | |
return parseFunctionBlock(false, isAsync, true); | |
} | |
return isAsync | |
? doInAwaitContext(parseAssignmentExpressionOrHigher) | |
: doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher); | |
} | |
function parseConditionalExpressionRest(leftOperand) { | |
var questionToken = parseOptionalToken(53); | |
if (!questionToken) { | |
return leftOperand; | |
} | |
var node = createNode(187, leftOperand.pos); | |
node.condition = leftOperand; | |
node.questionToken = questionToken; | |
node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); | |
node.colonToken = parseExpectedToken(54, false, ts.Diagnostics._0_expected, ts.tokenToString(54)); | |
node.whenFalse = parseAssignmentExpressionOrHigher(); | |
return finishNode(node); | |
} | |
function parseBinaryExpressionOrHigher(precedence) { | |
var leftOperand = parseUnaryExpressionOrHigher(); | |
return parseBinaryExpressionRest(precedence, leftOperand); | |
} | |
function isInOrOfKeyword(t) { | |
return t === 90 || t === 137; | |
} | |
function parseBinaryExpressionRest(precedence, leftOperand) { | |
while (true) { | |
reScanGreaterToken(); | |
var newPrecedence = getBinaryOperatorPrecedence(); | |
var consumeCurrentOperator = token === 38 ? | |
newPrecedence >= precedence : | |
newPrecedence > precedence; | |
if (!consumeCurrentOperator) { | |
break; | |
} | |
if (token === 90 && inDisallowInContext()) { | |
break; | |
} | |
if (token === 116) { | |
if (scanner.hasPrecedingLineBreak()) { | |
break; | |
} | |
else { | |
nextToken(); | |
leftOperand = makeAsExpression(leftOperand, parseType()); | |
} | |
} | |
else { | |
leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence)); | |
} | |
} | |
return leftOperand; | |
} | |
function isBinaryOperator() { | |
if (inDisallowInContext() && token === 90) { | |
return false; | |
} | |
return getBinaryOperatorPrecedence() > 0; | |
} | |
function getBinaryOperatorPrecedence() { | |
switch (token) { | |
case 52: | |
return 1; | |
case 51: | |
return 2; | |
case 47: | |
return 3; | |
case 48: | |
return 4; | |
case 46: | |
return 5; | |
case 30: | |
case 31: | |
case 32: | |
case 33: | |
return 6; | |
case 25: | |
case 27: | |
case 28: | |
case 29: | |
case 91: | |
case 90: | |
case 116: | |
return 7; | |
case 43: | |
case 44: | |
case 45: | |
return 8; | |
case 35: | |
case 36: | |
return 9; | |
case 37: | |
case 39: | |
case 40: | |
return 10; | |
case 38: | |
return 11; | |
} | |
return -1; | |
} | |
function makeBinaryExpression(left, operatorToken, right) { | |
var node = createNode(186, left.pos); | |
node.left = left; | |
node.operatorToken = operatorToken; | |
node.right = right; | |
return finishNode(node); | |
} | |
function makeAsExpression(left, right) { | |
var node = createNode(194, left.pos); | |
node.expression = left; | |
node.type = right; | |
return finishNode(node); | |
} | |
function parsePrefixUnaryExpression() { | |
var node = createNode(184); | |
node.operator = token; | |
nextToken(); | |
node.operand = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function parseDeleteExpression() { | |
var node = createNode(180); | |
nextToken(); | |
node.expression = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function parseTypeOfExpression() { | |
var node = createNode(181); | |
nextToken(); | |
node.expression = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function parseVoidExpression() { | |
var node = createNode(182); | |
nextToken(); | |
node.expression = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function isAwaitExpression() { | |
if (token === 119) { | |
if (inAwaitContext()) { | |
return true; | |
} | |
return lookAhead(nextTokenIsIdentifierOnSameLine); | |
} | |
return false; | |
} | |
function parseAwaitExpression() { | |
var node = createNode(183); | |
nextToken(); | |
node.expression = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function parseUnaryExpressionOrHigher() { | |
if (isAwaitExpression()) { | |
return parseAwaitExpression(); | |
} | |
if (isIncrementExpression()) { | |
var incrementExpression = parseIncrementExpression(); | |
return token === 38 ? | |
parseBinaryExpressionRest(getBinaryOperatorPrecedence(), incrementExpression) : | |
incrementExpression; | |
} | |
var unaryOperator = token; | |
var simpleUnaryExpression = parseSimpleUnaryExpression(); | |
if (token === 38) { | |
var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); | |
if (simpleUnaryExpression.kind === 176) { | |
parseErrorAtPosition(start, simpleUnaryExpression.end - start, 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 { | |
parseErrorAtPosition(start, simpleUnaryExpression.end - start, 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 35: | |
case 36: | |
case 50: | |
case 49: | |
return parsePrefixUnaryExpression(); | |
case 78: | |
return parseDeleteExpression(); | |
case 101: | |
return parseTypeOfExpression(); | |
case 103: | |
return parseVoidExpression(); | |
case 25: | |
return parseTypeAssertion(); | |
default: | |
return parseIncrementExpression(); | |
} | |
} | |
function isIncrementExpression() { | |
switch (token) { | |
case 35: | |
case 36: | |
case 50: | |
case 49: | |
case 78: | |
case 101: | |
case 103: | |
return false; | |
case 25: | |
if (sourceFile.languageVariant !== 1) { | |
return false; | |
} | |
default: | |
return true; | |
} | |
} | |
function parseIncrementExpression() { | |
if (token === 41 || token === 42) { | |
var node = createNode(184); | |
node.operator = token; | |
nextToken(); | |
node.operand = parseLeftHandSideExpressionOrHigher(); | |
return finishNode(node); | |
} | |
else if (sourceFile.languageVariant === 1 && token === 25 && lookAhead(nextTokenIsIdentifierOrKeyword)) { | |
return parseJsxElementOrSelfClosingElement(true); | |
} | |
var expression = parseLeftHandSideExpressionOrHigher(); | |
ts.Debug.assert(ts.isLeftHandSideExpression(expression)); | |
if ((token === 41 || token === 42) && !scanner.hasPrecedingLineBreak()) { | |
var node = createNode(185, expression.pos); | |
node.operand = expression; | |
node.operator = token; | |
nextToken(); | |
return finishNode(node); | |
} | |
return expression; | |
} | |
function parseLeftHandSideExpressionOrHigher() { | |
var expression = token === 95 | |
? parseSuperExpression() | |
: parseMemberExpressionOrHigher(); | |
return parseCallExpressionRest(expression); | |
} | |
function parseMemberExpressionOrHigher() { | |
var expression = parsePrimaryExpression(); | |
return parseMemberExpressionRest(expression); | |
} | |
function parseSuperExpression() { | |
var expression = parseTokenNode(); | |
if (token === 17 || token === 21 || token === 19) { | |
return expression; | |
} | |
var node = createNode(171, expression.pos); | |
node.expression = expression; | |
node.dotToken = parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); | |
node.name = parseRightSideOfDot(true); | |
return finishNode(node); | |
} | |
function tagNamesAreEquivalent(lhs, rhs) { | |
if (lhs.kind !== rhs.kind) { | |
return false; | |
} | |
if (lhs.kind === 69) { | |
return lhs.text === rhs.text; | |
} | |
return lhs.right.text === rhs.right.text && | |
tagNamesAreEquivalent(lhs.left, rhs.left); | |
} | |
function parseJsxElementOrSelfClosingElement(inExpressionContext) { | |
var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); | |
var result; | |
if (opening.kind === 242) { | |
var node = createNode(240, opening.pos); | |
node.openingElement = opening; | |
node.children = parseJsxChildren(node.openingElement.tagName); | |
node.closingElement = parseJsxClosingElement(inExpressionContext); | |
if (!tagNamesAreEquivalent(node.openingElement.tagName, node.closingElement.tagName)) { | |
parseErrorAtPosition(node.closingElement.pos, node.closingElement.end - node.closingElement.pos, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, node.openingElement.tagName)); | |
} | |
result = finishNode(node); | |
} | |
else { | |
ts.Debug.assert(opening.kind === 241); | |
result = opening; | |
} | |
if (inExpressionContext && token === 25) { | |
var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(true); }); | |
if (invalidElement) { | |
parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); | |
var badNode = createNode(186, result.pos); | |
badNode.end = invalidElement.end; | |
badNode.left = result; | |
badNode.right = invalidElement; | |
badNode.operatorToken = createMissingNode(24, false, undefined); | |
badNode.operatorToken.pos = badNode.operatorToken.end = badNode.right.pos; | |
return badNode; | |
} | |
} | |
return result; | |
} | |
function parseJsxText() { | |
var node = createNode(243, scanner.getStartPos()); | |
token = scanner.scanJsxToken(); | |
return finishNode(node); | |
} | |
function parseJsxChild() { | |
switch (token) { | |
case 243: | |
return parseJsxText(); | |
case 15: | |
return parseJsxExpression(false); | |
case 25: | |
return parseJsxElementOrSelfClosingElement(false); | |
} | |
ts.Debug.fail("Unknown JSX child kind " + token); | |
} | |
function parseJsxChildren(openingTagName) { | |
var result = []; | |
result.pos = scanner.getStartPos(); | |
var saveParsingContext = parsingContext; | |
parsingContext |= 1 << 14; | |
while (true) { | |
token = scanner.reScanJsxToken(); | |
if (token === 26) { | |
break; | |
} | |
else if (token === 1) { | |
parseErrorAtPosition(openingTagName.pos, openingTagName.end - openingTagName.pos, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, openingTagName)); | |
break; | |
} | |
result.push(parseJsxChild()); | |
} | |
result.end = scanner.getTokenPos(); | |
parsingContext = saveParsingContext; | |
return result; | |
} | |
function parseJsxOpeningOrSelfClosingElement(inExpressionContext) { | |
var fullStart = scanner.getStartPos(); | |
parseExpected(25); | |
var tagName = parseJsxElementName(); | |
var attributes = parseList(13, parseJsxAttribute); | |
var node; | |
if (token === 27) { | |
node = createNode(242, fullStart); | |
scanJsxText(); | |
} | |
else { | |
parseExpected(39); | |
if (inExpressionContext) { | |
parseExpected(27); | |
} | |
else { | |
parseExpected(27, undefined, false); | |
scanJsxText(); | |
} | |
node = createNode(241, fullStart); | |
} | |
node.tagName = tagName; | |
node.attributes = attributes; | |
return finishNode(node); | |
} | |
function parseJsxElementName() { | |
scanJsxIdentifier(); | |
var elementName = parseIdentifierName(); | |
while (parseOptional(21)) { | |
scanJsxIdentifier(); | |
var node = createNode(138, elementName.pos); | |
node.left = elementName; | |
node.right = parseIdentifierName(); | |
elementName = finishNode(node); | |
} | |
return elementName; | |
} | |
function parseJsxExpression(inExpressionContext) { | |
var node = createNode(247); | |
parseExpected(15); | |
if (token !== 16) { | |
node.expression = parseAssignmentExpressionOrHigher(); | |
} | |
if (inExpressionContext) { | |
parseExpected(16); | |
} | |
else { | |
parseExpected(16, undefined, false); | |
scanJsxText(); | |
} | |
return finishNode(node); | |
} | |
function parseJsxAttribute() { | |
if (token === 15) { | |
return parseJsxSpreadAttribute(); | |
} | |
scanJsxIdentifier(); | |
var node = createNode(245); | |
node.name = parseIdentifierName(); | |
if (parseOptional(56)) { | |
switch (token) { | |
case 9: | |
node.initializer = parseLiteralNode(); | |
break; | |
default: | |
node.initializer = parseJsxExpression(true); | |
break; | |
} | |
} | |
return finishNode(node); | |
} | |
function parseJsxSpreadAttribute() { | |
var node = createNode(246); | |
parseExpected(15); | |
parseExpected(22); | |
node.expression = parseExpression(); | |
parseExpected(16); | |
return finishNode(node); | |
} | |
function parseJsxClosingElement(inExpressionContext) { | |
var node = createNode(244); | |
parseExpected(26); | |
node.tagName = parseJsxElementName(); | |
if (inExpressionContext) { | |
parseExpected(27); | |
} | |
else { | |
parseExpected(27, undefined, false); | |
scanJsxText(); | |
} | |
return finishNode(node); | |
} | |
function parseTypeAssertion() { | |
var node = createNode(176); | |
parseExpected(25); | |
node.type = parseType(); | |
parseExpected(27); | |
node.expression = parseSimpleUnaryExpression(); | |
return finishNode(node); | |
} | |
function parseMemberExpressionRest(expression) { | |
while (true) { | |
var dotToken = parseOptionalToken(21); | |
if (dotToken) { | |
var propertyAccess = createNode(171, expression.pos); | |
propertyAccess.expression = expression; | |
propertyAccess.dotToken = dotToken; | |
propertyAccess.name = parseRightSideOfDot(true); | |
expression = finishNode(propertyAccess); | |
continue; | |
} | |
if (token === 49 && !scanner.hasPrecedingLineBreak()) { | |
nextToken(); | |
var nonNullExpression = createNode(195, expression.pos); | |
nonNullExpression.expression = expression; | |
expression = finishNode(nonNullExpression); | |
continue; | |
} | |
if (!inDecoratorContext() && parseOptional(19)) { | |
var indexedAccess = createNode(172, expression.pos); | |
indexedAccess.expression = expression; | |
if (token !== 20) { | |
indexedAccess.argumentExpression = allowInAnd(parseExpression); | |
if (indexedAccess.argumentExpression.kind === 9 || indexedAccess.argumentExpression.kind === 8) { | |
var literal = indexedAccess.argumentExpression; | |
literal.text = internIdentifier(literal.text); | |
} | |
} | |
parseExpected(20); | |
expression = finishNode(indexedAccess); | |
continue; | |
} | |
if (token === 11 || token === 12) { | |
var tagExpression = createNode(175, expression.pos); | |
tagExpression.tag = expression; | |
tagExpression.template = token === 11 | |
? parseLiteralNode() | |
: parseTemplateExpression(); | |
expression = finishNode(tagExpression); | |
continue; | |
} | |
return expression; | |
} | |
} | |
function parseCallExpressionRest(expression) { | |
while (true) { | |
expression = parseMemberExpressionRest(expression); | |
if (token === 25) { | |
var typeArguments = tryParse(parseTypeArgumentsInExpression); | |
if (!typeArguments) { | |
return expression; | |
} | |
var callExpr = createNode(173, expression.pos); | |
callExpr.expression = expression; | |
callExpr.typeArguments = typeArguments; | |
callExpr.arguments = parseArgumentList(); | |
expression = finishNode(callExpr); | |
continue; | |
} | |
else if (token === 17) { | |
var callExpr = createNode(173, expression.pos); | |
callExpr.expression = expression; | |
callExpr.arguments = parseArgumentList(); | |
expression = finishNode(callExpr); | |
continue; | |
} | |
return expression; | |
} | |
} | |
function parseArgumentList() { | |
parseExpected(17); | |
var result = parseDelimitedList(11, parseArgumentExpression); | |
parseExpected(18); | |
return result; | |
} | |
function parseTypeArgumentsInExpression() { | |
if (!parseOptional(25)) { | |
return undefined; | |
} | |
var typeArguments = parseDelimitedList(18, parseType); | |
if (!parseExpected(27)) { | |
return undefined; | |
} | |
return typeArguments && canFollowTypeArgumentsInExpression() | |
? typeArguments | |
: undefined; | |
} | |
function canFollowTypeArgumentsInExpression() { | |
switch (token) { | |
case 17: | |
case 21: | |
case 18: | |
case 20: | |
case 54: | |
case 23: | |
case 53: | |
case 30: | |
case 32: | |
case 31: | |
case 33: | |
case 51: | |
case 52: | |
case 48: | |
case 46: | |
case 47: | |
case 16: | |
case 1: | |
return true; | |
case 24: | |
case 15: | |
default: | |
return false; | |
} | |
} | |
function parsePrimaryExpression() { | |
switch (token) { | |
case 8: | |
case 9: | |
case 11: | |
return parseLiteralNode(); | |
case 97: | |
case 95: | |
case 93: | |
case 99: | |
case 84: | |
return parseTokenNode(); | |
case 17: | |
return parseParenthesizedExpression(); | |
case 19: | |
return parseArrayLiteralExpression(); | |
case 15: | |
return parseObjectLiteralExpression(); | |
case 118: | |
if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) { | |
break; | |
} | |
return parseFunctionExpression(); | |
case 73: | |
return parseClassExpression(); | |
case 87: | |
return parseFunctionExpression(); | |
case 92: | |
return parseNewExpression(); | |
case 39: | |
case 61: | |
if (reScanSlashToken() === 10) { | |
return parseLiteralNode(); | |
} | |
break; | |
case 12: | |
return parseTemplateExpression(); | |
} | |
return parseIdentifier(ts.Diagnostics.Expression_expected); | |
} | |
function parseParenthesizedExpression() { | |
var node = createNode(177); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
return finishNode(node); | |
} | |
function parseSpreadElement() { | |
var node = createNode(190); | |
parseExpected(22); | |
node.expression = parseAssignmentExpressionOrHigher(); | |
return finishNode(node); | |
} | |
function parseArgumentOrArrayLiteralElement() { | |
return token === 22 ? parseSpreadElement() : | |
token === 24 ? createNode(192) : | |
parseAssignmentExpressionOrHigher(); | |
} | |
function parseArgumentExpression() { | |
return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); | |
} | |
function parseArrayLiteralExpression() { | |
var node = createNode(169); | |
parseExpected(19); | |
if (scanner.hasPrecedingLineBreak()) { | |
node.multiLine = true; | |
} | |
node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement); | |
parseExpected(20); | |
return finishNode(node); | |
} | |
function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { | |
if (parseContextualModifier(123)) { | |
return addJSDocComment(parseAccessorDeclaration(148, fullStart, decorators, modifiers)); | |
} | |
else if (parseContextualModifier(130)) { | |
return parseAccessorDeclaration(149, fullStart, decorators, modifiers); | |
} | |
return undefined; | |
} | |
function parseObjectLiteralElement() { | |
var fullStart = scanner.getStartPos(); | |
var decorators = parseDecorators(); | |
var modifiers = parseModifiers(); | |
var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers); | |
if (accessor) { | |
return accessor; | |
} | |
var asteriskToken = parseOptionalToken(37); | |
var tokenIsIdentifier = isIdentifier(); | |
var propertyName = parsePropertyName(); | |
var questionToken = parseOptionalToken(53); | |
if (asteriskToken || token === 17 || token === 25) { | |
return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken); | |
} | |
var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 || token === 16 || token === 56); | |
if (isShorthandPropertyAssignment) { | |
var shorthandDeclaration = createNode(253, fullStart); | |
shorthandDeclaration.name = propertyName; | |
shorthandDeclaration.questionToken = questionToken; | |
var equalsToken = parseOptionalToken(56); | |
if (equalsToken) { | |
shorthandDeclaration.equalsToken = equalsToken; | |
shorthandDeclaration.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher); | |
} | |
return addJSDocComment(finishNode(shorthandDeclaration)); | |
} | |
else { | |
var propertyAssignment = createNode(252, fullStart); | |
propertyAssignment.modifiers = modifiers; | |
propertyAssignment.name = propertyName; | |
propertyAssignment.questionToken = questionToken; | |
parseExpected(54); | |
propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher); | |
return addJSDocComment(finishNode(propertyAssignment)); | |
} | |
} | |
function parseObjectLiteralExpression() { | |
var node = createNode(170); | |
parseExpected(15); | |
if (scanner.hasPrecedingLineBreak()) { | |
node.multiLine = true; | |
} | |
node.properties = parseDelimitedList(12, parseObjectLiteralElement, true); | |
parseExpected(16); | |
return finishNode(node); | |
} | |
function parseFunctionExpression() { | |
var saveDecoratorContext = inDecoratorContext(); | |
if (saveDecoratorContext) { | |
setDecoratorContext(false); | |
} | |
var node = createNode(178); | |
setModifiers(node, parseModifiers()); | |
parseExpected(87); | |
node.asteriskToken = parseOptionalToken(37); | |
var isGenerator = !!node.asteriskToken; | |
var isAsync = !!(node.flags & 256); | |
node.name = | |
isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalIdentifier) : | |
isGenerator ? doInYieldContext(parseOptionalIdentifier) : | |
isAsync ? doInAwaitContext(parseOptionalIdentifier) : | |
parseOptionalIdentifier(); | |
fillSignature(54, isGenerator, isAsync, false, node); | |
node.body = parseFunctionBlock(isGenerator, isAsync, false); | |
if (saveDecoratorContext) { | |
setDecoratorContext(true); | |
} | |
return addJSDocComment(finishNode(node)); | |
} | |
function parseOptionalIdentifier() { | |
return isIdentifier() ? parseIdentifier() : undefined; | |
} | |
function parseNewExpression() { | |
var node = createNode(174); | |
parseExpected(92); | |
node.expression = parseMemberExpressionOrHigher(); | |
node.typeArguments = tryParse(parseTypeArgumentsInExpression); | |
if (node.typeArguments || token === 17) { | |
node.arguments = parseArgumentList(); | |
} | |
return finishNode(node); | |
} | |
function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { | |
var node = createNode(198); | |
if (parseExpected(15, diagnosticMessage) || ignoreMissingOpenBrace) { | |
node.statements = parseList(1, parseStatement); | |
parseExpected(16); | |
} | |
else { | |
node.statements = createMissingList(); | |
} | |
return finishNode(node); | |
} | |
function parseFunctionBlock(allowYield, allowAwait, ignoreMissingOpenBrace, diagnosticMessage) { | |
var savedYieldContext = inYieldContext(); | |
setYieldContext(allowYield); | |
var savedAwaitContext = inAwaitContext(); | |
setAwaitContext(allowAwait); | |
var saveDecoratorContext = inDecoratorContext(); | |
if (saveDecoratorContext) { | |
setDecoratorContext(false); | |
} | |
var block = parseBlock(ignoreMissingOpenBrace, diagnosticMessage); | |
if (saveDecoratorContext) { | |
setDecoratorContext(true); | |
} | |
setYieldContext(savedYieldContext); | |
setAwaitContext(savedAwaitContext); | |
return block; | |
} | |
function parseEmptyStatement() { | |
var node = createNode(200); | |
parseExpected(23); | |
return finishNode(node); | |
} | |
function parseIfStatement() { | |
var node = createNode(202); | |
parseExpected(88); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
node.thenStatement = parseStatement(); | |
node.elseStatement = parseOptional(80) ? parseStatement() : undefined; | |
return finishNode(node); | |
} | |
function parseDoStatement() { | |
var node = createNode(203); | |
parseExpected(79); | |
node.statement = parseStatement(); | |
parseExpected(104); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
parseOptional(23); | |
return finishNode(node); | |
} | |
function parseWhileStatement() { | |
var node = createNode(204); | |
parseExpected(104); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
node.statement = parseStatement(); | |
return finishNode(node); | |
} | |
function parseForOrForInOrForOfStatement() { | |
var pos = getNodePos(); | |
parseExpected(86); | |
parseExpected(17); | |
var initializer = undefined; | |
if (token !== 23) { | |
if (token === 102 || token === 108 || token === 74) { | |
initializer = parseVariableDeclarationList(true); | |
} | |
else { | |
initializer = disallowInAnd(parseExpression); | |
} | |
} | |
var forOrForInOrForOfStatement; | |
if (parseOptional(90)) { | |
var forInStatement = createNode(206, pos); | |
forInStatement.initializer = initializer; | |
forInStatement.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
forOrForInOrForOfStatement = forInStatement; | |
} | |
else if (parseOptional(137)) { | |
var forOfStatement = createNode(207, pos); | |
forOfStatement.initializer = initializer; | |
forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); | |
parseExpected(18); | |
forOrForInOrForOfStatement = forOfStatement; | |
} | |
else { | |
var forStatement = createNode(205, pos); | |
forStatement.initializer = initializer; | |
parseExpected(23); | |
if (token !== 23 && token !== 18) { | |
forStatement.condition = allowInAnd(parseExpression); | |
} | |
parseExpected(23); | |
if (token !== 18) { | |
forStatement.incrementor = allowInAnd(parseExpression); | |
} | |
parseExpected(18); | |
forOrForInOrForOfStatement = forStatement; | |
} | |
forOrForInOrForOfStatement.statement = parseStatement(); | |
return finishNode(forOrForInOrForOfStatement); | |
} | |
function parseBreakOrContinueStatement(kind) { | |
var node = createNode(kind); | |
parseExpected(kind === 209 ? 70 : 75); | |
if (!canParseSemicolon()) { | |
node.label = parseIdentifier(); | |
} | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseReturnStatement() { | |
var node = createNode(210); | |
parseExpected(94); | |
if (!canParseSemicolon()) { | |
node.expression = allowInAnd(parseExpression); | |
} | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseWithStatement() { | |
var node = createNode(211); | |
parseExpected(105); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
node.statement = parseStatement(); | |
return finishNode(node); | |
} | |
function parseCaseClause() { | |
var node = createNode(248); | |
parseExpected(71); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(54); | |
node.statements = parseList(3, parseStatement); | |
return finishNode(node); | |
} | |
function parseDefaultClause() { | |
var node = createNode(249); | |
parseExpected(77); | |
parseExpected(54); | |
node.statements = parseList(3, parseStatement); | |
return finishNode(node); | |
} | |
function parseCaseOrDefaultClause() { | |
return token === 71 ? parseCaseClause() : parseDefaultClause(); | |
} | |
function parseSwitchStatement() { | |
var node = createNode(212); | |
parseExpected(96); | |
parseExpected(17); | |
node.expression = allowInAnd(parseExpression); | |
parseExpected(18); | |
var caseBlock = createNode(226, scanner.getStartPos()); | |
parseExpected(15); | |
caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); | |
parseExpected(16); | |
node.caseBlock = finishNode(caseBlock); | |
return finishNode(node); | |
} | |
function parseThrowStatement() { | |
var node = createNode(214); | |
parseExpected(98); | |
node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseTryStatement() { | |
var node = createNode(215); | |
parseExpected(100); | |
node.tryBlock = parseBlock(false); | |
node.catchClause = token === 72 ? parseCatchClause() : undefined; | |
if (!node.catchClause || token === 85) { | |
parseExpected(85); | |
node.finallyBlock = parseBlock(false); | |
} | |
return finishNode(node); | |
} | |
function parseCatchClause() { | |
var result = createNode(251); | |
parseExpected(72); | |
if (parseExpected(17)) { | |
result.variableDeclaration = parseVariableDeclaration(); | |
} | |
parseExpected(18); | |
result.block = parseBlock(false); | |
return finishNode(result); | |
} | |
function parseDebuggerStatement() { | |
var node = createNode(216); | |
parseExpected(76); | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseExpressionOrLabeledStatement() { | |
var fullStart = scanner.getStartPos(); | |
var expression = allowInAnd(parseExpression); | |
if (expression.kind === 69 && parseOptional(54)) { | |
var labeledStatement = createNode(213, fullStart); | |
labeledStatement.label = expression; | |
labeledStatement.statement = parseStatement(); | |
return addJSDocComment(finishNode(labeledStatement)); | |
} | |
else { | |
var expressionStatement = createNode(201, fullStart); | |
expressionStatement.expression = expression; | |
parseSemicolon(); | |
return addJSDocComment(finishNode(expressionStatement)); | |
} | |
} | |
function nextTokenIsIdentifierOrKeywordOnSameLine() { | |
nextToken(); | |
return ts.tokenIsIdentifierOrKeyword(token) && !scanner.hasPrecedingLineBreak(); | |
} | |
function nextTokenIsFunctionKeywordOnSameLine() { | |
nextToken(); | |
return token === 87 && !scanner.hasPrecedingLineBreak(); | |
} | |
function nextTokenIsIdentifierOrKeywordOrNumberOnSameLine() { | |
nextToken(); | |
return (ts.tokenIsIdentifierOrKeyword(token) || token === 8) && !scanner.hasPrecedingLineBreak(); | |
} | |
function isDeclaration() { | |
while (true) { | |
switch (token) { | |
case 102: | |
case 108: | |
case 74: | |
case 87: | |
case 73: | |
case 81: | |
return true; | |
case 107: | |
case 133: | |
return nextTokenIsIdentifierOnSameLine(); | |
case 125: | |
case 126: | |
return nextTokenIsIdentifierOrStringLiteralOnSameLine(); | |
case 115: | |
case 118: | |
case 122: | |
case 110: | |
case 111: | |
case 112: | |
case 127: | |
nextToken(); | |
if (scanner.hasPrecedingLineBreak()) { | |
return false; | |
} | |
continue; | |
case 136: | |
nextToken(); | |
return token === 15 || token === 69 || token === 82; | |
case 89: | |
nextToken(); | |
return token === 9 || token === 37 || | |
token === 15 || ts.tokenIsIdentifierOrKeyword(token); | |
case 82: | |
nextToken(); | |
if (token === 56 || token === 37 || | |
token === 15 || token === 77 || | |
token === 116) { | |
return true; | |
} | |
continue; | |
case 113: | |
nextToken(); | |
continue; | |
default: | |
return false; | |
} | |
} | |
} | |
function isStartOfDeclaration() { | |
return lookAhead(isDeclaration); | |
} | |
function isStartOfStatement() { | |
switch (token) { | |
case 55: | |
case 23: | |
case 15: | |
case 102: | |
case 108: | |
case 87: | |
case 73: | |
case 81: | |
case 88: | |
case 79: | |
case 104: | |
case 86: | |
case 75: | |
case 70: | |
case 94: | |
case 105: | |
case 96: | |
case 98: | |
case 100: | |
case 76: | |
case 72: | |
case 85: | |
return true; | |
case 74: | |
case 82: | |
case 89: | |
return isStartOfDeclaration(); | |
case 118: | |
case 122: | |
case 107: | |
case 125: | |
case 126: | |
case 133: | |
case 136: | |
return true; | |
case 112: | |
case 110: | |
case 111: | |
case 113: | |
case 127: | |
return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); | |
default: | |
return isStartOfExpression(); | |
} | |
} | |
function nextTokenIsIdentifierOrStartOfDestructuring() { | |
nextToken(); | |
return isIdentifier() || token === 15 || token === 19; | |
} | |
function isLetDeclaration() { | |
return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring); | |
} | |
function parseStatement() { | |
switch (token) { | |
case 23: | |
return parseEmptyStatement(); | |
case 15: | |
return parseBlock(false); | |
case 102: | |
return parseVariableStatement(scanner.getStartPos(), undefined, undefined); | |
case 108: | |
if (isLetDeclaration()) { | |
return parseVariableStatement(scanner.getStartPos(), undefined, undefined); | |
} | |
break; | |
case 87: | |
return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined); | |
case 73: | |
return parseClassDeclaration(scanner.getStartPos(), undefined, undefined); | |
case 88: | |
return parseIfStatement(); | |
case 79: | |
return parseDoStatement(); | |
case 104: | |
return parseWhileStatement(); | |
case 86: | |
return parseForOrForInOrForOfStatement(); | |
case 75: | |
return parseBreakOrContinueStatement(208); | |
case 70: | |
return parseBreakOrContinueStatement(209); | |
case 94: | |
return parseReturnStatement(); | |
case 105: | |
return parseWithStatement(); | |
case 96: | |
return parseSwitchStatement(); | |
case 98: | |
return parseThrowStatement(); | |
case 100: | |
case 72: | |
case 85: | |
return parseTryStatement(); | |
case 76: | |
return parseDebuggerStatement(); | |
case 55: | |
return parseDeclaration(); | |
case 118: | |
case 107: | |
case 133: | |
case 125: | |
case 126: | |
case 122: | |
case 74: | |
case 81: | |
case 82: | |
case 89: | |
case 110: | |
case 111: | |
case 112: | |
case 115: | |
case 113: | |
case 127: | |
case 136: | |
if (isStartOfDeclaration()) { | |
return parseDeclaration(); | |
} | |
break; | |
} | |
return parseExpressionOrLabeledStatement(); | |
} | |
function parseDeclaration() { | |
var fullStart = getNodePos(); | |
var decorators = parseDecorators(); | |
var modifiers = parseModifiers(); | |
switch (token) { | |
case 102: | |
case 108: | |
case 74: | |
return parseVariableStatement(fullStart, decorators, modifiers); | |
case 87: | |
return parseFunctionDeclaration(fullStart, decorators, modifiers); | |
case 73: | |
return parseClassDeclaration(fullStart, decorators, modifiers); | |
case 107: | |
return parseInterfaceDeclaration(fullStart, decorators, modifiers); | |
case 133: | |
return parseTypeAliasDeclaration(fullStart, decorators, modifiers); | |
case 81: | |
return parseEnumDeclaration(fullStart, decorators, modifiers); | |
case 136: | |
case 125: | |
case 126: | |
return parseModuleDeclaration(fullStart, decorators, modifiers); | |
case 89: | |
return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers); | |
case 82: | |
nextToken(); | |
switch (token) { | |
case 77: | |
case 56: | |
return parseExportAssignment(fullStart, decorators, modifiers); | |
case 116: | |
return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); | |
default: | |
return parseExportDeclaration(fullStart, decorators, modifiers); | |
} | |
default: | |
if (decorators || modifiers) { | |
var node = createMissingNode(238, true, ts.Diagnostics.Declaration_expected); | |
node.pos = fullStart; | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
return finishNode(node); | |
} | |
} | |
} | |
function nextTokenIsIdentifierOrStringLiteralOnSameLine() { | |
nextToken(); | |
return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token === 9); | |
} | |
function parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage) { | |
if (token !== 15 && canParseSemicolon()) { | |
parseSemicolon(); | |
return; | |
} | |
return parseFunctionBlock(isGenerator, isAsync, false, diagnosticMessage); | |
} | |
function parseArrayBindingElement() { | |
if (token === 24) { | |
return createNode(192); | |
} | |
var node = createNode(168); | |
node.dotDotDotToken = parseOptionalToken(22); | |
node.name = parseIdentifierOrPattern(); | |
node.initializer = parseBindingElementInitializer(false); | |
return finishNode(node); | |
} | |
function parseObjectBindingElement() { | |
var node = createNode(168); | |
var tokenIsIdentifier = isIdentifier(); | |
var propertyName = parsePropertyName(); | |
if (tokenIsIdentifier && token !== 54) { | |
node.name = propertyName; | |
} | |
else { | |
parseExpected(54); | |
node.propertyName = propertyName; | |
node.name = parseIdentifierOrPattern(); | |
} | |
node.initializer = parseBindingElementInitializer(false); | |
return finishNode(node); | |
} | |
function parseObjectBindingPattern() { | |
var node = createNode(166); | |
parseExpected(15); | |
node.elements = parseDelimitedList(9, parseObjectBindingElement); | |
parseExpected(16); | |
return finishNode(node); | |
} | |
function parseArrayBindingPattern() { | |
var node = createNode(167); | |
parseExpected(19); | |
node.elements = parseDelimitedList(10, parseArrayBindingElement); | |
parseExpected(20); | |
return finishNode(node); | |
} | |
function isIdentifierOrPattern() { | |
return token === 15 || token === 19 || isIdentifier(); | |
} | |
function parseIdentifierOrPattern() { | |
if (token === 19) { | |
return parseArrayBindingPattern(); | |
} | |
if (token === 15) { | |
return parseObjectBindingPattern(); | |
} | |
return parseIdentifier(); | |
} | |
function parseVariableDeclaration() { | |
var node = createNode(217); | |
node.name = parseIdentifierOrPattern(); | |
node.type = parseTypeAnnotation(); | |
if (!isInOrOfKeyword(token)) { | |
node.initializer = parseInitializer(false); | |
} | |
return finishNode(node); | |
} | |
function parseVariableDeclarationList(inForStatementInitializer) { | |
var node = createNode(218); | |
switch (token) { | |
case 102: | |
break; | |
case 108: | |
node.flags |= 1024; | |
break; | |
case 74: | |
node.flags |= 2048; | |
break; | |
default: | |
ts.Debug.fail(); | |
} | |
nextToken(); | |
if (token === 137 && lookAhead(canFollowContextualOfKeyword)) { | |
node.declarations = createMissingList(); | |
} | |
else { | |
var savedDisallowIn = inDisallowInContext(); | |
setDisallowInContext(inForStatementInitializer); | |
node.declarations = parseDelimitedList(8, parseVariableDeclaration); | |
setDisallowInContext(savedDisallowIn); | |
} | |
return finishNode(node); | |
} | |
function canFollowContextualOfKeyword() { | |
return nextTokenIsIdentifier() && nextToken() === 18; | |
} | |
function parseVariableStatement(fullStart, decorators, modifiers) { | |
var node = createNode(199, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
node.declarationList = parseVariableDeclarationList(false); | |
parseSemicolon(); | |
return addJSDocComment(finishNode(node)); | |
} | |
function parseFunctionDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(219, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(87); | |
node.asteriskToken = parseOptionalToken(37); | |
node.name = node.flags & 512 ? parseOptionalIdentifier() : parseIdentifier(); | |
var isGenerator = !!node.asteriskToken; | |
var isAsync = !!(node.flags & 256); | |
fillSignature(54, isGenerator, isAsync, false, node); | |
node.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, ts.Diagnostics.or_expected); | |
return addJSDocComment(finishNode(node)); | |
} | |
function parseConstructorDeclaration(pos, decorators, modifiers) { | |
var node = createNode(147, pos); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(121); | |
fillSignature(54, false, false, false, node); | |
node.body = parseFunctionBlockOrSemicolon(false, false, ts.Diagnostics.or_expected); | |
return addJSDocComment(finishNode(node)); | |
} | |
function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { | |
var method = createNode(146, fullStart); | |
method.decorators = decorators; | |
setModifiers(method, modifiers); | |
method.asteriskToken = asteriskToken; | |
method.name = name; | |
method.questionToken = questionToken; | |
var isGenerator = !!asteriskToken; | |
var isAsync = !!(method.flags & 256); | |
fillSignature(54, isGenerator, isAsync, false, method); | |
method.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage); | |
return addJSDocComment(finishNode(method)); | |
} | |
function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { | |
var property = createNode(144, fullStart); | |
property.decorators = decorators; | |
setModifiers(property, modifiers); | |
property.name = name; | |
property.questionToken = questionToken; | |
property.type = parseTypeAnnotation(); | |
property.initializer = modifiers && modifiers.flags & 32 | |
? allowInAnd(parseNonParameterInitializer) | |
: doOutsideOfContext(8388608 | 4194304, parseNonParameterInitializer); | |
parseSemicolon(); | |
return finishNode(property); | |
} | |
function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) { | |
var asteriskToken = parseOptionalToken(37); | |
var name = parsePropertyName(); | |
var questionToken = parseOptionalToken(53); | |
if (asteriskToken || token === 17 || token === 25) { | |
return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected); | |
} | |
else { | |
return parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken); | |
} | |
} | |
function parseNonParameterInitializer() { | |
return parseInitializer(false); | |
} | |
function parseAccessorDeclaration(kind, fullStart, decorators, modifiers) { | |
var node = createNode(kind, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
node.name = parsePropertyName(); | |
fillSignature(54, false, false, false, node); | |
node.body = parseFunctionBlockOrSemicolon(false, false); | |
return finishNode(node); | |
} | |
function isClassMemberModifier(idToken) { | |
switch (idToken) { | |
case 112: | |
case 110: | |
case 111: | |
case 113: | |
case 127: | |
return true; | |
default: | |
return false; | |
} | |
} | |
function isClassMemberStart() { | |
var idToken; | |
if (token === 55) { | |
return true; | |
} | |
while (ts.isModifierKind(token)) { | |
idToken = token; | |
if (isClassMemberModifier(idToken)) { | |
return true; | |
} | |
nextToken(); | |
} | |
if (token === 37) { | |
return true; | |
} | |
if (isLiteralPropertyName()) { | |
idToken = token; | |
nextToken(); | |
} | |
if (token === 19) { | |
return true; | |
} | |
if (idToken !== undefined) { | |
if (!ts.isKeyword(idToken) || idToken === 130 || idToken === 123) { | |
return true; | |
} | |
switch (token) { | |
case 17: | |
case 25: | |
case 54: | |
case 56: | |
case 53: | |
return true; | |
default: | |
return canParseSemicolon(); | |
} | |
} | |
return false; | |
} | |
function parseDecorators() { | |
var decorators; | |
while (true) { | |
var decoratorStart = getNodePos(); | |
if (!parseOptional(55)) { | |
break; | |
} | |
if (!decorators) { | |
decorators = []; | |
decorators.pos = decoratorStart; | |
} | |
var decorator = createNode(142, decoratorStart); | |
decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); | |
decorators.push(finishNode(decorator)); | |
} | |
if (decorators) { | |
decorators.end = getNodeEnd(); | |
} | |
return decorators; | |
} | |
function parseModifiers(permitInvalidConstAsModifier) { | |
var flags = 0; | |
var modifiers; | |
while (true) { | |
var modifierStart = scanner.getStartPos(); | |
var modifierKind = token; | |
if (token === 74 && permitInvalidConstAsModifier) { | |
if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { | |
break; | |
} | |
} | |
else { | |
if (!parseAnyContextualModifier()) { | |
break; | |
} | |
} | |
if (!modifiers) { | |
modifiers = []; | |
modifiers.pos = modifierStart; | |
} | |
flags |= ts.modifierToFlag(modifierKind); | |
modifiers.push(finishNode(createNode(modifierKind, modifierStart))); | |
} | |
if (modifiers) { | |
modifiers.flags = flags; | |
modifiers.end = scanner.getStartPos(); | |
} | |
return modifiers; | |
} | |
function parseModifiersForArrowFunction() { | |
var flags = 0; | |
var modifiers; | |
if (token === 118) { | |
var modifierStart = scanner.getStartPos(); | |
var modifierKind = token; | |
nextToken(); | |
modifiers = []; | |
modifiers.pos = modifierStart; | |
flags |= ts.modifierToFlag(modifierKind); | |
modifiers.push(finishNode(createNode(modifierKind, modifierStart))); | |
modifiers.flags = flags; | |
modifiers.end = scanner.getStartPos(); | |
} | |
return modifiers; | |
} | |
function parseClassElement() { | |
if (token === 23) { | |
var result = createNode(197); | |
nextToken(); | |
return finishNode(result); | |
} | |
var fullStart = getNodePos(); | |
var decorators = parseDecorators(); | |
var modifiers = parseModifiers(true); | |
var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers); | |
if (accessor) { | |
return accessor; | |
} | |
if (token === 121) { | |
return parseConstructorDeclaration(fullStart, decorators, modifiers); | |
} | |
if (isIndexSignature()) { | |
return parseIndexSignatureDeclaration(fullStart, decorators, modifiers); | |
} | |
if (ts.tokenIsIdentifierOrKeyword(token) || | |
token === 9 || | |
token === 8 || | |
token === 37 || | |
token === 19) { | |
return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers); | |
} | |
if (decorators || modifiers) { | |
var name_7 = createMissingNode(69, true, ts.Diagnostics.Declaration_expected); | |
return parsePropertyDeclaration(fullStart, decorators, modifiers, name_7, undefined); | |
} | |
ts.Debug.fail("Should not have attempted to parse class member declaration."); | |
} | |
function parseClassExpression() { | |
return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 191); | |
} | |
function parseClassDeclaration(fullStart, decorators, modifiers) { | |
return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 220); | |
} | |
function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { | |
var node = createNode(kind, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(73); | |
node.name = parseNameOfClassDeclarationOrExpression(); | |
node.typeParameters = parseTypeParameters(); | |
node.heritageClauses = parseHeritageClauses(true); | |
if (parseExpected(15)) { | |
node.members = parseClassMembers(); | |
parseExpected(16); | |
} | |
else { | |
node.members = createMissingList(); | |
} | |
return finishNode(node); | |
} | |
function parseNameOfClassDeclarationOrExpression() { | |
return isIdentifier() && !isImplementsClause() | |
? parseIdentifier() | |
: undefined; | |
} | |
function isImplementsClause() { | |
return token === 106 && lookAhead(nextTokenIsIdentifierOrKeyword); | |
} | |
function parseHeritageClauses(isClassHeritageClause) { | |
if (isHeritageClause()) { | |
return parseList(20, parseHeritageClause); | |
} | |
return undefined; | |
} | |
function parseHeritageClause() { | |
if (token === 83 || token === 106) { | |
var node = createNode(250); | |
node.token = token; | |
nextToken(); | |
node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); | |
return finishNode(node); | |
} | |
return undefined; | |
} | |
function parseExpressionWithTypeArguments() { | |
var node = createNode(193); | |
node.expression = parseLeftHandSideExpressionOrHigher(); | |
if (token === 25) { | |
node.typeArguments = parseBracketedList(18, parseType, 25, 27); | |
} | |
return finishNode(node); | |
} | |
function isHeritageClause() { | |
return token === 83 || token === 106; | |
} | |
function parseClassMembers() { | |
return parseList(5, parseClassElement); | |
} | |
function parseInterfaceDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(221, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(107); | |
node.name = parseIdentifier(); | |
node.typeParameters = parseTypeParameters(); | |
node.heritageClauses = parseHeritageClauses(false); | |
node.members = parseObjectTypeMembers(); | |
return finishNode(node); | |
} | |
function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(222, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(133); | |
node.name = parseIdentifier(); | |
node.typeParameters = parseTypeParameters(); | |
parseExpected(56); | |
node.type = parseType(); | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseEnumMember() { | |
var node = createNode(254, scanner.getStartPos()); | |
node.name = parsePropertyName(); | |
node.initializer = allowInAnd(parseNonParameterInitializer); | |
return finishNode(node); | |
} | |
function parseEnumDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(223, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
parseExpected(81); | |
node.name = parseIdentifier(); | |
if (parseExpected(15)) { | |
node.members = parseDelimitedList(6, parseEnumMember); | |
parseExpected(16); | |
} | |
else { | |
node.members = createMissingList(); | |
} | |
return finishNode(node); | |
} | |
function parseModuleBlock() { | |
var node = createNode(225, scanner.getStartPos()); | |
if (parseExpected(15)) { | |
node.statements = parseList(1, parseStatement); | |
parseExpected(16); | |
} | |
else { | |
node.statements = createMissingList(); | |
} | |
return finishNode(node); | |
} | |
function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { | |
var node = createNode(224, fullStart); | |
var namespaceFlag = flags & 4096; | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
node.flags |= flags; | |
node.name = parseIdentifier(); | |
node.body = parseOptional(21) | |
? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 1 | namespaceFlag) | |
: parseModuleBlock(); | |
return finishNode(node); | |
} | |
function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(224, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
if (token === 136) { | |
node.name = parseIdentifier(); | |
node.flags |= 131072; | |
} | |
else { | |
node.name = parseLiteralNode(true); | |
} | |
node.body = parseModuleBlock(); | |
return finishNode(node); | |
} | |
function parseModuleDeclaration(fullStart, decorators, modifiers) { | |
var flags = modifiers ? modifiers.flags : 0; | |
if (token === 136) { | |
return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); | |
} | |
else if (parseOptional(126)) { | |
flags |= 4096; | |
} | |
else { | |
parseExpected(125); | |
if (token === 9) { | |
return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); | |
} | |
} | |
return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); | |
} | |
function isExternalModuleReference() { | |
return token === 128 && | |
lookAhead(nextTokenIsOpenParen); | |
} | |
function nextTokenIsOpenParen() { | |
return nextToken() === 17; | |
} | |
function nextTokenIsSlash() { | |
return nextToken() === 39; | |
} | |
function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { | |
var exportDeclaration = createNode(227, fullStart); | |
exportDeclaration.decorators = decorators; | |
exportDeclaration.modifiers = modifiers; | |
parseExpected(116); | |
parseExpected(126); | |
exportDeclaration.name = parseIdentifier(); | |
parseExpected(23); | |
return finishNode(exportDeclaration); | |
} | |
function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) { | |
parseExpected(89); | |
var afterImportPos = scanner.getStartPos(); | |
var identifier; | |
if (isIdentifier()) { | |
identifier = parseIdentifier(); | |
if (token !== 24 && token !== 135) { | |
var importEqualsDeclaration = createNode(228, fullStart); | |
importEqualsDeclaration.decorators = decorators; | |
setModifiers(importEqualsDeclaration, modifiers); | |
importEqualsDeclaration.name = identifier; | |
parseExpected(56); | |
importEqualsDeclaration.moduleReference = parseModuleReference(); | |
parseSemicolon(); | |
return finishNode(importEqualsDeclaration); | |
} | |
} | |
var importDeclaration = createNode(229, fullStart); | |
importDeclaration.decorators = decorators; | |
setModifiers(importDeclaration, modifiers); | |
if (identifier || | |
token === 37 || | |
token === 15) { | |
importDeclaration.importClause = parseImportClause(identifier, afterImportPos); | |
parseExpected(135); | |
} | |
importDeclaration.moduleSpecifier = parseModuleSpecifier(); | |
parseSemicolon(); | |
return finishNode(importDeclaration); | |
} | |
function parseImportClause(identifier, fullStart) { | |
var importClause = createNode(230, fullStart); | |
if (identifier) { | |
importClause.name = identifier; | |
} | |
if (!importClause.name || | |
parseOptional(24)) { | |
importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(232); | |
} | |
return finishNode(importClause); | |
} | |
function parseModuleReference() { | |
return isExternalModuleReference() | |
? parseExternalModuleReference() | |
: parseEntityName(false); | |
} | |
function parseExternalModuleReference() { | |
var node = createNode(239); | |
parseExpected(128); | |
parseExpected(17); | |
node.expression = parseModuleSpecifier(); | |
parseExpected(18); | |
return finishNode(node); | |
} | |
function parseModuleSpecifier() { | |
if (token === 9) { | |
var result = parseLiteralNode(); | |
internIdentifier(result.text); | |
return result; | |
} | |
else { | |
return parseExpression(); | |
} | |
} | |
function parseNamespaceImport() { | |
var namespaceImport = createNode(231); | |
parseExpected(37); | |
parseExpected(116); | |
namespaceImport.name = parseIdentifier(); | |
return finishNode(namespaceImport); | |
} | |
function parseNamedImportsOrExports(kind) { | |
var node = createNode(kind); | |
node.elements = parseBracketedList(21, kind === 232 ? parseImportSpecifier : parseExportSpecifier, 15, 16); | |
return finishNode(node); | |
} | |
function parseExportSpecifier() { | |
return parseImportOrExportSpecifier(237); | |
} | |
function parseImportSpecifier() { | |
return parseImportOrExportSpecifier(233); | |
} | |
function parseImportOrExportSpecifier(kind) { | |
var node = createNode(kind); | |
var checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier(); | |
var checkIdentifierStart = scanner.getTokenPos(); | |
var checkIdentifierEnd = scanner.getTextPos(); | |
var identifierName = parseIdentifierName(); | |
if (token === 116) { | |
node.propertyName = identifierName; | |
parseExpected(116); | |
checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier(); | |
checkIdentifierStart = scanner.getTokenPos(); | |
checkIdentifierEnd = scanner.getTextPos(); | |
node.name = parseIdentifierName(); | |
} | |
else { | |
node.name = identifierName; | |
} | |
if (kind === 233 && checkIdentifierIsKeyword) { | |
parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); | |
} | |
return finishNode(node); | |
} | |
function parseExportDeclaration(fullStart, decorators, modifiers) { | |
var node = createNode(235, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
if (parseOptional(37)) { | |
parseExpected(135); | |
node.moduleSpecifier = parseModuleSpecifier(); | |
} | |
else { | |
node.exportClause = parseNamedImportsOrExports(236); | |
if (token === 135 || (token === 9 && !scanner.hasPrecedingLineBreak())) { | |
parseExpected(135); | |
node.moduleSpecifier = parseModuleSpecifier(); | |
} | |
} | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function parseExportAssignment(fullStart, decorators, modifiers) { | |
var node = createNode(234, fullStart); | |
node.decorators = decorators; | |
setModifiers(node, modifiers); | |
if (parseOptional(56)) { | |
node.isExportEquals = true; | |
} | |
else { | |
parseExpected(77); | |
} | |
node.expression = parseAssignmentExpressionOrHigher(); | |
parseSemicolon(); | |
return finishNode(node); | |
} | |
function processReferenceComments(sourceFile) { | |
var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, 0, sourceText); | |
var referencedFiles = []; | |
var typeReferenceDirectives = []; | |
var amdDependencies = []; | |
var amdModuleName; | |
while (true) { | |
var kind = triviaScanner.scan(); | |
if (kind !== 2) { | |
if (ts.isTrivia(kind)) { | |
continue; | |
} | |
else { | |
break; | |
} | |
} | |
var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos(), kind: triviaScanner.getToken() }; | |
var comment = sourceText.substring(range.pos, range.end); | |
var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, range); | |
if (referencePathMatchResult) { | |
var fileReference = referencePathMatchResult.fileReference; | |
sourceFile.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib; | |
var diagnosticMessage = referencePathMatchResult.diagnosticMessage; | |
if (fileReference) { | |
if (referencePathMatchResult.isTypeReferenceDirective) { | |
typeReferenceDirectives.push(fileReference); | |
} | |
else { | |
referencedFiles.push(fileReference); | |
} | |
} | |
if (diagnosticMessage) { | |
parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); | |
} | |
} | |
else { | |
var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim; | |
var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment); | |
if (amdModuleNameMatchResult) { | |
if (amdModuleName) { | |
parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments)); | |
} | |
amdModuleName = amdModuleNameMatchResult[2]; | |
} | |
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s/gim; | |
var pathRegex = /\spath\s*=\s*('|")(.+?)\1/gim; | |
var nameRegex = /\sname\s*=\s*('|")(.+?)\1/gim; | |
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment); | |
if (amdDependencyMatchResult) { | |
var pathMatchResult = pathRegex.exec(comment); | |
var nameMatchResult = nameRegex.exec(comment); | |
if (pathMatchResult) { | |
var amdDependency = { path: pathMatchResult[2], name: nameMatchResult ? nameMatchResult[2] : undefined }; | |
amdDependencies.push(amdDependency); | |
} | |
} | |
} | |
} | |
sourceFile.referencedFiles = referencedFiles; | |
sourceFile.typeReferenceDirectives = typeReferenceDirectives; | |
sourceFile.amdDependencies = amdDependencies; | |
sourceFile.moduleName = amdModuleName; | |
} | |
function setExternalModuleIndicator(sourceFile) { | |
sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { | |
return node.flags & 1 | |
|| node.kind === 228 && node.moduleReference.kind === 239 | |
|| node.kind === 229 | |
|| node.kind === 234 | |
|| node.kind === 235 | |
? node | |
: undefined; | |
}); | |
} | |
var JSDocParser; | |
(function (JSDocParser) { | |
function isJSDocType() { | |
switch (token) { | |
case 37: | |
case 53: | |
case 17: | |
case 19: | |
case 49: | |
case 15: | |
case 87: | |
case 22: | |
case 92: | |
case 97: | |
return true; | |
} | |
return ts.tokenIsIdentifierOrKeyword(token); | |
} | |
JSDocParser.isJSDocType = isJSDocType; | |
function parseJSDocTypeExpressionForTests(content, start, length) { | |
initializeState("file.js", content, 2, undefined, 1); | |
scanner.setText(content, start, length); | |
token = scanner.scan(); | |
var jsDocTypeExpression = parseJSDocTypeExpression(); | |
var diagnostics = parseDiagnostics; | |
clearState(); | |
return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined; | |
} | |
JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; | |
function parseJSDocTypeExpression() { | |
var result = createNode(256, scanner.getTokenPos()); | |
parseExpected(15); | |
result.type = parseJSDocTopLevelType(); | |
parseExpected(16); | |
fixupParentReferences(result); | |
return finishNode(result); | |
} | |
JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression; | |
function parseJSDocTopLevelType() { | |
var type = parseJSDocType(); | |
if (token === 47) { | |
var unionType = createNode(260, type.pos); | |
unionType.types = parseJSDocTypeList(type); | |
type = finishNode(unionType); | |
} | |
if (token === 56) { | |
var optionalType = createNode(267, type.pos); | |
nextToken(); | |
optionalType.type = type; | |
type = finishNode(optionalType); | |
} | |
return type; | |
} | |
function parseJSDocType() { | |
var type = parseBasicTypeExpression(); | |
while (true) { | |
if (token === 19) { | |
var arrayType = createNode(259, type.pos); | |
arrayType.elementType = type; | |
nextToken(); | |
parseExpected(20); | |
type = finishNode(arrayType); | |
} | |
else if (token === 53) { | |
var nullableType = createNode(262, type.pos); | |
nullableType.type = type; | |
nextToken(); | |
type = finishNode(nullableType); | |
} | |
else if (token === 49) { | |
var nonNullableType = createNode(263, type.pos); | |
nonNullableType.type = type; | |
nextToken(); | |
type = finishNode(nonNullableType); | |
} | |
else { | |
break; | |
} | |
} | |
return type; | |
} | |
function parseBasicTypeExpression() { | |
switch (token) { | |
case 37: | |
return parseJSDocAllType(); | |
case 53: | |
return parseJSDocUnknownOrNullableType(); | |
case 17: | |
return parseJSDocUnionType(); | |
case 19: | |
return parseJSDocTupleType(); | |
case 49: | |
return parseJSDocNonNullableType(); | |
case 15: | |
return parseJSDocRecordType(); | |
case 87: | |
return parseJSDocFunctionType(); | |
case 22: | |
return parseJSDocVariadicType(); | |
case 92: | |
return parseJSDocConstructorType(); | |
case 97: | |
return parseJSDocThisType(); | |
case 117: | |
case 131: | |
case 129: | |
case 120: | |
case 132: | |
case 103: | |
return parseTokenNode(); | |
} | |
return parseJSDocTypeReference(); | |
} | |
function parseJSDocThisType() { | |
var result = createNode(271); | |
nextToken(); | |
parseExpected(54); | |
result.type = parseJSDocType(); | |
return finishNode(result); | |
} | |
function parseJSDocConstructorType() { | |
var result = createNode(270); | |
nextToken(); | |
parseExpected(54); | |
result.type = parseJSDocType(); | |
return finishNode(result); | |
} | |
function parseJSDocVariadicType() { | |
var result = createNode(269); | |
nextToken(); | |
result.type = parseJSDocType(); | |
return finishNode(result); | |
} | |
function parseJSDocFunctionType() { | |
var result = createNode(268); | |
nextToken(); | |
parseExpected(17); | |
result.parameters = parseDelimitedList(22, parseJSDocParameter); | |
checkForTrailingComma(result.parameters); | |
parseExpected(18); | |
if (token === 54) { | |
nextToken(); | |
result.type = parseJSDocType(); | |
} | |
return finishNode(result); | |
} | |
function parseJSDocParameter() { | |
var parameter = createNode(141); | |
parameter.type = parseJSDocType(); | |
if (parseOptional(56)) { | |
parameter.questionToken = createNode(56); | |
} | |
return finishNode(parameter); | |
} | |
function parseJSDocTypeReference() { | |
var result = createNode(266); | |
result.name = parseSimplePropertyName(); | |
if (token === 25) { | |
result.typeArguments = parseTypeArguments(); | |
} | |
else { | |
while (parseOptional(21)) { | |
if (token === 25) { | |
result.typeArguments = parseTypeArguments(); | |
break; | |
} | |
else { | |
result.name = parseQualifiedName(result.name); | |
} | |
} | |
} | |
return finishNode(result); | |
} | |
function parseTypeArguments() { | |
nextToken(); | |
var typeArguments = parseDelimitedList(23, parseJSDocType); | |
checkForTrailingComma(typeArguments); | |
checkForEmptyTypeArgumentList(typeArguments); | |
parseExpected(27); | |
return typeArguments; | |
} | |
function checkForEmptyTypeArgumentList(typeArguments) { | |
if (parseDiagnostics.length === 0 && typeArguments && typeArguments.length === 0) { | |
var start = typeArguments.pos - "<".length; | |
var end = ts.skipTrivia(sourceText, typeArguments.end) + ">".length; | |
return parseErrorAtPosition(start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty); | |
} | |
} | |
function parseQualifiedName(left) { | |
var result = createNode(138, left.pos); | |
result.left = left; | |
result.right = parseIdentifierName(); | |
return finishNode(result); | |
} | |
function parseJSDocRecordType() { | |
var result = createNode(264); | |
nextToken(); | |
result.members = parseDelimitedList(24, parseJSDocRecordMember); | |
checkForTrailingComma(result.members); | |
parseExpected(16); | |
return finishNode(result); | |
} | |
function parseJSDocRecordMember() { | |
var result = createNode(265); | |
result.name = parseSimplePropertyName(); | |
if (token === 54) { | |
nextToken(); | |
result.type = parseJSDocType(); | |
} | |
return finishNode(result); | |
} | |
function parseJSDocNonNullableType() { | |
var result = createNode(263); | |
nextToken(); | |
result.type = parseJSDocType(); | |
return finishNode(result); | |
} | |
function parseJSDocTupleType() { | |
var result = createNode(261); | |
nextToken(); | |
result.types = parseDelimitedList(25, parseJSDocType); | |
checkForTrailingComma(result.types); | |
parseExpected(20); | |
return finishNode(result); | |
} | |
function checkForTrailingComma(list) { | |
if (parseDiagnostics.length === 0 && list.hasTrailingComma) { | |
var start = list.end - ",".length; | |
parseErrorAtPosition(start, ",".length, ts.Diagnostics.Trailing_comma_not_allowed); | |
} | |
} | |
function parseJSDocUnionType() { | |
var result = createNode(260); | |
nextToken(); | |
result.types = parseJSDocTypeList(parseJSDocType()); | |
parseExpected(18); | |
return finishNode(result); | |
} | |
function parseJSDocTypeList(firstType) { | |
ts.Debug.assert(!!firstType); | |
var types = []; | |
types.pos = firstType.pos; | |
types.push(firstType); | |
while (parseOptional(47)) { | |
types.push(parseJSDocType()); | |
} | |
types.end = scanner.getStartPos(); | |
return types; | |
} | |
function parseJSDocAllType() { | |
var result = createNode(257); | |
nextToken(); | |
return finishNode(result); | |
} | |
function parseJSDocUnknownOrNullableType() { | |
var pos = scanner.getStartPos(); | |
nextToken(); | |
if (token === 24 || | |
token === 16 || | |
token === 18 || | |
token === 27 || | |
token === 56 || | |
token === 47) { | |
var result = createNode(258, pos); | |
return finishNode(result); | |
} | |
else { | |
var result = createNode(262, pos); | |
result.type = parseJSDocType(); | |
return finishNode(result); | |
} | |
} | |
function parseIsolatedJSDocComment(content, start, length) { | |
initializeState("file.js", content, 2, undefined, 1); | |
sourceFile = { languageVariant: 0, text: content }; | |
var jsDocComment = parseJSDocCommentWorker(start, length); | |
var diagnostics = parseDiagnostics; | |
clearState(); | |
return jsDocComment ? { jsDocComment: jsDocComment, diagnostics: diagnostics } : undefined; | |
} | |
JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment; | |
function parseJSDocComment(parent, start, length) { | |
var saveToken = token; | |
var saveParseDiagnosticsLength = parseDiagnostics.length; | |
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; | |
var comment = parseJSDocCommentWorker(start, length); | |
if (comment) { | |
comment.parent = parent; | |
} | |
token = saveToken; | |
parseDiagnostics.length = saveParseDiagnosticsLength; | |
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; | |
return comment; | |
} | |
JSDocParser.parseJSDocComment = parseJSDocComment; | |
function parseJSDocCommentWorker(start, length) { | |
var content = sourceText; | |
start = start || 0; | |
var end = length === undefined ? content.length : start + length; | |
length = end - start; | |
ts.Debug.assert(start >= 0); | |
ts.Debug.assert(start <= end); | |
ts.Debug.assert(end <= content.length); | |
var tags; | |
var result; | |
if (content.charCodeAt(start) === 47 && | |
content.charCodeAt(start + 1) === 42 && | |
content.charCodeAt(start + 2) === 42 && | |
content.charCodeAt(start + 3) !== 42) { | |
scanner.scanRange(start + 3, length - 5, function () { | |
var canParseTag = true; | |
var seenAsterisk = true; | |
nextJSDocToken(); | |
while (token !== 1) { | |
switch (token) { | |
case 55: | |
if (canParseTag) { | |
parseTag(); | |
} | |
seenAsterisk = false; | |
break; | |
case 4: | |
canParseTag = true; | |
seenAsterisk = false; | |
break; | |
case 37: | |
if (seenAsterisk) { | |
canParseTag = false; | |
} | |
seenAsterisk = true; | |
break; | |
case 69: | |
canParseTag = false; | |
break; | |
case 1: | |
break; | |
} | |
nextJSDocToken(); | |
} | |
result = createJSDocComment(); | |
}); | |
} | |
return result; | |
function createJSDocComment() { | |
if (!tags) { | |
return undefined; | |
} | |
var result = createNode(272, start); | |
result.tags = tags; | |
return finishNode(result, end); | |
} | |
function skipWhitespace() { | |
while (token === 5 || token === 4) { | |
nextJSDocToken(); | |
} | |
} | |
function parseTag() { | |
ts.Debug.assert(token === 55); | |
var atToken = createNode(55, scanner.getTokenPos()); | |
atToken.end = scanner.getTextPos(); | |
nextJSDocToken(); | |
var tagName = parseJSDocIdentifierName(); | |
if (!tagName) { | |
return; | |
} | |
var tag = handleTag(atToken, tagName) || handleUnknownTag(atToken, tagName); | |
addTag(tag); | |
} | |
function handleTag(atToken, tagName) { | |
if (tagName) { | |
switch (tagName.text) { | |
case "param": | |
return handleParamTag(atToken, tagName); | |
case "return": | |
case "returns": | |
return handleReturnTag(atToken, tagName); | |
case "template": | |
return handleTemplateTag(atToken, tagName); | |
case "type": | |
return handleTypeTag(atToken, tagName); | |
} | |
} | |
return undefined; | |
} | |
function handleUnknownTag(atToken, tagName) { | |
var result = createNode(273, atToken.pos); | |
result.atToken = atToken; | |
result.tagName = tagName; | |
return finishNode(result); | |
} | |
function addTag(tag) { | |
if (tag) { | |
if (!tags) { | |
tags = []; | |
tags.pos = tag.pos; | |
} | |
tags.push(tag); | |
tags.end = tag.end; | |
} | |
} | |
function tryParseTypeExpression() { | |
if (token !== 15) { | |
return undefined; | |
} | |
var typeExpression = parseJSDocTypeExpression(); | |
return typeExpression; | |
} | |
function handleParamTag(atToken, tagName) { | |
var typeExpression = tryParseTypeExpression(); | |
skipWhitespace(); | |
var name; | |
var isBracketed; | |
if (parseOptionalToken(19)) { | |
name = parseJSDocIdentifierName(); | |
isBracketed = true; | |
if (parseOptionalToken(56)) { | |
parseExpression(); | |
} | |
parseExpected(20); | |
} | |
else if (ts.tokenIsIdentifierOrKeyword(token)) { | |
name = parseJSDocIdentifierName(); | |
} | |
if (!name) { | |
parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); | |
return undefined; | |
} | |
var preName, postName; | |
if (typeExpression) { | |
postName = name; | |
} | |
else { | |
preName = name; | |
} | |
if (!typeExpression) { | |
typeExpression = tryParseTypeExpression(); | |
} | |
var result = createNode(274, atToken.pos); | |
result.atToken = atToken; | |
result.tagName = tagName; | |
result.preParameterName = preName; | |
result.typeExpression = typeExpression; | |
result.postParameterName = postName; | |
result.isBracketed = isBracketed; | |
return finishNode(result); | |
} | |
function handleReturnTag(atToken, tagName) { | |
if (ts.forEach(tags, function (t) { return t.kind === 275; })) { | |
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); | |
} | |
var result = createNode(275, atToken.pos); | |
result.atToken = atToken; | |
result.tagName = tagName; | |
result.typeExpression = tryParseTypeExpression(); | |
return finishNode(result); | |
} | |
function handleTypeTag(atToken, tagName) { | |
if (ts.forEach(tags, function (t) { return t.kind === 276; })) { | |
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); | |
} | |
var result = createNode(276, atToken.pos); | |
result.atToken = atToken; | |
result.tagName = tagName; | |
result.typeExpression = tryParseTypeExpression(); | |
return finishNode(result); | |
} | |
function handleTemplateTag(atToken, tagName) { | |
if (ts.forEach(tags, function (t) { return t.kind === 277; })) { | |
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); | |
} | |
var typeParameters = []; | |
typeParameters.pos = scanner.getStartPos(); | |
while (true) { | |
var name_8 = parseJSDocIdentifierName(); | |
if (!name_8) { | |
parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); | |
return undefined; | |
} | |
var typeParameter = createNode(140, name_8.pos); | |
typeParameter.name = name_8; | |
finishNode(typeParameter); | |
typeParameters.push(typeParameter); | |
if (token === 24) { | |
nextJSDocToken(); | |
} | |
else { | |
break; | |
} | |
} | |
var result = createNode(277, atToken.pos); | |
result.atToken = atToken; | |
result.tagName = tagName; | |
result.typeParameters = typeParameters; | |
finishNode(result); | |
typeParameters.end = result.end; | |
return result; | |
} | |
function nextJSDocToken() { | |
return token = scanner.scanJSDocToken(); | |
} | |
function parseJSDocIdentifierName() { | |
return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); | |
} | |
function createJSDocIdentifier(isIdentifier) { | |
if (!isIdentifier) { | |
parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); | |
return undefined; | |
} | |
var pos = scanner.getTokenPos(); | |
var end = scanner.getTextPos(); | |
var result = createNode(69, pos); | |
result.text = content.substring(pos, end); | |
finishNode(result, end); | |
nextJSDocToken(); | |
return result; | |
} | |
} | |
JSDocParser.parseJSDocCommentWorker = parseJSDocCommentWorker; | |
})(JSDocParser = Parser.JSDocParser || (Parser.JSDocParser = {})); | |
})(Parser || (Parser = {})); | |
var IncrementalParser; | |
(function (IncrementalParser) { | |
function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { | |
aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2); | |
checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks); | |
if (ts.textChangeRangeIsUnchanged(textChangeRange)) { | |
return sourceFile; | |
} | |
if (sourceFile.statements.length === 0) { | |
return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true, sourceFile.scriptKind); | |
} | |
var incrementalSourceFile = sourceFile; | |
ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed); | |
incrementalSourceFile.hasBeenIncrementallyParsed = true; | |
var oldText = sourceFile.text; | |
var syntaxCursor = createSyntaxCursor(sourceFile); | |
var changeRange = extendToAffectedRange(sourceFile, textChangeRange); | |
checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks); | |
ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start); | |
ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span)); | |
ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange))); | |
var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; | |
updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks); | |
var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true, sourceFile.scriptKind); | |
return result; | |
} | |
IncrementalParser.updateSourceFile = updateSourceFile; | |
function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) { | |
if (isArray) { | |
visitArray(element); | |
} | |
else { | |
visitNode(element); | |
} | |
return; | |
function visitNode(node) { | |
var text = ""; | |
if (aggressiveChecks && shouldCheckNode(node)) { | |
text = oldText.substring(node.pos, node.end); | |
} | |
if (node._children) { | |
node._children = undefined; | |
} | |
if (node.jsDocComment) { | |
node.jsDocComment = undefined; | |
} | |
node.pos += delta; | |
node.end += delta; | |
if (aggressiveChecks && shouldCheckNode(node)) { | |
ts.Debug.assert(text === newText.substring(node.pos, node.end)); | |
} | |
forEachChild(node, visitNode, visitArray); | |
checkNodePositions(node, aggressiveChecks); | |
} | |
function visitArray(array) { | |
array._children = undefined; | |
array.pos += delta; | |
array.end += delta; | |
for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { | |
var node = array_7[_i]; | |
visitNode(node); | |
} | |
} | |
} | |
function shouldCheckNode(node) { | |
switch (node.kind) { | |
case 9: | |
case 8: | |
case 69: | |
return true; | |
} | |
return false; | |
} | |
function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { | |
ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); | |
ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); | |
ts.Debug.assert(element.pos <= element.end); | |
element.pos = Math.min(element.pos, changeRangeNewEnd); | |
if (element.end >= changeRangeOldEnd) { | |
element.end += delta; | |
} | |
else { | |
element.end = Math.min(element.end, changeRangeNewEnd); | |
} | |
ts.Debug.assert(element.pos <= element.end); | |
if (element.parent) { | |
ts.Debug.assert(element.pos >= element.parent.pos); | |
ts.Debug.assert(element.end <= element.parent.end); | |
} | |
} | |
function checkNodePositions(node, aggressiveChecks) { | |
if (aggressiveChecks) { | |
var pos_2 = node.pos; | |
forEachChild(node, function (child) { | |
ts.Debug.assert(child.pos >= pos_2); | |
pos_2 = child.end; | |
}); | |
ts.Debug.assert(pos_2 <= node.end); | |
} | |
} | |
function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) { | |
visitNode(sourceFile); | |
return; | |
function visitNode(child) { | |
ts.Debug.assert(child.pos <= child.end); | |
if (child.pos > changeRangeOldEnd) { | |
moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks); | |
return; | |
} | |
var fullEnd = child.end; | |
if (fullEnd >= changeStart) { | |
child.intersectsChange = true; | |
child._children = undefined; | |
adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); | |
forEachChild(child, visitNode, visitArray); | |
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_8 = array; _i < array_8.length; _i++) { | |
var node = array_8[_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 = getLastChild(lastNodeEntirelyBeforePosition); | |
if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { | |
bestResult = lastChildOfLastEntireNodeBeforePosition; | |
} | |
} | |
return bestResult; | |
function getLastChild(node) { | |
while (true) { | |
var lastChild = getLastChildWorker(node); | |
if (lastChild) { | |
node = lastChild; | |
} | |
else { | |
return node; | |
} | |
} | |
} | |
function getLastChildWorker(node) { | |
var last = undefined; | |
forEachChild(node, function (child) { | |
if (ts.nodeIsPresent(child)) { | |
last = child; | |
} | |
}); | |
return last; | |
} | |
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, n = array.length; i < n; 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 || (IncrementalParser = {})); | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
ts.bindTime = 0; | |
function getModuleInstanceState(node) { | |
if (node.kind === 221 || node.kind === 222) { | |
return 0; | |
} | |
else if (ts.isConstEnumDeclaration(node)) { | |
return 2; | |
} | |
else if ((node.kind === 229 || node.kind === 228) && !(node.flags & 1)) { | |
return 0; | |
} | |
else if (node.kind === 225) { | |
var state_1 = 0; | |
ts.forEachChild(node, function (n) { | |
switch (getModuleInstanceState(n)) { | |
case 0: | |
return false; | |
case 2: | |
state_1 = 2; | |
return false; | |
case 1: | |
state_1 = 1; | |
return true; | |
} | |
}); | |
return state_1; | |
} | |
else if (node.kind === 224) { | |
return getModuleInstanceState(node.body); | |
} | |
else { | |
return 1; | |
} | |
} | |
ts.getModuleInstanceState = getModuleInstanceState; | |
var binder = createBinder(); | |
function bindSourceFile(file, options) { | |
var start = new Date().getTime(); | |
binder(file, options); | |
ts.bindTime += new Date().getTime() - start; | |
} | |
ts.bindSourceFile = bindSourceFile; | |
function createBinder() { | |
var file; | |
var options; | |
var languageVersion; | |
var parent; | |
var container; | |
var blockScopeContainer; | |
var lastContainer; | |
var seenThisKeyword; | |
var hasExplicitReturn; | |
var currentFlow; | |
var currentBreakTarget; | |
var currentContinueTarget; | |
var currentTrueTarget; | |
var currentFalseTarget; | |
var preSwitchCaseFlow; | |
var activeLabels; | |
var hasClassExtends; | |
var hasAsyncFunctions; | |
var hasDecorators; | |
var hasParameterDecorators; | |
var hasJsxSpreadAttribute; | |
var inStrictMode; | |
var symbolCount = 0; | |
var Symbol; | |
var classifiableNames; | |
var unreachableFlow = { kind: 0 }; | |
var reportedUnreachableFlow = { kind: 0 }; | |
function bindSourceFile(f, opts) { | |
file = f; | |
options = opts; | |
languageVersion = ts.getEmitScriptTarget(options); | |
inStrictMode = !!file.externalModuleIndicator; | |
classifiableNames = {}; | |
Symbol = ts.objectAllocator.getSymbolConstructor(); | |
if (!file.locals) { | |
bind(file); | |
file.symbolCount = symbolCount; | |
file.classifiableNames = classifiableNames; | |
} | |
file = undefined; | |
options = undefined; | |
languageVersion = undefined; | |
parent = undefined; | |
container = undefined; | |
blockScopeContainer = undefined; | |
lastContainer = undefined; | |
seenThisKeyword = false; | |
hasExplicitReturn = false; | |
currentFlow = undefined; | |
currentBreakTarget = undefined; | |
currentContinueTarget = undefined; | |
currentTrueTarget = undefined; | |
currentFalseTarget = undefined; | |
activeLabels = undefined; | |
hasClassExtends = false; | |
hasAsyncFunctions = false; | |
hasDecorators = false; | |
hasParameterDecorators = false; | |
hasJsxSpreadAttribute = false; | |
} | |
return bindSourceFile; | |
function createSymbol(flags, name) { | |
symbolCount++; | |
return new Symbol(flags, name); | |
} | |
function addDeclarationToSymbol(symbol, node, symbolFlags) { | |
symbol.flags |= symbolFlags; | |
node.symbol = symbol; | |
if (!symbol.declarations) { | |
symbol.declarations = []; | |
} | |
symbol.declarations.push(node); | |
if (symbolFlags & 1952 && !symbol.exports) { | |
symbol.exports = {}; | |
} | |
if (symbolFlags & 6240 && !symbol.members) { | |
symbol.members = {}; | |
} | |
if (symbolFlags & 107455) { | |
var valueDeclaration = symbol.valueDeclaration; | |
if (!valueDeclaration || | |
(valueDeclaration.kind !== node.kind && valueDeclaration.kind === 224)) { | |
symbol.valueDeclaration = node; | |
} | |
} | |
} | |
function getDeclarationName(node) { | |
if (node.name) { | |
if (ts.isAmbientModule(node)) { | |
return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; | |
} | |
if (node.name.kind === 139) { | |
var nameExpression = node.name.expression; | |
if (ts.isStringOrNumericLiteral(nameExpression.kind)) { | |
return nameExpression.text; | |
} | |
ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression)); | |
return ts.getPropertyNameForKnownSymbolName(nameExpression.name.text); | |
} | |
return node.name.text; | |
} | |
switch (node.kind) { | |
case 147: | |
return "__constructor"; | |
case 155: | |
case 150: | |
return "__call"; | |
case 156: | |
case 151: | |
return "__new"; | |
case 152: | |
return "__index"; | |
case 235: | |
return "__export"; | |
case 234: | |
return node.isExportEquals ? "export=" : "default"; | |
case 186: | |
switch (ts.getSpecialPropertyAssignmentKind(node)) { | |
case 2: | |
return "export="; | |
case 1: | |
case 4: | |
return node.left.name.text; | |
case 3: | |
return node.left.expression.name.text; | |
} | |
ts.Debug.fail("Unknown binary declaration kind"); | |
break; | |
case 219: | |
case 220: | |
return node.flags & 512 ? "default" : undefined; | |
case 268: | |
return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; | |
case 141: | |
ts.Debug.assert(node.parent.kind === 268); | |
var functionType = node.parent; | |
var index = ts.indexOf(functionType.parameters, node); | |
return "p" + index; | |
} | |
} | |
function getDisplayName(node) { | |
return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node); | |
} | |
function declareSymbol(symbolTable, parent, node, includes, excludes) { | |
ts.Debug.assert(!ts.hasDynamicName(node)); | |
var isDefaultExport = node.flags & 512; | |
var name = isDefaultExport && parent ? "default" : getDeclarationName(node); | |
var symbol; | |
if (name !== undefined) { | |
symbol = ts.hasProperty(symbolTable, name) | |
? symbolTable[name] | |
: (symbolTable[name] = createSymbol(0, name)); | |
if (name && (includes & 788448)) { | |
classifiableNames[name] = name; | |
} | |
if (symbol.flags & excludes) { | |
if (node.name) { | |
node.name.parent = node; | |
} | |
var message_1 = symbol.flags & 2 | |
? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 | |
: ts.Diagnostics.Duplicate_identifier_0; | |
ts.forEach(symbol.declarations, function (declaration) { | |
if (declaration.flags & 512) { | |
message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; | |
} | |
}); | |
ts.forEach(symbol.declarations, function (declaration) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name || declaration, message_1, getDisplayName(declaration))); | |
}); | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name || node, message_1, getDisplayName(node))); | |
symbol = createSymbol(0, name); | |
} | |
} | |
else { | |
symbol = createSymbol(0, "__missing"); | |
} | |
addDeclarationToSymbol(symbol, node, includes); | |
symbol.parent = parent; | |
return symbol; | |
} | |
function declareModuleMember(node, symbolFlags, symbolExcludes) { | |
var hasExportModifier = ts.getCombinedNodeFlags(node) & 1; | |
if (symbolFlags & 8388608) { | |
if (node.kind === 237 || (node.kind === 228 && hasExportModifier)) { | |
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); | |
} | |
else { | |
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); | |
} | |
} | |
else { | |
if (!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 8192)) { | |
var exportKind = (symbolFlags & 107455 ? 1048576 : 0) | | |
(symbolFlags & 793056 ? 2097152 : 0) | | |
(symbolFlags & 1536 ? 4194304 : 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 bindChildren(node) { | |
var saveParent = parent; | |
var saveContainer = container; | |
var savedBlockScopeContainer = blockScopeContainer; | |
parent = node; | |
var containerFlags = getContainerFlags(node); | |
if (containerFlags & 1) { | |
container = blockScopeContainer = node; | |
if (containerFlags & 4) { | |
container.locals = {}; | |
} | |
addToContainerChain(container); | |
} | |
else if (containerFlags & 2) { | |
blockScopeContainer = node; | |
blockScopeContainer.locals = undefined; | |
} | |
var savedHasExplicitReturn; | |
var savedCurrentFlow; | |
var savedBreakTarget; | |
var savedContinueTarget; | |
var savedActiveLabels; | |
var kind = node.kind; | |
var flags = node.flags; | |
flags &= ~98304; | |
flags &= ~3932160; | |
if (kind === 221) { | |
seenThisKeyword = false; | |
} | |
var saveState = kind === 255 || kind === 225 || ts.isFunctionLikeKind(kind); | |
if (saveState) { | |
savedHasExplicitReturn = hasExplicitReturn; | |
savedCurrentFlow = currentFlow; | |
savedBreakTarget = currentBreakTarget; | |
savedContinueTarget = currentContinueTarget; | |
savedActiveLabels = activeLabels; | |
hasExplicitReturn = false; | |
currentFlow = { kind: 1 }; | |
currentBreakTarget = undefined; | |
currentContinueTarget = undefined; | |
activeLabels = undefined; | |
} | |
if (ts.isInJavaScriptFile(node) && node.jsDocComment) { | |
bind(node.jsDocComment); | |
} | |
bindReachableStatement(node); | |
if (currentFlow.kind !== 0 && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { | |
flags |= 32768; | |
if (hasExplicitReturn) { | |
flags |= 65536; | |
} | |
} | |
if (kind === 221) { | |
flags = seenThisKeyword ? flags | 16384 : flags & ~16384; | |
} | |
if (kind === 255) { | |
if (hasClassExtends) { | |
flags |= 262144; | |
} | |
if (hasDecorators) { | |
flags |= 524288; | |
} | |
if (hasParameterDecorators) { | |
flags |= 1048576; | |
} | |
if (hasAsyncFunctions) { | |
flags |= 2097152; | |
} | |
if (hasJsxSpreadAttribute) { | |
flags |= 1073741824; | |
} | |
} | |
node.flags = flags; | |
if (saveState) { | |
hasExplicitReturn = savedHasExplicitReturn; | |
currentFlow = savedCurrentFlow; | |
currentBreakTarget = savedBreakTarget; | |
currentContinueTarget = savedContinueTarget; | |
activeLabels = savedActiveLabels; | |
} | |
container = saveContainer; | |
parent = saveParent; | |
blockScopeContainer = savedBlockScopeContainer; | |
} | |
function bindReachableStatement(node) { | |
if (checkUnreachable(node)) { | |
ts.forEachChild(node, bind); | |
return; | |
} | |
switch (node.kind) { | |
case 204: | |
bindWhileStatement(node); | |
break; | |
case 203: | |
bindDoStatement(node); | |
break; | |
case 205: | |
bindForStatement(node); | |
break; | |
case 206: | |
case 207: | |
bindForInOrForOfStatement(node); | |
break; | |
case 202: | |
bindIfStatement(node); | |
break; | |
case 210: | |
case 214: | |
bindReturnOrThrow(node); | |
break; | |
case 209: | |
case 208: | |
bindBreakOrContinueStatement(node); | |
break; | |
case 215: | |
bindTryStatement(node); | |
break; | |
case 212: | |
bindSwitchStatement(node); | |
break; | |
case 226: | |
bindCaseBlock(node); | |
break; | |
case 213: | |
bindLabeledStatement(node); | |
break; | |
case 184: | |
bindPrefixUnaryExpressionFlow(node); | |
break; | |
case 186: | |
bindBinaryExpressionFlow(node); | |
break; | |
case 187: | |
bindConditionalExpressionFlow(node); | |
break; | |
case 217: | |
bindVariableDeclarationFlow(node); | |
break; | |
default: | |
ts.forEachChild(node, bind); | |
break; | |
} | |
} | |
function isNarrowableReference(expr) { | |
return expr.kind === 69 || | |
expr.kind === 97 || | |
expr.kind === 171 && isNarrowableReference(expr.expression); | |
} | |
function isNarrowingExpression(expr) { | |
switch (expr.kind) { | |
case 69: | |
case 97: | |
case 171: | |
return isNarrowableReference(expr); | |
case 173: | |
return true; | |
case 177: | |
return isNarrowingExpression(expr.expression); | |
case 186: | |
return isNarrowingBinaryExpression(expr); | |
case 184: | |
return expr.operator === 49 && isNarrowingExpression(expr.operand); | |
} | |
return false; | |
} | |
function isNarrowingBinaryExpression(expr) { | |
switch (expr.operatorToken.kind) { | |
case 56: | |
return isNarrowableReference(expr.left); | |
case 30: | |
case 31: | |
case 32: | |
case 33: | |
if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 || expr.right.kind === 69)) { | |
return true; | |
} | |
if (expr.left.kind === 181 && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9) { | |
return true; | |
} | |
return false; | |
case 91: | |
return isNarrowingExpression(expr.left); | |
case 24: | |
return isNarrowingExpression(expr.right); | |
} | |
return false; | |
} | |
function createFlowLabel() { | |
return { | |
kind: 2, | |
antecedents: undefined | |
}; | |
} | |
function createFlowLoopLabel() { | |
return { | |
kind: 3, | |
antecedents: undefined | |
}; | |
} | |
function addAntecedent(label, antecedent) { | |
if (antecedent.kind !== 0 && !ts.contains(label.antecedents, antecedent)) { | |
(label.antecedents || (label.antecedents = [])).push(antecedent); | |
} | |
} | |
function createFlowCondition(antecedent, expression, assumeTrue) { | |
if (antecedent.kind === 0) { | |
return antecedent; | |
} | |
if (!expression) { | |
return assumeTrue ? antecedent : unreachableFlow; | |
} | |
if (expression.kind === 99 && !assumeTrue || expression.kind === 84 && assumeTrue) { | |
return unreachableFlow; | |
} | |
if (!isNarrowingExpression(expression)) { | |
return antecedent; | |
} | |
return { | |
kind: 5, | |
antecedent: antecedent, | |
expression: expression, | |
assumeTrue: assumeTrue | |
}; | |
} | |
function createFlowAssignment(antecedent, node) { | |
return { | |
kind: 4, | |
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 202: | |
case 204: | |
case 203: | |
return parent.expression === node; | |
case 205: | |
case 187: | |
return parent.condition === node; | |
} | |
return false; | |
} | |
function isLogicalExpression(node) { | |
while (true) { | |
if (node.kind === 177) { | |
node = node.expression; | |
} | |
else if (node.kind === 184 && node.operator === 49) { | |
node = node.operand; | |
} | |
else { | |
return node.kind === 186 && (node.operatorToken.kind === 51 || | |
node.operatorToken.kind === 52); | |
} | |
} | |
} | |
function isTopLevelLogicalExpression(node) { | |
while (node.parent.kind === 177 || | |
node.parent.kind === 184 && | |
node.parent.operator === 49) { | |
node = node.parent; | |
} | |
return !isStatementCondition(node) && !isLogicalExpression(node.parent); | |
} | |
function bindCondition(node, trueTarget, falseTarget) { | |
var saveTrueTarget = currentTrueTarget; | |
var saveFalseTarget = currentFalseTarget; | |
currentTrueTarget = trueTarget; | |
currentFalseTarget = falseTarget; | |
bind(node); | |
currentTrueTarget = saveTrueTarget; | |
currentFalseTarget = saveFalseTarget; | |
if (!node || !isLogicalExpression(node)) { | |
addAntecedent(trueTarget, createFlowCondition(currentFlow, node, true)); | |
addAntecedent(falseTarget, createFlowCondition(currentFlow, node, false)); | |
} | |
} | |
function bindIterativeStatement(node, breakTarget, continueTarget) { | |
var saveBreakTarget = currentBreakTarget; | |
var saveContinueTarget = currentContinueTarget; | |
currentBreakTarget = breakTarget; | |
currentContinueTarget = continueTarget; | |
bind(node); | |
currentBreakTarget = saveBreakTarget; | |
currentContinueTarget = saveContinueTarget; | |
} | |
function bindWhileStatement(node) { | |
var preWhileLabel = createFlowLoopLabel(); | |
var preBodyLabel = createFlowLabel(); | |
var postWhileLabel = createFlowLabel(); | |
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 = createFlowLoopLabel(); | |
var preConditionLabel = createFlowLabel(); | |
var postDoLabel = createFlowLabel(); | |
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 = createFlowLoopLabel(); | |
var preBodyLabel = createFlowLabel(); | |
var postLoopLabel = createFlowLabel(); | |
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 = createFlowLoopLabel(); | |
var postLoopLabel = createFlowLabel(); | |
addAntecedent(preLoopLabel, currentFlow); | |
currentFlow = preLoopLabel; | |
bind(node.expression); | |
addAntecedent(postLoopLabel, currentFlow); | |
bind(node.initializer); | |
if (node.initializer.kind !== 218) { | |
bindAssignmentTargetFlow(node.initializer); | |
} | |
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); | |
addAntecedent(preLoopLabel, currentFlow); | |
currentFlow = finishFlowLabel(postLoopLabel); | |
} | |
function bindIfStatement(node) { | |
var thenLabel = createFlowLabel(); | |
var elseLabel = createFlowLabel(); | |
var postIfLabel = createFlowLabel(); | |
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 === 210) { | |
hasExplicitReturn = true; | |
} | |
currentFlow = unreachableFlow; | |
} | |
function findActiveLabel(name) { | |
if (activeLabels) { | |
for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { | |
var label = activeLabels_1[_i]; | |
if (label.name === name) { | |
return label; | |
} | |
} | |
} | |
return undefined; | |
} | |
function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { | |
var flowLabel = node.kind === 209 ? breakTarget : continueTarget; | |
if (flowLabel) { | |
addAntecedent(flowLabel, currentFlow); | |
currentFlow = unreachableFlow; | |
} | |
} | |
function bindBreakOrContinueStatement(node) { | |
bind(node.label); | |
if (node.label) { | |
var activeLabel = findActiveLabel(node.label.text); | |
if (activeLabel) { | |
activeLabel.referenced = true; | |
bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); | |
} | |
} | |
else { | |
bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); | |
} | |
} | |
function bindTryStatement(node) { | |
var postFinallyLabel = createFlowLabel(); | |
var preTryFlow = currentFlow; | |
bind(node.tryBlock); | |
addAntecedent(postFinallyLabel, currentFlow); | |
if (node.catchClause) { | |
currentFlow = preTryFlow; | |
bind(node.catchClause); | |
addAntecedent(postFinallyLabel, currentFlow); | |
} | |
if (node.finallyBlock) { | |
currentFlow = preTryFlow; | |
bind(node.finallyBlock); | |
} | |
currentFlow = finishFlowLabel(postFinallyLabel); | |
} | |
function bindSwitchStatement(node) { | |
var postSwitchLabel = createFlowLabel(); | |
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 === 249; }); | |
if (!hasDefault) { | |
addAntecedent(postSwitchLabel, preSwitchCaseFlow); | |
} | |
currentBreakTarget = saveBreakTarget; | |
preSwitchCaseFlow = savePreSwitchCaseFlow; | |
currentFlow = finishFlowLabel(postSwitchLabel); | |
} | |
function bindCaseBlock(node) { | |
var clauses = node.clauses; | |
for (var i = 0; i < clauses.length; i++) { | |
var clause = clauses[i]; | |
if (clause.statements.length) { | |
if (currentFlow.kind === 0) { | |
currentFlow = preSwitchCaseFlow; | |
} | |
else { | |
var preCaseLabel = createFlowLabel(); | |
addAntecedent(preCaseLabel, preSwitchCaseFlow); | |
addAntecedent(preCaseLabel, currentFlow); | |
currentFlow = finishFlowLabel(preCaseLabel); | |
} | |
bind(clause); | |
if (currentFlow.kind !== 0 && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { | |
errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); | |
} | |
} | |
else { | |
bind(clause); | |
} | |
} | |
} | |
function pushActiveLabel(name, breakTarget, continueTarget) { | |
var activeLabel = { | |
name: name, | |
breakTarget: breakTarget, | |
continueTarget: continueTarget, | |
referenced: false | |
}; | |
(activeLabels || (activeLabels = [])).push(activeLabel); | |
return activeLabel; | |
} | |
function popActiveLabel() { | |
activeLabels.pop(); | |
} | |
function bindLabeledStatement(node) { | |
var preStatementLabel = createFlowLoopLabel(); | |
var postStatementLabel = createFlowLabel(); | |
bind(node.label); | |
addAntecedent(preStatementLabel, currentFlow); | |
var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); | |
bind(node.statement); | |
popActiveLabel(); | |
if (!activeLabel.referenced && !options.allowUnusedLabels) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); | |
} | |
addAntecedent(postStatementLabel, currentFlow); | |
currentFlow = finishFlowLabel(postStatementLabel); | |
} | |
function bindDestructuringTargetFlow(node) { | |
if (node.kind === 186 && node.operatorToken.kind === 56) { | |
bindAssignmentTargetFlow(node.left); | |
} | |
else { | |
bindAssignmentTargetFlow(node); | |
} | |
} | |
function bindAssignmentTargetFlow(node) { | |
if (isNarrowableReference(node)) { | |
currentFlow = createFlowAssignment(currentFlow, node); | |
} | |
else if (node.kind === 169) { | |
for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { | |
var e = _a[_i]; | |
if (e.kind === 190) { | |
bindAssignmentTargetFlow(e.expression); | |
} | |
else { | |
bindDestructuringTargetFlow(e); | |
} | |
} | |
} | |
else if (node.kind === 170) { | |
for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { | |
var p = _c[_b]; | |
if (p.kind === 252) { | |
bindDestructuringTargetFlow(p.initializer); | |
} | |
else if (p.kind === 253) { | |
bindAssignmentTargetFlow(p.name); | |
} | |
} | |
} | |
} | |
function bindLogicalExpression(node, trueTarget, falseTarget) { | |
var preRightLabel = createFlowLabel(); | |
if (node.operatorToken.kind === 51) { | |
bindCondition(node.left, preRightLabel, falseTarget); | |
} | |
else { | |
bindCondition(node.left, trueTarget, preRightLabel); | |
} | |
currentFlow = finishFlowLabel(preRightLabel); | |
bind(node.operatorToken); | |
bindCondition(node.right, trueTarget, falseTarget); | |
} | |
function bindPrefixUnaryExpressionFlow(node) { | |
if (node.operator === 49) { | |
var saveTrueTarget = currentTrueTarget; | |
currentTrueTarget = currentFalseTarget; | |
currentFalseTarget = saveTrueTarget; | |
ts.forEachChild(node, bind); | |
currentFalseTarget = currentTrueTarget; | |
currentTrueTarget = saveTrueTarget; | |
} | |
else { | |
ts.forEachChild(node, bind); | |
} | |
} | |
function bindBinaryExpressionFlow(node) { | |
var operator = node.operatorToken.kind; | |
if (operator === 51 || operator === 52) { | |
if (isTopLevelLogicalExpression(node)) { | |
var postExpressionLabel = createFlowLabel(); | |
bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); | |
currentFlow = finishFlowLabel(postExpressionLabel); | |
} | |
else { | |
bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); | |
} | |
} | |
else { | |
ts.forEachChild(node, bind); | |
if (operator === 56 && !ts.isAssignmentTarget(node)) { | |
bindAssignmentTargetFlow(node.left); | |
} | |
} | |
} | |
function bindConditionalExpressionFlow(node) { | |
var trueLabel = createFlowLabel(); | |
var falseLabel = createFlowLabel(); | |
var postExpressionLabel = createFlowLabel(); | |
bindCondition(node.condition, trueLabel, falseLabel); | |
currentFlow = finishFlowLabel(trueLabel); | |
bind(node.whenTrue); | |
addAntecedent(postExpressionLabel, currentFlow); | |
currentFlow = finishFlowLabel(falseLabel); | |
bind(node.whenFalse); | |
addAntecedent(postExpressionLabel, currentFlow); | |
currentFlow = finishFlowLabel(postExpressionLabel); | |
} | |
function bindInitializedVariableFlow(node) { | |
var name = node.name; | |
if (ts.isBindingPattern(name)) { | |
for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { | |
var child = _a[_i]; | |
bindInitializedVariableFlow(child); | |
} | |
} | |
else { | |
currentFlow = createFlowAssignment(currentFlow, node); | |
} | |
} | |
function bindVariableDeclarationFlow(node) { | |
ts.forEachChild(node, bind); | |
if (node.initializer || node.parent.parent.kind === 206 || node.parent.parent.kind === 207) { | |
bindInitializedVariableFlow(node); | |
} | |
} | |
function getContainerFlags(node) { | |
switch (node.kind) { | |
case 191: | |
case 220: | |
case 221: | |
case 223: | |
case 170: | |
case 158: | |
case 264: | |
return 1; | |
case 150: | |
case 151: | |
case 152: | |
case 146: | |
case 145: | |
case 219: | |
case 147: | |
case 148: | |
case 149: | |
case 155: | |
case 268: | |
case 156: | |
case 178: | |
case 179: | |
case 224: | |
case 255: | |
case 222: | |
return 5; | |
case 251: | |
case 205: | |
case 206: | |
case 207: | |
case 226: | |
return 2; | |
case 198: | |
return ts.isFunctionLike(node.parent) ? 0 : 2; | |
} | |
return 0; | |
} | |
function addToContainerChain(next) { | |
if (lastContainer) { | |
lastContainer.nextContainer = next; | |
} | |
lastContainer = next; | |
} | |
function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) { | |
declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes); | |
} | |
function declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes) { | |
switch (container.kind) { | |
case 224: | |
return declareModuleMember(node, symbolFlags, symbolExcludes); | |
case 255: | |
return declareSourceFileMember(node, symbolFlags, symbolExcludes); | |
case 191: | |
case 220: | |
return declareClassMember(node, symbolFlags, symbolExcludes); | |
case 223: | |
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); | |
case 158: | |
case 170: | |
case 221: | |
case 264: | |
return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); | |
case 155: | |
case 156: | |
case 150: | |
case 151: | |
case 152: | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
case 219: | |
case 178: | |
case 179: | |
case 268: | |
case 222: | |
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); | |
} | |
} | |
function declareClassMember(node, symbolFlags, symbolExcludes) { | |
return node.flags & 32 | |
? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) | |
: declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); | |
} | |
function declareSourceFileMember(node, symbolFlags, symbolExcludes) { | |
return ts.isExternalModule(file) | |
? declareModuleMember(node, symbolFlags, symbolExcludes) | |
: declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); | |
} | |
function hasExportDeclarations(node) { | |
var body = node.kind === 255 ? node : node.body; | |
if (body.kind === 255 || body.kind === 225) { | |
for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { | |
var stat = _a[_i]; | |
if (stat.kind === 235 || stat.kind === 234) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
function setExportContextFlag(node) { | |
if (ts.isInAmbientContext(node) && !hasExportDeclarations(node)) { | |
node.flags |= 8192; | |
} | |
else { | |
node.flags &= ~8192; | |
} | |
} | |
function bindModuleDeclaration(node) { | |
setExportContextFlag(node); | |
if (ts.isAmbientModule(node)) { | |
if (node.flags & 1) { | |
errorOnFirstToken(node, ts.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible); | |
} | |
if (ts.isExternalModuleAugmentation(node)) { | |
declareSymbolAndAddToSymbolTable(node, 1024, 0); | |
} | |
else { | |
declareSymbolAndAddToSymbolTable(node, 512, 106639); | |
} | |
} | |
else { | |
var state = getModuleInstanceState(node); | |
if (state === 0) { | |
declareSymbolAndAddToSymbolTable(node, 1024, 0); | |
} | |
else { | |
declareSymbolAndAddToSymbolTable(node, 512, 106639); | |
if (node.symbol.flags & (16 | 32 | 256)) { | |
node.symbol.constEnumOnlyModule = false; | |
} | |
else { | |
var currentModuleIsConstEnumOnly = state === 2; | |
if (node.symbol.constEnumOnlyModule === undefined) { | |
node.symbol.constEnumOnlyModule = currentModuleIsConstEnumOnly; | |
} | |
else { | |
node.symbol.constEnumOnlyModule = node.symbol.constEnumOnlyModule && currentModuleIsConstEnumOnly; | |
} | |
} | |
} | |
} | |
} | |
function bindFunctionOrConstructorType(node) { | |
var symbol = createSymbol(131072, getDeclarationName(node)); | |
addDeclarationToSymbol(symbol, node, 131072); | |
var typeLiteralSymbol = createSymbol(2048, "__type"); | |
addDeclarationToSymbol(typeLiteralSymbol, node, 2048); | |
typeLiteralSymbol.members = (_a = {}, _a[symbol.name] = symbol, _a); | |
var _a; | |
} | |
function bindObjectLiteralExpression(node) { | |
if (inStrictMode) { | |
var seen = {}; | |
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { | |
var prop = _a[_i]; | |
if (prop.name.kind !== 69) { | |
continue; | |
} | |
var identifier = prop.name; | |
var currentKind = prop.kind === 252 || prop.kind === 253 || prop.kind === 146 | |
? 1 | |
: 2; | |
var existingKind = seen[identifier.text]; | |
if (!existingKind) { | |
seen[identifier.text] = currentKind; | |
continue; | |
} | |
if (currentKind === 1 && existingKind === 1) { | |
var span = ts.getErrorSpanForNode(file, identifier); | |
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode)); | |
} | |
} | |
} | |
return bindAnonymousDeclaration(node, 4096, "__object"); | |
} | |
function bindAnonymousDeclaration(node, symbolFlags, name) { | |
var symbol = createSymbol(symbolFlags, name); | |
addDeclarationToSymbol(symbol, node, symbolFlags); | |
} | |
function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { | |
switch (blockScopeContainer.kind) { | |
case 224: | |
declareModuleMember(node, symbolFlags, symbolExcludes); | |
break; | |
case 255: | |
if (ts.isExternalModule(container)) { | |
declareModuleMember(node, symbolFlags, symbolExcludes); | |
break; | |
} | |
default: | |
if (!blockScopeContainer.locals) { | |
blockScopeContainer.locals = {}; | |
addToContainerChain(blockScopeContainer); | |
} | |
declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes); | |
} | |
} | |
function bindBlockScopedVariableDeclaration(node) { | |
bindBlockScopedDeclaration(node, 2, 107455); | |
} | |
function checkStrictModeIdentifier(node) { | |
if (inStrictMode && | |
node.originalKeywordKind >= 106 && | |
node.originalKeywordKind <= 114 && | |
!ts.isIdentifierName(node) && | |
!ts.isInAmbientContext(node)) { | |
if (!file.parseDiagnostics.length) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); | |
} | |
} | |
} | |
function getStrictModeIdentifierMessage(node) { | |
if (ts.getContainingClass(node)) { | |
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; | |
} | |
if (file.externalModuleIndicator) { | |
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode; | |
} | |
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; | |
} | |
function checkStrictModeBinaryExpression(node) { | |
if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) { | |
checkStrictModeEvalOrArguments(node, node.left); | |
} | |
} | |
function checkStrictModeCatchClause(node) { | |
if (inStrictMode && node.variableDeclaration) { | |
checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); | |
} | |
} | |
function checkStrictModeDeleteExpression(node) { | |
if (inStrictMode && node.expression.kind === 69) { | |
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 node.kind === 69 && | |
(node.text === "eval" || node.text === "arguments"); | |
} | |
function checkStrictModeEvalOrArguments(contextNode, name) { | |
if (name && name.kind === 69) { | |
var identifier = name; | |
if (isEvalOrArgumentsIdentifier(identifier)) { | |
var span = ts.getErrorSpanForNode(file, name); | |
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), identifier.text)); | |
} | |
} | |
} | |
function getStrictModeEvalOrArgumentsMessage(node) { | |
if (ts.getContainingClass(node)) { | |
return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode; | |
} | |
if (file.externalModuleIndicator) { | |
return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode; | |
} | |
return ts.Diagnostics.Invalid_use_of_0_in_strict_mode; | |
} | |
function checkStrictModeFunctionName(node) { | |
if (inStrictMode) { | |
checkStrictModeEvalOrArguments(node, node.name); | |
} | |
} | |
function getStrictModeBlockScopeFunctionDeclarationMessage(node) { | |
if (ts.getContainingClass(node)) { | |
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode; | |
} | |
if (file.externalModuleIndicator) { | |
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode; | |
} | |
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5; | |
} | |
function checkStrictModeFunctionDeclaration(node) { | |
if (languageVersion < 2) { | |
if (blockScopeContainer.kind !== 255 && | |
blockScopeContainer.kind !== 224 && | |
!ts.isFunctionLike(blockScopeContainer)) { | |
var errorSpan = ts.getErrorSpanForNode(file, node); | |
file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); | |
} | |
} | |
} | |
function checkStrictModeNumericLiteral(node) { | |
if (inStrictMode && node.isOctalLiteral) { | |
file.bindDiagnostics.push(ts.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 === 41 || node.operator === 42) { | |
checkStrictModeEvalOrArguments(node, node.operand); | |
} | |
} | |
} | |
function checkStrictModeWithStatement(node) { | |
if (inStrictMode) { | |
errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); | |
} | |
} | |
function errorOnFirstToken(node, message, arg0, arg1, arg2) { | |
var span = ts.getSpanOfTokenAtPosition(file, node.pos); | |
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2)); | |
} | |
function getDestructuringParameterName(node) { | |
return "__" + ts.indexOf(node.parent.parameters, node); | |
} | |
function bind(node) { | |
if (!node) { | |
return; | |
} | |
node.parent = parent; | |
var savedInStrictMode = inStrictMode; | |
if (!savedInStrictMode) { | |
updateStrictMode(node); | |
} | |
bindWorker(node); | |
bindChildren(node); | |
inStrictMode = savedInStrictMode; | |
} | |
function updateStrictMode(node) { | |
switch (node.kind) { | |
case 255: | |
case 225: | |
updateStrictModeStatementList(node.statements); | |
return; | |
case 198: | |
if (ts.isFunctionLike(node.parent)) { | |
updateStrictModeStatementList(node.statements); | |
} | |
return; | |
case 220: | |
case 191: | |
inStrictMode = true; | |
return; | |
} | |
} | |
function updateStrictModeStatementList(statements) { | |
for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) { | |
var statement = statements_1[_i]; | |
if (!ts.isPrologueDirective(statement)) { | |
return; | |
} | |
if (isUseStrictPrologueDirective(statement)) { | |
inStrictMode = true; | |
return; | |
} | |
} | |
} | |
function isUseStrictPrologueDirective(node) { | |
var nodeText = ts.getTextOfNodeFromSourceText(file.text, node.expression); | |
return nodeText === '"use strict"' || nodeText === "'use strict'"; | |
} | |
function bindWorker(node) { | |
switch (node.kind) { | |
case 69: | |
case 97: | |
if (currentFlow && (ts.isExpression(node) || parent.kind === 253)) { | |
node.flowNode = currentFlow; | |
} | |
return checkStrictModeIdentifier(node); | |
case 171: | |
if (currentFlow && isNarrowableReference(node)) { | |
node.flowNode = currentFlow; | |
} | |
break; | |
case 186: | |
if (ts.isInJavaScriptFile(node)) { | |
var specialKind = ts.getSpecialPropertyAssignmentKind(node); | |
switch (specialKind) { | |
case 1: | |
bindExportsPropertyAssignment(node); | |
break; | |
case 2: | |
bindModuleExportsAssignment(node); | |
break; | |
case 3: | |
bindPrototypePropertyAssignment(node); | |
break; | |
case 4: | |
bindThisPropertyAssignment(node); | |
break; | |
case 0: | |
break; | |
default: | |
ts.Debug.fail("Unknown special property assignment kind"); | |
} | |
} | |
return checkStrictModeBinaryExpression(node); | |
case 251: | |
return checkStrictModeCatchClause(node); | |
case 180: | |
return checkStrictModeDeleteExpression(node); | |
case 8: | |
return checkStrictModeNumericLiteral(node); | |
case 185: | |
return checkStrictModePostfixUnaryExpression(node); | |
case 184: | |
return checkStrictModePrefixUnaryExpression(node); | |
case 211: | |
return checkStrictModeWithStatement(node); | |
case 164: | |
seenThisKeyword = true; | |
return; | |
case 153: | |
return checkTypePredicate(node); | |
case 140: | |
return declareSymbolAndAddToSymbolTable(node, 262144, 530912); | |
case 141: | |
return bindParameter(node); | |
case 217: | |
case 168: | |
return bindVariableDeclarationOrBindingElement(node); | |
case 144: | |
case 143: | |
case 265: | |
return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455); | |
case 252: | |
case 253: | |
return bindPropertyOrMethodOrAccessor(node, 4, 107455); | |
case 254: | |
return bindPropertyOrMethodOrAccessor(node, 8, 107455); | |
case 246: | |
hasJsxSpreadAttribute = true; | |
return; | |
case 150: | |
case 151: | |
case 152: | |
return declareSymbolAndAddToSymbolTable(node, 131072, 0); | |
case 146: | |
case 145: | |
return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); | |
case 219: | |
return bindFunctionDeclaration(node); | |
case 147: | |
return declareSymbolAndAddToSymbolTable(node, 16384, 0); | |
case 148: | |
return bindPropertyOrMethodOrAccessor(node, 32768, 41919); | |
case 149: | |
return bindPropertyOrMethodOrAccessor(node, 65536, 74687); | |
case 155: | |
case 156: | |
case 268: | |
return bindFunctionOrConstructorType(node); | |
case 158: | |
case 264: | |
return bindAnonymousDeclaration(node, 2048, "__type"); | |
case 170: | |
return bindObjectLiteralExpression(node); | |
case 178: | |
case 179: | |
return bindFunctionExpression(node); | |
case 173: | |
if (ts.isInJavaScriptFile(node)) { | |
bindCallExpression(node); | |
} | |
break; | |
case 191: | |
case 220: | |
return bindClassLikeDeclaration(node); | |
case 221: | |
return bindBlockScopedDeclaration(node, 64, 792960); | |
case 222: | |
return bindBlockScopedDeclaration(node, 524288, 793056); | |
case 223: | |
return bindEnumDeclaration(node); | |
case 224: | |
return bindModuleDeclaration(node); | |
case 228: | |
case 231: | |
case 233: | |
case 237: | |
return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); | |
case 227: | |
return bindGlobalModuleExportDeclaration(node); | |
case 230: | |
return bindImportClause(node); | |
case 235: | |
return bindExportDeclaration(node); | |
case 234: | |
return bindExportAssignment(node); | |
case 255: | |
return bindSourceFileIfExternalModule(); | |
} | |
} | |
function checkTypePredicate(node) { | |
var parameterName = node.parameterName, type = node.type; | |
if (parameterName && parameterName.kind === 69) { | |
checkStrictModeIdentifier(parameterName); | |
} | |
if (parameterName && parameterName.kind === 164) { | |
seenThisKeyword = true; | |
} | |
bind(type); | |
} | |
function bindSourceFileIfExternalModule() { | |
setExportContextFlag(file); | |
if (ts.isExternalModule(file)) { | |
bindSourceFileAsExternalModule(); | |
} | |
} | |
function bindSourceFileAsExternalModule() { | |
bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); | |
} | |
function bindExportAssignment(node) { | |
var boundExpression = node.kind === 234 ? node.expression : node.right; | |
if (!container.symbol || !container.symbol.exports) { | |
bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); | |
} | |
else if (boundExpression.kind === 69 && node.kind === 234) { | |
declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608); | |
} | |
else { | |
declareSymbol(container.symbol.exports, container.symbol, node, 4, 107455 | 8388608); | |
} | |
} | |
function bindGlobalModuleExportDeclaration(node) { | |
if (node.modifiers && node.modifiers.length) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); | |
} | |
if (node.parent.kind !== 255) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); | |
return; | |
} | |
else { | |
var parent_5 = node.parent; | |
if (!ts.isExternalModule(parent_5)) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); | |
return; | |
} | |
if (!parent_5.isDeclarationFile) { | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); | |
return; | |
} | |
} | |
file.symbol.globalExports = file.symbol.globalExports || {}; | |
declareSymbol(file.symbol.globalExports, file.symbol, node, 8388608, 8388608); | |
} | |
function bindExportDeclaration(node) { | |
if (!container.symbol || !container.symbol.exports) { | |
bindAnonymousDeclaration(node, 1073741824, getDeclarationName(node)); | |
} | |
else if (!node.exportClause) { | |
declareSymbol(container.symbol.exports, container.symbol, node, 1073741824, 0); | |
} | |
} | |
function bindImportClause(node) { | |
if (node.name) { | |
declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); | |
} | |
} | |
function setCommonJsModuleIndicator(node) { | |
if (!file.commonJsModuleIndicator) { | |
file.commonJsModuleIndicator = node; | |
bindSourceFileAsExternalModule(); | |
} | |
} | |
function bindExportsPropertyAssignment(node) { | |
setCommonJsModuleIndicator(node); | |
declareSymbol(file.symbol.exports, file.symbol, node.left, 4 | 7340032, 0); | |
} | |
function bindModuleExportsAssignment(node) { | |
setCommonJsModuleIndicator(node); | |
declareSymbol(file.symbol.exports, file.symbol, node, 4 | 7340032 | 512, 0); | |
} | |
function bindThisPropertyAssignment(node) { | |
if (container.kind === 178 || container.kind === 219) { | |
container.symbol.members = container.symbol.members || {}; | |
declareSymbol(container.symbol.members, container.symbol, node, 4, 107455 & ~4); | |
} | |
} | |
function bindPrototypePropertyAssignment(node) { | |
var leftSideOfAssignment = node.left; | |
var classPrototype = leftSideOfAssignment.expression; | |
var constructorFunction = classPrototype.expression; | |
leftSideOfAssignment.parent = node; | |
constructorFunction.parent = classPrototype; | |
classPrototype.parent = leftSideOfAssignment; | |
var funcSymbol = container.locals[constructorFunction.text]; | |
if (!funcSymbol || !(funcSymbol.flags & 16)) { | |
return; | |
} | |
if (!funcSymbol.members) { | |
funcSymbol.members = {}; | |
} | |
declareSymbol(funcSymbol.members, funcSymbol, leftSideOfAssignment, 4, 107455); | |
} | |
function bindCallExpression(node) { | |
if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) { | |
setCommonJsModuleIndicator(node); | |
} | |
} | |
function bindClassLikeDeclaration(node) { | |
if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { | |
if (ts.getClassExtendsHeritageClauseElement(node) !== undefined) { | |
hasClassExtends = true; | |
} | |
if (ts.nodeIsDecorated(node)) { | |
hasDecorators = true; | |
} | |
} | |
if (node.kind === 220) { | |
bindBlockScopedDeclaration(node, 32, 899519); | |
} | |
else { | |
var bindingName = node.name ? node.name.text : "__class"; | |
bindAnonymousDeclaration(node, 32, bindingName); | |
if (node.name) { | |
classifiableNames[node.name.text] = node.name.text; | |
} | |
} | |
var symbol = node.symbol; | |
var prototypeSymbol = createSymbol(4 | 134217728, "prototype"); | |
if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { | |
if (node.name) { | |
node.name.parent = node; | |
} | |
file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); | |
} | |
symbol.exports[prototypeSymbol.name] = prototypeSymbol; | |
prototypeSymbol.parent = symbol; | |
} | |
function bindEnumDeclaration(node) { | |
return ts.isConst(node) | |
? bindBlockScopedDeclaration(node, 128, 899967) | |
: bindBlockScopedDeclaration(node, 256, 899327); | |
} | |
function bindVariableDeclarationOrBindingElement(node) { | |
if (inStrictMode) { | |
checkStrictModeEvalOrArguments(node, node.name); | |
} | |
if (!ts.isBindingPattern(node.name)) { | |
if (ts.isBlockOrCatchScoped(node)) { | |
bindBlockScopedVariableDeclaration(node); | |
} | |
else if (ts.isParameterDeclaration(node)) { | |
declareSymbolAndAddToSymbolTable(node, 1, 107455); | |
} | |
else { | |
declareSymbolAndAddToSymbolTable(node, 1, 107454); | |
} | |
} | |
} | |
function bindParameter(node) { | |
if (!ts.isDeclarationFile(file) && | |
!ts.isInAmbientContext(node) && | |
ts.nodeIsDecorated(node)) { | |
hasDecorators = true; | |
hasParameterDecorators = true; | |
} | |
if (inStrictMode) { | |
checkStrictModeEvalOrArguments(node, node.name); | |
} | |
if (ts.isBindingPattern(node.name)) { | |
bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node)); | |
} | |
else { | |
declareSymbolAndAddToSymbolTable(node, 1, 107455); | |
} | |
if (ts.isParameterPropertyDeclaration(node)) { | |
var classDeclaration = node.parent.parent; | |
declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455); | |
} | |
} | |
function bindFunctionDeclaration(node) { | |
if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { | |
if (ts.isAsyncFunctionLike(node)) { | |
hasAsyncFunctions = true; | |
} | |
} | |
checkStrictModeFunctionName(node); | |
if (inStrictMode) { | |
checkStrictModeFunctionDeclaration(node); | |
return bindBlockScopedDeclaration(node, 16, 106927); | |
} | |
else { | |
return declareSymbolAndAddToSymbolTable(node, 16, 106927); | |
} | |
} | |
function bindFunctionExpression(node) { | |
if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { | |
if (ts.isAsyncFunctionLike(node)) { | |
hasAsyncFunctions = true; | |
} | |
} | |
checkStrictModeFunctionName(node); | |
var bindingName = node.name ? node.name.text : "__function"; | |
return bindAnonymousDeclaration(node, 16, bindingName); | |
} | |
function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) { | |
if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { | |
if (ts.isAsyncFunctionLike(node)) { | |
hasAsyncFunctions = true; | |
} | |
if (ts.nodeIsDecorated(node)) { | |
hasDecorators = true; | |
} | |
} | |
return ts.hasDynamicName(node) | |
? bindAnonymousDeclaration(node, symbolFlags, "__computed") | |
: declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); | |
} | |
function shouldReportErrorOnModuleDeclaration(node) { | |
var instanceState = getModuleInstanceState(node); | |
return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); | |
} | |
function checkUnreachable(node) { | |
if (currentFlow.kind !== 0) { | |
return false; | |
} | |
if (currentFlow === unreachableFlow) { | |
var reportError = (ts.isStatement(node) && node.kind !== 200) || | |
node.kind === 220 || | |
(node.kind === 224 && shouldReportErrorOnModuleDeclaration(node)) || | |
(node.kind === 223 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); | |
if (reportError) { | |
currentFlow = reportedUnreachableFlow; | |
var reportUnreachableCode = !options.allowUnreachableCode && | |
!ts.isInAmbientContext(node) && | |
(node.kind !== 199 || | |
ts.getCombinedNodeFlags(node.declarationList) & 3072 || | |
ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); | |
if (reportUnreachableCode) { | |
errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); | |
} | |
} | |
} | |
return true; | |
} | |
} | |
})(ts || (ts = {})); | |
var ts; | |
(function (ts) { | |
var nextSymbolId = 1; | |
var nextNodeId = 1; | |
var nextMergeId = 1; | |
var nextFlowId = 1; | |
function getNodeId(node) { | |
if (!node.id) { | |
node.id = nextNodeId; | |
nextNodeId++; | |
} | |
return node.id; | |
} | |
ts.getNodeId = getNodeId; | |
ts.checkTime = 0; | |
function getSymbolId(symbol) { | |
if (!symbol.id) { | |
symbol.id = nextSymbolId; | |
nextSymbolId++; | |
} | |
return symbol.id; | |
} | |
ts.getSymbolId = getSymbolId; | |
function createTypeChecker(host, produceDiagnostics) { | |
var cancellationToken; | |
var Symbol = ts.objectAllocator.getSymbolConstructor(); | |
var Type = ts.objectAllocator.getTypeConstructor(); | |
var Signature = ts.objectAllocator.getSignatureConstructor(); | |
var typeCount = 0; | |
var symbolCount = 0; | |
var emptyArray = []; | |
var emptySymbols = {}; | |
var compilerOptions = host.getCompilerOptions(); | |
var languageVersion = compilerOptions.target || 0; | |
var modulekind = ts.getEmitModuleKind(compilerOptions); | |
var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; | |
var strictNullChecks = compilerOptions.strictNullChecks; | |
var emitResolver = createResolver(); | |
var undefinedSymbol = createSymbol(4 | 67108864, "undefined"); | |
undefinedSymbol.declarations = []; | |
var argumentsSymbol = createSymbol(4 | 67108864, "arguments"); | |
var checker = { | |
getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); }, | |
getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); }, | |
getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount") + symbolCount; }, | |
getTypeCount: function () { return typeCount; }, | |
isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; }, | |
isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; }, | |
isUnknownSymbol: function (symbol) { return symbol === unknownSymbol; }, | |
getDiagnostics: getDiagnostics, | |
getGlobalDiagnostics: getGlobalDiagnostics, | |
getTypeOfSymbolAtLocation: getTypeOfSymbolAtLocation, | |
getSymbolsOfParameterPropertyDeclaration: getSymbolsOfParameterPropertyDeclaration, | |
getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, | |
getPropertiesOfType: getPropertiesOfType, | |
getPropertyOfType: getPropertyOfType, | |
getSignaturesOfType: getSignaturesOfType, | |
getIndexTypeOfType: getIndexTypeOfType, | |
getBaseTypes: getBaseTypes, | |
getReturnTypeOfSignature: getReturnTypeOfSignature, | |
getSymbolsInScope: getSymbolsInScope, | |
getSymbolAtLocation: getSymbolAtLocation, | |
getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, | |
getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, | |
getTypeAtLocation: getTypeOfNode, | |
getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, | |
typeToString: typeToString, | |
getSymbolDisplayBuilder: getSymbolDisplayBuilder, | |
symbolToString: symbolToString, | |
getAugmentedPropertiesOfType: getAugmentedPropertiesOfType, | |
getRootSymbols: getRootSymbols, | |
getContextualType: getContextualType, | |
getFullyQualifiedName: getFullyQualifiedName, | |
getResolvedSignature: getResolvedSignature, | |
getConstantValue: getConstantValue, | |
isValidPropertyAccess: isValidPropertyAccess, | |
getSignatureFromDeclaration: getSignatureFromDeclaration, | |
isImplementationOfOverload: isImplementationOfOverload, | |
getAliasedSymbol: resolveAlias, | |
getEmitResolver: getEmitResolver, | |
getExportsOfModule: getExportsOfModuleAsArray, | |
getJsxElementAttributesType: getJsxElementAttributesType, | |
getJsxIntrinsicTagNames: getJsxIntrinsicTagNames, | |
isOptionalParameter: isOptionalParameter | |
}; | |
var unknownSymbol = createSymbol(4 | 67108864, "unknown"); | |
var resolvingSymbol = createSymbol(67108864, "__resolving__"); | |
var nullableWideningFlags = strictNullChecks ? 0 : 2097152; | |
var anyType = createIntrinsicType(1, "any"); | |
var stringType = createIntrinsicType(2, "string"); | |
var numberType = createIntrinsicType(4, "number"); | |
var booleanType = createIntrinsicType(8, "boolean"); | |
var esSymbolType = createIntrinsicType(16777216, "symbol"); | |
var voidType = createIntrinsicType(16, "void"); | |
var undefinedType = createIntrinsicType(32 | nullableWideningFlags, "undefined"); | |
var nullType = createIntrinsicType(64 | nullableWideningFlags, "null"); | |
var emptyArrayElementType = createIntrinsicType(32 | 2097152, "undefined"); | |
var unknownType = createIntrinsicType(1, "unknown"); | |
var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); | |
var emptyUnionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); | |
var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); | |
emptyGenericType.instantiations = {}; | |
var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); | |
anyFunctionType.flags |= 8388608; | |
var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); | |
var anySignature = createSignature(undefined, undefined, undefined, emptyArray, anyType, undefined, 0, false, false); | |
var unknownSignature = createSignature(undefined, undefined, undefined, emptyArray, unknownType, undefined, 0, false, false); | |
var enumNumberIndexInfo = createIndexInfo(stringType, true); | |
var globals = {}; | |
var getGlobalESSymbolConstructorSymbol; | |
var getGlobalPromiseConstructorSymbol; | |
var globalObjectType; | |
var globalFunctionType; | |
var globalArrayType; | |
var globalReadonlyArrayType; | |
var globalStringType; | |
var globalNumberType; | |
var globalBooleanType; | |
var globalRegExpType; | |
var anyArrayType; | |
var anyReadonlyArrayType; | |
var getGlobalTemplateStringsArrayType; | |
var getGlobalESSymbolType; | |
var getGlobalIterableType; | |
var getGlobalIteratorType; | |
var getGlobalIterableIteratorType; | |
var getGlobalClassDecoratorType; | |
var getGlobalParameterDecoratorType; | |
var getGlobalPropertyDecoratorType; | |
var getGlobalMethodDecoratorType; | |
var getGlobalTypedPropertyDescriptorType; | |
var getGlobalPromiseType; | |
var tryGetGlobalPromiseType; | |
var getGlobalPromiseLikeType; | |
var getInstantiatedGlobalPromiseLikeType; | |
var getGlobalPromiseConstructorLikeType; | |
var getGlobalThenableType; | |
var jsxElementClassType; | |
var deferredNodes; | |
var flowStackStart = 0; | |
var flowStackCount = 0; | |
var tupleTypes = {}; | |
var unionTypes = {}; | |
var intersectionTypes = {}; | |
var stringLiteralTypes = {}; | |
var resolutionTargets = []; | |
var resolutionResults = []; | |
var resolutionPropertyNames = []; | |
var mergedSymbols = []; | |
var symbolLinks = []; | |
var nodeLinks = []; | |
var flowTypeCaches = []; | |
var flowStackNodes = []; | |
var flowStackCacheKeys = []; | |
var potentialThisCollisions = []; | |
var awaitedTypeStack = []; | |
var diagnostics = ts.createDiagnosticCollection(); | |
var typeofEQFacts = { | |
"string": 1, | |
"number": 2, | |
"boolean": 4, | |
"symbol": 8, | |
"undefined": 16384, | |
"object": 16, | |
"function": 32 | |
}; | |
var typeofNEFacts = { | |
"string": 128, | |
"number": 256, | |
"boolean": 512, | |
"symbol": 1024, | |
"undefined": 131072, | |
"object": 2048, | |
"function": 4096 | |
}; | |
var typeofTypesByName = { | |
"string": stringType, | |
"number": numberType, | |
"boolean": booleanType, | |
"symbol": esSymbolType, | |
"undefined": undefinedType | |
}; | |
var jsxElementType; | |
var jsxTypes = {}; | |
var JsxNames = { | |
JSX: "JSX", | |
IntrinsicElements: "IntrinsicElements", | |
ElementClass: "ElementClass", | |
ElementAttributesPropertyNameContainer: "ElementAttributesProperty", | |
Element: "Element", | |
IntrinsicAttributes: "IntrinsicAttributes", | |
IntrinsicClassAttributes: "IntrinsicClassAttributes" | |
}; | |
var subtypeRelation = {}; | |
var assignableRelation = {}; | |
var comparableRelation = {}; | |
var identityRelation = {}; | |
var _displayBuilder; | |
var builtinGlobals = (_a = {}, | |
_a[undefinedSymbol.name] = undefinedSymbol, | |
_a | |
); | |
initializeTypeChecker(); | |
return checker; | |
function getEmitResolver(sourceFile, cancellationToken) { | |
getDiagnostics(sourceFile, cancellationToken); | |
return emitResolver; | |
} | |
function error(location, message, arg0, arg1, arg2) { | |
var diagnostic = location | |
? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) | |
: ts.createCompilerDiagnostic(message, arg0, arg1, arg2); | |
diagnostics.add(diagnostic); | |
} | |
function createSymbol(flags, name) { | |
symbolCount++; | |
return new Symbol(flags, name); | |
} | |
function getExcludedSymbolFlags(flags) { | |
var result = 0; | |
if (flags & 2) | |
result |= 107455; | |
if (flags & 1) | |
result |= 107454; | |
if (flags & 4) | |
result |= 107455; | |
if (flags & 8) | |
result |= 107455; | |
if (flags & 16) | |
result |= 106927; | |
if (flags & 32) | |
result |= 899519; | |
if (flags & 64) | |
result |= 792960; | |
if (flags & 256) | |
result |= 899327; | |
if (flags & 128) | |
result |= 899967; | |
if (flags & 512) | |
result |= 106639; | |
if (flags & 8192) | |
result |= 99263; | |
if (flags & 32768) | |
result |= 41919; | |
if (flags & 65536) | |
result |= 74687; | |
if (flags & 262144) | |
result |= 530912; | |
if (flags & 524288) | |
result |= 793056; | |
if (flags & 8388608) | |
result |= 8388608; | |
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 | 33554432, symbol.name); | |
result.declarations = symbol.declarations.slice(0); | |
result.parent = symbol.parent; | |
if (symbol.valueDeclaration) | |
result.valueDeclaration = symbol.valueDeclaration; | |
if (symbol.constEnumOnlyModule) | |
result.constEnumOnlyModule = true; | |
if (symbol.members) | |
result.members = cloneSymbolTable(symbol.members); | |
if (symbol.exports) | |
result.exports = cloneSymbolTable(symbol.exports); | |
recordMergedSymbol(result, symbol); | |
return result; | |
} | |
function mergeSymbol(target, source) { | |
if (!(target.flags & getExcludedSymbolFlags(source.flags))) { | |
if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) { | |
target.constEnumOnlyModule = false; | |
} | |
target.flags |= source.flags; | |
if (source.valueDeclaration && | |
(!target.valueDeclaration || | |
(target.valueDeclaration.kind === 224 && source.valueDeclaration.kind !== 224))) { | |
target.valueDeclaration = source.valueDeclaration; | |
} | |
ts.forEach(source.declarations, function (node) { | |
target.declarations.push(node); | |
}); | |
if (source.members) { | |
if (!target.members) | |
target.members = {}; | |
mergeSymbolTable(target.members, source.members); | |
} | |
if (source.exports) { | |
if (!target.exports) | |
target.exports = {}; | |
mergeSymbolTable(target.exports, source.exports); | |
} | |
recordMergedSymbol(target, source); | |
} | |
else { | |
var message_2 = target.flags & 2 || source.flags & 2 | |
? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; | |
ts.forEach(source.declarations, function (node) { | |
error(node.name ? node.name : node, message_2, symbolToString(source)); | |
}); | |
ts.forEach(target.declarations, function (node) { | |
error(node.name ? node.name : node, message_2, symbolToString(source)); | |
}); | |
} | |
} | |
function cloneSymbolTable(symbolTable) { | |
var result = {}; | |
for (var id in symbolTable) { | |
if (ts.hasProperty(symbolTable, id)) { | |
result[id] = symbolTable[id]; | |
} | |
} | |
return result; | |
} | |
function mergeSymbolTable(target, source) { | |
for (var id in source) { | |
if (ts.hasProperty(source, id)) { | |
if (!ts.hasProperty(target, id)) { | |
target[id] = source[id]; | |
} | |
else { | |
var symbol = target[id]; | |
if (!(symbol.flags & 33554432)) { | |
target[id] = symbol = cloneSymbol(symbol); | |
} | |
mergeSymbol(symbol, source[id]); | |
} | |
} | |
} | |
} | |
function mergeModuleAugmentation(moduleName) { | |
var moduleAugmentation = moduleName.parent; | |
if (moduleAugmentation.symbol.declarations[0] !== moduleAugmentation) { | |
ts.Debug.assert(moduleAugmentation.symbol.declarations.length > 1); | |
return; | |
} | |
if (ts.isGlobalScopeAugmentation(moduleAugmentation)) { | |
mergeSymbolTable(globals, moduleAugmentation.symbol.exports); | |
} | |
else { | |
var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) | |
? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found | |
: undefined; | |
var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); | |
if (!mainModule) { | |
return; | |
} | |
mainModule = resolveExternalModuleSymbol(mainModule); | |
if (mainModule.flags & 1536) { | |
mainModule = mainModule.flags & 33554432 ? mainModule : cloneSymbol(mainModule); | |
mergeSymbol(mainModule, moduleAugmentation.symbol); | |
} | |
else { | |
error(moduleName, ts.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); | |
} | |
} | |
} | |
function addToSymbolTable(target, source, message) { | |
for (var id in source) { | |
if (ts.hasProperty(source, id)) { | |
if (ts.hasProperty(target, id)) { | |
ts.forEach(target[id].declarations, addDeclarationDiagnostic(id, message)); | |
} | |
else { | |
target[id] = source[id]; | |
} | |
} | |
} | |
function addDeclarationDiagnostic(id, message) { | |
return function (declaration) { return diagnostics.add(ts.createDiagnosticForNode(declaration, message, id)); }; | |
} | |
} | |
function getSymbolLinks(symbol) { | |
if (symbol.flags & 67108864) | |
return symbol; | |
var id = getSymbolId(symbol); | |
return symbolLinks[id] || (symbolLinks[id] = {}); | |
} | |
function getNodeLinks(node) { | |
var nodeId = getNodeId(node); | |
return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); | |
} | |
function isGlobalSourceFile(node) { | |
return node.kind === 255 && !ts.isExternalOrCommonJsModule(node); | |
} | |
function getSymbol(symbols, name, meaning) { | |
if (meaning && ts.hasProperty(symbols, name)) { | |
var symbol = symbols[name]; | |
ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); | |
if (symbol.flags & meaning) { | |
return symbol; | |
} | |
if (symbol.flags & 8388608) { | |
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, 107455); | |
var propertySymbol = getSymbol(classDeclaration.symbol.members, parameterName, 107455); | |
if (parameterSymbol && propertySymbol) { | |
return [parameterSymbol, propertySymbol]; | |
} | |
ts.Debug.fail("There should exist two symbols, one as property declaration and one as parameter declaration"); | |
} | |
function isBlockScopedNameDeclaredBeforeUse(declaration, usage) { | |
var declarationFile = ts.getSourceFileOfNode(declaration); | |
var useFile = ts.getSourceFileOfNode(usage); | |
if (declarationFile !== useFile) { | |
if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { | |
return true; | |
} | |
var sourceFiles = host.getSourceFiles(); | |
return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile); | |
} | |
if (declaration.pos <= usage.pos) { | |
return declaration.kind !== 217 || | |
!isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); | |
} | |
return isUsedInFunctionOrNonStaticProperty(declaration, usage); | |
function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { | |
var container = ts.getEnclosingBlockScopeContainer(declaration); | |
if (declaration.parent.parent.kind === 199 || | |
declaration.parent.parent.kind === 205) { | |
return isSameScopeDescendentOf(usage, declaration, container); | |
} | |
else if (declaration.parent.parent.kind === 207 || | |
declaration.parent.parent.kind === 206) { | |
var expression = declaration.parent.parent.expression; | |
return isSameScopeDescendentOf(usage, expression, container); | |
} | |
} | |
function isUsedInFunctionOrNonStaticProperty(declaration, usage) { | |
var container = ts.getEnclosingBlockScopeContainer(declaration); | |
var current = usage; | |
while (current) { | |
if (current === container) { | |
return false; | |
} | |
if (ts.isFunctionLike(current)) { | |
return true; | |
} | |
var initializerOfNonStaticProperty = current.parent && | |
current.parent.kind === 144 && | |
(current.parent.flags & 32) === 0 && | |
current.parent.initializer === current; | |
if (initializerOfNonStaticProperty) { | |
return true; | |
} | |
current = current.parent; | |
} | |
return false; | |
} | |
} | |
function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) { | |
var result; | |
var lastLocation; | |
var propertyWithInvalidInitializer; | |
var errorLocation = location; | |
var grandparent; | |
loop: while (location) { | |
if (location.locals && !isGlobalSourceFile(location)) { | |
if (result = getSymbol(location.locals, name, meaning)) { | |
var useResult = true; | |
if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { | |
if (meaning & result.flags & 793056 && lastLocation.kind !== 272) { | |
useResult = result.flags & 262144 | |
? lastLocation === location.type || | |
lastLocation.kind === 141 || | |
lastLocation.kind === 140 | |
: false; | |
} | |
if (meaning & 107455 && result.flags & 1) { | |
useResult = | |
lastLocation.kind === 141 || | |
(lastLocation === location.type && | |
result.valueDeclaration.kind === 141); | |
} | |
} | |
if (useResult) { | |
break loop; | |
} | |
else { | |
result = undefined; | |
} | |
} | |
} | |
switch (location.kind) { | |
case 255: | |
if (!ts.isExternalOrCommonJsModule(location)) | |
break; | |
case 224: | |
var moduleExports = getSymbolOfNode(location).exports; | |
if (location.kind === 255 || ts.isAmbientModule(location)) { | |
if (result = moduleExports["default"]) { | |
var localSymbol = ts.getLocalSymbolForExportDefault(result); | |
if (localSymbol && (result.flags & meaning) && localSymbol.name === name) { | |
break loop; | |
} | |
result = undefined; | |
} | |
if (ts.hasProperty(moduleExports, name) && | |
moduleExports[name].flags === 8388608 && | |
ts.getDeclarationOfKind(moduleExports[name], 237)) { | |
break; | |
} | |
} | |
if (result = getSymbol(moduleExports, name, meaning & 8914931)) { | |
break loop; | |
} | |
break; | |
case 223: | |
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) { | |
break loop; | |
} | |
break; | |
case 144: | |
case 143: | |
if (ts.isClassLike(location.parent) && !(location.flags & 32)) { | |
var ctor = findConstructorDeclaration(location.parent); | |
if (ctor && ctor.locals) { | |
if (getSymbol(ctor.locals, name, meaning & 107455)) { | |
propertyWithInvalidInitializer = location; | |
} | |
} | |
} | |
break; | |
case 220: | |
case 191: | |
case 221: | |
if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) { | |
if (lastLocation && lastLocation.flags & 32) { | |
error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); | |
return undefined; | |
} | |
break loop; | |
} | |
if (location.kind === 191 && meaning & 32) { | |
var className = location.name; | |
if (className && name === className.text) { | |
result = location.symbol; | |
break loop; | |
} | |
} | |
break; | |
case 139: | |
grandparent = location.parent.parent; | |
if (ts.isClassLike(grandparent) || grandparent.kind === 221) { | |
if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) { | |
error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); | |
return undefined; | |
} | |
} | |
break; | |
case 146: | |
case 145: | |
case 147: | |
case 148: | |
case 149: | |
case 219: | |
case 179: | |
if (meaning & 3 && name === "arguments") { | |
result = argumentsSymbol; | |
break loop; | |
} | |
break; | |
case 178: | |
if (meaning & 3 && name === "arguments") { | |
result = argumentsSymbol; | |
break loop; | |
} | |
if (meaning & 16) { | |
var functionName = location.name; | |
if (functionName && name === functionName.text) { | |
result = location.symbol; | |
break loop; | |
} | |
} | |
break; | |
case 142: | |
if (location.parent && location.parent.kind === 141) { | |
location = location.parent; | |
} | |
if (location.parent && ts.isClassElement(location.parent)) { | |
location = location.parent; | |
} | |
break; | |
} | |
lastLocation = location; | |
location = location.parent; | |
} | |
if (!result) { | |
result = getSymbol(globals, name, meaning); | |
} | |
if (!result) { | |
if (nameNotFoundMessage) { | |
if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { | |
error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); | |
} | |
} | |
return undefined; | |
} | |
if (nameNotFoundMessage) { | |
if (propertyWithInvalidInitializer) { | |
var propertyName = propertyWithInvalidInitializer.name; | |
error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); | |
return undefined; | |
} | |
if (meaning & 2) { | |
var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result); | |
if (exportOrLocalSymbol.flags & 2) { | |
checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); | |
} | |
} | |
} | |
return result; | |
} | |
function checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) { | |
if (!errorLocation || (errorLocation.kind === 69 && (isTypeReferenceIdentifier(errorLocation)) || isInTypeQuery(errorLocation))) { | |
return false; | |
} | |
var container = ts.getThisContainer(errorLocation, true); | |
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, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg), symbolToString(classSymbol)); | |
return true; | |
} | |
if (location === container && !(location.flags & 32)) { | |
var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; | |
if (getPropertyOfType(instanceType, name)) { | |
error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); | |
return true; | |
} | |
} | |
} | |
location = location.parent; | |
} | |
return false; | |
} | |
function checkResolvedBlockScopedVariable(result, errorLocation) { | |
ts.Debug.assert((result.flags & 2) !== 0); | |
var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); | |
ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); | |
if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 217), errorLocation)) { | |
error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); | |
} | |
} | |
function isSameScopeDescendentOf(initial, parent, stopAt) { | |
if (!parent) { | |
return false; | |
} | |
for (var current = initial; current && current !== stopAt && !ts.isFunctionLike(current); current = current.parent) { | |
if (current === parent) { | |
return true; | |
} | |
} | |
return false; | |
} | |
function getAnyImportSyntax(node) { | |
if (ts.isAliasSymbolDeclaration(node)) { | |
if (node.kind === 228) { | |
return node; | |
} | |
while (node && node.kind !== 229) { | |
node = node.parent; | |
} | |
return node; | |
} | |
} | |
function getDeclarationOfAliasSymbol(symbol) { | |
return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); | |
} | |
function getTargetOfImportEqualsDeclaration(node) { | |
if (node.moduleReference.kind === 239) { | |
return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); | |
} | |
return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); | |
} | |
function getTargetOfImportClause(node) { | |
var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier); | |
if (moduleSymbol) { | |
var exportDefaultSymbol = moduleSymbol.exports["export="] ? | |
getPropertyOfType(getTypeOfSymbol(moduleSymbol.exports["export="]), "default") : | |
resolveSymbol(moduleSymbol.exports["default"]); | |
if (!exportDefaultSymbol && !allowSyntheticDefaultImports) { | |
error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); | |
} | |
else if (!exportDefaultSymbol && allowSyntheticDefaultImports) { | |
return resolveExternalModuleSymbol(moduleSymbol) || resolveSymbol(moduleSymbol); | |
} | |
return exportDefaultSymbol; | |
} | |
} | |
function getTargetOfNamespaceImport(node) { | |
var moduleSpecifier = node.parent.parent.moduleSpecifier; | |
return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier); | |
} | |
function combineValueAndTypeSymbols(valueSymbol, typeSymbol) { | |
if (valueSymbol.flags & (793056 | 1536)) { | |
return valueSymbol; | |
} | |
var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.name); | |
result.declarations = ts.concatenate(valueSymbol.declarations, typeSymbol.declarations); | |
result.parent = valueSymbol.parent || typeSymbol.parent; | |
if (valueSymbol.valueDeclaration) | |
result.valueDeclaration = valueSymbol.valueDeclaration; | |
if (typeSymbol.members) | |
result.members = typeSymbol.members; | |
if (valueSymbol.exports) | |
result.exports = valueSymbol.exports; | |
return result; | |
} | |
function getExportOfModule(symbol, name) { | |
if (symbol.flags & 1536) { | |
var exports = getExportsOfSymbol(symbol); | |
if (ts.hasProperty(exports, name)) { | |
return resolveSymbol(exports[name]); | |
} | |
} | |
} | |
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) { | |
var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); | |
var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier); | |
if (targetSymbol) { | |
var name_9 = specifier.propertyName || specifier.name; | |
if (name_9.text) { | |
var symbolFromVariable = void 0; | |
if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { | |
symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_9.text); | |
} | |
else { | |
symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); | |
} | |
var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); | |
var symbol = symbolFromModule && symbolFromVariable ? | |
combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : | |
symbolFromModule || symbolFromVariable; | |
if (!symbol) { | |
error(name_9, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_9)); | |
} | |
return symbol; | |
} | |
} | |
} | |
function getTargetOfImportSpecifier(node) { | |
return getExternalModuleMember(node.parent.parent.parent, node); | |
} | |
function getTargetOfGlobalModuleExportDeclaration(node) { | |
return resolveExternalModuleSymbol(node.parent.symbol); | |
} | |
function getTargetOfExportSpecifier(node) { | |
return node.parent.parent.moduleSpecifier ? | |
getExternalModuleMember(node.parent.parent, node) : | |
resolveEntityName(node.propertyName || node.name, 107455 | 793056 | 1536); | |
} | |
function getTargetOfExportAssignment(node) { | |
return resolveEntityName(node.expression, 107455 | 793056 | 1536); | |
} | |
function getTargetOfAliasDeclaration(node) { | |
switch (node.kind) { | |
case 228: | |
return getTargetOfImportEqualsDeclaration(node); | |
case 230: | |
return getTargetOfImportClause(node); | |
case 231: | |
return getTargetOfNamespaceImport(node); | |
case 233: | |
return getTargetOfImportSpecifier(node); | |
case 237: | |
return getTargetOfExportSpecifier(node); | |
case 234: | |
return getTargetOfExportAssignment(node); | |
case 227: | |
return getTargetOfGlobalModuleExportDeclaration(node); | |
} | |
} | |
function resolveSymbol(symbol) { | |
return symbol && symbol.flags & 8388608 && !(symbol.flags & (107455 | 793056 | 1536)) ? resolveAlias(symbol) : symbol; | |
} | |
function resolveAlias(symbol) { | |
ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Alias here."); | |
var links = getSymbolLinks(symbol); | |
if (!links.target) { | |
links.target = resolvingSymbol; | |
var node = getDeclarationOfAliasSymbol(symbol); | |
var target = getTargetOfAliasDeclaration(node); | |
if (links.target === resolvingSymbol) { | |
links.target = target || unknownSymbol; | |
} | |
else { | |
error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); | |
} | |
} | |
else if (links.target === resolvingSymbol) { | |
links.target = unknownSymbol; | |
} | |
return links.target; | |
} | |
function markExportAsReferenced(node) { | |
var symbol = getSymbolOfNode(node); | |
var target = resolveAlias(symbol); | |
if (target) { | |
var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) || | |
(target !== unknownSymbol && (target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); | |
if (markAlias) { | |
markAliasSymbolAsReferenced(symbol); | |
} | |
} | |
} | |
function markAliasSymbolAsReferenced(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.referenced) { | |
links.referenced = true; | |
var node = getDeclarationOfAliasSymbol(symbol); | |
if (node.kind === 234) { | |
checkExpressionCached(node.expression); | |
} | |
else if (node.kind === 237) { | |
checkExpressionCached(node.propertyName || node.name); | |
} | |
else if (ts.isInternalModuleImportEqualsDeclaration(node)) { | |
checkExpressionCached(node.moduleReference); | |
} | |
} | |
} | |
function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { | |
if (!importDeclaration) { | |
importDeclaration = ts.getAncestor(entityName, 228); | |
ts.Debug.assert(importDeclaration !== undefined); | |
} | |
if (entityName.kind === 69 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { | |
entityName = entityName.parent; | |
} | |
if (entityName.kind === 69 || entityName.parent.kind === 138) { | |
return resolveEntityName(entityName, 1536); | |
} | |
else { | |
ts.Debug.assert(entityName.parent.kind === 228); | |
return resolveEntityName(entityName, 107455 | 793056 | 1536); | |
} | |
} | |
function getFullyQualifiedName(symbol) { | |
return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); | |
} | |
function resolveEntityName(name, meaning, ignoreErrors) { | |
if (ts.nodeIsMissing(name)) { | |
return undefined; | |
} | |
var symbol; | |
if (name.kind === 69) { | |
var message = meaning === 1536 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0; | |
symbol = resolveName(name, name.text, meaning, ignoreErrors ? undefined : message, name); | |
if (!symbol) { | |
return undefined; | |
} | |
} | |
else if (name.kind === 138 || name.kind === 171) { | |
var left = name.kind === 138 ? name.left : name.expression; | |
var right = name.kind === 138 ? name.right : name.name; | |
var namespace = resolveEntityName(left, 1536, ignoreErrors); | |
if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { | |
return undefined; | |
} | |
symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); | |
if (!symbol) { | |
if (!ignoreErrors) { | |
error(right, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right)); | |
} | |
return undefined; | |
} | |
} | |
else { | |
ts.Debug.fail("Unknown entity name kind."); | |
} | |
ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); | |
return symbol.flags & meaning ? symbol : resolveAlias(symbol); | |
} | |
function resolveExternalModuleName(location, moduleReferenceExpression) { | |
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ts.Diagnostics.Cannot_find_module_0); | |
} | |
function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError) { | |
if (moduleReferenceExpression.kind !== 9) { | |
return; | |
} | |
var moduleReferenceLiteral = moduleReferenceExpression; | |
var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text); | |
if (moduleName === undefined) { | |
return; | |
} | |
var isRelative = ts.isExternalModuleNameRelative(moduleName); | |
if (!isRelative) { | |
var symbol = getSymbol(globals, '"' + moduleName + '"', 512); | |
if (symbol) { | |
return getMergedSymbol(symbol); | |
} | |
} | |
var resolvedModule = ts.getResolvedModule(ts.getSourceFileOfNode(location), moduleReferenceLiteral.text); | |
var sourceFile = resolvedModule && host.getSourceFile(resolvedModule.resolvedFileName); | |
if (sourceFile) { | |
if (sourceFile.symbol) { | |
return getMergedSymbol(sourceFile.symbol); | |
} | |
if (moduleNotFoundError) { | |
error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName); | |
} | |
return undefined; | |
} | |
if (moduleNotFoundError) { | |
error(moduleReferenceLiteral, moduleNotFoundError, moduleName); | |
} | |
return undefined; | |
} | |
function resolveExternalModuleSymbol(moduleSymbol) { | |
return moduleSymbol && getMergedSymbol(resolveSymbol(moduleSymbol.exports["export="])) || moduleSymbol; | |
} | |
function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression) { | |
var symbol = resolveExternalModuleSymbol(moduleSymbol); | |
if (symbol && !(symbol.flags & (1536 | 3))) { | |
error(moduleReferenceExpression, ts.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol)); | |
symbol = undefined; | |
} | |
return symbol; | |
} | |
function hasExportAssignmentSymbol(moduleSymbol) { | |
return moduleSymbol.exports["export="] !== undefined; | |
} | |
function getExportsOfModuleAsArray(moduleSymbol) { | |
return symbolsToArray(getExportsOfModule(moduleSymbol)); | |
} | |
function getExportsOfSymbol(symbol) { | |
return symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; | |
} | |
function getExportsOfModule(moduleSymbol) { | |
var links = getSymbolLinks(moduleSymbol); | |
return links.resolvedExports || (links.resolvedExports = getExportsForModule(moduleSymbol)); | |
} | |
function extendExportSymbols(target, source, lookupTable, exportNode) { | |
for (var id in source) { | |
if (id !== "default" && !ts.hasProperty(target, id)) { | |
target[id] = source[id]; | |
if (lookupTable && exportNode) { | |
lookupTable[id] = { | |
specifierText: ts.getTextOfNode(exportNode.moduleSpecifier) | |
}; | |
} | |
} | |
else if (lookupTable && exportNode && id !== "default" && ts.hasProperty(target, id) && resolveSymbol(target[id]) !== resolveSymbol(source[id])) { | |
if (!lookupTable[id].exportsWithDuplicate) { | |
lookupTable[id].exportsWithDuplicate = [exportNode]; | |
} | |
else { | |
lookupTable[id].exportsWithDuplicate.push(exportNode); | |
} | |
} | |
} | |
} | |
function getExportsForModule(moduleSymbol) { | |
var visitedSymbols = []; | |
return visit(moduleSymbol) || moduleSymbol.exports; | |
function visit(symbol) { | |
if (!(symbol && symbol.flags & 1952 && !ts.contains(visitedSymbols, symbol))) { | |
return; | |
} | |
visitedSymbols.push(symbol); | |
var symbols = cloneSymbolTable(symbol.exports); | |
var exportStars = symbol.exports["__export"]; | |
if (exportStars) { | |
var nestedSymbols = {}; | |
var lookupTable = {}; | |
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, node); | |
} | |
for (var id in lookupTable) { | |
var exportsWithDuplicate = lookupTable[id].exportsWithDuplicate; | |
if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || ts.hasProperty(symbols, id)) { | |
continue; | |
} | |
for (var _b = 0, exportsWithDuplicate_1 = exportsWithDuplicate; _b < exportsWithDuplicate_1.length; _b++) { | |
var node = exportsWithDuplicate_1[_b]; | |
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[id].specifierText, 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); | |
} | |
function getParentOfSymbol(symbol) { | |
return getMergedSymbol(symbol.parent); | |
} | |
function getExportSymbolOfValueSymbolIfExported(symbol) { | |
return symbol && (symbol.flags & 1048576) !== 0 | |
? getMergedSymbol(symbol.exportSymbol) | |
: symbol; | |
} | |
function symbolIsValue(symbol) { | |
if (symbol.flags & 16777216) { | |
return symbolIsValue(getSymbolLinks(symbol).target); | |
} | |
if (symbol.flags & 107455) { | |
return true; | |
} | |
if (symbol.flags & 8388608) { | |
return (resolveAlias(symbol).flags & 107455) !== 0; | |
} | |
return false; | |
} | |
function findConstructorDeclaration(node) { | |
var members = node.members; | |
for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { | |
var member = members_1[_i]; | |
if (member.kind === 147 && ts.nodeIsPresent(member.body)) { | |
return member; | |
} | |
} | |
} | |
function createType(flags) { | |
var result = new Type(checker, flags); | |
result.id = typeCount; | |
typeCount++; | |
return result; | |
} | |
function createIntrinsicType(kind, intrinsicName) { | |
var type = createType(kind); | |
type.intrinsicName = intrinsicName; | |
return type; | |
} | |
function createObjectType(kind, symbol) { | |
var type = createType(kind); | |
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; | |
} | |
function getNamedMembers(members) { | |
var result; | |
for (var id in members) { | |
if (ts.hasProperty(members, id)) { | |
if (!isReservedMemberName(id)) { | |
if (!result) | |
result = []; | |
var symbol = members[id]; | |
if (symbolIsValue(symbol)) { | |
result.push(symbol); | |
} | |
} | |
} | |
} | |
return result || emptyArray; | |
} | |
function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { | |
type.members = members; | |
type.properties = getNamedMembers(members); | |
type.callSignatures = callSignatures; | |
type.constructSignatures = constructSignatures; | |
if (stringIndexInfo) | |
type.stringIndexInfo = stringIndexInfo; | |
if (numberIndexInfo) | |
type.numberIndexInfo = numberIndexInfo; | |
return type; | |
} | |
function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { | |
return setObjectTypeMembers(createObjectType(65536, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
function forEachSymbolTableInScope(enclosingDeclaration, callback) { | |
var result; | |
for (var location_1 = enclosingDeclaration; location_1; location_1 = location_1.parent) { | |
if (location_1.locals && !isGlobalSourceFile(location_1)) { | |
if (result = callback(location_1.locals)) { | |
return result; | |
} | |
} | |
switch (location_1.kind) { | |
case 255: | |
if (!ts.isExternalOrCommonJsModule(location_1)) { | |
break; | |
} | |
case 224: | |
if (result = callback(getSymbolOfNode(location_1).exports)) { | |
return result; | |
} | |
break; | |
} | |
} | |
return callback(globals); | |
} | |
function getQualifiedLeftMeaning(rightMeaning) { | |
return rightMeaning === 107455 ? 107455 : 1536; | |
} | |
function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) { | |
function getAccessibleSymbolChainFromSymbolTable(symbols) { | |
function canQualifySymbol(symbolFromSymbolTable, meaning) { | |
if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { | |
return true; | |
} | |
var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing); | |
return !!accessibleParent; | |
} | |
function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { | |
if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { | |
return !ts.forEach(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) && | |
canQualifySymbol(symbolFromSymbolTable, meaning); | |
} | |
} | |
if (isAccessible(ts.lookUp(symbols, symbol.name))) { | |
return [symbol]; | |
} | |
return ts.forEachValue(symbols, function (symbolFromSymbolTable) { | |
if (symbolFromSymbolTable.flags & 8388608 | |
&& symbolFromSymbolTable.name !== "export=" | |
&& !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) { | |
if (!useOnlyExternalAliasing || | |
ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { | |
var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); | |
if (isAccessible(symbolFromSymbolTable, resolveAlias(symbolFromSymbolTable))) { | |
return [symbolFromSymbolTable]; | |
} | |
var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; | |
if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { | |
return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); | |
} | |
} | |
} | |
}); | |
} | |
if (symbol) { | |
if (!(isPropertyOrMethodDeclarationSymbol(symbol))) { | |
return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); | |
} | |
} | |
} | |
function needsQualification(symbol, enclosingDeclaration, meaning) { | |
var qualify = false; | |
forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { | |
if (!ts.hasProperty(symbolTable, symbol.name)) { | |
return false; | |
} | |
var symbolFromSymbolTable = symbolTable[symbol.name]; | |
if (symbolFromSymbolTable === symbol) { | |
return true; | |
} | |
symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) ? 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 144: | |
case 146: | |
case 148: | |
case 149: | |
continue; | |
default: | |
return false; | |
} | |
} | |
return true; | |
} | |
return false; | |
} | |
function isSymbolAccessible(symbol, enclosingDeclaration, meaning) { | |
if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) { | |
var initialSymbol = symbol; | |
var meaningToLook = meaning; | |
while (symbol) { | |
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); | |
if (accessibleSymbolChain) { | |
var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); | |
if (!hasAccessibleDeclarations) { | |
return { | |
accessibility: 1, | |
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), | |
errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined | |
}; | |
} | |
return hasAccessibleDeclarations; | |
} | |
meaningToLook = getQualifiedLeftMeaning(meaning); | |
symbol = getParentOfSymbol(symbol); | |
} | |
var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer); | |
if (symbolExternalModule) { | |
var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); | |
if (symbolExternalModule !== enclosingExternalModule) { | |
return { | |
accessibility: 2, | |
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), | |
errorModuleName: symbolToString(symbolExternalModule) | |
}; | |
} | |
} | |
return { | |
accessibility: 1, | |
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) | |
}; | |
} | |
return { accessibility: 0 }; | |
function getExternalModuleContainer(declaration) { | |
for (; declaration; declaration = declaration.parent) { | |
if (hasExternalModuleSymbol(declaration)) { | |
return getSymbolOfNode(declaration); | |
} | |
} | |
} | |
} | |
function hasExternalModuleSymbol(declaration) { | |
return ts.isAmbientModule(declaration) || (declaration.kind === 255 && ts.isExternalOrCommonJsModule(declaration)); | |
} | |
function hasVisibleDeclarations(symbol) { | |
var aliasesToMakeVisible; | |
if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { | |
return undefined; | |
} | |
return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible }; | |
function getIsDeclarationVisible(declaration) { | |
if (!isDeclarationVisible(declaration)) { | |
var anyImportSyntax = getAnyImportSyntax(declaration); | |
if (anyImportSyntax && | |
!(anyImportSyntax.flags & 1) && | |
isDeclarationVisible(anyImportSyntax.parent)) { | |
getNodeLinks(declaration).isVisible = true; | |
if (aliasesToMakeVisible) { | |
if (!ts.contains(aliasesToMakeVisible, anyImportSyntax)) { | |
aliasesToMakeVisible.push(anyImportSyntax); | |
} | |
} | |
else { | |
aliasesToMakeVisible = [anyImportSyntax]; | |
} | |
return true; | |
} | |
return false; | |
} | |
return true; | |
} | |
} | |
function isEntityNameVisible(entityName, enclosingDeclaration) { | |
var meaning; | |
if (entityName.parent.kind === 157 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { | |
meaning = 107455 | 1048576; | |
} | |
else if (entityName.kind === 138 || entityName.kind === 171 || | |
entityName.parent.kind === 228) { | |
meaning = 1536; | |
} | |
else { | |
meaning = 793056; | |
} | |
var firstIdentifier = getFirstIdentifier(entityName); | |
var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined); | |
return (symbol && hasVisibleDeclarations(symbol)) || { | |
accessibility: 1, | |
errorSymbolName: ts.getTextOfNode(firstIdentifier), | |
errorNode: firstIdentifier | |
}; | |
} | |
function writeKeyword(writer, kind) { | |
writer.writeKeyword(ts.tokenToString(kind)); | |
} | |
function writePunctuation(writer, kind) { | |
writer.writePunctuation(ts.tokenToString(kind)); | |
} | |
function writeSpace(writer) { | |
writer.writeSpace(" "); | |
} | |
function symbolToString(symbol, enclosingDeclaration, meaning) { | |
var writer = ts.getSingleLineStringWriter(); | |
getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning); | |
var result = writer.string(); | |
ts.releaseStringWriter(writer); | |
return result; | |
} | |
function signatureToString(signature, enclosingDeclaration, flags, kind) { | |
var writer = ts.getSingleLineStringWriter(); | |
getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind); | |
var result = writer.string(); | |
ts.releaseStringWriter(writer); | |
return result; | |
} | |
function typeToString(type, enclosingDeclaration, flags) { | |
var writer = ts.getSingleLineStringWriter(); | |
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); | |
var result = writer.string(); | |
ts.releaseStringWriter(writer); | |
var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100; | |
if (maxLength && result.length >= maxLength) { | |
result = result.substr(0, maxLength - "...".length) + "..."; | |
} | |
return result; | |
} | |
function typePredicateToString(typePredicate, enclosingDeclaration, flags) { | |
var writer = ts.getSingleLineStringWriter(); | |
getSymbolDisplayBuilder().buildTypePredicateDisplay(typePredicate, writer, enclosingDeclaration, flags); | |
var result = writer.string(); | |
ts.releaseStringWriter(writer); | |
return result; | |
} | |
function visibilityToString(flags) { | |
if (flags === 8) { | |
return "private"; | |
} | |
if (flags === 16) { | |
return "protected"; | |
} | |
return "public"; | |
} | |
function getTypeAliasForTypeLiteral(type) { | |
if (type.symbol && type.symbol.flags & 2048) { | |
var node = type.symbol.declarations[0].parent; | |
while (node.kind === 163) { | |
node = node.parent; | |
} | |
if (node.kind === 222) { | |
return getSymbolOfNode(node); | |
} | |
} | |
return undefined; | |
} | |
function isTopLevelInExternalModuleAugmentation(node) { | |
return node && node.parent && | |
node.parent.kind === 225 && | |
ts.isExternalModuleAugmentation(node.parent.parent); | |
} | |
function getSymbolDisplayBuilder() { | |
function getNameOfSymbol(symbol) { | |
if (symbol.declarations && symbol.declarations.length) { | |
var declaration = symbol.declarations[0]; | |
if (declaration.name) { | |
return ts.declarationNameToString(declaration.name); | |
} | |
switch (declaration.kind) { | |
case 191: | |
return "(Anonymous class)"; | |
case 178: | |
case 179: | |
return "(Anonymous function)"; | |
} | |
} | |
return symbol.name; | |
} | |
function appendSymbolNameOnly(symbol, writer) { | |
writer.writeSymbol(getNameOfSymbol(symbol), symbol); | |
} | |
function appendPropertyOrElementAccessForSymbol(symbol, writer) { | |
var symbolName = getNameOfSymbol(symbol); | |
var firstChar = symbolName.charCodeAt(0); | |
var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); | |
if (needsElementAccess) { | |
writePunctuation(writer, 19); | |
if (ts.isSingleOrDoubleQuote(firstChar)) { | |
writer.writeStringLiteral(symbolName); | |
} | |
else { | |
writer.writeSymbol(symbolName, symbol); | |
} | |
writePunctuation(writer, 20); | |
} | |
else { | |
writePunctuation(writer, 21); | |
writer.writeSymbol(symbolName, symbol); | |
} | |
} | |
function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { | |
var parentSymbol; | |
function appendParentTypeArgumentsAndSymbolName(symbol) { | |
if (parentSymbol) { | |
if (flags & 1) { | |
if (symbol.flags & 16777216) { | |
buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration); | |
} | |
else { | |
buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); | |
} | |
} | |
appendPropertyOrElementAccessForSymbol(symbol, writer); | |
} | |
else { | |
appendSymbolNameOnly(symbol, writer); | |
} | |
parentSymbol = symbol; | |
} | |
writer.trackSymbol(symbol, enclosingDeclaration, meaning); | |
function walkSymbol(symbol, meaning) { | |
if (symbol) { | |
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2)); | |
if (!accessibleSymbolChain || | |
needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { | |
walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning)); | |
} | |
if (accessibleSymbolChain) { | |
for (var _i = 0, accessibleSymbolChain_1 = accessibleSymbolChain; _i < accessibleSymbolChain_1.length; _i++) { | |
var accessibleSymbol = accessibleSymbolChain_1[_i]; | |
appendParentTypeArgumentsAndSymbolName(accessibleSymbol); | |
} | |
} | |
else { | |
if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) { | |
return; | |
} | |
if (symbol.flags & 2048 || symbol.flags & 4096) { | |
return; | |
} | |
appendParentTypeArgumentsAndSymbolName(symbol); | |
} | |
} | |
} | |
var isTypeParameter = symbol.flags & 262144; | |
var typeFormatFlag = 128 & typeFlags; | |
if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) { | |
walkSymbol(symbol, meaning); | |
return; | |
} | |
return appendParentTypeArgumentsAndSymbolName(symbol); | |
} | |
function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, symbolStack) { | |
var globalFlagsToPass = globalFlags & 16; | |
var inObjectTypeLiteral = false; | |
return writeType(type, globalFlags); | |
function writeType(type, flags) { | |
if (type.flags & 16777343) { | |
writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) | |
? "any" | |
: type.intrinsicName); | |
} | |
else if (type.flags & 33554432) { | |
if (inObjectTypeLiteral) { | |
writer.reportInaccessibleThisError(); | |
} | |
writer.writeKeyword("this"); | |
} | |
else if (type.flags & 4096) { | |
writeTypeReference(type, flags); | |
} | |
else if (type.flags & (1024 | 2048 | 128 | 512)) { | |
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags); | |
} | |
else if (type.flags & 8192) { | |
writeTupleType(type); | |
} | |
else if (type.flags & 49152) { | |
writeUnionOrIntersectionType(type, flags); | |
} | |
else if (type.flags & 65536) { | |
if (type === emptyUnionType) { | |
writer.writeKeyword("nothing"); | |
} | |
else { | |
writeAnonymousType(type, flags); | |
} | |
} | |
else if (type.flags & 256) { | |
writer.writeStringLiteral("\"" + ts.escapeString(type.text) + "\""); | |
} | |
else { | |
writePunctuation(writer, 15); | |
writeSpace(writer); | |
writePunctuation(writer, 22); | |
writeSpace(writer); | |
writePunctuation(writer, 16); | |
} | |
} | |
function writeTypeList(types, delimiter) { | |
for (var i = 0; i < types.length; i++) { | |
if (i > 0) { | |
if (delimiter !== 24) { | |
writeSpace(writer); | |
} | |
writePunctuation(writer, delimiter); | |
writeSpace(writer); | |
} | |
writeType(types[i], delimiter === 24 ? 0 : 64); | |
} | |
} | |
function writeSymbolTypeReference(symbol, typeArguments, pos, end, flags) { | |
if (symbol.flags & 32 || !isReservedMemberName(symbol.name)) { | |
buildSymbolDisplay(symbol, writer, enclosingDeclaration, 793056, 0, flags); | |
} | |
if (pos < end) { | |
writePunctuation(writer, 25); | |
writeType(typeArguments[pos], 256); | |
pos++; | |
while (pos < end) { | |
writePunctuation(writer, 24); | |
writeSpace(writer); | |
writeType(typeArguments[pos], 0); | |
pos++; | |
} | |
writePunctuation(writer, 27); | |
} | |
} | |
function writeTypeReference(type, flags) { | |
var typeArguments = type.typeArguments || emptyArray; | |
if (type.target === globalArrayType && !(flags & 1)) { | |
writeType(typeArguments[0], 64); | |
writePunctuation(writer, 19); | |
writePunctuation(writer, 20); | |
} | |
else { | |
var outerTypeParameters = type.target.outerTypeParameters; | |
var i = 0; | |
if (outerTypeParameters) { | |
var length_1 = outerTypeParameters.length; | |
while (i < length_1) { | |
var start = i; | |
var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); | |
do { | |
i++; | |
} while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); | |
if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { | |
writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); | |
writePunctuation(writer, 21); | |
} | |
} | |
} | |
var typeParameterCount = (type.target.typeParameters || emptyArray).length; | |
writeSymbolTypeReference(type.symbol, typeArguments, i, typeParameterCount, flags); | |
} | |
} | |
function writeTupleType(type) { | |
writePunctuation(writer, 19); | |
writeTypeList(type.elementTypes, 24); | |
writePunctuation(writer, 20); | |
} | |
function writeUnionOrIntersectionType(type, flags) { | |
if (flags & 64) { | |
writePunctuation(writer, 17); | |
} | |
writeTypeList(type.types, type.flags & 16384 ? 47 : 46); | |
if (flags & 64) { | |
writePunctuation(writer, 18); | |
} | |
} | |
function writeAnonymousType(type, flags) { | |
var symbol = type.symbol; | |
if (symbol) { | |
if (symbol.flags & (32 | 384 | 512)) { | |
writeTypeOfSymbol(type, flags); | |
} | |
else if (shouldWriteTypeOfFunctionSymbol()) { | |
writeTypeOfSymbol(type, flags); | |
} | |
else if (ts.contains(symbolStack, symbol)) { | |
var typeAlias = getTypeAliasForTypeLiteral(type); | |
if (typeAlias) { | |
buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags); | |
} | |
else { | |
writeKeyword(writer, 117); | |
} | |
} | |
else { | |
if (!symbolStack) { | |
symbolStack = []; | |
} | |
symbolStack.push(symbol); | |
writeLiteralType(type, flags); | |
symbolStack.pop(); | |
} | |
} | |
else { | |
writeLiteralType(type, flags); | |
} | |
function shouldWriteTypeOfFunctionSymbol() { | |
var isStaticMethodSymbol = !!(symbol.flags & 8192 && | |
ts.forEach(symbol.declarations, function (declaration) { return declaration.flags & 32; })); | |
var isNonLocalFunctionSymbol = !!(symbol.flags & 16) && | |
(symbol.parent || | |
ts.forEach(symbol.declarations, function (declaration) { | |
return declaration.parent.kind === 255 || declaration.parent.kind === 225; | |
})); | |
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { | |
return !!(flags & 2) || | |
(ts.contains(symbolStack, symbol)); | |
} | |
} | |
} | |
function writeTypeOfSymbol(type, typeFormatFlags) { | |
writeKeyword(writer, 101); | |
writeSpace(writer); | |
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags); | |
} | |
function writeIndexSignature(info, keyword) { | |
if (info) { | |
if (info.isReadonly) { | |
writeKeyword(writer, 127); | |
writeSpace(writer); | |
} | |
writePunctuation(writer, 19); | |
writer.writeParameter(info.declaration ? ts.declarationNameToString(info.declaration.parameters[0].name) : "x"); | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
writeKeyword(writer, keyword); | |
writePunctuation(writer, 20); | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
writeType(info.type, 0); | |
writePunctuation(writer, 23); | |
writer.writeLine(); | |
} | |
} | |
function writePropertyWithModifiers(prop) { | |
if (isReadonlySymbol(prop)) { | |
writeKeyword(writer, 127); | |
writeSpace(writer); | |
} | |
buildSymbolDisplay(prop, writer); | |
if (prop.flags & 536870912) { | |
writePunctuation(writer, 53); | |
} | |
} | |
function shouldAddParenthesisAroundFunctionType(callSignature, flags) { | |
if (flags & 64) { | |
return true; | |
} | |
else if (flags & 256) { | |
var typeParameters = callSignature.target && (flags & 32) ? | |
callSignature.target.typeParameters : callSignature.typeParameters; | |
return typeParameters && typeParameters.length !== 0; | |
} | |
return false; | |
} | |
function writeLiteralType(type, flags) { | |
var resolved = resolveStructuredTypeMembers(type); | |
if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { | |
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { | |
writePunctuation(writer, 15); | |
writePunctuation(writer, 16); | |
return; | |
} | |
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { | |
var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); | |
if (parenthesizeSignature) { | |
writePunctuation(writer, 17); | |
} | |
buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); | |
if (parenthesizeSignature) { | |
writePunctuation(writer, 18); | |
} | |
return; | |
} | |
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { | |
if (flags & 64) { | |
writePunctuation(writer, 17); | |
} | |
writeKeyword(writer, 92); | |
writeSpace(writer); | |
buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); | |
if (flags & 64) { | |
writePunctuation(writer, 18); | |
} | |
return; | |
} | |
} | |
var saveInObjectTypeLiteral = inObjectTypeLiteral; | |
inObjectTypeLiteral = true; | |
writePunctuation(writer, 15); | |
writer.writeLine(); | |
writer.increaseIndent(); | |
for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) { | |
var signature = _a[_i]; | |
buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack); | |
writePunctuation(writer, 23); | |
writer.writeLine(); | |
} | |
for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) { | |
var signature = _c[_b]; | |
buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, 1, symbolStack); | |
writePunctuation(writer, 23); | |
writer.writeLine(); | |
} | |
writeIndexSignature(resolved.stringIndexInfo, 131); | |
writeIndexSignature(resolved.numberIndexInfo, 129); | |
for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { | |
var p = _e[_d]; | |
var t = getTypeOfSymbol(p); | |
if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) { | |
var signatures = getSignaturesOfType(t, 0); | |
for (var _f = 0, signatures_1 = signatures; _f < signatures_1.length; _f++) { | |
var signature = signatures_1[_f]; | |
writePropertyWithModifiers(p); | |
buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack); | |
writePunctuation(writer, 23); | |
writer.writeLine(); | |
} | |
} | |
else { | |
writePropertyWithModifiers(p); | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
writeType(t, 0); | |
writePunctuation(writer, 23); | |
writer.writeLine(); | |
} | |
} | |
writer.decreaseIndent(); | |
writePunctuation(writer, 16); | |
inObjectTypeLiteral = saveInObjectTypeLiteral; | |
} | |
} | |
function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration, flags) { | |
var targetSymbol = getTargetSymbol(symbol); | |
if (targetSymbol.flags & 32 || targetSymbol.flags & 64 || targetSymbol.flags & 524288) { | |
buildDisplayForTypeParametersAndDelimiters(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaration, flags); | |
} | |
} | |
function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, symbolStack) { | |
appendSymbolNameOnly(tp.symbol, writer); | |
var constraint = getConstraintOfTypeParameter(tp); | |
if (constraint) { | |
writeSpace(writer); | |
writeKeyword(writer, 83); | |
writeSpace(writer); | |
buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
} | |
function buildParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack) { | |
var parameterNode = p.valueDeclaration; | |
if (ts.isRestParameter(parameterNode)) { | |
writePunctuation(writer, 22); | |
} | |
if (ts.isBindingPattern(parameterNode.name)) { | |
buildBindingPatternDisplay(parameterNode.name, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
else { | |
appendSymbolNameOnly(p, writer); | |
} | |
if (isOptionalParameter(parameterNode)) { | |
writePunctuation(writer, 53); | |
} | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, symbolStack); | |
} | |
function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { | |
if (bindingPattern.kind === 166) { | |
writePunctuation(writer, 15); | |
buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); | |
writePunctuation(writer, 16); | |
} | |
else if (bindingPattern.kind === 167) { | |
writePunctuation(writer, 19); | |
var elements = bindingPattern.elements; | |
buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); | |
if (elements && elements.hasTrailingComma) { | |
writePunctuation(writer, 24); | |
} | |
writePunctuation(writer, 20); | |
} | |
} | |
function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { | |
if (bindingElement.kind === 192) { | |
return; | |
} | |
ts.Debug.assert(bindingElement.kind === 168); | |
if (bindingElement.propertyName) { | |
writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
} | |
if (ts.isBindingPattern(bindingElement.name)) { | |
buildBindingPatternDisplay(bindingElement.name, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
else { | |
if (bindingElement.dotDotDotToken) { | |
writePunctuation(writer, 22); | |
} | |
appendSymbolNameOnly(bindingElement.symbol, writer); | |
} | |
} | |
function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, symbolStack) { | |
if (typeParameters && typeParameters.length) { | |
writePunctuation(writer, 25); | |
buildDisplayForCommaSeparatedList(typeParameters, writer, function (p) { return buildTypeParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack); }); | |
writePunctuation(writer, 27); | |
} | |
} | |
function buildDisplayForCommaSeparatedList(list, writer, action) { | |
for (var i = 0; i < list.length; i++) { | |
if (i > 0) { | |
writePunctuation(writer, 24); | |
writeSpace(writer); | |
} | |
action(list[i]); | |
} | |
} | |
function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { | |
if (typeParameters && typeParameters.length) { | |
writePunctuation(writer, 25); | |
var flags_1 = 256; | |
for (var i = 0; i < typeParameters.length; i++) { | |
if (i > 0) { | |
writePunctuation(writer, 24); | |
writeSpace(writer); | |
flags_1 = 0; | |
} | |
buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); | |
} | |
writePunctuation(writer, 27); | |
} | |
} | |
function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { | |
writePunctuation(writer, 17); | |
if (thisType) { | |
writeKeyword(writer, 97); | |
writePunctuation(writer, 54); | |
writeSpace(writer); | |
buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
for (var i = 0; i < parameters.length; i++) { | |
if (i > 0 || thisType) { | |
writePunctuation(writer, 24); | |
writeSpace(writer); | |
} | |
buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, symbolStack); | |
} | |
writePunctuation(writer, 18); | |
} | |
function buildTypePredicateDisplay(predicate, writer, enclosingDeclaration, flags, symbolStack) { | |
if (ts.isIdentifierTypePredicate(predicate)) { | |
writer.writeParameter(predicate.parameterName); | |
} | |
else { | |
writeKeyword(writer, 97); | |
} | |
writeSpace(writer); | |
writeKeyword(writer, 124); | |
writeSpace(writer); | |
buildTypeDisplay(predicate.type, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) { | |
if (flags & 8) { | |
writeSpace(writer); | |
writePunctuation(writer, 34); | |
} | |
else { | |
writePunctuation(writer, 54); | |
} | |
writeSpace(writer); | |
if (signature.typePredicate) { | |
buildTypePredicateDisplay(signature.typePredicate, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
else { | |
var returnType = getReturnTypeOfSignature(signature); | |
buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
} | |
function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind, symbolStack) { | |
if (kind === 1) { | |
writeKeyword(writer, 92); | |
writeSpace(writer); | |
} | |
if (signature.target && (flags & 32)) { | |
buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration); | |
} | |
else { | |
buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); | |
buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); | |
} | |
return _displayBuilder || (_displayBuilder = { | |
buildSymbolDisplay: buildSymbolDisplay, | |
buildTypeDisplay: buildTypeDisplay, | |
buildTypeParameterDisplay: buildTypeParameterDisplay, | |
buildTypePredicateDisplay: buildTypePredicateDisplay, | |
buildParameterDisplay: buildParameterDisplay, | |
buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters, | |
buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters, | |
buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol, | |
buildSignatureDisplay: buildSignatureDisplay, | |
buildReturnTypeDisplay: buildReturnTypeDisplay | |
}); | |
} | |
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 168: | |
return isDeclarationVisible(node.parent.parent); | |
case 217: | |
if (ts.isBindingPattern(node.name) && | |
!node.name.elements.length) { | |
return false; | |
} | |
case 224: | |
case 220: | |
case 221: | |
case 222: | |
case 219: | |
case 223: | |
case 228: | |
if (ts.isExternalModuleAugmentation(node)) { | |
return true; | |
} | |
var parent_7 = getDeclarationContainer(node); | |
if (!(ts.getCombinedNodeFlags(node) & 1) && | |
!(node.kind !== 228 && parent_7.kind !== 255 && ts.isInAmbientContext(parent_7))) { | |
return isGlobalSourceFile(parent_7); | |
} | |
return isDeclarationVisible(parent_7); | |
case 144: | |
case 143: | |
case 148: | |
case 149: | |
case 146: | |
case 145: | |
if (node.flags & (8 | 16)) { | |
return false; | |
} | |
case 147: | |
case 151: | |
case 150: | |
case 152: | |
case 141: | |
case 225: | |
case 155: | |
case 156: | |
case 158: | |
case 154: | |
case 159: | |
case 160: | |
case 161: | |
case 162: | |
case 163: | |
return isDeclarationVisible(node.parent); | |
case 230: | |
case 231: | |
case 233: | |
return false; | |
case 140: | |
case 255: | |
return true; | |
case 234: | |
return false; | |
default: | |
return false; | |
} | |
} | |
} | |
function collectLinkedAliases(node) { | |
var exportSymbol; | |
if (node.parent && node.parent.kind === 234) { | |
exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536 | 8388608, ts.Diagnostics.Cannot_find_name_0, node); | |
} | |
else if (node.parent.kind === 237) { | |
var exportSpecifier = node.parent; | |
exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? | |
getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : | |
resolveEntityName(exportSpecifier.propertyName || exportSpecifier.name, 107455 | 793056 | 1536 | 8388608); | |
} | |
var result = []; | |
if (exportSymbol) { | |
buildVisibleNodeList(exportSymbol.declarations); | |
} | |
return result; | |
function buildVisibleNodeList(declarations) { | |
ts.forEach(declarations, function (declaration) { | |
getNodeLinks(declaration).isVisible = true; | |
var resultNode = getAnyImportSyntax(declaration) || declaration; | |
if (!ts.contains(result, resultNode)) { | |
result.push(resultNode); | |
} | |
if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { | |
var internalModuleReference = declaration.moduleReference; | |
var firstIdentifier = getFirstIdentifier(internalModuleReference); | |
var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, firstIdentifier); | |
if (importSymbol) { | |
buildVisibleNodeList(importSymbol.declarations); | |
} | |
} | |
}); | |
} | |
} | |
function pushTypeResolution(target, propertyName) { | |
var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName); | |
if (resolutionCycleStartIndex >= 0) { | |
var length_2 = resolutionTargets.length; | |
for (var i = resolutionCycleStartIndex; i < length_2; i++) { | |
resolutionResults[i] = false; | |
} | |
return false; | |
} | |
resolutionTargets.push(target); | |
resolutionResults.push(true); | |
resolutionPropertyNames.push(propertyName); | |
return true; | |
} | |
function findResolutionCycleStartIndex(target, propertyName) { | |
for (var i = resolutionTargets.length - 1; i >= 0; i--) { | |
if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) { | |
return -1; | |
} | |
if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) { | |
return i; | |
} | |
} | |
return -1; | |
} | |
function hasType(target, propertyName) { | |
if (propertyName === 0) { | |
return getSymbolLinks(target).type; | |
} | |
if (propertyName === 2) { | |
return getSymbolLinks(target).declaredType; | |
} | |
if (propertyName === 1) { | |
ts.Debug.assert(!!(target.flags & 1024)); | |
return target.resolvedBaseConstructorType; | |
} | |
if (propertyName === 3) { | |
return target.resolvedReturnType; | |
} | |
ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName); | |
} | |
function popTypeResolution() { | |
resolutionTargets.pop(); | |
resolutionPropertyNames.pop(); | |
return resolutionResults.pop(); | |
} | |
function getDeclarationContainer(node) { | |
node = ts.getRootDeclaration(node); | |
while (node) { | |
switch (node.kind) { | |
case 217: | |
case 218: | |
case 233: | |
case 232: | |
case 231: | |
case 230: | |
node = node.parent; | |
break; | |
default: | |
return node.parent; | |
} | |
} | |
} | |
function getTypeOfPrototypeProperty(prototype) { | |
var classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); | |
return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; | |
} | |
function getTypeOfPropertyOfType(type, name) { | |
var prop = getPropertyOfType(type, name); | |
return prop ? getTypeOfSymbol(prop) : undefined; | |
} | |
function isTypeAny(type) { | |
return type && (type.flags & 1) !== 0; | |
} | |
function getTypeForBindingElementParent(node) { | |
var symbol = getSymbolOfNode(node); | |
return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node); | |
} | |
function getTextOfPropertyName(name) { | |
switch (name.kind) { | |
case 69: | |
return name.text; | |
case 9: | |
case 8: | |
return name.text; | |
case 139: | |
if (ts.isStringOrNumericLiteral(name.expression.kind)) { | |
return name.expression.text; | |
} | |
} | |
return undefined; | |
} | |
function isComputedNonLiteralName(name) { | |
return name.kind === 139 && !ts.isStringOrNumericLiteral(name.expression.kind); | |
} | |
function getTypeForBindingElement(declaration) { | |
var pattern = declaration.parent; | |
var parentType = getTypeForBindingElementParent(pattern.parent); | |
if (parentType === unknownType) { | |
return unknownType; | |
} | |
if (!parentType || isTypeAny(parentType)) { | |
if (declaration.initializer) { | |
return checkExpressionCached(declaration.initializer); | |
} | |
return parentType; | |
} | |
var type; | |
if (pattern.kind === 166) { | |
var name_10 = declaration.propertyName || declaration.name; | |
if (isComputedNonLiteralName(name_10)) { | |
return anyType; | |
} | |
if (declaration.initializer) { | |
getContextualType(declaration.initializer); | |
} | |
var text = getTextOfPropertyName(name_10); | |
type = getTypeOfPropertyOfType(parentType, text) || | |
isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) || | |
getIndexTypeOfType(parentType, 0); | |
if (!type) { | |
error(name_10, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_10)); | |
return unknownType; | |
} | |
} | |
else { | |
var elementType = checkIteratedTypeOrElementType(parentType, pattern, false); | |
if (!declaration.dotDotDotToken) { | |
var propName = "" + ts.indexOf(pattern.elements, declaration); | |
type = isTupleLikeType(parentType) | |
? getTypeOfPropertyOfType(parentType, propName) | |
: elementType; | |
if (!type) { | |
if (isTupleType(parentType)) { | |
error(declaration, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(parentType), parentType.elementTypes.length, pattern.elements.length); | |
} | |
else { | |
error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName); | |
} | |
return unknownType; | |
} | |
} | |
else { | |
type = createArrayType(elementType); | |
} | |
} | |
if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32)) { | |
type = getTypeWithFacts(type, 131072); | |
} | |
return type; | |
} | |
function getTypeForVariableLikeDeclarationFromJSDocComment(declaration) { | |
var jsDocType = getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration); | |
if (jsDocType) { | |
return getTypeFromTypeNode(jsDocType); | |
} | |
} | |
function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration) { | |
var typeTag = ts.getJSDocTypeTag(declaration); | |
if (typeTag && typeTag.typeExpression) { | |
return typeTag.typeExpression.type; | |
} | |
if (declaration.kind === 217 && | |
declaration.parent.kind === 218 && | |
declaration.parent.parent.kind === 199) { | |
var annotation = ts.getJSDocTypeTag(declaration.parent.parent); | |
if (annotation && annotation.typeExpression) { | |
return annotation.typeExpression.type; | |
} | |
} | |
else if (declaration.kind === 141) { | |
var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); | |
if (paramTag && paramTag.typeExpression) { | |
return paramTag.typeExpression.type; | |
} | |
} | |
return undefined; | |
} | |
function getTypeForVariableLikeDeclaration(declaration) { | |
if (declaration.flags & 134217728) { | |
var type = getTypeForVariableLikeDeclarationFromJSDocComment(declaration); | |
if (type && type !== unknownType) { | |
return type; | |
} | |
} | |
if (declaration.parent.parent.kind === 206) { | |
return stringType; | |
} | |
if (declaration.parent.parent.kind === 207) { | |
return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType; | |
} | |
if (ts.isBindingPattern(declaration.parent)) { | |
return getTypeForBindingElement(declaration); | |
} | |
if (declaration.type) { | |
var type = getTypeFromTypeNode(declaration.type); | |
return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; | |
} | |
if (declaration.kind === 141) { | |
var func = declaration.parent; | |
if (func.kind === 149 && !ts.hasDynamicName(func)) { | |
var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 148); | |
if (getter) { | |
return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); | |
} | |
} | |
var type = declaration.symbol.name === "this" | |
? getContextuallyTypedThisType(func) | |
: getContextuallyTypedParameterType(declaration); | |
if (type) { | |
return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; | |
} | |
} | |
if (declaration.initializer) { | |
return checkExpressionCached(declaration.initializer); | |
} | |
if (declaration.kind === 253) { | |
return checkIdentifier(declaration.name); | |
} | |
if (ts.isBindingPattern(declaration.name)) { | |
return getTypeFromBindingPattern(declaration.name, false); | |
} | |
return undefined; | |
} | |
function getTypeFromBindingElement(element, includePatternInType) { | |
if (element.initializer) { | |
var type = checkExpressionCached(element.initializer); | |
reportErrorsFromWidening(element, type); | |
return getWidenedType(type); | |
} | |
if (ts.isBindingPattern(element.name)) { | |
return getTypeFromBindingPattern(element.name, includePatternInType); | |
} | |
if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { | |
reportImplicitAnyError(element, anyType); | |
} | |
return anyType; | |
} | |
function getTypeFromObjectBindingPattern(pattern, includePatternInType) { | |
var members = {}; | |
var hasComputedProperties = false; | |
ts.forEach(pattern.elements, function (e) { | |
var name = e.propertyName || e.name; | |
if (isComputedNonLiteralName(name)) { | |
hasComputedProperties = true; | |
return; | |
} | |
var text = getTextOfPropertyName(name); | |
var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0); | |
var symbol = createSymbol(flags, text); | |
symbol.type = getTypeFromBindingElement(e, includePatternInType); | |
symbol.bindingElement = e; | |
members[symbol.name] = symbol; | |
}); | |
var result = createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined); | |
if (includePatternInType) { | |
result.pattern = pattern; | |
} | |
if (hasComputedProperties) { | |
result.flags |= 67108864; | |
} | |
return result; | |
} | |
function getTypeFromArrayBindingPattern(pattern, includePatternInType) { | |
var elements = pattern.elements; | |
if (elements.length === 0 || elements[elements.length - 1].dotDotDotToken) { | |
return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; | |
} | |
var elementTypes = ts.map(elements, function (e) { return e.kind === 192 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); | |
if (includePatternInType) { | |
var result = createNewTupleType(elementTypes); | |
result.pattern = pattern; | |
return result; | |
} | |
return createTupleType(elementTypes); | |
} | |
function getTypeFromBindingPattern(pattern, includePatternInType) { | |
return pattern.kind === 166 | |
? getTypeFromObjectBindingPattern(pattern, includePatternInType) | |
: getTypeFromArrayBindingPattern(pattern, includePatternInType); | |
} | |
function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) { | |
var type = getTypeForVariableLikeDeclaration(declaration); | |
if (type) { | |
if (reportErrors) { | |
reportErrorsFromWidening(declaration, type); | |
} | |
if (declaration.kind === 252) { | |
return type; | |
} | |
return getWidenedType(type); | |
} | |
type = declaration.dotDotDotToken ? anyArrayType : anyType; | |
if (reportErrors && compilerOptions.noImplicitAny) { | |
if (!declarationBelongsToPrivateAmbientMember(declaration)) { | |
reportImplicitAnyError(declaration, type); | |
} | |
} | |
return type; | |
} | |
function declarationBelongsToPrivateAmbientMember(declaration) { | |
var root = ts.getRootDeclaration(declaration); | |
var memberDeclaration = root.kind === 141 ? root.parent : root; | |
return isPrivateWithinAmbient(memberDeclaration); | |
} | |
function getTypeOfVariableOrParameterOrProperty(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
if (symbol.flags & 134217728) { | |
return links.type = getTypeOfPrototypeProperty(symbol); | |
} | |
var declaration = symbol.valueDeclaration; | |
if (declaration.parent.kind === 251) { | |
return links.type = anyType; | |
} | |
if (declaration.kind === 234) { | |
return links.type = checkExpression(declaration.expression); | |
} | |
if (declaration.kind === 186) { | |
return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); | |
} | |
if (declaration.kind === 171) { | |
if (declaration.parent.kind === 186) { | |
return links.type = checkExpressionCached(declaration.parent.right); | |
} | |
} | |
if (!pushTypeResolution(symbol, 0)) { | |
return unknownType; | |
} | |
var type = getWidenedTypeForVariableLikeDeclaration(declaration, true); | |
if (!popTypeResolution()) { | |
if (symbol.valueDeclaration.type) { | |
type = unknownType; | |
error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); | |
} | |
else { | |
type = anyType; | |
if (compilerOptions.noImplicitAny) { | |
error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol)); | |
} | |
} | |
} | |
links.type = type; | |
} | |
return links.type; | |
} | |
function getAnnotatedAccessorType(accessor) { | |
if (accessor) { | |
if (accessor.kind === 148) { | |
return accessor.type && getTypeFromTypeNode(accessor.type); | |
} | |
else { | |
var setterTypeAnnotation = ts.getSetAccessorTypeAnnotationNode(accessor); | |
return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); | |
} | |
} | |
return undefined; | |
} | |
function getTypeOfAccessors(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
var getter = ts.getDeclarationOfKind(symbol, 148); | |
var setter = ts.getDeclarationOfKind(symbol, 149); | |
if (getter && getter.flags & 134217728) { | |
var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); | |
if (jsDocType) { | |
return links.type = jsDocType; | |
} | |
} | |
if (!pushTypeResolution(symbol, 0)) { | |
return unknownType; | |
} | |
var type = void 0; | |
var getterReturnType = getAnnotatedAccessorType(getter); | |
if (getterReturnType) { | |
type = getterReturnType; | |
} | |
else { | |
var setterParameterType = getAnnotatedAccessorType(setter); | |
if (setterParameterType) { | |
type = setterParameterType; | |
} | |
else { | |
if (getter && getter.body) { | |
type = getReturnTypeFromBody(getter); | |
} | |
else { | |
if (compilerOptions.noImplicitAny) { | |
error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol)); | |
} | |
type = anyType; | |
} | |
} | |
} | |
if (!popTypeResolution()) { | |
type = anyType; | |
if (compilerOptions.noImplicitAny) { | |
var getter_1 = ts.getDeclarationOfKind(symbol, 148); | |
error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol)); | |
} | |
} | |
links.type = type; | |
} | |
return links.type; | |
} | |
function getTypeOfFuncClassEnumModule(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
links.type = createObjectType(65536, symbol); | |
} | |
return links.type; | |
} | |
function getTypeOfEnumMember(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); | |
} | |
return links.type; | |
} | |
function getTypeOfAlias(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
var targetSymbol = resolveAlias(symbol); | |
links.type = targetSymbol.flags & 107455 | |
? getTypeOfSymbol(targetSymbol) | |
: unknownType; | |
} | |
return links.type; | |
} | |
function getTypeOfInstantiatedSymbol(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.type) { | |
links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper); | |
} | |
return links.type; | |
} | |
function getTypeOfSymbol(symbol) { | |
if (symbol.flags & 16777216) { | |
return getTypeOfInstantiatedSymbol(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 & 8388608) { | |
return getTypeOfAlias(symbol); | |
} | |
return unknownType; | |
} | |
function getTargetType(type) { | |
return type.flags & 4096 ? type.target : type; | |
} | |
function hasBaseType(type, checkBase) { | |
return check(type); | |
function check(type) { | |
var target = getTargetType(type); | |
return target === checkBase || ts.forEach(getBaseTypes(target), check); | |
} | |
} | |
function appendTypeParameters(typeParameters, declarations) { | |
for (var _i = 0, declarations_2 = declarations; _i < declarations_2.length; _i++) { | |
var declaration = declarations_2[_i]; | |
var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(declaration)); | |
if (!typeParameters) { | |
typeParameters = [tp]; | |
} | |
else if (!ts.contains(typeParameters, tp)) { | |
typeParameters.push(tp); | |
} | |
} | |
return typeParameters; | |
} | |
function appendOuterTypeParameters(typeParameters, node) { | |
while (true) { | |
node = node.parent; | |
if (!node) { | |
return typeParameters; | |
} | |
if (node.kind === 220 || node.kind === 191 || | |
node.kind === 219 || node.kind === 178 || | |
node.kind === 146 || node.kind === 179) { | |
var declarations = node.typeParameters; | |
if (declarations) { | |
return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); | |
} | |
} | |
} | |
} | |
function getOuterTypeParametersOfClassOrInterface(symbol) { | |
var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 221); | |
return appendOuterTypeParameters(undefined, declaration); | |
} | |
function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { | |
var result; | |
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { | |
var node = _a[_i]; | |
if (node.kind === 221 || node.kind === 220 || | |
node.kind === 191 || node.kind === 222) { | |
var declaration = node; | |
if (declaration.typeParameters) { | |
result = appendTypeParameters(result, declaration.typeParameters); | |
} | |
} | |
} | |
return result; | |
} | |
function getTypeParametersOfClassOrInterface(symbol) { | |
return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); | |
} | |
function isConstructorType(type) { | |
return type.flags & 80896 && getSignaturesOfType(type, 1).length > 0; | |
} | |
function getBaseTypeNodeOfClass(type) { | |
return ts.getClassExtendsHeritageClauseElement(type.symbol.valueDeclaration); | |
} | |
function getConstructorsForTypeArguments(type, typeArgumentNodes) { | |
var typeArgCount = typeArgumentNodes ? typeArgumentNodes.length : 0; | |
return ts.filter(getSignaturesOfType(type, 1), function (sig) { return (sig.typeParameters ? sig.typeParameters.length : 0) === typeArgCount; }); | |
} | |
function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes) { | |
var signatures = getConstructorsForTypeArguments(type, typeArgumentNodes); | |
if (typeArgumentNodes) { | |
var typeArguments_1 = ts.map(typeArgumentNodes, getTypeFromTypeNode); | |
signatures = ts.map(signatures, function (sig) { return getSignatureInstantiation(sig, typeArguments_1); }); | |
} | |
return signatures; | |
} | |
function getBaseConstructorTypeOfClass(type) { | |
if (!type.resolvedBaseConstructorType) { | |
var baseTypeNode = getBaseTypeNodeOfClass(type); | |
if (!baseTypeNode) { | |
return type.resolvedBaseConstructorType = undefinedType; | |
} | |
if (!pushTypeResolution(type, 1)) { | |
return unknownType; | |
} | |
var baseConstructorType = checkExpression(baseTypeNode.expression); | |
if (baseConstructorType.flags & 80896) { | |
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 = unknownType; | |
} | |
if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) { | |
error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); | |
return type.resolvedBaseConstructorType = unknownType; | |
} | |
type.resolvedBaseConstructorType = baseConstructorType; | |
} | |
return type.resolvedBaseConstructorType; | |
} | |
function getBaseTypes(type) { | |
var isClass = type.symbol.flags & 32; | |
var isInterface = type.symbol.flags & 64; | |
if (!type.resolvedBaseTypes) { | |
if (!isClass && !isInterface) { | |
ts.Debug.fail("type must be class or interface"); | |
} | |
if (isClass) { | |
resolveBaseTypesOfClass(type); | |
} | |
if (isInterface) { | |
resolveBaseTypesOfInterface(type); | |
} | |
} | |
return type.resolvedBaseTypes; | |
} | |
function resolveBaseTypesOfClass(type) { | |
type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; | |
var baseConstructorType = getBaseConstructorTypeOfClass(type); | |
if (!(baseConstructorType.flags & 80896)) { | |
return; | |
} | |
var baseTypeNode = getBaseTypeNodeOfClass(type); | |
var baseType; | |
var originalBaseType = baseConstructorType && baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : undefined; | |
if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 && | |
areAllOuterTypeParametersApplied(originalBaseType)) { | |
baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol); | |
} | |
else { | |
var constructors = getInstantiatedConstructorsForTypeArguments(baseConstructorType, baseTypeNode.typeArguments); | |
if (!constructors.length) { | |
error(baseTypeNode.expression, ts.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); | |
return; | |
} | |
baseType = getReturnTypeOfSignature(constructors[0]); | |
} | |
if (baseType === unknownType) { | |
return; | |
} | |
if (!(getTargetType(baseType).flags & (1024 | 2048))) { | |
error(baseTypeNode.expression, ts.Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType)); | |
return; | |
} | |
if (type === baseType || hasBaseType(baseType, type)) { | |
error(type.symbol.valueDeclaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); | |
return; | |
} | |
if (type.resolvedBaseTypes === emptyArray) { | |
type.resolvedBaseTypes = [baseType]; | |
} | |
else { | |
type.resolvedBaseTypes.push(baseType); | |
} | |
} | |
function areAllOuterTypeParametersApplied(type) { | |
var outerTypeParameters = type.outerTypeParameters; | |
if (outerTypeParameters) { | |
var last = outerTypeParameters.length - 1; | |
var typeArguments = type.typeArguments; | |
return outerTypeParameters[last].symbol !== typeArguments[last].symbol; | |
} | |
return true; | |
} | |
function resolveBaseTypesOfInterface(type) { | |
type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; | |
for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { | |
var declaration = _a[_i]; | |
if (declaration.kind === 221 && ts.getInterfaceBaseTypeNodes(declaration)) { | |
for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { | |
var node = _c[_b]; | |
var baseType = getTypeFromTypeNode(node); | |
if (baseType !== unknownType) { | |
if (getTargetType(baseType).flags & (1024 | 2048)) { | |
if (type !== baseType && !hasBaseType(baseType, type)) { | |
if (type.resolvedBaseTypes === emptyArray) { | |
type.resolvedBaseTypes = [baseType]; | |
} | |
else { | |
type.resolvedBaseTypes.push(baseType); | |
} | |
} | |
else { | |
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); | |
} | |
} | |
else { | |
error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); | |
} | |
} | |
} | |
} | |
} | |
} | |
function isIndependentInterface(symbol) { | |
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { | |
var declaration = _a[_i]; | |
if (declaration.kind === 221) { | |
if (declaration.flags & 16384) { | |
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.isSupportedExpressionWithTypeArguments(node)) { | |
var baseSymbol = resolveEntityName(node.expression, 793056, true); | |
if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { | |
return false; | |
} | |
} | |
} | |
} | |
} | |
} | |
return true; | |
} | |
function getDeclaredTypeOfClassOrInterface(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.declaredType) { | |
var kind = symbol.flags & 32 ? 1024 : 2048; | |
var type = links.declaredType = createObjectType(kind, symbol); | |
var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol); | |
var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); | |
if (outerTypeParameters || localTypeParameters || kind === 1024 || !isIndependentInterface(symbol)) { | |
type.flags |= 4096; | |
type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters); | |
type.outerTypeParameters = outerTypeParameters; | |
type.localTypeParameters = localTypeParameters; | |
type.instantiations = {}; | |
type.instantiations[getTypeListId(type.typeParameters)] = type; | |
type.target = type; | |
type.typeArguments = type.typeParameters; | |
type.thisType = createType(512 | 33554432); | |
type.thisType.symbol = symbol; | |
type.thisType.constraint = type; | |
} | |
} | |
return links.declaredType; | |
} | |
function getDeclaredTypeOfTypeAlias(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.declaredType) { | |
if (!pushTypeResolution(symbol, 2)) { | |
return unknownType; | |
} | |
var declaration = ts.getDeclarationOfKind(symbol, 222); | |
var type = getTypeFromTypeNode(declaration.type); | |
if (popTypeResolution()) { | |
links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); | |
if (links.typeParameters) { | |
links.instantiations = {}; | |
links.instantiations[getTypeListId(links.typeParameters)] = type; | |
} | |
} | |
else { | |
type = unknownType; | |
error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); | |
} | |
links.declaredType = type; | |
} | |
return links.declaredType; | |
} | |
function getDeclaredTypeOfEnum(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.declaredType) { | |
var type = createType(128); | |
type.symbol = symbol; | |
links.declaredType = type; | |
} | |
return links.declaredType; | |
} | |
function getDeclaredTypeOfTypeParameter(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.declaredType) { | |
var type = createType(512); | |
type.symbol = symbol; | |
if (!ts.getDeclarationOfKind(symbol, 140).constraint) { | |
type.constraint = noConstraintType; | |
} | |
links.declaredType = type; | |
} | |
return links.declaredType; | |
} | |
function getDeclaredTypeOfAlias(symbol) { | |
var links = getSymbolLinks(symbol); | |
if (!links.declaredType) { | |
links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol)); | |
} | |
return links.declaredType; | |
} | |
function getDeclaredTypeOfSymbol(symbol) { | |
ts.Debug.assert((symbol.flags & 16777216) === 0); | |
if (symbol.flags & (32 | 64)) { | |
return getDeclaredTypeOfClassOrInterface(symbol); | |
} | |
if (symbol.flags & 524288) { | |
return getDeclaredTypeOfTypeAlias(symbol); | |
} | |
if (symbol.flags & 384) { | |
return getDeclaredTypeOfEnum(symbol); | |
} | |
if (symbol.flags & 262144) { | |
return getDeclaredTypeOfTypeParameter(symbol); | |
} | |
if (symbol.flags & 8388608) { | |
return getDeclaredTypeOfAlias(symbol); | |
} | |
return unknownType; | |
} | |
function isIndependentTypeReference(node) { | |
if (node.typeArguments) { | |
for (var _i = 0, _a = node.typeArguments; _i < _a.length; _i++) { | |
var typeNode = _a[_i]; | |
if (!isIndependentType(typeNode)) { | |
return false; | |
} | |
} | |
} | |
return true; | |
} | |
function isIndependentType(node) { | |
switch (node.kind) { | |
case 117: | |
case 131: | |
case 129: | |
case 120: | |
case 132: | |
case 103: | |
case 134: | |
case 93: | |
case 165: | |
return true; | |
case 159: | |
return isIndependentType(node.elementType); | |
case 154: | |
return isIndependentTypeReference(node); | |
} | |
return false; | |
} | |
function isIndependentVariableLikeDeclaration(node) { | |
return node.type && isIndependentType(node.type) || !node.type && !node.initializer; | |
} | |
function isIndependentFunctionLikeDeclaration(node) { | |
if (node.kind !== 147 && (!node.type || !isIndependentType(node.type))) { | |
return false; | |
} | |
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { | |
var parameter = _a[_i]; | |
if (!isIndependentVariableLikeDeclaration(parameter)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
function isIndependentMember(symbol) { | |
if (symbol.declarations && symbol.declarations.length === 1) { | |
var declaration = symbol.declarations[0]; | |
if (declaration) { | |
switch (declaration.kind) { | |
case 144: | |
case 143: | |
return isIndependentVariableLikeDeclaration(declaration); | |
case 146: | |
case 145: | |
case 147: | |
return isIndependentFunctionLikeDeclaration(declaration); | |
} | |
} | |
} | |
return false; | |
} | |
function createSymbolTable(symbols) { | |
var result = {}; | |
for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) { | |
var symbol = symbols_1[_i]; | |
result[symbol.name] = symbol; | |
} | |
return result; | |
} | |
function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) { | |
var result = {}; | |
for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) { | |
var symbol = symbols_2[_i]; | |
result[symbol.name] = mappingThisOnly && isIndependentMember(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 (!ts.hasProperty(symbols, s.name)) { | |
symbols[s.name] = s; | |
} | |
} | |
} | |
function resolveDeclaredMembers(type) { | |
if (!type.declaredProperties) { | |
var symbol = type.symbol; | |
type.declaredProperties = getNamedMembers(symbol.members); | |
type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); | |
type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); | |
type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0); | |
type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1); | |
} | |
return type; | |
} | |
function getTypeWithThisArgument(type, thisArgument) { | |
if (type.flags & 4096) { | |
return createTypeReference(type.target, ts.concatenate(type.typeArguments, [thisArgument || type.target.thisType])); | |
} | |
return type; | |
} | |
function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) { | |
var mapper = identityMapper; | |
var members = source.symbol.members; | |
var callSignatures = source.declaredCallSignatures; | |
var constructSignatures = source.declaredConstructSignatures; | |
var stringIndexInfo = source.declaredStringIndexInfo; | |
var numberIndexInfo = source.declaredNumberIndexInfo; | |
if (!ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) { | |
mapper = createTypeMapper(typeParameters, typeArguments); | |
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1); | |
callSignatures = instantiateList(source.declaredCallSignatures, mapper, instantiateSignature); | |
constructSignatures = instantiateList(source.declaredConstructSignatures, mapper, instantiateSignature); | |
stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper); | |
numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper); | |
} | |
var baseTypes = getBaseTypes(source); | |
if (baseTypes.length) { | |
if (members === source.symbol.members) { | |
members = createSymbolTable(source.declaredProperties); | |
} | |
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, getPropertiesOfObjectType(instantiatedBaseType)); | |
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0)); | |
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1)); | |
stringIndexInfo = stringIndexInfo || getIndexInfoOfType(instantiatedBaseType, 0); | |
numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1); | |
} | |
} | |
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
function resolveClassOrInterfaceMembers(type) { | |
resolveObjectTypeMembers(type, resolveDeclaredMembers(type), emptyArray, emptyArray); | |
} | |
function resolveTypeReferenceMembers(type) { | |
var source = resolveDeclaredMembers(type.target); | |
var typeParameters = ts.concatenate(source.typeParameters, [source.thisType]); | |
var typeArguments = type.typeArguments && type.typeArguments.length === typeParameters.length ? | |
type.typeArguments : ts.concatenate(type.typeArguments, [type]); | |
resolveObjectTypeMembers(type, source, typeParameters, typeArguments); | |
} | |
function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { | |
var sig = new Signature(checker); | |
sig.declaration = declaration; | |
sig.typeParameters = typeParameters; | |
sig.parameters = parameters; | |
sig.thisType = thisType; | |
sig.resolvedReturnType = resolvedReturnType; | |
sig.typePredicate = typePredicate; | |
sig.minArgumentCount = minArgumentCount; | |
sig.hasRestParameter = hasRestParameter; | |
sig.hasStringLiterals = hasStringLiterals; | |
return sig; | |
} | |
function cloneSignature(sig) { | |
return createSignature(sig.declaration, sig.typeParameters, sig.thisType, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); | |
} | |
function getDefaultConstructSignatures(classType) { | |
var baseConstructorType = getBaseConstructorTypeOfClass(classType); | |
var baseSignatures = getSignaturesOfType(baseConstructorType, 1); | |
if (baseSignatures.length === 0) { | |
return [createSignature(undefined, classType.localTypeParameters, undefined, emptyArray, classType, undefined, 0, false, false)]; | |
} | |
var baseTypeNode = getBaseTypeNodeOfClass(classType); | |
var typeArguments = ts.map(baseTypeNode.typeArguments, getTypeFromTypeNode); | |
var typeArgCount = typeArguments ? typeArguments.length : 0; | |
var result = []; | |
for (var _i = 0, baseSignatures_1 = baseSignatures; _i < baseSignatures_1.length; _i++) { | |
var baseSig = baseSignatures_1[_i]; | |
var typeParamCount = baseSig.typeParameters ? baseSig.typeParameters.length : 0; | |
if (typeParamCount === typeArgCount) { | |
var sig = typeParamCount ? getSignatureInstantiation(baseSig, typeArguments) : cloneSignature(baseSig); | |
sig.typeParameters = classType.localTypeParameters; | |
sig.resolvedReturnType = classType; | |
result.push(sig); | |
} | |
} | |
return result; | |
} | |
function createTupleTypeMemberSymbols(memberTypes) { | |
var members = {}; | |
for (var i = 0; i < memberTypes.length; i++) { | |
var symbol = createSymbol(4 | 67108864, "" + i); | |
symbol.type = memberTypes[i]; | |
members[i] = symbol; | |
} | |
return members; | |
} | |
function resolveTupleTypeMembers(type) { | |
var arrayElementType = getUnionType(type.elementTypes, true); | |
var arrayType = resolveStructuredTypeMembers(createTypeFromGenericGlobalType(globalArrayType, [arrayElementType, type])); | |
var members = createTupleTypeMemberSymbols(type.elementTypes); | |
addInheritedMembers(members, arrayType.properties); | |
setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexInfo, arrayType.numberIndexInfo); | |
} | |
function findMatchingSignature(signatureList, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes) { | |
for (var _i = 0, signatureList_1 = signatureList; _i < signatureList_1.length; _i++) { | |
var s = signatureList_1[_i]; | |
if (compareSignaturesIdentical(s, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypesIdentical)) { | |
return s; | |
} | |
} | |
} | |
function findMatchingSignatures(signatureLists, signature, listIndex) { | |
if (signature.typeParameters) { | |
if (listIndex > 0) { | |
return undefined; | |
} | |
for (var i = 1; i < signatureLists.length; i++) { | |
if (!findMatchingSignature(signatureLists[i], signature, false, false, false)) { | |
return undefined; | |
} | |
} | |
return [signature]; | |
} | |
var result = undefined; | |
for (var i = 0; i < signatureLists.length; i++) { | |
var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, true, true, true); | |
if (!match) { | |
return undefined; | |
} | |
if (!ts.contains(result, match)) { | |
(result || (result = [])).push(match); | |
} | |
} | |
return result; | |
} | |
function getUnionSignatures(types, kind) { | |
var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); }); | |
var result = undefined; | |
for (var i = 0; i < signatureLists.length; i++) { | |
for (var _i = 0, _a = signatureLists[i]; _i < _a.length; _i++) { | |
var signature = _a[_i]; | |
if (!result || !findMatchingSignature(result, signature, false, true, true)) { | |
var unionSignatures = findMatchingSignatures(signatureLists, signature, i); | |
if (unionSignatures) { | |
var s = signature; | |
if (unionSignatures.length > 1) { | |
s = cloneSignature(signature); | |
if (ts.forEach(unionSignatures, function (sig) { return sig.thisType; })) { | |
s.thisType = getUnionType(ts.map(unionSignatures, function (sig) { return sig.thisType || anyType; })); | |
} | |
s.resolvedReturnType = undefined; | |
s.unionSignatures = unionSignatures; | |
} | |
(result || (result = [])).push(s); | |
} | |
} | |
} | |
} | |
return result || emptyArray; | |
} | |
function getUnionIndexInfo(types, kind) { | |
var indexTypes = []; | |
var isAnyReadonly = false; | |
for (var _i = 0, types_1 = types; _i < types_1.length; _i++) { | |
var type = types_1[_i]; | |
var indexInfo = getIndexInfoOfType(type, kind); | |
if (!indexInfo) { | |
return undefined; | |
} | |
indexTypes.push(indexInfo.type); | |
isAnyReadonly = isAnyReadonly || indexInfo.isReadonly; | |
} | |
return createIndexInfo(getUnionType(indexTypes), isAnyReadonly); | |
} | |
function resolveUnionTypeMembers(type) { | |
var callSignatures = getUnionSignatures(type.types, 0); | |
var constructSignatures = getUnionSignatures(type.types, 1); | |
var stringIndexInfo = getUnionIndexInfo(type.types, 0); | |
var numberIndexInfo = getUnionIndexInfo(type.types, 1); | |
setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
function intersectTypes(type1, type2) { | |
return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]); | |
} | |
function intersectIndexInfos(info1, info2) { | |
return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly); | |
} | |
function resolveIntersectionTypeMembers(type) { | |
var callSignatures = emptyArray; | |
var constructSignatures = emptyArray; | |
var stringIndexInfo = undefined; | |
var numberIndexInfo = undefined; | |
for (var _i = 0, _a = type.types; _i < _a.length; _i++) { | |
var t = _a[_i]; | |
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0)); | |
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(t, 1)); | |
stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0)); | |
numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1)); | |
} | |
setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
function resolveAnonymousTypeMembers(type) { | |
var symbol = type.symbol; | |
if (type.target) { | |
var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false); | |
var callSignatures = instantiateList(getSignaturesOfType(type.target, 0), type.mapper, instantiateSignature); | |
var constructSignatures = instantiateList(getSignaturesOfType(type.target, 1), type.mapper, instantiateSignature); | |
var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0), type.mapper); | |
var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1), type.mapper); | |
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
else if (symbol.flags & 2048) { | |
var members = symbol.members; | |
var callSignatures = getSignaturesOfSymbol(members["__call"]); | |
var constructSignatures = getSignaturesOfSymbol(members["__new"]); | |
var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0); | |
var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1); | |
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); | |
} | |
else { | |
var members = emptySymbols; | |
var constructSignatures = emptyArray; | |
if (symbol.flags & 1952) { | |
members = getExportsOfSymbol(symbol); | |
} | |
if (symbol.flags & 32) { | |
var classType = getDeclaredTypeOfClassOrInterface(symbol); | |
constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); | |
if (!constructSignatures.length) { | |
constructSignatures = getDefaultConstructSignatures(classType); | |
} | |
var baseConstructorType = getBaseConstructorTypeOfClass(classType); | |
if (baseConstructorType.flags & 80896) { | |
members = createSymbolTable(getNamedMembers(members)); | |
addInheritedMembers(members, getPropertiesOfObjectType(baseConstructorType)); | |
} | |
} | |
var numberIndexInfo = symbol.flags & 384 ? enumNumberIndexInfo : undefined; | |
setObjectTypeMembers(type, members, emptyArray, constructSignatures, undefined, numberIndexInfo); | |
if (symbol.flags & (16 | 8192)) { | |
type.callSignatures = getSignaturesOfSymbol(symbol); | |
} | |
} | |
} | |
function resolveStructuredTypeMembers(type) { | |
if (!type.members) { | |
if (type.flags & 4096) { | |
resolveTypeReferenceMembers(type); | |
} | |
else if (type.flags & (1024 | 2048)) { | |
resolveClassOrInterfaceMembers(type); | |
} | |
else if (type.flags & 65536) { | |
resolveAnonymousTypeMembers(type); | |
} | |
else if (type.flags & 8192) { | |
resolveTupleTypeMembers(type); | |
} | |
else if (type.flags & 16384) { | |
resolveUnionTypeMembers(type); | |
} | |
else if (type.flags & 32768) { | |
resolveIntersectionTypeMembers(type); | |
} | |
} | |
return type; | |
} | |
function getPropertiesOfObjectType(type) { | |
if (type.flags & 80896) { | |
return resolveStructuredTypeMembers(type).properties; | |
} | |
return emptyArray; | |
} | |
function getPropertyOfObjectType(type, name) { | |
if (type.flags & 80896) { | |
var resolved = resolveStructuredTypeMembers(type); | |
if (ts.hasProperty(resolved.members, name)) { | |
var symbol = resolved.members[name]; | |
if (symbolIsValue(symbol)) { | |
return symbol; | |
} | |
} | |
} | |
} | |
function getPropertiesOfUnionOrIntersectionType(type) { | |
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]; | |
getPropertyOfUnionOrIntersectionType(type, prop.name); | |
} | |
if (type.flags & 16384) { | |
break; | |
} | |
} | |
return type.resolvedProperties ? symbolsToArray(type.resolvedProperties) : emptyArray; | |
} | |
function getPropertiesOfType(type) { | |
type = getApparentType(type); | |
return type.flags & 49152 ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); | |
} | |
function getApparentTypeOfTypeParameter(type) { | |
if (!type.resolvedApparentType) { | |
var constraintType = getConstraintOfTypeParameter(type); | |
while (constraintType && constraintType.flags & 512) { | |
constraintType = getConstraintOfTypeParameter(constraintType); | |
} | |
type.resolvedApparentType = getTypeWithThisArgument(constraintType || emptyObjectType, type); | |
} | |
return type.resolvedApparentType; | |
} | |
function getApparentType(type) { | |
if (type.flags & 512) { | |
type = getApparentTypeOfTypeParameter(type); | |
} | |
if (type.flags & 258) { | |
type = globalStringType; | |
} | |
else if (type.flags & 132) { | |
type = globalNumberType; | |
} | |
else if (type.flags & 8) { | |
type = globalBooleanType; | |
} | |
else if (type.flags & 16777216) { | |
type = getGlobalESSymbolType(); | |
} | |
return type; | |
} | |
function createUnionOrIntersectionProperty(containingType, name) { | |
var types = containingType.types; | |
var props; | |
var commonFlags = (containingType.flags & 32768) ? 536870912 : 0; | |
for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { | |
var current = types_2[_i]; | |
var type = getApparentType(current); | |
if (type !== unknownType) { | |
var prop = getPropertyOfType(type, name); | |
if (prop && !(getDeclarationFlagsFromSymbol(prop) & (8 | 16))) { | |
commonFlags &= prop.flags; | |
if (!props) { | |
props = [prop]; | |
} | |
else if (!ts.contains(props, prop)) { | |
props.push(prop); | |
} | |
} | |
else if (containingType.flags & 16384) { | |
return undefined; | |
} | |
} | |
} | |
if (!props) { | |
return undefined; | |
} | |
if (props.length === 1) { | |
return props[0]; | |
} | |
var propTypes = []; | |
var declarations = []; | |
for (var _a = 0, props_1 = props; _a < props_1.length; _a++) { | |
var prop = props_1[_a]; | |
if (prop.declarations) { | |
ts.addRange(declarations, prop.declarations); | |
} | |
propTypes.push(getTypeOfSymbol(prop)); | |
} | |
var result = createSymbol(4 | | |
67108864 | | |
268435456 | | |
commonFlags, name); | |
result.containingType = containingType; | |
result.declarations = declarations; | |
result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes); | |
return result; | |
} | |
function getPropertyOfUnionOrIntersectionType(type, name) { | |
var properties = type.resolvedProperties || (type.resolvedProperties = {}); | |
if (ts.hasProperty(properties, name)) { | |
return properties[name]; | |
} | |
var property = createUnionOrIntersectionProperty(type, name); | |
if (property) { | |
properties[name] = property; | |
} | |
return property; | |
} | |
function getPropertyOfType(type, name) { | |
type = getApparentType(type); | |
if (type.flags & 80896) { | |
var resolved = resolveStructuredTypeMembers(type); | |
if (ts.hasProperty(resolved.members, name)) { | |
var symbol = resolved.members[name]; | |
if (symbolIsValue(symbol)) { | |
return symbol; | |
} | |
} | |
if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { | |
var symbol = getPropertyOfObjectType(globalFunctionType, name); | |
if (symbol) { | |
return symbol; | |
} | |
} | |
return getPropertyOfObjectType(globalObjectType, name); | |
} | |
if (type.flags & 49152) { | |
return getPropertyOfUnionOrIntersectionType(type, name); | |
} | |
return undefined; | |
} | |
function getSignaturesOfStructuredType(type, kind) { | |
if (type.flags & 130048) { | |
var resolved = resolveStructuredTypeMembers(type); | |
return kind === 0 ? resolved.callSignatures : resolved.constructSignatures; | |
} | |
return emptyArray; | |
} | |
function getSignaturesOfType(type, kind) { | |
return getSignaturesOfStructuredType(getApparentType(type), kind); | |
} | |
function getIndexInfoOfStructuredType(type, kind) { | |
if (type.flags & 130048) { | |
var resolved = resolveStructuredTypeMembers(type); | |
return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo; | |
} | |
} | |
function getIndexTypeOfStructuredType(type, kind) { | |
var info = getIndexInfoOfStructuredType(type, kind); | |
return info && info.type; | |
} | |
function getIndexInfoOfType(type, kind) { | |
return getIndexInfoOfStructuredType(getApparentType(type), kind); | |
} | |
function getIndexTypeOfType(type, kind) { | |
return getIndexTypeOfStructuredType(getApparentType(type), kind); | |
} | |
function getImplicitIndexTypeOfType(type, kind) { | |
if (isObjectLiteralType(type)) { | |
var propTypes = []; | |
for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) { | |
var prop = _a[_i]; | |
if (kind === 0 || isNumericLiteralName(prop.name)) { | |
propTypes.push(getTypeOfSymbol(prop)); | |
} | |
} | |
if (propTypes.length) { | |
return getUnionType(propTypes); | |
} | |
} | |
return undefined; | |
} | |
function getTypeParametersFromJSDocTemplate(declaration) { | |
if (declaration.flags & 134217728) { | |
var templateTag = ts.getJSDocTemplateTag(declaration); | |
if (templateTag) { | |
return getTypeParametersFromDeclaration(templateTag.typeParameters); | |
} | |
} | |
return undefined; | |
} | |
function getTypeParametersFromDeclaration(typeParameterDeclarations) { | |
var result = []; | |
ts.forEach(typeParameterDeclarations, function (node) { | |
var tp = getDeclaredTypeOfTypeParameter(node.symbol); | |
if (!ts.contains(result, tp)) { | |
result.push(tp); | |
} | |
}); | |
return result; | |
} | |
function symbolsToArray(symbols) { | |
var result = []; | |
for (var id in symbols) { | |
if (!isReservedMemberName(id)) { | |
result.push(symbols[id]); | |
} | |
} | |
return result; | |
} | |
function isOptionalParameter(node) { | |
if (node.flags & 134217728) { | |
if (node.type && node.type.kind === 267) { | |
return true; | |
} | |
var paramTag = ts.getCorrespondingJSDocParameterTag(node); | |
if (paramTag) { | |
if (paramTag.isBracketed) { | |
return true; | |
} | |
if (paramTag.typeExpression) { | |
return paramTag.typeExpression.type.kind === 267; | |
} | |
} | |
} | |
if (ts.hasQuestionToken(node)) { | |
return true; | |
} | |
if (node.initializer) { | |
var signatureDeclaration = node.parent; | |
var signature = getSignatureFromDeclaration(signatureDeclaration); | |
var parameterIndex = ts.indexOf(signatureDeclaration.parameters, node); | |
ts.Debug.assert(parameterIndex >= 0); | |
return parameterIndex >= signature.minArgumentCount; | |
} | |
return false; | |
} | |
function createTypePredicateFromTypePredicateNode(node) { | |
if (node.parameterName.kind === 69) { | |
var parameterName = node.parameterName; | |
return { | |
kind: 1, | |
parameterName: parameterName ? parameterName.text : undefined, | |
parameterIndex: parameterName ? getTypePredicateParameterIndex(node.parent.parameters, parameterName) : undefined, | |
type: getTypeFromTypeNode(node.type) | |
}; | |
} | |
else { | |
return { | |
kind: 0, | |
type: getTypeFromTypeNode(node.type) | |
}; | |
} | |
} | |
function getSignatureFromDeclaration(declaration) { | |
var links = getNodeLinks(declaration); | |
if (!links.resolvedSignature) { | |
var classType = declaration.kind === 147 ? | |
getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) | |
: undefined; | |
var typeParameters = classType ? classType.localTypeParameters : | |
declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : | |
getTypeParametersFromJSDocTemplate(declaration); | |
var parameters = []; | |
var hasStringLiterals = false; | |
var minArgumentCount = -1; | |
var thisType = undefined; | |
var hasThisParameter = void 0; | |
var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); | |
var returnType = undefined; | |
var typePredicate = undefined; | |
for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { | |
var param = declaration.parameters[i]; | |
var paramSymbol = param.symbol; | |
if (paramSymbol && !!(paramSymbol.flags & 4) && !ts.isBindingPattern(param.name)) { | |
var resolvedSymbol = resolveName(param, paramSymbol.name, 107455, undefined, undefined); | |
paramSymbol = resolvedSymbol; | |
} | |
if (i === 0 && paramSymbol.name === "this") { | |
hasThisParameter = true; | |
thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; | |
} | |
else { | |
parameters.push(paramSymbol); | |
} | |
if (param.type && param.type.kind === 165) { | |
hasStringLiterals = true; | |
} | |
if (param.initializer || param.questionToken || param.dotDotDotToken) { | |
if (minArgumentCount < 0) { | |
minArgumentCount = i - (hasThisParameter ? 1 : 0); | |
} | |
} | |
else { | |
minArgumentCount = -1; | |
} | |
} | |
if (minArgumentCount < 0) { | |
minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); | |
} | |
if (isJSConstructSignature) { | |
minArgumentCount--; | |
returnType = getTypeFromTypeNode(declaration.parameters[0].type); | |
} | |
else if (classType) { | |
returnType = classType; | |
} | |
else if (declaration.type) { | |
returnType = getTypeFromTypeNode(declaration.type); | |
if (declaration.type.kind === 153) { | |
typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); | |
} | |
} | |
else { | |
if (declaration.flags & 134217728) { | |
var type = getReturnTypeFromJSDocComment(declaration); | |
if (type && type !== unknownType) { | |
returnType = type; | |
} | |
} | |
if (declaration.kind === 148 && !ts.hasDynamicName(declaration)) { | |
var setter = ts.getDeclarationOfKind(declaration.symbol, 149); | |
returnType = getAnnotatedAccessorType(setter); | |
} | |
if (!returnType && ts.nodeIsMissing(declaration.body)) { | |
returnType = anyType; | |
} | |
} | |
links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); | |
} | |
return links.resolvedSignature; | |
} | |
function getSignaturesOfSymbol(symbol) { | |
if (!symbol) | |
return emptyArray; | |
var result = []; | |
for (var i = 0, len = symbol.declarations.length; i < len; i++) { | |
var node = symbol.declarations[i]; | |
switch (node.kind) { | |
case 155: | |
case 156: | |
case 219: | |
case 146: | |
case 145: | |
case 147: | |
case 150: | |
case 151: | |
case 152: | |
case 148: | |
case 149: | |
case 178: | |
case 179: | |
case 268: | |
if (i > 0 && node.body) { | |
var previous = symbol.declarations[i - 1]; | |
if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { | |
break; | |
} | |
} | |
result.push(getSignatureFromDeclaration(node)); | |
} | |
} | |
return result; | |
} | |
function resolveExternalModuleTypeByLiteral(name) { | |
var moduleSym = resolveExternalModuleName(name, name); | |
if (moduleSym) { | |
var resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); | |
if (resolvedModuleSymbol) { | |
return getTypeOfSymbol(resolvedModuleSymbol); | |
} | |
} | |
return anyType; | |
} | |
function getReturnTypeOfSignature(signature) { | |
if (!signature.resolvedReturnType) { | |
if (!pushTypeResolution(signature, 3)) { | |
return unknownType; | |
} | |
var type = void 0; | |
if (signature.target) { | |
type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); | |
} | |
else if (signature.unionSignatures) { | |
type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature)); | |
} | |
else { | |
type = getReturnTypeFromBody(signature.declaration); | |
} | |
if (!popTypeResolution()) { | |
type = anyType; | |
if (compilerOptions.noImplicitAny) { | |
var declaration = signature.declaration; | |
if (declaration.name) { | |
error(declaration.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(declaration.name)); | |
} | |
else { | |
error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions); | |
} | |
} | |
} | |
signature.resolvedReturnType = type; | |
} | |
return signature.resolvedReturnType; | |
} | |
function getRestTypeOfSignature(signature) { | |
if (signature.hasRestParameter) { | |
var type = getTypeOfSymbol(ts.lastOrUndefined(signature.parameters)); | |
if (type.flags & 4096 && type.target === globalArrayType) { | |
return type.typeArguments[0]; | |
} | |
} | |
return anyType; | |
} | |
function getSignatureInstantiation(signature, typeArguments) { | |
return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true); | |
} | |
function getErasedSignature(signature) { | |
if (!signature.typeParameters) | |
return signature; | |
if (!signature.erasedSignatureCache) { | |
if (signature.target) { | |
signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); | |
} | |
else { | |
signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); | |
} | |
} | |
return signature.erasedSignatureCache; | |
} | |
function getOrCreateTypeFromSignature(signature) { | |
if (!signature.isolatedSignatureType) { | |
var isConstructor = signature.declaration.kind === 147 || signature.declaration.kind === 151; | |
var type = createObjectType(65536 | 262144); | |
type.members = emptySymbols; | |
type.properties = emptyArray; | |
type.callSignatures = !isConstructor ? [signature] : emptyArray; | |
type.constructSignatures = isConstructor ? [signature] : emptyArray; | |
signature.isolatedSignatureType = type; | |
} | |
return signature.isolatedSignatureType; | |
} | |
function getIndexSymbol(symbol) { | |
return symbol.members["__index"]; | |
} | |
function getIndexDeclarationOfSymbol(symbol, kind) { | |
var syntaxKind = kind === 1 ? 129 : 131; | |
var indexSymbol = getIndexSymbol(symbol); | |
if (indexSymbol) { | |
for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { | |
var decl = _a[_i]; | |
var node = decl; | |
if (node.parameters.length === 1) { | |
var parameter = node.parameters[0]; | |
if (parameter && parameter.type && parameter.type.kind === syntaxKind) { | |
return node; | |
} | |
} | |
} | |
} | |
return undefined; | |
} | |
function createIndexInfo(type, isReadonly, declaration) { | |
return { type: type, isReadonly: isReadonly, declaration: declaration }; | |
} | |
function getIndexInfoOfSymbol(symbol, kind) { | |
var declaration = getIndexDeclarationOfSymbol(symbol, kind); | |
if (declaration) { | |
return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, (declaration.flags & 64) !== 0, declaration); | |
} | |
return undefined; | |
} | |
function getConstraintDeclaration(type) { | |
return ts.getDeclarationOfKind(type.symbol, 140).constraint; | |
} | |
function hasConstraintReferenceTo(type, target) { | |
var checked; | |
while (type && !(type.flags & 33554432) && type.flags & 512 && !ts.contains(checked, type)) { | |
if (type === target) { | |
return true; | |
} | |
(checked || (checked = [])).push(type); | |
var constraintDeclaration = getConstraintDeclaration(type); | |
type = constraintDeclaration && getTypeFromTypeNode(constraintDeclaration); | |
} | |
return false; | |
} | |
function getConstraintOfTypeParameter(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); | |
var constraint = getTypeFromTypeNode(constraintDeclaration); | |
if (hasConstraintReferenceTo(constraint, typeParameter)) { | |
error(constraintDeclaration, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(typeParameter)); | |
constraint = unknownType; | |
} | |
typeParameter.constraint = constraint; | |
} | |
} | |
return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; | |
} | |
function getParentSymbolOfTypeParameter(typeParameter) { | |
return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 140).parent); | |
} | |
function getTypeListId(types) { | |
if (types) { | |
switch (types.length) { | |
case 1: | |
return "" + types[0].id; | |
case 2: | |
return types[0].id + "," + types[1].id; | |
default: | |
var result = ""; | |
for (var i = 0; i < types.length; i++) { | |
if (i > 0) { | |
result += ","; | |
} | |
result += types[i].id; | |
} | |
return result; | |
} | |
} | |
return ""; | |
} | |
function getPropagatingFlagsOfTypes(types, excludeKinds) { | |
var result = 0; | |
for (var _i = 0, types_3 = types; _i < types_3.length; _i++) { | |
var type = types_3[_i]; | |
if (!(type.flags & excludeKinds)) { | |
result |= type.flags; | |
} | |
} | |
return result & 14680064; | |
} | |
function createTypeReference(target, typeArguments) { | |
var id = getTypeListId(typeArguments); | |
var type = target.instantiations[id]; | |
if (!type) { | |
var propagatedFlags = typeArguments ? getPropagatingFlagsOfTypes(typeArguments, 0) : 0; | |
var flags = 4096 | propagatedFlags; | |
type = target.instantiations[id] = createObjectType(flags, target.symbol); | |
type.target = target; | |
type.typeArguments = typeArguments; | |
} | |
return type; | |
} | |
function getTypeFromClassOrInterfaceReference(node, symbol) { | |
var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); | |
var typeParameters = type.localTypeParameters; | |
if (typeParameters) { | |
if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) { | |
error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length); | |
return unknownType; | |
} | |
return createTypeReference(type, ts.concatenate(type.outerTypeParameters, ts.map(node.typeArguments, getTypeFromTypeNode))); | |
} | |
if (node.typeArguments) { | |
error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type)); | |
return unknownType; | |
} | |
return type; | |
} | |
function getTypeFromTypeAliasReference(node, symbol) { | |
var type = getDeclaredTypeOfSymbol(symbol); | |
var links = getSymbolLinks(symbol); | |
var typeParameters = links.typeParameters; | |
if (typeParameters) { | |
if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) { | |
error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, symbolToString(symbol), typeParameters.length); | |
return unknownType; | |
} | |
var typeArguments = ts.map(node.typeArguments, getTypeFromTypeNode); | |
var id = getTypeListId(typeArguments); | |
return links.instantiations[id] || (links.instantiations[id] = instantiateType(type, createTypeMapper(typeParameters, typeArguments))); | |
} | |
if (node.typeArguments) { | |
error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol)); | |
return unknownType; | |
} | |
return type; | |
} | |
function getTypeFromNonGenericTypeReference(node, symbol) { | |
if (node.typeArguments) { | |
error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol)); | |
return unknownType; | |
} | |
return getDeclaredTypeOfSymbol(symbol); | |
} | |
function getTypeReferenceName(node) { | |
switch (node.kind) { | |
case 154: | |
return node.typeName; | |
case 266: | |
return node.name; | |
case 193: | |
if (ts.isSupportedExpressionWithTypeArguments(node)) { | |
return node.expression; | |
} | |
} | |
return undefined; | |
} | |
function resolveTypeReferenceName(node, typeReferenceName) { | |
if (!typeReferenceName) { | |
return unknownSymbol; | |
} | |
return resolveEntityName(typeReferenceName, 793056) || unknownSymbol; | |
} | |
function getTypeReferenceType(node, symbol) { | |
if (symbol === unknownSymbol) { | |
return unknownType; | |
} | |
if (symbol.flags & (32 | 64)) { | |
return getTypeFromClassOrInterfaceReference(node, symbol); | |
} | |
if (symbol.flags & 524288) { | |
return getTypeFromTypeAliasReference(node, symbol); | |
} | |
if (symbol.flags & 107455 && node.kind === 266) { | |
return getTypeOfSymbol(symbol); | |
} | |
return getTypeFromNonGenericTypeReference(node, symbol); | |
} | |
function getTypeFromTypeReference(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
var symbol = void 0; | |
var type = void 0; | |
if (node.kind === 266) { | |
var typeReferenceName = getTypeReferenceName(node); | |
symbol = resolveTypeReferenceName(node, typeReferenceName); | |
type = getTypeReferenceType(node, symbol); | |
links.resolvedSymbol = symbol; | |
links.resolvedType = type; | |
} | |
else { | |
var typeNameOrExpression = node.kind === 154 ? node.typeName : | |
ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : | |
undefined; | |
symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056) || unknownSymbol; | |
type = symbol === unknownSymbol ? unknownType : | |
symbol.flags & (32 | 64) ? getTypeFromClassOrInterfaceReference(node, symbol) : | |
symbol.flags & 524288 ? getTypeFromTypeAliasReference(node, symbol) : | |
getTypeFromNonGenericTypeReference(node, symbol); | |
} | |
links.resolvedSymbol = symbol; | |
links.resolvedType = type; | |
} | |
return links.resolvedType; | |
} | |
function getTypeFromTypeQueryNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = getWidenedType(checkExpression(node.exprName)); | |
} | |
return links.resolvedType; | |
} | |
function getTypeOfGlobalSymbol(symbol, arity) { | |
function getTypeDeclaration(symbol) { | |
var declarations = symbol.declarations; | |
for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { | |
var declaration = declarations_3[_i]; | |
switch (declaration.kind) { | |
case 220: | |
case 221: | |
case 223: | |
return declaration; | |
} | |
} | |
} | |
if (!symbol) { | |
return arity ? emptyGenericType : emptyObjectType; | |
} | |
var type = getDeclaredTypeOfSymbol(symbol); | |
if (!(type.flags & 80896)) { | |
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); | |
return arity ? emptyGenericType : emptyObjectType; | |
} | |
if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { | |
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity); | |
return arity ? emptyGenericType : emptyObjectType; | |
} | |
return type; | |
} | |
function getGlobalValueSymbol(name) { | |
return getGlobalSymbol(name, 107455, ts.Diagnostics.Cannot_find_global_value_0); | |
} | |
function getGlobalTypeSymbol(name) { | |
return getGlobalSymbol(name, 793056, ts.Diagnostics.Cannot_find_global_type_0); | |
} | |
function getGlobalSymbol(name, meaning, diagnostic) { | |
return resolveName(undefined, name, meaning, diagnostic, name); | |
} | |
function getGlobalType(name, arity) { | |
if (arity === void 0) { arity = 0; } | |
return getTypeOfGlobalSymbol(getGlobalTypeSymbol(name), arity); | |
} | |
function getExportedTypeFromNamespace(namespace, name) { | |
var namespaceSymbol = getGlobalSymbol(namespace, 1536, undefined); | |
var typeSymbol = namespaceSymbol && getSymbol(namespaceSymbol.exports, name, 793056); | |
return typeSymbol && getDeclaredTypeOfSymbol(typeSymbol); | |
} | |
function createTypedPropertyDescriptorType(propertyType) { | |
var globalTypedPropertyDescriptorType = getGlobalTypedPropertyDescriptorType(); | |
return globalTypedPropertyDescriptorType !== emptyGenericType | |
? createTypeReference(globalTypedPropertyDescriptorType, [propertyType]) | |
: emptyObjectType; | |
} | |
function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) { | |
return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType; | |
} | |
function createIterableType(elementType) { | |
return createTypeFromGenericGlobalType(getGlobalIterableType(), [elementType]); | |
} | |
function createIterableIteratorType(elementType) { | |
return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(), [elementType]); | |
} | |
function createArrayType(elementType) { | |
return createTypeFromGenericGlobalType(globalArrayType, [elementType]); | |
} | |
function getTypeFromArrayTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType)); | |
} | |
return links.resolvedType; | |
} | |
function createTupleType(elementTypes) { | |
var id = getTypeListId(elementTypes); | |
return tupleTypes[id] || (tupleTypes[id] = createNewTupleType(elementTypes)); | |
} | |
function createNewTupleType(elementTypes) { | |
var propagatedFlags = getPropagatingFlagsOfTypes(elementTypes, 0); | |
var type = createObjectType(8192 | propagatedFlags); | |
type.elementTypes = elementTypes; | |
return type; | |
} | |
function getTypeFromTupleTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode)); | |
} | |
return links.resolvedType; | |
} | |
function addTypeToSet(typeSet, type, typeSetKind) { | |
if (type.flags & typeSetKind) { | |
addTypesToSet(typeSet, type.types, typeSetKind); | |
} | |
else if (type.flags & (1 | 32 | 64)) { | |
if (type.flags & 1) | |
typeSet.containsAny = true; | |
if (type.flags & 32) | |
typeSet.containsUndefined = true; | |
if (type.flags & 64) | |
typeSet.containsNull = true; | |
} | |
else if (type !== emptyUnionType && !ts.contains(typeSet, type)) { | |
typeSet.push(type); | |
} | |
} | |
function addTypesToSet(typeSet, types, typeSetKind) { | |
for (var _i = 0, types_4 = types; _i < types_4.length; _i++) { | |
var type = types_4[_i]; | |
addTypeToSet(typeSet, type, typeSetKind); | |
} | |
} | |
function isSubtypeOfAny(candidate, types) { | |
for (var i = 0, len = types.length; i < len; i++) { | |
if (candidate !== types[i] && isTypeSubtypeOf(candidate, types[i])) { | |
return true; | |
} | |
} | |
return false; | |
} | |
function removeSubtypes(types) { | |
var i = types.length; | |
while (i > 0) { | |
i--; | |
if (isSubtypeOfAny(types[i], types)) { | |
types.splice(i, 1); | |
} | |
} | |
} | |
function getUnionType(types, noSubtypeReduction) { | |
if (types.length === 0) { | |
return emptyUnionType; | |
} | |
var typeSet = []; | |
addTypesToSet(typeSet, types, 16384); | |
if (typeSet.containsAny) { | |
return anyType; | |
} | |
if (strictNullChecks) { | |
if (typeSet.containsNull) | |
typeSet.push(nullType); | |
if (typeSet.containsUndefined) | |
typeSet.push(undefinedType); | |
} | |
if (!noSubtypeReduction) { | |
removeSubtypes(typeSet); | |
} | |
if (typeSet.length === 0) { | |
return typeSet.containsNull ? nullType : | |
typeSet.containsUndefined ? undefinedType : | |
emptyUnionType; | |
} | |
else if (typeSet.length === 1) { | |
return typeSet[0]; | |
} | |
var id = getTypeListId(typeSet); | |
var type = unionTypes[id]; | |
if (!type) { | |
var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 96); | |
type = unionTypes[id] = createObjectType(16384 | propagatedFlags); | |
type.types = typeSet; | |
} | |
return type; | |
} | |
function getTypeFromUnionTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true); | |
} | |
return links.resolvedType; | |
} | |
function getIntersectionType(types) { | |
if (types.length === 0) { | |
return emptyObjectType; | |
} | |
var typeSet = []; | |
addTypesToSet(typeSet, types, 32768); | |
if (typeSet.containsAny) { | |
return anyType; | |
} | |
if (strictNullChecks) { | |
if (typeSet.containsNull) | |
typeSet.push(nullType); | |
if (typeSet.containsUndefined) | |
typeSet.push(undefinedType); | |
} | |
if (typeSet.length === 1) { | |
return typeSet[0]; | |
} | |
var id = getTypeListId(typeSet); | |
var type = intersectionTypes[id]; | |
if (!type) { | |
var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 96); | |
type = intersectionTypes[id] = createObjectType(32768 | propagatedFlags); | |
type.types = typeSet; | |
} | |
return type; | |
} | |
function getTypeFromIntersectionTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = getIntersectionType(ts.map(node.types, getTypeFromTypeNode)); | |
} | |
return links.resolvedType; | |
} | |
function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = createObjectType(65536, node.symbol); | |
} | |
return links.resolvedType; | |
} | |
function getStringLiteralTypeForText(text) { | |
if (ts.hasProperty(stringLiteralTypes, text)) { | |
return stringLiteralTypes[text]; | |
} | |
var type = stringLiteralTypes[text] = createType(256); | |
type.text = text; | |
return type; | |
} | |
function getTypeFromStringLiteralTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = getStringLiteralTypeForText(node.text); | |
} | |
return links.resolvedType; | |
} | |
function getTypeFromJSDocVariadicType(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
var type = getTypeFromTypeNode(node.type); | |
links.resolvedType = type ? createArrayType(type) : unknownType; | |
} | |
return links.resolvedType; | |
} | |
function getTypeFromJSDocTupleType(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
var types = ts.map(node.types, getTypeFromTypeNode); | |
links.resolvedType = createTupleType(types); | |
} | |
return links.resolvedType; | |
} | |
function getThisType(node) { | |
var container = ts.getThisContainer(node, false); | |
var parent = container && container.parent; | |
if (parent && (ts.isClassLike(parent) || parent.kind === 221)) { | |
if (!(container.flags & 32) && | |
(container.kind !== 147 || ts.isNodeDescendentOf(node, container.body))) { | |
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; | |
} | |
} | |
error(node, ts.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface); | |
return unknownType; | |
} | |
function getTypeFromThisTypeNode(node) { | |
var links = getNodeLinks(node); | |
if (!links.resolvedType) { | |
links.resolvedType = getThisType(node); | |
} | |
return links.resolvedType; | |
} | |
function getTypeFromTypeNode(node) { | |
switch (node.kind) { | |
case 117: | |
case 257: | |
case 258: | |
return anyType; | |
case 131: | |
return stringType; | |
case 129: | |
return numberType; | |
case 120: | |
return booleanType; | |
case 132: | |
return esSymbolType; | |
case 103: | |
return voidType; | |
case 134: | |
return undefinedType; | |
case 93: | |
return nullType; | |
case 164: | |
return getTypeFromThisTypeNode(node); | |
case 165: | |
return getTypeFromStringLiteralTypeNode(node); | |
case 154: | |
case 266: | |
return getTypeFromTypeReference(node); | |
case 153: | |
return booleanType; | |
case 193: | |
return getTypeFromTypeReference(node); | |
case 157: | |
return getTypeFromTypeQueryNode(node); | |
case 159: | |
case 259: | |
return getTypeFromArrayTypeNode(node); | |
case 160: | |
return getTypeFromTupleTypeNode(node); | |
case 161: | |
case 260: | |
return getTypeFromUnionTypeNode(node); | |
case 162: | |
return getTypeFromIntersectionTypeNode(node); | |
case 163: | |
case 262: | |
case 263: | |
case 270: | |
case 271: | |
case 267: | |
return getTypeFromTypeNode(node.type); | |
case 155: | |
case 156: | |
case 158: | |
case 268: | |
case 264: | |
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); | |
case 69: | |
case 138: | |
var symbol = getSymbolAtLocation(node); | |
return symbol && getDeclaredTypeOfSymbol(symbol); | |
case 261: | |
return getTypeFromJSDocTupleType(node); | |
case 269: | |
return getTypeFromJSDocVariadicType(node); | |
default: | |
return unknownType; | |
} | |
} | |
function instantiateList(items, mapper, instantiator) { | |
if (items && items.length) { | |
var result = []; | |
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { | |
var v = items_1[_i]; | |
result.push(instantiator(v, mapper)); | |
} | |
return result; | |
} | |
return items; | |
} | |
function createUnaryTypeMapper(source, target) { | |
return function (t) { return t === source ? target : t; }; | |
} | |
function createBinaryTypeMapper(source1, target1, source2, target2) { | |
return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; | |
} | |
function createArrayTypeMapper(sources, targets) { | |
return function (t) { | |
for (var i = 0; i < sources.length; i++) { | |
if (t === sources[i]) { | |
return targets ? targets[i] : anyType; | |
} | |
} | |
return t; | |
}; | |
} | |
function createTypeMapper(sources, targets) { | |
var count = sources.length; | |
var mapper = count == 1 ? createUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : | |
count == 2 ? createBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) : | |
createArrayTypeMapper(sources, targets); | |
mapper.mappedTypes = sources; | |
return mapper; | |
} | |
function createTypeEraser(sources) { | |
return createTypeMapper(sources, undefined); | |
} | |
function getInferenceMapper(context) { | |
if (!context.mapper) { | |
var mapper = function (t) { | |
var typeParameters = context.typeParameters; | |
for (var i = 0; i < typeParameters.length; i++) { | |
if (t === typeParameters[i]) { | |
context.inferences[i].isFixed = true; | |
return getInferredType(context, i); | |
} | |
} | |
return t; | |
}; | |
mapper.mappedTypes = context.typeParameters; | |
mapper.context = context; | |
context.mapper = mapper; | |
} | |
return context.mapper; | |
} | |
function identityMapper(type) { | |
return type; | |
} | |
function combineTypeMappers(mapper1, mapper2) { | |
var mapper = function (t) { return instantiateType(mapper1(t), mapper2); }; | |
mapper.mappedTypes = mapper1.mappedTypes; | |
return mapper; | |
} | |
function cloneTypeParameter(typeParameter) { | |
var result = createType(512); | |
result.symbol = typeParameter.symbol; | |
result.target = typeParameter; | |
return result; | |
} | |
function cloneTypePredicate(predicate, mapper) { | |
if (ts.isIdentifierTypePredicate(predicate)) { | |
return { | |
kind: 1, | |
parameterName: predicate.parameterName, | |
parameterIndex: predicate.parameterIndex, | |
type: instantiateType(predicate.type, mapper) | |
}; | |
} | |
else { | |
return { | |
kind: 0, | |
type: instantiateType(predicate.type, mapper) | |
}; | |
} | |
} | |
function instantiateSignature(signature, mapper, eraseTypeParameters) { | |
var freshTypeParameters; | |
var freshTypePredicate; | |
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; | |
} | |
} | |
if (signature.typePredicate) { | |
freshTypePredicate = cloneTypePredicate(signature.typePredicate, mapper); | |
} | |
var result = createSignature(signature.declaration, freshTypeParameters, signature.thisType && instantiateType(signature.thisType, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), freshTypePredicate, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); | |
result.target = signature; | |
result.mapper = mapper; | |
return result; | |
} | |
function instantiateSymbol(symbol, mapper) { | |
if (symbol.flags & 16777216) { | |
var links = getSymbolLinks(symbol); | |
symbol = links.target; | |
mapper = combineTypeMappers(links.mapper, mapper); | |
} | |
var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name); | |
result.declarations = symbol.declarations; | |
result.parent = symbol.parent; | |
result.target = symbol; | |
result.mapper = mapper; | |
if (symbol.valueDeclaration) { | |
result.valueDeclaration = symbol.valueDeclaration; | |
} | |
return result; | |
} | |
function instantiateAnonymousType(type, mapper) { | |
if (mapper.instantiations) { | |
var cachedType = mapper.instantiations[type.id]; | |
if (cachedType) { | |
return cachedType; | |
} | |
} | |
else { | |
mapper.instantiations = []; | |
} | |
var result = createObjectType(65536 | 131072, type.symbol); | |
result.target = type; | |
result.mapper = mapper; | |
mapper.instantiations[type.id] = result; | |
return result; | |
} | |
function isSymbolInScopeOfMappedTypeParameter(symbol, mapper) { | |
var mappedTypes = mapper.mappedTypes; | |
var node = symbol.declarations[0].parent; | |
while (node) { | |
switch (node.kind) { | |
case 155: | |
case 156: | |
case 219: | |
case 146: | |
case 145: | |
case 147: | |
case 150: | |
case 151: | |
case 152: | |
case 148: | |
case 149: | |
case 178: | |
case 179: | |
case 220: | |
case 191: | |
case 221: | |
case 222: | |
var declaration = node; | |
if (declaration.typeParameters) { | |
for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { | |
var d = _a[_i]; | |
if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { | |
return true; | |
} | |
} | |
} | |
if (ts.isClassLike(node) || node.kind === 221) { | |
var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; | |
if (thisType && ts.contains(mappedTypes, thisType)) { | |
return true; | |
} | |
} | |
break; | |
case 224: | |
case 255: | |
return false; | |
} | |
node = node.parent; | |
} | |
return false; | |
} | |
function instantiateType(type, mapper) { | |
if (type && mapper !== identityMapper) { | |
if (type.flags & 512) { | |
return mapper(type); | |
} | |
if (type.flags & 65536) { | |
return type.symbol && | |
type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) && | |
(type.flags & 131072 || isSymbolInScopeOfMappedTypeParameter(type.symbol, mapper)) ? | |
instantiateAnonymousType(type, mapper) : type; | |
} | |
if (type.flags & 4096) { | |
return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); | |
} | |
if (type.flags & 8192) { | |
return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType)); | |
} | |
if (type.flags & 16384) { | |
return getUnionType(instantiateList(type.types, mapper, instantiateType), true); | |
} | |
if (type.flags & 32768) { | |
return getIntersectionType(instantiateList(type.types, mapper, instantiateType)); | |
} | |
} | |
return type; | |
} | |
function instantiateIndexInfo(info, mapper) { | |
return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration); | |
} | |
function isContextSensitive(node) { | |
ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); | |
switch (node.kind) { | |
case 178: | |
case 179: | |
return isContextSensitiveFunctionLikeDeclaration(node); | |
case 170: | |
return ts.forEach(node.properties, isContextSensitive); | |
case 169: | |
return ts.forEach(node.elements, isContextSensitive); | |
case 187: | |
return isContextSensitive(node.whenTrue) || | |
isContextSensitive(node.whenFalse); | |
case 186: | |
return node.operatorToken.kind === 52 && | |
(isContextSensitive(node.left) || isContextSensitive(node.right)); | |
case 252: | |
return isContextSensitive(node.initializer); | |
case 146: | |
case 145: | |
return isContextSensitiveFunctionLikeDeclaration(node); | |
case 177: | |
return isContextSensitive(node.expression); | |
} | |
return false; | |
} | |
function isContextSensitiveFunctionLikeDeclaration(node) { | |
var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); | |
var isNullaryArrow = node.kind === 179 && !node.parameters.length; | |
return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; | |
} | |
function isContextSensitiveFunctionOrObjectLiteralMethod(func) { | |
return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); | |
} | |
function getTypeWithoutSignatures(type) { | |
if (type.flags & 80896) { | |
var resolved = resolveStructuredTypeMembers(type); | |
if (resolved.constructSignatures.length) { | |
var result = createObjectType(65536, type.symbol); | |
result.members = resolved.members; | |
result.properties = resolved.properties; | |
result.callSignatures = emptyArray; | |
result.constructSignatures = emptyArray; | |
type = result; | |
} | |
} | |
return type; | |
} | |
function isTypeIdenticalTo(source, target) { | |
return checkTypeRelatedTo(source, target, identityRelation, undefined); | |
} | |
function compareTypesIdentical(source, target) { | |
return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0; | |
} | |
function compareTypesAssignable(source, target) { | |
return checkTypeRelatedTo(source, target, assignableRelation, undefined) ? -1 : 0; | |
} | |
function isTypeSubtypeOf(source, target) { | |
return checkTypeSubtypeOf(source, target, undefined); | |
} | |
function isTypeAssignableTo(source, target) { | |
return checkTypeAssignableTo(source, target, undefined); | |
} | |
function isTypeComparableTo(source, target) { | |
return checkTypeComparableTo(source, target, undefined); | |
} | |
function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { | |
return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); | |
} | |
function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) { | |
return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain); | |
} | |
function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) { | |
return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain); | |
} | |
function isSignatureAssignableTo(source, target, ignoreReturnTypes) { | |
return compareSignaturesRelated(source, target, ignoreReturnTypes, false, undefined, compareTypesAssignable) !== 0; | |
} | |
function compareSignaturesRelated(source, target, ignoreReturnTypes, reportErrors, errorReporter, compareTypes) { | |
if (source === target) { | |
return -1; | |
} | |
if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { | |
return 0; | |
} | |
source = getErasedSignature(source); | |
target = getErasedSignature(target); | |
var result = -1; | |
if (source.thisType && target.thisType && source.thisType !== voidType) { | |
var related = compareTypes(source.thisType, target.thisType, false) | |
|| compareTypes(target.thisType, source.thisType, reportErrors); | |
if (!related) { | |
if (reportErrors) { | |
errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); | |
} | |
return 0; | |
} | |
result &= related; | |
} | |
var sourceMax = getNumNonRestParameters(source); | |
var targetMax = getNumNonRestParameters(target); | |
var checkCount = getNumParametersToCheckForSignatureRelatability(source, sourceMax, target, targetMax); | |
var sourceParams = source.parameters; | |
var targetParams = target.parameters; | |
for (var i = 0; i < checkCount; i++) { | |
var s = i < sourceMax ? getTypeOfParameter(sourceParams[i]) : getRestTypeOfSignature(source); | |
var t = i < targetMax ? getTypeOfParameter(targetParams[i]) : getRestTypeOfSignature(target); | |
var related = compareTypes(s, t, false) || compareTypes(t, s, reportErrors); | |
if (!related) { | |
if (reportErrors) { | |
errorReporter(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, sourceParams[i < sourceMax ? i : sourceMax].name, targetParams[i < targetMax ? i : targetMax].name); | |
} | |
return 0; | |
} | |
result &= related; | |
} | |
if (!ignoreReturnTypes) { | |
var targetReturnType = getReturnTypeOfSignature(target); | |
if (targetReturnType === voidType) { | |
return result; | |
} | |
var sourceReturnType = getReturnTypeOfSignature(source); | |
if (target.typePredicate) { | |
if (source.typePredicate) { | |
result &= compareTypePredicateRelatedTo(source.typePredicate, target.typePredicate, reportErrors, errorReporter, compareTypes); | |
} | |
else if (ts.isIdentifierTypePredicate(target.typePredicate)) { | |
if (reportErrors) { | |
errorReporter(ts.Diagnostics.Signature_0_must_have_a_type_predicate, signatureToString(source)); | |
} | |
return 0; | |
} | |
} | |
else { | |
result &= compareTypes(sourceReturnType, targetReturnType, reportErrors); | |
} | |
} | |
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) { | |
var sourceIdentifierPredicate = source; | |
var targetIdentifierPredicate = target; | |
if (sourceIdentifierPredicate.parameterIndex !== targetIdentifierPredicate.parameterIndex) { | |
if (reportErrors) { | |
errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourceIdentifierPredicate.parameterName, targetIdentifierPredicate.parameterName); | |
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); | |
} | |
return 0; | |
} | |
} | |
var related = compareTypes(source.type, target.type, reportErrors); | |
if (related === 0 && reportErrors) { | |
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); | |
} | |
return related; | |
} | |
function isImplementationCompatibleWithOverload(implementation, overload) { | |
var erasedSource = getErasedSignature(implementation); | |
var erasedTarget = getErasedSignature(overload); | |
var sourceReturnType = getReturnTypeOfSignature(erasedSource); | |
var targetReturnType = getReturnTypeOfSignature(erasedTarget); | |
if (targetReturnType === voidType | |
|| checkTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation, undefined) | |
|| checkTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation, undefined)) { | |
return isSignatureAssignableTo(erasedSource, erasedTarget, true); | |
} | |
return false; | |
} | |
function getNumNonRestParameters(signature) { | |
var numParams = signature.parameters.length; | |
return signature.hasRestParameter ? | |
numParams - 1 : | |
numParams; | |
} | |
function getNumParametersToCheckForSignatureRelatability(source, sourceNonRestParamCount, target, targetNonRestParamCount) { | |
if (source.hasRestParameter === target.hasRestParameter) { | |
if (source.hasRestParameter) { | |
return Math.max(sourceNonRestParamCount, targetNonRestParamCount) + 1; | |
} | |
else { | |
return Math.min(sourceNonRestParamCount, targetNonRestParamCount); | |
} | |
} | |
else { | |
return source.hasRestParameter ? | |
targetNonRestParamCount : | |
sourceNonRestParamCount; | |
} | |
} | |
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) { | |
var errorInfo; | |
var sourceStack; | |
var targetStack; | |
var maybeStack; | |
var expandingFlags; | |
var depth = 0; | |
var overflow = false; | |
ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); | |
var result = isRelatedTo(source, target, !!errorNode, headMessage); | |
if (overflow) { | |
error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); | |
} | |
else if (errorInfo) { | |
if (containingMessageChain) { | |
errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); | |
} | |
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); | |
} | |
return result !== 0; | |
function reportError(message, arg0, arg1, arg2) { | |
ts.Debug.assert(!!errorNode); | |
errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); | |
} | |
function reportRelationError(message, source, target) { | |
var sourceType = typeToString(source); | |
var targetType = typeToString(target); | |
if (sourceType === targetType) { | |
sourceType = typeToString(source, undefined, 128); | |
targetType = typeToString(target, undefined, 128); | |
} | |
if (!message) { | |
message = relation === comparableRelation ? | |
ts.Diagnostics.Type_0_is_not_comparable_to_type_1 : | |
ts.Diagnostics.Type_0_is_not_assignable_to_type_1; | |
} | |
reportError(message, sourceType, targetType); | |
} | |
function isRelatedTo(source, target, reportErrors, headMessage) { | |
var result; | |
if (source === target) | |
return -1; | |
if (relation === identityRelation) { | |
return isIdenticalTo(source, target); | |
} | |
if (target.flags & 1) | |
return -1; | |
if (source.flags & 32) { | |
if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) | |
return -1; | |
} | |
if (source.flags & 64) { | |
if (!strictNullChecks || target.flags & 64) | |
return -1; | |
} | |
if (source.flags & 128 && target === numberType) | |
return -1; | |
if (source.flags & 128 && target.flags & 128) { | |
if (result = enumRelatedTo(source, target, reportErrors)) { | |
return result; | |
} | |
} | |
if (source.flags & 256 && target === stringType) | |
return -1; | |
if (relation === assignableRelation || relation === comparableRelation) { | |
if (isTypeAny(source)) | |
return -1; | |
if (source === numberType && target.flags & 128) | |
return -1; | |
} | |
if (source.flags & 8 && target.flags & 8) { | |
return -1; | |
} | |
if (source.flags & 1048576) { | |
if (hasExcessProperties(source, target, reportErrors)) { | |
if (reportErrors) { | |
reportRelationError(headMessage, source, target); | |
} | |
return 0; | |
} | |
if (target.flags & 49152) { | |
source = getRegularTypeOfObjectLiteral(source); | |
} | |
} | |
var saveErrorInfo = errorInfo; | |
if (source.flags & 16384) { | |
if (relation === comparableRelation) { | |
result = someTypeRelatedToType(source, target, reportErrors); | |
} | |
else { | |
result = eachTypeRelatedToType(source, target, reportErrors); | |
} | |
if (result) { | |
return result; | |
} | |
} | |
else if (target.flags & 32768) { | |
result = typeRelatedToEachType(source, target, reportErrors); | |
if (result) { | |
return result; | |
} | |
} | |
else { | |
if (source.flags & 32768) { | |
if (result = someTypeRelatedToType(source, target, false)) { | |
return result; | |
} | |
} | |
if (target.flags & 16384) { | |
if (result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 16777726))) { | |
return result; | |
} | |
} | |
} | |
if (source.flags & 512) { | |
var constraint = getConstraintOfTypeParameter(source); | |
if (!constraint || constraint.flags & 1) { | |
constraint = emptyObjectType; | |
} | |
var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; | |
if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { | |
errorInfo = saveErrorInfo; | |
return result; | |
} | |
} | |
else { | |
if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { | |
if (result = typeArgumentsRelatedTo(source, target, reportErrors)) { | |
return result; | |
} | |
} | |
var apparentSource = getApparentType(source); | |
if (apparentSource.flags & (80896 | 32768) && target.flags & 80896) { | |
var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !(source.flags & 16777726); | |
if (result = objectTypeRelatedTo(apparentSource, source, target, reportStructuralErrors)) { | |
errorInfo = saveErrorInfo; | |
return result; | |
} | |
} | |
} | |
if (reportErrors) { | |
reportRelationError(headMessage, source, target); | |
} | |
return 0; | |
} | |
function isIdenticalTo(source, target) { | |
var result; | |
if (source.flags & 80896 && target.flags & 80896) { | |
if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { | |
if (result = typeArgumentsRelatedTo(source, target, false)) { | |
return result; | |
} | |
} | |
return objectTypeRelatedTo(source, source, target, false); | |
} | |
if (source.flags & 16384 && target.flags & 16384 || | |
source.flags & 32768 && target.flags & 32768) { | |
if (result = eachTypeRelatedToSomeType(source, target, false)) { | |
if (result &= eachTypeRelatedToSomeType(target, source, false)) { | |
return result; | |
} | |
} | |
} | |
return 0; | |
} | |
function isKnownProperty(type, name) { | |
if (type.flags & 80896) { | |
var resolved = resolveStructuredTypeMembers(type); | |
if ((relation === assignableRelation || relation === comparableRelation) && | |
(type === globalObjectType || resolved.properties.length === 0) || | |
resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { | |
return true; | |
} | |
} | |
else if (type.flags & 49152) { | |
for (var _i = 0, _a = type.types; _i < _a.length; _i++) { | |
var t = _a[_i]; | |
if (isKnownProperty(t, name)) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
function hasExcessProperties(source, target, reportErrors) { | |
if (!(target.flags & 67108864) && maybeTypeOfKind(target, 80896)) { | |
for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { | |
var prop = _a[_i]; | |
if (!isKnownProperty(target, prop.name)) { | |
if (reportErrors) { | |
ts.Debug.assert(!!errorNode); | |
errorNode = prop.valueDeclaration; | |
reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(target)); | |
} | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
function eachTypeRelatedToSomeType(source, target, reportErrors) { | |
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; | |
var len = targetTypes.length; | |
while (len >= 2 && targetTypes[len - 1].flags & 96) { | |
var related = isRelatedTo(source, targetTypes[len - 1], false); | |
if (related) { | |
return related; | |
} | |
len--; | |
} | |
for (var i = 0; i < len; i++) { | |
var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1); | |
if (related) { | |
return related; | |
} | |
} | |
return 0; | |
} | |
function typeRelatedToEachType(source, target, reportErrors) { | |
var result = -1; | |
var targetTypes = target.types; | |
for (var _i = 0, targetTypes_1 = targetTypes; _i < targetTypes_1.length; _i++) { | |
var targetType = targetTypes_1[_i]; | |
var related = isRelatedTo(source, targetType, reportErrors); | |
if (!related) { | |
return 0; | |
} | |
result &= related; | |
} | |
return result; | |
} | |
function someTypeRelatedToType(source, target, reportErrors) { | |
var sourceTypes = source.types; | |
var len = sourceTypes.length; | |
while (len >= 2 && sourceTypes[len - 1].flags & 96) { | |
var related = isRelatedTo(sourceTypes[len - 1], target, false); | |
if (related) { | |
return related; | |
} | |
len--; | |
} | |
for (var i = 0; i < len; i++) { | |
var related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1); | |
if (related) { | |
return related; | |
} | |
} | |
return 0; | |
} | |
function eachTypeRelatedToType(source, target, reportErrors) { | |
var result = -1; | |
var sourceTypes = source.types; | |
for (var _i = 0, sourceTypes_2 = sourceTypes; _i < sourceTypes_2.length; _i++) { | |
var sourceType = sourceTypes_2[_i]; | |
var related = isRelatedTo(sourceType, target, reportErrors); | |
if (!related) { | |
return 0; | |
} | |
result &= related; | |
} | |
return result; | |
} | |
function typeArgumentsRelatedTo(source, target, reportErrors) { | |
var sources = source.typeArguments || emptyArray; | |
var targets = target.typeArguments || 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 related = isRelatedTo(sources[i], targets[i], reportErrors); | |
if (!related) { | |
return 0; | |
} | |
result &= related; | |
} | |
return result; | |
} | |
function objectTypeRelatedTo(source, originalSource, target, reportErrors) { | |
if (overflow) { | |
return 0; | |
} | |
var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id; | |
var related = relation[id]; | |
if (related !== undefined) { | |
if (reportErrors && related === 2) { | |
relation[id] = 3; | |
} | |
else { | |
return related === 1 ? -1 : 0; | |
} | |
} | |
if (depth > 0) { | |
for (var i = 0; i < depth; i++) { | |
if (maybeStack[i][id]) { | |
return 1; | |
} | |
} | |
if (depth === 100) { | |
overflow = true; | |
return 0; | |
} | |
} | |
else { | |
sourceStack = []; | |
targetStack = []; | |
maybeStack = []; | |
expandingFlags = 0; | |
} | |
sourceStack[depth] = source; | |
targetStack[depth] = target; | |
maybeStack[depth] = {}; | |
maybeStack[depth][id] = 1; | |
depth++; | |
var saveExpandingFlags = expandingFlags; | |
if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack, depth)) | |
expandingFlags |= 1; | |
if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack, depth)) | |
expandingFlags |= 2; | |
var result; | |
if (expandingFlags === 3) { | |
result = 1; | |
} | |
else { | |
result = propertiesRelatedTo(source, target, reportErrors); | |
if (result) { | |
result &= signaturesRelatedTo(source, target, 0, reportErrors); | |
if (result) { | |
result &= signaturesRelatedTo(source, target, 1, reportErrors); | |
if (result) { | |
result &= indexTypesRelatedTo(source, originalSource, target, 0, reportErrors); | |
if (result) { | |
result &= indexTypesRelatedTo(source, originalSource, target, 1, reportErrors); | |
} | |
} | |
} | |
} | |
} | |
expandingFlags = saveExpandingFlags; | |
depth--; | |
if (result) { | |
var maybeCache = maybeStack[depth]; | |
var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1]; | |
ts.copyMap(maybeCache, destinationCache); | |
} | |
else { | |
relation[id] = reportErrors ? 3 : 2; | |
} | |
return result; | |
} | |
function propertiesRelatedTo(source, target, reportErrors) { | |
if (relation === identityRelation) { | |
return propertiesIdenticalTo(source, target); | |
} | |
var result = -1; | |
var properties = getPropertiesOfObjectType(target); | |
var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 524288); | |
for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) { | |
var targetProp = properties_1[_i]; | |
var sourceProp = getPropertyOfType(source, targetProp.name); | |
if (sourceProp !== targetProp) { | |
if (!sourceProp) { | |
if (!(targetProp.flags & 536870912) || requireOptionalProperties) { | |
if (reportErrors) { | |
reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); | |
} | |
return 0; | |
} | |
} | |
else if (!(targetProp.flags & 134217728)) { | |
var sourcePropFlags = getDeclarationFlagsFromSymbol(sourceProp); | |
var targetPropFlags = getDeclarationFlagsFromSymbol(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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment